@rksan/mock-media-devices
Version:
WebAPI window.navigator.mediaDevices のモック
166 lines (165 loc) • 6.39 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _MockMediaDevices_devices, _MockMediaDevices_events;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MockMediaDevices = void 0;
const factory = __importStar(require("../factory"));
//----------
// classes
//----------
/**
* Mock of MediaDevices
*
* @export
* @class MockMediaDevicess
* @implements {types.MediaDevices}
*/
class MockMediaDevices {
constructor(devices) {
_MockMediaDevices_devices.set(this, void 0);
_MockMediaDevices_events.set(this, void 0);
__classPrivateFieldSet(this, _MockMediaDevices_devices, devices || factory.getMediaDeviceInfo(), "f");
__classPrivateFieldSet(this, _MockMediaDevices_events, {
devicechange: [],
}, "f");
}
enumerateDevices() {
return new Promise((resolve) => {
resolve(__classPrivateFieldGet(this, _MockMediaDevices_devices, "f"));
});
}
getDisplayMedia(args) {
const options = factory.createMockOptions(args);
return new Promise((resolve) => {
const stream = factory.createMediaStream(options);
this.dispatchEvent(new Event("devicechange"));
resolve(stream);
});
}
getSupportedConstraints() {
const support = {
autoGainControl: true,
width: true,
height: true,
aspectRatio: true,
frameRate: true,
facingMode: true,
resizeMode: true,
volume: true,
sampleRate: true,
sampleSize: true,
echoCancellation: true,
latency: true,
noiseSuppression: true,
channelCount: true,
deviceId: true,
groupId: true,
displaySurface: true,
logicalSurface: true,
};
return support;
}
getUserMedia(options) {
const opt = factory.createMockOptions(options);
return new Promise((resolve) => {
const stream = factory.createMediaStream(opt);
this.dispatchEvent(new Event("devicechange"));
resolve(stream);
});
}
selectAudioOutput(options) {
return new Promise((resolve) => {
const info = __classPrivateFieldGet(this, _MockMediaDevices_devices, "f").filter((device) => {
if (device.kind === "audiooutput") {
if (options && options.deviceId) {
return device.deviceId === options.deviceId;
}
else {
return true;
}
}
else {
return false;
}
});
if (info.length === 0) {
resolve();
}
else {
resolve(info[0]);
}
});
}
addEventListener(type, callback, options) {
if (callback)
__classPrivateFieldGet(this, _MockMediaDevices_events, "f")[type].push(callback);
if (options)
console.log(options);
}
dispatchEvent(event) {
const type = event.type;
let callbacks = null;
switch (type) {
case "devicechange":
callbacks = __classPrivateFieldGet(this, _MockMediaDevices_events, "f")[type];
break;
}
if (callbacks) {
callbacks.map((callback) => {
if (typeof callback === "function") {
callback.call(this, event);
}
else {
callback.handleEvent.call(this, event);
}
});
return true;
}
else {
return false;
}
}
removeEventListener(type, callback, options) {
if (callback) {
const callbacks = __classPrivateFieldGet(this, _MockMediaDevices_events, "f")[type].filter((cb) => cb !== callback);
__classPrivateFieldGet(this, _MockMediaDevices_events, "f")[type] = callbacks;
}
if (options)
console.log(options);
}
}
exports.MockMediaDevices = MockMediaDevices;
_MockMediaDevices_devices = new WeakMap(), _MockMediaDevices_events = new WeakMap();