You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.4 KiB
58 lines
1.4 KiB
"use strict"; |
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.OptionValidator = void 0; |
|
|
|
var _findSuggestion = require("./find-suggestion"); |
|
|
|
class OptionValidator { |
|
constructor(descriptor) { |
|
this.descriptor = descriptor; |
|
} |
|
|
|
validateTopLevelOptions(options, TopLevelOptionShape) { |
|
const validOptionNames = Object.keys(TopLevelOptionShape); |
|
|
|
for (const option of Object.keys(options)) { |
|
if (!validOptionNames.includes(option)) { |
|
throw new Error(this.formatMessage(`'${option}' is not a valid top-level option. |
|
- Did you mean '${(0, _findSuggestion.findSuggestion)(option, validOptionNames)}'?`)); |
|
} |
|
} |
|
} |
|
|
|
validateBooleanOption(name, value, defaultValue) { |
|
if (value === undefined) { |
|
return defaultValue; |
|
} else { |
|
this.invariant(typeof value === "boolean", `'${name}' option must be a boolean.`); |
|
} |
|
|
|
return value; |
|
} |
|
|
|
validateStringOption(name, value, defaultValue) { |
|
if (value === undefined) { |
|
return defaultValue; |
|
} else { |
|
this.invariant(typeof value === "string", `'${name}' option must be a string.`); |
|
} |
|
|
|
return value; |
|
} |
|
|
|
invariant(condition, message) { |
|
if (!condition) { |
|
throw new Error(this.formatMessage(message)); |
|
} |
|
} |
|
|
|
formatMessage(message) { |
|
return `${this.descriptor}: ${message}`; |
|
} |
|
|
|
} |
|
|
|
exports.OptionValidator = OptionValidator; |