@adhd/decompile-cli 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +175 -0
- package/bin/decompile.d.ts +2 -0
- package/bin/decompile.js +89 -0
- package/bin/decompile.js.map +1 -0
- package/package.json +35 -0
- package/src/index.d.ts +1 -0
- package/src/index.js +2 -0
- package/src/index.js.map +1 -0
- package/src/lib/extractors/index.d.ts +10 -0
- package/src/lib/extractors/index.js +228 -0
- package/src/lib/extractors/index.js.map +1 -0
- package/src/lib/extractors/local-file.d.ts +5 -0
- package/src/lib/extractors/local-file.js +22 -0
- package/src/lib/extractors/local-file.js.map +1 -0
- package/src/lib/extractors/map.d.ts +6 -0
- package/src/lib/extractors/map.js +74 -0
- package/src/lib/extractors/map.js.map +1 -0
- package/src/lib/extractors/raw-html.d.ts +7 -0
- package/src/lib/extractors/raw-html.js +93 -0
- package/src/lib/extractors/raw-html.js.map +1 -0
- package/src/lib/extractors/site.d.ts +34 -0
- package/src/lib/extractors/site.js +96 -0
- package/src/lib/extractors/site.js.map +1 -0
- package/src/lib/index.d.ts +8 -0
- package/src/lib/index.js +6 -0
- package/src/lib/index.js.map +1 -0
- package/src/lib/pipeline/index.d.ts +1 -0
- package/src/lib/pipeline/index.js +2 -0
- package/src/lib/pipeline/index.js.map +1 -0
- package/src/lib/pipeline/pipes/resolver/actions.d.ts +14 -0
- package/src/lib/pipeline/pipes/resolver/actions.js +50 -0
- package/src/lib/pipeline/pipes/resolver/actions.js.map +1 -0
- package/src/lib/pipeline/pipes/resolver/index.d.ts +1 -0
- package/src/lib/pipeline/pipes/resolver/index.js +2 -0
- package/src/lib/pipeline/pipes/resolver/index.js.map +1 -0
- package/src/lib/pipeline/stack.d.ts +23 -0
- package/src/lib/pipeline/stack.js +45 -0
- package/src/lib/pipeline/stack.js.map +1 -0
- package/src/lib/store/build.d.ts +2 -0
- package/src/lib/store/build.js +50 -0
- package/src/lib/store/build.js.map +1 -0
- package/src/lib/store/index.d.ts +92 -0
- package/src/lib/store/index.js +127 -0
- package/src/lib/store/index.js.map +1 -0
- package/src/lib/store/package.d.ts +60 -0
- package/src/lib/store/package.js +114 -0
- package/src/lib/store/package.js.map +1 -0
- package/src/lib/store/templates.d.ts +84 -0
- package/src/lib/store/templates.js +78 -0
- package/src/lib/store/templates.js.map +1 -0
- package/src/lib/store/utils.d.ts +3 -0
- package/src/lib/store/utils.js +8 -0
- package/src/lib/store/utils.js.map +1 -0
- package/src/lib/validators/index.d.ts +2 -0
- package/src/lib/validators/index.js +7 -0
- package/src/lib/validators/index.js.map +1 -0
- package/src/lib/validators/local/index.d.ts +31 -0
- package/src/lib/validators/local/index.js +93 -0
- package/src/lib/validators/local/index.js.map +1 -0
- package/src/lib/validators/local/isBase64.d.ts +2 -0
- package/src/lib/validators/local/isBase64.js +11 -0
- package/src/lib/validators/local/isBase64.js.map +1 -0
- package/src/lib/validators/local/isCSS.d.ts +2 -0
- package/src/lib/validators/local/isCSS.js +15 -0
- package/src/lib/validators/local/isCSS.js.map +1 -0
- package/src/lib/validators/local/isHTML.d.ts +2 -0
- package/src/lib/validators/local/isHTML.js +13 -0
- package/src/lib/validators/local/isHTML.js.map +1 -0
- package/src/lib/validators/local/isJS.d.ts +2 -0
- package/src/lib/validators/local/isJS.js +28 -0
- package/src/lib/validators/local/isJS.js.map +1 -0
- package/src/lib/validators/local/isJson.d.ts +2 -0
- package/src/lib/validators/local/isJson.js +40 -0
- package/src/lib/validators/local/isJson.js.map +1 -0
- package/src/lib/validators/local/isSourceMap.d.ts +11 -0
- package/src/lib/validators/local/isSourceMap.js +57 -0
- package/src/lib/validators/local/isSourceMap.js.map +1 -0
- package/src/lib/validators/url/errors.d.ts +9 -0
- package/src/lib/validators/url/errors.js +36 -0
- package/src/lib/validators/url/errors.js.map +1 -0
- package/src/lib/validators/url/index.d.ts +32 -0
- package/src/lib/validators/url/index.js +231 -0
- package/src/lib/validators/url/index.js.map +1 -0
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { BadOptionsError, FunctionRenamedError, InvalidUrlError, } from './errors.js';
|
|
2
|
+
// TODO: Use the `URL` global when targeting Node.js 10
|
|
3
|
+
import { URL as NodeURL } from 'url';
|
|
4
|
+
const URLParser = typeof URL === 'undefined' ? NodeURL : URL;
|
|
5
|
+
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
|
|
6
|
+
const DATA_URL_DEFAULT_MIME_TYPE = 'text/plain';
|
|
7
|
+
const DATA_URL_DEFAULT_CHARSET = 'us-ascii';
|
|
8
|
+
const PROTOCOL_MATCH = /^(?!(?:\w+:)?\/\/)|^\/\//;
|
|
9
|
+
const testParameter = (name, filters) => {
|
|
10
|
+
return filters.some((filter) => filter instanceof RegExp ? filter.test(name) : filter === name);
|
|
11
|
+
};
|
|
12
|
+
const normalizeDataURL = (urlString, { stripHash }) => {
|
|
13
|
+
const parts = urlString.match(/^data:(.*?),(.*?)(?:#(.*))?$/);
|
|
14
|
+
if (!parts) {
|
|
15
|
+
throw new Error(`Invalid URL: ${urlString}`);
|
|
16
|
+
}
|
|
17
|
+
const mediaType = parts[1].split(';');
|
|
18
|
+
const body = parts[2];
|
|
19
|
+
const hash = stripHash ? '' : parts[3];
|
|
20
|
+
let base64 = false;
|
|
21
|
+
if (mediaType[mediaType.length - 1] === 'base64') {
|
|
22
|
+
mediaType.pop();
|
|
23
|
+
base64 = true;
|
|
24
|
+
}
|
|
25
|
+
// Lowercase MIME type
|
|
26
|
+
const mimeType = (mediaType.shift() || '').toLowerCase();
|
|
27
|
+
const attributes = mediaType
|
|
28
|
+
.map((attribute) => {
|
|
29
|
+
// eslint-disable-next-line prefer-const
|
|
30
|
+
let [key, value = ''] = attribute
|
|
31
|
+
.split('=')
|
|
32
|
+
.map((string) => string.trim());
|
|
33
|
+
// Lowercase `charset`
|
|
34
|
+
if (key === 'charset') {
|
|
35
|
+
value = value.toLowerCase();
|
|
36
|
+
if (value === DATA_URL_DEFAULT_CHARSET) {
|
|
37
|
+
return '';
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return `${key}${value ? `=${value}` : ''}`;
|
|
41
|
+
})
|
|
42
|
+
.filter(Boolean);
|
|
43
|
+
const normalizedMediaType = [...attributes];
|
|
44
|
+
if (base64) {
|
|
45
|
+
normalizedMediaType.push('base64');
|
|
46
|
+
}
|
|
47
|
+
if (normalizedMediaType.length !== 0 ||
|
|
48
|
+
(mimeType && mimeType !== DATA_URL_DEFAULT_MIME_TYPE)) {
|
|
49
|
+
normalizedMediaType.unshift(mimeType);
|
|
50
|
+
}
|
|
51
|
+
const header = `data:${normalizedMediaType.join(';')}`;
|
|
52
|
+
const data = `${base64 ? body.trim() : body}${hash ? `#${hash}` : ''}`;
|
|
53
|
+
return `${header},${data}`;
|
|
54
|
+
};
|
|
55
|
+
export const isValidUrl = (s) => {
|
|
56
|
+
try {
|
|
57
|
+
new URL(s);
|
|
58
|
+
const u = normalizeUrl(s);
|
|
59
|
+
return !!u;
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
export const getPatch = (s) => {
|
|
66
|
+
try {
|
|
67
|
+
return normalizeUrl(s);
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
export const defaultOptions = {
|
|
74
|
+
defaultProtocol: 'https:',
|
|
75
|
+
normalizeProtocol: true,
|
|
76
|
+
forceHttp: false,
|
|
77
|
+
forceHttps: false,
|
|
78
|
+
stripAuthentication: true,
|
|
79
|
+
stripProtocol: false,
|
|
80
|
+
stripHash: false,
|
|
81
|
+
stripWWW: true,
|
|
82
|
+
returns: 'string', // "string" -> "" or "url" -> <URL>
|
|
83
|
+
removeQuery: false,
|
|
84
|
+
removeQueryParameters: [/^utm_\w+/i],
|
|
85
|
+
removeTrailingSlash: true,
|
|
86
|
+
removeDirectoryIndex: false,
|
|
87
|
+
sortQueryParameters: true,
|
|
88
|
+
};
|
|
89
|
+
export const normalizeUrl = (urlString, options = {}) => {
|
|
90
|
+
options = {
|
|
91
|
+
...defaultOptions,
|
|
92
|
+
...options,
|
|
93
|
+
};
|
|
94
|
+
if (options.removeQuery) {
|
|
95
|
+
options.removeQueryParameters = [/.*/];
|
|
96
|
+
}
|
|
97
|
+
// // TODO: Remove this at some point in the future
|
|
98
|
+
// if (Reflect.has(options, 'normalizeHttps')) {
|
|
99
|
+
// throw FunctionRenamedError('normalizeHttps');
|
|
100
|
+
// }
|
|
101
|
+
// if (Reflect.has(options, 'normalizeHttp')) {
|
|
102
|
+
// throw FunctionRenamedError('normalizeHttp');
|
|
103
|
+
// }
|
|
104
|
+
// if (Reflect.has(options, 'stripFragment')) {
|
|
105
|
+
// throw FunctionRenamedError('stripFragment');
|
|
106
|
+
// }
|
|
107
|
+
urlString = urlString.trim();
|
|
108
|
+
// Data URL
|
|
109
|
+
if (/^data:/i.test(urlString)) {
|
|
110
|
+
return normalizeDataURL(urlString, { stripHash: false, ...options });
|
|
111
|
+
}
|
|
112
|
+
const hasRelativeProtocol = urlString.startsWith('//');
|
|
113
|
+
const isRelativeUrl = !hasRelativeProtocol && /^\.*\//.test(urlString);
|
|
114
|
+
// Prepend protocol
|
|
115
|
+
if (!isRelativeUrl && options.defaultProtocol) {
|
|
116
|
+
urlString = urlString.replace(PROTOCOL_MATCH, options.defaultProtocol);
|
|
117
|
+
}
|
|
118
|
+
let urlObj;
|
|
119
|
+
try {
|
|
120
|
+
urlObj = new URLParser(urlString);
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// The native `URL` constructor throws a bare `TypeError [ERR_INVALID_URL]`
|
|
124
|
+
// with no reference to the offending input. `InvalidUrlError` exists
|
|
125
|
+
// (and is already re-exported via `ErrorTypes`) precisely for this path
|
|
126
|
+
// but was never wired to the throw site — do so here.
|
|
127
|
+
throw InvalidUrlError(urlString);
|
|
128
|
+
}
|
|
129
|
+
if (options.forceHttp && options.forceHttps) {
|
|
130
|
+
throw BadOptionsError();
|
|
131
|
+
}
|
|
132
|
+
if (options.forceHttp && urlObj.protocol === 'https:') {
|
|
133
|
+
urlObj.protocol = 'http:';
|
|
134
|
+
}
|
|
135
|
+
if (options.forceHttps && urlObj.protocol === 'http:') {
|
|
136
|
+
urlObj.protocol = 'https:';
|
|
137
|
+
}
|
|
138
|
+
// Remove auth
|
|
139
|
+
if (options.stripAuthentication) {
|
|
140
|
+
urlObj.username = '';
|
|
141
|
+
urlObj.password = '';
|
|
142
|
+
}
|
|
143
|
+
// Remove hash
|
|
144
|
+
if (options.stripHash) {
|
|
145
|
+
urlObj.hash = '';
|
|
146
|
+
}
|
|
147
|
+
// Remove duplicate slashes if not preceded by a protocol
|
|
148
|
+
if (urlObj.pathname) {
|
|
149
|
+
// TODO: Use the following instead when targeting Node.js 10
|
|
150
|
+
// `urlObj.pathname = urlObj.pathname.replace(/(?<!https?:)\/{2,}/g, '/');`
|
|
151
|
+
urlObj.pathname = urlObj.pathname.replace(/((?!:).|^)\/{2,}/g, (_, p1) => {
|
|
152
|
+
if (/^(?!\/)/g.test(p1)) {
|
|
153
|
+
return `${p1}/`;
|
|
154
|
+
}
|
|
155
|
+
return '/';
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
// Decode URI octets
|
|
159
|
+
if (urlObj.pathname) {
|
|
160
|
+
urlObj.pathname = decodeURI(urlObj.pathname);
|
|
161
|
+
}
|
|
162
|
+
// Remove directory index
|
|
163
|
+
if (options.removeDirectoryIndex === true) {
|
|
164
|
+
options.removeDirectoryIndex = [/^index\.[a-z]+$/];
|
|
165
|
+
}
|
|
166
|
+
if (Array.isArray(options.removeDirectoryIndex) &&
|
|
167
|
+
options.removeDirectoryIndex.length > 0) {
|
|
168
|
+
let pathComponents = urlObj.pathname.split('/');
|
|
169
|
+
const lastComponent = pathComponents[pathComponents.length - 1];
|
|
170
|
+
if (testParameter(lastComponent, options.removeDirectoryIndex)) {
|
|
171
|
+
pathComponents = pathComponents.slice(0, pathComponents.length - 1);
|
|
172
|
+
urlObj.pathname = pathComponents.slice(1).join('/') + '/';
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (urlObj.hostname) {
|
|
176
|
+
// Remove trailing dot
|
|
177
|
+
urlObj.hostname = urlObj.hostname.replace(/\.$/, '');
|
|
178
|
+
// Remove `www.`
|
|
179
|
+
if (options.stripWWW &&
|
|
180
|
+
/^www\.([a-z\-\d]{2,63})\.([a-z.]{2,5})$/.test(urlObj.hostname)) {
|
|
181
|
+
// Each label should be max 63 at length (min: 2).
|
|
182
|
+
// The extension should be max 5 at length (min: 2).
|
|
183
|
+
// Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names
|
|
184
|
+
urlObj.hostname = urlObj.hostname.replace(/^www\./, '');
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// Remove query unwanted parameters
|
|
188
|
+
if (Array.isArray(options.removeQueryParameters)) {
|
|
189
|
+
for (const key of [...urlObj.searchParams.keys()]) {
|
|
190
|
+
if (testParameter(key, options.removeQueryParameters)) {
|
|
191
|
+
urlObj.searchParams.delete(key);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Sort query parameters
|
|
196
|
+
if (options.sortQueryParameters) {
|
|
197
|
+
urlObj.searchParams.sort();
|
|
198
|
+
}
|
|
199
|
+
if (options.removeTrailingSlash) {
|
|
200
|
+
urlObj.pathname = urlObj.pathname.replace(/\/$/, '');
|
|
201
|
+
}
|
|
202
|
+
// Take advantage of many of the Node `url` normalizations
|
|
203
|
+
urlString = urlObj.toString();
|
|
204
|
+
// Remove ending `/`
|
|
205
|
+
if ((options.removeTrailingSlash || urlObj.pathname === '/') &&
|
|
206
|
+
urlObj.hash === '') {
|
|
207
|
+
urlString = urlString.replace(/\/$/, '');
|
|
208
|
+
}
|
|
209
|
+
// Restore relative protocol, if applicable
|
|
210
|
+
if (hasRelativeProtocol && !options.normalizeProtocol) {
|
|
211
|
+
urlString = urlString.replace(/^https?:\/\//, '//');
|
|
212
|
+
}
|
|
213
|
+
// Remove http/https
|
|
214
|
+
if (options.stripProtocol) {
|
|
215
|
+
urlString = urlString.replace(/^(?:https?:)?\/\//, '');
|
|
216
|
+
}
|
|
217
|
+
if (options.returns === 'url') {
|
|
218
|
+
return urlObj;
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
return urlString;
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
export const ErrorTypes = {
|
|
225
|
+
FunctionRenamedError,
|
|
226
|
+
BadOptionsError,
|
|
227
|
+
InvalidUrlError,
|
|
228
|
+
};
|
|
229
|
+
// TODO: Remove this for the next major release
|
|
230
|
+
export default { ensure: normalizeUrl, isValidUrl, getPatch };
|
|
231
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/validators/url/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BadOptionsError,\n FunctionRenamedError,\n InvalidUrlError,\n} from './errors.js';\n\n// TODO: Use the `URL` global when targeting Node.js 10\nimport { URL as NodeURL } from 'url';\nconst URLParser = typeof URL === 'undefined' ? NodeURL : URL;\n\ntype NormalizeOptions = {\n defaultProtocol?: string;\n normalizeProtocol?: boolean;\n forceHttp?: boolean;\n forceHttps?: boolean;\n stripAuthentication?: boolean;\n stripHash?: boolean;\n stripProtocol?: boolean;\n stripWWW?: boolean;\n returns?: string;\n removeQuery?: boolean;\n removeQueryParameters?: (string | RegExp)[];\n removeTrailingSlash?: boolean;\n removeDirectoryIndex?: boolean | (string | RegExp)[];\n sortQueryParameters?: boolean;\n};\n// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\nconst DATA_URL_DEFAULT_MIME_TYPE = 'text/plain';\nconst DATA_URL_DEFAULT_CHARSET = 'us-ascii';\nconst PROTOCOL_MATCH = /^(?!(?:\\w+:)?\\/\\/)|^\\/\\//;\n\nconst testParameter = (\n name: string,\n filters: (\n | {\n test: (arg0: string) => boolean;\n }\n | string\n )[]\n) => {\n return filters.some((filter) =>\n filter instanceof RegExp ? filter.test(name) : filter === name\n );\n};\n\nconst normalizeDataURL = (\n urlString: string,\n { stripHash }: NormalizeOptions\n) => {\n const parts = urlString.match(/^data:(.*?),(.*?)(?:#(.*))?$/);\n\n if (!parts) {\n throw new Error(`Invalid URL: ${urlString}`);\n }\n\n const mediaType = parts[1].split(';');\n const body = parts[2];\n const hash = stripHash ? '' : parts[3];\n\n let base64 = false;\n\n if (mediaType[mediaType.length - 1] === 'base64') {\n mediaType.pop();\n base64 = true;\n }\n\n // Lowercase MIME type\n const mimeType = (mediaType.shift() || '').toLowerCase();\n const attributes = mediaType\n .map((attribute) => {\n // eslint-disable-next-line prefer-const\n let [key, value = ''] = attribute\n .split('=')\n .map((string: string) => string.trim());\n\n // Lowercase `charset`\n if (key === 'charset') {\n value = value.toLowerCase();\n\n if (value === DATA_URL_DEFAULT_CHARSET) {\n return '';\n }\n }\n\n return `${key}${value ? `=${value}` : ''}`;\n })\n .filter(Boolean);\n\n const normalizedMediaType = [...attributes];\n\n if (base64) {\n normalizedMediaType.push('base64');\n }\n\n if (\n normalizedMediaType.length !== 0 ||\n (mimeType && mimeType !== DATA_URL_DEFAULT_MIME_TYPE)\n ) {\n normalizedMediaType.unshift(mimeType);\n }\n\n const header = `data:${normalizedMediaType.join(';')}`;\n const data = `${base64 ? body.trim() : body}${hash ? `#${hash}` : ''}`;\n return `${header},${data}`;\n};\n\nexport const isValidUrl = (s: string) => {\n try {\n new URL(s);\n const u = normalizeUrl(s);\n return !!u;\n } catch (e) {\n return false;\n }\n};\n\nexport const getPatch = (s: string) => {\n try {\n return normalizeUrl(s);\n } catch (e) {\n return null;\n }\n};\n\nexport const defaultOptions: NormalizeOptions = {\n defaultProtocol: 'https:',\n normalizeProtocol: true,\n forceHttp: false,\n forceHttps: false,\n stripAuthentication: true,\n stripProtocol: false,\n stripHash: false,\n stripWWW: true,\n returns: 'string', // \"string\" -> \"\" or \"url\" -> <URL>\n removeQuery: false,\n removeQueryParameters: [/^utm_\\w+/i],\n removeTrailingSlash: true,\n removeDirectoryIndex: false,\n sortQueryParameters: true,\n};\n\nexport const normalizeUrl = (\n urlString: string,\n options: NormalizeOptions = {}\n) => {\n options = {\n ...defaultOptions,\n ...options,\n };\n if (options.removeQuery) {\n options.removeQueryParameters = [/.*/];\n }\n // // TODO: Remove this at some point in the future\n // if (Reflect.has(options, 'normalizeHttps')) {\n // throw FunctionRenamedError('normalizeHttps');\n // }\n\n // if (Reflect.has(options, 'normalizeHttp')) {\n // throw FunctionRenamedError('normalizeHttp');\n // }\n\n // if (Reflect.has(options, 'stripFragment')) {\n // throw FunctionRenamedError('stripFragment');\n // }\n\n urlString = urlString.trim();\n\n // Data URL\n if (/^data:/i.test(urlString)) {\n return normalizeDataURL(urlString, { stripHash: false, ...options });\n }\n\n const hasRelativeProtocol = urlString.startsWith('//');\n const isRelativeUrl = !hasRelativeProtocol && /^\\.*\\//.test(urlString);\n\n // Prepend protocol\n if (!isRelativeUrl && options.defaultProtocol) {\n urlString = urlString.replace(PROTOCOL_MATCH, options.defaultProtocol);\n }\n\n let urlObj: InstanceType<typeof URLParser>;\n try {\n urlObj = new URLParser(urlString);\n } catch {\n // The native `URL` constructor throws a bare `TypeError [ERR_INVALID_URL]`\n // with no reference to the offending input. `InvalidUrlError` exists\n // (and is already re-exported via `ErrorTypes`) precisely for this path\n // but was never wired to the throw site — do so here.\n throw InvalidUrlError(urlString);\n }\n\n if (options.forceHttp && options.forceHttps) {\n throw BadOptionsError();\n }\n\n if (options.forceHttp && urlObj.protocol === 'https:') {\n urlObj.protocol = 'http:';\n }\n\n if (options.forceHttps && urlObj.protocol === 'http:') {\n urlObj.protocol = 'https:';\n }\n\n // Remove auth\n if (options.stripAuthentication) {\n urlObj.username = '';\n urlObj.password = '';\n }\n\n // Remove hash\n if (options.stripHash) {\n urlObj.hash = '';\n }\n\n // Remove duplicate slashes if not preceded by a protocol\n if (urlObj.pathname) {\n // TODO: Use the following instead when targeting Node.js 10\n // `urlObj.pathname = urlObj.pathname.replace(/(?<!https?:)\\/{2,}/g, '/');`\n urlObj.pathname = urlObj.pathname.replace(/((?!:).|^)\\/{2,}/g, (_, p1) => {\n if (/^(?!\\/)/g.test(p1)) {\n return `${p1}/`;\n }\n\n return '/';\n });\n }\n\n // Decode URI octets\n if (urlObj.pathname) {\n urlObj.pathname = decodeURI(urlObj.pathname);\n }\n\n // Remove directory index\n if (options.removeDirectoryIndex === true) {\n options.removeDirectoryIndex = [/^index\\.[a-z]+$/];\n }\n\n if (\n Array.isArray(options.removeDirectoryIndex) &&\n options.removeDirectoryIndex.length > 0\n ) {\n let pathComponents = urlObj.pathname.split('/');\n const lastComponent = pathComponents[pathComponents.length - 1];\n\n if (testParameter(lastComponent, options.removeDirectoryIndex)) {\n pathComponents = pathComponents.slice(0, pathComponents.length - 1);\n urlObj.pathname = pathComponents.slice(1).join('/') + '/';\n }\n }\n\n if (urlObj.hostname) {\n // Remove trailing dot\n urlObj.hostname = urlObj.hostname.replace(/\\.$/, '');\n\n // Remove `www.`\n if (\n options.stripWWW &&\n /^www\\.([a-z\\-\\d]{2,63})\\.([a-z.]{2,5})$/.test(urlObj.hostname)\n ) {\n // Each label should be max 63 at length (min: 2).\n // The extension should be max 5 at length (min: 2).\n // Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names\n urlObj.hostname = urlObj.hostname.replace(/^www\\./, '');\n }\n }\n\n // Remove query unwanted parameters\n if (Array.isArray(options.removeQueryParameters)) {\n for (const key of [...urlObj.searchParams.keys()]) {\n if (testParameter(key, options.removeQueryParameters)) {\n urlObj.searchParams.delete(key);\n }\n }\n }\n\n // Sort query parameters\n if (options.sortQueryParameters) {\n urlObj.searchParams.sort();\n }\n\n if (options.removeTrailingSlash) {\n urlObj.pathname = urlObj.pathname.replace(/\\/$/, '');\n }\n\n // Take advantage of many of the Node `url` normalizations\n urlString = urlObj.toString();\n\n // Remove ending `/`\n if (\n (options.removeTrailingSlash || urlObj.pathname === '/') &&\n urlObj.hash === ''\n ) {\n urlString = urlString.replace(/\\/$/, '');\n }\n\n // Restore relative protocol, if applicable\n if (hasRelativeProtocol && !options.normalizeProtocol) {\n urlString = urlString.replace(/^https?:\\/\\//, '//');\n }\n\n // Remove http/https\n if (options.stripProtocol) {\n urlString = urlString.replace(/^(?:https?:)?\\/\\//, '');\n }\n if (options.returns === 'url') {\n return urlObj;\n } else {\n return urlString;\n }\n};\n\nexport const ErrorTypes = {\n FunctionRenamedError,\n BadOptionsError,\n InvalidUrlError,\n};\n// TODO: Remove this for the next major release\nexport default { ensure: normalizeUrl, isValidUrl, getPatch };\n"]}
|