Skip to content

Commit 42d894f

Browse files
committed
feat(models): ERR_INVALID_URL
Signed-off-by: Lexus Drumgold <[email protected]>
1 parent ed9d333 commit 42d894f

File tree

5 files changed

+108
-4
lines changed

5 files changed

+108
-4
lines changed

.eslintrc.base.cjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,6 +1035,7 @@ const config = {
10351035
'unicorn/error-message': 0,
10361036
'unicorn/explicit-length-check': 0,
10371037
'unicorn/no-array-for-each': 0,
1038+
'unicorn/no-hex-escape': 0,
10381039
'unicorn/no-useless-undefined': 0,
10391040
'unicorn/prefer-at': 0,
10401041
'unicorn/prefer-dom-node-append': 0,

README.md

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ Universal API for creating [Node.js errors][1]
3232
- [`ERR_INVALID_MODULE_SPECIFIER(request[, reason][, base])`](#err_invalid_module_specifierrequest-reason-base)
3333
- [`ERR_INVALID_PACKAGE_CONFIG(id[, base][, reason])`](#err_invalid_package_configid-base-reason)
3434
- [`ERR_INVALID_PACKAGE_TARGET(dir, key, target[, internal][, base])`](#err_invalid_package_targetdir-key-target-internal-base)
35+
- [`ERR_INVALID_URL(input)`](#err_invalid_urlinput)
3536
- [`ERR_METHOD_NOT_IMPLEMENTED(method)`](#err_method_not_implementedmethod)
3637
- [`ERR_MISSING_OPTION(option)`](#err_missing_optionoption)
3738
- [`ERR_MODULE_NOT_FOUND(id, base[, type])`](#err_module_not_foundid-base-type)
@@ -216,6 +217,7 @@ This package exports the following identifiers:
216217
- [`ERR_INVALID_MODULE_SPECIFIER`](#err_invalid_module_specifierrequest-reason-base)
217218
- [`ERR_INVALID_PACKAGE_CONFIG`](#err_invalid_package_configid-base-reason)
218219
- [`ERR_INVALID_PACKAGE_TARGET`](#err_invalid_package_targetdir-key-target-internal-base)
220+
- [`ERR_INVALID_URL`](#err_invalid_urlinput)
219221
- [`ERR_METHOD_NOT_IMPLEMENTED`](#err_method_not_implementedmethod)
220222
- [`ERR_MISSING_OPTION`](#err_missing_optionoption)
221223
- [`ERR_MODULE_NOT_FOUND`](#err_module_not_foundid-base-type)
@@ -248,6 +250,7 @@ import {
248250
ERR_INVALID_MODULE_SPECIFIER,
249251
ERR_INVALID_PACKAGE_CONFIG,
250252
ERR_INVALID_PACKAGE_TARGET,
253+
ERR_INVALID_URL,
251254
ERR_MODULE_NOT_FOUND,
252255
ERR_NETWORK_IMPORT_DISALLOWED,
253256
ERR_PACKAGE_IMPORT_NOT_DEFINED,
@@ -402,6 +405,15 @@ the attempted module resolution.
402405

403406
> **Source**: [`src/models/err-invalid-package-target.ts`](src/models/err-invalid-package-target.ts)
404407
408+
#### `ERR_INVALID_URL(input)`
409+
410+
Thrown when an invalid URL is passed to a [WHATWG][11] [`URL` constructor][12] or [`url.parse()`][13] to be parsed.
411+
412+
- `{string}` **`input`** &mdash; URL that failed to parse
413+
- **Returns**: `{ErrInvalidUrl}`
414+
415+
> **Source**: [`src/models/err-invalid-url.ts`](src/models/err-invalid-url.ts)
416+
405417
#### `ERR_METHOD_NOT_IMPLEMENTED(method)`
406418

407419
Thrown when a method is required but not implemented.
@@ -541,7 +553,7 @@ Thrown when an unsupported URL scheme is used in an `import` statement. URL sche
541553
Creates a Node.js error constructor.
542554

543555
If the given error `message` is a function, constructor arguments are passed to `message`. If the `message` is a string,
544-
constructor arguments are passed to [`util.format`][11] instead.
556+
constructor arguments are passed to [`util.format`][14] instead.
545557

546558
- `{ErrorCode}` **`code`** &mdash; Node.js error code
547559
- `{B extends ErrorConstructor}` **`Base`** &mdash; Error base class
@@ -561,7 +573,7 @@ Determines the specific type of a value for type-mismatch errors.
561573
562574
## Types
563575

564-
This package is fully typed with [TypeScript][12]. It exports the following definitions:
576+
This package is fully typed with [TypeScript][15]. It exports the following definitions:
565577

566578
### Enums
567579

@@ -593,5 +605,8 @@ See [`CONTRIBUTING.md`](CONTRIBUTING.md).
593605
[8]: https://nodejs.org/api/packages.html#nodejs-packagejson-field-definitions
594606
[9]: https://nodejs.org/api/packages.html#exports
595607
[10]: https://nodejs.org/api/packages.html#imports
596-
[11]: https://nodejs.org/api/util.html#utilformatformat-args
597-
[12]: https://www.typescriptlang.org
608+
[11]: https://nodejs.org/api/url.html#the-whatwg-url-api
609+
[12]: https://nodejs.org/api/url.html#new-urlinput-base
610+
[13]: https://nodejs.org/api/url.html#urlparseurlstring-parsequerystring-slashesdenotehost
611+
[14]: https://nodejs.org/api/util.html#utilformatformat-args
612+
[15]: https://www.typescriptlang.org
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* @file Unit Tests - ERR_INVALID_URL
3+
* @module errnode/models/tests/unit/ERR_INVALID_URL
4+
*/
5+
6+
import { ErrorCode } from '#src/enums'
7+
import type { ErrInvalidUrl } from '#src/interfaces'
8+
import TestSubject from '../err-invalid-url'
9+
10+
describe('unit:models/ERR_INVALID_URL', () => {
11+
let input: string
12+
let result: ErrInvalidUrl
13+
14+
beforeEach(() => {
15+
input = 'http://[127.0.0.1\x00c8763]:8000/'
16+
result = new TestSubject(input)
17+
})
18+
19+
it('should return TypeError instance', () => {
20+
expect(result).to.be.instanceof(TypeError)
21+
expect(result).to.have.property('name').equal('TypeError')
22+
})
23+
24+
it('should set #input', () => {
25+
expect(result).to.have.property('input').equal(input)
26+
})
27+
28+
it('should set error code', () => {
29+
expect(result).to.have.property('code').equal(ErrorCode.ERR_INVALID_URL)
30+
})
31+
32+
it('should set error message', () => {
33+
expect(result).to.have.property('message').equal('Invalid URL')
34+
})
35+
})

src/models/err-invalid-url.ts

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/**
2+
* @file Error Models - ERR_INVALID_URL
3+
* @module errnode/models/ERR_INVALID_URL
4+
* @see https://github.com/nodejs/node/blob/v19.3.0/lib/internal/errors.js#L1381-L1386
5+
*/
6+
7+
import { ErrorCode } from '#src/enums'
8+
import type { ErrInvalidUrl } from '#src/interfaces'
9+
import type { MessageFn, NodeErrorConstructor } from '#src/types'
10+
import { createNodeError } from '#src/utils'
11+
12+
/**
13+
* `ERR_INVALID_URL` model.
14+
*
15+
* Thrown when an invalid URL is passed to a [WHATWG][1] [`URL` constructor][2]
16+
* or [`url.parse()`][3] to be parsed.
17+
*
18+
* [1]: https://nodejs.org/api/url.html#the-whatwg-url-api
19+
* [2]: https://nodejs.org/api/url.html#new-urlinput-base
20+
* [3]: https://nodejs.org/api/url.html#urlparseurlstring-parsequerystring-slashesdenotehost
21+
*
22+
* @see https://nodejs.org/api/errors.html#err_invalid_url
23+
*
24+
* @class
25+
*
26+
* @param {string} input - URL that failed to parse
27+
* @return {ErrInvalidUrl} `TypeError` instance
28+
*/
29+
const ERR_INVALID_URL: NodeErrorConstructor<
30+
TypeErrorConstructor,
31+
MessageFn<[string]>,
32+
ErrInvalidUrl
33+
> = createNodeError(
34+
ErrorCode.ERR_INVALID_URL,
35+
TypeError,
36+
/**
37+
* Creates an [`ERR_INVALID_URL`][1] message.
38+
*
39+
* [1]: https://nodejs.org/api/errors.html#err_invalid_url
40+
*
41+
* @this {ErrInvalidUrl}
42+
*
43+
* @param {string} input - URL that failed to parse
44+
* @return {string} Error message
45+
*/
46+
function msg(this: ErrInvalidUrl, input: string): string {
47+
this.input = input
48+
return 'Invalid URL'
49+
}
50+
)
51+
52+
export default ERR_INVALID_URL

src/models/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export { default as ERR_INVALID_ARG_VALUE } from './err-invalid-arg-value'
1717
export { default as ERR_INVALID_MODULE_SPECIFIER } from './err-invalid-module-specifier'
1818
export { default as ERR_INVALID_PACKAGE_CONFIG } from './err-invalid-package-config'
1919
export { default as ERR_INVALID_PACKAGE_TARGET } from './err-invalid-package-target'
20+
export { default as ERR_INVALID_URL } from './err-invalid-url'
2021
export { default as ERR_METHOD_NOT_IMPLEMENTED } from './err-method-not-implemented'
2122
export { default as ERR_MISSING_OPTION } from './err-missing-option'
2223
export { default as ERR_MODULE_NOT_FOUND } from './err-module-not-found'

0 commit comments

Comments
 (0)