Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
lib: cleanup instance validation
Cleaned up the `URLSearchParams`'s `this` validation to increase
readability by moving them to an extra helper function.
  • Loading branch information
VoltrexKeyva committed Aug 6, 2021
commit 39063a139a34cd76d7977fa9e1f35838913a86b9
47 changes: 23 additions & 24 deletions lib/internal/url.js
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,10 @@ class URLContext {
}
}

function isURLSearchParams(self) {
return self && self[searchParams] && !self[searchParams][searchParams];
}

class URLSearchParams {
// URL Standard says the default value is '', but as undefined and '' have
// the same result, undefined is used to prevent unnecessary parsing.
Expand Down Expand Up @@ -222,9 +226,8 @@ class URLSearchParams {
}

[inspect.custom](recurseTimes, ctx) {
if (!this || !this[searchParams] || this[searchParams][searchParams]) {
if (!isURLSearchParams(this))
throw new ERR_INVALID_THIS('URLSearchParams');
}

if (typeof recurseTimes === 'number' && recurseTimes < 0)
return ctx.stylize('[Object]', 'special');
Expand Down Expand Up @@ -259,9 +262,9 @@ class URLSearchParams {
}

append(name, value) {
if (!this || !this[searchParams] || this[searchParams][searchParams]) {
if (!isURLSearchParams(this))
throw new ERR_INVALID_THIS('URLSearchParams');
}

if (arguments.length < 2) {
throw new ERR_MISSING_ARGS('name', 'value');
}
Expand All @@ -273,9 +276,9 @@ class URLSearchParams {
}

delete(name) {
if (!this || !this[searchParams] || this[searchParams][searchParams]) {
if (!isURLSearchParams(this))
throw new ERR_INVALID_THIS('URLSearchParams');
}

if (arguments.length < 1) {
throw new ERR_MISSING_ARGS('name');
}
Expand All @@ -294,9 +297,9 @@ class URLSearchParams {
}

get(name) {
if (!this || !this[searchParams] || this[searchParams][searchParams]) {
if (!isURLSearchParams(this))
throw new ERR_INVALID_THIS('URLSearchParams');
}

if (arguments.length < 1) {
throw new ERR_MISSING_ARGS('name');
}
Expand All @@ -312,9 +315,9 @@ class URLSearchParams {
}

getAll(name) {
if (!this || !this[searchParams] || this[searchParams][searchParams]) {
if (!isURLSearchParams(this))
throw new ERR_INVALID_THIS('URLSearchParams');
}

if (arguments.length < 1) {
throw new ERR_MISSING_ARGS('name');
}
Expand All @@ -331,9 +334,9 @@ class URLSearchParams {
}

has(name) {
if (!this || !this[searchParams] || this[searchParams][searchParams]) {
if (!isURLSearchParams(this))
throw new ERR_INVALID_THIS('URLSearchParams');
}

if (arguments.length < 1) {
throw new ERR_MISSING_ARGS('name');
}
Expand All @@ -349,9 +352,9 @@ class URLSearchParams {
}

set(name, value) {
if (!this || !this[searchParams] || this[searchParams][searchParams]) {
if (!isURLSearchParams(this))
throw new ERR_INVALID_THIS('URLSearchParams');
}

if (arguments.length < 2) {
throw new ERR_MISSING_ARGS('name', 'value');
}
Expand Down Expand Up @@ -436,17 +439,16 @@ class URLSearchParams {
// Define entries here rather than [Symbol.iterator] as the function name
// must be set to `entries`.
entries() {
if (!this || !this[searchParams] || this[searchParams][searchParams]) {
if (!isURLSearchParams(this))
throw new ERR_INVALID_THIS('URLSearchParams');
}

return createSearchParamsIterator(this, 'key+value');
}

forEach(callback, thisArg = undefined) {
if (!this || !this[searchParams] || this[searchParams][searchParams]) {
if (!isURLSearchParams(this))
throw new ERR_INVALID_THIS('URLSearchParams');
}

validateCallback(callback);

let list = this[searchParams];
Expand All @@ -464,27 +466,24 @@ class URLSearchParams {

// https://heycam.github.io/webidl/#es-iterable
keys() {
if (!this || !this[searchParams] || this[searchParams][searchParams]) {
if (!isURLSearchParams(this))
throw new ERR_INVALID_THIS('URLSearchParams');
}

return createSearchParamsIterator(this, 'key');
}

values() {
if (!this || !this[searchParams] || this[searchParams][searchParams]) {
if (!isURLSearchParams(this))
throw new ERR_INVALID_THIS('URLSearchParams');
}

return createSearchParamsIterator(this, 'value');
}

// https://heycam.github.io/webidl/#es-stringifier
// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior
toString() {
if (!this || !this[searchParams] || this[searchParams][searchParams]) {
if (!isURLSearchParams(this))
throw new ERR_INVALID_THIS('URLSearchParams');
}

return serializeParams(this[searchParams]);
}
Expand Down