-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathadd-ext.mts
118 lines (109 loc) · 2.61 KB
/
add-ext.mts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/**
* @file addExt
* @module pathe/lib/addExt
*/
import validateString from '#internal/validate-string'
import validateURLString from '#internal/validate-url-string'
import extname from '#lib/extname'
import formatExt from '#lib/format-ext'
export default addExt
/**
* Append a file extension to `input`.
*
* Does nothing if a file extension is not provided, or the {@linkcode extname}
* of `input` is already `ext`.
*
* @category
* utils
*
* @this {void}
*
* @param {string} input
* The path or URL string to handle
* @param {string | null | undefined} ext
* The file extension to add
* @return {string}
* `input` unmodified or with new extension
*/
function addExt(
this: void,
input: string,
ext: string | null | undefined
): string
/**
* Append a file extension to `url`.
*
* Does nothing if a file extension is not provided, or the {@linkcode extname}
* of `url` is already `url`.
*
* @category
* utils
*
* @this {void}
*
* @param {URL} url
* The {@linkcode URL} to handle
* @param {string | null | undefined} ext
* The file extension to add
* @return {URL}
* `url` unmodified or with new extension
*/
function addExt(this: void, url: URL, ext: string | null | undefined): URL
/**
* Append a file extension to `input`.
*
* Does nothing if a file extension is not provided, or the {@linkcode extname}
* of `input` is already `ext`.
*
* @example
* addExt('file', null) // 'file'
* @example
* addExt('file', 'mjs') // 'file.mjs'
* @example
* addExt('file', '.mjs') // 'file.mjs'
* @example
* addExt('file.d.mts', '.mts') // 'file.d.mts'
*
* @category
* utils
*
* @this {void}
*
* @param {URL | string} input
* The {@linkcode URL}, URL string, or path to handle
* @param {string | null | undefined} ext
* The file extension to add
* @return {URL | string}
* `input` unmodified or with new extension
*/
function addExt(
this: void,
input: URL | string,
ext: string | null | undefined
): URL | string
/**
* @this {void}
*
* @param {URL | string} input
* The {@linkcode URL}, URL string, or path to handle
* @param {string | null | undefined} ext
* The file extension to add
* @return {URL | string}
* `input` unmodified or with new extension
*/
function addExt(
this: void,
input: URL | string,
ext: string | null | undefined
): URL | string {
validateURLString(input, 'input')
if (typeof input === 'string') {
if (ext !== null && ext !== undefined) {
validateString(ext, 'ext')
ext = formatExt(ext)
}
if (ext && extname(input) !== ext) input += ext
return input
}
return input.href = addExt(input.href, ext), input
}