From 3f1d53128faed9ab881cd8a036bb4918cf1db90e Mon Sep 17 00:00:00 2001 From: codxbrexx <168920439+codxbrexx@users.noreply.github.com> Date: Thu, 12 Mar 2026 03:00:05 +0530 Subject: [PATCH] fix(force): support non-GitHub repositories in --addrepo url parsing --- src/force.ts | 18 +++++++++++++++--- src/test/force.spec.ts | 29 +++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 src/test/force.spec.ts diff --git a/src/force.ts b/src/force.ts index cc0fc65..d178c4a 100644 --- a/src/force.ts +++ b/src/force.ts @@ -4,12 +4,24 @@ import args from './cli/args'; import { error, info } from './cli/messages'; import { del } from './delete'; +export const getSuffixFromUrl = (urlStr: string): string => { + const url = new URL(urlStr); + return url.pathname.replace(/^\//, '').split('/').join('-'); +}; + export const force = async (api: APIInterface): Promise => { info('Trying to deploy forcefully!'); - const suffix = args['addrepo'] - ? args['addrepo']?.split('com/')[1].split('/').join('-') - : args['projectName'].toLowerCase(); + let suffix: string; + if (args['addrepo']) { + try { + suffix = getSuffixFromUrl(args['addrepo']); + } catch (e) { + return error('Invalid repository URL'); + } + } else { + suffix = args['projectName'].toLowerCase(); + } let res = ''; diff --git a/src/test/force.spec.ts b/src/test/force.spec.ts new file mode 100644 index 0000000..054c90a --- /dev/null +++ b/src/test/force.spec.ts @@ -0,0 +1,29 @@ +import { strictEqual, throws } from 'assert'; +import { getSuffixFromUrl } from '../force'; + +describe('force URL parsing logic', () => { + it('should parse GitHub URLs correctly', () => { + strictEqual( + getSuffixFromUrl('https://github.com/mygroup/myrepo'), + 'mygroup-myrepo' + ); + }); + + it('should parse GitLab URLs correctly', () => { + strictEqual( + getSuffixFromUrl('https://gitlab.com/mygroup/myrepo'), + 'mygroup-myrepo' + ); + }); + + it('should parse arbitrary URLs correctly', () => { + strictEqual( + getSuffixFromUrl('http://git.mycompany.local/group/subgroup/repo'), + 'group-subgroup-repo' + ); + }); + + it('should throw on invalid URLs', () => { + throws(() => getSuffixFromUrl('not-a-valid-url')); + }); +});