UNPKG

web-audio-test-api

Version:
64 lines (50 loc) 1.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = param; var map = new WeakMap(); function getFromMap(map, key, Container) { if (map.has(key)) { return map.get(key); } var value = new Container(); map.set(key, value); return value; } function check(values, validators) { for (var i = 0; i < validators.length; i++) { if (validators[i].optional === true && values.length <= i) { break; } if (!validators[i].validator.test(values[i])) { return i; } } return -1; } function param(paramName, validator) { return function (target, name, descriptor) { var func = descriptor.value; var klasses = getFromMap(map, target, Map); var validators = getFromMap(klasses, name, Array); var optional = /^\[\s*\w+?\s*\]$/.test(paramName); if (optional) { paramName = paramName.replace(/^\[|\]$/g, "").trim(); } validators.unshift({ paramName: paramName, validator: validator, optional: optional }); if (validators.length === 1) { descriptor.value = function param() { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var errIndex = check(args, validators); if (errIndex !== -1) { throw new TypeError(this.constructor.name + "#" + name + "(); argument(" + errIndex + ") should be a " + validators[errIndex].validator.name + ", but got: " + args[errIndex]); } return func.call.apply(func, [this].concat(args)); }; } return descriptor; }; }