1
+ import { Repository } from "./Repository.ts"
2
+
3
+ const Repositories : Array < Repository > = [
4
+ {
5
+ name : 'deno' ,
6
+ url : 'https://deno.land/x'
7
+ } ,
8
+ {
9
+ name : 'nest' ,
10
+ url : 'https://x.nest.land'
11
+ }
12
+ ] ;
13
+
14
+ /**
15
+ * Calculate the registry url for a package.
16
+ * @param packageName deno package.
17
+ * @param registry custom registry.
18
+ */
19
+ export function getRegistryUrl ( packageName : string , registry ?: string ) : string {
20
+ // Custom Registry by url
21
+ if ( registry !== undefined ) {
22
+ let reg = trimChar ( registry as string , "/" ) ;
23
+ return `${ reg } /${ packageName } `
24
+ }
25
+
26
+ //Custom Registry provided with package: repo/pack
27
+ if ( packageName . indexOf ( '/' ) > 0 ) {
28
+ let sp = packageName . split ( '/' )
29
+ let reg = sp [ 0 ]
30
+ packageName = sp [ 1 ]
31
+ reg = getRepositoryUrl ( reg )
32
+ return `${ reg } /${ packageName } `
33
+ }
34
+
35
+ // Default deno.land registry
36
+ return `https://deno.land/x/${ packageName } ` ;
37
+ }
38
+
39
+ /**
40
+ * Trim the input string with specified char.
41
+ * @param input input string.
42
+ * @param char char to trim.
43
+ */
44
+ export function trimChar ( input : string , char : string ) : string {
45
+ char = escapeRegExp ( char ) ;
46
+ var regEx = new RegExp ( "^[" + char + "]+|[" + char + "]+$" , "g" ) ;
47
+ return input . replace ( regEx , "" ) ;
48
+ }
49
+
50
+ function getRepositoryUrl ( name : string ) : string {
51
+ let result = Repositories . find ( r => r . name === name ) ;
52
+ return result === undefined ? Repositories [ 0 ] . url : result . url ;
53
+ }
54
+
55
+ function escapeRegExp ( input : string ) : string {
56
+ return input . replace ( / [ \- \[ \] \/ \{ \} \( \) \* \+ \? \. \\ \^ \$ \| ] / g, "\\$&" ) ;
57
+ }
0 commit comments