@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.
Files changed (83) hide show
  1. package/README.md +175 -0
  2. package/bin/decompile.d.ts +2 -0
  3. package/bin/decompile.js +89 -0
  4. package/bin/decompile.js.map +1 -0
  5. package/package.json +35 -0
  6. package/src/index.d.ts +1 -0
  7. package/src/index.js +2 -0
  8. package/src/index.js.map +1 -0
  9. package/src/lib/extractors/index.d.ts +10 -0
  10. package/src/lib/extractors/index.js +228 -0
  11. package/src/lib/extractors/index.js.map +1 -0
  12. package/src/lib/extractors/local-file.d.ts +5 -0
  13. package/src/lib/extractors/local-file.js +22 -0
  14. package/src/lib/extractors/local-file.js.map +1 -0
  15. package/src/lib/extractors/map.d.ts +6 -0
  16. package/src/lib/extractors/map.js +74 -0
  17. package/src/lib/extractors/map.js.map +1 -0
  18. package/src/lib/extractors/raw-html.d.ts +7 -0
  19. package/src/lib/extractors/raw-html.js +93 -0
  20. package/src/lib/extractors/raw-html.js.map +1 -0
  21. package/src/lib/extractors/site.d.ts +34 -0
  22. package/src/lib/extractors/site.js +96 -0
  23. package/src/lib/extractors/site.js.map +1 -0
  24. package/src/lib/index.d.ts +8 -0
  25. package/src/lib/index.js +6 -0
  26. package/src/lib/index.js.map +1 -0
  27. package/src/lib/pipeline/index.d.ts +1 -0
  28. package/src/lib/pipeline/index.js +2 -0
  29. package/src/lib/pipeline/index.js.map +1 -0
  30. package/src/lib/pipeline/pipes/resolver/actions.d.ts +14 -0
  31. package/src/lib/pipeline/pipes/resolver/actions.js +50 -0
  32. package/src/lib/pipeline/pipes/resolver/actions.js.map +1 -0
  33. package/src/lib/pipeline/pipes/resolver/index.d.ts +1 -0
  34. package/src/lib/pipeline/pipes/resolver/index.js +2 -0
  35. package/src/lib/pipeline/pipes/resolver/index.js.map +1 -0
  36. package/src/lib/pipeline/stack.d.ts +23 -0
  37. package/src/lib/pipeline/stack.js +45 -0
  38. package/src/lib/pipeline/stack.js.map +1 -0
  39. package/src/lib/store/build.d.ts +2 -0
  40. package/src/lib/store/build.js +50 -0
  41. package/src/lib/store/build.js.map +1 -0
  42. package/src/lib/store/index.d.ts +92 -0
  43. package/src/lib/store/index.js +127 -0
  44. package/src/lib/store/index.js.map +1 -0
  45. package/src/lib/store/package.d.ts +60 -0
  46. package/src/lib/store/package.js +114 -0
  47. package/src/lib/store/package.js.map +1 -0
  48. package/src/lib/store/templates.d.ts +84 -0
  49. package/src/lib/store/templates.js +78 -0
  50. package/src/lib/store/templates.js.map +1 -0
  51. package/src/lib/store/utils.d.ts +3 -0
  52. package/src/lib/store/utils.js +8 -0
  53. package/src/lib/store/utils.js.map +1 -0
  54. package/src/lib/validators/index.d.ts +2 -0
  55. package/src/lib/validators/index.js +7 -0
  56. package/src/lib/validators/index.js.map +1 -0
  57. package/src/lib/validators/local/index.d.ts +31 -0
  58. package/src/lib/validators/local/index.js +93 -0
  59. package/src/lib/validators/local/index.js.map +1 -0
  60. package/src/lib/validators/local/isBase64.d.ts +2 -0
  61. package/src/lib/validators/local/isBase64.js +11 -0
  62. package/src/lib/validators/local/isBase64.js.map +1 -0
  63. package/src/lib/validators/local/isCSS.d.ts +2 -0
  64. package/src/lib/validators/local/isCSS.js +15 -0
  65. package/src/lib/validators/local/isCSS.js.map +1 -0
  66. package/src/lib/validators/local/isHTML.d.ts +2 -0
  67. package/src/lib/validators/local/isHTML.js +13 -0
  68. package/src/lib/validators/local/isHTML.js.map +1 -0
  69. package/src/lib/validators/local/isJS.d.ts +2 -0
  70. package/src/lib/validators/local/isJS.js +28 -0
  71. package/src/lib/validators/local/isJS.js.map +1 -0
  72. package/src/lib/validators/local/isJson.d.ts +2 -0
  73. package/src/lib/validators/local/isJson.js +40 -0
  74. package/src/lib/validators/local/isJson.js.map +1 -0
  75. package/src/lib/validators/local/isSourceMap.d.ts +11 -0
  76. package/src/lib/validators/local/isSourceMap.js +57 -0
  77. package/src/lib/validators/local/isSourceMap.js.map +1 -0
  78. package/src/lib/validators/url/errors.d.ts +9 -0
  79. package/src/lib/validators/url/errors.js +36 -0
  80. package/src/lib/validators/url/errors.js.map +1 -0
  81. package/src/lib/validators/url/index.d.ts +32 -0
  82. package/src/lib/validators/url/index.js +231 -0
  83. 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"]}