1+ import semver from 'semver'
2+
13import { PackageURL } from '@socketregistry/packageurl-js'
24import { debugFn } from '@socketsecurity/registry/lib/debug'
35import { normalizePath } from '@socketsecurity/registry/lib/path'
@@ -7,11 +9,12 @@ import { spawn } from '@socketsecurity/registry/lib/spawn'
79import constants from '../../constants.mts'
810import { getPurlObject } from '../../utils/purl.mts'
911import {
10- getPkgFullNameFromPurlObj ,
12+ getPkgFullNameFromPurl ,
1113 getSocketDevPackageOverviewUrlFromPurl ,
1214} from '../../utils/socket-url.mts'
1315
1416import type { CResult } from '../../types.mts'
17+ import type { SocketArtifact } from '../../utils/alert/artifact.mts'
1518import type { SpawnOptions } from '@socketsecurity/registry/lib/spawn'
1619
1720export type GitCreateAndPushBranchOptions = {
@@ -21,10 +24,7 @@ export type GitCreateAndPushBranchOptions = {
2124}
2225
2326function formatBranchName ( name : string ) : string {
24- return name
25- . replace ( / [ - _ . \\ / ] + / g, '-' )
26- . replace ( / [ ^ - a - z A - Z 0 - 9 ] + / g, '' )
27- . replace ( / ^ - + | - + $ / g, '' )
27+ return name . replace ( / [ ^ - a - z A - Z 0 - 9 / . _ - ] + / g, '+' )
2828}
2929
3030export function getBaseGitBranch ( ) : string {
@@ -37,19 +37,54 @@ export function getBaseGitBranch(): string {
3737 )
3838}
3939
40- export function getSocketBranchName (
41- purl : string | PackageURL ,
42- newVersion : string ,
43- workspace ?: string | undefined ,
40+ export function getSocketBranchPurlTypeComponent (
41+ purl : string | PackageURL | SocketArtifact ,
4442) : string {
4543 const purlObj = getPurlObject ( purl )
46- const fmtType = formatBranchName ( purlObj . type )
47- const fmtWorkspace = workspace ? `${ formatBranchName ( workspace ) } ` : 'root'
44+ return formatBranchName ( purlObj . type )
45+ }
46+
47+ export function getSocketBranchFullNameComponent (
48+ pkgName : string | PackageURL | SocketArtifact ,
49+ ) : string {
50+ const purlObj = getPurlObject (
51+ typeof pkgName === 'string' && ! pkgName . startsWith ( 'pkg:' )
52+ ? PackageURL . fromString ( `pkg:unknown/${ pkgName } ` )
53+ : pkgName ,
54+ )
4855 const fmtMaybeNamespace = purlObj . namespace
4956 ? `${ formatBranchName ( purlObj . namespace ) } --`
5057 : ''
51- const fmtFullName = `${ fmtMaybeNamespace } ${ formatBranchName ( purlObj . name ) } `
52- const fmtVersion = formatBranchName ( purlObj . version ! )
58+ return `${ fmtMaybeNamespace } ${ formatBranchName ( purlObj . name ) } `
59+ }
60+
61+ export function getSocketBranchPackageVersionComponent (
62+ version : string | PackageURL | SocketArtifact ,
63+ ) : string {
64+ const purlObj = getPurlObject (
65+ typeof version === 'string' && ! version . startsWith ( 'pkg:' )
66+ ? PackageURL . fromString ( `pkg:unknown/unknown@${ version } ` )
67+ : version ,
68+ )
69+ return formatBranchName ( purlObj . version ! )
70+ }
71+
72+ export function getSocketBranchWorkspaceComponent (
73+ workspace : string | undefined ,
74+ ) : string {
75+ return workspace ? formatBranchName ( workspace ) : 'root'
76+ }
77+
78+ export function getSocketBranchName (
79+ purl : string | PackageURL | SocketArtifact ,
80+ newVersion : string ,
81+ workspace ?: string | undefined ,
82+ ) : string {
83+ const purlObj = getPurlObject ( purl )
84+ const fmtType = getSocketBranchPurlTypeComponent ( purlObj )
85+ const fmtWorkspace = getSocketBranchWorkspaceComponent ( workspace )
86+ const fmtFullName = getSocketBranchFullNameComponent ( purlObj )
87+ const fmtVersion = getSocketBranchPackageVersionComponent ( purlObj . version ! )
5388 const fmtNewVersion = formatBranchName ( newVersion )
5489 return `socket/${ fmtType } _${ fmtWorkspace } _${ fmtFullName } _${ fmtVersion } _${ fmtNewVersion } `
5590}
@@ -94,18 +129,21 @@ export type SocketBranchParser = (
94129) => SocketBranchParseResult | null
95130
96131export type SocketBranchParseResult = {
132+ fullName : string
97133 newVersion : string
98- purl : PackageURL
134+ type : string
99135 workspace : string
136+ version : string
100137}
101138
102139export function createSocketBranchParser (
103140 options ?: SocketBranchPatternOptions | undefined ,
104141) : SocketBranchParser {
105142 const pattern = getSocketBranchPattern ( options )
106143 return function parse ( branch : string ) : SocketBranchParseResult | null {
107- debugFn ( 'pattern' , pattern . toString ( ) )
108- const match = pattern . exec ( branch )
144+ const match = pattern . exec ( branch ) as
145+ | [ string , string , string , string , string , string ]
146+ | null
109147 if ( ! match ) {
110148 return null
111149 }
@@ -117,41 +155,43 @@ export function createSocketBranchParser(
117155 5 : newVersion ,
118156 } = match
119157 return {
120- newVersion,
121- purl : getPurlObject ( `pkg:${ type } /${ fullName } @${ version } ` ) ,
158+ fullName,
159+ newVersion : semver . coerce ( newVersion . replaceAll ( '+' , '.' ) ) ?. version ,
160+ type,
122161 workspace,
162+ version : semver . coerce ( version . replaceAll ( '+' , '.' ) ) ?. version ,
123163 } as SocketBranchParseResult
124164 }
125165}
126166
127167export function getSocketPullRequestTitle (
128- purl : string | PackageURL ,
168+ purl : string | PackageURL | SocketArtifact ,
129169 newVersion : string ,
130170 workspace ?: string | undefined ,
131171) : string {
132172 const purlObj = getPurlObject ( purl )
133- const fullName = getPkgFullNameFromPurlObj ( purlObj )
173+ const fullName = getPkgFullNameFromPurl ( purlObj )
134174 return `Bump ${ fullName } from ${ purlObj . version } to ${ newVersion } ${ workspace ? ` in ${ workspace } ` : '' } `
135175}
136176
137177export function getSocketPullRequestBody (
138- purl : string | PackageURL ,
178+ purl : string | PackageURL | SocketArtifact ,
139179 newVersion : string ,
140180 workspace ?: string | undefined ,
141181) : string {
142182 const purlObj = getPurlObject ( purl )
143- const fullName = getPkgFullNameFromPurlObj ( purlObj )
183+ const fullName = getPkgFullNameFromPurl ( purlObj )
144184 const pkgOverviewUrl = getSocketDevPackageOverviewUrlFromPurl ( purlObj )
145185 return `Bump [${ fullName } ](${ pkgOverviewUrl } ) from ${ purlObj . version } to ${ newVersion } ${ workspace ? ` in ${ workspace } ` : '' } .`
146186}
147187
148188export function getSocketCommitMessage (
149- purl : string | PackageURL ,
189+ purl : string | PackageURL | SocketArtifact ,
150190 newVersion : string ,
151191 workspace ?: string | undefined ,
152192) : string {
153193 const purlObj = getPurlObject ( purl )
154- const fullName = getPkgFullNameFromPurlObj ( purlObj )
194+ const fullName = getPkgFullNameFromPurl ( purlObj )
155195 return `socket: Bump ${ fullName } from ${ purlObj . version } to ${ newVersion } ${ workspace ? ` in ${ workspace } ` : '' } `
156196}
157197
0 commit comments