1515import { InstanceConnectionInfo } from './instance-connection-info' ;
1616import { CloudSQLConnectorError } from './errors' ;
1717
18+ const connectionNameRegex =
19+ / ^ (?< projectId > [ ^ : ] + ( : [ ^ : ] + ) ? ) : (?< regionId > [ ^ : ] + ) : (?< instanceId > [ ^ : ] + ) $ / ;
20+
21+ // The domain name pattern in accordance with RFC 1035, RFC 1123 and RFC 2181.
22+ // From Go Connector:
23+ const domainNameRegex =
24+ / ^ (?: [ _ a - z 0 - 9 ] (?: [ _ a - z 0 - 9 - ] { 0 , 61 } [ a - z 0 - 9 ] ) ? \. ) + (?: [ a - z ] (?: [ a - z 0 - 9 - ] { 0 , 61 } [ a - z 0 - 9 ] ) ? ) ? $ / ;
25+
26+ export function isValidDomainName ( name : string ) : boolean {
27+ const matches = String ( name ) . match ( domainNameRegex ) ;
28+ return Boolean ( matches ) ;
29+ }
30+
31+ export function isInstanceConnectionName ( name : string ) : boolean {
32+ const matches = String ( name ) . match ( connectionNameRegex ) ;
33+ return Boolean ( matches ) ;
34+ }
35+
1836export function parseInstanceConnectionName (
1937 instanceConnectionName : string | undefined
2038) : InstanceConnectionInfo {
@@ -26,20 +44,8 @@ export function parseInstanceConnectionName(
2644 } ) ;
2745 }
2846
29- const connectionNameRegex =
30- / (?< projectId > [ ^ : ] + ( : [ ^ : ] + ) ? ) : (?< regionId > [ ^ : ] + ) : (?< instanceId > [ ^ : ] + ) / ;
3147 const matches = String ( instanceConnectionName ) . match ( connectionNameRegex ) ;
32- if ( ! matches ) {
33- throw new CloudSQLConnectorError ( {
34- message :
35- 'Malformed instance connection name provided: expected format ' +
36- `of "PROJECT:REGION:INSTANCE", got ${ instanceConnectionName } ` ,
37- code : 'EBADCONNECTIONNAME' ,
38- } ) ;
39- }
40-
41- const unmatchedItems = matches [ 0 ] !== matches . input ;
42- if ( unmatchedItems || ! matches . groups ) {
48+ if ( ! matches || ! matches . groups ) {
4349 throw new CloudSQLConnectorError ( {
4450 message :
4551 'Malformed instance connection name provided: expected format ' +
@@ -52,5 +58,6 @@ export function parseInstanceConnectionName(
5258 projectId : matches . groups . projectId ,
5359 regionId : matches . groups . regionId ,
5460 instanceId : matches . groups . instanceId ,
61+ domainName : undefined ,
5562 } ;
5663}
0 commit comments