32 lines
922 B
Plaintext
Executable File
32 lines
922 B
Plaintext
Executable File
import { ToString } from './262';
|
|
/**
|
|
* https://tc39.es/ecma402/#sec-getoption
|
|
* @param opts
|
|
* @param prop
|
|
* @param type
|
|
* @param values
|
|
* @param fallback
|
|
*/
|
|
export function GetOption(opts, prop, type, values, fallback) {
|
|
if (typeof opts !== 'object') {
|
|
throw new TypeError('Options must be an object');
|
|
}
|
|
var value = opts[prop];
|
|
if (value !== undefined) {
|
|
if (type !== 'boolean' && type !== 'string') {
|
|
throw new TypeError('invalid type');
|
|
}
|
|
if (type === 'boolean') {
|
|
value = Boolean(value);
|
|
}
|
|
if (type === 'string') {
|
|
value = ToString(value);
|
|
}
|
|
if (values !== undefined && !values.filter(function (val) { return val == value; }).length) {
|
|
throw new RangeError("".concat(value, " is not within ").concat(values.join(', ')));
|
|
}
|
|
return value;
|
|
}
|
|
return fallback;
|
|
}
|