summaryrefslogtreecommitdiff
path: root/node_modules/@pkgjs/parseargs/internal/validators.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@pkgjs/parseargs/internal/validators.js')
-rw-r--r--node_modules/@pkgjs/parseargs/internal/validators.js89
1 files changed, 89 insertions, 0 deletions
diff --git a/node_modules/@pkgjs/parseargs/internal/validators.js b/node_modules/@pkgjs/parseargs/internal/validators.js
new file mode 100644
index 0000000..b5ac4fb
--- /dev/null
+++ b/node_modules/@pkgjs/parseargs/internal/validators.js
@@ -0,0 +1,89 @@
+'use strict';
+
+// This file is a proxy of the original file located at:
+// https://github.com/nodejs/node/blob/main/lib/internal/validators.js
+// Every addition or modification to this file must be evaluated
+// during the PR review.
+
+const {
+ ArrayIsArray,
+ ArrayPrototypeIncludes,
+ ArrayPrototypeJoin,
+} = require('./primordials');
+
+const {
+ codes: {
+ ERR_INVALID_ARG_TYPE
+ }
+} = require('./errors');
+
+function validateString(value, name) {
+ if (typeof value !== 'string') {
+ throw new ERR_INVALID_ARG_TYPE(name, 'String', value);
+ }
+}
+
+function validateUnion(value, name, union) {
+ if (!ArrayPrototypeIncludes(union, value)) {
+ throw new ERR_INVALID_ARG_TYPE(name, `('${ArrayPrototypeJoin(union, '|')}')`, value);
+ }
+}
+
+function validateBoolean(value, name) {
+ if (typeof value !== 'boolean') {
+ throw new ERR_INVALID_ARG_TYPE(name, 'Boolean', value);
+ }
+}
+
+function validateArray(value, name) {
+ if (!ArrayIsArray(value)) {
+ throw new ERR_INVALID_ARG_TYPE(name, 'Array', value);
+ }
+}
+
+function validateStringArray(value, name) {
+ validateArray(value, name);
+ for (let i = 0; i < value.length; i++) {
+ validateString(value[i], `${name}[${i}]`);
+ }
+}
+
+function validateBooleanArray(value, name) {
+ validateArray(value, name);
+ for (let i = 0; i < value.length; i++) {
+ validateBoolean(value[i], `${name}[${i}]`);
+ }
+}
+
+/**
+ * @param {unknown} value
+ * @param {string} name
+ * @param {{
+ * allowArray?: boolean,
+ * allowFunction?: boolean,
+ * nullable?: boolean
+ * }} [options]
+ */
+function validateObject(value, name, options) {
+ const useDefaultOptions = options == null;
+ const allowArray = useDefaultOptions ? false : options.allowArray;
+ const allowFunction = useDefaultOptions ? false : options.allowFunction;
+ const nullable = useDefaultOptions ? false : options.nullable;
+ if ((!nullable && value === null) ||
+ (!allowArray && ArrayIsArray(value)) ||
+ (typeof value !== 'object' && (
+ !allowFunction || typeof value !== 'function'
+ ))) {
+ throw new ERR_INVALID_ARG_TYPE(name, 'Object', value);
+ }
+}
+
+module.exports = {
+ validateArray,
+ validateObject,
+ validateString,
+ validateStringArray,
+ validateUnion,
+ validateBoolean,
+ validateBooleanArray,
+};