web-audio-test-api
Version:
Web Audio API test library for CI
164 lines (138 loc) • 4.91 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.audioparam = audioparam;
exports.enums = enums;
exports.on = on;
exports.readonly = readonly;
exports.typed = typed;
var _Immigration = require("../utils/Immigration");
var _Immigration2 = _interopRequireDefault(_Immigration);
var _format = require("../utils/format");
var _format2 = _interopRequireDefault(_format);
var _toS = require("../utils/toS");
var _toS2 = _interopRequireDefault(_toS);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var immigration = _Immigration2.default.getInstance();
function createSetterError(klassName, propName, message) {
return new TypeError((0, _format2.default)("\n Failed to set the '" + propName + "' property on '" + klassName + "'\n " + message + "\n ") + "\n");
}
function audioparam(defaultValue) {
return function (target, propName, descriptor) {
descriptor.get = function get() {
var _this = this;
if (!this._.hasOwnProperty(propName)) {
this._[propName] = immigration.apply(function (admission) {
return new global.WebAudioTestAPI.AudioParam(admission, _this, propName, defaultValue);
});
}
return this._[propName];
};
descriptor.set = function set(value) {
throw createSetterError(this.constructor.name, propName, "\n \tAttempt to assign to readonly property. Do you mean this?\n\n \t\t\t" + propName + ".value = " + (0, _toS2.default)(value) + ";\n ");
};
return {
get: descriptor.get,
set: descriptor.set,
enumerable: descriptor.enumerable,
configurable: descriptor.configurable
};
};
}
function enums(values) {
return function (target, propName, descriptor) {
if (typeof descriptor.get !== "function") {
descriptor.get = function get() {
if (!this._.hasOwnProperty(propName)) {
this._[propName] = values[0];
}
return this._[propName];
};
}
descriptor.set = function set(value) {
if (values.indexOf(value) === -1) {
throw createSetterError(this.constructor.name, propName, "\n \tThis property should be one of [ " + values.map(_toS2.default).join(", ") + " ], but got " + (0, _toS2.default)(value) + ".\n ");
}
this._[propName] = value;
};
return {
get: descriptor.get,
set: descriptor.set,
enumerable: descriptor.enumerable,
configurable: descriptor.configurable
};
};
}
function on() {
return function (target, propName, descriptor) {
descriptor.get = function get() {
if (!this._.hasOwnProperty(propName)) {
this._[propName] = null;
}
return this._[propName];
};
descriptor.set = function set(value) {
if (value !== null && typeof value !== "function") {
throw createSetterError(this.constructor.name, propName, "\n \tA callback should be a function or null, but got " + (0, _toS2.default)(value) + ".\n ");
}
this._[propName] = value;
};
return {
get: descriptor.get,
set: descriptor.set,
enumerable: descriptor.enumerable,
configurable: descriptor.configurable
};
};
}
function readonly(value) {
return function (target, propName, descriptor) {
var getter = descriptor.get || descriptor.value;
if (typeof descriptor.get !== "function") {
descriptor.get = function get() {
if (typeof value !== "undefined") {
return value;
}
if (typeof getter === "function") {
return getter.call(this);
}
};
}
descriptor.set = function set() {
throw createSetterError(this.constructor.name, propName, "\n \tAttempt to assign to readonly property.\n ");
};
return {
get: descriptor.get,
set: descriptor.set,
enumerable: descriptor.enumerable,
configurable: descriptor.configurable
};
};
}
function typed(validator, defaultValue) {
return function (target, propName, descriptor) {
if (typeof descriptor.get !== "function") {
descriptor.get = function get() {
if (!this._.hasOwnProperty(propName)) {
this._[propName] = defaultValue;
}
return this._[propName];
};
}
if (typeof descriptor.set !== "function") {
descriptor.set = function set(value) {
if (!validator.test(value)) {
throw createSetterError(this.constructor.name, propName, "\n \tThis property should be $a " + validator.description + ", but got " + (0, _toS2.default)(value) + ".\n ");
}
this._[propName] = value;
};
}
return {
get: descriptor.get,
set: descriptor.set,
enumerable: descriptor.enumerable,
configurable: descriptor.configurable
};
};
}