commit 7c2eec44461b364f2f894be9b2c3c2eefda6bc24 Author: Mees van der Wijk Date: Tue Aug 29 19:55:48 2023 +0200 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..02125ad --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +Backend/node_modules/ +Frontend/node_modules +Frontend/pages/**/node_modules +Frontend/pages/layouts/**/node_modules/ +Static/materialicons \ No newline at end of file diff --git a/Backend/dist/ConnectionManager.js b/Backend/dist/ConnectionManager.js new file mode 100644 index 0000000..783f714 --- /dev/null +++ b/Backend/dist/ConnectionManager.js @@ -0,0 +1,231 @@ +exports.__esModule = true; +exports.ConnectionManager = void 0; +var path = require("path"); +var fs_1 = require("fs"); +var Logger_1 = require("./Logger"); +var fs = require("fs-extra"); +var ensureDir = fs.ensureDir, pathExists = fs.pathExists, readJson = fs.readJson; +var ConnectionManager = /** @class */ (function () { + function ConnectionManager() { + } + ConnectionManager.prototype.load = function (callback) { + var _this_1 = this; + this.managerConfigPath = path.join(Undecked.dataPath, 'connections.json'); + this.connections = {}; + this.loadConfig(function () { + var integration_count = 0; + var device_count = 0; + for (var integrationID in _this_1.connections) { + integration_count++; + device_count = device_count + Object.keys(_this_1.connections[integrationID]).length; + } + Logger_1.Log('info', "Loaded " + device_count + " device(s) across " + integration_count + " integration(s)"); + callback(); + }); + }; + ConnectionManager.prototype.loadConfig = function (callback) { + var _this_1 = this; + pathExists(this.managerConfigPath, function (err, exists) { + if (err) + throw err; + if (exists) { + readJson(_this_1.managerConfigPath, function (err, json) { + if (err) + throw err; + _this_1.connections = json.connections; + for (var integrationID in _this_1.connections) + for (var connectionType in _this_1.connections[integrationID]) + for (var connectionID in _this_1.connections[integrationID][connectionType]) { + var connection = _this_1.connections[integrationID][connectionType][connectionID]; + _this_1.validate(integrationID, connectionType, connectionID, connection.properties, function (valid, error) { + Logger_1.Log(valid ? 'info' : 'warn', valid + ? "Loaded " + connectionType + " '" + connection.name + "' from '" + integrationID + "'" + : "Unable to load " + connectionType + " '" + connection.name + "' from '" + integrationID + "'"); + }); + } + callback(); + }); + } + else { + _this_1.connections = defaultConnectionConfig.connections; + _this_1.saveConfig(callback); + } + }); + }; + ConnectionManager.prototype.saveConfig = function (callback) { + var connections = {}; + for (var integrationID in this.connections) { + connections[integrationID] = {}; + for (var connectionType in this.connections[integrationID]) { + connections[integrationID][connectionType] = {}; + for (var connectionID in this.connections[integrationID][connectionType]) { + connections[integrationID][connectionType][connectionID] = this.connections[integrationID][connectionType][connectionID]; + if (connections[integrationID][connectionType][connectionID].instance != undefined) + delete connections[integrationID][connectionType][connectionID].instance; + } + } + } + var toSave = { + connections: connections + }; + for (var integrationID in toSave.connections) + for (var connectionType in toSave.connections[integrationID]) + for (var connectionID in toSave.connections[integrationID][connectionType]) + if (toSave.connections[integrationID][connectionType][connectionID].instance != undefined) + delete toSave.connections[integrationID][connectionType][connectionID].instance; + fs_1.writeFile(this.managerConfigPath, JSON.stringify(toSave, null, 4), function (err) { + if (err) + Logger_1.Log('error', 'Error whilst saving device manager config', err.message); + if (callback) + callback(); + }); + }; + ConnectionManager.prototype.create = function (integrationID, connectionType, properties, callback) { + var _this_1 = this; + var _this = this; + if (this.connections == undefined) + this.connections = {}; + if (this.connections[integrationID] == undefined) + this.connections[integrationID] = {}; + if (this.connections[integrationID][connectionType] == undefined) + this.connections[integrationID][connectionType] = {}; + var connectionID = Undecked.generateRandom(8, function (checkValid) { + return _this.connections[integrationID][connectionType][checkValid] == undefined; + }); + this.validate(integrationID, connectionType, connectionID, properties, function (valid, error) { + if (valid == true) { + var name = properties._internal_name; + delete properties._internal_name; + var instance = _this.connections[integrationID][connectionType] != undefined && + _this.connections[integrationID][connectionType][connectionID] != undefined && + _this.connections[integrationID][connectionType][connectionID].instance != undefined + ? _this.connections[integrationID][connectionType][connectionID].instance + : null; + _this.connections[integrationID][connectionType][connectionID] = { + connectedSince: Date.now(), + lastSeen: Date.now(), + connectionID: connectionID, + name: name, + online: true, + properties: properties, + instance: instance + }; + Undecked.SocketServer.broadcastTo('home', 'connectedlist', _this_1.getList()); + _this.saveConfig(); + callback(true); + } + else + callback(false, error); + }); + }; + ConnectionManager.prototype.validate = function (integrationID, connectionType, connectionID, properties, callback) { + var _this = this; + if (Undecked.Integrations.exists(integrationID)) { + var integration = Undecked.Integrations.get(integrationID); + if (integration.api.hasValidator(connectionType)) { + var validator = integration.api.getValidator(connectionType); + var connectionValidatorAPI = { + properties: properties, + callback: callback, + instance: _this.getConnectionInstance(integrationID, connectionType, connectionID), + setInstance: function (instance) { + _this.setConnectionInstance(integrationID, connectionType, connectionID, instance); + } + }; + validator(connectionValidatorAPI); + } + else + callback(false, "No validator found for connection type " + connectionType); + } + }; + ConnectionManager.prototype.getConnectionRequestData = function (integrationID, connectionType) { + if (Undecked.Integrations.exists(integrationID)) { + var integrationwrapper = Undecked.Integrations.get(integrationID); + if (integrationwrapper.integration.connections != undefined) { + for (var i = 0; i < integrationwrapper.integration.connections.length; i++) { + var connection = integrationwrapper.integration.connections[i]; + if (connection.type == connectionType) + return { fields: connection.fields, message: connection.message, link: connection.link }; + } + } + } + return null; + }; + ConnectionManager.prototype.getList = function () { + var list = []; + for (var integrationID in this.connections) { + if (Undecked.Integrations.exists(integrationID)) { + var integration = Undecked.Integrations.get(integrationID); + for (var connectionType in this.connections[integrationID]) { + for (var connectionID in this.connections[integrationID][connectionType]) { + var connection = this.connections[integrationID][connectionType][connectionID]; + list.push({ + connectionID: connectionID, + integrationName: integration.integration.name, + connectionType: integration.connectionsmap[connectionType].name, + name: connection.name, + online: connection.online + }); + } + } + } + } + return list; + }; + ConnectionManager.prototype.getConnections = function (integrationID, connectionType) { + var connections = []; + if (this.connections != undefined) { + if (this.connections[integrationID] != undefined) { + if (this.connections[integrationID][connectionType] != undefined) { + for (var connectionID in this.connections[integrationID][connectionType]) { + var connection = this.connections[integrationID][connectionType][connectionID]; + connections.push({ id: connection.connectionID, text: connection.name }); + } + } + } + } + return connections; + }; + ConnectionManager.prototype.getConnection = function (integrationID, connectionType, connectionID) { + if (this.connections != undefined) { + if (this.connections[integrationID] != undefined) { + if (this.connections[integrationID][connectionType] != undefined) { + if (this.connections[integrationID][connectionType][connectionID] != undefined) { + return this.connections[integrationID][connectionType][connectionID]; + } + } + } + } + return null; + }; + ConnectionManager.prototype.setConnectionInstance = function (integrationID, connectionType, connectionID, instance) { + if (this.connections == undefined) + this.connections = {}; + if (this.connections[integrationID] == undefined) + this.connections[integrationID] = {}; + if (this.connections[integrationID][connectionType] == undefined) + this.connections[integrationID][connectionType] = {}; + if (this.connections[integrationID][connectionType][connectionID] == undefined) + this.connections[integrationID][connectionType][connectionID] = {}; + this.connections[integrationID][connectionType][connectionID].instance = instance; + return true; + }; + ConnectionManager.prototype.getConnectionInstance = function (integrationID, connectionType, connectionID) { + if (this.connections != undefined) { + if (this.connections[integrationID] != undefined) { + if (this.connections[integrationID][connectionType] != undefined) { + if (this.connections[integrationID][connectionType][connectionID] != undefined) { + return this.connections[integrationID][connectionType][connectionID].instance; + } + } + } + } + return null; + }; + return ConnectionManager; +}()); +exports.ConnectionManager = ConnectionManager; +var defaultConnectionConfig = { + connections: {} +}; +//# sourceMappingURL=ConnectionManager.js.map \ No newline at end of file diff --git a/Backend/dist/ConnectionManager.js.map b/Backend/dist/ConnectionManager.js.map new file mode 100644 index 0000000..34be3d6 --- /dev/null +++ b/Backend/dist/ConnectionManager.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ConnectionManager.js","sourceRoot":"","sources":["../src/ConnectionManager.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Core.js b/Backend/dist/Core.js new file mode 100644 index 0000000..fe6e0f2 --- /dev/null +++ b/Backend/dist/Core.js @@ -0,0 +1,135 @@ +exports.__esModule = true; +var fs_1 = require("fs"); +var fs_extra_1 = require("fs-extra"); +var os_1 = require("os"); +var path = require("path"); +var os = require("os"); +var bnj = require("bonjour"); +var FileHandler_1 = require("./FileHandler"); +var WebServer_1 = require("./WebServer"); +var SocketServer_1 = require("./SocketServer"); +var DeckManager_1 = require("./Decks/DeckManager"); +var PageManager_1 = require("./Pages/PageManager"); +var IntegrationsManager_1 = require("./Integrations/IntegrationsManager"); +var ConnectionManager_1 = require("./ConnectionManager"); +var Icons_1 = require("./Icons"); +var Logger_1 = require("./Logger"); +var bonjour = bnj(); +Undecked = { + DEVMODE: process.argv.includes('--dev'), + quality: 96, + dataPath: path.join(os_1.homedir(), 'MorphixProductions', 'Undecked'), + FileHandler: new FileHandler_1.FileHandler(), + WebServer: new WebServer_1.WebServer(), + SocketServer: new SocketServer_1.SocketServer(), + Decks: new DeckManager_1.DeckManager(), + Pages: new PageManager_1.PageManager(), + Integrations: new IntegrationsManager_1.IntegrationsManager(), + Connections: new ConnectionManager_1.ConnectionManager(), + Icons: new Icons_1.Icons(), + getName: function () { + if (Config.name != null) + return Config.name; + if (os.userInfo().username.length > 0) + return os.userInfo().username; + return os.hostname(); + } +}; +Undecked.start = function () { + Logger_1.Log('info', 'Starting Undecked'); + var start = function () { + return Undecked.FileHandler.load(function () { + Undecked.Decks.load(function () { + Undecked.Icons.load(function () { + Undecked.Pages.load(function () { + Undecked.Integrations.load(function () { + Undecked.Connections.load(function () { + Undecked.WebServer.start(function (server) { + Undecked.SocketServer.start(server, function () { + Logger_1.Log('info', 'Undecked started'); + try { + bonjour.publish({ + name: Undecked.getName(), + type: 'undecked', + port: Config.ports.http + }); + } + catch (error) { } + }); + }); + }); + }); + }); + }); + }); + }); + }; + fs_extra_1.pathExists(path.join(os_1.homedir(), 'GetiyoSoftware', 'Undecked'), function (err, exists) { + if (err) + throw err; + if (exists) + fs_extra_1.move(path.join(os_1.homedir(), 'GetiyoSoftware', 'Undecked'), Undecked.dataPath, function (err) { + if (err) + throw err; + start(); + }); + else + start(); + }); +}; +Undecked.generateRandom = function (length, checksum, chars) { + if (chars === void 0) { chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; } + for (var i = 0; i < 1000; i++) { + var str = ''; + for (var i_1 = 0; i_1 < length; i_1++) { + str += chars.charAt(Math.floor(Math.random() * chars.length)); + } + if (checksum != undefined) + if (checksum(str)) + return str; + else + return str; + } +}; +Undecked.convert = function () { + var outputWhiteDir = path.join(__filename, '..', '..', '..', 'Static', 'materialicons', 'white'); + var outputBlackDir = path.join(__filename, '..', '..', '..', 'Static', 'materialicons', 'black'); + var inputWhiteDir = path.join("C:\\Users\\Mees\\Pictures\\materialicons\\white"); + var inputBlackDir = path.join("C:\\Users\\Mees\\Pictures\\materialicons\\black"); + fs_extra_1.ensureDir(outputWhiteDir, function (err) { + if (err) + throw err; + fs_extra_1.ensureDir(inputBlackDir, function (err) { + if (err) + throw err; + fs_1.readdir(path.join(inputBlackDir), function (err, files) { + if (err) + throw err; + console.log("Found " + files.length + " icons"); + (function handleCopy(i) { + if (i === void 0) { i = 0; } + if (files[i]) { + var inputWhite = path.join(inputWhiteDir, files[i], 'sharp.png'); + var inputBlack = path.join(inputBlackDir, files[i], 'sharp.png'); + var outputWhite = path.join(outputWhiteDir, files[i] + "_low.png"); + var outputBlack = path.join(outputBlackDir, files[i] + "_low.png"); + fs_extra_1.copy(inputWhite, outputWhite, function (err) { + if (err) + console.log("Error whilst copying white '" + files[i] + "'"); + fs_extra_1.copy(inputBlack, outputBlack, function (err) { + if (err) + console.log("Error whilst copying black '" + files[i] + "'"); + console.log("Completed convertion on " + (i + 1) + "/" + files.length); + handleCopy(i + 1); + }); + }); + } + else + console.log('--- Convertion completed ---'); + })(); + }); + }); + }); +}; +Undecked.start(); +//# sourceMappingURL=Core.js.map \ No newline at end of file diff --git a/Backend/dist/Core.js.map b/Backend/dist/Core.js.map new file mode 100644 index 0000000..d3e566f --- /dev/null +++ b/Backend/dist/Core.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Core.js","sourceRoot":"","sources":["../src/Core.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Decks/Deck.js b/Backend/dist/Decks/Deck.js new file mode 100644 index 0000000..5feee6d --- /dev/null +++ b/Backend/dist/Decks/Deck.js @@ -0,0 +1,732 @@ +exports.__esModule = true; +exports.Deck = void 0; +var StreamDeck = require("@elgato-stream-deck/node"); +var Jimp = require("jimp"); +var canvas_1 = require("canvas"); +var path = require("path"); +var Logger_1 = require("../Logger"); +canvas_1.registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-ExtraLight.ttf'), { + family: 'Montserrat', + weight: '200' +}); +canvas_1.registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-Light.ttf'), { + family: 'Montserrat', + weight: '300' +}); +canvas_1.registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-Regular.ttf'), { + family: 'Montserrat', + weight: '400' +}); +canvas_1.registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-Medium.ttf'), { + family: 'Montserrat', + weight: '500' +}); +canvas_1.registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-SemiBold.ttf'), { + family: 'Montserrat', + weight: '600' +}); +canvas_1.registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-Bold.ttf'), { + family: 'Montserrat', + weight: '700' +}); +canvas_1.registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-ExtraBold.ttf'), { + family: 'Montserrat', + weight: '800' +}); +var Deck = /** @class */ (function () { + function Deck(settings, devicePath) { + this.setDevicePath(devicePath); + this.online = false; + this.ready = false; + this.name = settings.name; + this.serialNumber = settings.serialNumber; + this.model = settings.model; + this.pageIndex = 0; + this.captures = { + confirm: { + enabled: false, + callback: null, + callbacktriggers: [] + } + }; + } + Deck.prototype["export"] = function () { + return { + name: this.name, + serialNumber: this.serialNumber, + model: this.model + }; + }; + Deck.prototype.init = function () { + var _this = this; + if (this.online) { + this.columns = this.Deck.KEY_COLUMNS; + this.rows = this.Deck.KEY_ROWS; + this.keys = this.columns * this.rows; + this.iconsize = this.Deck.ICON_SIZE; + this.fill({ appearence: { background: { color: '#ffffff' } } }); + setTimeout(function () { + _this.Deck.clearPanel(); + setTimeout(function () { + var coords = _this.getWaveCoords(); + for (var i = 0; i < coords.length; i++) + _this.setKey(coords[i][0], coords[i][1], { + appearence: { + image: { + address: path.join(__filename, '..', '..', '..', '..', 'Static', 'logo', 'single.png'), + size: 100, + offsetX: 0, + offsetY: 0, + rotation: 0 + } + } + }, coords[i][2]); + setTimeout(function () { + var coords = _this.getWaveCoords(); + for (var i = 0; i < coords.length; i++) + _this.setKey(coords[i][0], coords[i][1], { + state: { + type: 'empty', + toggle: false, + confirm: false + }, + appearence: {} + }, coords[i][2]); + setTimeout(function () { + var fadeCounter = 100; + var fadeInterval = setInterval(function () { + _this.Deck.setBrightness(fadeCounter); + if (fadeCounter > 0) + fadeCounter--; + else { + clearInterval(fadeInterval); + _this.ready = true; + Logger_1.Log('info', "Deck " + _this.name + " is ready for rendering"); + _this.updateAll(); + fadeInterval = setInterval(function () { + _this.Deck.setBrightness(fadeCounter); + if (fadeCounter < 100) + fadeCounter++; + else { + clearInterval(fadeInterval); + } + }, 10); + } + }, 10); + }, 1000); + }, 1000); + }, 1000); + }, 300); + } + }; + Deck.prototype.setDevicePath = function (path) { + var _this = this; + if (path) { + this.Deck = StreamDeck.openStreamDeck(path); + this.listeners(); + this.online = true; + this.Deck.on('error', function (error) { + console.error("Deck:" + _this.name, error); + _this.online = false; + }); + this.init(); + } + }; + Deck.prototype.handleKeyEvent = function (triggerKey, event) { + var _this = this; + var instance = this; + var handleEvent = function (key) { + switch (key.state.type) { + case 'custom': + if (key.state.toggle == false) { + if (key.state.confirm == false) { + if (key.actions != undefined && key.actions[event] != undefined) { + Undecked.Integrations.executeActions(key.actions[event], instance); + } + } + else { + if (event == 'up') + _this.showConfirm(function (result) { + if (result == true) { + if (key.actions != undefined && key.actions.up != undefined) + Undecked.Integrations.executeActions(key.actions.up, instance); + } + }); + } + } + else { + if (event == 'up') { + //When latched = true & When unlatch = false + var state = false; + if (key._internal != undefined && key._internal._toggle != undefined) + state = key._internal._toggle; + var location = Undecked.Pages.KeyManager.getLocation(key.id); + if (location) { + var handle = function () { + Undecked.Pages + .get(location.pageID) + .setKeyInternal(location.x, location.y, '_toggle', !state); + var namestate = !state ? 'latch' : 'unlatch'; + if (key.actions != undefined && key.actions[namestate] != undefined) { + Undecked.Integrations.executeActions(key.actions[namestate], instance); + } + }; + if (key.state.confirm == true) { + _this.showConfirm(function (result) { + if (result == true) + handle(); + }); + } + else + handle(); + } + } + else { + if (key.state.confirm == false) + if (key.actions != undefined && key.actions[event] != undefined) + Undecked.Integrations.executeActions(key.actions[event], instance); + } + } + break; + case 'pageup': + if (event == 'down') { + var upPageID = Undecked.Pages.getIdByIndex(_this.pageIndex - 1); + if (upPageID) + _this.setPageID(upPageID); + } + break; + case 'pagedown': + if (event == 'down') { + var downPageID = Undecked.Pages.getIdByIndex(_this.pageIndex + 1); + if (downPageID) + _this.setPageID(downPageID); + } + break; + } + }; + if (this.ready == true && triggerKey.state != undefined) { + if (triggerKey.state.type == 'ghost') { + if (triggerKey.state.masterID != undefined) { + var masterLocation = Undecked.Pages.KeyManager.getLocation(triggerKey.state.masterID); + var masterPage = Undecked.Pages.get(masterLocation.pageID); + if (masterPage) { + var masterKey = masterPage.getKey(masterLocation.x, masterLocation.y); + if (masterKey.state != undefined && + masterKey.state.ghostIDs != undefined && + masterKey.state.ghostIDs.includes(triggerKey.id)) + handleEvent(masterKey); + } + } + } + else + handleEvent(triggerKey); + } + }; + Deck.prototype.listeners = function () { + var _this = this; + var instance = this; + function indexToXY(index) { + var y = Math.floor(index / instance.columns); + var x = index - Math.floor(index / instance.columns) * instance.columns; + return { x: x, y: y }; + } + this.Deck.on('down', function (keyIndex) { + var coords = indexToXY(keyIndex); + if (Undecked.Pages.exists(instance.getPageID())) { + var page = Undecked.Pages.get(instance.getPageID()); + var key = page.getKey(String(coords.x), String(coords.y)); + for (var captureType in _this.captures) { + if (_this.captures[captureType].enabled == true) { + return; + } + } + _this.handleKeyEvent(key, 'down'); + } + }); + this.Deck.on('up', function (keyIndex) { + var coords = indexToXY(keyIndex); + if (Undecked.Pages.exists(instance.getPageID())) { + var page = Undecked.Pages.get(instance.getPageID()); + var key = page.getKey(String(coords.x), String(coords.y)); + for (var captureType in _this.captures) { + if (_this.captures[captureType].enabled == true) { + if (_this.captures[captureType].callbacktriggers) + for (var i = 0; i < _this.captures[captureType].callbacktriggers.length; i++) { + var callbacktrigger = _this.captures[captureType].callbacktriggers[i]; + if (coords.x == callbacktrigger[0] && coords.y == callbacktrigger[1]) { + _this.captures[captureType].callback(callbacktrigger[2]); + _this.captures[captureType].enabled = false; + _this.captures[captureType].callback = null; + return _this.updateAll(); + } + } + return; + } + } + _this.handleKeyEvent(key, 'up'); + } + }); + }; + Deck.prototype.setPageID = function (pageID) { + var index = Undecked.Pages.getIndexById(pageID); + if (index != this.pageIndex) { + this.pageIndex = index; + this.updateAll(); + } + }; + Deck.prototype.getPageID = function () { + return Undecked.Pages.getIdByIndex(this.pageIndex); + }; + Deck.prototype.getName = function () { + return this.name; + }; + Deck.prototype.updateAll = function () { + if (Undecked.Pages.exists(this.getPageID())) { + var page = Undecked.Pages.get(this.getPageID()); + for (var x = 0; x < this.columns; x++) { + for (var y = 0; y < this.rows; y++) { + this.setKey(x, y, page.getKey(String(x), String(y))); + } + } + } + }; + Deck.prototype.updateKey = function (x, y) { + for (var captureType in this.captures) + if (this.captures[captureType].enabled == true) + return; + if (Undecked.Pages.exists(this.getPageID())) { + var page = Undecked.Pages.get(this.getPageID()); + this.setKey(x, y, page.requestKey(String(x), String(y))); + } + }; + Deck.prototype.fill = function (key) { + for (var x = 0; x < this.columns; x++) { + for (var y = 0; y < this.rows; y++) { + this.setKey(x, y, key); + } + } + }; + Deck.prototype.setKey = function (x, y, key, delay) { + var _this = this; + if (delay === void 0) { delay = 0; } + if (x < this.columns && y < this.rows) { + var keyIndex = y * this.columns + x; + if (keyIndex < this.keys) { + setTimeout(function () { return applyChanges(_this); }, delay); + } + var applyChanges = function (instance) { + var canvas = canvas_1.createCanvas(Undecked.quality, Undecked.quality); + var context = canvas.getContext('2d'); + context.textBaseline = 'middle'; + context.textAlign = 'center'; + if (key.state == undefined) + key.state = { type: 'custom' }; + if (key.state.type == 'empty') { + instance.Deck.clearKey(keyIndex); + } + else if (key.state.type == 'custom') { + var appearence = key.appearence; + render(appearence); + } + else if (key.state.type == 'ghost') { + var appearence = key.appearence; + appearence.system = { + ghost: true + }; + render(appearence); + } + else if (key.state.type == 'pageup') { + render({ + text: { value: 'Up', color: '#ffffff', size: 18, offsetX: 0, offsetY: 25 }, + background: { color: '#4676b7' }, + image: { + size: 100, + rotation: 0, + offsetX: 0, + offsetY: -15, + iconid: 'keyboard_arrow_up', + iconstyle: 'white' + }, + system: { + border: { + color: '#253e5e', + thickness: 8 + } + } + }); + } + else if (key.state.type == 'pagedown') { + render({ + text: { value: 'Down', color: '#ffffff', size: 18, offsetX: 0, offsetY: -25 }, + background: { color: '#4676b7' }, + image: { + size: 100, + rotation: 0, + offsetX: 0, + offsetY: 15, + iconid: 'keyboard_arrow_down', + iconstyle: 'white' + }, + system: { + border: { + color: '#253e5e', + thickness: 8 + } + } + }); + } + else if (key.state.type == 'currentpage') { + render({ + text: { + value: "Page\\n\\n" + (instance.pageIndex + 1), + color: '#ffffff', + size: 22, + offsetX: 0, + offsetY: 0 + }, + background: { color: '#4676b7' }, + system: { + border: { + color: '#253e5e', + thickness: 8 + } + } + }); + } + function render(appearence) { + function background(cb) { + if (appearence.background != undefined) { + context.fillStyle = appearence.background.color; + context.fillRect(0, 0, Undecked.quality, Undecked.quality); + context.fill(); + } + cb(); + } + function image(cb) { + if (appearence.image != undefined) { + var imageAddress = appearence.image.address != undefined + ? appearence.image.address + : appearence.image.iconid != undefined + ? Undecked.Icons.getPath(appearence.image.iconid, appearence.image.iconstyle) + : null; + var imageSize = appearence.image.size != undefined + ? appearence.image.size / 100 * Undecked.quality + : Undecked.quality; + if (imageAddress) { + var centerX = Undecked.quality / 2 + appearence.image.offsetX / 100 * Undecked.quality; + var centerY = Undecked.quality / 2 + appearence.image.offsetY / 100 * Undecked.quality; + canvas_1.loadImage(imageAddress).then(function (image) { + context.save(); + context.translate(centerX, centerY); + context.rotate(appearence.image.rotation * Math.PI / 180); + context.drawImage(image, imageSize / 2 - imageSize, imageSize / 2 - imageSize, imageSize, imageSize); + context.restore(); + cb(); + }); + } + else + cb(); + } + else + cb(); + } + function text(cb) { + if (appearence.text != undefined) { + context.fillStyle = appearence.text.color; + context.font = "700 " + appearence.text.size * (Undecked.quality / 100) + "px \"Montserrat\""; + var text = appearence.text.value; + var lineHeight = appearence.text.size * (Undecked.quality / 100); + var centerX = Undecked.quality / 2 + appearence.text.offsetX / 100 * (Undecked.quality * 2); + var centerY = Undecked.quality / 2 + appearence.text.offsetY / 100 * Undecked.quality; + var canvasYCounter = centerY; + var words = text != undefined ? text.replace(/\\n/g, ' \\n ').split(' ') : ''; + var line = ''; + var totalLineHeight = 0; + for (var n = 0; n < words.length; n++) { + if (words[n].length == 0) + continue; + var testLine = line + words[n] + ' '; + var metrics = context.measureText(testLine); + var testWidth = metrics.width; + if (words[n] != '\\n') + if (testWidth > Undecked.quality && n > 0) { + line = words[n] + ' '; + totalLineHeight += lineHeight; + } + else { + line = testLine; + } + else { + totalLineHeight += lineHeight; + line = ''; + } + } + line = ''; + canvasYCounter = canvasYCounter - totalLineHeight / 2; + var firstSkip = false; + for (var n = 0; n < words.length; n++) { + if (words[n].length == 0) + continue; + var testLine = line + words[n] + ' '; + var metrics = context.measureText(testLine); + var testWidth = metrics.width; + if (words[n] != '\\n') + if (testWidth > Undecked.quality && n > 0) { + context.fillText(line, centerX, canvasYCounter); + line = words[n] + ' '; + canvasYCounter += lineHeight; + } + else { + line = testLine; + } + else { + context.fillText(line, centerX, canvasYCounter); + line = ''; + canvasYCounter += firstSkip ? lineHeight * 2 : lineHeight; + if (firstSkip) + firstSkip = false; + } + } + context.fillText(line, centerX, canvasYCounter); + } + cb(); + } + function system(cb) { + if (appearence.system != undefined) { + if (appearence.system.border != undefined) { + var relativeThickness = appearence.system.border.thickness / 100 * Undecked.quality; + context.fillStyle = appearence.system.border.color; + context.fillRect(0, 0, Undecked.quality, relativeThickness); + context.rect(0, Undecked.quality - relativeThickness, Undecked.quality, relativeThickness); + context.rect(0, 0, relativeThickness, Undecked.quality); + context.rect(Undecked.quality - relativeThickness, 0, relativeThickness, Undecked.quality); + context.fill(); + } + if (appearence.system.ghost == true) { + // var imageAddress = path.join( + // __filename, + // '..', + // '..', + // '..', + // '..', + // 'Static', + // 'icon', + // 'ghost.png' + // ); + // var size = 50 / 100 * Undecked.quality; + // loadImage(imageAddress).then((image) => { + // context.save(); + // context.globalAlpha = 0.7; + // context.translate(Undecked.quality / 2, Undecked.quality / 2); + // context.drawImage(image, size / 2 - size, size / 2 - size, size, size); + // context.restore(); + // cb(); + // }); + } + } + cb(); + } + background(function () { + image(function () { + text(function () { + system(function () { + Jimp.read(canvas.toBuffer()) + .then(function (img) { + return img.resize(instance.iconsize, instance.iconsize); + }) + .then(function (image) { + instance.Deck.fillKeyBuffer(keyIndex, image.bitmap.data, { + format: 'rgba' + }); + }); + }); + }); + }); + }); + } + // if (keyData.color != undefined) + // instance.Deck.fillKeyColor(keyIndex, keyData.color.r, keyData.color.g, keyData.color.b); + // if (keyData.image != undefined) { + }; + } + }; + Deck.prototype.showConfirm = function (callback) { + var _this = this; + var cancel = [ + 0, + 0, + false + ]; + var deny = null; + var confirm = null; + if (this.columns % 2 == 0) { + deny = [ + Math.floor(this.columns / 2) - 2, + 2, + false + ]; + confirm = [ + Math.floor(this.columns / 2) + 1, + 2, + true + ]; + } + else { + deny = [ + Math.floor(this.columns / 2) - 1, + 2, + false + ]; + confirm = [ + Math.floor(this.columns / 2) + 1, + 2, + true + ]; + } + this.captures.confirm.enabled = true; + this.captures.confirm.callbacktriggers = [ + cancel, + deny, + confirm + ]; + this.captures.confirm.callback = callback; + this.Deck.clearPanel(); + this.setKey(confirm[0], confirm[1], { + appearence: { + image: { + iconid: 'check', + iconstyle: 'white', + offsetX: 0, + offsetY: 0, + rotation: 0, + size: 100 + }, + background: { + color: '#4caf50' + } + } + }); + this.setKey(deny[0], deny[1], { + appearence: { + image: { + iconid: 'clear', + iconstyle: 'white', + offsetX: 0, + offsetY: 0, + rotation: 0, + size: 100 + }, + background: { + color: '#f44336' + } + } + }); + this.setKey(cancel[0], cancel[1], { + appearence: { + image: { + iconid: 'arrow_back', + iconstyle: 'white', + offsetX: 0, + offsetY: 0, + rotation: 0, + size: 100 + }, + background: { + color: '#000000' + } + } + }); + var instance = this; + var flickerList = []; + function createText(value, x) { + var data = { + appearence: { + text: { + color: '#ffffff', + offsetX: 1, + offsetY: 0, + size: 30, + value: value + }, + background: { + color: '#000000' + } + } + }; + instance.setKey(x, 1, data); + flickerList.push({ x: x, data: data }); + } + if (this.columns % 2 == 0) { + createText('Are', 2); + createText('you', 3); + createText('sure', 4); + createText('?', 5); + } + else { + createText('Are', 1); + createText('you', 2); + createText('sure?', 3); + } + var flickerInterval = setInterval(function () { + if (_this.captures.confirm.enabled == true) { + for (var i = 0; i < flickerList.length; i++) { + var flickeritem = flickerList[i]; + if (flickeritem.data.appearence.background.color == '#000000') { + flickeritem.data.appearence.background.color = '#ffffff'; + flickeritem.data.appearence.text.color = '#000000'; + } + else { + flickeritem.data.appearence.background.color = '#000000'; + flickeritem.data.appearence.text.color = '#ffffff'; + } + instance.setKey(flickeritem.x, 1, flickeritem.data); + } + } + else + clearInterval(flickerInterval); + }, 500); + }; + Deck.prototype.getWaveCoords = function () { + var coords = []; + for (var x0 = 0; x0 < 8; x0++) { + var delay = x0; + coords.push([ + x0, + 0, + delay * 200 + ]); + } + for (var x1 = -1; x1 < 8; x1++) { + var delay = x1 + 1; + if (x1 >= 0) + coords.push([ + x1, + 1, + delay * 200 + ]); + } + for (var x2 = -2; x2 < 8; x2++) { + var delay = x2 + 2; + if (x2 >= 0) + coords.push([ + x2, + 2, + delay * 200 + ]); + } + for (var x3 = -3; x3 < 8; x3++) { + var delay = x3 + 3; + if (x3 >= 0) + coords.push([ + x3, + 3, + delay * 200 + ]); + } + return coords; + }; + return Deck; +}()); +exports.Deck = Deck; +; +//# sourceMappingURL=Deck.js.map \ No newline at end of file diff --git a/Backend/dist/Decks/Deck.js.map b/Backend/dist/Decks/Deck.js.map new file mode 100644 index 0000000..301afbf --- /dev/null +++ b/Backend/dist/Decks/Deck.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Deck.js","sourceRoot":"","sources":["../../src/Decks/Deck.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Decks/DeckManager.js b/Backend/dist/Decks/DeckManager.js new file mode 100644 index 0000000..5f0883f --- /dev/null +++ b/Backend/dist/Decks/DeckManager.js @@ -0,0 +1,99 @@ +exports.__esModule = true; +exports.DeckManager = void 0; +var path = require("path"); +var Logger_1 = require("../Logger"); +var StreamDeck = require("@elgato-stream-deck/node"); +var Deck_1 = require("./Deck"); +var fs = require("fs-extra"); +var writeFile = fs.writeFile, pathExists = fs.pathExists, readJson = fs.readJson; +var DeckManager = /** @class */ (function () { + function DeckManager() { + } + DeckManager.prototype.load = function (callback) { + var _this = this; + this.managerConfigPath = path.join(Undecked.dataPath, 'decks.json'); + this.decks = {}; + this.loadConfig(function () { + for (var i = 0; i < _this.managerConfig.decks.length; i++) { + var deckConfig = _this.managerConfig.decks[i]; + _this.decks[deckConfig.serialNumber] = new Deck_1.Deck(deckConfig, null); + } + _this.ensureDecks(function (newDecks) { + Logger_1.Log('info', "Loaded " + (Object.keys(_this.decks).length - newDecks) + " existing deck(s) and " + newDecks + " new deck(s)"); + callback(); + }); + }); + }; + DeckManager.prototype.loadConfig = function (callback) { + var _this = this; + pathExists(this.managerConfigPath, function (err, exists) { + if (err) + throw err; + if (exists) { + readJson(_this.managerConfigPath, function (err, json) { + if (err) + throw err; + _this.managerConfig = json; + callback(); + }); + } + else { + _this.managerConfig = defaultDeckConfig; + _this.saveConfig(callback); + } + }); + }; + DeckManager.prototype.saveConfig = function (callback) { + var toSave = { + decks: [] + }; + for (var serialNumber in this.decks) + toSave.decks.push(this.decks[serialNumber]["export"]()); + writeFile(this.managerConfigPath, JSON.stringify(toSave, null, 4), function (err) { + if (err) + Logger_1.Log('error', 'Error whilst saving manager config', err.message); + if (callback) + callback(); + }); + }; + DeckManager.prototype.hasDeck = function (serialNumber) { + return this.decks[serialNumber] != undefined; + }; + DeckManager.prototype.getDeck = function (serialNumber) { + if (this.decks[serialNumber]) + return this.decks[serialNumber]; + return null; + }; + DeckManager.prototype.ensureDecks = function (callback) { + var _this = this; + var currentDecks = Object.keys(this.decks).length; + var decks = StreamDeck.listStreamDecks(); + for (var i = 0; i < decks.length; i++) { + if (!this.hasDeck(decks[i].serialNumber)) + this.decks[decks[i].serialNumber] = new Deck_1.Deck({ + serialNumber: decks[i].serialNumber, + model: decks[i].model, + name: "Unnamed " + decks[i].model + }, decks[i].path); + else + this.decks[decks[i].serialNumber].setDevicePath(decks[i].path); + } + if (Object.keys(this.decks).length > currentDecks) + this.saveConfig(function () { return callback(Object.keys(_this.decks).length - currentDecks); }); + else + callback(0); + }; + DeckManager.prototype.getList = function () { + var list = []; + for (var serialNumber in this.decks) { + list.push({ serialNumber: serialNumber, name: this.decks[serialNumber].getName() }); + } + return list; + }; + return DeckManager; +}()); +exports.DeckManager = DeckManager; +var defaultDeckConfig = { + decks: [] +}; +//# sourceMappingURL=DeckManager.js.map \ No newline at end of file diff --git a/Backend/dist/Decks/DeckManager.js.map b/Backend/dist/Decks/DeckManager.js.map new file mode 100644 index 0000000..4fc8a2e --- /dev/null +++ b/Backend/dist/Decks/DeckManager.js.map @@ -0,0 +1 @@ +{"version":3,"file":"DeckManager.js","sourceRoot":"","sources":["../../src/Decks/DeckManager.ts"],"names":[],"mappings":";;AACA,2BAA4B;AAC5B,oCAAgC;AAChC,qDAAsD;AACtD,+BAA2C;AAE3C,6BAA+B;AACzB,IAAA,SAAS,GAA2B,EAAE,UAA7B,EAAE,UAAU,GAAe,EAAE,WAAjB,EAAE,QAAQ,GAAK,EAAE,SAAP,CAAQ;AAI7C;IAOC;IAAgB,CAAC;IAEjB,0BAAI,GAAJ,UAAK,QAAoB;QAAzB,iBAkBC;QAjBA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACpE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAEhB,IAAI,CAAC,UAAU,CAAC;YACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzD,IAAI,UAAU,GAAG,KAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC7C,KAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,IAAI,WAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;aACjE;YAED,KAAI,CAAC,WAAW,CAAC,UAAC,QAAgB;gBACjC,YAAG,CACF,MAAM,EACN,aAAU,MAAM,CAAC,IAAI,CAAC,KAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,QAAQ,+BAAyB,QAAQ,iBAAc,CAClG,CAAC;gBACF,QAAQ,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,gCAAU,GAAV,UAAW,QAAoB;QAA/B,iBAcC;QAbA,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAC,GAAG,EAAE,MAAM;YAC9C,IAAI,GAAG;gBAAE,MAAM,GAAG,CAAC;YACnB,IAAI,MAAM,EAAE;gBACX,QAAQ,CAAC,KAAI,CAAC,iBAAiB,EAAE,UAAC,GAAG,EAAE,IAAI;oBAC1C,IAAI,GAAG;wBAAE,MAAM,GAAG,CAAC;oBACnB,KAAI,CAAC,aAAa,GAAG,IAAI,CAAC;oBAC1B,QAAQ,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;aACH;iBAAM;gBACN,KAAI,CAAC,aAAa,GAAG,iBAAiB,CAAC;gBACvC,KAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;aAC1B;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,gCAAU,GAAV,UAAW,QAAqB;QAC/B,IAAI,MAAM,GAAuB;YAChC,KAAK,EAAE,EAAE;SACT,CAAC;QACF,KAAK,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK;YAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAM,CAAA,EAAE,CAAC,CAAC;QAE1F,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,UAAC,GAAG;YACtE,IAAI,GAAG;gBAAE,YAAG,CAAC,OAAO,EAAE,oCAAoC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YACzE,IAAI,QAAQ;gBAAE,QAAQ,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,6BAAO,GAAP,UAAQ,YAAoB;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC;IAC9C,CAAC;IAED,6BAAO,GAAP,UAAQ,YAAoB;QAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACb,CAAC;IAED,iCAAW,GAAX,UAAY,QAAoC;QAAhD,iBAmBC;QAlBA,IAAI,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;QAClD,IAAI,KAAK,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;gBACvC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,IAAI,WAAI,CAC3C;oBACC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY;oBACnC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;oBACrB,IAAI,EAAE,aAAW,KAAK,CAAC,CAAC,CAAC,CAAC,KAAO;iBACjC,EACD,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CACb,CAAC;;gBACE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACpE;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,YAAY;YAChD,IAAI,CAAC,UAAU,CAAC,cAAM,OAAA,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,YAAY,CAAC,EAAvD,CAAuD,CAAC,CAAC;;YAC3E,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,6BAAO,GAAP;QACC,IAAI,IAAI,GAA6C,EAAE,CAAC;QACxD,KAAK,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK,EAAE;YACpC,IAAI,CAAC,IAAI,CAAC,EAAE,YAAY,cAAA,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;SACtE;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IACF,kBAAC;AAAD,CAAC,AA/FD,IA+FC;AA/FY,kCAAW;AAiGxB,IAAI,iBAAiB,GAAuB;IAC3C,KAAK,EAAE,EAAE;CACT,CAAC"} \ No newline at end of file diff --git a/Backend/dist/FileHandler.js b/Backend/dist/FileHandler.js new file mode 100644 index 0000000..a1d90b8 --- /dev/null +++ b/Backend/dist/FileHandler.js @@ -0,0 +1,59 @@ +exports.__esModule = true; +exports.FileHandler = void 0; +var fs_1 = require("fs"); +var path = require("path"); +var Logger_1 = require("./Logger"); +var fs = require("fs-extra"); +var ensureDir = fs.ensureDir, pathExists = fs.pathExists, readJson = fs.readJson; +var FileHandler = /** @class */ (function () { + function FileHandler() { + } + FileHandler.prototype.load = function (callback) { + var _this = this; + Logger_1.Log('info', 'Preparing files'); + ensureDir(path.join(Undecked.dataPath), function (err) { + if (err) + throw err; + _this.loadConfig(function () { + callback(); + }); + }); + }; + FileHandler.prototype.loadConfig = function (callback) { + var _this = this; + this.configPath = path.join(Undecked.dataPath, 'config.json'); + pathExists(this.configPath, function (err, exists) { + if (err) + throw err; + if (exists) { + readJson(_this.configPath, function (err, json) { + if (err) + throw err; + Config = json; + callback(); + }); + } + else { + Config = defaultConfig; + _this.saveConfig(callback); + } + }); + }; + FileHandler.prototype.saveConfig = function (callback) { + fs_1.writeFile(this.configPath, JSON.stringify(Config, null, 4), function (err) { + if (err) + Logger_1.Log('error', 'Error whilst saving config', err.message); + if (callback) + callback(); + }); + }; + return FileHandler; +}()); +exports.FileHandler = FileHandler; +var defaultConfig = { + ports: { + http: 9999 + }, + name: null +}; +//# sourceMappingURL=FileHandler.js.map \ No newline at end of file diff --git a/Backend/dist/FileHandler.js.map b/Backend/dist/FileHandler.js.map new file mode 100644 index 0000000..6180b36 --- /dev/null +++ b/Backend/dist/FileHandler.js.map @@ -0,0 +1 @@ +{"version":3,"file":"FileHandler.js","sourceRoot":"","sources":["../src/FileHandler.ts"],"names":[],"mappings":";;AAAA,yBAA+B;AAC/B,2BAA4B;AAE5B,mCAA+B;AAE/B,6BAA+B;AACzB,IAAA,SAAS,GAA2B,EAAE,UAA7B,EAAE,UAAU,GAAe,EAAE,WAAjB,EAAE,QAAQ,GAAK,EAAE,SAAP,CAAQ;AAK7C;IAGC;IAAgB,CAAC;IAEjB,0BAAI,GAAJ,UAAK,QAAoB;QAAzB,iBAQC;QAPA,YAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAC/B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAC,GAAG;YAC3C,IAAI,GAAG;gBAAE,MAAM,GAAG,CAAC;YACnB,KAAI,CAAC,UAAU,CAAC;gBACf,QAAQ,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,gCAAU,GAAV,UAAW,QAAoB;QAA/B,iBAeC;QAdA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC9D,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,UAAC,GAAG,EAAE,MAAM;YACvC,IAAI,GAAG;gBAAE,MAAM,GAAG,CAAC;YACnB,IAAI,MAAM,EAAE;gBACX,QAAQ,CAAC,KAAI,CAAC,UAAU,EAAE,UAAC,GAAG,EAAE,IAAI;oBACnC,IAAI,GAAG;wBAAE,MAAM,GAAG,CAAC;oBACnB,MAAM,GAAG,IAAI,CAAC;oBACd,QAAQ,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;aACH;iBAAM;gBACN,MAAM,GAAG,aAAa,CAAC;gBACvB,KAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;aAC1B;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,gCAAU,GAAV,UAAW,QAAqB;QAC/B,cAAS,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,UAAC,GAAG;YAC/D,IAAI,GAAG;gBAAE,YAAG,CAAC,OAAO,EAAE,4BAA4B,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YACjE,IAAI,QAAQ;gBAAE,QAAQ,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;IACJ,CAAC;IACF,kBAAC;AAAD,CAAC,AAtCD,IAsCC;AAtCY,kCAAW;AAwCxB,IAAI,aAAa,GAAW;IAC3B,KAAK,EAAE;QACN,IAAI,EAAE,IAAI;KACV;IACD,IAAI,EAAE,IAAI;CACV,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Icons.js b/Backend/dist/Icons.js new file mode 100644 index 0000000..9dcc414 --- /dev/null +++ b/Backend/dist/Icons.js @@ -0,0 +1,46 @@ +exports.__esModule = true; +exports.Icons = void 0; +var fs_1 = require("fs"); +var path = require("path"); +var Logger_1 = require("./Logger"); +var Icons = /** @class */ (function () { + function Icons() { + this.materialPath = path.join(__filename, '..', '..', '..', 'Static', 'materialicons'); + this.icons = []; + this.iconIDs = []; + } + Icons.prototype.load = function (callback) { + var _this = this; + Logger_1.Log('info', 'Loading icons'); + fs_1.readdir(path.join(this.materialPath, 'black'), function (err, files) { + if (err) + throw err; + for (var i = 0; i < files.length; i++) { + if (files[i].includes('.png') && !files[i].includes('_low')) { + var fileID = files[i].replace('.png', ''); + _this.iconIDs.push(fileID); + _this.icons.push({ id: fileID, name: fileID.replace(/_/g, ' ') }); + } + } + Logger_1.Log('info', "Loaded " + files.length + " icon(s)"); + callback(); + }); + }; + Icons.prototype.getList = function () { + return this.icons; + }; + Icons.prototype.getPath = function (iconID, style) { + if (this.iconIDs.includes(iconID)) + return path.join(this.materialPath, style, iconID + ".png"); + console.log("Invalid icon '" + iconID + "'"); + return null; + }; + return Icons; +}()); +exports.Icons = Icons; +// export interface Icons { +// load: (callback: () => void) => void; +// getList: () => { id: string; name: string }[]; +// getPath: (iconID: string, style: 'black' | 'white') => string; +// } +//# sourceMappingURL=Icons.js.map \ No newline at end of file diff --git a/Backend/dist/Icons.js.map b/Backend/dist/Icons.js.map new file mode 100644 index 0000000..3638593 --- /dev/null +++ b/Backend/dist/Icons.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Icons.js","sourceRoot":"","sources":["../src/Icons.ts"],"names":[],"mappings":";;AAAA,yBAA6B;AAC7B,2BAA4B;AAE5B,mCAA+B;AAI/B;IAOC;QACC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;QAEvF,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,oBAAI,GAAJ,UAAK,QAAoB;QAAzB,iBAgBC;QAfA,YAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC7B,YAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,UAAC,GAAG,EAAE,KAAK;YACzD,IAAI,GAAG;gBAAE,MAAM,GAAG,CAAC;YAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;oBAC5D,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBAC1C,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC1B,KAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;iBACjE;aACD;YAED,YAAG,CAAC,MAAM,EAAE,YAAU,KAAK,CAAC,MAAM,aAAU,CAAC,CAAC;YAC9C,QAAQ,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,uBAAO,GAAP;QACC,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,uBAAO,GAAP,UAAQ,MAAc,EAAE,KAAwB;QAC/C,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAK,MAAM,SAAM,CAAC,CAAC;QAC/F,OAAO,CAAC,GAAG,CAAC,mBAAiB,MAAM,MAAG,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACb,CAAC;IACF,YAAC;AAAD,CAAC,AAzCD,IAyCC;AAzCY,sBAAK;AA2ClB,2BAA2B;AAC3B,yCAAyC;AAEzC,kDAAkD;AAClD,kEAAkE;AAClE,IAAI"} \ No newline at end of file diff --git a/Backend/dist/Integrations/ActionAPI.js b/Backend/dist/Integrations/ActionAPI.js new file mode 100644 index 0000000..c76d9ef --- /dev/null +++ b/Backend/dist/Integrations/ActionAPI.js @@ -0,0 +1,39 @@ +exports.__esModule = true; +exports.ActionAPI = void 0; +var Logger_1 = require("../Logger"); +var ActionAPI = /** @class */ (function () { + function ActionAPI(settings) { + this._integrationID = settings.integrationID; + } + /** + * @deprecated + * Replaced by 'OnExecute' + */ + ActionAPI.prototype.handle = function (callback) { + if (this._hdl == undefined) { + this._hdl = callback; + } + else + Logger_1.Log('error', "Unable to register two 'handle' events"); + }; + ActionAPI.prototype.onExecute = function (callback) { + if (this._hdl == undefined) { + this._hdl = callback; + } + else + Logger_1.Log('error', "Unable to register two 'onExecute' (Used to be 'handle') events"); + }; + ActionAPI.prototype.onOpenEditor = function (callback) { + if (this._openEditor == undefined) { + this._openEditor = callback; + } + else + Logger_1.Log('error', "Unable to register two 'onOpenEditor' events"); + }; + ActionAPI.prototype.getConnection = function (connectionType, connectionID) { + return Undecked.Connections.getConnection(this._integrationID, connectionType, connectionID); + }; + return ActionAPI; +}()); +exports.ActionAPI = ActionAPI; +//# sourceMappingURL=ActionAPI.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/ActionAPI.js.map b/Backend/dist/Integrations/ActionAPI.js.map new file mode 100644 index 0000000..75e318c --- /dev/null +++ b/Backend/dist/Integrations/ActionAPI.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ActionAPI.js","sourceRoot":"","sources":["../../src/Integrations/ActionAPI.ts"],"names":[],"mappings":";;AAGA,oCAAgC;AAIhC;IAKC,mBAAY,QAA4B;QACvC,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACH,0BAAM,GAAN,UACC,QAIS;QAET,IAAI,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE;YAC3B,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;SACrB;;YAAM,YAAG,CAAC,OAAO,EAAE,wCAAwC,CAAC,CAAC;IAC/D,CAAC;IAED,6BAAS,GAAT,UAAU,QAID;QAER,IAAI,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE;YAC3B,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;SACrB;;YAAM,YAAG,CAAC,OAAO,EAAE,iEAAiE,CAAC,CAAC;IACxF,CAAC;IAED,gCAAY,GAAZ,UAAa,QAAgF;QAC5F,IAAI,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE;YAClC,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;SAC5B;;YAAM,YAAG,CAAC,OAAO,EAAE,8CAA8C,CAAC,CAAC;IACrE,CAAC;IAED,iCAAa,GAAb,UAAc,cAAsB,EAAE,YAAoB;QACzD,OAAO,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;IAC9F,CAAC;IACF,gBAAC;AAAD,CAAC,AA7CD,IA6CC;AA7CY,8BAAS"} \ No newline at end of file diff --git a/Backend/dist/Integrations/EditorAPI.js b/Backend/dist/Integrations/EditorAPI.js new file mode 100644 index 0000000..d8d6208 --- /dev/null +++ b/Backend/dist/Integrations/EditorAPI.js @@ -0,0 +1,82 @@ +var __spreadArray = (this && this.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +exports.__esModule = true; +exports.EditorAPI = void 0; +var Logger_1 = require("../Logger"); +var EditorAPI = /** @class */ (function () { + function EditorAPI(settings) { + this._actionInstance = settings.actionInstance; + this._integrationID = settings.integrationID; + this.keyPageID = settings.pageID; + this._editorID = settings.editorID; + this.keyX = settings.x; + this.keyY = settings.y; + this.key = settings.key; + this.isOpen = false; + this.tools = { + getFieldFromFields: function (fields, fieldID) { + for (var i = 0; i < fields.length; i++) + if ((fields[i].id = fieldID)) + return fields[i]; + return null; + }, + objectifyFields: function (fields) { + var fieldObject = {}; + for (var i = 0; i < fields.length; i++) + fieldObject[fields[i].id] = fields[i]; + return fieldObject; + }, + objectifyFieldsValues: function (fields) { + var fieldObject = {}; + for (var i = 0; i < fields.length; i++) + fieldObject[fields[i].id] = fields[i].value; + return fieldObject; + } + }; + } + EditorAPI.prototype._emit = function (query) { + var _a; + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + if (this.isOpen) + (_a = Undecked.SocketServer).broadcast.apply(_a, __spreadArray(["AE_" + this._editorID, query], args)); + }; + EditorAPI.prototype.close = function () { + this.isOpen = false; + }; + EditorAPI.prototype.saveProperties = function (properties) { + this._actionInstance.properties = properties; + if (Undecked.Pages.exists(this.keyPageID)) + Undecked.Pages.get(this.keyPageID).save(); + }; + EditorAPI.prototype.onFieldChanges = function (callback) { + if (this._change == undefined) { + this._change = callback; + } + else + Logger_1.Log('error', "Unable to register two 'onChange' events"); + }; + EditorAPI.prototype.setFields = function (fields) { + for (var i = 0; i < fields.length; i++) + if (fields[i].type == 'connection') { + fields[i].values = [ + { id: 'none', text: 'None' } + ]; + var connectionType = fields[i].connectionType; + if (connectionType) { + fields[i].values = __spreadArray([ + { id: 'none', text: 'None' } + ], Undecked.Connections.getConnections(this._integrationID, connectionType)); + } + } + this._emit('fields', fields); + }; + return EditorAPI; +}()); +exports.EditorAPI = EditorAPI; +//# sourceMappingURL=EditorAPI.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/EditorAPI.js.map b/Backend/dist/Integrations/EditorAPI.js.map new file mode 100644 index 0000000..dd409fe --- /dev/null +++ b/Backend/dist/Integrations/EditorAPI.js.map @@ -0,0 +1 @@ +{"version":3,"file":"EditorAPI.js","sourceRoot":"","sources":["../../src/Integrations/EditorAPI.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/IntegrationApi.js b/Backend/dist/Integrations/IntegrationApi.js new file mode 100644 index 0000000..5d479be --- /dev/null +++ b/Backend/dist/Integrations/IntegrationApi.js @@ -0,0 +1,69 @@ +exports.__esModule = true; +exports.IntegrationAPI = void 0; +var Logger_1 = require("../Logger"); +var ActionAPI_1 = require("./ActionAPI"); +var IntegrationAPI = /** @class */ (function () { + function IntegrationAPI(settings) { + this._integrationID = settings.integrationID; + this._integration = settings.integration; + this._actions = {}; + this._connectionvalidators = {}; + } + IntegrationAPI.prototype.registerAction = function (actionID, name, callback) { + //Backwards compatibility + if (typeof name == 'function') { + callback = name; + name = actionID; + if (this._integration.integration.actions != undefined) + for (var i = 0; i < this._integration.integration.actions.length; i++) + if (this._integration.integration.actions[i].id == actionID) { + name = this._integration.integration.actions[i].name; + break; + } + } + if (this._actions[actionID] == undefined) { + this._actions[actionID] = { api: new ActionAPI_1.ActionAPI({ integrationID: this._integrationID }), name: name }; + callback(this._actions[actionID].api); + } + else + Logger_1.Log('error', "Integration '" + this._integrationID + "' tried to register duplicate action '" + actionID + "'"); + }; + IntegrationAPI.prototype.registerConnectionValidator = function (connectionType, callback) { + if (this._integration.connectionslist.includes(connectionType)) { + if (this._connectionvalidators[connectionType] == undefined) { + this._connectionvalidators[connectionType] = callback; + } + else + Logger_1.Log('error', "Integration '" + this + ._integrationID + "' tried to register duplicate connection validator '" + connectionType + "'"); + } + else + Logger_1.Log('error', "Integration '" + this + ._integrationID + "' tried to register non-existing connection validator '" + connectionType + "'"); + }; + IntegrationAPI.prototype.hasAction = function (actionID) { + return this._actions[actionID] != undefined; + }; + IntegrationAPI.prototype.getAction = function (actionID) { + if (this.hasAction(actionID)) + return this._actions[actionID].api; + return null; + }; + IntegrationAPI.prototype.getActionList = function () { + var list = []; + for (var actionID in this._actions) + list.push({ id: actionID, name: this._actions[actionID].name }); + return list; + }; + IntegrationAPI.prototype.hasValidator = function (connectionType) { + return this._connectionvalidators[connectionType] != undefined; + }; + IntegrationAPI.prototype.getValidator = function (connectionType) { + if (this.hasValidator(connectionType)) + return this._connectionvalidators[connectionType]; + return null; + }; + return IntegrationAPI; +}()); +exports.IntegrationAPI = IntegrationAPI; +//# sourceMappingURL=IntegrationApi.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/IntegrationApi.js.map b/Backend/dist/Integrations/IntegrationApi.js.map new file mode 100644 index 0000000..3e2e398 --- /dev/null +++ b/Backend/dist/Integrations/IntegrationApi.js.map @@ -0,0 +1 @@ +{"version":3,"file":"IntegrationApi.js","sourceRoot":"","sources":["../../src/Integrations/IntegrationApi.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/IntegrationsManager.js b/Backend/dist/Integrations/IntegrationsManager.js new file mode 100644 index 0000000..75dbb74 --- /dev/null +++ b/Backend/dist/Integrations/IntegrationsManager.js @@ -0,0 +1,267 @@ +var __spreadArray = (this && this.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +exports.__esModule = true; +exports.IntegrationsManager = void 0; +var path = require("path"); +var Logger_1 = require("../Logger"); +var IntegrationApi_1 = require("./IntegrationApi"); +var EditorAPI_1 = require("./EditorAPI"); +var fs = require("fs-extra"); +var ensureDir = fs.ensureDir, pathExists = fs.pathExists, readdir = fs.readdir, readJSON = fs.readJSON, readJson = fs.readJson; +var IntegrationsManager = /** @class */ (function () { + function IntegrationsManager() { + this.integrations = {}; + this.openEditors = {}; + } + IntegrationsManager.prototype.load = function (callback) { + var _this = this; + Logger_1.Log('info', 'Loading integrations'); + ensureDir(path.join(Undecked.dataPath, 'custom_integrations'), function (err) { + if (err) + throw err; + _this.loadIntegrations(callback); + }); + }; + IntegrationsManager.prototype.loadIntegrations = function (callback) { + var instance = this; + var integrations = { buildin: [], custom: [] }; + readdir(path.join(__filename, '..', 'buildin'), function (err, buildinfiles) { + if (err) + throw err; + integrations.buildin = buildinfiles; + readdir(path.join(Undecked.dataPath, 'custom_integrations'), function (err, customfiles) { + if (err) + throw err; + integrations.custom = customfiles; + var loaded = { buildin: 0, custom: 0 }; + function loadIntegrations(type, cb, i) { + if (i === void 0) { i = 0; } + if (integrations[type][i]) { + var integrationID = integrations[type][i]; + var integrationAddress = type == 'buildin' + ? path.join(__filename, '..', 'buildin', integrationID, 'integration') + : path.join(Undecked.dataPath, 'custom_integrations', integrationID, 'integration'); + var waitInterval; + try { + instance.integrations[integrationID] = { + type: type, + api: null, + connectionslist: [], + connectionsmap: {}, + integration: require(integrationAddress) + }; + var waitCounter = 0; + waitInterval = setInterval(function () { + if (instance.integrations[integrationID].integration != undefined && + instance.integrations[integrationID].integration.main != undefined) { + clearInterval(waitInterval); + loaded[type]++; + loadIntegrations(type, function () { + Logger_1.Log('info', "Loaded " + type + " integration '" + integrationID + "'"); + cb(); + }, i + 1); + } + else { + waitCounter++; + if (waitCounter > 200) { + clearInterval(waitInterval); + delete instance.integrations[integrationID]; + Logger_1.Log('error', "Unable to load " + type + " integration '" + integrationID + "': Loading timeout"); + loadIntegrations(type, cb, i + 1); + } + } + }, 10); + } + catch (error) { + clearInterval(waitInterval); + Logger_1.Log('error', "Unable to load " + type + " integration '" + integrationID + "': " + error.message); + loadIntegrations(type, cb, i + 1); + } + } + else + cb(); + } + loadIntegrations('buildin', function () { + loadIntegrations('custom', function () { + for (var integrationID in instance.integrations) { + var integration = instance.integrations[integrationID]; + // for (let i = 0; i < integration.integration.actions.length; i++) { + // if (integration.integration.actions[i] != undefined) + // integration.actionslist.push(integration.integration.actions[i].id); + // else + // Log( + // `warn`, + // `Invalid action of ${integrationID} ${JSON.stringify( + // integration.integration.actions[i], + // null, + // 4 + // )}` + // ); + // } + if (integration.integration.connections != undefined) + for (var i = 0; i < integration.integration.connections.length; i++) { + integration.connectionslist.push(integration.integration.connections[i].type); + integration.connectionsmap[integration.integration.connections[i].type] = + integration.integration.connections[i]; + } + integration.api = new IntegrationApi_1.IntegrationAPI({ integrationID: integrationID, integration: integration }); + try { + integration.integration.main(integration.api); + } + catch (error) { + Logger_1.Log('error', "Error in '" + integrationID + "'", error.message, error.stack); + } + } + Logger_1.Log('info', "Loaded " + loaded.buildin + " buildin integrations and " + loaded.custom + " integrations"); + callback(); + }); + }); + }); + }); + }; + IntegrationsManager.prototype.exists = function (integrationID) { + return this.integrations[integrationID] != undefined; + }; + IntegrationsManager.prototype.get = function (integrationID) { + if (this.exists(integrationID)) + return this.integrations[integrationID]; + return null; + }; + IntegrationsManager.prototype.getActions = function () { + var actions = []; + for (var integrationID in this.integrations) { + var integration = this.integrations[integrationID]; + actions = actions.concat(integration.api.getActionList().map(function (action) { + return { + integrationID: integrationID, + integrationName: integration.integration.name, + actionID: action.id, + actionName: action.name + }; + })); + } + return actions; + }; + IntegrationsManager.prototype.getConnections = function () { + var connections = []; + for (var integrationID in this.integrations) { + var integration = this.integrations[integrationID]; + if (integration.integration.connections != undefined) + for (var i = 0; i < integration.integration.connections.length; i++) { + var con = integration.integration.connections[i]; + connections.push({ + integrationID: integrationID, + integrationName: integration.integration.name, + connectionType: con.type, + connectionName: con.name + }); + } + } + connections.sort(function (a, b) { + if (a.integrationName == b.integrationName) + return 0; + return a.integrationName > b.integrationName ? 1 : -1; + }); + return connections; + }; + IntegrationsManager.prototype.startEditor = function (settings) { + var _this = this; + if (this.exists(settings.integrationID)) { + var integrationWrapper = this.get(settings.integrationID); + var integration = integrationWrapper.integration; + var integrationAPI = integrationWrapper.api; + if (integrationAPI.hasAction(settings.actionID)) { + var action = integrationAPI.getAction(settings.actionID); + if (Undecked.Pages.exists(settings.pageID)) { + var page = Undecked.Pages.get(settings.pageID); + if (page.hasKey(settings.keyX, settings.keyY)) { + var key = page.getKey(settings.keyX, settings.keyY); + var actionInstance = page.getActionInstance(key, settings.actionInstanceID); + if (actionInstance) { + var editorID = Undecked.generateRandom(8, function (generatedValid) { + return !_this.exists(generatedValid); + }); + var editorAPI = new EditorAPI_1.EditorAPI({ + actionInstance: actionInstance, + integrationID: settings.integrationID, + pageID: settings.pageID, + editorID: editorID, + x: settings.keyX, + y: settings.keyY, + key: key + }); + this.openEditors[editorID] = { + editor: editorAPI, + editorID: editorID, + ready: function () { + editorAPI.isOpen = true; + action._openEditor(editorAPI, actionInstance.properties); + }, + destroy: function () { + if (_this.openEditors[editorID] != undefined) { + _this.openEditors[editorID].editor.close(); + delete _this.openEditors[editorID]; + } + } + }; + return { actionEditorID: editorID, properties: {} }; + } + else + return { error: "Key does not have this actioninstance" }; + } + else + return { error: "Key does not exist" }; + } + else + return { error: "Page '" + settings.pageID + "' does not exist" }; + } + else + return { error: "Action '" + settings.actionID + "' does not exist" }; + } + else + return { error: "Integration '" + settings.integrationID + "' does not exist" }; + }; + IntegrationsManager.prototype.editorExists = function (editorID) { + return this.openEditors[editorID] != undefined; + }; + IntegrationsManager.prototype.getEditor = function (editorID) { + if (this.editorExists(editorID)) + return this.openEditors[editorID]; + return null; + }; + IntegrationsManager.prototype.executeActions = function (actions, deck) { + for (var actionInstanceID in actions) { + var actionInstance = actions[actionInstanceID]; + if (Undecked.Integrations.exists(actionInstance.integrationID)) { + var integration = Undecked.Integrations.get(actionInstance.integrationID); + if (integration.api.hasAction(actionInstance.actionID)) { + var action = integration.api.getAction(actionInstance.actionID); + if (typeof action._hdl == 'function') + action._hdl(actionInstance.properties, function (text, type) { + if (type === void 0) { type = 'info'; } + if (actionInstance.logs == undefined) + actionInstance.logs = []; + actionInstance.logs = __spreadArray([ + { timestamp: Date.now(), type: type, text: text } + ], actionInstance.logs); + if (actionInstance.logs.length > 20) + actionInstance.logs.splice(20, actionInstance.logs.length - 20); + // Log( + // type.replace('warning', 'warn'), + // `[Deck:${deck != null ? deck.getName() : 'Internal'}][Integration:${integration + // .integration.name}][Action:${actionInstance.actionID}] ${text}` + // ); + }, deck); + else + Logger_1.Log('warn', "Tried calling non-exisintg handler for action '" + actionInstance.actionID + "' of integration '" + actionInstance.integrationID + "'"); + } + } + } + }; + return IntegrationsManager; +}()); +exports.IntegrationsManager = IntegrationsManager; +//# sourceMappingURL=IntegrationsManager.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/IntegrationsManager.js.map b/Backend/dist/Integrations/IntegrationsManager.js.map new file mode 100644 index 0000000..a026cf9 --- /dev/null +++ b/Backend/dist/Integrations/IntegrationsManager.js.map @@ -0,0 +1 @@ +{"version":3,"file":"IntegrationsManager.js","sourceRoot":"","sources":["../../src/Integrations/IntegrationsManager.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/blackmagick/actions/atem/fadeToBlack.js b/Backend/dist/Integrations/buildin/blackmagick/actions/atem/fadeToBlack.js new file mode 100644 index 0000000..eaa1258 --- /dev/null +++ b/Backend/dist/Integrations/buildin/blackmagick/actions/atem/fadeToBlack.js @@ -0,0 +1,38 @@ +exports.__esModule = true; +var Atem = require('atem-connection').Atem; +module.exports = function (ActionAPI) { + ActionAPI.onExecute(function (properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : "none"; + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('bm_atem', connectionID); + if (connection && connection.instance) { + var atem = connection.instance; + atem.fadeToBlack().then(function () { + status("Atem fade to black", 'info'); + })["catch"](function (error) { + status("Error whilst setting atem fadetoblack: " + error, 'error'); + }); + } + else + status('Atem is not online', 'error'); + } + else + status('No connection specified', 'error'); + }); + ActionAPI.onOpenEditor(function (EditorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : "none"; + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + connectionID = fieldObject.connectionID; + EditorAPI.saveProperties({ connectionID: connectionID }); + }); + EditorAPI.setFields([{ + id: 'connectionID', + name: "Connection", + type: "connection", + connectionType: "bm_atem", + value: connectionID + }]); + }); +}; +//# sourceMappingURL=fadeToBlack.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/blackmagick/actions/atem/fadeToBlack.js.map b/Backend/dist/Integrations/buildin/blackmagick/actions/atem/fadeToBlack.js.map new file mode 100644 index 0000000..9919f19 --- /dev/null +++ b/Backend/dist/Integrations/buildin/blackmagick/actions/atem/fadeToBlack.js.map @@ -0,0 +1 @@ +{"version":3,"file":"fadeToBlack.js","sourceRoot":"","sources":["../../../../../../src/Integrations/buildin/blackmagick/actions/atem/fadeToBlack.ts"],"names":[],"mappings":";AAEQ,IAAA,IAAI,GAAK,OAAO,CAAC,iBAAiB,CAAC,KAA/B,CAA+B;AAE3C,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IAClC,SAAS,CAAC,SAAS,CAAC,UAAC,UAAU,EAAE,MAAM;QACnC,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAA;QAE1F,IAAI,YAAY,IAAI,MAAM,EAAE;YACxB,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;YACjE,IAAI,UAAU,IAAI,UAAU,CAAC,QAAQ,EAAE;gBACnC,IAAI,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC;gBAE/B,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC;oBACpB,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAA;gBACxC,CAAC,CAAC,CAAC,OAAK,CAAA,CAAC,UAAC,KAAK;oBACX,MAAM,CAAC,4CAA0C,KAAO,EAAE,OAAO,CAAC,CAAA;gBACtE,CAAC,CAAC,CAAA;aACL;;gBAAM,MAAM,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAA;SAC/C;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAAe;QACzD,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAA;QAE1F,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM;YAC5B,IAAI,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAA;YAE/D,YAAY,GAAG,WAAW,CAAC,YAAY,CAAA;YAEvC,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,cAAA,EAAE,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;QAEF,SAAS,CAAC,SAAS,CAAC,CAAC;gBACjB,EAAE,EAAE,cAAc;gBAClB,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,YAAY;gBAClB,cAAc,EAAE,SAAS;gBACzB,KAAK,EAAE,YAAY;aACtB,CAAC,CAAC,CAAA;IACP,CAAC,CAAC,CAAA;AACN,CAAC,CAAA"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/blackmagick/actions/atem/setPreview.js b/Backend/dist/Integrations/buildin/blackmagick/actions/atem/setPreview.js new file mode 100644 index 0000000..e6da754 --- /dev/null +++ b/Backend/dist/Integrations/buildin/blackmagick/actions/atem/setPreview.js @@ -0,0 +1,77 @@ +exports.__esModule = true; +var Atem = require('atem-connection').Atem; +module.exports = function (ActionAPI) { + ActionAPI.onExecute(function (properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : "none"; + var input = properties.input != undefined ? properties.input : "none"; + if (connectionID != 'none') { + if (input != 'none') { + var connection = ActionAPI.getConnection('bm_atem', connectionID); + if (connection && connection.instance) { + var atem = connection.instance; + try { + atem.changePreviewInput(input); + status("Atem preview was set to " + input, 'info'); + } + catch (error) { + status("Error whilst setting atem input: " + error, 'error'); + } + } + else + status('Atem is not online', 'error'); + } + else + status('No input specified', 'error'); + } + else + status('No connection specified', 'error'); + }); + ActionAPI.onOpenEditor(function (EditorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : "none"; + var input = properties.input != undefined ? properties.input : "none"; + var connectionField = { + id: 'connectionID', + name: "Connection", + type: "connection", + connectionType: "bm_atem", + value: connectionID + }; + var inputField = { + id: "input", + name: "Input", + type: "select", + value: input, + values: [{ id: 'none', text: "None" }] + }; + var validate = function () { + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('bm_atem', connectionID); + if (connection && connection.instance) { + var atem = connection.instance; + var inputs = atem.state.inputs; + var values = [{ id: 'none', text: 'None' }]; + for (var key in inputs) + if (parseInt(key) < 1000) + values.push({ id: inputs[key].inputId, text: inputs[key].longName }); + inputField.values = values; + } + else + inputField.values = [{ id: 'none', text: 'none' }]; + } + else + inputField.values = [{ id: 'none', text: 'none' }]; + EditorAPI.setFields([connectionField, inputField]); + }; + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + connectionID = fieldObject.connectionID; + input = fieldObject.input; + connectionField.value = connectionID; + inputField.value = input; + EditorAPI.saveProperties({ connectionID: connectionID, input: input }); + validate(); + }); + validate(); + }); +}; +//# sourceMappingURL=setPreview.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/blackmagick/actions/atem/setPreview.js.map b/Backend/dist/Integrations/buildin/blackmagick/actions/atem/setPreview.js.map new file mode 100644 index 0000000..1719d6d --- /dev/null +++ b/Backend/dist/Integrations/buildin/blackmagick/actions/atem/setPreview.js.map @@ -0,0 +1 @@ +{"version":3,"file":"setPreview.js","sourceRoot":"","sources":["../../../../../../src/Integrations/buildin/blackmagick/actions/atem/setPreview.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/blackmagick/actions/atem/setProgram copy.js b/Backend/dist/Integrations/buildin/blackmagick/actions/atem/setProgram copy.js new file mode 100644 index 0000000..84bc53c --- /dev/null +++ b/Backend/dist/Integrations/buildin/blackmagick/actions/atem/setProgram copy.js @@ -0,0 +1,76 @@ +exports.__esModule = true; +var Atem = require('atem-connection').Atem; +module.exports = function (ActionAPI) { + ActionAPI.onExecute(function (properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : "none"; + var input = properties.input != undefined ? properties.input : "none"; + if (connectionID != 'none') { + if (input != 'none') { + var connection = ActionAPI.getConnection('bm_atem', connectionID); + if (connection && connection.instance) { + var atem = connection.instance; + try { + atem.changeProgramInput(input); + status("Atem program was set to ".concat(input), 'info'); + } + catch (error) { + status("Error whilst setting atem input: ".concat(error), 'error'); + } + } + else + status('Atem is not online', 'error'); + } + else + status('No input specified', 'error'); + } + else + status('No connection specified', 'error'); + }); + ActionAPI.onOpenEditor(function (EditorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : "none"; + var input = properties.input != undefined ? properties.input : "none"; + var connectionField = { + id: 'connectionID', + name: "Connection", + type: "connection", + connectionType: "bm_atem", + value: connectionID + }; + var inputField = { + id: "input", + name: "Input", + type: "select", + value: input, + values: [{ id: 'none', text: "None" }] + }; + var validate = function () { + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('bm_atem', connectionID); + if (connection && connection.instance) { + var atem = connection.instance; + var inputs = atem.state.channels; + var values = [{ id: 'none', text: 'None' }]; + for (var key in inputs) + values.push({ id: key, text: inputs[key].name }); + inputField.values = values; + } + else + inputField.values = [{ id: 'none', text: 'none' }]; + } + else + inputField.values = [{ id: 'none', text: 'none' }]; + EditorAPI.setFields([connectionField, inputField]); + }; + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + connectionID = fieldObject.connectionID; + input = fieldObject.input; + connectionField.value = connectionID; + inputField.value = input; + EditorAPI.saveProperties({ connectionID: connectionID, input: input }); + validate(); + }); + validate(); + }); +}; +//# sourceMappingURL=setProgram%20copy.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/blackmagick/actions/atem/setProgram copy.js.map b/Backend/dist/Integrations/buildin/blackmagick/actions/atem/setProgram copy.js.map new file mode 100644 index 0000000..4a9e653 --- /dev/null +++ b/Backend/dist/Integrations/buildin/blackmagick/actions/atem/setProgram copy.js.map @@ -0,0 +1 @@ +{"version":3,"file":"setProgram copy.js","sourceRoot":"","sources":["../../../../../../src/Integrations/buildin/blackmagick/actions/atem/setProgram copy.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/blackmagick/actions/atem/setProgram.js b/Backend/dist/Integrations/buildin/blackmagick/actions/atem/setProgram.js new file mode 100644 index 0000000..585969a --- /dev/null +++ b/Backend/dist/Integrations/buildin/blackmagick/actions/atem/setProgram.js @@ -0,0 +1,76 @@ +exports.__esModule = true; +var Atem = require('atem-connection').Atem; +module.exports = function (ActionAPI) { + ActionAPI.onExecute(function (properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : "none"; + var input = properties.input != undefined ? properties.input : "none"; + if (connectionID != 'none') { + if (input != 'none') { + var connection = ActionAPI.getConnection('bm_atem', connectionID); + if (connection && connection.instance) { + var atem = connection.instance; + try { + atem.changeProgramInput(input); + status("Atem program was set to " + input, 'info'); + } + catch (error) { + status("Error whilst setting atem input: " + error, 'error'); + } + } + else + status('Atem is not online', 'error'); + } + else + status('No input specified', 'error'); + } + else + status('No connection specified', 'error'); + }); + ActionAPI.onOpenEditor(function (EditorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : "none"; + var input = properties.input != undefined ? properties.input : "none"; + var connectionField = { + id: 'connectionID', + name: "Connection", + type: "connection", + connectionType: "bm_atem", + value: connectionID + }; + var inputField = { + id: "input", + name: "Input", + type: "select", + value: input, + values: [{ id: 'none', text: "None" }] + }; + var validate = function () { + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('bm_atem', connectionID); + if (connection && connection.instance) { + var atem = connection.instance; + var inputs = atem.state.inputs; + var values = [{ id: 'none', text: 'None' }]; + for (var key in inputs) + values.push({ id: inputs[key].inputId, text: inputs[key].longName }); + inputField.values = values; + } + else + inputField.values = [{ id: 'none', text: 'none' }]; + } + else + inputField.values = [{ id: 'none', text: 'none' }]; + EditorAPI.setFields([connectionField, inputField]); + }; + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + connectionID = fieldObject.connectionID; + input = fieldObject.input; + connectionField.value = connectionID; + inputField.value = input; + EditorAPI.saveProperties({ connectionID: connectionID, input: input }); + validate(); + }); + validate(); + }); +}; +//# sourceMappingURL=setProgram.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/blackmagick/actions/atem/setProgram.js.map b/Backend/dist/Integrations/buildin/blackmagick/actions/atem/setProgram.js.map new file mode 100644 index 0000000..e54b297 --- /dev/null +++ b/Backend/dist/Integrations/buildin/blackmagick/actions/atem/setProgram.js.map @@ -0,0 +1 @@ +{"version":3,"file":"setProgram.js","sourceRoot":"","sources":["../../../../../../src/Integrations/buildin/blackmagick/actions/atem/setProgram.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/blackmagick/integration.js b/Backend/dist/Integrations/buildin/blackmagick/integration.js new file mode 100644 index 0000000..5884aa4 --- /dev/null +++ b/Backend/dist/Integrations/buildin/blackmagick/integration.js @@ -0,0 +1,19 @@ +exports.__esModule = true; +module.exports = { + name: 'BlackMagick', + description: "Control various BlackMagick devices", + main: require('./main'), + connections: [{ + name: "Atem", + type: "bm_atem", + fields: [ + { + id: "ip", + name: "IP Address", + type: "text", + value: "0.0.0.0" + } + ] + }] +}; +//# sourceMappingURL=integration.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/blackmagick/integration.js.map b/Backend/dist/Integrations/buildin/blackmagick/integration.js.map new file mode 100644 index 0000000..9c95ff3 --- /dev/null +++ b/Backend/dist/Integrations/buildin/blackmagick/integration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/blackmagick/integration.ts"],"names":[],"mappings":";AAEA,MAAM,CAAC,OAAO,GAAG;IACb,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,qCAAqC;IAClD,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;IACvB,WAAW,EAAE,CAAC;YACV,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,SAAS;YACf,MAAM,EAAE;gBACJ;oBACI,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,SAAS;iBACnB;aACJ;SACJ,CAAC;CACU,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/blackmagick/main.js b/Backend/dist/Integrations/buildin/blackmagick/main.js new file mode 100644 index 0000000..9220880 --- /dev/null +++ b/Backend/dist/Integrations/buildin/blackmagick/main.js @@ -0,0 +1,30 @@ +exports.__esModule = true; +var Atem = require('atem-connection').Atem; +module.exports = function (Api) { + //----- ATEM ----- + Api.registerAction('atem_setPreview', 'Set Atem preview', require('./actions/atem/setPreview')); + Api.registerAction('atem_setProgram', 'Set Atem program', require('./actions/atem/setProgram')); + Api.registerAction('atem_fadeToBlack', 'Atem fade to black', require('./actions/atem/fadeToBlack')); + Api.registerConnectionValidator('bm_atem', function (validatorAPI) { + var ip = validatorAPI.properties.ip; + var timeout; + var res = function (valid, message) { + res = function () { }; + validatorAPI.callback(valid, message); + clearTimeout(timeout); + }; + timeout = setTimeout(function () { + res(false, 'Timeout whilst trying to connect to atem'); + }, 5000); + var atem = new Atem({ debugBuffers: true }); + atem.on('error', function (error) { + res(false, error); + }); + atem.on('connected', function () { + validatorAPI.setInstance(atem); + res(true); + }); + atem.connect(ip); + }); +}; +//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/blackmagick/main.js.map b/Backend/dist/Integrations/buildin/blackmagick/main.js.map new file mode 100644 index 0000000..2ff0903 --- /dev/null +++ b/Backend/dist/Integrations/buildin/blackmagick/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/blackmagick/main.ts"],"names":[],"mappings":";AACQ,IAAA,IAAI,GAAK,OAAO,CAAC,iBAAiB,CAAC,KAA/B,CAA+B;AAE3C,MAAM,CAAC,OAAO,GAAG,UAAC,GAAmB;IACjC,kBAAkB;IAClB,GAAG,CAAC,cAAc,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAA;IAC/F,GAAG,CAAC,cAAc,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAA;IAC/F,GAAG,CAAC,cAAc,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAA;IAEnG,GAAG,CAAC,2BAA2B,CAAC,SAAS,EAAE,UAAC,YAAY;QACpD,IAAI,EAAE,GAAG,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QAEpC,IAAI,OAAuB,CAAC;QAC5B,IAAI,GAAG,GAAG,UAAC,KAAc,EAAE,OAAgB;YACvC,GAAG,GAAG,cAAQ,CAAC,CAAC;YAChB,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YACrC,YAAY,CAAC,OAAO,CAAC,CAAA;QACzB,CAAC,CAAA;QAED,OAAO,GAAG,UAAU,CAAC;YACjB,GAAG,CAAC,KAAK,EAAE,0CAA0C,CAAC,CAAA;QAC1D,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAA;QAE3C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,KAAK;YACnB,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QACrB,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;YACjB,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;YAE9B,GAAG,CAAC,IAAI,CAAC,CAAA;QACb,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACpB,CAAC,CAAC,CAAA;AACN,CAAC,CAAA"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/deck/actions/changepage.js b/Backend/dist/Integrations/buildin/deck/actions/changepage.js new file mode 100644 index 0000000..bc2cf16 --- /dev/null +++ b/Backend/dist/Integrations/buildin/deck/actions/changepage.js @@ -0,0 +1,82 @@ +var __spreadArray = (this && this.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +exports.__esModule = true; +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status, executed) { + if (properties.page != undefined) { + if (Undecked.Pages.exists(properties.page)) { + var page = Undecked.Pages.get(properties.page); + if (properties.decks != undefined && properties.decks.length > 0) { + var changed = []; + var failed = []; + for (var i = 0; i < properties.decks.length; i++) { + var serialNumber = properties.decks[i]; + if (Undecked.Decks.hasDeck(serialNumber) || serialNumber == 'current') { + var deck = serialNumber != 'current' ? Undecked.Decks.getDeck(serialNumber) : executed; + deck.setPageID(page.getID()); + changed.push(serialNumber); + } + else + failed.push(serialNumber); + } + if (failed.length == 0) + status("Changed " + changed.length + " deck(s) to page '" + page.name + "'", 'info'); + else + status("Deck(s) '" + failed.join(', ') + "' were not found, only changed " + changed.length + " deck(s) to page '" + page.name + "'", 'warn'); + } + else + status('No decks selected', 'error'); + } + else + status('Page does not exist. Maybe it was removed?', 'error'); + } + else + status('Missing page property', 'error'); + }); + actionAPI.onOpenEditor(function (editorAPI, properties) { + editorAPI.onFieldChanges(function (fields) { + var fieldsObject = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ + decks: fieldsObject.deck, + page: fieldsObject.page + }); + }); + editorAPI.setFields([ + { + id: 'deck', + name: 'Deck', + type: 'select', + multi: true, + value: properties.decks != undefined + ? properties.decks + : [ + 'current' + ], + values: getDecksValues() + }, + { + id: 'page', + name: 'Page', + type: 'select', + value: properties.page != undefined ? properties.page : '', + values: getPageValues() + } + ]); + }); + function getDecksValues() { + return __spreadArray([ + { id: 'current', text: 'Current Deck' } + ], Undecked.Decks.getList().map(function (deck) { + return { id: deck.serialNumber, text: deck.name }; + })); + } + function getPageValues() { + return Undecked.Pages.getNames().map(function (page) { + return { id: page.pageID, text: page.name }; + }); + } +}; +//# sourceMappingURL=changepage.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/deck/actions/changepage.js.map b/Backend/dist/Integrations/buildin/deck/actions/changepage.js.map new file mode 100644 index 0000000..ef88c8f --- /dev/null +++ b/Backend/dist/Integrations/buildin/deck/actions/changepage.js.map @@ -0,0 +1 @@ +{"version":3,"file":"changepage.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/deck/actions/changepage.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/deck/actions/setbackground.js b/Backend/dist/Integrations/buildin/deck/actions/setbackground.js new file mode 100644 index 0000000..b0ebc30 --- /dev/null +++ b/Backend/dist/Integrations/buildin/deck/actions/setbackground.js @@ -0,0 +1,116 @@ +var __spreadArray = (this && this.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +exports.__esModule = true; +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status, deck) { + if (properties.key != undefined && properties.key.length > 0) { + if (properties.color != undefined) { + var location = Undecked.Pages.KeyManager.getLocation(properties.key); + if (location) { + if (Undecked.Pages.exists(location.pageID)) { + var page = Undecked.Pages.get(location.pageID); + if (page.hasKey(location.x, location.y)) { + var key = page.getKey(location.x, location.y); + if (key.appearence == undefined) + key.appearence = {}; + if (key.appearence.background == undefined) + key.appearence.background = { color: null }; + key.appearence.background.color = properties.color; + page.updateKey(location.x, location.y, key, null); + status('Key color has been updated', 'info'); + } + else + status('Unable to find locaton', 'error'); + } + else + status('Unable to find page', 'error'); + } + else + status('Invalid key ID. Maybe it was removed?', 'error'); + } + else + status('No color specified', 'error'); + } + else + status('No key specified', 'error'); + }); + actionAPI.onOpenEditor(function (editorAPI, properties) { + var lastPageState = 'current'; + var initKey = 'current'; + var initColor = properties.color != undefined ? properties.color : '#ff0000'; + if (properties.key != undefined) { + var location = Undecked.Pages.KeyManager.getLocation(properties.key); + if (location) { + lastPageState = location.pageID == editorAPI.keyPageID ? 'current' : location.pageID; + } + initKey = properties.key == editorAPI.key.id ? 'current' : properties.key; + } + var fields = [ + { + id: 'page', + name: 'Page', + type: 'select', + value: lastPageState, + values: getPageValues() + }, + { + id: 'key', + name: 'Key', + type: 'select', + value: initKey, + values: getPageKeyValues(lastPageState) + }, + { + id: 'color', + name: 'Color', + type: 'color', + value: initColor + } + ]; + editorAPI.saveProperties({ + key: initKey == 'current' ? editorAPI.key.id : initKey, + color: initColor + }); + editorAPI.onFieldChanges(function (changedFields) { + var fieldObject = editorAPI.tools.objectifyFieldsValues(changedFields); + fields[0].value = fieldObject.page; + fields[1].value = fieldObject.key; + fields[2].value = fieldObject.color; + if (fieldObject.page != lastPageState) { + fields[1].values = getPageKeyValues(fieldObject.page); + editorAPI.setFields(fields); + } + editorAPI.saveProperties({ + key: fieldObject.key == 'current' ? editorAPI.key.id : fieldObject.key, + color: fieldObject.color + }); + }); + editorAPI.setFields(fields); + function getPageValues() { + return __spreadArray([ + { id: 'current', text: 'Current Page' } + ], Undecked.Pages.getNames().map(function (page) { + return { id: page.pageID, text: page.name }; + })); + } + function getPageKeyValues(pageID) { + var values = [ + { id: 'current', text: 'Current Key' } + ]; + if (pageID == 'current') + pageID = editorAPI.keyPageID; + else + values = []; + if (Undecked.Pages.exists(pageID)) + return __spreadArray(__spreadArray([], values), Undecked.Pages.get(pageID).getKeyTextList().map(function (key) { + return { id: key.id, text: key.x + "," + key.y + " - " + (key.text != null ? key.text : 'Empty') }; + })); + else + return []; + } + }); +}; +//# sourceMappingURL=setbackground.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/deck/actions/setbackground.js.map b/Backend/dist/Integrations/buildin/deck/actions/setbackground.js.map new file mode 100644 index 0000000..7c0030e --- /dev/null +++ b/Backend/dist/Integrations/buildin/deck/actions/setbackground.js.map @@ -0,0 +1 @@ +{"version":3,"file":"setbackground.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/deck/actions/setbackground.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/deck/actions/settext.js b/Backend/dist/Integrations/buildin/deck/actions/settext.js new file mode 100644 index 0000000..86b3c1e --- /dev/null +++ b/Backend/dist/Integrations/buildin/deck/actions/settext.js @@ -0,0 +1,122 @@ +var __spreadArray = (this && this.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +exports.__esModule = true; +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status, deck) { + if (properties.key != undefined && properties.key.length > 0) { + if (properties.text != undefined) { + var location = Undecked.Pages.KeyManager.getLocation(properties.key); + if (location) { + if (Undecked.Pages.exists(location.pageID)) { + var page = Undecked.Pages.get(location.pageID); + if (page.hasKey(location.x, location.y)) { + var key = page.getKey(location.x, location.y); + if (key.appearence == undefined) + key.appearence = {}; + if (key.appearence.text == undefined) + key.appearence.text = { + offsetX: 0, + offsetY: 0, + size: 20, + value: null, + color: '#ffffff' + }; + key.appearence.text.value = properties.text; + page.updateKey(location.x, location.y, key, null); + status('Key text has been updated', 'info'); + } + else + status('Unable to find locaton', 'error'); + } + else + status('Unable to find page', 'error'); + } + else + status('Invalid key ID. Maybe it was removed?', 'error'); + } + else + status('No text specified', 'error'); + } + else + status('No key specified', 'error'); + }); + actionAPI.onOpenEditor(function (editorAPI, properties) { + var lastPageState = 'current'; + var initKey = ''; + var initText = properties.text != undefined ? properties.text : ''; + if (properties.key != undefined) { + var location = Undecked.Pages.KeyManager.getLocation(properties.key); + if (location) { + lastPageState = location.pageID == editorAPI.keyPageID ? 'current' : location.pageID; + } + initKey = properties.key == editorAPI.key.id ? 'current' : properties.key; + } + var fields = [ + { + id: 'page', + name: 'Page', + type: 'select', + value: lastPageState, + values: getPageValues() + }, + { + id: 'key', + name: 'Key', + type: 'select', + value: initKey, + values: getPageKeyValues(lastPageState) + }, + { + id: 'text', + name: 'Text', + type: 'text', + value: initText + } + ]; + editorAPI.saveProperties({ + key: initKey == 'current' ? editorAPI.key.id : initKey, + text: initText + }); + editorAPI.onFieldChanges(function (changedFields) { + var fieldObject = editorAPI.tools.objectifyFieldsValues(changedFields); + fields[0].value = fieldObject.page; + fields[1].value = fieldObject.key; + fields[2].value = fieldObject.text; + if (fieldObject.page != lastPageState) { + fields[1].values = getPageKeyValues(fieldObject.page); + editorAPI.setFields(fields); + } + editorAPI.saveProperties({ + key: fieldObject.key == 'current' ? editorAPI.key.id : fieldObject.key, + text: fieldObject.text + }); + }); + editorAPI.setFields(fields); + function getPageValues() { + return __spreadArray([ + { id: 'current', text: 'Current Page' } + ], Undecked.Pages.getNames().map(function (page) { + return { id: page.pageID, text: page.name }; + })); + } + function getPageKeyValues(pageID) { + var values = [ + { id: 'current', text: 'Current Key' } + ]; + if (pageID == 'current') + pageID = editorAPI.keyPageID; + else + values = []; + if (Undecked.Pages.exists(pageID)) + return __spreadArray(__spreadArray([], values), Undecked.Pages.get(pageID).getKeyTextList().map(function (key) { + return { id: key.id, text: key.x + "," + key.y + " - " + (key.text != null ? key.text : 'Empty') }; + })); + else + return []; + } + }); +}; +//# sourceMappingURL=settext.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/deck/actions/settext.js.map b/Backend/dist/Integrations/buildin/deck/actions/settext.js.map new file mode 100644 index 0000000..5fdd24f --- /dev/null +++ b/Backend/dist/Integrations/buildin/deck/actions/settext.js.map @@ -0,0 +1 @@ +{"version":3,"file":"settext.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/deck/actions/settext.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/deck/deck.js b/Backend/dist/Integrations/buildin/deck/deck.js new file mode 100644 index 0000000..e419dbe --- /dev/null +++ b/Backend/dist/Integrations/buildin/deck/deck.js @@ -0,0 +1,7 @@ +exports.__esModule = true; +module.exports = function (api) { + api.registerAction('changepage', require('./actions/changepage')); + api.registerAction('setbackground', require('./actions/setbackground')); + api.registerAction('settext', require('./actions/settext')); +}; +//# sourceMappingURL=deck.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/deck/deck.js.map b/Backend/dist/Integrations/buildin/deck/deck.js.map new file mode 100644 index 0000000..e75bb75 --- /dev/null +++ b/Backend/dist/Integrations/buildin/deck/deck.js.map @@ -0,0 +1 @@ +{"version":3,"file":"deck.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/deck/deck.ts"],"names":[],"mappings":";AAEA,MAAM,CAAC,OAAO,GAAG,UAAC,GAAmB;IACpC,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAClE,GAAG,CAAC,cAAc,CAAC,eAAe,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACxE,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAC7D,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/deck/integration.js b/Backend/dist/Integrations/buildin/deck/integration.js new file mode 100644 index 0000000..1b33084 --- /dev/null +++ b/Backend/dist/Integrations/buildin/deck/integration.js @@ -0,0 +1,22 @@ +exports.__esModule = true; +var Integration = { + name: 'Deck', + description: "Control the deck you're using.", + actions: [ + { + id: 'changepage', + name: 'Change page' + }, + { + id: 'setbackground', + name: 'Set key background color' + }, + { + id: 'settext', + name: 'Set key text' + } + ], + main: require('./deck') +}; +module.exports = Integration; +//# sourceMappingURL=integration.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/deck/integration.js.map b/Backend/dist/Integrations/buildin/deck/integration.js.map new file mode 100644 index 0000000..ea3ec34 --- /dev/null +++ b/Backend/dist/Integrations/buildin/deck/integration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/deck/integration.ts"],"names":[],"mappings":";AAEA,IAAI,WAAW,GAAgB;IAC9B,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,gCAAgC;IAC7C,OAAO,EAAE;QACR;YACC,EAAE,EAAE,YAAY;YAChB,IAAI,EAAE,aAAa;SACnB;QAED;YACC,EAAE,EAAE,eAAe;YACnB,IAAI,EAAE,0BAA0B;SAChC;QAED;YACC,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,cAAc;SACpB;KACD;IACD,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;CACvB,CAAC;AAEF,MAAM,CAAC,OAAO,GAAG,WAAW,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/actions/continueTimelineHold.js b/Backend/dist/Integrations/buildin/getiyo/actions/continueTimelineHold.js new file mode 100644 index 0000000..deedec2 --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/actions/continueTimelineHold.js @@ -0,0 +1,7 @@ +exports.__esModule = true; +var simpleGetiyoActions_1 = require("../simpleGetiyoActions"); +module.exports = function (ActionAPI) { + ActionAPI.handle(function (properties, status) { return simpleGetiyoActions_1.getiyoSimpleExecute(ActionAPI, properties, status, 'continueTimelineHold'); }); + ActionAPI.onOpenEditor(simpleGetiyoActions_1.getiyoSimpleOpenEditor); +}; +//# sourceMappingURL=continueTimelineHold.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/actions/continueTimelineHold.js.map b/Backend/dist/Integrations/buildin/getiyo/actions/continueTimelineHold.js.map new file mode 100644 index 0000000..34db3d0 --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/actions/continueTimelineHold.js.map @@ -0,0 +1 @@ +{"version":3,"file":"continueTimelineHold.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/getiyo/actions/continueTimelineHold.ts"],"names":[],"mappings":";AAEA,8DAAoF;AAEpF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAmB;IACjC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAAM,IAAK,OAAA,yCAAmB,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,sBAAsB,CAAC,EAA1E,CAA0E,CAAC,CAAA;IAEpH,SAAS,CAAC,YAAY,CAAC,4CAAsB,CAAC,CAAA;AAClD,CAAC,CAAA"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/actions/jumpToTimelineSections.js b/Backend/dist/Integrations/buildin/getiyo/actions/jumpToTimelineSections.js new file mode 100644 index 0000000..cef540f --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/actions/jumpToTimelineSections.js @@ -0,0 +1,98 @@ +exports.__esModule = true; +module.exports = function (ActionAPI) { + ActionAPI.onExecute(function (properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var sectionName = properties.sectionName != undefined ? properties.sectionName : 'none'; + if (connectionID != 'none') { + if (sectionName != 'none') { + var connection = ActionAPI.getConnection('channel', connectionID); + if (connection) { + var channel = connection.instance; + channel + .jumpToTimelineSections(sectionName, 'main') + .then(function () { + status("Jumped to section " + sectionName); + })["catch"](function () { return status('Unable to jump to section', 'error'); }); + } + else + status("Connection doesn't exist", 'error'); + } + else + status('No section name specfied', 'error'); + } + else + status('No connection specfied', 'error'); + }); + ActionAPI.onOpenEditor(function (EditorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var sectionName = properties.sectionName != undefined ? properties.sectionName : 'none'; + var connectionField = { + id: 'connectionID', + name: 'Connection', + type: 'connection', + connectionType: 'channel', + value: connectionID + }; + var sectionField = { + id: 'sectionName', + name: 'Section', + type: 'select', + value: sectionName, + values: [] + }; + var lastConnectionID = null; + var validate = function () { + if (connectionID != lastConnectionID) { + lastConnectionID = connectionID; + if (lastConnectionID != 'none') { + var connection = ActionAPI.getConnection('channel', lastConnectionID); + if (connection) { + var channel = connection.instance; + channel + .getTimelineSections() + .then(function (sections) { + sectionField.values = sections.map(function (sectionText) { + return { id: sectionText, text: sectionText }; + }); + EditorAPI.setFields([ + connectionField, + sectionField + ]); + })["catch"](function (error) { + sectionField.values = []; + EditorAPI.setFields([ + connectionField, + sectionField + ]); + }); + } + else { + sectionField.values = []; + EditorAPI.setFields([ + connectionField, + sectionField + ]); + } + } + else { + sectionField.values = []; + EditorAPI.setFields([ + connectionField, + sectionField + ]); + } + } + }; + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + connectionID = fieldObject.connectionID; + sectionName = fieldObject.sectionName; + connectionField.value = connectionID; + sectionField.value = sectionName; + EditorAPI.saveProperties({ connectionID: connectionID, sectionName: sectionName }); + validate(); + }); + validate(); + }); +}; +//# sourceMappingURL=jumpToTimelineSections.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/actions/jumpToTimelineSections.js.map b/Backend/dist/Integrations/buildin/getiyo/actions/jumpToTimelineSections.js.map new file mode 100644 index 0000000..9b4bd25 --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/actions/jumpToTimelineSections.js.map @@ -0,0 +1 @@ +{"version":3,"file":"jumpToTimelineSections.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/getiyo/actions/jumpToTimelineSections.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/actions/pauseTimeline.js b/Backend/dist/Integrations/buildin/getiyo/actions/pauseTimeline.js new file mode 100644 index 0000000..db99b57 --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/actions/pauseTimeline.js @@ -0,0 +1,7 @@ +exports.__esModule = true; +var simpleGetiyoActions_1 = require("../simpleGetiyoActions"); +module.exports = function (ActionAPI) { + ActionAPI.handle(function (properties, status) { return simpleGetiyoActions_1.getiyoSimpleExecute(ActionAPI, properties, status, 'pauseTimeline'); }); + ActionAPI.onOpenEditor(simpleGetiyoActions_1.getiyoSimpleOpenEditor); +}; +//# sourceMappingURL=pauseTimeline.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/actions/pauseTimeline.js.map b/Backend/dist/Integrations/buildin/getiyo/actions/pauseTimeline.js.map new file mode 100644 index 0000000..47e332e --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/actions/pauseTimeline.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pauseTimeline.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/getiyo/actions/pauseTimeline.ts"],"names":[],"mappings":";AAEA,8DAAoF;AAEpF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAmB;IACjC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAAM,IAAK,OAAA,yCAAmB,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,CAAC,EAAnE,CAAmE,CAAC,CAAA;IAE7G,SAAS,CAAC,YAAY,CAAC,4CAAsB,CAAC,CAAA;AAClD,CAAC,CAAA"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/actions/publishScene.js b/Backend/dist/Integrations/buildin/getiyo/actions/publishScene.js new file mode 100644 index 0000000..cff7281 --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/actions/publishScene.js @@ -0,0 +1,98 @@ +exports.__esModule = true; +module.exports = function (ActionAPI) { + ActionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var sceneID = properties.sceneID != undefined ? properties.sceneID : 'none'; + var displayID = properties.displayID != undefined ? properties.displayID : 'none'; + if (connectionID != 'none') { + if (sceneID != 'none') { + if (displayID != 'none') { + var connection = ActionAPI.getConnection('channel', connectionID); + if (connection) { + var channel = connection.instance; + return channel.publishScene(sceneID, displayID); + } + else + status("Connection doesn't exist", 'error'); + } + else + status('No display specfied', 'error'); + } + else + status('No scene specfied', 'error'); + } + else + status('No connection specfied', 'error'); + }); + ActionAPI.onOpenEditor(function (EditorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var sceneID = properties.sceneID != undefined ? properties.sceneID : 'none'; + var displayID = properties.displayID != undefined ? properties.displayID : 'none'; + var connectionField = { + id: 'connectionID', + name: "Connection", + type: "connection", + connectionType: 'channel', + value: connectionID + }; + var sceneField = { + id: 'sceneID', + name: "Scene", + type: "select", + value: sceneID, + values: [] + }; + var displayField = { + id: 'displayID', + name: "Display", + type: "select", + value: displayID, + values: [] + }; + var lastConnectionID = null; + var validate = function () { + if (connectionID != lastConnectionID) { + lastConnectionID = connectionID; + if (lastConnectionID != "none") { + var connection = ActionAPI.getConnection('channel', lastConnectionID); + if (connection) { + var channel = connection.instance; + channel.getScenes().then(function (scenes) { + sceneField.values = scenes.map(function (scene) { return { id: scene.id, text: scene.name }; }); + channel.getDisplays().then(function (displays) { + displayField.values = displays.map(function (display) { return { id: display.id, text: display.name }; }); + EditorAPI.setFields([connectionField, sceneField, displayField]); + })["catch"](function (error) { + sceneField.values = []; + EditorAPI.setFields([connectionField, sceneField, displayField]); + }); + })["catch"](function (error) { + sceneField.values = []; + EditorAPI.setFields([connectionField, sceneField, displayField]); + }); + } + else { + sceneField.values = []; + EditorAPI.setFields([connectionField, sceneField, displayField]); + } + } + else { + sceneField.values = []; + EditorAPI.setFields([connectionField, sceneField, displayField]); + } + } + }; + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + connectionID = fieldObject.connectionID; + sceneID = fieldObject.sceneID; + displayID = fieldObject.displayID; + connectionField.value = connectionID; + sceneField.value = sceneID; + EditorAPI.saveProperties({ connectionID: connectionID, sceneID: sceneID, displayID: displayID }); + validate(); + }); + validate(); + }); +}; +//# sourceMappingURL=publishScene.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/actions/publishScene.js.map b/Backend/dist/Integrations/buildin/getiyo/actions/publishScene.js.map new file mode 100644 index 0000000..3ee7fc4 --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/actions/publishScene.js.map @@ -0,0 +1 @@ +{"version":3,"file":"publishScene.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/getiyo/actions/publishScene.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/actions/skipTimelineBlock.js b/Backend/dist/Integrations/buildin/getiyo/actions/skipTimelineBlock.js new file mode 100644 index 0000000..6309931 --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/actions/skipTimelineBlock.js @@ -0,0 +1,7 @@ +exports.__esModule = true; +var simpleGetiyoActions_1 = require("../simpleGetiyoActions"); +module.exports = function (ActionAPI) { + ActionAPI.handle(function (properties, status) { return simpleGetiyoActions_1.getiyoSimpleExecute(ActionAPI, properties, status, 'skipTimelineBlock'); }); + ActionAPI.onOpenEditor(simpleGetiyoActions_1.getiyoSimpleOpenEditor); +}; +//# sourceMappingURL=skipTimelineBlock.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/actions/skipTimelineBlock.js.map b/Backend/dist/Integrations/buildin/getiyo/actions/skipTimelineBlock.js.map new file mode 100644 index 0000000..e175f76 --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/actions/skipTimelineBlock.js.map @@ -0,0 +1 @@ +{"version":3,"file":"skipTimelineBlock.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/getiyo/actions/skipTimelineBlock.ts"],"names":[],"mappings":";AAEA,8DAAoF;AAEpF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAmB;IACjC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAAM,IAAK,OAAA,yCAAmB,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAvE,CAAuE,CAAC,CAAA;IAEjH,SAAS,CAAC,YAAY,CAAC,4CAAsB,CAAC,CAAA;AAClD,CAAC,CAAA"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/actions/startTimeline.js b/Backend/dist/Integrations/buildin/getiyo/actions/startTimeline.js new file mode 100644 index 0000000..00039f0 --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/actions/startTimeline.js @@ -0,0 +1,7 @@ +exports.__esModule = true; +var simpleGetiyoActions_1 = require("../simpleGetiyoActions"); +module.exports = function (ActionAPI) { + ActionAPI.handle(function (properties, status) { return simpleGetiyoActions_1.getiyoSimpleExecute(ActionAPI, properties, status, 'startTimeline'); }); + ActionAPI.onOpenEditor(simpleGetiyoActions_1.getiyoSimpleOpenEditor); +}; +//# sourceMappingURL=startTimeline.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/actions/startTimeline.js.map b/Backend/dist/Integrations/buildin/getiyo/actions/startTimeline.js.map new file mode 100644 index 0000000..a7ca34e --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/actions/startTimeline.js.map @@ -0,0 +1 @@ +{"version":3,"file":"startTimeline.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/getiyo/actions/startTimeline.ts"],"names":[],"mappings":";AAEA,8DAAoF;AAEpF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAmB;IACjC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAAM,IAAK,OAAA,yCAAmB,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,CAAC,EAAnE,CAAmE,CAAC,CAAA;IAE7G,SAAS,CAAC,YAAY,CAAC,4CAAsB,CAAC,CAAA;AAClD,CAAC,CAAA"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/actions/stopTimeline.js b/Backend/dist/Integrations/buildin/getiyo/actions/stopTimeline.js new file mode 100644 index 0000000..9723df4 --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/actions/stopTimeline.js @@ -0,0 +1,7 @@ +exports.__esModule = true; +var simpleGetiyoActions_1 = require("../simpleGetiyoActions"); +module.exports = function (ActionAPI) { + ActionAPI.handle(function (properties, status) { return simpleGetiyoActions_1.getiyoSimpleExecute(ActionAPI, properties, status, 'stopTimeline'); }); + ActionAPI.onOpenEditor(simpleGetiyoActions_1.getiyoSimpleOpenEditor); +}; +//# sourceMappingURL=stopTimeline.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/actions/stopTimeline.js.map b/Backend/dist/Integrations/buildin/getiyo/actions/stopTimeline.js.map new file mode 100644 index 0000000..d37aadc --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/actions/stopTimeline.js.map @@ -0,0 +1 @@ +{"version":3,"file":"stopTimeline.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/getiyo/actions/stopTimeline.ts"],"names":[],"mappings":";AAEA,8DAAoF;AAEpF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAmB;IACjC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAAM,IAAK,OAAA,yCAAmB,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC,EAAlE,CAAkE,CAAC,CAAA;IAE5G,SAAS,CAAC,YAAY,CAAC,4CAAsB,CAAC,CAAA;AAClD,CAAC,CAAA"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/getiyo.js b/Backend/dist/Integrations/buildin/getiyo/getiyo.js new file mode 100644 index 0000000..3d57ad5 --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/getiyo.js @@ -0,0 +1,182 @@ +exports.__esModule = true; +exports.Getiyo = void 0; +var axios_1 = require("axios"); +var Getiyo = /** @class */ (function () { + function Getiyo(settings) { + this.serverProtocol = settings.serverProtocol != undefined ? settings.serverProtocol : 'http'; + this.serverAddress = settings.serverAddress; + this.serverPort = settings.serverPort; + this.channelName = settings.channelName; + this.channelApiKey = settings.channelApiKey; + } + Getiyo.prototype._getBaseURI = function () { + return this.serverProtocol + "://" + this.serverAddress + ":" + this.serverPort + "/" + this.channelName + "/api/v1/" + this + .channelApiKey + "/"; + }; + Getiyo.prototype.checkConnection = function (callback) { + axios_1["default"].get(this._getBaseURI()).then(function () { return callback(true); })["catch"](function () { return callback(false); }); + }; + Getiyo.prototype.getScenes = function () { + var _this = this; + return new Promise(function (resolve, reject) { + axios_1["default"] + .get(_this._getBaseURI() + 'scenes') + .then(function (response) { + if (response.data.succeed == true) { + resolve(response.data.response); + } + else + reject(new Error('Unable to connection to Getiyo instance')); + })["catch"](reject); + }); + }; + Getiyo.prototype.getDisplays = function () { + var _this = this; + return new Promise(function (resolve, reject) { + axios_1["default"] + .get(_this._getBaseURI() + 'displays') + .then(function (response) { + if (response.data.succeed == true) { + resolve(response.data.response); + } + else + reject(new Error('Unable to connection to Getiyo instance')); + })["catch"](reject); + }); + }; + Getiyo.prototype.getModules = function () { + var _this = this; + return new Promise(function (resolve, reject) { + axios_1["default"] + .get(_this._getBaseURI() + 'modules') + .then(function (response) { + if (response.data.succeed == true) { + resolve(response.data.response); + } + else + reject(new Error('Unable to connection to Getiyo instance')); + })["catch"](reject); + }); + }; + Getiyo.prototype.getTimelineSections = function () { + var _this = this; + return new Promise(function (resolve, reject) { + axios_1["default"] + .get(_this._getBaseURI() + 'timeline/sections') + .then(function (response) { + if (response.data.succeed == true) { + resolve(response.data.response); + } + else + reject(new Error('Unable to connection to Getiyo instance')); + })["catch"](reject); + }); + }; + Getiyo.prototype.publishScene = function (sceneID, displayID) { + var _this = this; + return new Promise(function (resolve, reject) { + axios_1["default"] + .get(_this._getBaseURI() + ("scenes/publish/" + sceneID + "/" + displayID)) + .then(function (response) { + if (response.data.succeed == true) { + resolve(); + } + else + reject(new Error('Unable to connection to Getiyo instance')); + })["catch"](reject); + }); + }; + Getiyo.prototype.startTimeline = function (createNewRunner) { + var _this = this; + if (createNewRunner === void 0) { createNewRunner = false; } + return new Promise(function (resolve, reject) { + axios_1["default"] + .get(_this._getBaseURI() + ("timeline/start/" + createNewRunner)) + .then(function (response) { + if (response.data.succeed == true) { + resolve(); + } + else + reject(new Error('Unable to connection to Getiyo instance')); + })["catch"](reject); + }); + }; + Getiyo.prototype.stopTimeline = function (runnerID) { + var _this = this; + if (runnerID === void 0) { runnerID = 'main'; } + return new Promise(function (resolve, reject) { + axios_1["default"] + .get(_this._getBaseURI() + ("timeline/stop/" + runnerID)) + .then(function (response) { + if (response.data.succeed == true) { + resolve(); + } + else + reject(new Error('Unable to connection to Getiyo instance')); + })["catch"](reject); + }); + }; + Getiyo.prototype.pauseTimeline = function (runnerID) { + var _this = this; + if (runnerID === void 0) { runnerID = 'main'; } + return new Promise(function (resolve, reject) { + axios_1["default"] + .get(_this._getBaseURI() + ("timeline/pause/" + runnerID)) + .then(function (response) { + if (response.data.succeed == true) { + resolve(); + } + else + reject(new Error('Unable to connection to Getiyo instance')); + })["catch"](reject); + }); + }; + Getiyo.prototype.skipTimelineBlock = function (runnerID) { + var _this = this; + if (runnerID === void 0) { runnerID = 'main'; } + return new Promise(function (resolve, reject) { + axios_1["default"] + .get(_this._getBaseURI() + ("timeline/skip/" + runnerID)) + .then(function (response) { + if (response.data.succeed == true) { + resolve(); + } + else + reject(new Error('Unable to connection to Getiyo instance')); + })["catch"](reject); + }); + }; + Getiyo.prototype.continueTimelineHold = function (runnerID) { + var _this = this; + if (runnerID === void 0) { runnerID = 'main'; } + return new Promise(function (resolve, reject) { + axios_1["default"] + .get(_this._getBaseURI() + ("timeline/hold/" + runnerID)) + .then(function (response) { + if (response.data.succeed == true) { + resolve(); + } + else + reject(new Error('Unable to connection to Getiyo instance')); + })["catch"](reject); + }); + }; + Getiyo.prototype.jumpToTimelineSections = function (sectionName, runnerID) { + var _this = this; + if (runnerID === void 0) { runnerID = 'main'; } + return new Promise(function (resolve, reject) { + axios_1["default"] + .get(_this._getBaseURI() + ("timeline/sections/jump/" + encodeURI(sectionName) + "/" + runnerID)) + .then(function (response) { + if (response.data.succeed == true) { + resolve(); + } + else + reject(new Error('Unable to connection to Getiyo instance')); + })["catch"](reject); + }); + }; + return Getiyo; +}()); +exports.Getiyo = Getiyo; +//# sourceMappingURL=getiyo.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/getiyo.js.map b/Backend/dist/Integrations/buildin/getiyo/getiyo.js.map new file mode 100644 index 0000000..85c31c8 --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/getiyo.js.map @@ -0,0 +1 @@ +{"version":3,"file":"getiyo.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/getiyo/getiyo.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/integration.js b/Backend/dist/Integrations/buildin/getiyo/integration.js new file mode 100644 index 0000000..3bd322e --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/integration.js @@ -0,0 +1,21 @@ +exports.__esModule = true; +var Integration = { + name: 'Getiyo', + description: 'Control your Getiyo channel.', + connections: [ + { + type: 'channel', + name: 'Channel', + fields: [ + { id: 'protocol', name: 'Server Protocol', type: 'select', value: 'http', values: [{ id: 'http', text: "HTTP" }, { id: 'https', text: "HTTPS" }] }, + { id: 'address', name: 'Server Address', type: 'text', value: 'getiyo.com' }, + { id: 'port', name: 'Server Port', type: 'number', value: '443' }, + { id: 'channel', name: 'Channel Name', type: 'text' }, + { id: 'key', name: 'API Key', type: 'text' } + ] + } + ], + main: require('./main') +}; +module.exports = Integration; +//# sourceMappingURL=integration.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/integration.js.map b/Backend/dist/Integrations/buildin/getiyo/integration.js.map new file mode 100644 index 0000000..e39eed3 --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/integration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/getiyo/integration.ts"],"names":[],"mappings":";AAEA,IAAI,WAAW,GAAgB;IAC9B,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,8BAA8B;IAC3C,WAAW,EAAE;QACZ;YACC,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS;YACf,MAAM,EAAE;gBACP,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAC,EAAE,EAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAC,EAAE,EAAC,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,OAAO,EAAC,CAAC,EAAE;gBAC3I,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;gBAC5E,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE;gBACjE,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE;gBACrD,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE;aAC5C;SACD;KACD;IACD,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;CACvB,CAAC;AAEF,MAAM,CAAC,OAAO,GAAG,WAAW,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/main.js b/Backend/dist/Integrations/buildin/getiyo/main.js new file mode 100644 index 0000000..4d2763d --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/main.js @@ -0,0 +1,30 @@ +exports.__esModule = true; +var Getiyo_1 = require("./Getiyo"); +module.exports = function (api) { + api.registerAction('publishScene', 'Publish scene', require('./actions/publishScene')); + api.registerAction('startTimeline', 'Start timeline', require('./actions/startTimeline')); + api.registerAction('stopTimeline', 'Stop timeline', require('./actions/stopTimeline')); + api.registerAction('pauseTimeline', 'Pause timeline', require('./actions/pauseTimeline')); + api.registerAction('continueTimelineHold', 'Continue timeline hold', require('./actions/continueTimelineHold')); + api.registerAction('skipTimelineBlock', 'Skip timeline block', require('./actions/skipTimelineBlock')); + api.registerAction('jumpToTimelineSections', 'Jump to timeline section', require('./actions/jumpToTimelineSections')); + api.registerConnectionValidator('channel', function (ValidatorAPI) { + var properties = ValidatorAPI.properties; + var Channel = new Getiyo_1.Getiyo({ + serverProtocol: properties.protocol, + serverAddress: properties.address, + serverPort: properties.port, + channelName: properties.channel, + channelApiKey: properties.key + }); + Channel.checkConnection(function (succeed) { + if (succeed == true) { + ValidatorAPI.callback(true); + ValidatorAPI.setInstance(Channel); + } + else + ValidatorAPI.callback(false, 'Unable to find a Getiyo channel in this location.'); + }); + }); +}; +//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/main.js.map b/Backend/dist/Integrations/buildin/getiyo/main.js.map new file mode 100644 index 0000000..4afd8a0 --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/getiyo/main.ts"],"names":[],"mappings":";AAGA,mCAAkC;AAElC,MAAM,CAAC,OAAO,GAAG,UAAC,GAAmB;IACpC,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE,eAAe,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACvF,GAAG,CAAC,cAAc,CAAC,eAAe,EAAE,gBAAgB,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAC1F,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE,eAAe,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACvF,GAAG,CAAC,cAAc,CAAC,eAAe,EAAE,gBAAgB,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAC1F,GAAG,CAAC,cAAc,CAAC,sBAAsB,EAAE,wBAAwB,EAAE,OAAO,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAChH,GAAG,CAAC,cAAc,CAAC,mBAAmB,EAAE,qBAAqB,EAAE,OAAO,CAAC,6BAA6B,CAAC,CAAC,CAAC;IACvG,GAAG,CAAC,cAAc,CAAC,wBAAwB,EAAE,0BAA0B,EAAE,OAAO,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAEtH,GAAG,CAAC,2BAA2B,CAAC,SAAS,EAAE,UAAC,YAAoC;QAC/E,IAAI,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;QAGzC,IAAI,OAAO,GAAG,IAAI,eAAM,CAAC;YACxB,cAAc,EAAE,UAAU,CAAC,QAAQ;YACnC,aAAa,EAAE,UAAU,CAAC,OAAO;YACjC,UAAU,EAAE,UAAU,CAAC,IAAI;YAC3B,WAAW,EAAE,UAAU,CAAC,OAAO;YAC/B,aAAa,EAAE,UAAU,CAAC,GAAG;SAC7B,CAAC,CAAA;QAEF,OAAO,CAAC,eAAe,CAAC,UAAC,OAAO;YAC/B,IAAI,OAAO,IAAI,IAAI,EAAG;gBACrB,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;gBAC3B,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;aACjC;;gBACI,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,mDAAmD,CAAC,CAAA;QACvF,CAAC,CAAC,CAAA;IACH,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/publish.js b/Backend/dist/Integrations/buildin/getiyo/publish.js new file mode 100644 index 0000000..1f1c49d --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/publish.js @@ -0,0 +1,184 @@ +// import axios from 'axios'; +// import { callbackify } from 'util'; +// import { ConnectionManager_Connection } from '../../../../ConnectionManager'; +// import { Log } from '../../../../Logger'; +// import { ActionAPI } from '../../../ActionAPI'; +// import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; +// module.exports = (actionAPI: ActionAPI) => { +// actionAPI.handle( +// (properties: Publish_Properties, status: (text: string, type?: 'info' | 'error' | 'warn') => void) => { +// var connectionID = properties.connectionID; +// var sceneID = properties.sceneID; +// var displayIDs = properties.displayIDs; +// var connection = actionAPI.getConnection('channel', connectionID); +// if (connection && connectionID != undefined && sceneID != undefined && displayIDs != undefined) { +// var url = `${getBaseURL(connection)}/scenes/publish/${sceneID}/${displayIDs.join(',')}`; +// axios +// .get(url) +// .then((response) => { +// if (response.data != undefined) { +// if (response.data.succeed == true) { +// status(`Scene ${sceneID} was published to display(s) ${displayIDs.join(', ')}`); +// } else status(response.data.error, 'error'); +// } +// }) +// .catch((error) => { +// status('Unable to reach Getiyo server', 'error'); +// }); +// } +// } +// ); +// var channelSceneCache = {}; +// actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: Publish_Properties) => { +// var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; +// var sceneID = properties.sceneID != undefined ? properties.sceneID : 'none'; +// var displayIDs = properties.displayIDs != undefined ? properties.displayIDs : []; +// var connection: ConnectionManager_Connection = null; +// var lastConnectionID: string = connectionID; +// editorAPI.onFieldChanges((newFields: EditorAPI_Field[]) => { +// var fieldObject = editorAPI.tools.objectifyFieldsValues(newFields); +// editorAPI.saveProperties({ +// connectionID: fieldObject.connection, +// sceneID: fieldObject.sceneID, +// displayIDs: fieldObject.displayIDs +// }); +// fields[0].value = fieldObject.connection; +// if (lastConnectionID != fieldObject.connection) { +// getConnection(fieldObject.connection, () => { +// editorAPI.setFields(fields); +// }); +// } +// }); +// function getConnection(connectionID: string, callback: () => void) { +// var newConnection = actionAPI.getConnection('channel', connectionID); +// if (connectionID == 'none') { +// fields[1].values = []; +// fields[2].values = []; +// callback(); +// } else if (newConnection != null) { +// lastConnectionID = connectionID; +// connection = newConnection; +// updateScenes(() => updateDisplays(callback)); +// } else callback(); +// } +// function updateScenes(callback: () => void) { +// var baseURL = getBaseURL(connection); +// if (baseURL) { +// axios +// .get(`${baseURL}/scenes`) +// .then((response) => { +// if (response.data != undefined) { +// if (response.data.succeed == true) { +// var scenes: Channel_Scene[] = response.data.response.map((scene) => { +// return { id: scene.id, text: `${scene.id} - ${scene.name}` }; +// }); +// fields[1].values = scenes; +// channelSceneCache[connection.properties.channel] = scenes; +// callback(); +// } else { +// Log('error', response.data.error); +// callback(); +// } +// } +// }) +// .catch((error) => { +// Log( +// 'error', +// `Error whilst fetching Getiyo scenes for channel '${connection.properties.channel}'`, +// error +// ); +// callback(); +// }); +// } +// } +// function updateDisplays(callback: () => void) { +// var baseURL = getBaseURL(connection); +// if (baseURL) { +// axios +// .get(`${baseURL}/displays`) +// .then((response) => { +// if (response.data != undefined) { +// if (response.data.succeed == true) { +// var scenes: Channel_Display[] = response.data.response.map((display) => { +// return { id: display.id, text: `${display.id} - ${display.name}` }; +// }); +// fields[2].values = scenes; +// channelSceneCache[connection.properties.channel] = scenes; +// callback(); +// } else { +// Log('error', response.data.error); +// callback(); +// } +// } +// }) +// .catch((error) => { +// Log( +// 'error', +// `Error whilst fetching Getiyo displays for channel '${connection.properties.channel}'`, +// error +// ); +// callback(); +// }); +// } +// } +// var defaultSceneValues = []; +// if (connection != null && connection.properties != null) { +// if (channelSceneCache[connection.properties.channel] != undefined) { +// defaultSceneValues = channelSceneCache[connection.properties.channel]; +// } +// } +// var fields: EditorAPI_Field[] = [ +// { +// id: 'connection', +// name: 'Connection', +// type: 'connection', +// value: connectionID, +// connectionType: 'channel' +// }, +// { +// id: 'sceneID', +// name: 'Scene', +// type: 'select', +// value: sceneID, +// values: defaultSceneValues +// }, +// { +// id: 'displayIDs', +// name: 'Displays', +// type: 'select', +// multi: true, +// value: displayIDs, +// values: [] +// } +// ]; +// getConnection(connectionID, () => editorAPI.setFields(fields)); +// }); +// function getBaseURL(connection) { +// if (connection != null) { +// var addressString = connection.properties.address; +// var address = +// !addressString.startsWith('http://') && !addressString.startsWith('https://') +// ? `https://${addressString}` +// : addressString; +// var fullQuery = `${address}:${connection.properties.port}/api/v1/${connection.properties.key}/${connection +// .properties.channel}`; +// return fullQuery; +// } +// return null; +// } +// }; +// interface Publish_Properties { +// connectionID: string; +// sceneID: string; +// displayIDs: string[]; +// } +// interface Channel_Scene { +// id: string; +// text: string; +// } +// interface Channel_Display { +// id: string; +// text: string; +// scene: string; +// } +//# sourceMappingURL=publish.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/publish.js.map b/Backend/dist/Integrations/buildin/getiyo/publish.js.map new file mode 100644 index 0000000..7af3f53 --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/publish.js.map @@ -0,0 +1 @@ +{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/getiyo/publish.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/simpleGetiyoActions.js b/Backend/dist/Integrations/buildin/getiyo/simpleGetiyoActions.js new file mode 100644 index 0000000..9a112c7 --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/simpleGetiyoActions.js @@ -0,0 +1,33 @@ +exports.__esModule = true; +exports.getiyoSimpleExecute = exports.getiyoSimpleOpenEditor = void 0; +function getiyoSimpleOpenEditor(EditorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + EditorAPI.setFields([{ + id: 'connectionID', + name: "Connection", + type: "connection", + connectionType: 'channel', + value: connectionID + }]); + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID }); + }); +} +exports.getiyoSimpleOpenEditor = getiyoSimpleOpenEditor; +function getiyoSimpleExecute(ActionAPI, properties, status, functionName) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('channel', connectionID); + if (connection) { + var channel = connection.instance; + return channel[functionName](); + } + else + status("Connection doesn't exist", 'error'); + } + else + status('No connection specfied', 'error'); +} +exports.getiyoSimpleExecute = getiyoSimpleExecute; +//# sourceMappingURL=simpleGetiyoActions.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/getiyo/simpleGetiyoActions.js.map b/Backend/dist/Integrations/buildin/getiyo/simpleGetiyoActions.js.map new file mode 100644 index 0000000..8dbc56e --- /dev/null +++ b/Backend/dist/Integrations/buildin/getiyo/simpleGetiyoActions.js.map @@ -0,0 +1 @@ +{"version":3,"file":"simpleGetiyoActions.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/getiyo/simpleGetiyoActions.ts"],"names":[],"mappings":";;AAIA,SAAgB,sBAAsB,CAAC,SAAmB,EAAE,UAAU;IAClE,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAA;IAE1F,SAAS,CAAC,SAAS,CAAC,CAAC;YACjB,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,SAAS;YACzB,KAAK,EAAE,YAAY;SACtB,CAAC,CAAC,CAAA;IAEH,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM;QAC5B,IAAI,WAAW,GAAE,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAA;QAC9D,SAAS,CAAC,cAAc,CAAC,EAAC,YAAY,EAAC,WAAW,CAAC,YAAY,EAAC,CAAC,CAAA;IACrE,CAAC,CAAC,CAAA;AACN,CAAC;AAfD,wDAeC;AAGD,SAAgB,mBAAmB,CAAC,SAAmB,EAAC,UAAU,EAAE,MAAyC,EAAE,YAAmB;IAC9H,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAA;IAC1F,IAAI,YAAY,IAAI,MAAM,EAAC;QACvB,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QACjE,IAAI,UAAU,EAAC;YACX,IAAI,OAAO,GAAU,UAAU,CAAC,QAAQ,CAAC;YAEzC,OAAO,OAAO,CAAC,YAAY,CAAC,EAAE,CAAA;SACjC;;YAAK,MAAM,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAA;KACpD;;QAAK,MAAM,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAA;AACnD,CAAC;AAVD,kDAUC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/http/http.js b/Backend/dist/Integrations/buildin/http/http.js new file mode 100644 index 0000000..ef132c7 --- /dev/null +++ b/Backend/dist/Integrations/buildin/http/http.js @@ -0,0 +1,45 @@ +exports.__esModule = true; +var axios = require('axios')["default"]; +module.exports = function (api) { + //Register a action + api.registerAction('request', function (actionAPI) { + //Handle the action when executed + actionAPI.handle(function (properties, status) { + axios[properties.method](properties.address) + .then(function (response) { + status('Request has been delivered.'); + })["catch"](function (error) { + status('Unable to deliver request.', 'error'); + }); + }); + //Handle the interactive editor + actionAPI.onOpenEditor(function (editorAPI, properties) { + var method = properties.method != undefined ? properties.method : 'get'; + var address = properties.address != undefined ? properties.address : ''; + editorAPI.onFieldChanges(function (fields) { + var fieldValues = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ method: fieldValues.method, address: fieldValues.address }); + }); + editorAPI.setFields([ + { + id: 'method', + name: 'Method', + type: 'select', + value: method, + values: [ + { id: 'get', text: 'GET' }, + { id: 'post', text: 'POST' }, + { id: 'put', text: 'PUT' } + ] + }, + { + id: 'address', + name: 'Address', + type: 'text', + value: address + } + ]); + }); + }); +}; +//# sourceMappingURL=http.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/http/http.js.map b/Backend/dist/Integrations/buildin/http/http.js.map new file mode 100644 index 0000000..8a2e77c --- /dev/null +++ b/Backend/dist/Integrations/buildin/http/http.js.map @@ -0,0 +1 @@ +{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/http/http.ts"],"names":[],"mappings":";AAGA,IAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,SAAO,CAAA,CAAC;AAEvC,MAAM,CAAC,OAAO,GAAG,UAAC,GAAmB;IACpC,mBAAmB;IACnB,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,UAAC,SAAoB;QAClD,iCAAiC;QACjC,SAAS,CAAC,MAAM,CACf,UAAC,UAA8B,EAAE,MAAgE;YAChG,KAAK,CACH,UAAU,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;iBACtC,IAAI,CAAC,UAAC,QAAQ;gBACd,MAAM,CAAC,6BAA6B,CAAC,CAAC;YACvC,CAAC,CAAC,CACD,OAAK,CAAA,CAAC,UAAC,KAAK;gBACZ,MAAM,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;QACL,CAAC,CACD,CAAC;QAEF,+BAA+B;QAC/B,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAA8B;YAC3E,IAAI,MAAM,GAA+B,UAAU,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;YACpG,IAAI,OAAO,GAAW,UAAU,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAEhF,SAAS,CAAC,cAAc,CAAC,UAAC,MAAyB;gBAClD,IAAI,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;gBAChE,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YACxF,CAAC,CAAC,CAAC;YAEH,SAAS,CAAC,SAAS,CAAC;gBACnB;oBACC,EAAE,EAAE,QAAQ;oBACZ,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,MAAM;oBACb,MAAM,EAAE;wBACP,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;wBAC1B,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;wBAC5B,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;qBAC1B;iBACD;gBACD;oBACC,EAAE,EAAE,SAAS;oBACb,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,OAAO;iBACd;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/http/integration.js b/Backend/dist/Integrations/buildin/http/integration.js new file mode 100644 index 0000000..b8233eb --- /dev/null +++ b/Backend/dist/Integrations/buildin/http/integration.js @@ -0,0 +1,14 @@ +exports.__esModule = true; +var Integration = { + name: 'HTTP', + description: 'Make a HTTP request.', + main: require('./http'), + actions: [ + { + id: 'request', + name: 'Make HTTP request' + } + ] +}; +module.exports = Integration; +//# sourceMappingURL=integration.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/http/integration.js.map b/Backend/dist/Integrations/buildin/http/integration.js.map new file mode 100644 index 0000000..c700199 --- /dev/null +++ b/Backend/dist/Integrations/buildin/http/integration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/http/integration.ts"],"names":[],"mappings":";AAEA,IAAI,WAAW,GAAgB;IAC9B,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,sBAAsB;IACnC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;IAEvB,OAAO,EAAE;QACR;YACC,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,mBAAmB;SACzB;KACD;CACD,CAAC;AAEF,MAAM,CAAC,OAAO,GAAG,WAAW,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/mitti/MittiClass.js b/Backend/dist/Integrations/buildin/mitti/MittiClass.js new file mode 100644 index 0000000..8034cfb --- /dev/null +++ b/Backend/dist/Integrations/buildin/mitti/MittiClass.js @@ -0,0 +1,239 @@ +exports.__esModule = true; +exports.Mitti = void 0; +var HyperdeckLib = require("hyperdeck-js-lib"); +var Mitti = /** @class */ (function () { + function Mitti(ip) { + this.events = {}; + this.connected = false; + // console.log(`Connecting to hyperdeck at ${ip}`); + var _this = this; + this.hyperdeck = new HyperdeckLib.Hyperdeck(ip); + this.hyperdeck + .onConnected() + .then(function () { + _this.hyperdeck.getNotifier().on('asynchronousEvent', function (response) { + //console.log('Got an asynchronous event with code ' + response.code + '.'); + }); + _this.hyperdeck.getNotifier().on('connectionLost', function () { + _this.connected = false; + console.error('Connection lost.'); + if (_this.events.connectionlost != undefined) + _this.events.connectionlost(); + }); + if (_this.events.connected != undefined) + _this.events.connected(); + })["catch"](function (error) { + console.log(error); + _this.connected = false; + if (_this.events.connecterror != undefined) + _this.events.connecterror('Failed to connect to hyperdeck.'); + }); + } + Mitti.prototype.on = function (event, callback) { + if (this.events[event] != undefined) + throw new Error("Event '" + event + "' already created"); + else { + this.events[event] = callback; + if (event == 'connected' && this.connected == true) + callback(); + } + }; + Mitti.prototype.raw = function (command) { + var _this_1 = this; + return new Promise(function (resolve, reject) { + //console.log('Sending command: ' + command); + _this_1.hyperdeck + .makeRequest(command) + .then(function (response) { + //console.log('Got response with code ' + response.code + '.'); + resolve(response); + })["catch"](function (errResponse) { + if (!errResponse) { + reject(new Error('The request failed because the hyperdeck connection was lost.')); + } + else { + reject(new Error('The hyperdeck returned an error with status code ' + errResponse.code + '.')); + } + }); + }); + }; + Mitti.prototype.getTransportInfo = function () { + var _this_1 = this; + return new Promise(function (resolve, reject) { + //console.log('Getting transport info'); + _this_1.hyperdeck + .makeRequest('transport info') + .then(function (response) { + //console.log('Got response with code ' + response.code + '.'); + if (response.params != undefined) { + resolve(response.params); + } + else { + reject(new Error('Response contained no params')); + } + })["catch"](function (errResponse) { + if (!errResponse) { + reject(new Error('The request failed because the hyperdeck connection was lost.')); + } + else { + reject(new Error('The hyperdeck returned an error with status code ' + errResponse.code + '.')); + } + }); + }); + }; + Mitti.prototype.getClipCount = function () { + var _this_1 = this; + return new Promise(function (resolve, reject) { + //console.log('Getting clips'); + _this_1.hyperdeck + .makeRequest('clips count') + .then(function (response) { + //console.log('Got response with code ' + response.code + '.'); + if (response.params != undefined) { + if (response.params['clip count'] != undefined) { + resolve(response.params['clip count']); + } + else { + reject(new Error('Response contained no clip count data')); + } + } + else { + reject(new Error('Response contained no params data')); + } + })["catch"](function (errResponse) { + if (!errResponse) { + reject(new Error('The request failed because the hyperdeck connection was lost.')); + } + else { + reject(new Error('The hyperdeck returned an error with status code ' + errResponse.code + '.')); + } + }); + }); + }; + Mitti.prototype.getClips = function () { + var _this_1 = this; + return new Promise(function (resolve, reject) { + //console.log('Getting clips'); + _this_1.hyperdeck + .clipsGet() + .then(function (response) { + //console.log('Got response with code ' + response.code + '.'); + if (response.params != undefined) { + if (response.params['clip count'] != undefined) + delete response.params['clip count']; + resolve(response.params); + } + else { + reject(new Error('Response contained no clip data')); + } + })["catch"](function (errResponse) { + if (!errResponse) { + reject(new Error('The request failed because the hyperdeck connection was lost.')); + } + else { + reject(new Error('The hyperdeck returned an error with status code ' + errResponse.code + '.')); + } + }); + }); + }; + Mitti.prototype.selectClip = function (index) { + var _this_1 = this; + return new Promise(function (resolve, reject) { + //console.log('Selecting clip'); + _this_1.hyperdeck + .makeRequest("goto: clip id: " + index) + .then(function (response) { + //console.log('Got response with code ' + response.code + '.'); + resolve(true); + })["catch"](function (errResponse) { + if (!errResponse) { + reject(new Error('The request failed because the hyperdeck connection was lost.')); + } + else { + reject(new Error('The hyperdeck returned an error with status code ' + errResponse.code + '.')); + } + }); + }); + }; + Mitti.prototype.play = function () { + var _this_1 = this; + return new Promise(function (resolve, reject) { + //console.log('Playing'); + _this_1.hyperdeck + .play() + .then(function (response) { + //console.log('Got response with code ' + response.code + '.'); + resolve(true); + })["catch"](function (errResponse) { + if (!errResponse) { + reject(new Error('The request failed because the hyperdeck connection was lost.')); + } + else { + reject(new Error('The hyperdeck returned an error with status code ' + errResponse.code + '.')); + } + }); + }); + }; + Mitti.prototype.stop = function () { + var _this_1 = this; + return new Promise(function (resolve, reject) { + //console.log('Stopping'); + _this_1.hyperdeck + .stop() + .then(function (response) { + //console.log('Got response with code ' + response.code + '.'); + resolve(true); + })["catch"](function (errResponse) { + if (!errResponse) { + reject(new Error('The request failed because the hyperdeck connection was lost.')); + } + else { + reject(new Error('The hyperdeck returned an error with status code ' + errResponse.code + '.')); + } + }); + }); + }; + Mitti.prototype.next = function (wrap) { + var _this_1 = this; + return new Promise(function (resolve, reject) { + //console.log('Next clip'); + _this_1.getTransportInfo() + .then(function (transportInfo) { + var newClip = parseInt(transportInfo['clip id']) + 1; + if (wrap == true) { + _this_1.getClipCount() + .then(function (clipCount) { + if (newClip > clipCount) + newClip = 1; + _this_1.selectClip(newClip).then(resolve)["catch"](reject); + })["catch"](reject); + } + else + _this_1.selectClip(newClip).then(resolve)["catch"](reject); + })["catch"](reject); + }); + }; + Mitti.prototype.previous = function (wrap) { + var _this_1 = this; + return new Promise(function (resolve, reject) { + //console.log('Previous clip'); + _this_1.getTransportInfo() + .then(function (transportInfo) { + var newClip = parseInt(transportInfo['clip id']) - 1; + if (wrap == true) { + _this_1.getClipCount() + .then(function (clipCount) { + if (newClip < 1) + newClip = clipCount; + _this_1.selectClip(newClip).then(resolve)["catch"](reject); + })["catch"](reject); + } + else + _this_1.selectClip(newClip).then(resolve)["catch"](reject); + })["catch"](reject); + }); + }; + return Mitti; +}()); +exports.Mitti = Mitti; +//# sourceMappingURL=MittiClass.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/mitti/MittiClass.js.map b/Backend/dist/Integrations/buildin/mitti/MittiClass.js.map new file mode 100644 index 0000000..946065f --- /dev/null +++ b/Backend/dist/Integrations/buildin/mitti/MittiClass.js.map @@ -0,0 +1 @@ +{"version":3,"file":"MittiClass.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/mitti/MittiClass.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/mitti/actions/clip.js b/Backend/dist/Integrations/buildin/mitti/actions/clip.js new file mode 100644 index 0000000..15fc292 --- /dev/null +++ b/Backend/dist/Integrations/buildin/mitti/actions/clip.js @@ -0,0 +1,115 @@ +exports.__esModule = true; +var MittiClass_1 = require("../MittiClass"); +module.exports = function (actionAPI) { + //Handle the action when executed + actionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var clipID = properties.clipID != undefined ? properties.clipID : 'none'; + if (connectionID != 'none') { + if (clipID != 'none') { + var connection = actionAPI.getConnection('mitti', connectionID); + var ip = connection.properties.ip; + var mitti = new MittiClass_1.Mitti(ip); + mitti.on('connected', function () { + mitti + .selectClip(parseInt(clipID)) + .then(function () { + status("Clip " + clipID + " has been selected", 'info'); + })["catch"](function (error) { + status(error.message, 'error'); + }); + }); + } + else + status('No clip specified', 'error'); + } + else + status('No connection specified', 'error'); + }); + //Handle the interactive editor + actionAPI.onOpenEditor(function (editorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var clipID = properties.clipID != undefined ? properties.clipID : 'none'; + var currentIP; + var currentPort; + var fields = [ + { + id: 'connectionID', + name: 'Connection', + type: 'connection', + value: connectionID, + connectionType: 'mitti' + }, + { + id: 'clipID', + name: 'Clip', + type: 'select', + value: clipID, + values: [] + } + ]; + function updateAddress(connectionID, callback) { + if (connectionID != 'none') { + var connection = actionAPI.getConnection('mitti', connectionID); + var ip = connection.properties.ip; + var port = connection.properties.port; + if (currentIP != ip || currentPort != port) { + currentIP = ip; + currentPort = port; + callback(true); + } + else { + callback(false); + } + } + else { + if (currentIP != null || currentPort != null) { + currentIP = null; + currentPort = null; + callback(true); + } + else { + callback(false); + } + } + } + function updateSources(callback) { + var mitti = new MittiClass_1.Mitti(currentIP); + mitti + .getClips() + .then(function (clips) { + var fieldValues = []; + for (var clipID in clips) { + var query = clips[clipID]; + var name = query.split(' ').splice(query.split(' ').length - 3, 2); + fieldValues.push({ id: clipID, text: clipID + " - " + name }); + } + fields[1].values = fieldValues; + callback(); + })["catch"](function (error) { + fields[1].values = []; + callback(); + }); + } + function validate(fieldValues) { + fields[0].value = fieldValues.connectionID; + fields[1].value = fieldValues.clipID; + editorAPI.saveProperties({ connectionID: fieldValues.connectionID, clipID: fieldValues.clipID }); + updateAddress(fieldValues.connectionID, function (changed) { + if (changed) { + updateSources(function () { + editorAPI.setFields(fields); + }); + } + else + editorAPI.setFields(fields); + }); + } + validate({ connectionID: connectionID, clipID: clipID }); + editorAPI.onFieldChanges(function (fields) { + var fieldValues = editorAPI.tools.objectifyFieldsValues(fields); + validate(fieldValues); + }); + }); +}; +//# sourceMappingURL=clip.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/mitti/actions/clip.js.map b/Backend/dist/Integrations/buildin/mitti/actions/clip.js.map new file mode 100644 index 0000000..b725110 --- /dev/null +++ b/Backend/dist/Integrations/buildin/mitti/actions/clip.js.map @@ -0,0 +1 @@ +{"version":3,"file":"clip.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/mitti/actions/clip.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/mitti/actions/next.js b/Backend/dist/Integrations/buildin/mitti/actions/next.js new file mode 100644 index 0000000..91a15a3 --- /dev/null +++ b/Backend/dist/Integrations/buildin/mitti/actions/next.js @@ -0,0 +1,47 @@ +exports.__esModule = true; +//TODO: Implement wrap checkbox property in editor +module.exports = function (actionAPI) { + //Handle the action when executed + actionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var wrap = properties.wrap != undefined ? properties.wrap : true; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('mitti', connectionID); + var mitti = connection.instance; + mitti + .previous(wrap) + .then(function () { + status("Previous clip has been selected", 'info'); + })["catch"](function (error) { + status(error.message, 'error'); + }); + } + else + status('No connection specified', 'error'); + }); + //Handle the interactive editor + actionAPI.onOpenEditor(function (editorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var wrap = properties.wrap != undefined ? properties.wrap : true; + editorAPI.onFieldChanges(function (fields) { + var fieldValues = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: fieldValues.connectionID, wrap: fieldValues.wrap }); + }); + editorAPI.setFields([ + { + id: 'connectionID', + name: 'Connection', + type: 'connection', + value: connectionID, + connectionType: 'mitti' + }, + { + id: 'wrap', + name: 'Wrap', + type: 'checkbox', + value: true + } + ]); + }); +}; +//# sourceMappingURL=next.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/mitti/actions/next.js.map b/Backend/dist/Integrations/buildin/mitti/actions/next.js.map new file mode 100644 index 0000000..cf5cb26 --- /dev/null +++ b/Backend/dist/Integrations/buildin/mitti/actions/next.js.map @@ -0,0 +1 @@ +{"version":3,"file":"next.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/mitti/actions/next.ts"],"names":[],"mappings":";AAMA,kDAAkD;AAElD,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,iCAAiC;IACjC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAsB,EAAE,MAAgE;QACzG,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3F,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACjE,IAAI,YAAY,IAAI,MAAM,EAAE;YAC3B,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAChE,IAAI,KAAK,GAAG,UAAU,CAAC,QAAiB,CAAC;YAEzC,KAAK;iBACH,QAAQ,CAAC,IAAI,CAAC;iBACd,IAAI,CAAC;gBACL,MAAM,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC;YACnD,CAAC,CAAC,CACD,OAAK,CAAA,CAAC,UAAC,KAAY;gBACnB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;SACJ;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,+BAA+B;IAC/B,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAAsB;QACnE,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3F,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAEjE,SAAS,CAAC,cAAc,CAAC,UAAC,MAAyB;YAClD,IAAI,WAAW,GAAoB,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAEjF,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9F,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,SAAS,CAAC;YACnB;gBACC,EAAE,EAAE,cAAc;gBAClB,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,YAAY;gBACnB,cAAc,EAAE,OAAO;aACvB;YACD;gBACC,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,IAAI;aACX;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/mitti/actions/play.js b/Backend/dist/Integrations/buildin/mitti/actions/play.js new file mode 100644 index 0000000..91d3271 --- /dev/null +++ b/Backend/dist/Integrations/buildin/mitti/actions/play.js @@ -0,0 +1,38 @@ +exports.__esModule = true; +module.exports = function (actionAPI) { + //Handle the action when executed + actionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('mitti', connectionID); + var mitti = connection.instance; + mitti + .play() + .then(function () { + status("Current clip playing", 'info'); + })["catch"](function (error) { + status(error.message, 'error'); + }); + } + else + status('No connection specified', 'error'); + }); + //Handle the interactive editor + actionAPI.onOpenEditor(function (editorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + editorAPI.onFieldChanges(function (fields) { + var fieldValues = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: fieldValues.connectionID }); + }); + editorAPI.setFields([ + { + id: 'connectionID', + name: 'Connection', + type: 'connection', + value: connectionID, + connectionType: 'mitti' + } + ]); + }); +}; +//# sourceMappingURL=play.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/mitti/actions/play.js.map b/Backend/dist/Integrations/buildin/mitti/actions/play.js.map new file mode 100644 index 0000000..bc3e247 --- /dev/null +++ b/Backend/dist/Integrations/buildin/mitti/actions/play.js.map @@ -0,0 +1 @@ +{"version":3,"file":"play.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/mitti/actions/play.ts"],"names":[],"mappings":";AAMA,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,iCAAiC;IACjC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAsB,EAAE,MAAgE;QACzG,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3F,IAAI,YAAY,IAAI,MAAM,EAAE;YAC3B,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAChE,IAAI,KAAK,GAAG,UAAU,CAAC,QAAiB,CAAC;YAEzC,KAAK;iBACH,IAAI,EAAE;iBACN,IAAI,CAAC;gBACL,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;YACxC,CAAC,CAAC,CACD,OAAK,CAAA,CAAC,UAAC,KAAY;gBACnB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;SACJ;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,+BAA+B;IAC/B,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAAsB;QACnE,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;QAE3F,SAAS,CAAC,cAAc,CAAC,UAAC,MAAyB;YAClD,IAAI,WAAW,GAAoB,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAEjF,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,SAAS,CAAC;YACnB;gBACC,EAAE,EAAE,cAAc;gBAClB,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,YAAY;gBACnB,cAAc,EAAE,OAAO;aACvB;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/mitti/actions/previous.js b/Backend/dist/Integrations/buildin/mitti/actions/previous.js new file mode 100644 index 0000000..f4ebf8d --- /dev/null +++ b/Backend/dist/Integrations/buildin/mitti/actions/previous.js @@ -0,0 +1,47 @@ +exports.__esModule = true; +//TODO: Implement wrap checkbox property in editor +module.exports = function (actionAPI) { + //Handle the action when executed + actionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var wrap = properties.wrap != undefined ? properties.wrap : true; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('mitti', connectionID); + var mitti = connection.instance; + mitti + .previous(wrap) + .then(function () { + status("Previous clip has been selected", 'info'); + })["catch"](function (error) { + status(error.message, 'error'); + }); + } + else + status('No connection specified', 'error'); + }); + //Handle the interactive editor + actionAPI.onOpenEditor(function (editorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var wrap = properties.wrap != undefined ? properties.wrap : true; + editorAPI.onFieldChanges(function (fields) { + var fieldValues = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: fieldValues.connectionID, wrap: fieldValues.wrap }); + }); + editorAPI.setFields([ + { + id: 'connectionID', + name: 'Connection', + type: 'connection', + value: connectionID, + connectionType: 'mitti' + }, + { + id: 'wrap', + name: 'Wrap', + type: 'checkbox', + value: true + } + ]); + }); +}; +//# sourceMappingURL=previous.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/mitti/actions/previous.js.map b/Backend/dist/Integrations/buildin/mitti/actions/previous.js.map new file mode 100644 index 0000000..e91acd9 --- /dev/null +++ b/Backend/dist/Integrations/buildin/mitti/actions/previous.js.map @@ -0,0 +1 @@ +{"version":3,"file":"previous.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/mitti/actions/previous.ts"],"names":[],"mappings":";AAMA,kDAAkD;AAElD,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,iCAAiC;IACjC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAsB,EAAE,MAAgE;QACzG,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3F,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACjE,IAAI,YAAY,IAAI,MAAM,EAAE;YAC3B,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAChE,IAAI,KAAK,GAAG,UAAU,CAAC,QAAiB,CAAC;YAEzC,KAAK;iBACH,QAAQ,CAAC,IAAI,CAAC;iBACd,IAAI,CAAC;gBACL,MAAM,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC;YACnD,CAAC,CAAC,CACD,OAAK,CAAA,CAAC,UAAC,KAAY;gBACnB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;SACJ;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,+BAA+B;IAC/B,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAAsB;QACnE,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3F,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAEjE,SAAS,CAAC,cAAc,CAAC,UAAC,MAAyB;YAClD,IAAI,WAAW,GAAoB,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAEjF,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9F,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,SAAS,CAAC;YACnB;gBACC,EAAE,EAAE,cAAc;gBAClB,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,YAAY;gBACnB,cAAc,EAAE,OAAO;aACvB;YACD;gBACC,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,IAAI;aACX;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/mitti/actions/stop.js b/Backend/dist/Integrations/buildin/mitti/actions/stop.js new file mode 100644 index 0000000..2545112 --- /dev/null +++ b/Backend/dist/Integrations/buildin/mitti/actions/stop.js @@ -0,0 +1,38 @@ +exports.__esModule = true; +module.exports = function (actionAPI) { + //Handle the action when executed + actionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('mitti', connectionID); + var mitti = connection.instance; + mitti + .stop() + .then(function () { + status("Current clip stopped", 'info'); + })["catch"](function (error) { + status(error.message, 'error'); + }); + } + else + status('No connection specified', 'error'); + }); + //Handle the interactive editor + actionAPI.onOpenEditor(function (editorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + editorAPI.onFieldChanges(function (fields) { + var fieldValues = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: fieldValues.connectionID }); + }); + editorAPI.setFields([ + { + id: 'connectionID', + name: 'Connection', + type: 'connection', + value: connectionID, + connectionType: 'mitti' + } + ]); + }); +}; +//# sourceMappingURL=stop.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/mitti/actions/stop.js.map b/Backend/dist/Integrations/buildin/mitti/actions/stop.js.map new file mode 100644 index 0000000..2d49c14 --- /dev/null +++ b/Backend/dist/Integrations/buildin/mitti/actions/stop.js.map @@ -0,0 +1 @@ +{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/mitti/actions/stop.ts"],"names":[],"mappings":";AAMA,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,iCAAiC;IACjC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAsB,EAAE,MAAgE;QACzG,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3F,IAAI,YAAY,IAAI,MAAM,EAAE;YAC3B,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAChE,IAAI,KAAK,GAAG,UAAU,CAAC,QAAiB,CAAC;YAEzC,KAAK;iBACH,IAAI,EAAE;iBACN,IAAI,CAAC;gBACL,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;YACxC,CAAC,CAAC,CACD,OAAK,CAAA,CAAC,UAAC,KAAY;gBACnB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;SACJ;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,+BAA+B;IAC/B,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAAsB;QACnE,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;QAE3F,SAAS,CAAC,cAAc,CAAC,UAAC,MAAyB;YAClD,IAAI,WAAW,GAAoB,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAEjF,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,SAAS,CAAC;YACnB;gBACC,EAAE,EAAE,cAAc;gBAClB,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,YAAY;gBACnB,cAAc,EAAE,OAAO;aACvB;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/mitti/integration.js b/Backend/dist/Integrations/buildin/mitti/integration.js new file mode 100644 index 0000000..0df397c --- /dev/null +++ b/Backend/dist/Integrations/buildin/mitti/integration.js @@ -0,0 +1,40 @@ +exports.__esModule = true; +var Integration = { + name: 'Mitti', + description: 'Control Mitti through the Mitti Undecked Bridge.', + main: require('./mitti'), + actions: [ + { + id: 'clip', + name: 'Set the Mitti clip' + }, + { + id: 'play', + name: 'Play current clip' + }, + { + id: 'stop', + name: 'Stop current clip' + }, + { + id: 'next', + name: 'Go to next clip' + }, + { + id: 'previous', + name: 'Go to previous clip' + } + ], + connections: [ + { + type: 'mitti', + name: 'Mitti Instance', + message: 'For this connection to work you need to enable Hyperdeck in the Mitti settings.', + fields: [ + { id: 'ip', name: 'IP Address', type: 'text', value: '0.0.0.0' } + ] + } + ] +}; +module.exports = Integration; +//# sourceMappingURL=integration.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/mitti/integration.js.map b/Backend/dist/Integrations/buildin/mitti/integration.js.map new file mode 100644 index 0000000..5a7fa06 --- /dev/null +++ b/Backend/dist/Integrations/buildin/mitti/integration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/mitti/integration.ts"],"names":[],"mappings":";AAEA,IAAI,WAAW,GAAgB;IAC9B,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,kDAAkD;IAC/D,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC;IAExB,OAAO,EAAE;QACR;YACC,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,oBAAoB;SAC1B;QAED;YACC,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,mBAAmB;SACzB;QAED;YACC,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,mBAAmB;SACzB;QAED;YACC,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,iBAAiB;SACvB;QAED;YACC,EAAE,EAAE,UAAU;YACd,IAAI,EAAE,qBAAqB;SAC3B;KACD;IAED,WAAW,EAAE;QACZ;YACC,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,iFAAiF;YAC1F,MAAM,EAAE;gBACP,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;aAChE;SACD;KACD;CACD,CAAC;AAEF,MAAM,CAAC,OAAO,GAAG,WAAW,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/mitti/mitti.js b/Backend/dist/Integrations/buildin/mitti/mitti.js new file mode 100644 index 0000000..53ce39f --- /dev/null +++ b/Backend/dist/Integrations/buildin/mitti/mitti.js @@ -0,0 +1,42 @@ +exports.__esModule = true; +var MittiClass_1 = require("./MittiClass"); +var axios = require('axios')["default"]; +module.exports = function (api) { + //Register a action + api.registerAction('clip', require('./actions/clip')); + api.registerAction('play', require('./actions/play')); + api.registerAction('stop', require('./actions/stop')); + api.registerAction('next', require('./actions/next')); + api.registerAction('previous', require('./actions/previous')); + api.registerConnectionValidator('mitti', function (ValidatorAPI) { + var properties = ValidatorAPI.properties; + if (properties.ip != undefined) { + if (ValidatorAPI.instance != undefined && ValidatorAPI.instance.connected == true) + return ValidatorAPI.callback(true); + var mitti = new MittiClass_1.Mitti(properties.ip); + var canRespond = true; + var timeout = setTimeout(function () { + canRespond = false; + ValidatorAPI.callback(false, 'Timeout while trying to connect to Mitti'); + }, 3000); + mitti.on('connected', function () { + if (canRespond == true) { + canRespond = false; + ValidatorAPI.setInstance(mitti); + clearTimeout(timeout); + ValidatorAPI.callback(true); + } + }); + mitti.on('connecterror', function (errorMessage) { + if (canRespond == true) { + canRespond = false; + clearTimeout(timeout); + ValidatorAPI.callback(false, errorMessage); + } + }); + } + else + ValidatorAPI.callback(false, 'Incorrect ip address syntax'); + }); +}; +//# sourceMappingURL=mitti.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/mitti/mitti.js.map b/Backend/dist/Integrations/buildin/mitti/mitti.js.map new file mode 100644 index 0000000..8d82fc5 --- /dev/null +++ b/Backend/dist/Integrations/buildin/mitti/mitti.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mitti.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/mitti/mitti.ts"],"names":[],"mappings":";AACA,2CAAqC;AACrC,IAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,SAAO,CAAA,CAAC;AAEvC,MAAM,CAAC,OAAO,GAAG,UAAC,GAAmB;IACpC,mBAAmB;IACnB,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACtD,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACtD,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACtD,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACtD,GAAG,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAE9D,GAAG,CAAC,2BAA2B,CAAC,OAAO,EAAE,UAAC,YAAoC;QAC7E,IAAI,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;QACzC,IAAI,UAAU,CAAC,EAAE,IAAI,SAAS,EAAE;YAC/B,IAAI,YAAY,CAAC,QAAQ,IAAI,SAAS,IAAK,YAAY,CAAC,QAAkB,CAAC,SAAS,IAAI,IAAI;gBAC3F,OAAO,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEpC,IAAI,KAAK,GAAG,IAAI,kBAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACrC,IAAI,UAAU,GAAG,IAAI,CAAC;YACtB,IAAI,OAAO,GAAmB,UAAU,CAAC;gBACxC,UAAU,GAAG,KAAK,CAAC;gBACnB,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,0CAA0C,CAAC,CAAC;YAC1E,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE;gBACrB,IAAI,UAAU,IAAI,IAAI,EAAE;oBACvB,UAAU,GAAG,KAAK,CAAC;oBACnB,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;oBAChC,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtB,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;iBAC5B;YACF,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,cAAc,EAAE,UAAC,YAAoB;gBAC7C,IAAI,UAAU,IAAI,IAAI,EAAE;oBACvB,UAAU,GAAG,KAAK,CAAC;oBACnB,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtB,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;iBAC3C;YACF,CAAC,CAAC,CAAC;SACH;;YAAM,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/moorentv/MoorenTv.js b/Backend/dist/Integrations/buildin/moorentv/MoorenTv.js new file mode 100644 index 0000000..5191cff --- /dev/null +++ b/Backend/dist/Integrations/buildin/moorentv/MoorenTv.js @@ -0,0 +1,56 @@ +exports.__esModule = true; +exports.MoorenTV = void 0; +var axios_1 = require("axios"); +var MoorenTV = /** @class */ (function () { + function MoorenTV(settings) { + this.serverAddress = settings.serverAddress; + this.serverPort = settings.serverPort; + this.adminPass = settings.adminPass; + } + MoorenTV.prototype._getBaseURI = function () { + return "http://" + this.serverAddress + ":" + this.serverPort + "/api/v1/" + this.adminPass + "/"; + }; + MoorenTV.prototype.ping = function (callback) { + axios_1["default"].get(this._getBaseURI() + "ping").then(function () { + callback(true); + })["catch"](function () { + callback(false); + }); + }; + MoorenTV.prototype.getGames = function () { + var _this = this; + return new Promise(function (resolve, reject) { + axios_1["default"].get(_this._getBaseURI() + 'games').then(function (response) { + if (response.data.succeed == true) + resolve(response.data.response); + else + reject('Internal server error'); + })["catch"](reject); + }); + }; + MoorenTV.prototype.startGame = function (gameID) { + var _this = this; + return new Promise(function (resolve, reject) { + axios_1["default"].get(_this._getBaseURI() + "games/start/" + gameID).then(function (response) { + if (response.data.succeed == true) + resolve(); + else + reject(); + })["catch"](reject); + }); + }; + MoorenTV.prototype.stopGame = function () { + var _this = this; + return new Promise(function (resolve, reject) { + axios_1["default"].get(_this._getBaseURI() + "games/stop").then(function (response) { + if (response.data.succeed == true) + resolve(); + else + reject(); + })["catch"](reject); + }); + }; + return MoorenTV; +}()); +exports.MoorenTV = MoorenTV; +//# sourceMappingURL=MoorenTv.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/moorentv/MoorenTv.js.map b/Backend/dist/Integrations/buildin/moorentv/MoorenTv.js.map new file mode 100644 index 0000000..d021282 --- /dev/null +++ b/Backend/dist/Integrations/buildin/moorentv/MoorenTv.js.map @@ -0,0 +1 @@ +{"version":3,"file":"MoorenTv.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/moorentv/MoorenTv.ts"],"names":[],"mappings":";;AAAA,+BAA0B;AAE1B;IAMI,kBAAY,QAA0E;QAClF,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;QAC5C,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;IACxC,CAAC;IAED,8BAAW,GAAX;QACI,OAAO,YAAU,IAAI,CAAC,aAAa,SAAI,IAAI,CAAC,UAAU,gBAAW,IAAI,CAAC,SAAS,MAAG,CAAA;IACtF,CAAC;IAED,uBAAI,GAAJ,UAAK,QAAoC;QACrC,kBAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;YACxC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAClB,CAAC,CAAC,CAAC,OAAK,CAAA,CAAC;YACL,QAAQ,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC,CAAC,CAAA;IACN,CAAC;IAED,2BAAQ,GAAR;QAAA,iBAiCC;QAPG,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YAC/B,kBAAK,CAAC,GAAG,CAAC,KAAI,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,UAAC,QAAQ;gBAClD,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI;oBAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;;oBAC9B,MAAM,CAAC,uBAAuB,CAAC,CAAA;YACxC,CAAC,CAAC,CAAC,OAAK,CAAA,CAAC,MAAM,CAAC,CAAA;QACpB,CAAC,CAAC,CAAA;IACN,CAAC;IAED,4BAAS,GAAT,UAAU,MAAc;QAAxB,iBAOC;QANG,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YAC/B,kBAAK,CAAC,GAAG,CAAC,KAAI,CAAC,WAAW,EAAE,GAAG,cAAc,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,UAAC,QAAQ;gBAClE,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI;oBAAE,OAAO,EAAE,CAAA;;oBACvC,MAAM,EAAE,CAAA;YACjB,CAAC,CAAC,CAAC,OAAK,CAAA,CAAC,MAAM,CAAC,CAAA;QACpB,CAAC,CAAC,CAAA;IACN,CAAC;IAED,2BAAQ,GAAR;QAAA,iBAOC;QANG,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YAC/B,kBAAK,CAAC,GAAG,CAAC,KAAI,CAAC,WAAW,EAAE,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,UAAC,QAAQ;gBACvD,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI;oBAAE,OAAO,EAAE,CAAA;;oBACvC,MAAM,EAAE,CAAA;YACjB,CAAC,CAAC,CAAC,OAAK,CAAA,CAAC,MAAM,CAAC,CAAA;QACpB,CAAC,CAAC,CAAA;IACN,CAAC;IACL,eAAC;AAAD,CAAC,AA5ED,IA4EC;AA5EY,4BAAQ"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/moorentv/actions/startGame.js b/Backend/dist/Integrations/buildin/moorentv/actions/startGame.js new file mode 100644 index 0000000..264f969 --- /dev/null +++ b/Backend/dist/Integrations/buildin/moorentv/actions/startGame.js @@ -0,0 +1,85 @@ +exports.__esModule = true; +module.exports = function (ActionAPI) { + ActionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var game = properties.game != undefined ? properties.game : 'none'; + if (connectionID != 'none') { + if (game != 'none') { + var connection = ActionAPI.getConnection('moorentv', connectionID); + if (connection) { + var mtv = connection.instance; + mtv.startGame(game).then(function () { + })["catch"](function (error) { + status(error, 'error'); + }); + } + else + status("Connection doesn't exist", 'error'); + } + else + status('No game specified', 'error'); + } + else + status('No connection specified', 'error'); + }); + ActionAPI.onOpenEditor(function (EditorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var game = properties.game != undefined ? properties.game : 'none'; + var connectionField = { + id: 'connectionID', + name: "Connection", + type: "connection", + connectionType: 'moorentv', + value: connectionID + }; + var gameField = { + id: 'game', + name: 'Game', + type: 'select', + value: game, + values: [] + }; + var sendFields = function (clearGameField) { + if (clearGameField === void 0) { clearGameField = false; } + if (clearGameField) + gameField.values = [{ id: 'none', text: 'None' }]; + EditorAPI.setFields([connectionField, gameField]); + }; + var lastConnectionID = null; + var validate = function () { + if (lastConnectionID != connectionID) { + lastConnectionID = connectionID; + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('moorentv', connectionID); + if (connection) { + var mtv = connection.instance; + mtv.getGames().then(function (games) { + var values = [{ id: 'none', text: 'None' }]; + for (var gameID in games) + values.push({ id: games[gameID].id, text: games[gameID].title }); + gameField.values = values; + sendFields(); + })["catch"](function (error) { + sendFields(true); + }); + } + else + sendFields(true); + } + else + sendFields(true); + } + }; + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + connectionID = fieldObject.connectionID; + game = fieldObject.game; + connectionField.value = connectionID; + gameField.value = game; + EditorAPI.saveProperties({ connectionID: connectionID, game: game }); + validate(); + }); + validate(); + }); +}; +//# sourceMappingURL=startGame.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/moorentv/actions/startGame.js.map b/Backend/dist/Integrations/buildin/moorentv/actions/startGame.js.map new file mode 100644 index 0000000..b62e970 --- /dev/null +++ b/Backend/dist/Integrations/buildin/moorentv/actions/startGame.js.map @@ -0,0 +1 @@ +{"version":3,"file":"startGame.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/moorentv/actions/startGame.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/moorentv/actions/stopGame.js b/Backend/dist/Integrations/buildin/moorentv/actions/stopGame.js new file mode 100644 index 0000000..95f2fc2 --- /dev/null +++ b/Backend/dist/Integrations/buildin/moorentv/actions/stopGame.js @@ -0,0 +1,36 @@ +exports.__esModule = true; +module.exports = function (ActionAPI) { + ActionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('moorentv', connectionID); + if (connection) { + var mtv = connection.instance; + mtv.stopGame().then(function () { + })["catch"](function (error) { + status(error, 'error'); + }); + } + else + status("Connection doesn't exist", 'error'); + } + else + status('No connection specified', 'error'); + }); + ActionAPI.onOpenEditor(function (EditorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var connectionField = { + id: 'connectionID', + name: "Connection", + type: "connection", + connectionType: 'moorentv', + value: connectionID + }; + EditorAPI.setFields([connectionField]); + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID }); + }); + }); +}; +//# sourceMappingURL=stopGame.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/moorentv/actions/stopGame.js.map b/Backend/dist/Integrations/buildin/moorentv/actions/stopGame.js.map new file mode 100644 index 0000000..e06d584 --- /dev/null +++ b/Backend/dist/Integrations/buildin/moorentv/actions/stopGame.js.map @@ -0,0 +1 @@ +{"version":3,"file":"stopGame.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/moorentv/actions/stopGame.ts"],"names":[],"mappings":";AAIA,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IAClC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAAM;QAChC,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAA;QAE1F,IAAI,YAAY,IAAI,MAAM,EAAE;YACxB,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;YAElE,IAAI,UAAU,EAAE;gBACZ,IAAI,GAAG,GAAa,UAAU,CAAC,QAAQ,CAAC;gBAExC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;gBAEpB,CAAC,CAAC,CAAC,OAAK,CAAA,CAAC,UAAC,KAAK;oBACX,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;gBAC1B,CAAC,CAAC,CAAA;aACL;;gBAAM,MAAM,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAA;SACrD;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAA;IAErD,CAAC,CAAC,CAAA;IAGF,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAAU;QACpD,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAA;QAE1F,IAAI,eAAe,GAAoB;YACnC,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,UAAU;YAC1B,KAAK,EAAE,YAAY;SACtB,CAAA;QAED,SAAS,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC,CAAA;QAEtC,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM;YAC5B,IAAI,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAA;YAC/D,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAA;QACxE,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACN,CAAC,CAAA"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/moorentv/integration.js b/Backend/dist/Integrations/buildin/moorentv/integration.js new file mode 100644 index 0000000..b20b473 --- /dev/null +++ b/Backend/dist/Integrations/buildin/moorentv/integration.js @@ -0,0 +1,16 @@ +exports.__esModule = true; +module.exports = { + name: "Mooren TV", + description: "Mooren TV Multiplay game system", + main: require('./main'), + connections: [ + { + name: "MoorenTV Instance", type: "moorentv", fields: [ + { id: 'serverAddress', name: "Server Address", type: "text", value: "0.0.0.0" }, + { id: 'serverPort', name: "Server Port", type: "number", value: "9090" }, + { id: 'adminPass', name: "Server Admin Pass", type: "text", value: "" }, + ] + } + ] +}; +//# sourceMappingURL=integration.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/moorentv/integration.js.map b/Backend/dist/Integrations/buildin/moorentv/integration.js.map new file mode 100644 index 0000000..fb0bbbe --- /dev/null +++ b/Backend/dist/Integrations/buildin/moorentv/integration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/moorentv/integration.ts"],"names":[],"mappings":";AAEA,MAAM,CAAC,OAAO,GAAG;IACb,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,iCAAiC;IAC9C,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;IACvB,WAAW,EAAE;QACT;YACI,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;gBACjD,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;gBAC/E,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;gBACxE,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;aAC1E;SACJ;KACJ;CACW,CAAA"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/moorentv/main.js b/Backend/dist/Integrations/buildin/moorentv/main.js new file mode 100644 index 0000000..28caafa --- /dev/null +++ b/Backend/dist/Integrations/buildin/moorentv/main.js @@ -0,0 +1,16 @@ +exports.__esModule = true; +var MoorenTv_1 = require("./MoorenTv"); +module.exports = function (Api) { + Api.registerAction('startGame', 'Start game', require('./actions/startGame')); + Api.registerAction('stopGame', 'Stop game', require('./actions/stopGame')); + Api.registerConnectionValidator('moorentv', function (validatorApi) { + var _a = validatorApi.properties, serverAddress = _a.serverAddress, serverPort = _a.serverPort, adminPass = _a.adminPass; + var mtv = new MoorenTv_1.MoorenTV({ serverAddress: serverAddress, serverPort: serverPort, adminPass: adminPass }); + mtv.ping(function (succeed) { + if (succeed) + validatorApi.setInstance(mtv); + validatorApi.callback(succeed, succeed == false ? 'Unable to connect to the MoorenTV instance' : null); + }); + }); +}; +//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/moorentv/main.js.map b/Backend/dist/Integrations/buildin/moorentv/main.js.map new file mode 100644 index 0000000..6071382 --- /dev/null +++ b/Backend/dist/Integrations/buildin/moorentv/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/moorentv/main.ts"],"names":[],"mappings":";AACA,uCAAsC;AAEtC,MAAM,CAAC,OAAO,GAAG,UAAC,GAAmB;IACjC,GAAG,CAAC,cAAc,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAA;IAC7E,GAAG,CAAC,cAAc,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAA;IAE1E,GAAG,CAAC,2BAA2B,CAAC,UAAU,EAAE,UAAC,YAAoC;QACzE,IAAA,KAA2C,YAAY,CAAC,UAAU,EAAhE,aAAa,mBAAA,EAAE,UAAU,gBAAA,EAAE,SAAS,eAA4B,CAAA;QAEtE,IAAI,GAAG,GAAG,IAAI,mBAAQ,CAAC,EAAE,aAAa,eAAA,EAAE,UAAU,YAAA,EAAE,SAAS,WAAA,EAAE,CAAC,CAAA;QAEhE,GAAG,CAAC,IAAI,CAAC,UAAC,OAAO;YACb,IAAI,OAAO;gBAAE,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;YAC1C,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAC1G,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACN,CAAC,CAAA"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/ndiTools/actions/source.js b/Backend/dist/Integrations/buildin/ndiTools/actions/source.js new file mode 100644 index 0000000..3632026 --- /dev/null +++ b/Backend/dist/Integrations/buildin/ndiTools/actions/source.js @@ -0,0 +1,116 @@ +exports.__esModule = true; +module.exports = function (actionAPI) { + //Handle the action when executed + actionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var sourceID = properties.sourceID != undefined ? properties.sourceID : 'none'; + if (connectionID != 'none') { + if (sourceID != 'none') { + var connection = actionAPI.getConnection('studiomonitor', connectionID); + if (connection.instance != undefined) { + var monitor = connection.instance; + monitor + .setSource(sourceID) + .then(function () { + status('Source was set'); + })["catch"](function (error) { + status("Error whilst setting source: " + error.message, 'error'); + }); + } + } + else + status('No source specified', 'error'); + } + else + status('No connection specified', 'error'); + }); + //Handle the interactive editor + actionAPI.onOpenEditor(function (editorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var sourceID = properties.sourceID != undefined ? properties.sourceID : 'none'; + var monitor = null; + var currentIP = null; + var currentPort = null; + var fields = [ + { + id: 'connectionID', + name: 'Connection', + type: 'connection', + value: connectionID, + connectionType: 'studiomonitor' + }, + { + id: 'sourceID', + name: 'Source', + type: 'select', + value: sourceID, + values: [] + } + ]; + function updateAddress(connectionID, callback) { + if (connectionID != 'none') { + var connection = actionAPI.getConnection('studiomonitor', connectionID); + var ip = connection.properties.ip; + var port = connection.properties.port; + if (currentIP != ip || currentPort != port) { + currentIP = ip; + currentPort = port; + monitor = connection.instance; + callback(true); + } + else { + callback(false); + } + } + else { + if (currentIP != null || currentPort != null) { + currentIP = null; + currentPort = null; + monitor = null; + callback(true); + } + else { + callback(false); + } + } + } + function updateSources(callback) { + if (monitor != null) + monitor + .getSources() + .then(function (sources) { + fields[1].values = sources.map(function (source) { + return { id: source, text: source }; + }); + callback(); + })["catch"](function (error) { + fields[1].values = []; + callback(); + }); + else { + fields[1].values = []; + callback(); + } + } + function validate(fieldValues) { + fields[0].value = fieldValues.connectionID; + fields[1].value = fieldValues.sourceID; + editorAPI.saveProperties({ connectionID: fieldValues.connectionID, sourceID: fieldValues.sourceID }); + updateAddress(fieldValues.connectionID, function (changed) { + if (changed) { + updateSources(function () { + editorAPI.setFields(fields); + }); + } + else + editorAPI.setFields(fields); + }); + } + validate({ connectionID: connectionID, sourceID: sourceID }); + editorAPI.onFieldChanges(function (fields) { + var fieldValues = editorAPI.tools.objectifyFieldsValues(fields); + validate(fieldValues); + }); + }); +}; +//# sourceMappingURL=source.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/ndiTools/actions/source.js.map b/Backend/dist/Integrations/buildin/ndiTools/actions/source.js.map new file mode 100644 index 0000000..eae3b0b --- /dev/null +++ b/Backend/dist/Integrations/buildin/ndiTools/actions/source.js.map @@ -0,0 +1 @@ +{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/ndiTools/actions/source.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/ndiTools/integration.js b/Backend/dist/Integrations/buildin/ndiTools/integration.js new file mode 100644 index 0000000..c22637b --- /dev/null +++ b/Backend/dist/Integrations/buildin/ndiTools/integration.js @@ -0,0 +1,24 @@ +exports.__esModule = true; +var Integration = { + name: 'NDI Tools', + description: 'Control various NDI Tools through the NDI Tools Undecked Bridge.', + main: require('./ndiTools'), + actions: [ + { + id: 'source', + name: 'Set the StudioMonitor source' + } + ], + connections: [ + { + type: 'studiomonitor', + name: 'Studio Monitor', + fields: [ + { id: 'ip', name: 'IP Address', type: 'text', value: '0.0.0.0' }, + { id: 'port', name: 'Port', type: 'number', value: '80' } + ] + } + ] +}; +module.exports = Integration; +//# sourceMappingURL=integration.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/ndiTools/integration.js.map b/Backend/dist/Integrations/buildin/ndiTools/integration.js.map new file mode 100644 index 0000000..4a76b26 --- /dev/null +++ b/Backend/dist/Integrations/buildin/ndiTools/integration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/ndiTools/integration.ts"],"names":[],"mappings":";AAEA,IAAI,WAAW,GAAgB;IAC9B,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,kEAAkE;IAC/E,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC;IAE3B,OAAO,EAAE;QACR;YACC,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,8BAA8B;SACpC;KACD;IAED,WAAW,EAAE;QACZ;YACC,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE;gBACP,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;gBAChE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE;aACzD;SACD;KACD;CACD,CAAC;AAEF,MAAM,CAAC,OAAO,GAAG,WAAW,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/ndiTools/ndiTools.js b/Backend/dist/Integrations/buildin/ndiTools/ndiTools.js new file mode 100644 index 0000000..30e32cd --- /dev/null +++ b/Backend/dist/Integrations/buildin/ndiTools/ndiTools.js @@ -0,0 +1,14 @@ +exports.__esModule = true; +var studiomonitor_api_1 = require("studiomonitor-api"); +var axios = require('axios')["default"]; +module.exports = function (api) { + //Register a action + api.registerAction('source', require('./actions/source')); + api.registerConnectionValidator('studiomonitor', function (ValidatorAPI) { + var monitor = new studiomonitor_api_1.StudioMonitor(ValidatorAPI.properties.ip, ValidatorAPI.properties.port, function (err) { + ValidatorAPI.callback(err == undefined, err == undefined ? null : 'Unable to connect to the StudioMonitor.'); + ValidatorAPI.setInstance(monitor); + }); + }); +}; +//# sourceMappingURL=ndiTools.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/ndiTools/ndiTools.js.map b/Backend/dist/Integrations/buildin/ndiTools/ndiTools.js.map new file mode 100644 index 0000000..eb19e25 --- /dev/null +++ b/Backend/dist/Integrations/buildin/ndiTools/ndiTools.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ndiTools.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/ndiTools/ndiTools.ts"],"names":[],"mappings":";AACA,uDAAkD;AAClD,IAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,SAAO,CAAA,CAAC;AAEvC,MAAM,CAAC,OAAO,GAAG,UAAC,GAAmB;IACpC,mBAAmB;IACnB,GAAG,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAE1D,GAAG,CAAC,2BAA2B,CAAC,eAAe,EAAE,UAAC,YAAoC;QACrF,IAAI,OAAO,GAAG,IAAI,iCAAa,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,EAAE,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,UAAC,GAAG;YAC7F,YAAY,CAAC,QAAQ,CACpB,GAAG,IAAI,SAAS,EAChB,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,yCAAyC,CACnE,CAAC;YAEF,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/pjlink/actions/setPower.js b/Backend/dist/Integrations/buildin/pjlink/actions/setPower.js new file mode 100644 index 0000000..a6764c4 --- /dev/null +++ b/Backend/dist/Integrations/buildin/pjlink/actions/setPower.js @@ -0,0 +1,27 @@ +exports.__esModule = true; +module.exports = function (ActionAPI) { + ActionAPI.onExecute(function (properties, status) { + }); + ActionAPI.onOpenEditor(function (EditorAPI, properties) { + var connectionField = { + id: "connectionID", + name: "Connection", + type: "connection", + connectionType: "pjlink", + value: properties.connectionID != undefined ? properties.connectionID : 'none' + }; + var stateField = { + id: 'state', + name: "State", + type: 'select', + values: [{ id: "on", text: "Power On" }, { id: "off", text: "Power Off" }], + value: properties.state != undefined ? properties.state : 'on' + }; + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID, state: fieldObject.state }); + }); + EditorAPI.setFields([connectionField, stateField]); + }); +}; +//# sourceMappingURL=setPower.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/pjlink/actions/setPower.js.map b/Backend/dist/Integrations/buildin/pjlink/actions/setPower.js.map new file mode 100644 index 0000000..18f9290 --- /dev/null +++ b/Backend/dist/Integrations/buildin/pjlink/actions/setPower.js.map @@ -0,0 +1 @@ +{"version":3,"file":"setPower.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/pjlink/actions/setPower.ts"],"names":[],"mappings":";AAGA,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IAClC,SAAS,CAAC,SAAS,CAAC,UAAC,UAAU,EAAE,MAAM;IAEvC,CAAC,CAAC,CAAA;IAGF,SAAS,CAAC,YAAY,CAAC,UAAC,SAAS,EAAE,UAAU;QACzC,IAAI,eAAe,GAAoB;YACnC,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,QAAQ;YACxB,KAAK,EAAE,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM;SACjF,CAAA;QAED,IAAI,UAAU,GAAoB;YAC9B,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;YAC1E,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;SACjE,CAAA;QAED,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM;YAC5B,IAAI,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAA;YAE/D,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC,CAAA;QAClG,CAAC,CAAC,CAAA;QAEF,SAAS,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;AACN,CAAC,CAAA"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/pjlink/integration.js b/Backend/dist/Integrations/buildin/pjlink/integration.js new file mode 100644 index 0000000..a6800b4 --- /dev/null +++ b/Backend/dist/Integrations/buildin/pjlink/integration.js @@ -0,0 +1,34 @@ +exports.__esModule = true; +module.exports = { + name: "PJLink", + description: "PJLink is a unified standard for operating and controlling data projectors.", + main: require("./main"), + connections: [ + { + type: "pjlink", + name: "Projector", + message: 'Make you PJLink is enabled on your projector. Most of the time these settings are located under Network.', + fields: [ + { + id: 'ip', + name: "IP Adddress", + type: "text", + value: "0.0.0.0" + }, + { + id: 'port', + name: "PJLink Port", + type: "number", + value: "4352" + }, + { + id: 'password', + name: "PJLink Password", + type: "password", + value: "" + } + ] + } + ] +}; +//# sourceMappingURL=integration.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/pjlink/integration.js.map b/Backend/dist/Integrations/buildin/pjlink/integration.js.map new file mode 100644 index 0000000..6f78457 --- /dev/null +++ b/Backend/dist/Integrations/buildin/pjlink/integration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/pjlink/integration.ts"],"names":[],"mappings":";AAEA,MAAM,CAAC,OAAO,GAAG;IACb,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,6EAA6E;IAC1F,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;IACvB,WAAW,EAAE;QACT;YACI,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,0GAA0G;YACnH,MAAM,EAAE;gBACJ;oBACI,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,SAAS;iBACnB;gBACD;oBACI,EAAE,EAAE,MAAM;oBACV,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,MAAM;iBAChB;gBACD;oBACI,EAAE,EAAE,UAAU;oBACd,IAAI,EAAE,iBAAiB;oBACvB,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,EAAE;iBACZ;aACJ;SACJ;KACJ;CACW,CAAA"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/pjlink/main.js b/Backend/dist/Integrations/buildin/pjlink/main.js new file mode 100644 index 0000000..18bf542 --- /dev/null +++ b/Backend/dist/Integrations/buildin/pjlink/main.js @@ -0,0 +1,16 @@ +exports.__esModule = true; +var pjlink = require("pjlink"); +module.exports = function (Api) { + Api.registerConnectionValidator('pjlink', function (validatorAPI) { + var ip = validatorAPI.properties.ip; + var port = validatorAPI.properties.port; + var password = validatorAPI.properties.password; + var beamer = new pjlink(ip, port, password); + beamer.getClass(function (err, classNumber) { + if (!err) + validatorAPI.setInstance(beamer); + validatorAPI.callback(err == undefined, err == undefined ? null : 'Unable to connect to projector: ' + err); + }); + }); +}; +//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/pjlink/main.js.map b/Backend/dist/Integrations/buildin/pjlink/main.js.map new file mode 100644 index 0000000..f7cfb93 --- /dev/null +++ b/Backend/dist/Integrations/buildin/pjlink/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/pjlink/main.ts"],"names":[],"mappings":";AAAA,+BAAgC;AAIhC,MAAM,CAAC,OAAO,GAAG,UAAC,GAAmB;IAGjC,GAAG,CAAC,2BAA2B,CAAC,QAAQ,EAAE,UAAC,YAAY;QACnD,IAAI,EAAE,GAAG,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,IAAI,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC;QACxC,IAAI,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC;QAEhD,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,QAAQ,CAAC,UAAC,GAAG,EAAE,WAAW;YAC7B,IAAI,CAAC,GAAG;gBACJ,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;YAGpC,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,SAAS,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kCAAkC,GAAG,GAAG,CAAC,CAAA;QAC/G,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAA;AACN,CAAC,CAAA"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/powerpoint/actions/next.js b/Backend/dist/Integrations/buildin/powerpoint/actions/next.js new file mode 100644 index 0000000..fc24c0f --- /dev/null +++ b/Backend/dist/Integrations/buildin/powerpoint/actions/next.js @@ -0,0 +1,41 @@ +exports.__esModule = true; +var axios_1 = require("axios"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('powerpoint-bridge', connectionID); + axios_1["default"] + .get("http://" + connection.properties.ip + ":" + connection.properties.port + "/v1/next") + .then(function () { + status('Action completed'); + })["catch"](function () { + status('Unable to reach Powerpoint-Bridge'); + }); + } + else + status('No connection specified', 'error'); + }); + actionAPI.onOpenEditor(function (editorAPI, properties) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'powerpoint-bridge', + value: connectionID + }; + editorAPI.onFieldChanges(function (fields) { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; +//# sourceMappingURL=next.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/powerpoint/actions/next.js.map b/Backend/dist/Integrations/buildin/powerpoint/actions/next.js.map new file mode 100644 index 0000000..25c5f70 --- /dev/null +++ b/Backend/dist/Integrations/buildin/powerpoint/actions/next.js.map @@ -0,0 +1 @@ +{"version":3,"file":"next.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/powerpoint/actions/next.ts"],"names":[],"mappings":";AAAA,+BAA0B;AAI1B,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAsB,EAAE,MAAM;QAC/C,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QAEX,IAAI,YAAY,IAAI,MAAM,EAAE;YAC3B,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;YAE5E,kBAAK;iBACH,GAAG,CAAC,YAAU,UAAU,CAAC,UAAU,CAAC,EAAE,SAAI,UAAU,CAAC,UAAU,CAAC,IAAI,aAAU,CAAC;iBAC/E,IAAI,CAAC;gBACL,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC5B,CAAC,CAAC,CACD,OAAK,CAAA,CAAC;gBACN,MAAM,CAAC,mCAAmC,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;SACJ;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAAsB;QACnE,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QACX,IAAI,eAAe,GAAoB;YACtC,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,mBAAmB;YACnC,KAAK,EAAE,YAAY;SACnB,CAAC;QACF,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM;YAC/B,IAAI,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC3D,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,SAAS,CAAC;YACnB,eAAe;SACf,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/powerpoint/actions/overview.js b/Backend/dist/Integrations/buildin/powerpoint/actions/overview.js new file mode 100644 index 0000000..b0550aa --- /dev/null +++ b/Backend/dist/Integrations/buildin/powerpoint/actions/overview.js @@ -0,0 +1,41 @@ +exports.__esModule = true; +var axios_1 = require("axios"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('powerpoint-bridge', connectionID); + axios_1["default"] + .get("http://" + connection.properties.ip + ":" + connection.properties.port + "/v1/overview") + .then(function () { + status('Action completed'); + })["catch"](function () { + status('Unable to reach Powerpoint-Bridge'); + }); + } + else + status('No connection specified', 'error'); + }); + actionAPI.onOpenEditor(function (editorAPI, properties) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'powerpoint-bridge', + value: connectionID + }; + editorAPI.onFieldChanges(function (fields) { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; +//# sourceMappingURL=overview.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/powerpoint/actions/overview.js.map b/Backend/dist/Integrations/buildin/powerpoint/actions/overview.js.map new file mode 100644 index 0000000..8ebc5a9 --- /dev/null +++ b/Backend/dist/Integrations/buildin/powerpoint/actions/overview.js.map @@ -0,0 +1 @@ +{"version":3,"file":"overview.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/powerpoint/actions/overview.ts"],"names":[],"mappings":";AAAA,+BAA0B;AAI1B,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAsB,EAAE,MAAM;QAC/C,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QAEX,IAAI,YAAY,IAAI,MAAM,EAAE;YAC3B,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;YAE5E,kBAAK;iBACH,GAAG,CAAC,YAAU,UAAU,CAAC,UAAU,CAAC,EAAE,SAAI,UAAU,CAAC,UAAU,CAAC,IAAI,iBAAc,CAAC;iBACnF,IAAI,CAAC;gBACL,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC5B,CAAC,CAAC,CACD,OAAK,CAAA,CAAC;gBACN,MAAM,CAAC,mCAAmC,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;SACJ;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAAsB;QACnE,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QACX,IAAI,eAAe,GAAoB;YACtC,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,mBAAmB;YACnC,KAAK,EAAE,YAAY;SACnB,CAAC;QACF,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM;YAC/B,IAAI,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC3D,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,SAAS,CAAC;YACnB,eAAe;SACf,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/powerpoint/actions/previous.js b/Backend/dist/Integrations/buildin/powerpoint/actions/previous.js new file mode 100644 index 0000000..236db62 --- /dev/null +++ b/Backend/dist/Integrations/buildin/powerpoint/actions/previous.js @@ -0,0 +1,41 @@ +exports.__esModule = true; +var axios_1 = require("axios"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('powerpoint-bridge', connectionID); + axios_1["default"] + .get("http://" + connection.properties.ip + ":" + connection.properties.port + "/v1/previous") + .then(function () { + status('Action completed'); + })["catch"](function () { + status('Unable to reach Powerpoint-Bridge'); + }); + } + else + status('No connection specified', 'error'); + }); + actionAPI.onOpenEditor(function (editorAPI, properties) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'powerpoint-bridge', + value: connectionID + }; + editorAPI.onFieldChanges(function (fields) { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; +//# sourceMappingURL=previous.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/powerpoint/actions/previous.js.map b/Backend/dist/Integrations/buildin/powerpoint/actions/previous.js.map new file mode 100644 index 0000000..91cb9bc --- /dev/null +++ b/Backend/dist/Integrations/buildin/powerpoint/actions/previous.js.map @@ -0,0 +1 @@ +{"version":3,"file":"previous.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/powerpoint/actions/previous.ts"],"names":[],"mappings":";AAAA,+BAA0B;AAI1B,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAsB,EAAE,MAAM;QAC/C,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QAEX,IAAI,YAAY,IAAI,MAAM,EAAE;YAC3B,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;YAE5E,kBAAK;iBACH,GAAG,CAAC,YAAU,UAAU,CAAC,UAAU,CAAC,EAAE,SAAI,UAAU,CAAC,UAAU,CAAC,IAAI,iBAAc,CAAC;iBACnF,IAAI,CAAC;gBACL,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC5B,CAAC,CAAC,CACD,OAAK,CAAA,CAAC;gBACN,MAAM,CAAC,mCAAmC,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;SACJ;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAAsB;QACnE,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QACX,IAAI,eAAe,GAAoB;YACtC,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,mBAAmB;YACnC,KAAK,EAAE,YAAY;SACnB,CAAC;QACF,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM;YAC/B,IAAI,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC3D,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,SAAS,CAAC;YACnB,eAAe;SACf,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/powerpoint/integration.js b/Backend/dist/Integrations/buildin/powerpoint/integration.js new file mode 100644 index 0000000..9b802b8 --- /dev/null +++ b/Backend/dist/Integrations/buildin/powerpoint/integration.js @@ -0,0 +1,22 @@ +exports.__esModule = true; +module.exports = { + name: 'Powerpoint', + description: 'Control basic Powerpoint functionality on the Undecked computer or via our Powerpoint-Bridge application.', + main: require('./powerpoint'), + connections: [ + { + name: 'Powerpoint-Bridge', + type: 'powerpoint-bridge', + message: "This connection requires the 'Undecked Powerpoint Bridge' tool to be running on the same machine as Powerpoint. This tool allows Undecked to control various Powerpoint features over the network.", + link: { + address: 'http://www.morphix.productions', + title: 'Get the Powerpoint Bridge' + }, + fields: [ + { id: 'ip', name: 'IP Address', type: 'text' }, + { id: 'port', name: 'Port', type: 'number', value: 9292 } + ] + } + ] +}; +//# sourceMappingURL=integration.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/powerpoint/integration.js.map b/Backend/dist/Integrations/buildin/powerpoint/integration.js.map new file mode 100644 index 0000000..9ab0200 --- /dev/null +++ b/Backend/dist/Integrations/buildin/powerpoint/integration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/powerpoint/integration.ts"],"names":[],"mappings":";AAEA,MAAM,CAAC,OAAO,GAAG;IAChB,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,2GAA2G;IACxH,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC;IAC7B,WAAW,EAAE;QACZ;YACC,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE,mBAAmB;YACzB,OAAO,EACN,oMAAoM;YACrM,IAAI,EAAE;gBACL,OAAO,EAAE,gCAAgC;gBACzC,KAAK,EAAE,2BAA2B;aAClC;YACD,MAAM,EAAE;gBACP,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE;gBAC9C,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE;aACzD;SACD;KACD;CACc,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/powerpoint/powerpoint.js b/Backend/dist/Integrations/buildin/powerpoint/powerpoint.js new file mode 100644 index 0000000..b346066 --- /dev/null +++ b/Backend/dist/Integrations/buildin/powerpoint/powerpoint.js @@ -0,0 +1,21 @@ +exports.__esModule = true; +var axios_1 = require("axios"); +module.exports = function (api) { + api.registerAction('overview', 'Show slide overview', require('./actions/overview')); + api.registerAction('previous', 'Previous slide', require('./actions/previous')); + api.registerAction('next', 'Next slide', require('./actions/next')); + api.registerConnectionValidator('powerpoint-bridge', function (validatorAPI) { + if (validatorAPI.properties.ip != undefined && validatorAPI.properties.port != undefined) { + axios_1["default"] + .get("http://" + validatorAPI.properties.ip + ":" + validatorAPI.properties.port + "/v1/ping") + .then(function () { + validatorAPI.callback(true); + })["catch"](function () { + validatorAPI.callback(false, 'Unable to reach Powerpoint-Bridge'); + }); + } + else + validatorAPI.callback(false, 'No ip or port specified'); + }); +}; +//# sourceMappingURL=powerpoint.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/powerpoint/powerpoint.js.map b/Backend/dist/Integrations/buildin/powerpoint/powerpoint.js.map new file mode 100644 index 0000000..7045fac --- /dev/null +++ b/Backend/dist/Integrations/buildin/powerpoint/powerpoint.js.map @@ -0,0 +1 @@ +{"version":3,"file":"powerpoint.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/powerpoint/powerpoint.ts"],"names":[],"mappings":";AAAA,+BAA0B;AAG1B,MAAM,CAAC,OAAO,GAAG,UAAC,GAAmB;IACpC,GAAG,CAAC,cAAc,CAAC,UAAU,EAAE,qBAAqB,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACrF,GAAG,CAAC,cAAc,CAAC,UAAU,EAAE,gBAAgB,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAChF,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEpE,GAAG,CAAC,2BAA2B,CAAC,mBAAmB,EAAE,UAAC,YAAY;QACjE,IAAI,YAAY,CAAC,UAAU,CAAC,EAAE,IAAI,SAAS,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,IAAI,SAAS,EAAE;YACzF,kBAAK;iBACH,GAAG,CAAC,YAAU,YAAY,CAAC,UAAU,CAAC,EAAE,SAAI,YAAY,CAAC,UAAU,CAAC,IAAI,aAAU,CAAC;iBACnF,IAAI,CAAC;gBACL,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC,CAAC,CACD,OAAK,CAAA,CAAC;gBACN,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,mCAAmC,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC;SACJ;;YAAM,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/protor/ProtorClass.js b/Backend/dist/Integrations/buildin/protor/ProtorClass.js new file mode 100644 index 0000000..909a99f --- /dev/null +++ b/Backend/dist/Integrations/buildin/protor/ProtorClass.js @@ -0,0 +1,34 @@ +exports.__esModule = true; +exports.Protor = void 0; +var axios_1 = require("axios"); +var Protor = /** @class */ (function () { + function Protor(ip, port) { + this.ip = ip; + this.port = port; + } + Protor.prototype._getBaseURI = function () { + return "http://" + this.ip + ":" + this.port + "/"; + }; + Protor.prototype.isOnline = function (callback) { + axios_1["default"].get(this._getBaseURI() + 'online').then(function () { + callback(true); + })["catch"](function () { + callback(false); + }); + }; + Protor.prototype.fadeIn = function (duration) { + if (duration === void 0) { duration = 0; } + axios_1["default"].get(this._getBaseURI() + 'api/animation/fadein/' + duration).then(function () { + })["catch"](function () { + }); + }; + Protor.prototype.fadeOut = function (duration) { + if (duration === void 0) { duration = 0; } + axios_1["default"].get(this._getBaseURI() + 'api/animation/fadeout/' + duration).then(function () { + })["catch"](function () { + }); + }; + return Protor; +}()); +exports.Protor = Protor; +//# sourceMappingURL=ProtorClass.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/protor/ProtorClass.js.map b/Backend/dist/Integrations/buildin/protor/ProtorClass.js.map new file mode 100644 index 0000000..3cae3e8 --- /dev/null +++ b/Backend/dist/Integrations/buildin/protor/ProtorClass.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ProtorClass.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/protor/ProtorClass.ts"],"names":[],"mappings":";;AAAA,+BAA0B;AAE1B;IAII,gBAAY,EAAU,EAAE,IAAY;QAChC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,4BAAW,GAAX;QACI,OAAO,YAAU,IAAI,CAAC,EAAE,SAAI,IAAI,CAAC,IAAI,MAAG,CAAA;IAC5C,CAAC;IAED,yBAAQ,GAAR,UAAS,QAAmC;QACxC,kBAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,CAAA;QAClB,CAAC,CAAC,CAAC,OAAK,CAAA,CAAC;YACL,QAAQ,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC,CAAC,CAAA;IACN,CAAC;IAED,uBAAM,GAAN,UAAO,QAAoB;QAApB,yBAAA,EAAA,YAAoB;QACvB,kBAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,uBAAuB,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC;QAExE,CAAC,CAAC,CAAC,OAAK,CAAA,CAAC;QAET,CAAC,CAAC,CAAA;IACN,CAAC;IAED,wBAAO,GAAP,UAAQ,QAAoB;QAApB,yBAAA,EAAA,YAAoB;QACxB,kBAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,wBAAwB,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC;QAEzE,CAAC,CAAC,CAAC,OAAK,CAAA,CAAC;QAET,CAAC,CAAC,CAAA;IACN,CAAC;IACL,aAAC;AAAD,CAAC,AApCD,IAoCC;AApCY,wBAAM"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/protor/actions/fadeIn.js b/Backend/dist/Integrations/buildin/protor/actions/fadeIn.js new file mode 100644 index 0000000..6ab79b3 --- /dev/null +++ b/Backend/dist/Integrations/buildin/protor/actions/fadeIn.js @@ -0,0 +1,49 @@ +exports.__esModule = true; +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var duration = properties.duration != undefined + ? properties.duration + : 0; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('protor', connectionID); + if (connection && connection.instance != undefined) { + var protor = connection.instance; + protor.fadeIn(duration); + } + else + status('Connection not online', 'error'); + } + else + status('No connection specified', 'error'); + }); + actionAPI.onOpenEditor(function (editorAPI, properties) { + var connectionID = properties.connectionID != undefined + ? properties.connectionID + : 'none'; + var duration = properties.duration != undefined + ? properties.duration + : 0; + var connectionField = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'protor', + value: connectionID + }; + var durationField = { + id: 'duration', + name: 'Duration', + type: 'number', + value: duration + }; + editorAPI.setFields([connectionField, durationField]); + editorAPI.onFieldChanges(function (fields) { + var fieldObject = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: fieldObject.connectionID, duration: fieldObject.duration }); + }); + }); +}; +//# sourceMappingURL=fadeIn.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/protor/actions/fadeIn.js.map b/Backend/dist/Integrations/buildin/protor/actions/fadeIn.js.map new file mode 100644 index 0000000..0635bd2 --- /dev/null +++ b/Backend/dist/Integrations/buildin/protor/actions/fadeIn.js.map @@ -0,0 +1 @@ +{"version":3,"file":"fadeIn.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/protor/actions/fadeIn.ts"],"names":[],"mappings":";AAKA,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAsB,EAAE,MAAM;QAC/C,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QACX,IAAI,QAAQ,GACX,UAAU,CAAC,QAAQ,IAAI,SAAS;YAC/B,CAAC,CAAC,UAAU,CAAC,QAAQ;YACrB,CAAC,CAAC,CAAC,CAAC;QAEN,IAAI,YAAY,IAAI,MAAM,EAAE;YAC3B,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YAEjE,IAAI,UAAU,IAAI,UAAU,CAAC,QAAQ,IAAI,SAAS,EAAE;gBACnD,IAAI,MAAM,GAAW,UAAU,CAAC,QAAQ,CAAC;gBAEzC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;aACvB;;gBAAM,MAAM,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;SAChD;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAAsB;QACnE,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS;YACnC,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QACX,IAAI,QAAQ,GACX,UAAU,CAAC,QAAQ,IAAI,SAAS;YAC/B,CAAC,CAAC,UAAU,CAAC,QAAQ;YACrB,CAAC,CAAC,CAAC,CAAC;QAEN,IAAI,eAAe,GAAoB;YACtC,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,QAAQ;YACxB,KAAK,EAAE,YAAY;SACnB,CAAC;QAEF,IAAI,aAAa,GAAoB;YACpC,EAAE,EAAE,UAAU;YACd,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;SACf,CAAC;QAEF,SAAS,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAAA;QAErD,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM;YAC/B,IAAI,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAA;YAC/D,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAA;QACrG,CAAC,CAAC,CAAA;IAEH,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/protor/actions/fadeOut.js b/Backend/dist/Integrations/buildin/protor/actions/fadeOut.js new file mode 100644 index 0000000..b764a37 --- /dev/null +++ b/Backend/dist/Integrations/buildin/protor/actions/fadeOut.js @@ -0,0 +1,49 @@ +exports.__esModule = true; +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var duration = properties.duration != undefined + ? properties.duration + : 0; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('protor', connectionID); + if (connection && connection.instance != undefined) { + var protor = connection.instance; + protor.fadeOut(duration); + } + else + status('Connection not online', 'error'); + } + else + status('No connection specified', 'error'); + }); + actionAPI.onOpenEditor(function (editorAPI, properties) { + var connectionID = properties.connectionID != undefined + ? properties.connectionID + : 'none'; + var duration = properties.duration != undefined + ? properties.duration + : 0; + var connectionField = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'protor', + value: connectionID + }; + var durationField = { + id: 'duration', + name: 'Duration', + type: 'number', + value: duration + }; + editorAPI.setFields([connectionField, durationField]); + editorAPI.onFieldChanges(function (fields) { + var fieldObject = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: fieldObject.connectionID, duration: fieldObject.duration }); + }); + }); +}; +//# sourceMappingURL=fadeOut.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/protor/actions/fadeOut.js.map b/Backend/dist/Integrations/buildin/protor/actions/fadeOut.js.map new file mode 100644 index 0000000..3666ea0 --- /dev/null +++ b/Backend/dist/Integrations/buildin/protor/actions/fadeOut.js.map @@ -0,0 +1 @@ +{"version":3,"file":"fadeOut.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/protor/actions/fadeOut.ts"],"names":[],"mappings":";AAKA,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAsB,EAAE,MAAM;QAC/C,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QACX,IAAI,QAAQ,GACX,UAAU,CAAC,QAAQ,IAAI,SAAS;YAC/B,CAAC,CAAC,UAAU,CAAC,QAAQ;YACrB,CAAC,CAAC,CAAC,CAAC;QAGN,IAAI,YAAY,IAAI,MAAM,EAAE;YAC3B,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YAEjE,IAAI,UAAU,IAAI,UAAU,CAAC,QAAQ,IAAI,SAAS,EAAE;gBACnD,IAAI,MAAM,GAAW,UAAU,CAAC,QAAQ,CAAC;gBAEzC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;aACxB;;gBAAM,MAAM,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;SAChD;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAAsB;QACnE,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS;YACnC,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QACX,IAAI,QAAQ,GACX,UAAU,CAAC,QAAQ,IAAI,SAAS;YAC/B,CAAC,CAAC,UAAU,CAAC,QAAQ;YACrB,CAAC,CAAC,CAAC,CAAC;QAEN,IAAI,eAAe,GAAoB;YACtC,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,QAAQ;YACxB,KAAK,EAAE,YAAY;SACnB,CAAC;QAEF,IAAI,aAAa,GAAoB;YACpC,EAAE,EAAE,UAAU;YACd,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;SACf,CAAC;QAEF,SAAS,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAAA;QAErD,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM;YAC/B,IAAI,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAA;YAC/D,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAA;QACrG,CAAC,CAAC,CAAA;IAEH,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/protor/integration.js b/Backend/dist/Integrations/buildin/protor/integration.js new file mode 100644 index 0000000..4330c6b --- /dev/null +++ b/Backend/dist/Integrations/buildin/protor/integration.js @@ -0,0 +1,17 @@ +exports.__esModule = true; +module.exports = { + name: 'Protor', + description: 'Control Protor features', + main: require('./protor'), + connections: [ + { + name: 'Protor', + type: 'protor', + fields: [ + { id: 'ip', name: 'IP Address', type: 'text' }, + { id: 'port', name: 'Port', type: 'number', value: 9944 } + ] + } + ] +}; +//# sourceMappingURL=integration.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/protor/integration.js.map b/Backend/dist/Integrations/buildin/protor/integration.js.map new file mode 100644 index 0000000..5567598 --- /dev/null +++ b/Backend/dist/Integrations/buildin/protor/integration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/protor/integration.ts"],"names":[],"mappings":";AAEA,MAAM,CAAC,OAAO,GAAG;IAChB,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,yBAAyB;IACtC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC;IACzB,WAAW,EAAE;QACZ;YACC,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE;gBACP,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE;gBAC9C,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE;aACzD;SACD;KACD;CACc,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/protor/protor.js b/Backend/dist/Integrations/buildin/protor/protor.js new file mode 100644 index 0000000..90ccb88 --- /dev/null +++ b/Backend/dist/Integrations/buildin/protor/protor.js @@ -0,0 +1,18 @@ +exports.__esModule = true; +var ProtorClass_1 = require("./ProtorClass"); +module.exports = function (api) { + api.registerAction('fadeIn', 'Fade in', require('./actions/fadeIn')); + api.registerAction('fadeOut', 'Fade out', require('./actions/fadeOut')); + api.registerConnectionValidator('protor', function (validatorAPI) { + if (validatorAPI.properties.ip != undefined && validatorAPI.properties.port != undefined) { + var protor = new ProtorClass_1.Protor(validatorAPI.properties.ip, validatorAPI.properties.port); + protor.isOnline(function (online) { + validatorAPI.callback(online, online ? null : 'Unable to reach Protor instance'); + validatorAPI.setInstance(protor); + }); + } + else + validatorAPI.callback(false, 'No ip or port specified'); + }); +}; +//# sourceMappingURL=protor.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/protor/protor.js.map b/Backend/dist/Integrations/buildin/protor/protor.js.map new file mode 100644 index 0000000..0cbb069 --- /dev/null +++ b/Backend/dist/Integrations/buildin/protor/protor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"protor.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/protor/protor.ts"],"names":[],"mappings":";AAEA,6CAAuC;AAEvC,MAAM,CAAC,OAAO,GAAG,UAAC,GAAmB;IACpC,GAAG,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACrE,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAExE,GAAG,CAAC,2BAA2B,CAAC,QAAQ,EAAE,UAAC,YAAY;QACtD,IAAI,YAAY,CAAC,UAAU,CAAC,EAAE,IAAI,SAAS,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,IAAI,SAAS,EAAE;YACzF,IAAI,MAAM,GAAG,IAAI,oBAAM,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,EAAE,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YACjF,MAAM,CAAC,QAAQ,CAAC,UAAC,MAAe;gBAC/B,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAA;gBAChF,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;YACjC,CAAC,CAAC,CAAA;SACF;;YAAM,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/focusFar.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/focusFar.js new file mode 100644 index 0000000..05e4ae8 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/focusFar.js @@ -0,0 +1,11 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraFocusFar(); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=focusFar.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/focusFar.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/focusFar.js.map new file mode 100644 index 0000000..3fa8212 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/focusFar.js.map @@ -0,0 +1 @@ +{"version":3,"file":"focusFar.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/focusFar.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,cAAc,EAAE,CAAC;QAC5C,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/focusNear.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/focusNear.js new file mode 100644 index 0000000..e39055d --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/focusNear.js @@ -0,0 +1,11 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraFocusNear(); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=focusNear.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/focusNear.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/focusNear.js.map new file mode 100644 index 0000000..f1daaec --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/focusNear.js.map @@ -0,0 +1 @@ +{"version":3,"file":"focusNear.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/focusNear.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,eAAe,EAAE,CAAC;QAC7C,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/focusStop.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/focusStop.js new file mode 100644 index 0000000..abf2dce --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/focusStop.js @@ -0,0 +1,11 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraFocusStop(); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=focusStop.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/focusStop.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/focusStop.js.map new file mode 100644 index 0000000..ab8a531 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/focusStop.js.map @@ -0,0 +1 @@ +{"version":3,"file":"focusStop.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/focusStop.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,eAAe,EAAE,CAAC;QAC7C,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/gainDown.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/gainDown.js new file mode 100644 index 0000000..073b9ab --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/gainDown.js @@ -0,0 +1,11 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraGainDown(); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=gainDown.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/gainDown.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/gainDown.js.map new file mode 100644 index 0000000..9a55afd --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/gainDown.js.map @@ -0,0 +1 @@ +{"version":3,"file":"gainDown.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/gainDown.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,cAAc,EAAE,CAAC;QAC5C,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/gainReset.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/gainReset.js new file mode 100644 index 0000000..4785fa4 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/gainReset.js @@ -0,0 +1,11 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraGainReset(); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=gainReset.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/gainReset.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/gainReset.js.map new file mode 100644 index 0000000..b472e5f --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/gainReset.js.map @@ -0,0 +1 @@ +{"version":3,"file":"gainReset.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/gainReset.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,eAAe,EAAE,CAAC;QAC7C,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/gainUp.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/gainUp.js new file mode 100644 index 0000000..feae946 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/gainUp.js @@ -0,0 +1,11 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraGainUp(); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=gainUp.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/gainUp.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/gainUp.js.map new file mode 100644 index 0000000..ca03677 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/gainUp.js.map @@ -0,0 +1 @@ +{"version":3,"file":"gainUp.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/gainUp.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,YAAY,EAAE,CAAC;QAC1C,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/home.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/home.js new file mode 100644 index 0000000..5d999fd --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/home.js @@ -0,0 +1,11 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraPanTiltHome(); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=home.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/home.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/home.js.map new file mode 100644 index 0000000..c70df95 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/home.js.map @@ -0,0 +1 @@ +{"version":3,"file":"home.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/home.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,iBAAiB,EAAE,CAAC;QAC/C,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/irisDown.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/irisDown.js new file mode 100644 index 0000000..f2f869c --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/irisDown.js @@ -0,0 +1,11 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraIrisDown(); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=irisDown.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/irisDown.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/irisDown.js.map new file mode 100644 index 0000000..f30ba17 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/irisDown.js.map @@ -0,0 +1 @@ +{"version":3,"file":"irisDown.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/irisDown.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,cAAc,EAAE,CAAC;QAC5C,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/irisReset.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/irisReset.js new file mode 100644 index 0000000..6730de5 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/irisReset.js @@ -0,0 +1,11 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraIrisReset(); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=irisReset.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/irisReset.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/irisReset.js.map new file mode 100644 index 0000000..84af331 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/irisReset.js.map @@ -0,0 +1 @@ +{"version":3,"file":"irisReset.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/irisReset.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,eAAe,EAAE,CAAC;QAC7C,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/irisUp.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/irisUp.js new file mode 100644 index 0000000..2b6b2d8 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/irisUp.js @@ -0,0 +1,11 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraIrisUp(); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=irisUp.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/irisUp.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/irisUp.js.map new file mode 100644 index 0000000..6c52edb --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/irisUp.js.map @@ -0,0 +1 @@ +{"version":3,"file":"irisUp.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/irisUp.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,YAAY,EAAE,CAAC;QAC1C,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/panLeft.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/panLeft.js new file mode 100644 index 0000000..c1105d3 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/panLeft.js @@ -0,0 +1,19 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var connection = actionAPI.getConnection('viscaOverIpCamera', properties.connectionID); + if (connection) { + if (connection.instance != undefined) { + var speed = connection.instance.internal != undefined && connection.instance.internal.pantiltSpeed != undefined + ? connection.instance.internal.pantiltSpeed + : 10; + var command = visca_over_ip_1.ViscaCommand.cameraPanTilt(-1 * speed, 0); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + } + } + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=panLeft.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/panLeft.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/panLeft.js.map new file mode 100644 index 0000000..b1da70a --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/panLeft.js.map @@ -0,0 +1 @@ +{"version":3,"file":"panLeft.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/panLeft.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,mBAAmB,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;QACvF,IAAI,UAAU,EAAE;YACf,IAAI,UAAU,CAAC,QAAQ,IAAI,SAAS,EAAE;gBACrC,IAAI,KAAK,GACR,UAAU,CAAC,QAAQ,CAAC,QAAQ,IAAI,SAAS,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,IAAI,SAAS;oBAClG,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY;oBAC3C,CAAC,CAAC,EAAE,CAAC;gBAEP,IAAI,OAAO,GAAG,4BAAY,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;gBACxD,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;aAC5D;SACD;IACF,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/panRight.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/panRight.js new file mode 100644 index 0000000..9d11f74 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/panRight.js @@ -0,0 +1,19 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var connection = actionAPI.getConnection('viscaOverIpCamera', properties.connectionID); + if (connection) { + if (connection.instance != undefined) { + var speed = connection.instance.internal != undefined && connection.instance.internal.pantiltSpeed != undefined + ? connection.instance.internal.pantiltSpeed + : 10; + var command = visca_over_ip_1.ViscaCommand.cameraPanTilt(1 * speed, 0); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + } + } + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=panRight.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/panRight.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/panRight.js.map new file mode 100644 index 0000000..3ecc11b --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/panRight.js.map @@ -0,0 +1 @@ +{"version":3,"file":"panRight.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/panRight.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,mBAAmB,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;QACvF,IAAI,UAAU,EAAE;YACf,IAAI,UAAU,CAAC,QAAQ,IAAI,SAAS,EAAE;gBACrC,IAAI,KAAK,GACR,UAAU,CAAC,QAAQ,CAAC,QAAQ,IAAI,SAAS,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,IAAI,SAAS;oBAClG,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY;oBAC3C,CAAC,CAAC,EAAE,CAAC;gBAEP,IAAI,OAAO,GAAG,4BAAY,CAAC,aAAa,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;gBACvD,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;aAC5D;SACD;IACF,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/panTiltSpeed.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/panTiltSpeed.js new file mode 100644 index 0000000..2861493 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/panTiltSpeed.js @@ -0,0 +1,37 @@ +exports.__esModule = true; +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var numberValue = properties.number != undefined ? properties.number : 10; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('viscaOverIpCamera', connectionID); + if (connection != undefined && connection.instance != undefined) { + if (connection.instance.internal != undefined) + connection.instance.internal = {}; + connection.instance.internal.pantiltSpeed = numberValue; + status('Speed has been set', 'info'); + } + else + status('Not connected', 'error'); + } + else + status('No connection specified', 'error'); + }); + actionAPI.onOpenEditor(function (EditorAPI, properties) { + var numberField = { + id: 'number', + name: 'Speed', + type: 'select', + value: properties.number != undefined ? properties.number : 1, + values: [] + }; + for (var i = 0; i < 25; i++) { + numberField.values.push({ id: String(i), text: String(i) }); + } + simpleCommandHandler_1.simpleCommandEditor(EditorAPI, properties, [ + numberField + ]); + }); +}; +//# sourceMappingURL=panTiltSpeed.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/panTiltSpeed.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/panTiltSpeed.js.map new file mode 100644 index 0000000..21268cf --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/panTiltSpeed.js.map @@ -0,0 +1 @@ +{"version":3,"file":"panTiltSpeed.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/panTiltSpeed.ts"],"names":[],"mappings":";AAGA,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3F,IAAI,WAAW,GAAG,UAAU,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAE1E,IAAI,YAAY,IAAI,MAAM,EAAE;YAC3B,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;YAC5E,IAAI,UAAU,IAAI,SAAS,IAAI,UAAU,CAAC,QAAQ,IAAI,SAAS,EAAE;gBAChE,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,IAAI,SAAS;oBAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,GAAG,EAAE,CAAC;gBAEjF,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,GAAG,WAAW,CAAC;gBACxD,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;aACrC;;gBAAM,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;SACxC;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,UAAC,SAAS,EAAE,UAAU;QAC5C,IAAI,WAAW,GAAoB;YAClC,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,UAAU,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7D,MAAM,EAAE,EAAE;SACV,CAAC;QACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YAC5B,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAC5D;QACD,0CAAmB,CAAC,SAAS,EAAE,UAAU,EAAE;YAC1C,WAAW;SACX,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/panTiltStop.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/panTiltStop.js new file mode 100644 index 0000000..88c9710 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/panTiltStop.js @@ -0,0 +1,11 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraPanTilt(0, 0, 0x03, 0x03); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=panTiltStop.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/panTiltStop.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/panTiltStop.js.map new file mode 100644 index 0000000..6b6f7d8 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/panTiltStop.js.map @@ -0,0 +1 @@ +{"version":3,"file":"panTiltStop.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/panTiltStop.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE3D,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/presetRecall.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/presetRecall.js new file mode 100644 index 0000000..ec32962 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/presetRecall.js @@ -0,0 +1,20 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraPresetRecall(properties.number); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(function (EditorAPI, properties) { + return simpleCommandHandler_1.simpleCommandEditor(EditorAPI, properties, [ + { + id: 'number', + name: 'Preset Index', + type: 'number', + value: properties.number != undefined ? properties.number : 1 + } + ]); + }); +}; +//# sourceMappingURL=presetRecall.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/presetRecall.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/presetRecall.js.map new file mode 100644 index 0000000..b8f8c51 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/presetRecall.js.map @@ -0,0 +1 @@ +{"version":3,"file":"presetRecall.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/presetRecall.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAG7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACjE,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,UAAC,SAAS,EAAE,UAAU;QAC5C,OAAA,0CAAmB,CAAC,SAAS,EAAE,UAAU,EAAE;YAC1C;gBACC,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,UAAU,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aAC7D;SACD,CAAC;IAPF,CAOE,CACF,CAAC;AACH,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/presetReset.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/presetReset.js new file mode 100644 index 0000000..ae2fd00 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/presetReset.js @@ -0,0 +1,20 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraPresetReset(properties.number); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(function (EditorAPI, properties) { + return simpleCommandHandler_1.simpleCommandEditor(EditorAPI, properties, [ + { + id: 'number', + name: 'Preset Index', + type: 'number', + value: properties.number != undefined ? properties.number : 1 + } + ]); + }); +}; +//# sourceMappingURL=presetReset.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/presetReset.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/presetReset.js.map new file mode 100644 index 0000000..38e0f58 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/presetReset.js.map @@ -0,0 +1 @@ +{"version":3,"file":"presetReset.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/presetReset.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAG7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChE,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,UAAC,SAAS,EAAE,UAAU;QAC5C,OAAA,0CAAmB,CAAC,SAAS,EAAE,UAAU,EAAE;YAC1C;gBACC,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,UAAU,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aAC7D;SACD,CAAC;IAPF,CAOE,CACF,CAAC;AACH,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/presetSet.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/presetSet.js new file mode 100644 index 0000000..3a8b7eb --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/presetSet.js @@ -0,0 +1,20 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraPresetSet(properties.number); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(function (EditorAPI, properties) { + simpleCommandHandler_1.simpleCommandEditor(EditorAPI, properties, [ + { + id: 'number', + name: 'Preset Index', + type: 'number', + value: properties.number != undefined ? properties.number : 1 + } + ]); + }); +}; +//# sourceMappingURL=presetSet.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/presetSet.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/presetSet.js.map new file mode 100644 index 0000000..7c37fd8 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/presetSet.js.map @@ -0,0 +1 @@ +{"version":3,"file":"presetSet.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/presetSet.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAG7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC9D,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,UAAC,SAAS,EAAE,UAAU;QAC5C,0CAAmB,CAAC,SAAS,EAAE,UAAU,EAAE;YAC1C;gBACC,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,UAAU,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aAC7D;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/reset.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/reset.js new file mode 100644 index 0000000..9ebeca6 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/reset.js @@ -0,0 +1,11 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraPanTiltReset(); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=reset.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/reset.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/reset.js.map new file mode 100644 index 0000000..9c54b70 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/reset.js.map @@ -0,0 +1 @@ +{"version":3,"file":"reset.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/reset.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,kBAAkB,EAAE,CAAC;QAChD,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/shutterDown.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/shutterDown.js new file mode 100644 index 0000000..22506ac --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/shutterDown.js @@ -0,0 +1,11 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraShutterDown(); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=shutterDown.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/shutterDown.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/shutterDown.js.map new file mode 100644 index 0000000..ee560db --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/shutterDown.js.map @@ -0,0 +1 @@ +{"version":3,"file":"shutterDown.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/shutterDown.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,iBAAiB,EAAE,CAAC;QAC/C,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/shutterReset.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/shutterReset.js new file mode 100644 index 0000000..41fc331 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/shutterReset.js @@ -0,0 +1,11 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraShutterReset(); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=shutterReset.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/shutterReset.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/shutterReset.js.map new file mode 100644 index 0000000..e2ec32d --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/shutterReset.js.map @@ -0,0 +1 @@ +{"version":3,"file":"shutterReset.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/shutterReset.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,kBAAkB,EAAE,CAAC;QAChD,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/shutterUp.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/shutterUp.js new file mode 100644 index 0000000..d42a1f4 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/shutterUp.js @@ -0,0 +1,11 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraShutterUp(); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=shutterUp.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/shutterUp.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/shutterUp.js.map new file mode 100644 index 0000000..e208011 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/shutterUp.js.map @@ -0,0 +1 @@ +{"version":3,"file":"shutterUp.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/shutterUp.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,eAAe,EAAE,CAAC;QAC7C,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/tiltDown.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/tiltDown.js new file mode 100644 index 0000000..acab055 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/tiltDown.js @@ -0,0 +1,19 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var connection = actionAPI.getConnection('viscaOverIpCamera', properties.connectionID); + if (connection) { + if (connection.instance != undefined) { + var speed = connection.instance.internal != undefined && connection.instance.internal.pantiltSpeed != undefined + ? connection.instance.internal.pantiltSpeed + : 10; + var command = visca_over_ip_1.ViscaCommand.cameraPanTilt(0, 1 * speed); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + } + } + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=tiltDown.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/tiltDown.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/tiltDown.js.map new file mode 100644 index 0000000..3647599 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/tiltDown.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tiltDown.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/tiltDown.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,mBAAmB,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;QACvF,IAAI,UAAU,EAAE;YACf,IAAI,UAAU,CAAC,QAAQ,IAAI,SAAS,EAAE;gBACrC,IAAI,KAAK,GACR,UAAU,CAAC,QAAQ,CAAC,QAAQ,IAAI,SAAS,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,IAAI,SAAS;oBAClG,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY;oBAC3C,CAAC,CAAC,EAAE,CAAC;gBAEP,IAAI,OAAO,GAAG,4BAAY,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;gBACvD,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;aAC5D;SACD;IACF,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/tiltUp.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/tiltUp.js new file mode 100644 index 0000000..bb66c05 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/tiltUp.js @@ -0,0 +1,20 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var connection = actionAPI.getConnection('viscaOverIpCamera', properties.connectionID); + if (connection) { + if (connection.instance != undefined) { + var speed = connection.instance.internal != undefined && connection.instance.internal.pantiltSpeed != undefined + ? connection.instance.internal.pantiltSpeed + : 10; + var command = visca_over_ip_1.ViscaCommand.cameraPanTilt(0, -1 * speed); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + } + } + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +0; +//# sourceMappingURL=tiltUp.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/tiltUp.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/tiltUp.js.map new file mode 100644 index 0000000..23c90fc --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/tiltUp.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tiltUp.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/tiltUp.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,mBAAmB,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;QACvF,IAAI,UAAU,EAAE;YACf,IAAI,UAAU,CAAC,QAAQ,IAAI,SAAS,EAAE;gBACrC,IAAI,KAAK,GACR,UAAU,CAAC,QAAQ,CAAC,QAAQ,IAAI,SAAS,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,IAAI,SAAS;oBAClG,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY;oBAC3C,CAAC,CAAC,EAAE,CAAC;gBAEP,IAAI,OAAO,GAAG,4BAAY,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;gBACxD,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;aAC5D;SACD;IACF,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC;AACF,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/zoomIn.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/zoomIn.js new file mode 100644 index 0000000..651cb5b --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/zoomIn.js @@ -0,0 +1,11 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraZoomIn(); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=zoomIn.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/zoomIn.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/zoomIn.js.map new file mode 100644 index 0000000..bfc219c --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/zoomIn.js.map @@ -0,0 +1 @@ +{"version":3,"file":"zoomIn.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/zoomIn.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,YAAY,EAAE,CAAC;QAC1C,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/zoomOut.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/zoomOut.js new file mode 100644 index 0000000..3c17e29 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/zoomOut.js @@ -0,0 +1,11 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraZoomOut(); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=zoomOut.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/zoomOut.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/zoomOut.js.map new file mode 100644 index 0000000..e93b906 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/zoomOut.js.map @@ -0,0 +1 @@ +{"version":3,"file":"zoomOut.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/zoomOut.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,aAAa,EAAE,CAAC;QAC3C,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/zoomStop.js b/Backend/dist/Integrations/buildin/viscaOverIP/actions/zoomStop.js new file mode 100644 index 0000000..8afa31e --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/zoomStop.js @@ -0,0 +1,11 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +var simpleCommandHandler_1 = require("../simpleCommandHandler"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var command = visca_over_ip_1.ViscaCommand.cameraZoomStop(); + simpleCommandHandler_1.simpleCommandHandle(actionAPI, command, properties, status); + }); + actionAPI.onOpenEditor(simpleCommandHandler_1.simpleCommandEditor); +}; +//# sourceMappingURL=zoomStop.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/actions/zoomStop.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/actions/zoomStop.js.map new file mode 100644 index 0000000..b905252 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/actions/zoomStop.js.map @@ -0,0 +1 @@ +{"version":3,"file":"zoomStop.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/viscaOverIP/actions/zoomStop.ts"],"names":[],"mappings":";AAAA,+CAA6C;AAE7C,gEAAmF;AAEnF,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAU,EAAE,MAA2D;QACxF,IAAI,OAAO,GAAG,4BAAY,CAAC,cAAc,EAAE,CAAC;QAC5C,0CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,0CAAmB,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/integration.js b/Backend/dist/Integrations/buildin/viscaOverIP/integration.js new file mode 100644 index 0000000..1c8cb5f --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/integration.js @@ -0,0 +1,18 @@ +exports.__esModule = true; +var Integration = { + name: 'Visca over IP', + description: 'Control PTZ cameras', + main: require('./viscaOverIP'), + connections: [ + { + type: 'viscaOverIpCamera', + name: 'Camera', + fields: [ + { id: 'ip', name: 'IP Address', type: 'text', value: '0.0.0.0' }, + { id: 'port', name: 'Visca Port', type: 'number', value: '52381' } + ] + } + ] +}; +module.exports = Integration; +//# sourceMappingURL=integration.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/integration.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/integration.js.map new file mode 100644 index 0000000..537de12 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/integration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/viscaOverIP/integration.ts"],"names":[],"mappings":";AAEA,IAAI,WAAW,GAAgB;IAC9B,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,qBAAqB;IAClC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC;IAE9B,WAAW,EAAE;QACZ;YACC,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE;gBACP,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;gBAChE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE;aAClE;SACD;KACD;CACD,CAAC;AAEF,MAAM,CAAC,OAAO,GAAG,WAAW,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/simpleCommandHandler.js b/Backend/dist/Integrations/buildin/viscaOverIP/simpleCommandHandler.js new file mode 100644 index 0000000..a6206fa --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/simpleCommandHandler.js @@ -0,0 +1,53 @@ +var __spreadArray = (this && this.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +exports.__esModule = true; +exports.simpleCommandEditor = exports.simpleCommandHandle = void 0; +function simpleCommandHandle(actionAPI, command, properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('viscaOverIpCamera', connectionID); + if (connection.instance != undefined) { + var camera = connection.instance.camera; + status('Sending command', 'info'); + command.on('ack', function () { + // status('Command acknowledged', 'info'); + }); + command.on('complete', function () { + status('Command complete', 'info'); + }); + command.on('error', function (error) { + status("Command error: " + error.message, 'info'); + }); + camera.sendCommand(command); + } + } + else + status('No connection specified', 'error'); +} +exports.simpleCommandHandle = simpleCommandHandle; +function simpleCommandEditor(editorAPI, properties, additionalFields) { + if (additionalFields === void 0) { additionalFields = []; } + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var connectionField = { + id: 'connectionID', + name: 'Connection', + type: 'connection', + connectionType: 'viscaOverIpCamera', + value: connectionID + }; + editorAPI.onFieldChanges(function (fields) { + var fieldObject = editorAPI.tools.objectifyFieldsValues(fields); + var saveObject = { connectionID: fieldObject.connectionID }; + for (var i = 0; i < additionalFields.length; i++) + saveObject[additionalFields[i].id] = fieldObject[additionalFields[i].id]; + editorAPI.saveProperties(saveObject); + }); + editorAPI.setFields(__spreadArray([ + connectionField + ], additionalFields)); +} +exports.simpleCommandEditor = simpleCommandEditor; +//# sourceMappingURL=simpleCommandHandler.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/simpleCommandHandler.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/simpleCommandHandler.js.map new file mode 100644 index 0000000..797fe02 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/simpleCommandHandler.js.map @@ -0,0 +1 @@ +{"version":3,"file":"simpleCommandHandler.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/viscaOverIP/simpleCommandHandler.ts"],"names":[],"mappings":";;;;;;;AAIA,SAAgB,mBAAmB,CAClC,SAAoB,EACpB,OAAqB,EACrB,UAAsB,EACtB,MAA2D;IAE3D,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3F,IAAI,YAAY,IAAI,MAAM,EAAE;QAC3B,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;QAE5E,IAAI,UAAU,CAAC,QAAQ,IAAI,SAAS,EAAE;YACrC,IAAI,MAAM,GAAgB,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrD,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;YAElC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;gBACjB,0CAA0C;YAC3C,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE;gBACtB,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,KAAY;gBAChC,MAAM,CAAC,oBAAkB,KAAK,CAAC,OAAS,EAAE,MAAM,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SAC5B;KACD;;QAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AA1BD,kDA0BC;AAED,SAAgB,mBAAmB,CAClC,SAAoB,EACpB,UAAsB,EACtB,gBAAwC;IAAxC,iCAAA,EAAA,qBAAwC;IAExC,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3F,IAAI,eAAe,GAAoB;QACtC,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,YAAY;QAClB,cAAc,EAAE,mBAAmB;QACnC,KAAK,EAAE,YAAY;KACnB,CAAC;IAEF,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM;QAC/B,IAAI,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAEhE,IAAI,UAAU,GAAG,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC;QAE5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE;YAC/C,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAE1E,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,SAAS;QAClB,eAAe;OACZ,gBAAgB,EAClB,CAAC;AACJ,CAAC;AA7BD,kDA6BC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/viscaOverIP.js b/Backend/dist/Integrations/buildin/viscaOverIP/viscaOverIP.js new file mode 100644 index 0000000..08f114b --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/viscaOverIP.js @@ -0,0 +1,64 @@ +exports.__esModule = true; +var visca_over_ip_1 = require("visca-over-ip"); +module.exports = function (api) { + //Register a action + api.registerAction('home', 'Go to home position', require('./actions/home')); + api.registerAction('reset', 'Reset/Calibrate', require('./actions/reset')); + api.registerAction('gainDown', 'Gain down', require('./actions/gainDown')); + api.registerAction('gainUp', 'Gain up', require('./actions/gainUp')); + api.registerAction('gainReset', 'Gain reset', require('./actions/gainReset')); + api.registerAction('irisDown', 'Iris down', require('./actions/irisDown')); + api.registerAction('irisUp', 'Iris up', require('./actions/irisUp')); + api.registerAction('irisReset', 'Iris reset', require('./actions/irisReset')); + api.registerAction('shutterDown', 'Shutter down', require('./actions/shutterDown')); + api.registerAction('shutterUp', 'Shutter up', require('./actions/shutterUp')); + api.registerAction('shutterReset', 'Shutter reset', require('./actions/shutterReset')); + api.registerAction('zoomIn', 'Zoom in', require('./actions/zoomIn')); + api.registerAction('zoomOut', 'Zoom out', require('./actions/zoomOut')); + api.registerAction('zoomStop', 'Zoom stop', require('./actions/zoomStop')); + api.registerAction('presetRecall', 'Recall preset', require('./actions/presetRecall')); + api.registerAction('presetSet', 'Set preset', require('./actions/presetSet')); + api.registerAction('presetReset', 'Reset preset', require('./actions/presetReset')); + api.registerAction('panLeft', 'Pan left', require('./actions/panLeft')); + api.registerAction('panRight', 'Pan right', require('./actions/panRight')); + api.registerAction('tiltUp', 'Tilt up', require('./actions/tiltUp')); + api.registerAction('tiltDown', 'Tilt down', require('./actions/tiltDown')); + api.registerAction('panTiltStop', 'Stop pan/tilt', require('./actions/panTiltStop')); + api.registerAction('panTiltSpeed', 'Set pan/tilt speed', require('./actions/panTiltSpeed')); + api.registerAction('focusFar', 'Focus far', require('./actions/focusFar')); + api.registerAction('focusNear', 'Focus near', require('./actions/focusNear')); + api.registerAction('focusStop', 'Focus stop', require('./actions/focusStop')); + api.registerConnectionValidator('viscaOverIpCamera', function (ValidatorAPI) { + if (ValidatorAPI.properties.ip != undefined) { + if (ValidatorAPI.properties.port != undefined) { + var camera = new visca_over_ip_1.ViscaCamera(ValidatorAPI.properties.ip, ValidatorAPI.properties.port); + camera.on('error', console.log); + camera.on('connected', function () { + var canRespond = true; + var responseTimeout; + setTimeout(function () { + var command = visca_over_ip_1.ViscaCommand.cameraPanTilt(0, 0); + command.on('ack', function () { + if (canRespond == true) { + canRespond = false; + ValidatorAPI.callback(true); + ValidatorAPI.setInstance({ internal: { pantiltSpeed: 10 }, camera: camera }); + clearTimeout(responseTimeout); + } + }); + responseTimeout = setTimeout(function () { + canRespond = false; + ValidatorAPI.callback(false, 'Timeout reached'); + }, 10000); + camera.sendCommand(command); + }, 1000); + }); + camera.on('error', function (error) { + ValidatorAPI.callback(false, 'Unable to reach camera'); + console.log(error); + }); + } + } + }); +}; +//# sourceMappingURL=viscaOverIP.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/viscaOverIP/viscaOverIP.js.map b/Backend/dist/Integrations/buildin/viscaOverIP/viscaOverIP.js.map new file mode 100644 index 0000000..36e8a63 --- /dev/null +++ b/Backend/dist/Integrations/buildin/viscaOverIP/viscaOverIP.js.map @@ -0,0 +1 @@ +{"version":3,"file":"viscaOverIP.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/viscaOverIP/viscaOverIP.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/WirecastConnection.js b/Backend/dist/Integrations/buildin/wirecast/WirecastConnection.js new file mode 100644 index 0000000..a22fbea --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/WirecastConnection.js @@ -0,0 +1,275 @@ +exports.__esModule = true; +exports.WirecastConnection = void 0; +var axios_1 = require("axios"); +var WirecastConnection = /** @class */ (function () { + function WirecastConnection() { + var _this = this; + this.shots = { + '1': { shots: {} }, + '2': { shots: {} }, + '3': { shots: {} }, + '4': { shots: {} }, + '5': { shots: {} } + }; + this.layers = { + '1': { id: null, name: null }, + '2': { id: null, name: null }, + '3': { id: null, name: null }, + '4': { id: null, name: null }, + '5': { id: null, name: null } + }; + this.clockInterval = setInterval(function () { + _this.clock(); + }, 30000); + } + WirecastConnection.prototype.destroy = function () { + clearInterval(this.clockInterval); + }; + WirecastConnection.prototype.clock = function () { + this.update(); + }; + WirecastConnection.prototype.update = function () { + if (this.ip != undefined && this.port != undefined) { + // axios + // .get(`http://${this.ip}:${this.port}/api/v2/shots/get`) + // .then((response) => { + // if (response.data != undefined && response.data.succeed == true) { + // this.shots = response.data.shots; + // } + // }) + // .catch(() => {}); + // axios + // .get(`http://${this.ip}:${this.port}/api/v2/layers/get`) + // .then((response) => { + // if (response.data != undefined && response.data.succeed == true) { + // this.layers = response.data.layers; + // } + // }) + // .catch(() => {}); + } + }; + WirecastConnection.prototype.setHost = function (ip, port) { + this.ip = ip; + this.port = port; + this.update(); + }; + WirecastConnection.prototype.ping = function (callback) { + var _this = this; + return new Promise(function (resolve, reject) { + axios_1["default"] + .get("http://" + _this.ip + ":" + _this.port + "/api/v2/ping") + .then(function () { + if (callback) + callback(true); + if (callback == undefined) + resolve(); + })["catch"](function (error) { + if (callback) + callback(false); + if (callback == undefined) + reject(); + }); + }); + }; + WirecastConnection.prototype.setShotLiveByID = function (shotID) { + var _this = this; + return new Promise(function (resolve, reject) { + axios_1["default"] + .get("http://" + _this.ip + ":" + _this.port + "/api/v2/shots/liveByID/" + shotID) + .then(function (response) { + if (response.data.succeed == true) + resolve(); + else + reject(); + })["catch"](function (error) { + console.log(error); + reject(); + }); + }); + }; + WirecastConnection.prototype.clearShotIfLive = function (shotID) { + var _this = this; + return new Promise(function (resolve, reject) { + axios_1["default"] + .get("http://" + _this.ip + ":" + _this.port + "/api/v2/shots/clearIfLive/" + shotID) + .then(function (response) { + if (response.data.succeed == true) + resolve(); + else + reject(); + })["catch"](function (error) { + console.log(error); + reject(); + }); + }); + }; + WirecastConnection.prototype.clearLayer = function (layerID) { + var _this = this; + return new Promise(function (resolve, reject) { + axios_1["default"] + .get("http://" + _this.ip + ":" + _this.port + "/api/v2/layers/clear/" + layerID) + .then(function (response) { + if (response.data.succeed == true) + resolve(); + else + reject(); + })["catch"](function (error) { + console.log(error); + reject(); + }); + }); + }; + WirecastConnection.prototype.go = function () { + var _this = this; + return new Promise(function (resolve, reject) { + console.log("http://" + _this.ip + ":" + _this.port + "/api/v2/document/go"); + axios_1["default"] + .get("http://" + _this.ip + ":" + _this.port + "/api/v2/document/go") + .then(function (response) { + if (response.data.succeed == true) + resolve(); + else + reject(); + })["catch"](function (error) { + console.log(error); + reject(); + }); + }); + }; + WirecastConnection.prototype.multiShot = function (layer1Shot, layer2Shot, layer3Shot, layer4Shot, layer5Shot) { + var _this = this; + return new Promise(function (resolve, reject) { + axios_1["default"] + .get("http://" + _this.ip + ":" + _this + .port + "/api/v2/shots/multi/" + layer1Shot + "/" + layer2Shot + "/" + layer3Shot + "/" + layer4Shot + "/" + layer5Shot) + .then(function (response) { + if (response.data.succeed == true) + resolve(response.data); + else + reject(response.data); + })["catch"](function (error) { + console.log(error); + reject({ succeed: false, error: 'Unable to reach Wirecast-Bridge' }); + }); + }); + }; + WirecastConnection.prototype.setBroadcasting = function (state) { + var _this = this; + return new Promise(function (resolve, reject) { + axios_1["default"] + .get("http://" + _this.ip + ":" + _this.port + "/api/v2/document/broadcasting/" + state) + .then(function (response) { + if (response.data.succeed == true) + resolve(); + else + reject(); + })["catch"](function (error) { + console.log(error); + reject('Unable to reach Wirecast-Bridge'); + }); + }); + }; + WirecastConnection.prototype.setRecording = function (state) { + var _this = this; + return new Promise(function (resolve, reject) { + axios_1["default"] + .get("http://" + _this.ip + ":" + _this.port + "/api/v2/document/recording/" + state) + .then(function (response) { + if (response.data.succeed == true) + resolve(); + else + reject(); + })["catch"](function (error) { + console.log(error); + reject('Unable to reach Wirecast-Bridge'); + }); + }); + }; + WirecastConnection.prototype.setAutoLive = function (state) { + var _this = this; + return new Promise(function (resolve, reject) { + axios_1["default"] + .get("http://" + _this.ip + ":" + _this.port + "/api/v2/document/autolive/" + state) + .then(function (response) { + if (response.data.succeed == true) + resolve(); + else + reject(); + })["catch"](function (error) { + console.log(error); + reject('Unable to reach Wirecast-Bridge'); + }); + }); + }; + WirecastConnection.prototype.setTransitionSpeed = function (speed) { + var _this = this; + return new Promise(function (resolve, reject) { + axios_1["default"] + .get("http://" + _this.ip + ":" + _this.port + "/api/v2/document/transitionspeed/" + speed) + .then(function (response) { + if (response.data.succeed == true) + resolve(); + else + reject(); + })["catch"](function (error) { + console.log(error); + reject('Unable to reach Wirecast-Bridge'); + }); + }); + }; + WirecastConnection.prototype.getShots = function (callback) { + var _this = this; + if (this.ip != undefined && this.port != undefined) { + axios_1["default"] + .get("http://" + this.ip + ":" + this.port + "/api/v2/shots/get") + .then(function (response) { + if (response.data != undefined && response.data.succeed == true) { + _this.shots = response.data.shots; + callback(_this.shots); + } + })["catch"](function () { }); + } + }; + WirecastConnection.prototype.getShotsList = function (layerIndex, callback) { + var _this = this; + this.getShots(function () { + var list = []; + if (layerIndex == undefined) + for (var layer in _this.shots) { + for (var shot in _this.shots[layer].shots) { + list.push(_this.shots[layer].shots[shot]); + } + } + else { + for (var shot in _this.shots[layerIndex].shots) { + list.push(_this.shots[layerIndex].shots[shot]); + } + } + callback(list); + }); + }; + WirecastConnection.prototype.getLayers = function (callback) { + var _this = this; + axios_1["default"] + .get("http://" + this.ip + ":" + this.port + "/api/v2/layers/get") + .then(function (response) { + if (response.data != undefined && response.data.succeed == true) { + _this.layers = response.data.layers; + callback(_this.layers); + } + })["catch"](function () { }); + }; + WirecastConnection.prototype.getLayersList = function (callback) { + var _this = this; + this.getLayers(function () { + var list = []; + for (var layer in _this.layers) { + list.push(_this.layers[layer]); + } + callback(list); + }); + }; + return WirecastConnection; +}()); +exports.WirecastConnection = WirecastConnection; +//# sourceMappingURL=WirecastConnection.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/WirecastConnection.js.map b/Backend/dist/Integrations/buildin/wirecast/WirecastConnection.js.map new file mode 100644 index 0000000..3106c1a --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/WirecastConnection.js.map @@ -0,0 +1 @@ +{"version":3,"file":"WirecastConnection.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/wirecast/WirecastConnection.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/actions/clearIfLive.js b/Backend/dist/Integrations/buildin/wirecast/actions/clearIfLive.js new file mode 100644 index 0000000..84fab60 --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/actions/clearIfLive.js @@ -0,0 +1,134 @@ +exports.__esModule = true; +module.exports = function (ActionAPI) { + ActionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var shotID = properties.shotID != undefined && properties.shotID.length > 0 ? properties.shotID : 'none'; + if (connectionID != 'none') { + if (shotID != 'none') { + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + if (connection && connection.instance) { + connection.instance + .clearShotIfLive(shotID) + .then(function () { + status('Shot has been clear if live', 'info'); + })["catch"](function (error) { + status(error, 'error'); + }); + } + } + else + status('No shot specified', 'error'); + } + else + status('No connection specified', 'error'); + }); + function filterValues(values) { + var newValues = [ + { id: 'none', text: 'None' } + ]; + for (var i = 0; i < values.length; i++) + if (values[i].text != 'Clear Layer') + newValues.push(values[i]); + return newValues; + } + ActionAPI.onOpenEditor(function (EditorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var shotID = properties.shotID != undefined ? properties.shotID : 'none'; + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + var connectionField = { + id: 'connectionID', + name: 'Connection', + type: 'connection', + connectionType: 'wirecast-bridge', + value: connectionID + }; + var shotsField = { + id: 'shotID', + name: 'Shot', + type: 'select', + values: [], + value: shotID + }; + if (connectionID != 'none') + shotsField.values = [ + { id: '%loading%', text: 'Please wait for shots dropdown to load' } + ]; + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var shotID = properties.shotID != undefined ? properties.shotID : 'none'; + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + var connectionField = { + id: 'connectionID', + name: 'Connection', + type: 'connection', + connectionType: 'wirecast-bridge', + value: connectionID + }; + var shotsField = { + id: 'shotID', + name: 'Shot', + type: 'select', + values: [], + value: shotID + }; + if (connectionID != 'none') { + shotsField.values = [ + { id: '%loading%', text: 'Please wait for shots dropdown to load' } + ]; + } + var sendFields = function () { + shotsField.value = shotID; + EditorAPI.setFields([ + connectionField, + shotsField + ]); + }; + if (connection != undefined && connection.instance != undefined) { + connection.instance.getShotsList(null, function (shots) { + shotsField.values = filterValues(shots.map(function (shot) { + return { id: shot.id, text: shot.name }; + })); + sendFields(); + }); + } + else + sendFields(); + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + connectionField.value = fieldObject.connectionID; + shotsField.value = fieldObject.shotID; + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID, shotID: fieldObject.shotID }); + if (connectionID != fieldObject.connectionID) { + connectionID = fieldObject.connectionID; + if (fieldObject.connectionID != 'none') { + shotsField.values = [ + { id: '%loading%', text: 'Please wait for shots dropdown to load' } + ]; + EditorAPI.setFields([ + connectionField, + shotsField + ]); + connection = ActionAPI.getConnection('wirecast-bridge', fieldObject.connectionID); + if (connection && connection.instance) { + connection.instance.getShotsList(null, function (shots) { + shotsField.values = filterValues(shots.map(function (shot) { + return { id: shot.id, text: shot.name }; + })); + sendFields(); + }); + } + } + else { + shotsField.values = []; + sendFields(); + } + } + }); + var sendFields = function () { + EditorAPI.setFields([ + connectionField, + shotsField + ]); + }; + }); +}; +//# sourceMappingURL=clearIfLive.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/actions/clearIfLive.js.map b/Backend/dist/Integrations/buildin/wirecast/actions/clearIfLive.js.map new file mode 100644 index 0000000..e9dbbc7 --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/actions/clearIfLive.js.map @@ -0,0 +1 @@ +{"version":3,"file":"clearIfLive.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/wirecast/actions/clearIfLive.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/actions/clearLayer.js b/Backend/dist/Integrations/buildin/wirecast/actions/clearLayer.js new file mode 100644 index 0000000..ddc8378 --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/actions/clearLayer.js @@ -0,0 +1,96 @@ +exports.__esModule = true; +module.exports = function (ActionAPI) { + ActionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var layerID = properties.layerID != undefined && properties.layerID.length > 0 ? properties.layerID : 'none'; + if (connectionID != 'none' && connectionID.length > 0) { + if (layerID != 'none' && layerID.length > 0) { + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + if (connection && connection.instance) { + connection.instance + .clearLayer(layerID) + .then(function () { + status('Shot has been published', 'info'); + })["catch"](function (error) { + status(error, 'error'); + }); + } + } + else + status('No layer specified', 'error'); + } + else + status('No connection specified', 'error'); + }); + function filterValues(values) { + var newValues = [ + { id: 'none', text: 'None' } + ]; + for (var i = 0; i < values.length; i++) + if (values[i].text != 'Clear Layer') + newValues.push(values[i]); + return newValues; + } + ActionAPI.onOpenEditor(function (EditorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var layerID = properties.layerID != undefined ? properties.layerID : 'none'; + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + var connectionField = { + id: 'connectionID', + name: 'Connection', + type: 'connection', + connectionType: 'wirecast-bridge', + value: connectionID + }; + var layerField = { + id: 'layerID', + name: 'Layer', + type: 'select', + values: [], + value: layerID + }; + var setFields = function () { + EditorAPI.setFields([ + connectionField, + layerField + ]); + }; + if (connection != undefined && connection.instance != undefined) { + connection.instance.getLayersList(function (layers) { + layerField.values = filterValues(layers.map(function (layer) { + return { id: layer.id, text: layer.name }; + })); + setFields(); + }); + } + else + setFields(); + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + connectionField.value = fieldObject.connectionID; + layerField.value = fieldObject.layerID; + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID, layerID: fieldObject.layerID }); + if (connectionID != fieldObject.connectionID) { + if (fieldObject.connectionID != 'none') { + connection = ActionAPI.getConnection('wirecast-bridge', fieldObject.connectionID); + if (connection != undefined && connection.instance != undefined) { + connection.instance.getLayersList(function (layers) { + layerField.values = filterValues(layers.map(function (layer) { + return { id: layer.id, text: layer.name }; + })); + setFields(); + }); + } + else + setFields(); + } + else { + layerField.values = []; + connectionID = 'none'; + setFields(); + } + } + }); + }); +}; +//# sourceMappingURL=clearLayer.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/actions/clearLayer.js.map b/Backend/dist/Integrations/buildin/wirecast/actions/clearLayer.js.map new file mode 100644 index 0000000..7012ba7 --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/actions/clearLayer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"clearLayer.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/wirecast/actions/clearLayer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/actions/go.js b/Backend/dist/Integrations/buildin/wirecast/actions/go.js new file mode 100644 index 0000000..f7c504b --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/actions/go.js @@ -0,0 +1,38 @@ +exports.__esModule = true; +module.exports = function (ActionAPI) { + ActionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + if (connectionID != 'none' && connectionID.length > 0) { + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + if (connection && connection.instance) { + connection.instance + .go() + .then(function () { + status('Go!', 'info'); + })["catch"](function (error) { + status(error, 'error'); + }); + } + } + else + status('No connection specified', 'error'); + }); + ActionAPI.onOpenEditor(function (EditorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var connectionField = { + id: 'connectionID', + name: 'Connection', + type: 'connection', + connectionType: 'wirecast-bridge', + value: connectionID + }; + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID }); + }); + EditorAPI.setFields([ + connectionField + ]); + }); +}; +//# sourceMappingURL=go.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/actions/go.js.map b/Backend/dist/Integrations/buildin/wirecast/actions/go.js.map new file mode 100644 index 0000000..3ce71eb --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/actions/go.js.map @@ -0,0 +1 @@ +{"version":3,"file":"go.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/wirecast/actions/go.ts"],"names":[],"mappings":";AAGA,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAAsB,EAAE,MAAM;QAC/C,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;QAE3F,IAAI,YAAY,IAAI,MAAM,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YACtD,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;YAC1E,IAAI,UAAU,IAAI,UAAU,CAAC,QAAQ,EAAE;gBACtC,UAAU,CAAC,QAAQ;qBACjB,EAAE,EAAE;qBACJ,IAAI,CAAC;oBACL,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBACvB,CAAC,CAAC,CACD,OAAK,CAAA,CAAC,UAAC,KAAK;oBACZ,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACxB,CAAC,CAAC,CAAC;aACJ;SACD;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAAsB;QACnE,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;QAE3F,IAAI,eAAe,GAAoB;YACtC,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,iBAAiB;YACjC,KAAK,EAAE,YAAY;SACnB,CAAC;QAEF,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM;YAC/B,IAAI,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAEhE,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,SAAS,CAAC;YACnB,eAAe;SACf,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/actions/multiShot.js b/Backend/dist/Integrations/buildin/wirecast/actions/multiShot.js new file mode 100644 index 0000000..42619f8 --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/actions/multiShot.js @@ -0,0 +1,121 @@ +exports.__esModule = true; +module.exports = function (ActionAPI) { + ActionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var layer1 = properties.layer1 != undefined && properties.layer1.length > 0 ? properties.layer1 : 'ignore'; + var layer2 = properties.layer2 != undefined && properties.layer2.length > 0 ? properties.layer2 : 'ignore'; + var layer3 = properties.layer3 != undefined && properties.layer3.length > 0 ? properties.layer3 : 'ignore'; + var layer4 = properties.layer4 != undefined && properties.layer4.length > 0 ? properties.layer4 : 'ignore'; + var layer5 = properties.layer5 != undefined && properties.layer5.length > 0 ? properties.layer5 : 'ignore'; + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + if (connection && connection.instance) { + connection.instance + .multiShot(layer1, layer2, layer3, layer4, layer5) + .then(function () { + status('Shots has been published', 'info'); + })["catch"](function (error) { + status(error, 'error'); + }); + } + } + else + status('No connection specified', 'error'); + }); + function filterValues(values) { + var newValues = [ + { id: 'ignore', text: 'Ignore' }, + { id: 'clear', text: 'Clear Layer' } + ]; + for (var i = 0; i < values.length; i++) + if (values[i].text != 'Clear Layer') + newValues.push(values[i]); + return newValues; + } + ActionAPI.onOpenEditor(function (EditorAPI, properties) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var layerValues = { + '1': properties.layer1 != undefined && properties.layer1.length > 0 ? properties.layer1 : 'ignore', + '2': properties.layer2 != undefined && properties.layer2.length > 0 ? properties.layer2 : 'ignore', + '3': properties.layer3 != undefined && properties.layer3.length > 0 ? properties.layer3 : 'ignore', + '4': properties.layer4 != undefined && properties.layer4.length > 0 ? properties.layer4 : 'ignore', + '5': properties.layer5 != undefined && properties.layer5.length > 0 ? properties.layer5 : 'ignore' + }; + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + var connectionField = { + id: 'connectionID', + name: 'Connection', + type: 'connection', + connectionType: 'wirecast-bridge', + value: connectionID + }; + var fields = {}; + for (var i = 1; i < 6; i++) { + fields[i] = { + id: "layer" + i, + name: "Layer " + i, + type: 'select', + values: [], + value: layerValues[i] + }; + } + var setFields = function () { + EditorAPI.setFields([ + connectionField, + fields[1], + fields[2], + fields[3], + fields[4], + fields[5] + ]); + }; + function updateLayerFields() { + if (connection && connection.instance) { + var instance = connection.instance; + instance.getShots(function (shots) { + for (var layer in shots) { + var shotList = []; + for (var shotIndex in shots[layer].shots) { + var shot = shots[layer].shots[shotIndex]; + shotList.push({ id: String(shot.id), text: shot.name }); + } + fields[layer].value = layerValues[layer]; + fields[layer].values = filterValues(shotList); + } + setFields(); + }); + } + else + setFields(); + } + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + var toSave = { + connectionID: fieldObject.connectionID + }; + connectionField.value = fieldObject.connectionID; + for (var i = 1; i < 6; i++) { + fields[i].value = fieldObject["layer" + i]; + toSave["layer" + i] = fieldObject["layer" + i]; + } + EditorAPI.saveProperties(toSave); + if (connectionID != fieldObject.connectionID) { + connectionID = fieldObject.connectionID; + if (fieldObject.connectionID != 'none') { + connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + updateLayerFields(); + } + else { + for (var i = 1; i < 6; i++) { + fields[i].values = []; + } + setFields(); + } + } + }); + updateLayerFields(); + }); +}; +//# sourceMappingURL=multiShot.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/actions/multiShot.js.map b/Backend/dist/Integrations/buildin/wirecast/actions/multiShot.js.map new file mode 100644 index 0000000..6b7029d --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/actions/multiShot.js.map @@ -0,0 +1 @@ +{"version":3,"file":"multiShot.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/wirecast/actions/multiShot.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/actions/setAutoLive.js b/Backend/dist/Integrations/buildin/wirecast/actions/setAutoLive.js new file mode 100644 index 0000000..a3c05dc --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/actions/setAutoLive.js @@ -0,0 +1,69 @@ +exports.__esModule = true; +module.exports = function (ActionAPI) { + ActionAPI.handle(function (properties, status, deck) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var state = properties.state != undefined && properties.state.length > 0 ? properties.state : 'off'; + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + if (connection && connection.instance) { + connection.instance + .setAutoLive(state == 'on') + .then(function () { return status("Autolive state has been set to " + state); })["catch"](function (error) { return status(error, 'error'); }); + } + } + else + status('No connection specfied', 'error'); + }); + ActionAPI.onOpenEditor(function (EditorAPI, properties) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var state = properties.state != undefined && properties.state.length > 0 ? properties.state : 'off'; + var connectionField = { + id: 'connectionID', + name: 'Connection', + value: connectionID, + type: 'connection', + connectionType: 'wirecast-bridge' + }; + var stateField = { + id: 'state', + name: 'State', + type: 'select', + value: state, + values: [] + }; + if (connectionID != 'none') + stateField.values = [ + { id: 'on', text: 'AutoLive On' }, + { id: 'off', text: 'AutoLive Off' } + ]; + EditorAPI.setFields([ + connectionField, + stateField + ]); + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + connectionField.value = fieldObject.connectionID; + stateField.value = fieldObject.state; + if (connectionID != fieldObject.connectionID) { + connectionID = fieldObject.connectionID; + stateField.values = + connectionID != 'none' + ? [ + { id: 'on', text: 'On' }, + { id: 'off', text: 'Off' } + ] + : []; + EditorAPI.setFields([ + connectionField, + stateField + ]); + } + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID, state: fieldObject.state }); + }); + }); +}; +//# sourceMappingURL=setAutoLive.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/actions/setAutoLive.js.map b/Backend/dist/Integrations/buildin/wirecast/actions/setAutoLive.js.map new file mode 100644 index 0000000..7a3587f --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/actions/setAutoLive.js.map @@ -0,0 +1 @@ +{"version":3,"file":"setAutoLive.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/wirecast/actions/setAutoLive.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/actions/setLiveByName.js b/Backend/dist/Integrations/buildin/wirecast/actions/setLiveByName.js new file mode 100644 index 0000000..b0ff25a --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/actions/setLiveByName.js @@ -0,0 +1,107 @@ +exports.__esModule = true; +module.exports = function (ActionAPI) { + ActionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var shotID = properties.shotID != undefined && properties.shotID.length > 0 ? properties.shotID : 'none'; + if (connectionID != 'none') { + if (shotID != 'none') { + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + if (connection && connection.instance) { + connection.instance + .setShotLiveByID(shotID) + .then(function () { + status('Shot has been published', 'info'); + })["catch"](function (error) { + status(error, 'error'); + }); + } + } + else + status('No shot specified', 'error'); + } + else + status('No connection specified', 'error'); + }); + function filterValues(values) { + var newValues = [ + { id: 'none', text: 'None' } + ]; + for (var i = 0; i < values.length; i++) + if (values[i].text != 'Clear Layer') + newValues.push(values[i]); + return newValues; + } + ActionAPI.onOpenEditor(function (EditorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var shotID = properties.shotID != undefined ? properties.shotID : 'none'; + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + var connectionField = { + id: 'connectionID', + name: 'Connection', + type: 'connection', + connectionType: 'wirecast-bridge', + value: connectionID + }; + var shotsField = { + id: 'shotID', + name: 'Shot', + type: 'select', + values: [], + value: shotID + }; + var fields = [ + connectionField + ]; + if (connectionID != 'none') { + shotsField.values = [ + { id: '%loading%', text: 'Please wait for shots dropdown to load' } + ]; + } + EditorAPI.setFields(fields); + var sendFields = function () { + shotsField.value = shotID; + EditorAPI.setFields([ + connectionField, + shotsField + ]); + }; + var updateShots = function () { + if (connection != undefined && connection.instance != undefined) { + connection.instance.getShotsList(null, function (shots) { + shotsField.values = filterValues(shots.map(function (shot) { + return { id: shot.id, text: shot.name }; + })); + sendFields(); + }); + } + else + sendFields(); + }; + updateShots(); + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + connectionField.value = fieldObject.connectionID; + shotsField.value = fieldObject.shotID; + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID, shotID: fieldObject.shotID }); + if (connectionID != fieldObject.connectionID) { + connectionID = fieldObject.connectionID; + shotsField.values = [ + { id: '%loading%', text: 'Please wait for shots dropdown to load' } + ]; + EditorAPI.setFields([ + connectionField, + shotsField + ]); + if (connectionID != 'none') { + connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + updateShots(); + } + else { + shotsField.values = []; + sendFields(); + } + } + }); + }); +}; +//# sourceMappingURL=setLiveByName.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/actions/setLiveByName.js.map b/Backend/dist/Integrations/buildin/wirecast/actions/setLiveByName.js.map new file mode 100644 index 0000000..88e2701 --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/actions/setLiveByName.js.map @@ -0,0 +1 @@ +{"version":3,"file":"setLiveByName.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/wirecast/actions/setLiveByName.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/actions/setRecording.js b/Backend/dist/Integrations/buildin/wirecast/actions/setRecording.js new file mode 100644 index 0000000..30d3281 --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/actions/setRecording.js @@ -0,0 +1,69 @@ +exports.__esModule = true; +module.exports = function (ActionAPI) { + ActionAPI.handle(function (properties, status, deck) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var state = properties.state != undefined && properties.state.length > 0 ? properties.state : 'offline'; + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + if (connection && connection.instance) { + connection.instance + .setRecording(state == 'on') + .then(function () { return status("Recording state has been set to " + state); })["catch"](function (error) { return status(error, 'error'); }); + } + } + else + status('No connection specfied', 'error'); + }); + ActionAPI.onOpenEditor(function (EditorAPI, properties) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var state = properties.state != undefined && properties.state.length > 0 ? properties.state : 'offline'; + var connectionField = { + id: 'connectionID', + name: 'Connection', + value: connectionID, + type: 'connection', + connectionType: 'wirecast-bridge' + }; + var stateField = { + id: 'state', + name: 'State', + type: 'select', + value: state, + values: [] + }; + if (connectionID != 'none') + stateField.values = [ + { id: 'on', text: 'On' }, + { id: 'off', text: 'Off' } + ]; + EditorAPI.setFields([ + connectionField, + stateField + ]); + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + connectionField.value = fieldObject.connectionID; + stateField.value = fieldObject.state; + if (connectionID != fieldObject.connectionID) { + connectionID = fieldObject.connectionID; + stateField.values = + connectionID != 'none' + ? [ + { id: 'on', text: 'On' }, + { id: 'off', text: 'Off' } + ] + : []; + EditorAPI.setFields([ + connectionField, + stateField + ]); + } + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID, state: fieldObject.state }); + }); + }); +}; +//# sourceMappingURL=setRecording.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/actions/setRecording.js.map b/Backend/dist/Integrations/buildin/wirecast/actions/setRecording.js.map new file mode 100644 index 0000000..647b664 --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/actions/setRecording.js.map @@ -0,0 +1 @@ +{"version":3,"file":"setRecording.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/wirecast/actions/setRecording.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/actions/setbroadcasting.js b/Backend/dist/Integrations/buildin/wirecast/actions/setbroadcasting.js new file mode 100644 index 0000000..445d7ac --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/actions/setbroadcasting.js @@ -0,0 +1,69 @@ +exports.__esModule = true; +module.exports = function (ActionAPI) { + ActionAPI.handle(function (properties, status, deck) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var state = properties.state != undefined && properties.state.length > 0 ? properties.state : 'offline'; + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + if (connection && connection.instance) { + connection.instance + .setBroadcasting(state == 'live') + .then(function () { return status("Broadcasting state has been set to " + state); })["catch"](function (error) { return status(error, 'error'); }); + } + } + else + status('No connection specfied', 'error'); + }); + ActionAPI.onOpenEditor(function (EditorAPI, properties) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var state = properties.state != undefined && properties.state.length > 0 ? properties.state : 'offline'; + var connectionField = { + id: 'connectionID', + name: 'Connection', + value: connectionID, + type: 'connection', + connectionType: 'wirecast-bridge' + }; + var stateField = { + id: 'state', + name: 'State', + type: 'select', + value: state, + values: [] + }; + if (connectionID != 'none') + stateField.values = [ + { id: 'live', text: 'Live' }, + { id: 'offline', text: 'Offline' } + ]; + EditorAPI.setFields([ + connectionField, + stateField + ]); + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + connectionField.value = fieldObject.connectionID; + stateField.value = fieldObject.state; + if (connectionID != fieldObject.connectionID) { + connectionID = fieldObject.connectionID; + stateField.values = + connectionID != 'none' + ? [ + { id: 'live', text: 'Live' }, + { id: 'offline', text: 'Offline' } + ] + : []; + EditorAPI.setFields([ + connectionField, + stateField + ]); + } + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID, state: fieldObject.state }); + }); + }); +}; +//# sourceMappingURL=setBroadcasting.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/actions/setbroadcasting.js.map b/Backend/dist/Integrations/buildin/wirecast/actions/setbroadcasting.js.map new file mode 100644 index 0000000..46721b2 --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/actions/setbroadcasting.js.map @@ -0,0 +1 @@ +{"version":3,"file":"setBroadcasting.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/wirecast/actions/setBroadcasting.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/actions/transitionSpeed.js b/Backend/dist/Integrations/buildin/wirecast/actions/transitionSpeed.js new file mode 100644 index 0000000..516274a --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/actions/transitionSpeed.js @@ -0,0 +1,75 @@ +exports.__esModule = true; +module.exports = function (ActionAPI) { + ActionAPI.handle(function (properties, status, deck) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var speed = properties.speed != undefined && properties.speed.length > 0 ? properties.speed : 'offline'; + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + if (connection && connection.instance) { + connection.instance + .setTransitionSpeed(speed) + .then(function () { return status("Transition speed has been set to " + speed); })["catch"](function (error) { return status(error, 'error'); }); + } + } + else + status('No connection specfied', 'error'); + }); + ActionAPI.onOpenEditor(function (EditorAPI, properties) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var speed = properties.speed != undefined && properties.speed.length > 0 ? properties.speed : 'offline'; + var connectionField = { + id: 'connectionID', + name: 'Connection', + value: connectionID, + type: 'connection', + connectionType: 'wirecast-bridge' + }; + var speedField = { + id: 'speed', + name: 'Speed', + type: 'select', + value: speed, + values: [] + }; + if (connectionID != 'none') + speedField.values = [ + { id: 'slowest', text: 'Slowest' }, + { id: 'slow', text: 'Slow' }, + { id: 'normal', text: 'Normal' }, + { id: 'faster', text: 'Faster' }, + { id: 'fastest', text: 'Fastest' } + ]; + EditorAPI.setFields([ + connectionField, + speedField + ]); + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + connectionField.value = fieldObject.connectionID; + speedField.value = fieldObject.speed; + if (connectionID != fieldObject.connectionID) { + connectionID = fieldObject.connectionID; + speedField.values = + connectionID != 'none' + ? [ + { id: 'slowest', text: 'Slowest' }, + { id: 'slow', text: 'Slow' }, + { id: 'normal', text: 'Normal' }, + { id: 'faster', text: 'Faster' }, + { id: 'fastest', text: 'Fastest' } + ] + : []; + EditorAPI.setFields([ + connectionField, + speedField + ]); + } + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID, speed: fieldObject.speed }); + }); + }); +}; +//# sourceMappingURL=transitionSpeed.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/actions/transitionSpeed.js.map b/Backend/dist/Integrations/buildin/wirecast/actions/transitionSpeed.js.map new file mode 100644 index 0000000..2e654c4 --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/actions/transitionSpeed.js.map @@ -0,0 +1 @@ +{"version":3,"file":"transitionSpeed.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/wirecast/actions/transitionSpeed.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/integration.js b/Backend/dist/Integrations/buildin/wirecast/integration.js new file mode 100644 index 0000000..089e4cd --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/integration.js @@ -0,0 +1,61 @@ +exports.__esModule = true; +var Integration = { + name: 'Wirecast', + description: 'Control your Wirecast via our Wirecast-Bridge application.', + main: require('./wirecast'), + actions: [ + { + id: 'go', + name: 'Go' + }, + { + id: 'setLiveByName', + name: 'Set shot live' + }, + { + id: 'clearIfLive', + name: 'Clear shot if live' + }, + { + id: 'transitionSpeed', + name: 'Set transition speed' + }, + { + id: 'clearLayer', + name: 'Clear a layer' + }, + { + id: 'multiShot', + name: 'Multi shot' + }, + { + id: 'setBroadcasting', + name: 'Set broadcasting state' + }, + { + id: 'setRecording', + name: 'Set recording state' + }, + { + id: 'setAutoLive', + name: 'Set autolive state' + } + ], + connections: [ + { + name: 'Wirecast-Bridge', + type: 'wirecast-bridge', + message: "This connection requires the 'Undecked Wirecast Bridge' tool to be running on the same machine as Wirecast. This tool allows Undecked to control various Wirecast features over the network.", + link: { + address: 'http://www.morphix.productions', + title: 'Get the Wirecast Bridge' + }, + fields: [ + { id: 'ip', name: 'IP Address', type: 'text' }, + { id: 'port', name: 'Port', type: 'number', value: 6060 } + ] + } + ] +}; +module.exports = Integration; +//# sourceMappingURL=integration.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/integration.js.map b/Backend/dist/Integrations/buildin/wirecast/integration.js.map new file mode 100644 index 0000000..6793534 --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/integration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/wirecast/integration.ts"],"names":[],"mappings":";AAEA,IAAI,WAAW,GAAgB;IAC9B,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,4DAA4D;IACzE,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC;IAC3B,OAAO,EAAE;QACR;YACC,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,IAAI;SACV;QACD;YACC,EAAE,EAAE,eAAe;YACnB,IAAI,EAAE,eAAe;SACrB;QACD;YACC,EAAE,EAAE,aAAa;YACjB,IAAI,EAAE,oBAAoB;SAC1B;QACD;YACC,EAAE,EAAE,iBAAiB;YACrB,IAAI,EAAE,sBAAsB;SAC5B;QACD;YACC,EAAE,EAAE,YAAY;YAChB,IAAI,EAAE,eAAe;SACrB;QACD;YACC,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,YAAY;SAClB;QACD;YACC,EAAE,EAAE,iBAAiB;YACrB,IAAI,EAAE,wBAAwB;SAC9B;QACD;YACC,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,qBAAqB;SAC3B;QACD;YACC,EAAE,EAAE,aAAa;YACjB,IAAI,EAAE,oBAAoB;SAC1B;KACD;IACD,WAAW,EAAE;QACZ;YACC,IAAI,EAAE,iBAAiB;YACvB,IAAI,EAAE,iBAAiB;YACvB,OAAO,EACN,8LAA8L;YAC/L,IAAI,EAAE;gBACL,OAAO,EAAE,gCAAgC;gBACzC,KAAK,EAAE,yBAAyB;aAChC;YACD,MAAM,EAAE;gBACP,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE;gBAC9C,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE;aACzD;SACD;KACD;CACD,CAAC;AAEF,MAAM,CAAC,OAAO,GAAG,WAAW,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/wirecast.js b/Backend/dist/Integrations/buildin/wirecast/wirecast.js new file mode 100644 index 0000000..aa110c0 --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/wirecast.js @@ -0,0 +1,27 @@ +exports.__esModule = true; +var WirecastConnection_1 = require("./WirecastConnection"); +//TODO: --------------- TO IMPLEMENT --------------- +//TODO: Transition speed +module.exports = function (api) { + api.registerAction('setLiveByName', require('./actions/setLiveByName')); + api.registerAction('clearLayer', require('./actions/clearLayer')); + api.registerAction('multiShot', require('./actions/multiShot')); + api.registerAction('clearIfLive', require('./actions/clearIfLive')); + api.registerAction('transitionSpeed', require('./actions/transitionSpeed')); + api.registerAction('go', require('./actions/go')); + api.registerAction('setBroadcasting', require('./actions/setBroadcasting')); + api.registerAction('setRecording', require('./actions/setRecording')); + api.registerAction('setAutoLive', require('./actions/setAutoLive')); + api.registerConnectionValidator('wirecast-bridge', function (ValidatorAPI) { + var instance = ValidatorAPI.instance; + if (instance == undefined) { + instance = new WirecastConnection_1.WirecastConnection(); + } + instance.setHost(ValidatorAPI.properties.ip, ValidatorAPI.properties.port); + ValidatorAPI.setInstance(instance); + instance.ping(function (state) { + ValidatorAPI.callback(state, state ? null : 'Unable to reach Wirecast-Bridge'); + }); + }); +}; +//# sourceMappingURL=wirecast.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/wirecast/wirecast.js.map b/Backend/dist/Integrations/buildin/wirecast/wirecast.js.map new file mode 100644 index 0000000..80feede --- /dev/null +++ b/Backend/dist/Integrations/buildin/wirecast/wirecast.js.map @@ -0,0 +1 @@ +{"version":3,"file":"wirecast.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/wirecast/wirecast.ts"],"names":[],"mappings":";AAEA,2DAA0D;AAE1D,oDAAoD;AACpD,wBAAwB;AAExB,MAAM,CAAC,OAAO,GAAG,UAAC,GAAmB;IACpC,GAAG,CAAC,cAAc,CAAC,eAAe,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACxE,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAClE,GAAG,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAChE,GAAG,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACpE,GAAG,CAAC,cAAc,CAAC,iBAAiB,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAC5E,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAClD,GAAG,CAAC,cAAc,CAAC,iBAAiB,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAC5E,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACtE,GAAG,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAEpE,GAAG,CAAC,2BAA2B,CAAC,iBAAiB,EAAE,UAAC,YAAoC;QACvF,IAAI,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;QACrC,IAAI,QAAQ,IAAI,SAAS,EAAE;YAC1B,QAAQ,GAAG,IAAI,uCAAkB,EAAE,CAAC;SACpC;QACD,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,EAAE,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAE3E,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACnC,QAAQ,CAAC,IAAI,CAAC,UAAC,KAAc;YAC5B,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoom/actions/enterExitFullscreen.js b/Backend/dist/Integrations/buildin/zoom/actions/enterExitFullscreen.js new file mode 100644 index 0000000..8b3e6a1 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoom/actions/enterExitFullscreen.js @@ -0,0 +1,41 @@ +exports.__esModule = true; +var axios_1 = require("axios"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('zoom-bridge', connectionID); + axios_1["default"] + .get("http://" + connection.properties.ip + ":" + connection.properties.port + "/v1/fullscreen/toggle") + .then(function () { + status('Action completed'); + })["catch"](function () { + status('Unable to reach Zoom-Bridge'); + }); + } + else + status('No connection specified', 'error'); + }); + actionAPI.onOpenEditor(function (editorAPI, properties) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'zoom-bridge', + value: connectionID + }; + editorAPI.onFieldChanges(function (fields) { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; +//# sourceMappingURL=enterExitFullscreen.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoom/actions/enterExitFullscreen.js.map b/Backend/dist/Integrations/buildin/zoom/actions/enterExitFullscreen.js.map new file mode 100644 index 0000000..41e37bd --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoom/actions/enterExitFullscreen.js.map @@ -0,0 +1 @@ +{"version":3,"file":"enterExitFullscreen.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/zoom/actions/enterExitFullscreen.ts"],"names":[],"mappings":";AAAA,+BAA0B;AAI1B,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAA0B,EAAE,MAAM;QACnD,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QAEX,IAAI,YAAY,IAAI,MAAM,EAAE;YAC3B,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;YAEtE,kBAAK;iBACH,GAAG,CAAC,YAAU,UAAU,CAAC,UAAU,CAAC,EAAE,SAAI,UAAU,CAAC,UAAU,CAAC,IAAI,0BAAuB,CAAC;iBAC5F,IAAI,CAAC;gBACL,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC5B,CAAC,CAAC,CACD,OAAK,CAAA,CAAC;gBACN,MAAM,CAAC,6BAA6B,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;SACJ;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAA0B;QACvE,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QACX,IAAI,eAAe,GAAoB;YACtC,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,aAAa;YAC7B,KAAK,EAAE,YAAY;SACnB,CAAC;QACF,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM;YAC/B,IAAI,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC3D,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,SAAS,CAAC;YACnB,eAAe;SACf,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoom/actions/muteEveryoneExceptSelf.js b/Backend/dist/Integrations/buildin/zoom/actions/muteEveryoneExceptSelf.js new file mode 100644 index 0000000..8855b1d --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoom/actions/muteEveryoneExceptSelf.js @@ -0,0 +1,41 @@ +exports.__esModule = true; +var axios_1 = require("axios"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('zoom-bridge', connectionID); + axios_1["default"] + .get("http://" + connection.properties.ip + ":" + connection.properties.port + "/v1/actions/muteAllExpectSelf") + .then(function () { + status('Action completed'); + })["catch"](function () { + status('Unable to reach Zoom-Bridge'); + }); + } + else + status('No connection specified', 'error'); + }); + actionAPI.onOpenEditor(function (editorAPI, properties) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'zoom-bridge', + value: connectionID + }; + editorAPI.onFieldChanges(function (fields) { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; +//# sourceMappingURL=muteEveryoneExceptSelf.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoom/actions/muteEveryoneExceptSelf.js.map b/Backend/dist/Integrations/buildin/zoom/actions/muteEveryoneExceptSelf.js.map new file mode 100644 index 0000000..0d1ee12 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoom/actions/muteEveryoneExceptSelf.js.map @@ -0,0 +1 @@ +{"version":3,"file":"muteEveryoneExceptSelf.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/zoom/actions/muteEveryoneExceptSelf.ts"],"names":[],"mappings":";AAAA,+BAA0B;AAI1B,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAA0B,EAAE,MAAM;QACnD,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QAEX,IAAI,YAAY,IAAI,MAAM,EAAE;YAC3B,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;YAEtE,kBAAK;iBACH,GAAG,CAAC,YAAU,UAAU,CAAC,UAAU,CAAC,EAAE,SAAI,UAAU,CAAC,UAAU,CAAC,IAAI,kCAA+B,CAAC;iBACpG,IAAI,CAAC;gBACL,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC5B,CAAC,CAAC,CACD,OAAK,CAAA,CAAC;gBACN,MAAM,CAAC,6BAA6B,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;SACJ;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAA0B;QACvE,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QACX,IAAI,eAAe,GAAoB;YACtC,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,aAAa;YAC7B,KAAK,EAAE,YAAY;SACnB,CAAC;QACF,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM;YAC/B,IAAI,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC3D,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,SAAS,CAAC;YACnB,eAAe;SACf,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoom/actions/muteUnmuteAudio.js b/Backend/dist/Integrations/buildin/zoom/actions/muteUnmuteAudio.js new file mode 100644 index 0000000..849715f --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoom/actions/muteUnmuteAudio.js @@ -0,0 +1,41 @@ +exports.__esModule = true; +var axios_1 = require("axios"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('zoom-bridge', connectionID); + axios_1["default"] + .get("http://" + connection.properties.ip + ":" + connection.properties.port + "/v1/mic/toggle") + .then(function () { + status('Action completed'); + })["catch"](function () { + status('Unable to reach Zoom-Bridge'); + }); + } + else + status('No connection specified', 'error'); + }); + actionAPI.onOpenEditor(function (editorAPI, properties) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'zoom-bridge', + value: connectionID + }; + editorAPI.onFieldChanges(function (fields) { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; +//# sourceMappingURL=muteUnmuteAudio.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoom/actions/muteUnmuteAudio.js.map b/Backend/dist/Integrations/buildin/zoom/actions/muteUnmuteAudio.js.map new file mode 100644 index 0000000..d77147f --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoom/actions/muteUnmuteAudio.js.map @@ -0,0 +1 @@ +{"version":3,"file":"muteUnmuteAudio.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/zoom/actions/muteUnmuteAudio.ts"],"names":[],"mappings":";AAAA,+BAA0B;AAI1B,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAA0B,EAAE,MAAM;QACnD,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QAEX,IAAI,YAAY,IAAI,MAAM,EAAE;YAC3B,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;YAEtE,kBAAK;iBACH,GAAG,CAAC,YAAU,UAAU,CAAC,UAAU,CAAC,EAAE,SAAI,UAAU,CAAC,UAAU,CAAC,IAAI,mBAAgB,CAAC;iBACrF,IAAI,CAAC;gBACL,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC5B,CAAC,CAAC,CACD,OAAK,CAAA,CAAC;gBACN,MAAM,CAAC,6BAA6B,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;SACJ;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAA0B;QACvE,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QACX,IAAI,eAAe,GAAoB;YACtC,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,aAAa;YAC7B,KAAK,EAAE,YAAY;SACnB,CAAC;QACF,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM;YAC/B,IAAI,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC3D,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,SAAS,CAAC;YACnB,eAAe;SACf,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoom/actions/screenshot.js b/Backend/dist/Integrations/buildin/zoom/actions/screenshot.js new file mode 100644 index 0000000..d92918c --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoom/actions/screenshot.js @@ -0,0 +1,41 @@ +exports.__esModule = true; +var axios_1 = require("axios"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('zoom-bridge', connectionID); + axios_1["default"] + .get("http://" + connection.properties.ip + ":" + connection.properties.port + "/v1/actions/screenshot") + .then(function () { + status('Action completed'); + })["catch"](function () { + status('Unable to reach Zoom-Bridge'); + }); + } + else + status('No connection specified', 'error'); + }); + actionAPI.onOpenEditor(function (editorAPI, properties) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'zoom-bridge', + value: connectionID + }; + editorAPI.onFieldChanges(function (fields) { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; +//# sourceMappingURL=screenshot.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoom/actions/screenshot.js.map b/Backend/dist/Integrations/buildin/zoom/actions/screenshot.js.map new file mode 100644 index 0000000..9279eea --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoom/actions/screenshot.js.map @@ -0,0 +1 @@ +{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/zoom/actions/screenshot.ts"],"names":[],"mappings":";AAAA,+BAA0B;AAI1B,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAA0B,EAAE,MAAM;QACnD,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QAEX,IAAI,YAAY,IAAI,MAAM,EAAE;YAC3B,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;YAEtE,kBAAK;iBACH,GAAG,CAAC,YAAU,UAAU,CAAC,UAAU,CAAC,EAAE,SAAI,UAAU,CAAC,UAAU,CAAC,IAAI,2BAAwB,CAAC;iBAC7F,IAAI,CAAC;gBACL,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC5B,CAAC,CAAC,CACD,OAAK,CAAA,CAAC;gBACN,MAAM,CAAC,6BAA6B,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;SACJ;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAA0B;QACvE,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QACX,IAAI,eAAe,GAAoB;YACtC,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,aAAa;YAC7B,KAAK,EAAE,YAAY;SACnB,CAAC;QACF,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM;YAC/B,IAAI,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC3D,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,SAAS,CAAC;YACnB,eAAe;SACf,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoom/actions/startStopScreenshare.js b/Backend/dist/Integrations/buildin/zoom/actions/startStopScreenshare.js new file mode 100644 index 0000000..478b535 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoom/actions/startStopScreenshare.js @@ -0,0 +1,41 @@ +exports.__esModule = true; +var axios_1 = require("axios"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('zoom-bridge', connectionID); + axios_1["default"] + .get("http://" + connection.properties.ip + ":" + connection.properties.port + "/v1/screenshare/toggle") + .then(function () { + status('Action completed'); + })["catch"](function () { + status('Unable to reach Zoom-Bridge'); + }); + } + else + status('No connection specified', 'error'); + }); + actionAPI.onOpenEditor(function (editorAPI, properties) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'zoom-bridge', + value: connectionID + }; + editorAPI.onFieldChanges(function (fields) { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; +//# sourceMappingURL=startStopScreenshare.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoom/actions/startStopScreenshare.js.map b/Backend/dist/Integrations/buildin/zoom/actions/startStopScreenshare.js.map new file mode 100644 index 0000000..ce730d2 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoom/actions/startStopScreenshare.js.map @@ -0,0 +1 @@ +{"version":3,"file":"startStopScreenshare.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/zoom/actions/startStopScreenshare.ts"],"names":[],"mappings":";AAAA,+BAA0B;AAI1B,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAA0B,EAAE,MAAM;QACnD,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QAEX,IAAI,YAAY,IAAI,MAAM,EAAE;YAC3B,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;YAEtE,kBAAK;iBACH,GAAG,CAAC,YAAU,UAAU,CAAC,UAAU,CAAC,EAAE,SAAI,UAAU,CAAC,UAAU,CAAC,IAAI,2BAAwB,CAAC;iBAC7F,IAAI,CAAC;gBACL,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC5B,CAAC,CAAC,CACD,OAAK,CAAA,CAAC;gBACN,MAAM,CAAC,6BAA6B,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;SACJ;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAA0B;QACvE,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QACX,IAAI,eAAe,GAAoB;YACtC,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,aAAa;YAC7B,KAAK,EAAE,YAAY;SACnB,CAAC;QACF,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM;YAC/B,IAAI,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC3D,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,SAAS,CAAC;YACnB,eAAe;SACf,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoom/actions/startStopVideo.js b/Backend/dist/Integrations/buildin/zoom/actions/startStopVideo.js new file mode 100644 index 0000000..0445e57 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoom/actions/startStopVideo.js @@ -0,0 +1,41 @@ +exports.__esModule = true; +var axios_1 = require("axios"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('zoom-bridge', connectionID); + axios_1["default"] + .get("http://" + connection.properties.ip + ":" + connection.properties.port + "/v1/cam/toggle") + .then(function () { + status('Action completed'); + })["catch"](function () { + status('Unable to reach Zoom-Bridge'); + }); + } + else + status('No connection specified', 'error'); + }); + actionAPI.onOpenEditor(function (editorAPI, properties) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'zoom-bridge', + value: connectionID + }; + editorAPI.onFieldChanges(function (fields) { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; +//# sourceMappingURL=startStopVideo.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoom/actions/startStopVideo.js.map b/Backend/dist/Integrations/buildin/zoom/actions/startStopVideo.js.map new file mode 100644 index 0000000..fa3982f --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoom/actions/startStopVideo.js.map @@ -0,0 +1 @@ +{"version":3,"file":"startStopVideo.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/zoom/actions/startStopVideo.ts"],"names":[],"mappings":";AAAA,+BAA0B;AAI1B,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAA0B,EAAE,MAAM;QACnD,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QAEX,IAAI,YAAY,IAAI,MAAM,EAAE;YAC3B,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;YAEtE,kBAAK;iBACH,GAAG,CAAC,YAAU,UAAU,CAAC,UAAU,CAAC,EAAE,SAAI,UAAU,CAAC,UAAU,CAAC,IAAI,mBAAgB,CAAC;iBACrF,IAAI,CAAC;gBACL,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC5B,CAAC,CAAC,CACD,OAAK,CAAA,CAAC;gBACN,MAAM,CAAC,6BAA6B,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;SACJ;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAA0B;QACvE,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QACX,IAAI,eAAe,GAAoB;YACtC,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,aAAa;YAC7B,KAAK,EAAE,YAAY;SACnB,CAAC;QACF,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM;YAC/B,IAAI,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC3D,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,SAAS,CAAC;YACnB,eAAe;SACf,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoom/actions/switchToGalleryView.js b/Backend/dist/Integrations/buildin/zoom/actions/switchToGalleryView.js new file mode 100644 index 0000000..5129dc2 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoom/actions/switchToGalleryView.js @@ -0,0 +1,41 @@ +exports.__esModule = true; +var axios_1 = require("axios"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('zoom-bridge', connectionID); + axios_1["default"] + .get("http://" + connection.properties.ip + ":" + connection.properties.port + "/v1/view/gallery") + .then(function () { + status('Action completed'); + })["catch"](function () { + status('Unable to reach Zoom-Bridge'); + }); + } + else + status('No connection specified', 'error'); + }); + actionAPI.onOpenEditor(function (editorAPI, properties) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'zoom-bridge', + value: connectionID + }; + editorAPI.onFieldChanges(function (fields) { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; +//# sourceMappingURL=switchToGalleryView.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoom/actions/switchToGalleryView.js.map b/Backend/dist/Integrations/buildin/zoom/actions/switchToGalleryView.js.map new file mode 100644 index 0000000..025a212 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoom/actions/switchToGalleryView.js.map @@ -0,0 +1 @@ +{"version":3,"file":"switchToGalleryView.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/zoom/actions/switchToGalleryView.ts"],"names":[],"mappings":";AAAA,+BAA0B;AAI1B,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAA0B,EAAE,MAAM;QACnD,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QAEX,IAAI,YAAY,IAAI,MAAM,EAAE;YAC3B,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;YAEtE,kBAAK;iBACH,GAAG,CAAC,YAAU,UAAU,CAAC,UAAU,CAAC,EAAE,SAAI,UAAU,CAAC,UAAU,CAAC,IAAI,qBAAkB,CAAC;iBACvF,IAAI,CAAC;gBACL,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC5B,CAAC,CAAC,CACD,OAAK,CAAA,CAAC;gBACN,MAAM,CAAC,6BAA6B,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;SACJ;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAA0B;QACvE,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QACX,IAAI,eAAe,GAAoB;YACtC,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,aAAa;YAC7B,KAAK,EAAE,YAAY;SACnB,CAAC;QACF,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM;YAC/B,IAAI,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC3D,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,SAAS,CAAC;YACnB,eAAe;SACf,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoom/actions/switchToSpeakerView.js b/Backend/dist/Integrations/buildin/zoom/actions/switchToSpeakerView.js new file mode 100644 index 0000000..ccb1c7c --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoom/actions/switchToSpeakerView.js @@ -0,0 +1,41 @@ +exports.__esModule = true; +var axios_1 = require("axios"); +module.exports = function (actionAPI) { + actionAPI.handle(function (properties, status) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('zoom-bridge', connectionID); + axios_1["default"] + .get("http://" + connection.properties.ip + ":" + connection.properties.port + "/v1/view/speaker") + .then(function () { + status('Action completed'); + })["catch"](function () { + status('Unable to reach Zoom-Bridge'); + }); + } + else + status('No connection specified', 'error'); + }); + actionAPI.onOpenEditor(function (editorAPI, properties) { + var connectionID = properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'zoom-bridge', + value: connectionID + }; + editorAPI.onFieldChanges(function (fields) { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; +//# sourceMappingURL=switchToSpeakerView.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoom/actions/switchToSpeakerView.js.map b/Backend/dist/Integrations/buildin/zoom/actions/switchToSpeakerView.js.map new file mode 100644 index 0000000..d69bf82 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoom/actions/switchToSpeakerView.js.map @@ -0,0 +1 @@ +{"version":3,"file":"switchToSpeakerView.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/zoom/actions/switchToSpeakerView.ts"],"names":[],"mappings":";AAAA,+BAA0B;AAI1B,MAAM,CAAC,OAAO,GAAG,UAAC,SAAoB;IACrC,SAAS,CAAC,MAAM,CAAC,UAAC,UAA0B,EAAE,MAAM;QACnD,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QAEX,IAAI,YAAY,IAAI,MAAM,EAAE;YAC3B,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;YAEtE,kBAAK;iBACH,GAAG,CAAC,YAAU,UAAU,CAAC,UAAU,CAAC,EAAE,SAAI,UAAU,CAAC,UAAU,CAAC,IAAI,qBAAkB,CAAC;iBACvF,IAAI,CAAC;gBACL,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC5B,CAAC,CAAC,CACD,OAAK,CAAA,CAAC;gBACN,MAAM,CAAC,6BAA6B,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;SACJ;;YAAM,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,YAAY,CAAC,UAAC,SAAoB,EAAE,UAA0B;QACvE,IAAI,YAAY,GACf,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzE,CAAC,CAAC,UAAU,CAAC,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC;QACX,IAAI,eAAe,GAAoB;YACtC,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,aAAa;YAC7B,KAAK,EAAE,YAAY;SACnB,CAAC;QACF,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM;YAC/B,IAAI,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC3D,SAAS,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,SAAS,CAAC;YACnB,eAAe;SACf,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoom/integration.js b/Backend/dist/Integrations/buildin/zoom/integration.js new file mode 100644 index 0000000..f570936 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoom/integration.js @@ -0,0 +1,56 @@ +exports.__esModule = true; +module.exports = { + name: 'Zoom', + description: 'Control basic Zoom functionality on the Undecked computer or via our Zoom-Bridge application.', + main: require('./zoom'), + actions: [ + { + id: 'startStopVideo', + name: 'Start/Stop Video' + }, + { + id: 'muteUnmuteAudio', + name: 'Mute/Unmute My Audio' + }, + { + id: 'startStopScreenshare', + name: 'Start/Stop Screen Sharing' + }, + { + id: 'enterExitFullscreen', + name: 'Enter/Exit Full Screen Mode' + }, + { + id: 'switchToSpeakerView', + name: 'Switch to Speaker View' + }, + { + id: 'switchToGalleryView', + name: 'Switch to Gallery View' + }, + { + id: 'muteEveryoneExceptSelf', + name: 'Mute/Unmute Audio for Everyone Except Self (Host Only)' + }, + { + id: 'screenshot', + name: 'Screenshot' + } + ], + connections: [ + { + name: 'Zoom-Bridge', + type: 'zoom-bridge', + message: "This connection requires the 'Undecked Zoom Bridge' tool to be running on the same machine as Zoom. This tool allows Undecked to control various Zoom features over the network.", + link: { + address: 'http://www.morphix.productions', + title: 'Get the Zoom Bridge' + }, + fields: [ + { id: 'ip', name: 'IP Address', type: 'text' }, + { id: 'port', name: 'Port', type: 'number', value: 9191 } + ] + } + ] +}; +//# sourceMappingURL=integration.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoom/integration.js.map b/Backend/dist/Integrations/buildin/zoom/integration.js.map new file mode 100644 index 0000000..e229de1 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoom/integration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/zoom/integration.ts"],"names":[],"mappings":";AAEA,MAAM,CAAC,OAAO,GAAG;IAChB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,+FAA+F;IAC5G,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;IACvB,OAAO,EAAE;QACR;YACC,EAAE,EAAE,gBAAgB;YACpB,IAAI,EAAE,kBAAkB;SACxB;QAED;YACC,EAAE,EAAE,iBAAiB;YACrB,IAAI,EAAE,sBAAsB;SAC5B;QAED;YACC,EAAE,EAAE,sBAAsB;YAC1B,IAAI,EAAE,2BAA2B;SACjC;QAED;YACC,EAAE,EAAE,qBAAqB;YACzB,IAAI,EAAE,6BAA6B;SACnC;QAED;YACC,EAAE,EAAE,qBAAqB;YACzB,IAAI,EAAE,wBAAwB;SAC9B;QAED;YACC,EAAE,EAAE,qBAAqB;YACzB,IAAI,EAAE,wBAAwB;SAC9B;QAED;YACC,EAAE,EAAE,wBAAwB;YAC5B,IAAI,EAAE,wDAAwD;SAC9D;QAED;YACC,EAAE,EAAE,YAAY;YAChB,IAAI,EAAE,YAAY;SAClB;KACD;IACD,WAAW,EAAE;QACZ;YACC,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,aAAa;YACnB,OAAO,EACN,kLAAkL;YACnL,IAAI,EAAE;gBACL,OAAO,EAAE,gCAAgC;gBACzC,KAAK,EAAE,qBAAqB;aAC5B;YACD,MAAM,EAAE;gBACP,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE;gBAC9C,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE;aACzD;SACD;KACD;CACc,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoom/zoom.js b/Backend/dist/Integrations/buildin/zoom/zoom.js new file mode 100644 index 0000000..abe98a2 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoom/zoom.js @@ -0,0 +1,26 @@ +exports.__esModule = true; +var axios_1 = require("axios"); +module.exports = function (api) { + api.registerAction('startStopVideo', require('./actions/startStopVideo')); + api.registerAction('muteUnmuteAudio', require('./actions/muteUnmuteAudio')); + api.registerAction('startStopScreenshare', require('./actions/startStopScreenshare')); + api.registerAction('enterExitFullscreen', require('./actions/enterExitFullscreen')); + api.registerAction('switchToSpeakerView', require('./actions/switchToSpeakerView')); + api.registerAction('switchToGalleryView', require('./actions/switchToGalleryView')); + api.registerAction('muteEveryoneExceptSelf', require('./actions/muteEveryoneExceptSelf')); + api.registerAction('screenshot', require('./actions/screenshot')); + api.registerConnectionValidator('zoom-bridge', function (validatorAPI) { + if (validatorAPI.properties.ip != undefined && validatorAPI.properties.port != undefined) { + axios_1["default"] + .get("http://" + validatorAPI.properties.ip + ":" + validatorAPI.properties.port + "/v1/ping") + .then(function () { + validatorAPI.callback(true); + })["catch"](function () { + validatorAPI.callback(false, 'Unable to reach Zoom-Bridge'); + }); + } + else + validatorAPI.callback(false, 'No ip or port specified'); + }); +}; +//# sourceMappingURL=zoom.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoom/zoom.js.map b/Backend/dist/Integrations/buildin/zoom/zoom.js.map new file mode 100644 index 0000000..d9505b5 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoom/zoom.js.map @@ -0,0 +1 @@ +{"version":3,"file":"zoom.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/zoom/zoom.ts"],"names":[],"mappings":";AAAA,+BAA0B;AAG1B,MAAM,CAAC,OAAO,GAAG,UAAC,GAAmB;IACpC,GAAG,CAAC,cAAc,CAAC,gBAAgB,EAAE,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAC1E,GAAG,CAAC,cAAc,CAAC,iBAAiB,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAC5E,GAAG,CAAC,cAAc,CAAC,sBAAsB,EAAE,OAAO,CAAC,gCAAgC,CAAC,CAAC,CAAC;IACtF,GAAG,CAAC,cAAc,CAAC,qBAAqB,EAAE,OAAO,CAAC,+BAA+B,CAAC,CAAC,CAAC;IACpF,GAAG,CAAC,cAAc,CAAC,qBAAqB,EAAE,OAAO,CAAC,+BAA+B,CAAC,CAAC,CAAC;IACpF,GAAG,CAAC,cAAc,CAAC,qBAAqB,EAAE,OAAO,CAAC,+BAA+B,CAAC,CAAC,CAAC;IACpF,GAAG,CAAC,cAAc,CAAC,wBAAwB,EAAE,OAAO,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAC1F,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAElE,GAAG,CAAC,2BAA2B,CAAC,aAAa,EAAE,UAAC,YAAY;QAC3D,IAAI,YAAY,CAAC,UAAU,CAAC,EAAE,IAAI,SAAS,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,IAAI,SAAS,EAAE;YACzF,kBAAK;iBACH,GAAG,CAAC,YAAU,YAAY,CAAC,UAAU,CAAC,EAAE,SAAI,YAAY,CAAC,UAAU,CAAC,IAAI,aAAU,CAAC;iBACnF,IAAI,CAAC;gBACL,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC,CAAC,CACD,OAAK,CAAA,CAAC;gBACN,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;SACJ;;YAAM,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoomosc/actions/spotlight.js b/Backend/dist/Integrations/buildin/zoomosc/actions/spotlight.js new file mode 100644 index 0000000..189d991 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoomosc/actions/spotlight.js @@ -0,0 +1,5 @@ +exports.__esModule = true; +exports.addSpotlight = void 0; +var basic_1 = require("../template/basic"); +exports.addSpotlight = basic_1.ZoomOSC_Basic.handleAction('spot'); +//# sourceMappingURL=spotlight.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoomosc/actions/spotlight.js.map b/Backend/dist/Integrations/buildin/zoomosc/actions/spotlight.js.map new file mode 100644 index 0000000..f7ef8d1 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoomosc/actions/spotlight.js.map @@ -0,0 +1 @@ +{"version":3,"file":"spotlight.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/zoomosc/actions/spotlight.ts"],"names":[],"mappings":";;AAEA,2CAAkD;AAEvC,QAAA,YAAY,GAAG,qBAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoomosc/integration.js b/Backend/dist/Integrations/buildin/zoomosc/integration.js new file mode 100644 index 0000000..bd3b9d1 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoomosc/integration.js @@ -0,0 +1,33 @@ +exports.__esModule = true; +module.exports = { + name: 'ZoomOSC', + description: 'Control ZoomOSC', + main: require('./main'), + connections: [ + { + name: 'Zoom OSC', + type: 'zoomosc', + fields: [ + { + id: 'ip', + name: 'IP Address', + type: 'text', + value: '0.0.0.0' + }, + { + id: 'port', + name: 'Port', + type: 'number', + value: 9090 + }, + { + id: 'header', + name: 'OSC Header (Value is "zoom" by default)', + type: 'text', + value: 'zoom' + } + ] + } + ] +}; +//# sourceMappingURL=integration.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoomosc/integration.js.map b/Backend/dist/Integrations/buildin/zoomosc/integration.js.map new file mode 100644 index 0000000..a808af6 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoomosc/integration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/zoomosc/integration.ts"],"names":[],"mappings":";AAEA,MAAM,CAAC,OAAO,GAAG;IAChB,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,iBAAiB;IAC9B,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;IACvB,WAAW,EAAE;QACZ;YACC,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,SAAS;YACf,MAAM,EAAE;gBACP;oBACC,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,SAAS;iBAChB;gBACD;oBACC,EAAE,EAAE,MAAM;oBACV,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,IAAI;iBACX;gBACD;oBACC,EAAE,EAAE,QAAQ;oBACZ,IAAI,EAAE,yCAAyC;oBAC/C,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,MAAM;iBACb;aACD;SACD;KACD;CACc,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoomosc/main.js b/Backend/dist/Integrations/buildin/zoomosc/main.js new file mode 100644 index 0000000..2b2c14f --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoomosc/main.js @@ -0,0 +1,66 @@ +exports.__esModule = true; +var basic_1 = require("./template/basic"); +var connectionOnly_1 = require("./template/connectionOnly"); +var Atem = require('atem-connection').Atem; +module.exports = function (Api) { + //----- VIDEO/MIC ----- + Api.registerAction('zoomosc_video_on', 'Video on', basic_1.ZoomOSC_Basic.handleAction('videoOn')); + Api.registerAction('zoomosc_video_off', 'Video off', basic_1.ZoomOSC_Basic.handleAction('videoOff')); + Api.registerAction('zoomosc_video_toggle', 'Video toggle', basic_1.ZoomOSC_Basic.handleAction('toggleVideo')); + Api.registerAction('zoomosc_mic_mute', 'Mic Mute', basic_1.ZoomOSC_Basic.handleAction('mute')); + Api.registerAction('zoomosc_mic_unmute', 'Mic Unmute', basic_1.ZoomOSC_Basic.handleAction('unMute')); + Api.registerAction('zoomosc_mic_unmute', 'Mic Toggle', basic_1.ZoomOSC_Basic.handleAction('toggleMute')); + //----- HAND RAISE ----- + Api.registerAction('zoomosc_hand_raise', 'Hand Raise', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('raiseHand')); + Api.registerAction('zoomosc_hand_lower', 'Hand Lower', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('lowerHand')); + Api.registerAction('zoomosc_hand_toggle', 'Hand Toggle (WIN)', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('toggleHand')); + //----- SPOTLIGHT ----- + Api.registerAction('zoomosc_spot_add', 'Add spotlight (PRO)', basic_1.ZoomOSC_Basic.handleAction('addSpot')); + Api.registerAction('zoomosc_spot_un', 'Un-spotlight', basic_1.ZoomOSC_Basic.handleAction('unSpot')); + Api.registerAction('zoomosc_spot_replace', 'Replace spotlight', basic_1.ZoomOSC_Basic.handleAction('spot')); + Api.registerAction('zoomosc_spot_toggle', 'Toggle spotlight (PRO)', basic_1.ZoomOSC_Basic.handleAction('toggleSpot')); + //----- PIN ----- + Api.registerAction('zoomosc_pin_add', 'Add pin (PRO)', basic_1.ZoomOSC_Basic.handleAction('addPin')); + Api.registerAction('zoomosc_pin_replace', 'Replace pin', basic_1.ZoomOSC_Basic.handleAction('pin')); + Api.registerAction('zoomosc_pin_un', 'Un-pin', basic_1.ZoomOSC_Basic.handleAction('unPin')); + Api.registerAction('zoomosc_pin_toggle', 'Toggle pin (PRO)', basic_1.ZoomOSC_Basic.handleAction('togglePin')); + Api.registerAction('zoomosc_pin_replace2', 'Replace second screen pin', basic_1.ZoomOSC_Basic.handleAction('pin2')); + Api.registerAction('zoomosc_pin_un2', 'Un-pin second screen', basic_1.ZoomOSC_Basic.handleAction('unPin2')); + Api.registerAction('zoomosc_pin_toggle2', 'Toggle pin second screen (PRO)', basic_1.ZoomOSC_Basic.handleAction('clearPin')); + Api.registerAction('zoomosc_pin_clear', 'Clear all pins', basic_1.ZoomOSC_Basic.handleAction('togglePin2')); + //----- VIEW ----- + Api.registerAction('zoomosc_view_gallery', 'Gallery view', basic_1.ZoomOSC_Basic.handleAction('setGalleryView')); + Api.registerAction('zoomosc_view_speaker', 'Speaker view', basic_1.ZoomOSC_Basic.handleAction('setSpeakerView')); + Api.registerAction('zoomosc_view_gallerynext', 'Gallery view next page', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('galleryPageNext')); + Api.registerAction('zoomosc_view_galleryprevious', 'Gallery view previous page', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('galleryPagePrev')); + //----- SETTINGS ----- + Api.registerAction('zoomosc_settings_showusernames', 'Display Usernames on Videos', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('showUserNames')); + Api.registerAction('zoomosc_settings_hideusernames', 'Hide Usernames on Videos', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('hideUserNames')); + Api.registerAction('zoomosc_settings_showusernames', 'Show Non-Video Participants', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('showNonVideoParticipants')); + Api.registerAction('zoomosc_settings_showusernames', 'Show Non-Video Participants', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('showNonVideoParticipants')); + Api.registerAction('zoomosc_settings_enableoriginalaudio', 'Enable “Original Sound”', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('enableOriginalSound')); + Api.registerAction('zoomosc_settings_disableoriginalaudio', 'Disabled “Original Sound”', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('disableOriginalSound')); + //----- GLOBAL ----- + Api.registerAction('zoomosc_global_muteall', 'Mute all', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('all/mute')); + Api.registerAction('zoomosc_global_unmuteall', 'Unmute all', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('all/unMute')); + Api.registerAction('zoomosc_global_lowerallhands', 'Lower All Raised Hands', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('lowerAllHands')); + Api.registerAction('zoomosc_global_clearspotlight', 'Clear all spotlights from meeting (PRO)', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('clearSpot')); + Api.registerAction('zoomosc_global_leavemeeting', 'Leave Meeting (PRO)', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('leaveMeeting')); + Api.registerAction('zoomosc_global_endmeeting', 'End Meeting (PRO)', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('endMeeting')); + Api.registerAction('zoomosc_global_startlocalrecording', 'Start Local Recording', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('startLocalRecording')); + Api.registerAction('zoomosc_global_pauselocalrecording', 'Pause Local Recording', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('pauseLocalRecording')); + Api.registerAction('zoomosc_global_resumelocalrecording', 'Resume Local Recording', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('resumeLocalRecording')); + Api.registerAction('zoomosc_global_stoplocalrecording', 'Stop Local Recording', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('stopLocalRecording')); + Api.registerAction('zoomosc_global_startcloudrecording', 'Start Cloud Recording', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('startCloudRecording')); + Api.registerAction('zoomosc_global_pausecloudrecording', 'Pause Cloud Recording', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('pauseCloudRecording')); + Api.registerAction('zoomosc_global_resumecloudrecording', 'Resume Cloud Recording', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('resumeCloudRecording')); + Api.registerAction('zoomosc_global_stopcloudrecording', 'Stop Cloud Recording', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('stopCloudRecording')); + //----- WAITING ROOMS ----- + Api.registerAction('zoomosc_waitingrooms_enable', 'Enable Waiting Room (PRO)', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('enableWaitingRoom')); + Api.registerAction('zoomosc_waitingrooms_disable', 'Disable Waiting Room (PRO)', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('disableWaitingRoom')); + Api.registerAction('zoomosc_waitingrooms_admitall', 'Admit All from Waiting Room', connectionOnly_1.ZoomOSC_ConnectionOnly.handleAction('admitAll')); + Api.registerConnectionValidator('zoomosc', function (validatorAPI) { + validatorAPI.callback(true); + }); +}; +//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoomosc/main.js.map b/Backend/dist/Integrations/buildin/zoomosc/main.js.map new file mode 100644 index 0000000..2780c42 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoomosc/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../src/Integrations/buildin/zoomosc/main.ts"],"names":[],"mappings":";AACA,0CAAiD;AACjD,4DAAmE;AAC3D,IAAA,IAAI,GAAK,OAAO,CAAC,iBAAiB,CAAC,KAA/B,CAAgC;AAE5C,MAAM,CAAC,OAAO,GAAG,UAAC,GAAmB;IACpC,uBAAuB;IACvB,GAAG,CAAC,cAAc,CAAC,kBAAkB,EAAE,UAAU,EAAE,qBAAa,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1F,GAAG,CAAC,cAAc,CAAC,mBAAmB,EAAE,WAAW,EAAE,qBAAa,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7F,GAAG,CAAC,cAAc,CAAC,sBAAsB,EAAE,cAAc,EAAE,qBAAa,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC;IACtG,GAAG,CAAC,cAAc,CAAC,kBAAkB,EAAE,UAAU,EAAE,qBAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IACvF,GAAG,CAAC,cAAc,CAAC,oBAAoB,EAAE,YAAY,EAAE,qBAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7F,GAAG,CAAC,cAAc,CAAC,oBAAoB,EAAE,YAAY,EAAE,qBAAa,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC;IAEjG,wBAAwB;IACxB,GAAG,CAAC,cAAc,CAAC,oBAAoB,EAAE,YAAY,EAAE,uCAAsB,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;IACzG,GAAG,CAAC,cAAc,CAAC,oBAAoB,EAAE,YAAY,EAAE,uCAAsB,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;IACzG,GAAG,CAAC,cAAc,CAAC,qBAAqB,EAAE,mBAAmB,EAAE,uCAAsB,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC;IAElH,uBAAuB;IACvB,GAAG,CAAC,cAAc,CAAC,kBAAkB,EAAE,qBAAqB,EAAE,qBAAa,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IACrG,GAAG,CAAC,cAAc,CAAC,iBAAiB,EAAE,cAAc,EAAE,qBAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5F,GAAG,CAAC,cAAc,CAAC,sBAAsB,EAAE,mBAAmB,EAAE,qBAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IACpG,GAAG,CAAC,cAAc,CAAC,qBAAqB,EAAE,wBAAwB,EAAE,qBAAa,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC;IAE9G,iBAAiB;IACjB,GAAG,CAAC,cAAc,CAAC,iBAAiB,EAAE,eAAe,EAAE,qBAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7F,GAAG,CAAC,cAAc,CAAC,qBAAqB,EAAE,aAAa,EAAE,qBAAa,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5F,GAAG,CAAC,cAAc,CAAC,gBAAgB,EAAE,QAAQ,EAAE,qBAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IACpF,GAAG,CAAC,cAAc,CAAC,oBAAoB,EAAE,kBAAkB,EAAE,qBAAa,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;IACtG,GAAG,CAAC,cAAc,CAAC,sBAAsB,EAAE,2BAA2B,EAAE,qBAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5G,GAAG,CAAC,cAAc,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,qBAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpG,GAAG,CAAC,cAAc,CAAC,qBAAqB,EAAE,gCAAgC,EAAE,qBAAa,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;IACpH,GAAG,CAAC,cAAc,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,qBAAa,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC;IAEpG,kBAAkB;IAClB,GAAG,CAAC,cAAc,CAAC,sBAAsB,EAAE,cAAc,EAAE,qBAAa,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACzG,GAAG,CAAC,cAAc,CAAC,sBAAsB,EAAE,cAAc,EAAE,qBAAa,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACzG,GAAG,CAAC,cAAc,CACjB,0BAA0B,EAC1B,wBAAwB,EACxB,uCAAsB,CAAC,YAAY,CAAC,iBAAiB,CAAC,CACtD,CAAC;IACF,GAAG,CAAC,cAAc,CACjB,8BAA8B,EAC9B,4BAA4B,EAC5B,uCAAsB,CAAC,YAAY,CAAC,iBAAiB,CAAC,CACtD,CAAC;IAEF,sBAAsB;IACtB,GAAG,CAAC,cAAc,CACjB,gCAAgC,EAChC,6BAA6B,EAC7B,uCAAsB,CAAC,YAAY,CAAC,eAAe,CAAC,CACpD,CAAC;IACF,GAAG,CAAC,cAAc,CACjB,gCAAgC,EAChC,0BAA0B,EAC1B,uCAAsB,CAAC,YAAY,CAAC,eAAe,CAAC,CACpD,CAAC;IACF,GAAG,CAAC,cAAc,CACjB,gCAAgC,EAChC,6BAA6B,EAC7B,uCAAsB,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAC/D,CAAC;IACF,GAAG,CAAC,cAAc,CACjB,gCAAgC,EAChC,6BAA6B,EAC7B,uCAAsB,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAC/D,CAAC;IACF,GAAG,CAAC,cAAc,CACjB,sCAAsC,EACtC,yBAAyB,EACzB,uCAAsB,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAC1D,CAAC;IACF,GAAG,CAAC,cAAc,CACjB,uCAAuC,EACvC,2BAA2B,EAC3B,uCAAsB,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAC3D,CAAC;IAEF,oBAAoB;IACpB,GAAG,CAAC,cAAc,CAAC,wBAAwB,EAAE,UAAU,EAAE,uCAAsB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1G,GAAG,CAAC,cAAc,CAAC,0BAA0B,EAAE,YAAY,EAAE,uCAAsB,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC;IAChH,GAAG,CAAC,cAAc,CACjB,8BAA8B,EAC9B,wBAAwB,EACxB,uCAAsB,CAAC,YAAY,CAAC,eAAe,CAAC,CACpD,CAAC;IACF,GAAG,CAAC,cAAc,CACjB,+BAA+B,EAC/B,yCAAyC,EACzC,uCAAsB,CAAC,YAAY,CAAC,WAAW,CAAC,CAChD,CAAC;IACF,GAAG,CAAC,cAAc,CACjB,6BAA6B,EAC7B,qBAAqB,EACrB,uCAAsB,CAAC,YAAY,CAAC,cAAc,CAAC,CACnD,CAAC;IACF,GAAG,CAAC,cAAc,CACjB,2BAA2B,EAC3B,mBAAmB,EACnB,uCAAsB,CAAC,YAAY,CAAC,YAAY,CAAC,CACjD,CAAC;IAEF,GAAG,CAAC,cAAc,CACjB,oCAAoC,EACpC,uBAAuB,EACvB,uCAAsB,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAC1D,CAAC;IACF,GAAG,CAAC,cAAc,CACjB,oCAAoC,EACpC,uBAAuB,EACvB,uCAAsB,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAC1D,CAAC;IACF,GAAG,CAAC,cAAc,CACjB,qCAAqC,EACrC,wBAAwB,EACxB,uCAAsB,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAC3D,CAAC;IACF,GAAG,CAAC,cAAc,CACjB,mCAAmC,EACnC,sBAAsB,EACtB,uCAAsB,CAAC,YAAY,CAAC,oBAAoB,CAAC,CACzD,CAAC;IAEF,GAAG,CAAC,cAAc,CACjB,oCAAoC,EACpC,uBAAuB,EACvB,uCAAsB,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAC1D,CAAC;IACF,GAAG,CAAC,cAAc,CACjB,oCAAoC,EACpC,uBAAuB,EACvB,uCAAsB,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAC1D,CAAC;IACF,GAAG,CAAC,cAAc,CACjB,qCAAqC,EACrC,wBAAwB,EACxB,uCAAsB,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAC3D,CAAC;IACF,GAAG,CAAC,cAAc,CACjB,mCAAmC,EACnC,sBAAsB,EACtB,uCAAsB,CAAC,YAAY,CAAC,oBAAoB,CAAC,CACzD,CAAC;IAEF,2BAA2B;IAC3B,GAAG,CAAC,cAAc,CACjB,6BAA6B,EAC7B,2BAA2B,EAC3B,uCAAsB,CAAC,YAAY,CAAC,mBAAmB,CAAC,CACxD,CAAC;IACF,GAAG,CAAC,cAAc,CACjB,8BAA8B,EAC9B,4BAA4B,EAC5B,uCAAsB,CAAC,YAAY,CAAC,oBAAoB,CAAC,CACzD,CAAC;IACF,GAAG,CAAC,cAAc,CACjB,+BAA+B,EAC/B,6BAA6B,EAC7B,uCAAsB,CAAC,YAAY,CAAC,UAAU,CAAC,CAC/C,CAAC;IAEF,GAAG,CAAC,2BAA2B,CAAC,SAAS,EAAE,UAAC,YAAY;QACvD,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoomosc/template/basic.js b/Backend/dist/Integrations/buildin/zoomosc/template/basic.js new file mode 100644 index 0000000..16c6e56 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoomosc/template/basic.js @@ -0,0 +1,78 @@ +exports.__esModule = true; +exports.ZoomOSC_Basic = void 0; +var node_osc_1 = require("node-osc"); +exports.ZoomOSC_Basic = { + handleAction: function (oscAction) { + return function (ActionAPI) { + ActionAPI.onExecute(function (properties, status, deck) { + return exports.ZoomOSC_Basic.onExecute(ActionAPI, oscAction, properties, status, deck); + }); + ActionAPI.onOpenEditor(exports.ZoomOSC_Basic.onOpenEditor); + }; + }, + onExecute: function (ActionAPI, oscAction, properties, status, deck) { + if (properties.connectionID != undefined && properties.connectionID.length > 0) { + var connection = ActionAPI.getConnection('zoomosc', properties.connectionID); + if (connection) { + var ip = connection.properties.ip; + var port = connection.properties.port; + var header = connection.properties.header; + var client = new node_osc_1.Client(ip, port); + client.send("/" + header + "/" + properties.target + "/" + oscAction, properties.targetValue, function () { + status("OSC Action " + oscAction + " has been called with " + properties.targetValue, 'info'); + client.close(); + }); + } + else + status('Connection does not exist', 'error'); + } + else + status('No connectionID specified', 'error'); + }, + onOpenEditor: function (EditorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var target = properties.target != undefined ? properties.target : 'userName'; + var targetValue = properties.targetValue != undefined ? properties.targetValue : ''; + var connectionField = { + id: 'connectionID', + name: 'Connection', + type: 'connection', + connectionType: 'zoomosc', + value: connectionID + }; + var targetField = { + id: 'target', + name: 'Target', + type: 'select', + value: target, + values: [ + { id: 'userName', text: 'By username' }, + { id: 'targetID', text: 'By target id' }, + { id: 'zoomID', text: 'By Zoom id' }, + { id: 'galIndex', text: 'By gallery index' }, + { id: 'me', text: 'Me' }, + { id: 'all', text: 'All' } + ] + }; + var targetValueField = { + id: 'targetValue', + name: 'Value', + type: 'text', + value: targetValue + }; + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + EditorAPI.saveProperties({ + connectionID: fieldObject.connectionID, + target: fieldObject.target, + targetValue: fieldObject.targetValue + }); + }); + EditorAPI.setFields([ + connectionField, + targetField, + targetValueField + ]); + } +}; +//# sourceMappingURL=basic.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoomosc/template/basic.js.map b/Backend/dist/Integrations/buildin/zoomosc/template/basic.js.map new file mode 100644 index 0000000..997dca0 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoomosc/template/basic.js.map @@ -0,0 +1 @@ +{"version":3,"file":"basic.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/zoomosc/template/basic.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoomosc/template/connectionOnly.js b/Backend/dist/Integrations/buildin/zoomosc/template/connectionOnly.js new file mode 100644 index 0000000..c175a83 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoomosc/template/connectionOnly.js @@ -0,0 +1,54 @@ +exports.__esModule = true; +exports.ZoomOSC_ConnectionOnly = void 0; +var node_osc_1 = require("node-osc"); +exports.ZoomOSC_ConnectionOnly = { + handleAction: function (oscAction) { + return function (ActionAPI) { + ActionAPI.onExecute(function (properties, status, deck) { + return exports.ZoomOSC_ConnectionOnly.onExecute(ActionAPI, oscAction, properties, status, deck); + }); + ActionAPI.onOpenEditor(exports.ZoomOSC_ConnectionOnly.onOpenEditor); + }; + }, + onExecute: function (ActionAPI, oscAction, properties, status, deck) { + if (properties.connectionID != undefined && properties.connectionID.length > 0) { + var connection = ActionAPI.getConnection('zoomosc', properties.connectionID); + if (connection) { + var ip = connection.properties.ip; + var port = connection.properties.port; + var header = connection.properties.header; + var client = new node_osc_1.Client(ip, port); + client.send("/" + header + "/" + oscAction, [], function () { + status("OSC Action " + oscAction + " has been called", 'info'); + client.close(); + }); + } + else + status('Connection does not exist', 'error'); + } + else + status('No connectionID specified', 'error'); + }, + onOpenEditor: function (EditorAPI, properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var connectionField = { + id: 'connectionID', + name: 'Connection', + type: 'connection', + connectionType: 'zoomosc', + value: connectionID + }; + EditorAPI.onFieldChanges(function (fields) { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + EditorAPI.saveProperties({ + connectionID: fieldObject.connectionID, + target: fieldObject.target, + targetValue: fieldObject.targetValue + }); + }); + EditorAPI.setFields([ + connectionField + ]); + } +}; +//# sourceMappingURL=connectionOnly.js.map \ No newline at end of file diff --git a/Backend/dist/Integrations/buildin/zoomosc/template/connectionOnly.js.map b/Backend/dist/Integrations/buildin/zoomosc/template/connectionOnly.js.map new file mode 100644 index 0000000..b7afcf0 --- /dev/null +++ b/Backend/dist/Integrations/buildin/zoomosc/template/connectionOnly.js.map @@ -0,0 +1 @@ +{"version":3,"file":"connectionOnly.js","sourceRoot":"","sources":["../../../../../src/Integrations/buildin/zoomosc/template/connectionOnly.ts"],"names":[],"mappings":";;AACA,qCAAkC;AAGvB,QAAA,sBAAsB,GAAG;IACnC,YAAY,EAAZ,UAAa,SAAiB;QAC7B,OAAO,UAAC,SAAoB;YAC3B,SAAS,CAAC,SAAS,CAAC,UAAC,UAAU,EAAE,MAAM,EAAE,IAAI;gBAC5C,OAAA,8BAAsB,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC;YAAhF,CAAgF,CAChF,CAAC;YACF,SAAS,CAAC,YAAY,CAAC,8BAAsB,CAAC,YAAY,CAAC,CAAC;QAC7D,CAAC,CAAC;IACH,CAAC;IAED,SAAS,EAAT,UAAU,SAAoB,EAAE,SAAiB,EAAE,UAAsB,EAAE,MAAM,EAAE,IAAI;QACtF,IAAI,UAAU,CAAC,YAAY,IAAI,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/E,IAAI,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;YAC7E,IAAI,UAAU,EAAE;gBACf,IAAI,EAAE,GAAW,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1C,IAAI,IAAI,GAAW,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;gBAC9C,IAAI,MAAM,GAAW,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;gBAElD,IAAI,MAAM,GAAG,IAAI,iBAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBAClC,MAAM,CAAC,IAAI,CAAC,MAAI,MAAM,SAAI,SAAW,EAAO,EAAE,EAAE;oBAC/C,MAAM,CAAC,gBAAc,SAAS,qBAAkB,EAAE,MAAM,CAAC,CAAC;oBAC1D,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChB,CAAC,CAAC,CAAC;aACH;;gBAAM,MAAM,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC;SACpD;;YAAM,MAAM,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,YAAY,EAAZ,UAAa,SAAoB,EAAE,UAAsB;QACxD,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;QAE3F,IAAI,eAAe,GAAoB;YACtC,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,SAAS;YACzB,KAAK,EAAE,YAAY;SACnB,CAAC;QAEF,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM;YAC/B,IAAI,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAChE,SAAS,CAAC,cAAc,CAAC;gBACxB,YAAY,EAAE,WAAW,CAAC,YAAY;gBACtC,MAAM,EAAE,WAAW,CAAC,MAAM;gBAC1B,WAAW,EAAE,WAAW,CAAC,WAAW;aACpC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,SAAS,CAAC;YACnB,eAAe;SACf,CAAC,CAAC;IACJ,CAAC;CACD,CAAC"} \ No newline at end of file diff --git a/Backend/dist/Logger.js b/Backend/dist/Logger.js new file mode 100644 index 0000000..3010442 --- /dev/null +++ b/Backend/dist/Logger.js @@ -0,0 +1,53 @@ +var __spreadArray = (this && this.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +exports.__esModule = true; +exports.Log = void 0; +var CC = require("@meesvdw/coloredconsole"); +function Log(level) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + if (level.includes('.js')) { + level = args[0]; + args.splice(0, 1); + } + function log(origin) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + level = level.toLowerCase().replace('warning', 'warn'); + var format; + if (level == 'info') + format = CC.BG.black + CC.white + ' INFO '; + else if (level == 'error') + format = CC.BG.black + CC.red + ' ERROR '; + else if (level == 'warn') + format = CC.BG.black + CC.yellow + ' WARN '; + else if (level == 'crit') + format = CC.BG.red + CC.black + ' CRIT '; + if (origin == 'Core' && level != 'crit') + origin = CC.green + origin + CC.white; + var d = new Date(); + var n = d.toLocaleTimeString(); + format = format + " " + n + " " + origin + " " + args + " " + CC.reset; + console.log(format); + } + var error = new Error(); + if (error && error.stack) { + var stackArray = error.stack.replace('Error\n', '').replace(/ at /g, '%*%').replace(/ /g, '').split('%*%'); + stackArray.splice(0, 1); + if (stackArray.length > 1) { + var callerSplit = stackArray[1].replace(/\\/g, '/').split('/'); + var caller = callerSplit[callerSplit.length - 1].replace(/\n/g, '').replace(')', ''); + return log.apply(void 0, __spreadArray([caller], args)); + } + } + log.apply(void 0, __spreadArray(['Unknown'], args)); +} +exports.Log = Log; +//# sourceMappingURL=Logger.js.map \ No newline at end of file diff --git a/Backend/dist/Logger.js.map b/Backend/dist/Logger.js.map new file mode 100644 index 0000000..3264095 --- /dev/null +++ b/Backend/dist/Logger.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../src/Logger.ts"],"names":[],"mappings":";;;;;;;AAAA,4CAA8C;AAE9C,SAAgB,GAAG,CAAC,KAAyC;IAAE,cAAc;SAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;QAAd,6BAAc;;IAC5E,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QAC1B,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KAClB;IACD,SAAS,GAAG,CAAC,MAAc;QAAE,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,6BAAc;;QAC1C,KAAK,GAAuC,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAE3F,IAAI,MAAM,CAAC;QACX,IAAI,KAAK,IAAI,MAAM;YAAE,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC;aAC7D,IAAI,KAAK,IAAI,OAAO;YAAE,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,GAAG,UAAU,CAAC;aACjE,IAAI,KAAK,IAAI,MAAM;YAAE,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,MAAM,GAAG,UAAU,CAAC;aACnE,IAAI,KAAK,IAAI,MAAM;YAAE,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC;QAErE,IAAI,MAAM,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM;YAAE,MAAM,GAAG,EAAE,CAAC,KAAK,GAAG,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC;QAE/E,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,GAAG,CAAC,CAAC,kBAAkB,EAAE,CAAC;QAE/B,MAAM,GAAM,MAAM,SAAI,CAAC,UAAK,MAAM,WAAM,IAAI,SAAI,EAAE,CAAC,KAAO,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IACxB,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE;QACzB,IAAI,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3G,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAExB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,IAAI,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE/D,IAAI,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAErF,OAAO,GAAG,8BAAC,MAAM,GAAK,IAAI,GAAE;SAC5B;KACD;IACD,GAAG,8BAAC,SAAS,GAAK,IAAI,GAAE;AACzB,CAAC;AArCD,kBAqCC"} \ No newline at end of file diff --git a/Backend/dist/Pages/KeyManager.js b/Backend/dist/Pages/KeyManager.js new file mode 100644 index 0000000..0058a99 --- /dev/null +++ b/Backend/dist/Pages/KeyManager.js @@ -0,0 +1,47 @@ +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +exports.__esModule = true; +exports.KeyManager = void 0; +var Logger_1 = require("../Logger"); +var KeyManager = /** @class */ (function () { + function KeyManager() { + this.ids = []; + } + KeyManager.prototype.register = function (keyID) { + if (!this.ids.includes(keyID)) + this.ids.push(keyID); + else { + Logger_1.Log('warn', "Duplicate key IDs '" + keyID + "'"); + keyID = this.generateNew(); + } + return keyID; + }; + KeyManager.prototype.generateNew = function () { + var _this = this; + return this.register(Undecked.generateRandom(16, function (checkValid) { + return !_this.ids.includes(checkValid); + })); + }; + KeyManager.prototype.getLocation = function (keyID) { + var pages = Undecked.Pages.getAll(); + for (var pageID in pages) { + var page = pages[pageID]; + if (page.hasKeyWithID(keyID)) { + return __assign({ pageID: pageID }, page.getKeyLocationWithID(keyID)); + } + } + return { pageID: null, x: null, y: null }; + }; + return KeyManager; +}()); +exports.KeyManager = KeyManager; +//# sourceMappingURL=KeyManager.js.map \ No newline at end of file diff --git a/Backend/dist/Pages/KeyManager.js.map b/Backend/dist/Pages/KeyManager.js.map new file mode 100644 index 0000000..faf0013 --- /dev/null +++ b/Backend/dist/Pages/KeyManager.js.map @@ -0,0 +1 @@ +{"version":3,"file":"KeyManager.js","sourceRoot":"","sources":["../../src/Pages/KeyManager.ts"],"names":[],"mappings":";;;;;;;;;;;;;AACA,oCAAgC;AAIhC;IAGC;QACC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;IACf,CAAC;IAED,6BAAQ,GAAR,UAAS,KAAa;QACrB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC/C;YACJ,YAAG,CAAC,MAAM,EAAE,wBAAsB,KAAK,MAAG,CAAC,CAAC;YAC5C,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;SAC3B;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,gCAAW,GAAX;QAAA,iBAMC;QALA,OAAO,IAAI,CAAC,QAAQ,CACnB,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,UAAC,UAAU;YACtC,OAAO,CAAC,KAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC,CAAC,CACF,CAAC;IACH,CAAC;IAED,gCAAW,GAAX,UAAY,KAAK;QAChB,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACpC,KAAK,IAAI,MAAM,IAAI,KAAK,EAAE;YACzB,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YACzB,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;gBAC7B,kBAAS,MAAM,QAAA,IAAK,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAG;aACvD;SACD;QACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;IACF,iBAAC;AAAD,CAAC,AAlCD,IAkCC;AAlCY,gCAAU"} \ No newline at end of file diff --git a/Backend/dist/Pages/Page.js b/Backend/dist/Pages/Page.js new file mode 100644 index 0000000..162f161 --- /dev/null +++ b/Backend/dist/Pages/Page.js @@ -0,0 +1,397 @@ +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +exports.__esModule = true; +var fs_extra_1 = require("fs-extra"); +var path = require("path"); +var Logger_1 = require("../Logger"); +module.exports = /** @class */ (function () { + function Page(settings) { + this.pageFilePath = path.join(Undecked.dataPath, 'pages', settings.pageID + ".json"); + this.pageID = settings.pageID; + this.name = settings.name || "Unnamed page (" + this.pageID + ")"; + this.keys = settings.keys || {}; + this.ensureKeys(); + } + Page.prototype.save = function (callback) { + var _this = this; + clearTimeout(this.saveTimeout); + this.saveTimeout = setTimeout(function () { + fs_extra_1.writeJson(_this.pageFilePath, _this["export"](), function (err) { + if (err) + Logger_1.Log('error', "Error whilst saving page " + _this.pageID, err.message); + else + Logger_1.Log('info', "Page " + _this.pageID + " has been saved"); + if (callback) + callback(); + }); + }, 10 * 1000); + }; + Page.prototype["export"] = function () { + var keys = JSON.parse(JSON.stringify(this.keys)); + for (var y in keys) { + for (var x in keys[y]) { + var key = keys[y][x]; + if (key.state != undefined && key.state.type == 'ghost' && key.state.masterID != undefined) { + var location = Undecked.Pages.KeyManager.getLocation(key.state.masterID); + var page = Undecked.Pages.get(location.pageID); + if (page) { + var ghostMaster = page.getKey(location.x, location.y); + key.appearence = ghostMaster.appearence; + key.actions = ghostMaster.actions; + } + } + } + } + return { + pageID: this.pageID, + name: this.name, + keys: keys + }; + }; + Page.prototype.getID = function () { + return this.pageID; + }; + Page.prototype.ensureKeys = function () { + for (var y = 0; y < 4; y++) { + if (this.keys[y] == undefined) + this.keys[y] = {}; + for (var x = 0; x < 8; x++) { + if (this.keys[y][x] == undefined) + this.keys[y][x] = __assign(__assign({}, defaultKey), { id: null }); + if (this.keys[y][x].id == null || this.keys[y][x].id == undefined) + this.keys[y][x].id = Undecked.Pages.KeyManager.generateNew(); + else + Undecked.Pages.KeyManager.register(this.keys[y][x].id); + if (this.keys[y][x].actions == undefined) + this.keys[y][x].actions = {}; + if (this.keys[y][x].actions.up == undefined) + this.keys[y][x].actions.up = {}; + if (this.keys[y][x].actions.down == undefined) + this.keys[y][x].actions.down = {}; + if (this.keys[y][x].actions.latch == undefined) + this.keys[y][x].actions.latch = {}; + if (this.keys[y][x].actions.unlatch == undefined) + this.keys[y][x].actions.unlatch = {}; + if (this.keys[y][x].state.type == 'ghost') { + if (this.keys[y][x].state.masterID != undefined) { + var location = Undecked.Pages.KeyManager.getLocation(this.keys[y][x].state.masterID); + var page = Undecked.Pages.get(location.pageID); + if (page) { + var key = page.getKey(location.x, location.y); + if (key.state.ghostIDs == undefined) + key.state.ghostIDs = []; + key.state.ghostIDs.push(this.keys[y][x].id); + } + } + } + } + } + }; + Page.prototype.setName = function (name) { + this.name = name; + this.save(); + Undecked.SocketServer.broadcastTo('home', 'page', 'updatename', this.pageID, name); + }; + Page.prototype.broadcastKeyUpdate = function (x, y, responseToken, key) { + if (responseToken === void 0) { responseToken = '-1'; } + Undecked.SocketServer.broadcastTo('home', 'page', 'updatekey', this.pageID, x, y, key != undefined ? key : this.keys[y][x], responseToken); + }; + Page.prototype.updateKey = function (x, y, key, responseToken, originQuery, force) { + if (force === void 0) { force = false; } + if (this.keys[y] != undefined && this.keys[y][x] != undefined) { + //FIXME:GHOST still not working oging to bed now, I think i should rewrite it tomorrow..... + /* When updating key check if key is a ghost, if so recall the function with the master key. Update all properties on master key as usual. If a key has ghostIDs, update the appearence and actions of the key. */ + //----------------------------------Validating key + var masterResponseToken = originQuery == undefined + ? responseToken + : this.pageID + "_" + x + "_" + y == originQuery ? responseToken : '-1'; + originQuery = this.pageID + "_" + x + "_" + y; + var decks = Undecked.Decks.decks; + var currentKey = this.keys[y][x]; + var grabBest = function (object, value, defaultValue, incommingFirst) { + if (incommingFirst === void 0) { incommingFirst = true; } + if (key.state.type == 'empty') + return defaultValue; + if ((incommingFirst == true || force == true) && key[object] != undefined) + if (value != null && key[object][value] != undefined) + return key[object][value]; + else if (value == null) + return key[object]; + if (currentKey[object] != undefined) + if (value != null && currentKey[object][value] != undefined) + return currentKey[object][value]; + else if (value == null) + return currentKey[object]; + if (incommingFirst == false && key[object] != undefined) + if (value != null && key[object][value] != undefined) + return key[object][value]; + else if (value == null) + return key[object]; + return defaultValue; + }; + if (currentKey.state.type != 'ghost' && key.state.type == 'ghost') { + //Becoming ghost + } + else if (currentKey.state.type == 'ghost' && (key.state.type == 'ghost' || key.state.type == 'custom')) { + //Editing ghost + if (key.state.type == 'custom') + key.state.type = 'ghost'; + var masterID = currentKey.state.masterID; + var masterLocation = Undecked.Pages.KeyManager.getLocation(masterID); + var masterPage = Undecked.Pages.get(masterLocation.pageID); + if (masterPage) { + var masterKeyClone = JSON.parse(JSON.stringify(masterPage.getKey(masterLocation.x, masterLocation.y))); + return masterPage.updateKey(masterLocation.x, masterLocation.y, __assign(__assign({}, masterKeyClone), { state: __assign(__assign({}, masterKeyClone.state), { confirm: key.state.confirm, toggle: key.state.toggle }), appearence: key.appearence }), responseToken, originQuery); + } + return console.log('Unable to find ghost master key'); + } + else if (currentKey.state.type == 'ghost' && key.state.type != 'ghost') { + var masterID = currentKey.state.masterID; + var masterLocation = Undecked.Pages.KeyManager.getLocation(masterID); + var masterPage = Undecked.Pages.get(masterLocation.pageID); + if (masterPage) { + var masterKey = masterPage.getKey(masterLocation.x, masterLocation.y); + if (masterKey.state != undefined && masterKey.state.ghostIDs != undefined) { + if (masterKey.state.ghostIDs.includes(currentKey.id)) + masterKey.state.ghostIDs.splice(masterKey.state.ghostIDs.indexOf(currentKey.id), 1); + } + } + //Reverting from ghost + } + else if (currentKey.state.type == 'custom' && + key.state.type != 'custom' && + currentKey.state.ghostIDs != undefined && + currentKey.state.ghostIDs.length > 0) { + //Master becoming other key + var ghostIDs = currentKey.state.ghostIDs; + var removeGhost = function (ghostID) { + var ghostLocation = Undecked.Pages.KeyManager.getLocation(ghostID); + var ghostPage = Undecked.Pages.get(ghostLocation.pageID); + if (ghostPage) { + var ghostKey = ghostPage.getKey(ghostLocation.x, ghostLocation.y); + if (ghostKey.state != undefined && ghostKey.state.masterID == currentKey.id) { + if (ghostPage.keys[ghostLocation.y] != undefined && + ghostPage.keys[ghostLocation.y][ghostLocation.x]) { + ghostPage.keys[ghostLocation.y][ghostLocation.x] = { + id: ghostKey.id, + appearence: {}, + state: { confirm: false, toggle: false, type: 'empty' } + }; + ghostPage.broadcastKeyUpdate(ghostLocation.x, ghostLocation.y); + } + } + } + }; + for (var i = 0; i < ghostIDs.length; i++) { + removeGhost(ghostIDs[i]); + continue; + } + currentKey.state.ghostIDs = null; + } + else { + //Normal change + } + var id = currentKey.id != undefined ? currentKey.id : Undecked.Pages.KeyManager.generateNew(); + var _internal = currentKey._internal != undefined ? currentKey._internal : {}; + var state = { + confirm: grabBest('state', 'confirm', false), + toggle: grabBest('state', 'toggle', false), + type: grabBest('state', 'type', 'empty'), + masterID: grabBest('state', 'masterID', null, false), + ghostIDs: grabBest('state', 'ghostIDs', null, false) + }; + var actions = state.type == 'empty' + ? { down: {}, up: {}, latch: {}, unlatch: {} } + : force == true + ? key.actions + : currentKey.actions != undefined + ? currentKey.actions + : { up: {}, down: {}, latch: {}, unlatch: {} }; + var appearence = { + background: grabBest('appearence', 'background', {}), + image: grabBest('appearence', 'image', {}), + text: grabBest('appearence', 'text', {}) + }; + this.keys[y][x] = { + id: id, + _internal: _internal, + actions: actions, + state: state, + appearence: appearence + }; + //----------------------------------Updating decks & web ui + var deckPages = {}; + for (var serialNumber in decks) { + var deck = decks[serialNumber]; + if (deckPages[deck.getPageID()] == undefined) + deckPages[deck.getPageID()] = []; + deckPages[deck.getPageID()].push(deck); + if (deck.getPageID() == this.pageID) { + deck.updateKey(parseInt(x), parseInt(y)); + } + } + if (this.keys[y][x].state.type == 'ghost') { + var masterLocation = Undecked.Pages.KeyManager.getLocation(this.keys[y][x].state.masterID); + var masterPage = Undecked.Pages.get(masterLocation.pageID); + if (masterPage) { + var masterClone = JSON.parse(JSON.stringify(masterPage.getKey(masterLocation.x, masterLocation.y))); + this.broadcastKeyUpdate(x, y, masterResponseToken, __assign(__assign({}, key), { state: __assign(__assign({}, key.state), { confirm: masterClone.state.confirm, toggle: masterClone.state.toggle }), appearence: masterClone.appearence })); + } + } + else + this.broadcastKeyUpdate(x, y, masterResponseToken); + if (currentKey.state.type == 'custom' && + currentKey.state.ghostIDs != undefined && + currentKey.state.ghostIDs.length > 0) { + //Updating ghost of this key + var ghostAppearence = JSON.parse(JSON.stringify(appearence)); + ghostAppearence.system = { ghost: true }; + for (var i = 0; i < currentKey.state.ghostIDs.length; i++) { + var ghostID = currentKey.state.ghostIDs[i]; + var ghostLocation = Undecked.Pages.KeyManager.getLocation(ghostID); + var ghostPage = Undecked.Pages.get(ghostLocation.pageID); + if (ghostPage) { + var ghostKeyClone = JSON.parse(JSON.stringify(ghostPage.getKey(ghostLocation.x, ghostLocation.y))); + if (ghostKeyClone.state != undefined && ghostKeyClone.state.masterID == id) { + var responseTokenGhost = originQuery == undefined + ? responseToken + : ghostLocation.pageID + "_" + ghostLocation.x + "_" + ghostLocation.y == originQuery + ? responseToken + : '-1'; + var newGhostKey = __assign(__assign({}, ghostKeyClone), { appearence: ghostAppearence }); + ghostPage.broadcastKeyUpdate(ghostLocation.x, ghostLocation.y, responseTokenGhost, newGhostKey); + if (deckPages[ghostPage.getID()] != undefined) + for (var i_1 = 0; i_1 < deckPages[ghostPage.getID()].length; i_1++) { + var deck = deckPages[ghostPage.getID()][i_1]; + deck.setKey(ghostLocation.x, ghostLocation.y, newGhostKey); + } + } + else { + currentKey.state.ghostIDs.splice(i, 1); + i--; + } + } + } + } + this.save(); + } + }; + Page.prototype.setKeyInternal = function (x, y, property, value) { + if (this.keys[y] != undefined && this.keys[y][x] != undefined) { + this.keys[y][x]._internal[property] = value; + this.save(); + } + }; + Page.prototype.getKey = function (x, y) { + if (this.keys[y] != undefined && this.keys[y][x] != undefined) + return this.keys[y][x]; + return null; + }; + Page.prototype.requestKey = function (x, y) { + if (this.keys[y] != undefined && this.keys[y][x] != undefined) { + if (this.keys[y][x].state != undefined && + this.keys[y][x].state.type == 'ghost' && + this.keys[y][x].state.masterID != undefined) { + var key = JSON.parse(JSON.stringify(this.keys[y][x])); + var location = Undecked.Pages.KeyManager.getLocation(key.state.masterID); + var page = Undecked.Pages.get(location.pageID); + if (page) { + var ghostMasterClone = JSON.parse(JSON.stringify(page.getKey(location.x, location.y))); + key.state = __assign(__assign({}, this.keys[y][x].state), { confirm: ghostMasterClone.state.confirm, toggle: ghostMasterClone.state.toggle }); + key.appearence = ghostMasterClone.appearence; + key.actions = ghostMasterClone.actions; + return key; + } + } + else + return this.keys[y][x]; + } + return null; + }; + Page.prototype.hasKey = function (x, y) { + return this.keys[y] != undefined && this.keys[y][x] != undefined; + }; + Page.prototype.hasKeyWithID = function (keyID) { + for (var y = 0; y < 4; y++) + for (var x = 0; x < 8; x++) + if (this.keys[y] != undefined && this.keys[y][x] != undefined) + if (this.keys[y][x].id == keyID) + return true; + return false; + }; + Page.prototype.getKeyLocationWithID = function (keyID) { + for (var y = 0; y < 4; y++) + for (var x = 0; x < 8; x++) + if (this.keys[y] != undefined && this.keys[y][x] != undefined) + if (this.keys[y][x].id == keyID) + return { x: x, y: y }; + return null; + }; + Page.prototype.getKeyTextList = function () { + var list = []; + for (var y = 0; y < 4; y++) + for (var x = 0; x < 8; x++) { + if (this.keys[y] != undefined && this.keys[y][x] != undefined) { + var key = this.keys[y][x]; + if (key.appearence != undefined && key.appearence.text != undefined) { + if (key.appearence.text.value != undefined && key.appearence.text.value.length > 0) { + list.push({ x: x, y: y, text: key.appearence.text.value, id: key.id }); + continue; + } + } + list.push({ x: x, y: y, text: null, id: key.id }); + } + else + list.push({ x: x, y: y, text: null, id: null }); + } + return list; + }; + Page.prototype.getActionInstance = function (key, actionInstanceID) { + if (key.actions != undefined) { + if (key.actions.up != undefined && key.actions.up[actionInstanceID] != undefined) + return key.actions.up[actionInstanceID]; + if (key.actions.down != undefined && key.actions.down[actionInstanceID] != undefined) + return key.actions.down[actionInstanceID]; + if (key.actions.latch != undefined && key.actions.latch[actionInstanceID] != undefined) + return key.actions.latch[actionInstanceID]; + if (key.actions.unlatch != undefined && key.actions.unlatch[actionInstanceID] != undefined) + return key.actions.unlatch[actionInstanceID]; + } + return null; + }; + return Page; +}()); +var defaultKey = { + id: null, + state: { + type: 'empty', + toggle: false, + confirm: false + }, + actions: { + up: {}, + down: {}, + latch: {}, + unlatch: {} + }, + appearence: { + text: { + color: '#ffffff', + size: 20, + value: '', + offsetX: 0, + offsetY: 0 + } + }, + _internal: {} +}; +//# sourceMappingURL=Page.js.map \ No newline at end of file diff --git a/Backend/dist/Pages/Page.js.map b/Backend/dist/Pages/Page.js.map new file mode 100644 index 0000000..22771ea --- /dev/null +++ b/Backend/dist/Pages/Page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Page.js","sourceRoot":"","sources":["../../src/Pages/Page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/Pages/PageManager.js b/Backend/dist/Pages/PageManager.js new file mode 100644 index 0000000..caa6ba6 --- /dev/null +++ b/Backend/dist/Pages/PageManager.js @@ -0,0 +1,273 @@ +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +exports.__esModule = true; +exports.PageManager = void 0; +var path = require("path"); +var Logger_1 = require("../Logger"); +var KeyManager_1 = require("./KeyManager"); +var fs = require("fs-extra"); +var ensureDir = fs.ensureDir, pathExists = fs.pathExists, readdir = fs.readdir, readJSON = fs.readJSON, readJson = fs.readJson, writeFile = fs.writeFile; +var PageClass = require('./Page'); +var PageManager = /** @class */ (function () { + function PageManager() { + } + PageManager.prototype.load = function (callback) { + var _this = this; + this.managerConfigPath = path.join(Undecked.dataPath, 'pagemanager.json'); + this.managerDataPath = path.join(Undecked.dataPath, 'pages'); + this.KeyManager = new KeyManager_1.KeyManager(); + this.pages = {}; + this.order = []; + Logger_1.Log('info', 'Loading pages'); + ensureDir(this.managerDataPath, function (err) { + if (err) + throw err; + _this.loadConfig(function () { + _this.order = _this.managerConfig.order || []; + _this.loadPages(callback); + }); + }); + }; + PageManager.prototype.loadConfig = function (callback) { + var _this = this; + pathExists(this.managerConfigPath, function (err, exists) { + if (err) + throw err; + if (exists) { + readJson(_this.managerConfigPath, function (err, json) { + if (err) + throw err; + _this.managerConfig = json; + callback(); + }); + } + else { + _this.managerConfig = defaultPageConfig; + _this.saveConfig(callback); + } + }); + }; + PageManager.prototype.saveConfig = function (callback) { + var toSave = { + order: this.order + }; + writeFile(this.managerConfigPath, JSON.stringify(toSave, null, 4), function (err) { + if (err) + Logger_1.Log('error', 'Error whilst saving manager config', err.message); + if (callback) + callback(); + }); + }; + PageManager.prototype.loadPages = function (callback) { + var instance = this; + readdir(this.managerDataPath, function (err, files) { + if (err) + throw err; + (function readPage(i) { + if (i === void 0) { i = 0; } + if (files[i]) { + readJSON(path.join(instance.managerDataPath, files[i]), function (err, data) { + if (err) + Logger_1.Log('error', "Error whilst loading page " + files[i].replace('.json', ''), err.message); + else + instance.pages[data.pageID] = new PageClass(data); + readPage(i + 1); + }); + } + else { + Logger_1.Log('info', "Loaded " + Object.keys(instance.pages).length + " page(s)"); + if (Object.keys(instance.pages).length > 0) + callback(); + else { + instance.create('First page', callback); + } + } + })(); + }); + }; + PageManager.prototype.create = function (pageName, callback) { + var existingPageIDs = Object.keys(this.pages); + var pageID = Undecked.generateRandom(4, function (testrandom) { + return !existingPageIDs.includes(testrandom); + }, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'); + this.pages[pageID] = new PageClass({ + pageID: pageID, + name: pageName + " (" + pageID + ")", + keys: { + '0': { '0': { state: { type: 'pageup' } } }, + '1': { '0': { state: { type: 'currentpage' } } }, + '2': { '0': { state: { type: 'pagedown' } } } + } + }); + if (!this.order.includes(pageID)) + this.order.push(pageID); + Undecked.SocketServer.broadcastTo('home', 'pagelist', this.getNames()); + this.pages[pageID].save(function () { + Logger_1.Log('info', "Page " + pageID + " has been created"); + if (callback) + callback(); + }); + }; + PageManager.prototype.exists = function (pageID) { + return this.pages[pageID] != undefined; + }; + PageManager.prototype.get = function (pageID) { + if (this.exists(pageID)) + return this.pages[pageID]; + return null; + }; + PageManager.prototype.getAll = function () { + return this.pages; + }; + PageManager.prototype.getIdByIndex = function (index) { + var ids = this.order; + if (ids[index]) + return ids[index]; + return null; + }; + PageManager.prototype.getIndexById = function (id) { + var ids = this.order; + if (ids.includes(id)) + return ids.indexOf(id); + return null; + }; + PageManager.prototype.getNames = function () { + var order = this.getOrder(); + var names = []; + for (var i = 0; i < order.length; i++) { + if (this.pages[order[i]] != undefined) { + var page = this.pages[order[i]]; + names.push({ pageID: order[i], name: page.name }); + } + } + return names; + }; + PageManager.prototype.getOrder = function () { + var hasChanges = false; + for (var pageID in this.pages) { + if (!this.order.includes(pageID)) { + this.order.push(pageID); + hasChanges = true; + } + } + for (var i = 0; i < this.order.length; i++) { + if (this.pages[this.order[i]] == undefined) { + this.order.splice(i, 1); + i--; + hasChanges = true; + } + } + if (hasChanges) + this.saveConfig(); + return this.order; + }; + PageManager.prototype.setOrder = function (order) { + var newOrder = []; + for (var i = 0; i < order.length; i++) + if (this.exists(order[i])) + newOrder.push(order[i]); + for (var pageID in this.pages) + if (!newOrder.includes(pageID)) + newOrder.push(pageID); + this.order = newOrder; + for (var serialNumber in Undecked.Decks.decks) + Undecked.Decks.decks[serialNumber].updateAll(); + Undecked.SocketServer.broadcastTo('home', 'pagelist', this.getNames()); + this.saveConfig(); + }; + PageManager.prototype.handleOperation = function (operation, originPageID, originX, originY, destinationPageID, destinationX, destinationY) { + var _this = this; + var findKey = function (pageID, x, y) { + if (_this.exists(pageID)) { + return _this.get(pageID).getKey(x, y); + } + return null; + }; + var setKey = function (pageID, x, y, key, force) { + if (force === void 0) { force = false; } + if (_this.exists(pageID)) { + return _this.get(pageID).updateKey(x, y, key, '-1', null, force); + } + return null; + }; + var newKey = function () { + return { + state: { type: 'empty', confirm: false, toggle: false }, + appearence: {}, + actions: { down: {}, up: {}, latch: {}, unlatch: {} }, + id: Undecked.Pages.KeyManager.generateNew() + }; + }; + var originKey = findKey(originPageID, originX, originY); + var destinationKey = findKey(destinationPageID, destinationX, destinationY); + var originKeyClone = JSON.parse(JSON.stringify(originKey)); + if (originKey && originKey.state.type == 'custom') { + switch (operation) { + case 'copy': + //FIXME: For some reason it doesnt copy the actions + if (destinationKey) { + var destinationKeyID = destinationKey.id; + var actions = originKeyClone.actions; + for (var actionsCategory in actions) { + for (var actionID in actions[actionsCategory]) { + actions[actionsCategory][actionID].id = Undecked.generateRandom(8, function (checkValid) { + return actions[actionsCategory][actionID] == undefined; + }); + } + } + setKey(destinationPageID, destinationX, destinationY, __assign(__assign({}, originKey), { actions: actions, id: destinationKeyID }), true); + } + break; + case 'cut': + if (destinationKey) { + setKey(originPageID, originX, originY, newKey(), true); + setKey(destinationPageID, destinationX, destinationY, originKeyClone, true); + } + break; + case 'ghost': + if (destinationKey) { + var originKeyID = originKey.id; + var destinationKeyID = destinationKey.id; + setKey(destinationPageID, destinationX, destinationY, { + id: destinationKeyID, + appearence: {}, + state: { + type: 'ghost', + toggle: false, + confirm: false, + masterID: originKeyID + }, + actions: { + up: {}, + down: {}, + latch: {}, + unlatch: {} + } + }, true); + if (originKey.state.ghostIDs == undefined) + originKey.state.ghostIDs = []; + originKey.state.ghostIDs.push(destinationKeyID); + } + break; + case 'delete': + setKey(originPageID, originX, originY, newKey(), true); + break; + } + } + }; + return PageManager; +}()); +exports.PageManager = PageManager; +var defaultPageConfig = { + order: [] +}; +//# sourceMappingURL=PageManager.js.map \ No newline at end of file diff --git a/Backend/dist/Pages/PageManager.js.map b/Backend/dist/Pages/PageManager.js.map new file mode 100644 index 0000000..c481a3a --- /dev/null +++ b/Backend/dist/Pages/PageManager.js.map @@ -0,0 +1 @@ +{"version":3,"file":"PageManager.js","sourceRoot":"","sources":["../../src/Pages/PageManager.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/SocketServer.js b/Backend/dist/SocketServer.js new file mode 100644 index 0000000..bc28b79 --- /dev/null +++ b/Backend/dist/SocketServer.js @@ -0,0 +1,323 @@ +var __spreadArray = (this && this.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +exports.__esModule = true; +exports.SocketServer = void 0; +var Logger_1 = require("./Logger"); +var SocketServer = /** @class */ (function () { + function SocketServer() { + } + SocketServer.prototype.start = function (server, callback) { + Logger_1.Log('info', 'Preparing SocketServer'); + this.io = require('socket.io')(server); + this.listeners(); + var port = Config.ports.http; + server.listen(port, function () { + Logger_1.Log('info', "WebServer & SocketServer running at port " + port); + callback(); + }); + }; + SocketServer.prototype.listeners = function () { + this.io.on('connection', function (socket) { + Logger_1.Log('info', 'Client connected'); + socket.on('init', function (page) { + if ([ + 'home' + ].includes(page)) { + socket.join(page); + switch (page) { + case 'home': + socket.emit('quality', Undecked.quality); + socket.emit('pagelist', Undecked.Pages.getNames()); + break; + } + } + }); + socket.on('page', function (query) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + switch (query) { + case 'request': + var pageID = args[0]; + var callback = args[1]; + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + callback(null, page["export"]()); + } + else + callback('Page does not exist.'); + break; + case 'setname': + var pageID = args[0]; + var newName = args[1]; + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + page.setName(newName); + } + break; + case 'setkey': + var pageID = args[0]; + var x = args[1]; + var y = args[2]; + var key = args[3]; + var responseToken = args[4]; + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + page.updateKey(x, y, key, responseToken); + } + break; + case 'getkey': + var pageID = args[0]; + var x = args[1]; + var y = args[2]; + var getkey_callback = args[3]; + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + if (page.hasKey(x, y)) + getkey_callback(page.requestKey(x, y)); + } + break; + case 'executekey': + var pageID = args[0]; + var x = args[1]; + var y = args[2]; + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + if (page.hasKey(x, y)) { + if (page.getKey(x, y).actions != undefined && + page.getKey(x, y).actions.up != undefined) { + Undecked.Integrations.executeActions(page.getKey(x, y).actions.up, null); + } + } + } + break; + case 'create': + var pageName = args[0]; + Undecked.Pages.create(pageName, function () { + return Undecked.SocketServer.broadcastTo('home', 'pagelist', Undecked.Pages.getNames()); + }); + break; + case 'setorder': + var order = args[0]; + if (typeof order.includes == 'function') + Undecked.Pages.setOrder(order); + break; + case 'operation': + var operation = args[0]; + var originPageID = args[1]; + var originX = args[2]; + var originY = args[3]; + var destinationPageID = args[4]; + var destinationX = args[5]; + var destinationY = args[6]; + Undecked.Pages.handleOperation(operation, originPageID, originX, originY, destinationPageID, destinationX, destinationY); + break; + } + }); + socket.on('actioneditor', function (query) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + switch (query) { + case 'start': + var settings = args[0]; + var callback = args[1]; + var pageID = settings.pageID; + var keyX = settings.keyX; + var keyY = settings.keyY; + var start = function () { + var response = Undecked.Integrations.startEditor(settings); + callback(response.error, response.actionEditorID); + }; + var page = Undecked.Pages.get(pageID); + if (page && page.hasKey(keyX, keyY)) { + var key = page.getKey(keyX, keyY); + if (key.state != undefined && key.state.type == 'ghost') { + if (key.state.masterID != undefined) { + var masterLocation = Undecked.Pages.KeyManager.getLocation(key.state.masterID); + var masterPage = Undecked.Pages.get(masterLocation.pageID); + if (masterPage) { + var masterKey = masterPage.getKey(masterLocation.x, masterLocation.y); + if (masterKey.state != undefined && + masterKey.state.ghostIDs != undefined && + masterKey.state.ghostIDs.includes(key.id)) { + settings.pageID = masterLocation.pageID; + settings.keyX = masterLocation.x; + settings.keyY = masterLocation.y; + start(); + } + } + } + } + else + start(); + } + break; + case 'remove': + var pageID = args[0]; + var x = args[1]; + var y = args[2]; + var actionInstanceID = args[3]; + var type = args[4]; + var remove = function (key) { + if (key.actions != undefined && key.actions[type] != undefined) { + if (key.actions[type][actionInstanceID] != undefined) { + delete key.actions[type][actionInstanceID]; + page.save(); + } + } + }; + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + if (page.hasKey(x, y)) { + var key = page.getKey(x, y); + if (key.state != undefined && key.state.type == 'ghost') { + if (key.state.masterID != undefined) { + var masterLocation = Undecked.Pages.KeyManager.getLocation(key.state.masterID); + var masterPage = Undecked.Pages.get(masterLocation.pageID); + if (masterPage) { + var masterKey = masterPage.getKey(masterLocation.x, masterLocation.y); + if (masterKey.state != undefined && + masterKey.state.ghostIDs != undefined && + masterKey.state.ghostIDs.includes(key.id)) + remove(masterKey); + } + } + } + else + remove(key); + } + } + break; + case 'create': + var pageID = args[0]; + var x = args[1]; + var y = args[2]; + var createtype = args[3]; + var integrationID = args[4]; + var actionID = args[5]; + var createCallback = args[6]; + var create = function (key) { + if (key.actions == undefined) + key.actions = { up: {}, down: {}, latch: {}, unlatch: {} }; + if (key.actions[createtype] == undefined) + key.actions[createtype] = {}; + var newActionInstanceID = Undecked.generateRandom(8, function (checkValid) { + return key.actions[createtype][checkValid] == undefined; + }); + key.actions[createtype][newActionInstanceID] = { + integrationID: integrationID, + actionID: actionID, + actionInstanceID: newActionInstanceID, + properties: {}, + logs: [] + }; + createCallback(key.actions[createtype][newActionInstanceID]); + }; + if (Undecked.Integrations.exists(integrationID)) { + var integration = Undecked.Integrations.get(integrationID); + if (integration.api.hasAction(actionID)) { + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + if (page.hasKey(x, y)) { + var key = page.getKey(x, y); + if (key.state != undefined && key.state.type == 'ghost') { + if (key.state.masterID != undefined) { + var masterLocation = Undecked.Pages.KeyManager.getLocation(key.state.masterID); + var masterPage = Undecked.Pages.get(masterLocation.pageID); + if (masterPage) { + var masterKey = masterPage.getKey(masterLocation.x, masterLocation.y); + if (masterKey.state != undefined && + masterKey.state.ghostIDs != undefined && + masterKey.state.ghostIDs.includes(key.id)) + create(masterKey); + } + } + } + else + create(key); + } + } + } + } + break; + case 'instance': + var actionEditorID = args[0]; + var instanceQuery = args[1]; + if (Undecked.Integrations.editorExists(actionEditorID)) { + var EditorWrapper = Undecked.Integrations.getEditor(actionEditorID); + switch (instanceQuery) { + case 'ready': + EditorWrapper.ready(); + break; + case 'fields': + var fields = args[2]; + if (typeof EditorWrapper.editor._change == 'function') + EditorWrapper.editor._change(fields); + break; + case 'close': + EditorWrapper.destroy(); + break; + } + } + break; + } + }); + socket.on('connections', function (query) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + switch (query) { + case 'request': + var integrationID = args[0]; + var connectionType = args[1]; + var requestCallback = args[2]; + var fields = Undecked.Connections.getConnectionRequestData(integrationID, connectionType); + requestCallback(fields); + break; + case 'create': + var integrationID = args[0]; + var connectionType = args[1]; + var properties = args[2]; + var createCallback = args[3]; + Undecked.Connections.create(integrationID, connectionType, properties, createCallback); + break; + default: + break; + } + }); + }); + }; + SocketServer.prototype.broadcastTo = function (group, header) { + var _a; + var args = []; + for (var _i = 2; _i < arguments.length; _i++) { + args[_i - 2] = arguments[_i]; + } + if (this.io) + (_a = this.io.to(group)).emit.apply(_a, __spreadArray([header], args)); + }; + SocketServer.prototype.broadcast = function (header) { + var _a; + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + if (this.io) + (_a = this.io).emit.apply(_a, __spreadArray([header], args)); + }; + return SocketServer; +}()); +exports.SocketServer = SocketServer; +// export interface SocketServer { +// start: (server: Server, callback: () => void) => void; +// broadcastTo: (group: string, header: string, ...args: any[]) => void; +// broadcast: (header: string, ...args: any[]) => void; +// } +//# sourceMappingURL=SocketServer.js.map \ No newline at end of file diff --git a/Backend/dist/SocketServer.js.map b/Backend/dist/SocketServer.js.map new file mode 100644 index 0000000..38c7ce1 --- /dev/null +++ b/Backend/dist/SocketServer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"SocketServer.js","sourceRoot":"","sources":["../src/SocketServer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/WebServer.js b/Backend/dist/WebServer.js new file mode 100644 index 0000000..2b2986b --- /dev/null +++ b/Backend/dist/WebServer.js @@ -0,0 +1,72 @@ +exports.__esModule = true; +exports.WebServer = void 0; +var Logger_1 = require("./Logger"); +var exphbs = require("express-handlebars"); +var Express = require("express"); +var path = require("path"); +var fs_extra_1 = require("fs-extra"); +var WebServer = /** @class */ (function () { + function WebServer() { + this.app = Express(); + var hbs = exphbs.create({ defaultLayout: 'main/index' }); + this.app.engine('handlebars', hbs.engine); + this.app.set('view engine', 'handlebars'); + this.app.set('views', path.join(__filename, '..', '..', '..', 'Frontend', 'pages')); + this.app.set('view options', { layout: 'main/index' }); + var staticDir = path.join(__filename, '..', '..', '..', 'Static'); + this.app.use('/stc', Express.static(staticDir)); + this.app.use('/favicon.ico', Express.static(path.join(staticDir, 'logo', '256.ico'))); + this.app.get([ + '/pd/:pagename/:type', + '/ld/:pagename/:type' + ], function (req, res, next) { + var pagename = req.params.pagename; + var type = req.params.type; + var pagePath = req.url.startsWith('/pd') + ? path.join(__filename, '..', '..', '..', 'Frontend', 'pages', pagename) + : path.join(__filename, '..', '..', '..', 'Frontend', 'pages', 'layouts', pagename); + switch (type) { + case 'style': + var stylePath = path.join(pagePath, 'style.css'); + fs_extra_1.pathExists(stylePath, function (err, exists) { + if (exists == true) + res.sendFile(stylePath); + else + next(); + }); + break; + case 'script': + var stylePath = path.join(pagePath, 'script.js'); + fs_extra_1.pathExists(stylePath, function (err, exists) { + if (exists == true) + res.sendFile(stylePath); + else + next(); + }); + break; + default: + next(); + break; + } + }); + this.app.get('/*', function (req, res) { + res.render('home', { + icons: Undecked.Icons.getList(), + actions: Undecked.Integrations.getActions(), + connections: Undecked.Integrations.getConnections(), + connected: Undecked.Connections.getList() + }); + }); + } + WebServer.prototype.start = function (callback) { + Logger_1.Log('info', 'Preparing WebServer'); + var server = require('http').Server(this.app); + callback(server); + }; + return WebServer; +}()); +exports.WebServer = WebServer; +// export interface WebServer { +// start: (callback: (server: Server) => void) => void; +// } +//# sourceMappingURL=WebServer.js.map \ No newline at end of file diff --git a/Backend/dist/WebServer.js.map b/Backend/dist/WebServer.js.map new file mode 100644 index 0000000..c74d013 --- /dev/null +++ b/Backend/dist/WebServer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"WebServer.js","sourceRoot":"","sources":["../src/WebServer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/dist/WebSocket.js b/Backend/dist/WebSocket.js new file mode 100644 index 0000000..586ceb1 --- /dev/null +++ b/Backend/dist/WebSocket.js @@ -0,0 +1,284 @@ +import { Log } from './Logger'; +module.exports = new class WebSocket { + constructor() { } + start(server, callback) { + Log('info', 'Preparing WebSocket'); + this.io = require('socket.io')(server); + this.listeners(); + var port = Config.ports.http; + server.listen(port, () => { + Log('info', `WebServer & WebSocket running at port ${port}`); + callback(); + }); + } + listeners() { + this.io.on('connection', (socket) => { + Log('info', 'Client connected'); + socket.on('init', (page) => { + if ([ + 'home' + ].includes(page)) { + socket.join(page); + switch (page) { + case 'home': + socket.emit('quality', Undecked.quality); + socket.emit('pagelist', Undecked.Pages.getNames()); + break; + } + } + }); + socket.on('page', (query, ...args) => { + switch (query) { + case 'request': + var pageID = args[0]; + var callback = args[1]; + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + callback(null, page.export()); + } + else + callback('Page does not exist.'); + break; + case 'setname': + var pageID = args[0]; + var newName = args[1]; + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + page.setName(newName); + } + break; + case 'setkey': + var pageID = args[0]; + var x = args[1]; + var y = args[2]; + var key = args[3]; + var responseToken = args[4]; + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + page.updateKey(x, y, key, responseToken); + } + break; + case 'getkey': + var pageID = args[0]; + var x = args[1]; + var y = args[2]; + var getkey_callback = args[3]; + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + if (page.hasKey(x, y)) + getkey_callback(page.requestKey(x, y)); + } + break; + case 'executekey': + var pageID = args[0]; + var x = args[1]; + var y = args[2]; + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + if (page.hasKey(x, y)) { + if (page.getKey(x, y).actions != undefined && + page.getKey(x, y).actions.up != undefined) { + Undecked.Integrations.executeActions(page.getKey(x, y).actions.up, null); + } + } + } + break; + case 'create': + var pageName = args[0]; + Undecked.Pages.create(pageName, () => Undecked.WebSocket.broadcastTo('home', 'pagelist', Undecked.Pages.getNames())); + break; + case 'setorder': + var order = args[0]; + if (typeof order.includes == 'function') + Undecked.Pages.setOrder(order); + break; + case 'operation': + var operation = args[0]; + var originPageID = args[1]; + var originX = args[2]; + var originY = args[3]; + var destinationPageID = args[4]; + var destinationX = args[5]; + var destinationY = args[6]; + Undecked.Pages.handleOperation(operation, originPageID, originX, originY, destinationPageID, destinationX, destinationY); + break; + } + }); + socket.on('actioneditor', (query, ...args) => { + switch (query) { + case 'start': + var settings = args[0]; + var callback = args[1]; + var pageID = settings.pageID; + var keyX = settings.keyX; + var keyY = settings.keyY; + var start = () => { + var response = Undecked.Integrations.startEditor(settings); + callback(response.error, response.actionEditorID); + }; + var page = Undecked.Pages.get(pageID); + if (page && page.hasKey(keyX, keyY)) { + var key = page.getKey(keyX, keyY); + if (key.state != undefined && key.state.type == 'ghost') { + if (key.state.masterID != undefined) { + var masterLocation = Undecked.Pages.KeyManager.getLocation(key.state.masterID); + var masterPage = Undecked.Pages.get(masterLocation.pageID); + if (masterPage) { + var masterKey = masterPage.getKey(masterLocation.x, masterLocation.y); + if (masterKey.state != undefined && + masterKey.state.ghostIDs != undefined && + masterKey.state.ghostIDs.includes(key.id)) { + settings.pageID = masterLocation.pageID; + settings.keyX = masterLocation.x; + settings.keyY = masterLocation.y; + start(); + } + } + } + } + else + start(); + } + break; + case 'remove': + var pageID = args[0]; + var x = args[1]; + var y = args[2]; + var actionInstanceID = args[3]; + var type = args[4]; + var remove = (key) => { + if (key.actions != undefined && key.actions[type] != undefined) { + if (key.actions[type][actionInstanceID] != undefined) { + delete key.actions[type][actionInstanceID]; + page.save(); + } + } + }; + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + if (page.hasKey(x, y)) { + var key = page.getKey(x, y); + if (key.state != undefined && key.state.type == 'ghost') { + if (key.state.masterID != undefined) { + var masterLocation = Undecked.Pages.KeyManager.getLocation(key.state.masterID); + var masterPage = Undecked.Pages.get(masterLocation.pageID); + if (masterPage) { + var masterKey = masterPage.getKey(masterLocation.x, masterLocation.y); + if (masterKey.state != undefined && + masterKey.state.ghostIDs != undefined && + masterKey.state.ghostIDs.includes(key.id)) + remove(masterKey); + } + } + } + else + remove(key); + } + } + break; + case 'create': + var pageID = args[0]; + var x = args[1]; + var y = args[2]; + var createtype = args[3]; + var integrationID = args[4]; + var actionID = args[5]; + var createCallback = args[6]; + var create = (key) => { + if (key.actions == undefined) + key.actions = { up: {}, down: {}, latch: {}, unlatch: {} }; + if (key.actions[createtype] == undefined) + key.actions[createtype] = {}; + var newActionInstanceID = Undecked.generateRandom(8, (checkValid) => { + return key.actions[createtype][checkValid] == undefined; + }); + key.actions[createtype][newActionInstanceID] = { + integrationID, + actionID, + actionInstanceID: newActionInstanceID, + properties: {}, + logs: [] + }; + createCallback(key.actions[createtype][newActionInstanceID]); + }; + if (Undecked.Integrations.exists(integrationID)) { + var integration = Undecked.Integrations.get(integrationID); + if (integration.api.hasAction(actionID)) { + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + if (page.hasKey(x, y)) { + var key = page.getKey(x, y); + if (key.state != undefined && key.state.type == 'ghost') { + if (key.state.masterID != undefined) { + var masterLocation = Undecked.Pages.KeyManager.getLocation(key.state.masterID); + var masterPage = Undecked.Pages.get(masterLocation.pageID); + if (masterPage) { + var masterKey = masterPage.getKey(masterLocation.x, masterLocation.y); + if (masterKey.state != undefined && + masterKey.state.ghostIDs != undefined && + masterKey.state.ghostIDs.includes(key.id)) + create(masterKey); + } + } + } + else + create(key); + } + } + } + } + break; + case 'instance': + var actionEditorID = args[0]; + var instanceQuery = args[1]; + if (Undecked.Integrations.editorExists(actionEditorID)) { + var EditorWrapper = Undecked.Integrations.getEditor(actionEditorID); + switch (instanceQuery) { + case 'ready': + EditorWrapper.ready(); + break; + case 'fields': + var fields = args[2]; + if (typeof EditorWrapper.editor._change == 'function') + EditorWrapper.editor._change(fields); + break; + case 'close': + EditorWrapper.destroy(); + break; + } + } + break; + } + }); + socket.on('connections', (query, ...args) => { + switch (query) { + case 'request': + var integrationID = args[0]; + var connectionType = args[1]; + var requestCallback = args[2]; + var fields = Undecked.Connections.getConnectionRequestData(integrationID, connectionType); + requestCallback(fields); + break; + case 'create': + var integrationID = args[0]; + var connectionType = args[1]; + var properties = args[2]; + var createCallback = args[3]; + Undecked.Connections.create(integrationID, connectionType, properties, createCallback); + break; + default: + break; + } + }); + }); + } + broadcastTo(group, header, ...args) { + if (this.io) + this.io.to(group).emit(header, ...args); + } + broadcast(header, ...args) { + if (this.io) + this.io.emit(header, ...args); + } +}(); +//# sourceMappingURL=WebSocket.js.map \ No newline at end of file diff --git a/Backend/dist/WebSocket.js.map b/Backend/dist/WebSocket.js.map new file mode 100644 index 0000000..f72c956 --- /dev/null +++ b/Backend/dist/WebSocket.js.map @@ -0,0 +1 @@ +{"version":3,"file":"WebSocket.js","sourceRoot":"","sources":["../src/WebSocket.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Backend/package-lock.json b/Backend/package-lock.json new file mode 100644 index 0000000..bb9b3c9 --- /dev/null +++ b/Backend/package-lock.json @@ -0,0 +1,6573 @@ +{ + "name": "undecked", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "undecked", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@elgato-stream-deck/node": "^5.3.1", + "@meesvdw/coloredconsole": "^1.0.3", + "@types/express": "^4.17.13", + "@types/fs-extra": "^9.0.13", + "@types/node-osc": "^6.0.0", + "atem-connection": "^3.0.0", + "axios": "^0.26.1", + "bonjour": "^3.5.0", + "canvas": "^2.9.1", + "express": "^4.17.3", + "express-handlebars": "^6.0.4", + "fs-extra": "^10.0.1", + "hyperdeck-js-lib": "^1.7.0", + "jimp": "^0.16.1", + "node-osc": "^8.0.6", + "open": "^8.4.0", + "pjlink": "^0.2.8", + "socket.io": "^4.4.1", + "studiomonitor-api": "^2.4.1", + "visca-over-ip": "^1.0.4" + }, + "devDependencies": { + "@types/node": "^17.0.23" + } + }, + "node_modules/@babel/runtime": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", + "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@elgato-stream-deck/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@elgato-stream-deck/core/-/core-5.5.0.tgz", + "integrity": "sha512-WcybmRfV/XInPUj+oTI9hPljqYr1lLDDfItXlNNlaQVezP4103sdCvCCNRh+InvhtAMbprMnIDhlCxCTjE0hCw==", + "dependencies": { + "eventemitter3": "^4.0.7", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=12.18" + } + }, + "node_modules/@elgato-stream-deck/node": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@elgato-stream-deck/node/-/node-5.5.0.tgz", + "integrity": "sha512-2nlhSTNtNFJCJHAcRYodxoCLBO3aylVqCMS5U15S/EJqnr4+HsReSYRaHsDhDXtdqPBoE7C1126IwWp5sJphyQ==", + "dependencies": { + "@elgato-stream-deck/core": "5.5.0", + "jpeg-js": "^0.4.2", + "node-hid": "^2.1.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=12.18" + }, + "peerDependencies": { + "@julusian/jpeg-turbo": "^1.1.2 || ^2.0.0-0" + } + }, + "node_modules/@jimp/bmp": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.16.1.tgz", + "integrity": "sha512-iwyNYQeBawrdg/f24x3pQ5rEx+/GwjZcCXd3Kgc+ZUd+Ivia7sIqBsOnDaMZdKCBPlfW364ekexnlOqyVa0NWg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "bmp-js": "^0.1.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/core": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.16.1.tgz", + "integrity": "sha512-la7kQia31V6kQ4q1kI/uLimu8FXx7imWVajDGtwUG8fzePLWDFJyZl0fdIXVCL1JW2nBcRHidUot6jvlRDi2+g==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + } + }, + "node_modules/@jimp/custom": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.16.1.tgz", + "integrity": "sha512-DNUAHNSiUI/j9hmbatD6WN/EBIyeq4AO0frl5ETtt51VN1SvE4t4v83ZA/V6ikxEf3hxLju4tQ5Pc3zmZkN/3A==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.16.1" + } + }, + "node_modules/@jimp/gif": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.16.1.tgz", + "integrity": "sha512-r/1+GzIW1D5zrP4tNrfW+3y4vqD935WBXSc8X/wm23QTY9aJO9Lw6PEdzpYCEY+SOklIFKaJYUAq/Nvgm/9ryw==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "gifwrap": "^0.9.2", + "omggif": "^1.0.9" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/jpeg": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.16.1.tgz", + "integrity": "sha512-8352zrdlCCLFdZ/J+JjBslDvml+fS3Z8gttdml0We759PnnZGqrnPRhkOEOJbNUlE+dD4ckLeIe6NPxlS/7U+w==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "jpeg-js": "0.4.2" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/jpeg/node_modules/jpeg-js": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.2.tgz", + "integrity": "sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw==" + }, + "node_modules/@jimp/plugin-blit": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.16.1.tgz", + "integrity": "sha512-fKFNARm32RoLSokJ8WZXHHH2CGzz6ire2n1Jh6u+XQLhk9TweT1DcLHIXwQMh8oR12KgjbgsMGvrMVlVknmOAg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-blur": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.16.1.tgz", + "integrity": "sha512-1WhuLGGj9MypFKRcPvmW45ht7nXkOKu+lg3n2VBzIB7r4kKNVchuI59bXaCYQumOLEqVK7JdB4glaDAbCQCLyw==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-circle": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.16.1.tgz", + "integrity": "sha512-JK7yi1CIU7/XL8hdahjcbGA3V7c+F+Iw+mhMQhLEi7Q0tCnZ69YJBTamMiNg3fWPVfMuvWJJKOBRVpwNTuaZRg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-color": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.16.1.tgz", + "integrity": "sha512-9yQttBAO5SEFj7S6nJK54f+1BnuBG4c28q+iyzm1JjtnehjqMg6Ljw4gCSDCvoCQ3jBSYHN66pmwTV74SU1B7A==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "tinycolor2": "^1.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-contain": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.16.1.tgz", + "integrity": "sha512-44F3dUIjBDHN+Ym/vEfg+jtjMjAqd2uw9nssN67/n4FdpuZUVs7E7wadKY1RRNuJO+WgcD5aDQcsvurXMETQTg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-cover": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.16.1.tgz", + "integrity": "sha512-YztWCIldBAVo0zxcQXR+a/uk3/TtYnpKU2CanOPJ7baIuDlWPsG+YE4xTsswZZc12H9Kl7CiziEbDtvF9kwA/Q==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-crop": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.16.1.tgz", + "integrity": "sha512-UQdva9oQzCVadkyo3T5Tv2CUZbf0klm2cD4cWMlASuTOYgaGaFHhT9st+kmfvXjKL8q3STkBu/zUPV6PbuV3ew==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-displace": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.16.1.tgz", + "integrity": "sha512-iVAWuz2+G6Heu8gVZksUz+4hQYpR4R0R/RtBzpWEl8ItBe7O6QjORAkhxzg+WdYLL2A/Yd4ekTpvK0/qW8hTVw==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-dither": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.16.1.tgz", + "integrity": "sha512-tADKVd+HDC9EhJRUDwMvzBXPz4GLoU6s5P7xkVq46tskExYSptgj5713J5Thj3NMgH9Rsqu22jNg1H/7tr3V9Q==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-fisheye": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.1.tgz", + "integrity": "sha512-BWHnc5hVobviTyIRHhIy9VxI1ACf4CeSuCfURB6JZm87YuyvgQh5aX5UDKtOz/3haMHXBLP61ZBxlNpMD8CG4A==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-flip": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.16.1.tgz", + "integrity": "sha512-KdxTf0zErfZ8DyHkImDTnQBuHby+a5YFdoKI/G3GpBl3qxLBvC+PWkS2F/iN3H7wszP7/TKxTEvWL927pypT0w==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-rotate": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-gaussian": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.1.tgz", + "integrity": "sha512-u9n4wjskh3N1mSqketbL6tVcLU2S5TEaFPR40K6TDv4phPLZALi1Of7reUmYpVm8mBDHt1I6kGhuCJiWvzfGyg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-invert": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.16.1.tgz", + "integrity": "sha512-2DKuyVXANH8WDpW9NG+PYFbehzJfweZszFYyxcaewaPLN0GxvxVLOGOPP1NuUTcHkOdMFbE0nHDuB7f+sYF/2w==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-mask": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.16.1.tgz", + "integrity": "sha512-snfiqHlVuj4bSFS0v96vo2PpqCDMe4JB+O++sMo5jF5mvGcGL6AIeLo8cYqPNpdO6BZpBJ8MY5El0Veckhr39Q==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-normalize": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.16.1.tgz", + "integrity": "sha512-dOQfIOvGLKDKXPU8xXWzaUeB0nvkosHw6Xg1WhS1Z5Q0PazByhaxOQkSKgUryNN/H+X7UdbDvlyh/yHf3ITRaw==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-print": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.16.1.tgz", + "integrity": "sha512-ceWgYN40jbN4cWRxixym+csyVymvrryuKBQ+zoIvN5iE6OyS+2d7Mn4zlNgumSczb9GGyZZESIgVcBDA1ezq0Q==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "load-bmfont": "^1.4.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-resize": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.16.1.tgz", + "integrity": "sha512-u4JBLdRI7dargC04p2Ha24kofQBk3vhaf0q8FwSYgnCRwxfvh2RxvhJZk9H7Q91JZp6wgjz/SjvEAYjGCEgAwQ==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-rotate": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.16.1.tgz", + "integrity": "sha512-ZUU415gDQ0VjYutmVgAYYxC9Og9ixu2jAGMCU54mSMfuIlmohYfwARQmI7h4QB84M76c9hVLdONWjuo+rip/zg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-scale": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.16.1.tgz", + "integrity": "sha512-jM2QlgThIDIc4rcyughD5O7sOYezxdafg/2Xtd1csfK3z6fba3asxDwthqPZAgitrLgiKBDp6XfzC07Y/CefUw==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-shadow": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.16.1.tgz", + "integrity": "sha512-MeD2Is17oKzXLnsphAa1sDstTu6nxscugxAEk3ji0GV1FohCvpHBcec0nAq6/czg4WzqfDts+fcPfC79qWmqrA==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blur": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-threshold": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.16.1.tgz", + "integrity": "sha512-iGW8U/wiCSR0+6syrPioVGoSzQFt4Z91SsCRbgNKTAk7D+XQv6OI78jvvYg4o0c2FOlwGhqz147HZV5utoSLxA==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-color": ">=0.8.0", + "@jimp/plugin-resize": ">=0.8.0" + } + }, + "node_modules/@jimp/plugins": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.16.1.tgz", + "integrity": "sha512-c+lCqa25b+4q6mJZSetlxhMoYuiltyS+ValLzdwK/47+aYsq+kcJNl+TuxIEKf59yr9+5rkbpsPkZHLF/V7FFA==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.16.1", + "@jimp/plugin-blur": "^0.16.1", + "@jimp/plugin-circle": "^0.16.1", + "@jimp/plugin-color": "^0.16.1", + "@jimp/plugin-contain": "^0.16.1", + "@jimp/plugin-cover": "^0.16.1", + "@jimp/plugin-crop": "^0.16.1", + "@jimp/plugin-displace": "^0.16.1", + "@jimp/plugin-dither": "^0.16.1", + "@jimp/plugin-fisheye": "^0.16.1", + "@jimp/plugin-flip": "^0.16.1", + "@jimp/plugin-gaussian": "^0.16.1", + "@jimp/plugin-invert": "^0.16.1", + "@jimp/plugin-mask": "^0.16.1", + "@jimp/plugin-normalize": "^0.16.1", + "@jimp/plugin-print": "^0.16.1", + "@jimp/plugin-resize": "^0.16.1", + "@jimp/plugin-rotate": "^0.16.1", + "@jimp/plugin-scale": "^0.16.1", + "@jimp/plugin-shadow": "^0.16.1", + "@jimp/plugin-threshold": "^0.16.1", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/png": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.16.1.tgz", + "integrity": "sha512-iyWoCxEBTW0OUWWn6SveD4LePW89kO7ZOy5sCfYeDM/oTPLpR8iMIGvZpZUz1b8kvzFr27vPst4E5rJhGjwsdw==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "pngjs": "^3.3.3" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/tiff": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.16.1.tgz", + "integrity": "sha512-3K3+xpJS79RmSkAvFMgqY5dhSB+/sxhwTFA9f4AVHUK0oKW+u6r52Z1L0tMXHnpbAdR9EJ+xaAl2D4x19XShkQ==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "utif": "^2.0.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.16.1.tgz", + "integrity": "sha512-g1w/+NfWqiVW4CaXSJyD28JQqZtm2eyKMWPhBBDCJN9nLCN12/Az0WFF3JUAktzdsEC2KRN2AqB1a2oMZBNgSQ==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.16.1", + "@jimp/gif": "^0.16.1", + "@jimp/jpeg": "^0.16.1", + "@jimp/png": "^0.16.1", + "@jimp/tiff": "^0.16.1", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/utils": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.16.1.tgz", + "integrity": "sha512-8fULQjB0x4LzUSiSYG6ZtQl355sZjxbv8r9PPAuYHzS9sGiSHJQavNqK/nKnpDsVkU88/vRGcE7t3nMU0dEnVw==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "regenerator-runtime": "^0.13.3" + } + }, + "node_modules/@julusian/freetype2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@julusian/freetype2/-/freetype2-1.0.0.tgz", + "integrity": "sha512-vdwnk1OrBLGgglqEdAZHkUCQXN2casoVhMQmEz4BVF7eABwR2sF8dd1QctTl3wBkSqPa2WV9fo+1ko6ughzhKQ==", + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^4.3.0", + "node-gyp-build": "^4.4.0" + }, + "engines": { + "node": ">=12.17" + } + }, + "node_modules/@julusian/freetype2/node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + }, + "node_modules/@julusian/jpeg-turbo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@julusian/jpeg-turbo/-/jpeg-turbo-2.0.0.tgz", + "integrity": "sha512-POmnPuLIyUVUbOJvz7Qb55fCPZIsQFMB4aDQ40cc/1+R5W+lokEmrjP7FiNdaRvBv/UdTKgnWEsB0lQK5TRNlw==", + "hasInstallScript": true, + "peer": true, + "dependencies": { + "cmake-js": "7.0.0-3", + "node-addon-api": "^5.0.0", + "pkg-prebuilds": "~0.1.0" + }, + "engines": { + "node": ">=14.15" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", + "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@meesvdw/coloredconsole": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@meesvdw/coloredconsole/-/coloredconsole-1.0.3.tgz", + "integrity": "sha512-MQQULCqGb6WtDazi49p0qmU4kKDGxkwI2TG5PIa1224aOMLjVFeXqp3f45LkDBTJ59wIUOguTSafmoqv0gI9IQ==" + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "node_modules/@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + }, + "node_modules/@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.30", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz", + "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" + }, + "node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + }, + "node_modules/@types/node-osc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@types/node-osc/-/node-osc-6.0.0.tgz", + "integrity": "sha512-25DwJOFe1KueUZz2oIURT3qCMQ28Jdvy9JqGz8d0mKM1Mlx0agHD9N3S0hMKajVCjw7TGtf3gGjbl5gDCFfIWQ==" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "node_modules/@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/alawmulaw": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/alawmulaw/-/alawmulaw-5.0.2.tgz", + "integrity": "sha512-W3bWBB7MwTNGALlAKbOxe+tMNW9DpqGsv1V1idGPzctnBH++eS+Dx3UuucHNe5nk38WvAuy0sgMAbS5idHCArw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", + "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/atem-connection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/atem-connection/-/atem-connection-3.0.0.tgz", + "integrity": "sha512-jzblesqzIX/NQl+LLsmsCXlwIw7CbvNErPQgGAApt/jtYV+53d+Wl2F4nB6DJTIIX2vhhUvqlDqQbo2k9E6atA==", + "dependencies": { + "@julusian/freetype2": "^1.0.0", + "debug": "^4.3.4", + "eventemitter3": "^4.0.7", + "exit-hook": "^2.2.1", + "nanotimer": "^0.3.15", + "p-lazy": "^3.1.0", + "p-queue": "^6.6.2", + "threadedclass": "^1.0.2", + "tslib": "^2.3.1", + "wavefile": "^8.4.4" + }, + "engines": { + "node": "^14.18 || ^16.14" + } + }, + "node_modules/axios": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", + "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", + "dependencies": { + "follow-redirects": "^1.14.8" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-arraybuffer-es6": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/base64-arraybuffer-es6/-/base64-arraybuffer-es6-0.3.1.tgz", + "integrity": "sha512-TrhBheudYaff9adiTAqjSScjvtmClQ4vF9l4cqkPNkVsA11m4/NRdH4LkZ/tAMmpzzwfI20BXnJ/PTtafECCNA==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/binpack": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/binpack/-/binpack-0.1.0.tgz", + "integrity": "sha512-KcSrsGiIKgklTWweVb9XnZPWO1/rGSsK3fwR7VnbDPbLKPlkvSKd/ZrJ1W712r6HzH5u0fa/AZCftATO09x8Aw==" + }, + "node_modules/bitdepth": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/bitdepth/-/bitdepth-7.0.2.tgz", + "integrity": "sha512-Ed11TL4IIWyUEoQTfkbRBDCgDNurxYzFgmk30ZU6SgNCsysoEx7UMm+g7SDFHxA2lhLbWyjV8T1ab3z0BtYOAw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==" + }, + "node_modules/body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==", + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "node_modules/bonjour/node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + }, + "node_modules/byte-data": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/byte-data/-/byte-data-16.0.3.tgz", + "integrity": "sha512-IzV3mzv8OnnzPdb9CoESQr2ikPX/gkHUesRu+vff9XB7KwMxyflPDewtPFWXPvF+Xukl52ceor2IRLbnQZf3PQ==", + "dependencies": { + "endianness": "^8.0.2", + "ieee754-buffer": "^0.2.1", + "twos-complement-buffer": "0.0.1", + "uint-buffer": "^0.1.0", + "utf8-buffer": "^0.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/canvas": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.9.3.tgz", + "integrity": "sha512-WOUM7ghii5TV2rbhaZkh1youv/vW1/Canev6Yx6BG2W+1S07w8jKZqKkPnbiPpQEDsnJdN8ouDd7OvQEGXDcUw==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.15.0", + "simple-get": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cmake-js": { + "version": "7.0.0-3", + "resolved": "https://registry.npmjs.org/cmake-js/-/cmake-js-7.0.0-3.tgz", + "integrity": "sha512-KUzzCAW1mBP0m8VMRRIoXA3M8v7dJTOkXZhUJbqIcATSPPpZAD6ChPwQOmhcxTgLSS9RjQuf4Bi6GkNYfKWKpg==", + "peer": true, + "dependencies": { + "axios": "^0.27.2", + "debug": "^4", + "fs-extra": "^10.1.0", + "lodash.isplainobject": "^4.0.6", + "memory-stream": "^1.0.0", + "node-api-headers": "^0.0.1", + "npmlog": "^6.0.2", + "rc": "^1.2.7", + "semver": "^7.3.7", + "tar": "^6.1.11", + "url-join": "^4.0.1", + "which": "^2.0.2", + "yargs": "^17.4.1" + }, + "bin": { + "cmake-js": "bin/cmake-js" + }, + "engines": { + "node": ">= 14.15.0" + } + }, + "node_modules/cmake-js/node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "peer": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cmake-js/node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "peer": true, + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/cmake-js/node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "peer": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cmake-js/node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "peer": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" + }, + "node_modules/dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dependencies": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==", + "dependencies": { + "buffer-indexof": "^1.0.0" + } + }, + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/endianness": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/endianness/-/endianness-8.0.2.tgz", + "integrity": "sha512-IU+77+jJ7lpw2qZ3NUuqBZFy3GuioNgXUdsL1L9tooDNTaw0TgOnwNuc+8Ns+haDaTifK97QLzmOANJtI/rGvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/engine.io": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz", + "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", + "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==" + }, + "node_modules/exit-hook": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", + "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-handlebars": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-6.0.6.tgz", + "integrity": "sha512-E4QHYCh+9fyfdBEb8uKJ8p6HD4qq/sUSHBq83lRNlLJp2TQKEg2nFJYbVdC+M3QzaV19dODe43lgjQWVaIpbyQ==", + "dependencies": { + "glob": "^8.0.2", + "graceful-fs": "^4.2.10", + "handlebars": "^4.7.7" + }, + "engines": { + "node": ">=v12.22.9" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/file-type": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", + "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "peer": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gifwrap": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.9.4.tgz", + "integrity": "sha512-MDMwbhASQuVeD4JKd1fKgNgCRL3fGqMM4WaqpNhWO0JiMOAjbQdumbs4BbBZEy9/M00EHEjKN3HieVhCUlwjeQ==", + "dependencies": { + "image-q": "^4.0.0", + "omggif": "^1.0.10" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, + "node_modules/glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hyperdeck-js-lib": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/hyperdeck-js-lib/-/hyperdeck-js-lib-1.7.0.tgz", + "integrity": "sha512-NUNgKlV9EA1B5VoFokdF6nXfQAXrDNosWqW5qxBcFE5VZ3PWgd8zveN9yUbOyC6BxwOUU7RsbJiCVExAiwAy+A==", + "dependencies": { + "js-logger": "^1.2.0", + "promise": "^8.0.1" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ieee754-buffer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ieee754-buffer/-/ieee754-buffer-0.2.1.tgz", + "integrity": "sha512-dDlJhYk8BAmH1HDncTjCt6xOm2+kT+MxGhRKB+mUoF8nocDzPAgZPEWTRI9QgkGvbDkbJgCqyxweGlIV0yhbUQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/imaadpcm": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/imaadpcm/-/imaadpcm-4.1.2.tgz", + "integrity": "sha512-7gwxe6lKCGitmkMtGbm1ecnt0Q59KcWwo7AVi2RAd3lQ9VghVN5zX5x3oK6xNhfD9KUMbaYzku43UBn3Ix3RIA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/image-q": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/image-q/-/image-q-4.0.0.tgz", + "integrity": "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==", + "dependencies": { + "@types/node": "16.9.1" + } + }, + "node_modules/image-q/node_modules/@types/node": { + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz", + "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-running": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-running/-/is-running-2.1.0.tgz", + "integrity": "sha512-mjJd3PujZMl7j+D395WTIO5tU5RIDBfVSRtRR4VOJou3H66E38UjbjvDGh3slJzPuolsb+yQFqwHNNdyp5jg3w==" + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "peer": true + }, + "node_modules/jimp": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.16.1.tgz", + "integrity": "sha512-+EKVxbR36Td7Hfd23wKGIeEyHbxShZDX6L8uJkgVW3ESA9GiTEPK08tG1XI2r/0w5Ch0HyJF5kPqF9K7EmGjaw==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.16.1", + "@jimp/plugins": "^0.16.1", + "@jimp/types": "^0.16.1", + "regenerator-runtime": "^0.13.3" + } + }, + "node_modules/jpeg-js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", + "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==" + }, + "node_modules/js-logger": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/js-logger/-/js-logger-1.6.1.tgz", + "integrity": "sha512-yTgMCPXVjhmg28CuUH8CKjU+cIKL/G+zTu4Fn4lQxs8mRFH/03QTNvEFngcxfg/gRDiQAOoyCKmMTOm9ayOzXA==" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/load-bmfont": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", + "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", + "dependencies": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + } + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "peer": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/memory-stream/-/memory-stream-1.0.0.tgz", + "integrity": "sha512-Wm13VcsPIMdG96dzILfij09PvuS3APtcKNh7M28FsCA/w6+1mjR7hhPmfFNoilX9xU7wTdhsH5lJAm6XNzdtww==", + "peer": true, + "dependencies": { + "readable-stream": "^3.4.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dependencies": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==" + }, + "node_modules/nan": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" + }, + "node_modules/nanotimer": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/nanotimer/-/nanotimer-0.3.15.tgz", + "integrity": "sha512-xj8HcwceqeRbfSuwNIzYhdbyZu3zoiHX3y2cyVB/cLn0RzVCI8ZZVQLZELEUMG2tYEsjqbCLb3b4q1lDC7ENnA==" + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/node-abi": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", + "dependencies": { + "semver": "^5.4.1" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-addon-api": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz", + "integrity": "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==", + "peer": true + }, + "node_modules/node-api-headers": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/node-api-headers/-/node-api-headers-0.0.1.tgz", + "integrity": "sha512-eRxckUSXMRQRV69h+ksfleQzR3BdRwkJuc/Y65KFFwhibC5G1y6wgytYW2WWTB/oG1bt+pf2RwjZDYC0xKqgqQ==", + "peer": true + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp-build": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-hid": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-2.1.1.tgz", + "integrity": "sha512-Skzhqow7hyLZU93eIPthM9yjot9lszg9xrKxESleEs05V2NcbUptZc5HFqzjOkSmL0sFlZFr3kmvaYebx06wrw==", + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.5.0", + "node-addon-api": "^3.0.2", + "prebuild-install": "^6.0.0" + }, + "bin": { + "hid-showdevices": "src/show-devices.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-hid/node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" + }, + "node_modules/node-osc": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/node-osc/-/node-osc-8.0.6.tgz", + "integrity": "sha512-6iE9meQSQYJYMrvJ74ju+NEpItQMCD+mFd19jIHLEIe0cwZvn7IfBYYBuxYHEq10FhncGmj+yy6CxCSS6i9wnQ==", + "dependencies": { + "osc-min": "^1.1.1" + }, + "engines": { + "node": "^14.18 || ^16.13 || >=18" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/osc-min": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/osc-min/-/osc-min-1.1.2.tgz", + "integrity": "sha512-8DbiO8ME85R75stgNVCZtHxB9MNBBNcyy+isNBXrsFeinXGjwNAauvKVmGlfRas5VJWC/mhzIx7spR2gFvWxvg==", + "dependencies": { + "binpack": "~0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-lazy": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-lazy/-/p-lazy-3.1.0.tgz", + "integrity": "sha512-sCJn0Cdahs6G6SX9+DUihVFUhrzDEduzE5xeViVBGtoqy5dBWko7W8T6Kk6TjR2uevRXJO7CShfWrqdH5s3w3g==", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==" + }, + "node_modules/parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==" + }, + "node_modules/parse-bmfont-xml": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", + "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", + "dependencies": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" + } + }, + "node_modules/parse-headers": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/phin": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", + "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" + }, + "node_modules/pixelmatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", + "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==", + "dependencies": { + "pngjs": "^3.0.0" + }, + "bin": { + "pixelmatch": "bin/pixelmatch" + } + }, + "node_modules/pjlink": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/pjlink/-/pjlink-0.2.8.tgz", + "integrity": "sha512-7C1U2o+0Zj1UrzVYeSO04lg83LRpjtt6Enp02iclHDQCpJDUEFchGUqNx8rXQf9FQpKJ+77Y04ln4wLBYRTvbw==", + "dependencies": { + "extend": "~3.0.0" + } + }, + "node_modules/pkg-prebuilds": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/pkg-prebuilds/-/pkg-prebuilds-0.1.0.tgz", + "integrity": "sha512-ALsGSiwO6EDvjrrFRiv7Q6HZPrqCgTpNxQMFs3P4Ic25cP94DmLy0iGvZDlJmQBbq2IS8xkZrifwkoOHIetY9Q==", + "peer": true, + "dependencies": { + "yargs": "^17.5.1" + }, + "bin": { + "pkg-prebuilds-copy": "bin/copy.mjs", + "pkg-prebuilds-verify": "bin/verify.mjs" + }, + "engines": { + "node": ">= 14.15.0" + } + }, + "node_modules/pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/prebuild-install": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", + "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", + "dependencies": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.21.0", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/prebuild-install/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prebuild-install/node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "node_modules/prebuild-install/node_modules/are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/prebuild-install/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/prebuild-install/node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/prebuild-install/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prebuild-install/node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/prebuild-install/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/prebuild-install/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/prebuild-install/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/prebuild-install/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prebuild-install/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz", + "integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.2.0", + "socket.io-adapter": "~2.4.0", + "socket.io-parser": "~4.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", + "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==" + }, + "node_modules/socket.io-parser": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz", + "integrity": "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==", + "dependencies": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/studiomonitor-api": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/studiomonitor-api/-/studiomonitor-api-2.4.1.tgz", + "integrity": "sha512-x3eH9+eh1su4aaDWDB1HvQoowZIZ2gzFl5pgOgaG1YEwEnPp7UjoXCBvCDjr9y/xYhmf4199k8mMkUg2JKndlQ==", + "dependencies": { + "axios": "^0.27.2" + } + }, + "node_modules/studiomonitor-api/node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/threadedclass": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/threadedclass/-/threadedclass-1.1.0.tgz", + "integrity": "sha512-+R9wHIHKMsmp0g1TKHZ9gcATD5Pohig4ZWqDqV2o1+VjKjw8KmUcTQZ0sJCj/G8hjFxXPp2QAZDHsmzTcqQJYQ==", + "dependencies": { + "callsites": "^3.1.0", + "eventemitter3": "^4.0.4", + "is-running": "^2.1.0", + "tslib": "^1.13.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/threadedclass/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "node_modules/timm": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", + "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==" + }, + "node_modules/tinycolor2": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", + "engines": { + "node": "*" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/twos-complement-buffer": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/twos-complement-buffer/-/twos-complement-buffer-0.0.1.tgz", + "integrity": "sha512-Ev3p2GfB2GO8pcyb7jIvctS9RAjSZrF/K+u5s3KN00ajY11Dda2oMqI72nXaHVU7doGYNXc0mJG6exWAbmzZiA==", + "dependencies": { + "uint-buffer": "^0.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/uglify-js": { + "version": "3.16.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz", + "integrity": "sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uint-buffer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/uint-buffer/-/uint-buffer-0.1.0.tgz", + "integrity": "sha512-7xjpjCTijFIXAMxN7OMRfykpCMVfbCrlAmAt2RIlihvkHgvkNV5DBFzyc8OpIQeVpRXJkgXBwmKos4hD8DrX1g==", + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "peer": true + }, + "node_modules/utf8-buffer": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/utf8-buffer/-/utf8-buffer-0.2.0.tgz", + "integrity": "sha512-DygDeOmOPQRjxnnv8LdfjoSQgG9EgJFH1m/1QcrKkDOxzoOcLLqZ2ONzRYHmiRqJYQYnAvV+zv2Wgk5tXjr4aA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/utif": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", + "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", + "dependencies": { + "pako": "^1.0.5" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/visca-over-ip": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/visca-over-ip/-/visca-over-ip-1.0.14.tgz", + "integrity": "sha512-O3COfFVnNm533OpagnUzRpUxYna6AhC5EwIntYPi0ZvnYkx7JKVgmkFZ1Z3lBdkqEk91RpwU+GzMCWX/uxKPOA==" + }, + "node_modules/wavefile": { + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/wavefile/-/wavefile-8.4.6.tgz", + "integrity": "sha512-mKvPtkXTFE3U8Uo8qJr/hCJP3booCI09vsoWY3OHrdKB+8ZefO/5/wSRZSbPSgFDB+WWn3Am3c01h/sguTYuyA==", + "dependencies": { + "alawmulaw": "^5.0.2", + "base64-arraybuffer-es6": "^0.3.1", + "bitdepth": "^7.0.2", + "byte-data": "^16.0.3", + "imaadpcm": "^4.1.2" + }, + "bin": { + "wavefile": "bin/wavefile.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xml-parse-from-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==" + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "peer": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "peer": true, + "engines": { + "node": ">=12" + } + } + }, + "dependencies": { + "@babel/runtime": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", + "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@elgato-stream-deck/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@elgato-stream-deck/core/-/core-5.5.0.tgz", + "integrity": "sha512-WcybmRfV/XInPUj+oTI9hPljqYr1lLDDfItXlNNlaQVezP4103sdCvCCNRh+InvhtAMbprMnIDhlCxCTjE0hCw==", + "requires": { + "eventemitter3": "^4.0.7", + "tslib": "^2.4.0" + } + }, + "@elgato-stream-deck/node": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@elgato-stream-deck/node/-/node-5.5.0.tgz", + "integrity": "sha512-2nlhSTNtNFJCJHAcRYodxoCLBO3aylVqCMS5U15S/EJqnr4+HsReSYRaHsDhDXtdqPBoE7C1126IwWp5sJphyQ==", + "requires": { + "@elgato-stream-deck/core": "5.5.0", + "jpeg-js": "^0.4.2", + "node-hid": "^2.1.1", + "tslib": "^2.4.0" + } + }, + "@jimp/bmp": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.16.1.tgz", + "integrity": "sha512-iwyNYQeBawrdg/f24x3pQ5rEx+/GwjZcCXd3Kgc+ZUd+Ivia7sIqBsOnDaMZdKCBPlfW364ekexnlOqyVa0NWg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "bmp-js": "^0.1.0" + } + }, + "@jimp/core": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.16.1.tgz", + "integrity": "sha512-la7kQia31V6kQ4q1kI/uLimu8FXx7imWVajDGtwUG8fzePLWDFJyZl0fdIXVCL1JW2nBcRHidUot6jvlRDi2+g==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/custom": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.16.1.tgz", + "integrity": "sha512-DNUAHNSiUI/j9hmbatD6WN/EBIyeq4AO0frl5ETtt51VN1SvE4t4v83ZA/V6ikxEf3hxLju4tQ5Pc3zmZkN/3A==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.16.1" + } + }, + "@jimp/gif": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.16.1.tgz", + "integrity": "sha512-r/1+GzIW1D5zrP4tNrfW+3y4vqD935WBXSc8X/wm23QTY9aJO9Lw6PEdzpYCEY+SOklIFKaJYUAq/Nvgm/9ryw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "gifwrap": "^0.9.2", + "omggif": "^1.0.9" + } + }, + "@jimp/jpeg": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.16.1.tgz", + "integrity": "sha512-8352zrdlCCLFdZ/J+JjBslDvml+fS3Z8gttdml0We759PnnZGqrnPRhkOEOJbNUlE+dD4ckLeIe6NPxlS/7U+w==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "jpeg-js": "0.4.2" + }, + "dependencies": { + "jpeg-js": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.2.tgz", + "integrity": "sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw==" + } + } + }, + "@jimp/plugin-blit": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.16.1.tgz", + "integrity": "sha512-fKFNARm32RoLSokJ8WZXHHH2CGzz6ire2n1Jh6u+XQLhk9TweT1DcLHIXwQMh8oR12KgjbgsMGvrMVlVknmOAg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-blur": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.16.1.tgz", + "integrity": "sha512-1WhuLGGj9MypFKRcPvmW45ht7nXkOKu+lg3n2VBzIB7r4kKNVchuI59bXaCYQumOLEqVK7JdB4glaDAbCQCLyw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-circle": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.16.1.tgz", + "integrity": "sha512-JK7yi1CIU7/XL8hdahjcbGA3V7c+F+Iw+mhMQhLEi7Q0tCnZ69YJBTamMiNg3fWPVfMuvWJJKOBRVpwNTuaZRg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-color": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.16.1.tgz", + "integrity": "sha512-9yQttBAO5SEFj7S6nJK54f+1BnuBG4c28q+iyzm1JjtnehjqMg6Ljw4gCSDCvoCQ3jBSYHN66pmwTV74SU1B7A==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/plugin-contain": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.16.1.tgz", + "integrity": "sha512-44F3dUIjBDHN+Ym/vEfg+jtjMjAqd2uw9nssN67/n4FdpuZUVs7E7wadKY1RRNuJO+WgcD5aDQcsvurXMETQTg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-cover": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.16.1.tgz", + "integrity": "sha512-YztWCIldBAVo0zxcQXR+a/uk3/TtYnpKU2CanOPJ7baIuDlWPsG+YE4xTsswZZc12H9Kl7CiziEbDtvF9kwA/Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-crop": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.16.1.tgz", + "integrity": "sha512-UQdva9oQzCVadkyo3T5Tv2CUZbf0klm2cD4cWMlASuTOYgaGaFHhT9st+kmfvXjKL8q3STkBu/zUPV6PbuV3ew==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-displace": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.16.1.tgz", + "integrity": "sha512-iVAWuz2+G6Heu8gVZksUz+4hQYpR4R0R/RtBzpWEl8ItBe7O6QjORAkhxzg+WdYLL2A/Yd4ekTpvK0/qW8hTVw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-dither": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.16.1.tgz", + "integrity": "sha512-tADKVd+HDC9EhJRUDwMvzBXPz4GLoU6s5P7xkVq46tskExYSptgj5713J5Thj3NMgH9Rsqu22jNg1H/7tr3V9Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-fisheye": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.1.tgz", + "integrity": "sha512-BWHnc5hVobviTyIRHhIy9VxI1ACf4CeSuCfURB6JZm87YuyvgQh5aX5UDKtOz/3haMHXBLP61ZBxlNpMD8CG4A==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-flip": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.16.1.tgz", + "integrity": "sha512-KdxTf0zErfZ8DyHkImDTnQBuHby+a5YFdoKI/G3GpBl3qxLBvC+PWkS2F/iN3H7wszP7/TKxTEvWL927pypT0w==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-gaussian": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.1.tgz", + "integrity": "sha512-u9n4wjskh3N1mSqketbL6tVcLU2S5TEaFPR40K6TDv4phPLZALi1Of7reUmYpVm8mBDHt1I6kGhuCJiWvzfGyg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-invert": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.16.1.tgz", + "integrity": "sha512-2DKuyVXANH8WDpW9NG+PYFbehzJfweZszFYyxcaewaPLN0GxvxVLOGOPP1NuUTcHkOdMFbE0nHDuB7f+sYF/2w==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-mask": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.16.1.tgz", + "integrity": "sha512-snfiqHlVuj4bSFS0v96vo2PpqCDMe4JB+O++sMo5jF5mvGcGL6AIeLo8cYqPNpdO6BZpBJ8MY5El0Veckhr39Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-normalize": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.16.1.tgz", + "integrity": "sha512-dOQfIOvGLKDKXPU8xXWzaUeB0nvkosHw6Xg1WhS1Z5Q0PazByhaxOQkSKgUryNN/H+X7UdbDvlyh/yHf3ITRaw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-print": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.16.1.tgz", + "integrity": "sha512-ceWgYN40jbN4cWRxixym+csyVymvrryuKBQ+zoIvN5iE6OyS+2d7Mn4zlNgumSczb9GGyZZESIgVcBDA1ezq0Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "load-bmfont": "^1.4.0" + } + }, + "@jimp/plugin-resize": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.16.1.tgz", + "integrity": "sha512-u4JBLdRI7dargC04p2Ha24kofQBk3vhaf0q8FwSYgnCRwxfvh2RxvhJZk9H7Q91JZp6wgjz/SjvEAYjGCEgAwQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-rotate": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.16.1.tgz", + "integrity": "sha512-ZUU415gDQ0VjYutmVgAYYxC9Og9ixu2jAGMCU54mSMfuIlmohYfwARQmI7h4QB84M76c9hVLdONWjuo+rip/zg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-scale": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.16.1.tgz", + "integrity": "sha512-jM2QlgThIDIc4rcyughD5O7sOYezxdafg/2Xtd1csfK3z6fba3asxDwthqPZAgitrLgiKBDp6XfzC07Y/CefUw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-shadow": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.16.1.tgz", + "integrity": "sha512-MeD2Is17oKzXLnsphAa1sDstTu6nxscugxAEk3ji0GV1FohCvpHBcec0nAq6/czg4WzqfDts+fcPfC79qWmqrA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-threshold": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.16.1.tgz", + "integrity": "sha512-iGW8U/wiCSR0+6syrPioVGoSzQFt4Z91SsCRbgNKTAk7D+XQv6OI78jvvYg4o0c2FOlwGhqz147HZV5utoSLxA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugins": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.16.1.tgz", + "integrity": "sha512-c+lCqa25b+4q6mJZSetlxhMoYuiltyS+ValLzdwK/47+aYsq+kcJNl+TuxIEKf59yr9+5rkbpsPkZHLF/V7FFA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.16.1", + "@jimp/plugin-blur": "^0.16.1", + "@jimp/plugin-circle": "^0.16.1", + "@jimp/plugin-color": "^0.16.1", + "@jimp/plugin-contain": "^0.16.1", + "@jimp/plugin-cover": "^0.16.1", + "@jimp/plugin-crop": "^0.16.1", + "@jimp/plugin-displace": "^0.16.1", + "@jimp/plugin-dither": "^0.16.1", + "@jimp/plugin-fisheye": "^0.16.1", + "@jimp/plugin-flip": "^0.16.1", + "@jimp/plugin-gaussian": "^0.16.1", + "@jimp/plugin-invert": "^0.16.1", + "@jimp/plugin-mask": "^0.16.1", + "@jimp/plugin-normalize": "^0.16.1", + "@jimp/plugin-print": "^0.16.1", + "@jimp/plugin-resize": "^0.16.1", + "@jimp/plugin-rotate": "^0.16.1", + "@jimp/plugin-scale": "^0.16.1", + "@jimp/plugin-shadow": "^0.16.1", + "@jimp/plugin-threshold": "^0.16.1", + "timm": "^1.6.1" + } + }, + "@jimp/png": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.16.1.tgz", + "integrity": "sha512-iyWoCxEBTW0OUWWn6SveD4LePW89kO7ZOy5sCfYeDM/oTPLpR8iMIGvZpZUz1b8kvzFr27vPst4E5rJhGjwsdw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "pngjs": "^3.3.3" + } + }, + "@jimp/tiff": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.16.1.tgz", + "integrity": "sha512-3K3+xpJS79RmSkAvFMgqY5dhSB+/sxhwTFA9f4AVHUK0oKW+u6r52Z1L0tMXHnpbAdR9EJ+xaAl2D4x19XShkQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "utif": "^2.0.1" + } + }, + "@jimp/types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.16.1.tgz", + "integrity": "sha512-g1w/+NfWqiVW4CaXSJyD28JQqZtm2eyKMWPhBBDCJN9nLCN12/Az0WFF3JUAktzdsEC2KRN2AqB1a2oMZBNgSQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.16.1", + "@jimp/gif": "^0.16.1", + "@jimp/jpeg": "^0.16.1", + "@jimp/png": "^0.16.1", + "@jimp/tiff": "^0.16.1", + "timm": "^1.6.1" + } + }, + "@jimp/utils": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.16.1.tgz", + "integrity": "sha512-8fULQjB0x4LzUSiSYG6ZtQl355sZjxbv8r9PPAuYHzS9sGiSHJQavNqK/nKnpDsVkU88/vRGcE7t3nMU0dEnVw==", + "requires": { + "@babel/runtime": "^7.7.2", + "regenerator-runtime": "^0.13.3" + } + }, + "@julusian/freetype2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@julusian/freetype2/-/freetype2-1.0.0.tgz", + "integrity": "sha512-vdwnk1OrBLGgglqEdAZHkUCQXN2casoVhMQmEz4BVF7eABwR2sF8dd1QctTl3wBkSqPa2WV9fo+1ko6ughzhKQ==", + "requires": { + "node-addon-api": "^4.3.0", + "node-gyp-build": "^4.4.0" + }, + "dependencies": { + "node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + } + } + }, + "@julusian/jpeg-turbo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@julusian/jpeg-turbo/-/jpeg-turbo-2.0.0.tgz", + "integrity": "sha512-POmnPuLIyUVUbOJvz7Qb55fCPZIsQFMB4aDQ40cc/1+R5W+lokEmrjP7FiNdaRvBv/UdTKgnWEsB0lQK5TRNlw==", + "peer": true, + "requires": { + "cmake-js": "7.0.0-3", + "node-addon-api": "^5.0.0", + "pkg-prebuilds": "~0.1.0" + } + }, + "@mapbox/node-pre-gyp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", + "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", + "requires": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + } + }, + "@meesvdw/coloredconsole": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@meesvdw/coloredconsole/-/coloredconsole-1.0.3.tgz", + "integrity": "sha512-MQQULCqGb6WtDazi49p0qmU4kKDGxkwI2TG5PIa1224aOMLjVFeXqp3f45LkDBTJ59wIUOguTSafmoqv0gI9IQ==" + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + }, + "@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.30", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz", + "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==", + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "requires": { + "@types/node": "*" + } + }, + "@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" + }, + "@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + }, + "@types/node-osc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@types/node-osc/-/node-osc-6.0.0.tgz", + "integrity": "sha512-25DwJOFe1KueUZz2oIURT3qCMQ28Jdvy9JqGz8d0mKM1Mlx0agHD9N3S0hMKajVCjw7TGtf3gGjbl5gDCFfIWQ==" + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "alawmulaw": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/alawmulaw/-/alawmulaw-5.0.2.tgz", + "integrity": "sha512-W3bWBB7MwTNGALlAKbOxe+tMNW9DpqGsv1V1idGPzctnBH++eS+Dx3UuucHNe5nk38WvAuy0sgMAbS5idHCArw==" + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "any-base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", + "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "atem-connection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/atem-connection/-/atem-connection-3.0.0.tgz", + "integrity": "sha512-jzblesqzIX/NQl+LLsmsCXlwIw7CbvNErPQgGAApt/jtYV+53d+Wl2F4nB6DJTIIX2vhhUvqlDqQbo2k9E6atA==", + "requires": { + "@julusian/freetype2": "^1.0.0", + "debug": "^4.3.4", + "eventemitter3": "^4.0.7", + "exit-hook": "^2.2.1", + "nanotimer": "^0.3.15", + "p-lazy": "^3.1.0", + "p-queue": "^6.6.2", + "threadedclass": "^1.0.2", + "tslib": "^2.3.1", + "wavefile": "^8.4.4" + } + }, + "axios": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", + "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", + "requires": { + "follow-redirects": "^1.14.8" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-arraybuffer-es6": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/base64-arraybuffer-es6/-/base64-arraybuffer-es6-0.3.1.tgz", + "integrity": "sha512-TrhBheudYaff9adiTAqjSScjvtmClQ4vF9l4cqkPNkVsA11m4/NRdH4LkZ/tAMmpzzwfI20BXnJ/PTtafECCNA==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "binpack": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/binpack/-/binpack-0.1.0.tgz", + "integrity": "sha512-KcSrsGiIKgklTWweVb9XnZPWO1/rGSsK3fwR7VnbDPbLKPlkvSKd/ZrJ1W712r6HzH5u0fa/AZCftATO09x8Aw==" + }, + "bitdepth": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/bitdepth/-/bitdepth-7.0.2.tgz", + "integrity": "sha512-Ed11TL4IIWyUEoQTfkbRBDCgDNurxYzFgmk30ZU6SgNCsysoEx7UMm+g7SDFHxA2lhLbWyjV8T1ab3z0BtYOAw==" + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==" + }, + "body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==", + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + } + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==" + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + }, + "byte-data": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/byte-data/-/byte-data-16.0.3.tgz", + "integrity": "sha512-IzV3mzv8OnnzPdb9CoESQr2ikPX/gkHUesRu+vff9XB7KwMxyflPDewtPFWXPvF+Xukl52ceor2IRLbnQZf3PQ==", + "requires": { + "endianness": "^8.0.2", + "ieee754-buffer": "^0.2.1", + "twos-complement-buffer": "0.0.1", + "uint-buffer": "^0.1.0", + "utf8-buffer": "^0.2.0" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "canvas": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.9.3.tgz", + "integrity": "sha512-WOUM7ghii5TV2rbhaZkh1youv/vW1/Canev6Yx6BG2W+1S07w8jKZqKkPnbiPpQEDsnJdN8ouDd7OvQEGXDcUw==", + "requires": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.15.0", + "simple-get": "^3.0.3" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "peer": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "cmake-js": { + "version": "7.0.0-3", + "resolved": "https://registry.npmjs.org/cmake-js/-/cmake-js-7.0.0-3.tgz", + "integrity": "sha512-KUzzCAW1mBP0m8VMRRIoXA3M8v7dJTOkXZhUJbqIcATSPPpZAD6ChPwQOmhcxTgLSS9RjQuf4Bi6GkNYfKWKpg==", + "peer": true, + "requires": { + "axios": "^0.27.2", + "debug": "^4", + "fs-extra": "^10.1.0", + "lodash.isplainobject": "^4.0.6", + "memory-stream": "^1.0.0", + "node-api-headers": "^0.0.1", + "npmlog": "^6.0.2", + "rc": "^1.2.7", + "semver": "^7.3.7", + "tar": "^6.1.11", + "url-join": "^4.0.1", + "which": "^2.0.2", + "yargs": "^17.4.1" + }, + "dependencies": { + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "peer": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "peer": true, + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "peer": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "peer": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + } + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "requires": { + "mimic-response": "^2.0.0" + } + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" + }, + "dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==", + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "endianness": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/endianness/-/endianness-8.0.2.tgz", + "integrity": "sha512-IU+77+jJ7lpw2qZ3NUuqBZFy3GuioNgXUdsL1L9tooDNTaw0TgOnwNuc+8Ns+haDaTifK97QLzmOANJtI/rGvw==" + }, + "engine.io": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz", + "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==", + "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" + }, + "dependencies": { + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + } + } + }, + "engine.io-parser": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", + "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==" + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "peer": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==" + }, + "exit-hook": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", + "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==" + }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + }, + "express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "express-handlebars": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-6.0.6.tgz", + "integrity": "sha512-E4QHYCh+9fyfdBEb8uKJ8p6HD4qq/sUSHBq83lRNlLJp2TQKEg2nFJYbVdC+M3QzaV19dODe43lgjQWVaIpbyQ==", + "requires": { + "glob": "^8.0.2", + "graceful-fs": "^4.2.10", + "handlebars": "^4.7.7" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "file-type": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", + "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "peer": true + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "gifwrap": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.9.4.tgz", + "integrity": "sha512-MDMwbhASQuVeD4JKd1fKgNgCRL3fGqMM4WaqpNhWO0JiMOAjbQdumbs4BbBZEy9/M00EHEjKN3HieVhCUlwjeQ==", + "requires": { + "image-q": "^4.0.0", + "omggif": "^1.0.10" + } + }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "hyperdeck-js-lib": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/hyperdeck-js-lib/-/hyperdeck-js-lib-1.7.0.tgz", + "integrity": "sha512-NUNgKlV9EA1B5VoFokdF6nXfQAXrDNosWqW5qxBcFE5VZ3PWgd8zveN9yUbOyC6BxwOUU7RsbJiCVExAiwAy+A==", + "requires": { + "js-logger": "^1.2.0", + "promise": "^8.0.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ieee754-buffer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ieee754-buffer/-/ieee754-buffer-0.2.1.tgz", + "integrity": "sha512-dDlJhYk8BAmH1HDncTjCt6xOm2+kT+MxGhRKB+mUoF8nocDzPAgZPEWTRI9QgkGvbDkbJgCqyxweGlIV0yhbUQ==" + }, + "imaadpcm": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/imaadpcm/-/imaadpcm-4.1.2.tgz", + "integrity": "sha512-7gwxe6lKCGitmkMtGbm1ecnt0Q59KcWwo7AVi2RAd3lQ9VghVN5zX5x3oK6xNhfD9KUMbaYzku43UBn3Ix3RIA==" + }, + "image-q": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/image-q/-/image-q-4.0.0.tgz", + "integrity": "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==", + "requires": { + "@types/node": "16.9.1" + }, + "dependencies": { + "@types/node": { + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz", + "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==" + } + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-running": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-running/-/is-running-2.1.0.tgz", + "integrity": "sha512-mjJd3PujZMl7j+D395WTIO5tU5RIDBfVSRtRR4VOJou3H66E38UjbjvDGh3slJzPuolsb+yQFqwHNNdyp5jg3w==" + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "peer": true + }, + "jimp": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.16.1.tgz", + "integrity": "sha512-+EKVxbR36Td7Hfd23wKGIeEyHbxShZDX6L8uJkgVW3ESA9GiTEPK08tG1XI2r/0w5Ch0HyJF5kPqF9K7EmGjaw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.16.1", + "@jimp/plugins": "^0.16.1", + "@jimp/types": "^0.16.1", + "regenerator-runtime": "^0.13.3" + } + }, + "jpeg-js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", + "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==" + }, + "js-logger": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/js-logger/-/js-logger-1.6.1.tgz", + "integrity": "sha512-yTgMCPXVjhmg28CuUH8CKjU+cIKL/G+zTu4Fn4lQxs8mRFH/03QTNvEFngcxfg/gRDiQAOoyCKmMTOm9ayOzXA==" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "load-bmfont": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", + "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", + "requires": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + } + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "peer": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "memory-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/memory-stream/-/memory-stream-1.0.0.tgz", + "integrity": "sha512-Wm13VcsPIMdG96dzILfij09PvuS3APtcKNh7M28FsCA/w6+1mjR7hhPmfFNoilX9xU7wTdhsH5lJAm6XNzdtww==", + "peer": true, + "requires": { + "readable-stream": "^3.4.0" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "requires": { + "dom-walk": "^0.1.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==" + }, + "nan": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" + }, + "nanotimer": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/nanotimer/-/nanotimer-0.3.15.tgz", + "integrity": "sha512-xj8HcwceqeRbfSuwNIzYhdbyZu3zoiHX3y2cyVB/cLn0RzVCI8ZZVQLZELEUMG2tYEsjqbCLb3b4q1lDC7ENnA==" + }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node-abi": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", + "requires": { + "semver": "^5.4.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "node-addon-api": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz", + "integrity": "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==", + "peer": true + }, + "node-api-headers": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/node-api-headers/-/node-api-headers-0.0.1.tgz", + "integrity": "sha512-eRxckUSXMRQRV69h+ksfleQzR3BdRwkJuc/Y65KFFwhibC5G1y6wgytYW2WWTB/oG1bt+pf2RwjZDYC0xKqgqQ==", + "peer": true + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-gyp-build": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" + }, + "node-hid": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-2.1.1.tgz", + "integrity": "sha512-Skzhqow7hyLZU93eIPthM9yjot9lszg9xrKxESleEs05V2NcbUptZc5HFqzjOkSmL0sFlZFr3kmvaYebx06wrw==", + "requires": { + "bindings": "^1.5.0", + "node-addon-api": "^3.0.2", + "prebuild-install": "^6.0.0" + }, + "dependencies": { + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" + } + } + }, + "node-osc": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/node-osc/-/node-osc-8.0.6.tgz", + "integrity": "sha512-6iE9meQSQYJYMrvJ74ju+NEpItQMCD+mFd19jIHLEIe0cwZvn7IfBYYBuxYHEq10FhncGmj+yy6CxCSS6i9wnQ==", + "requires": { + "osc-min": "^1.1.1" + } + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "requires": { + "abbrev": "1" + } + }, + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "osc-min": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/osc-min/-/osc-min-1.1.2.tgz", + "integrity": "sha512-8DbiO8ME85R75stgNVCZtHxB9MNBBNcyy+isNBXrsFeinXGjwNAauvKVmGlfRas5VJWC/mhzIx7spR2gFvWxvg==", + "requires": { + "binpack": "~0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" + }, + "p-lazy": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-lazy/-/p-lazy-3.1.0.tgz", + "integrity": "sha512-sCJn0Cdahs6G6SX9+DUihVFUhrzDEduzE5xeViVBGtoqy5dBWko7W8T6Kk6TjR2uevRXJO7CShfWrqdH5s3w3g==" + }, + "p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "requires": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + } + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "requires": { + "p-finally": "^1.0.0" + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==" + }, + "parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==" + }, + "parse-bmfont-xml": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", + "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", + "requires": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" + } + }, + "parse-headers": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "phin": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", + "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" + }, + "pixelmatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", + "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==", + "requires": { + "pngjs": "^3.0.0" + } + }, + "pjlink": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/pjlink/-/pjlink-0.2.8.tgz", + "integrity": "sha512-7C1U2o+0Zj1UrzVYeSO04lg83LRpjtt6Enp02iclHDQCpJDUEFchGUqNx8rXQf9FQpKJ+77Y04ln4wLBYRTvbw==", + "requires": { + "extend": "~3.0.0" + } + }, + "pkg-prebuilds": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/pkg-prebuilds/-/pkg-prebuilds-0.1.0.tgz", + "integrity": "sha512-ALsGSiwO6EDvjrrFRiv7Q6HZPrqCgTpNxQMFs3P4Ic25cP94DmLy0iGvZDlJmQBbq2IS8xkZrifwkoOHIetY9Q==", + "peer": true, + "requires": { + "yargs": "^17.5.1" + } + }, + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" + }, + "prebuild-install": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", + "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.21.0", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "requires": { + "asap": "~2.0.6" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "peer": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "socket.io": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz", + "integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==", + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.2.0", + "socket.io-adapter": "~2.4.0", + "socket.io-parser": "~4.0.4" + } + }, + "socket.io-adapter": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", + "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==" + }, + "socket.io-parser": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz", + "integrity": "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==", + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + }, + "studiomonitor-api": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/studiomonitor-api/-/studiomonitor-api-2.4.1.tgz", + "integrity": "sha512-x3eH9+eh1su4aaDWDB1HvQoowZIZ2gzFl5pgOgaG1YEwEnPp7UjoXCBvCDjr9y/xYhmf4199k8mMkUg2JKndlQ==", + "requires": { + "axios": "^0.27.2" + }, + "dependencies": { + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + } + } + }, + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + }, + "dependencies": { + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + } + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "threadedclass": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/threadedclass/-/threadedclass-1.1.0.tgz", + "integrity": "sha512-+R9wHIHKMsmp0g1TKHZ9gcATD5Pohig4ZWqDqV2o1+VjKjw8KmUcTQZ0sJCj/G8hjFxXPp2QAZDHsmzTcqQJYQ==", + "requires": { + "callsites": "^3.1.0", + "eventemitter3": "^4.0.4", + "is-running": "^2.1.0", + "tslib": "^1.13.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "timm": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", + "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==" + }, + "tinycolor2": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "twos-complement-buffer": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/twos-complement-buffer/-/twos-complement-buffer-0.0.1.tgz", + "integrity": "sha512-Ev3p2GfB2GO8pcyb7jIvctS9RAjSZrF/K+u5s3KN00ajY11Dda2oMqI72nXaHVU7doGYNXc0mJG6exWAbmzZiA==", + "requires": { + "uint-buffer": "^0.1.0" + } + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "uglify-js": { + "version": "3.16.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz", + "integrity": "sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw==", + "optional": true + }, + "uint-buffer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/uint-buffer/-/uint-buffer-0.1.0.tgz", + "integrity": "sha512-7xjpjCTijFIXAMxN7OMRfykpCMVfbCrlAmAt2RIlihvkHgvkNV5DBFzyc8OpIQeVpRXJkgXBwmKos4hD8DrX1g==" + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "peer": true + }, + "utf8-buffer": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/utf8-buffer/-/utf8-buffer-0.2.0.tgz", + "integrity": "sha512-DygDeOmOPQRjxnnv8LdfjoSQgG9EgJFH1m/1QcrKkDOxzoOcLLqZ2ONzRYHmiRqJYQYnAvV+zv2Wgk5tXjr4aA==" + }, + "utif": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", + "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", + "requires": { + "pako": "^1.0.5" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "visca-over-ip": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/visca-over-ip/-/visca-over-ip-1.0.14.tgz", + "integrity": "sha512-O3COfFVnNm533OpagnUzRpUxYna6AhC5EwIntYPi0ZvnYkx7JKVgmkFZ1Z3lBdkqEk91RpwU+GzMCWX/uxKPOA==" + }, + "wavefile": { + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/wavefile/-/wavefile-8.4.6.tgz", + "integrity": "sha512-mKvPtkXTFE3U8Uo8qJr/hCJP3booCI09vsoWY3OHrdKB+8ZefO/5/wSRZSbPSgFDB+WWn3Am3c01h/sguTYuyA==", + "requires": { + "alawmulaw": "^5.0.2", + "base64-arraybuffer-es6": "^0.3.1", + "bitdepth": "^7.0.2", + "byte-data": "^16.0.3", + "imaadpcm": "^4.1.2" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "peer": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "peer": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "requires": {} + }, + "xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "requires": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xml-parse-from-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==" + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "peer": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "peer": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "peer": true + } + } +} diff --git a/Backend/package.json b/Backend/package.json new file mode 100644 index 0000000..bdf641a --- /dev/null +++ b/Backend/package.json @@ -0,0 +1,36 @@ +{ + "name": "undecked", + "version": "1.0.0", + "description": "", + "main": "dist/Core.js", + "scripts": { + "start": "node ." + }, + "author": "Mees van der Wijk", + "license": "ISC", + "dependencies": { + "@elgato-stream-deck/node": "^5.3.1", + "@meesvdw/coloredconsole": "^1.0.3", + "@types/express": "^4.17.13", + "@types/fs-extra": "^9.0.13", + "@types/node-osc": "^6.0.0", + "atem-connection": "^3.0.0", + "axios": "^0.26.1", + "bonjour": "^3.5.0", + "canvas": "^2.9.1", + "express": "^4.17.3", + "express-handlebars": "^6.0.4", + "fs-extra": "^10.0.1", + "hyperdeck-js-lib": "^1.7.0", + "jimp": "^0.16.1", + "node-osc": "^8.0.6", + "open": "^8.4.0", + "pjlink": "^0.2.8", + "socket.io": "^4.4.1", + "studiomonitor-api": "^2.4.1", + "visca-over-ip": "^1.0.4" + }, + "devDependencies": { + "@types/node": "^17.0.23" + } +} diff --git a/Backend/src/ConnectionManager.ts b/Backend/src/ConnectionManager.ts new file mode 100644 index 0000000..59a53ec --- /dev/null +++ b/Backend/src/ConnectionManager.ts @@ -0,0 +1,336 @@ +import * as path from 'path' +import { writeFile } from 'fs'; +import { Undecked } from './Core'; +import { Log } from './Logger'; +import { Integration_Connection_Field } from './Integrations/IntegrationsManager'; +import { ConnectionValidatorAPI } from './Integrations/IntegrationApi'; + +import * as fs from 'fs-extra'; +var { ensureDir, pathExists, readJson } = fs; + + + +declare var Undecked: Undecked; + +export class ConnectionManager { + managerConfigPath: string; + + connections: ConnectionManager_Connections; + + constructor() { } + + load(callback: () => void) { + this.managerConfigPath = path.join(Undecked.dataPath, 'connections.json'); + + this.connections = {}; + + this.loadConfig(() => { + var integration_count = 0; + var device_count = 0; + for (var integrationID in this.connections) { + integration_count++; + device_count = device_count + Object.keys(this.connections[integrationID]).length; + } + + Log('info', `Loaded ${device_count} device(s) across ${integration_count} integration(s)`); + callback(); + }); + } + + loadConfig(callback: () => void) { + pathExists(this.managerConfigPath, (err, exists) => { + if (err) throw err; + if (exists) { + readJson(this.managerConfigPath, (err, json) => { + if (err) throw err; + this.connections = json.connections; + + for (var integrationID in this.connections) + for (var connectionType in this.connections[integrationID]) + for (var connectionID in this.connections[integrationID][connectionType]) { + var connection = this.connections[integrationID][connectionType][connectionID]; + + this.validate( + integrationID, + connectionType, + connectionID, + connection.properties, + (valid: boolean, error?: string) => { + Log( + valid ? 'info' : 'warn', + valid + ? `Loaded ${connectionType} '${connection.name}' from '${integrationID}'` + : `Unable to load ${connectionType} '${connection.name}' from '${integrationID}'` + ); + } + ); + } + + callback(); + }); + } else { + this.connections = defaultConnectionConfig.connections; + this.saveConfig(callback); + } + }); + } + + saveConfig(callback?: () => void) { + var connections = {}; + for (var integrationID in this.connections) { + connections[integrationID] = {}; + for (var connectionType in this.connections[integrationID]) { + connections[integrationID][connectionType] = {}; + for (var connectionID in this.connections[integrationID][connectionType]) { + connections[integrationID][connectionType][connectionID] = this.connections[integrationID][ + connectionType + ][connectionID]; + + if (connections[integrationID][connectionType][connectionID].instance != undefined) + delete connections[integrationID][connectionType][connectionID].instance; + } + } + } + var toSave: ConnectionManager_Config = { + connections + }; + + for (var integrationID in toSave.connections) + for (var connectionType in toSave.connections[integrationID]) + for (var connectionID in toSave.connections[integrationID][connectionType]) + if (toSave.connections[integrationID][connectionType][connectionID].instance != undefined) + delete toSave.connections[integrationID][connectionType][connectionID].instance; + + writeFile(this.managerConfigPath, JSON.stringify(toSave, null, 4), (err) => { + if (err) Log('error', 'Error whilst saving device manager config', err.message); + if (callback) callback(); + }); + } + + create( + integrationID, + connectionType: string, + properties: ConnectionManager_Connections_Properties, + callback: (valid: boolean, error?: string) => void + ) { + var _this = this; + + if (this.connections == undefined) this.connections = {}; + if (this.connections[integrationID] == undefined) this.connections[integrationID] = {}; + if (this.connections[integrationID][connectionType] == undefined) + this.connections[integrationID][connectionType] = {}; + + var connectionID = Undecked.generateRandom(8, (checkValid: string) => { + return _this.connections[integrationID][connectionType][checkValid] == undefined; + }); + + this.validate(integrationID, connectionType, connectionID, properties, (valid, error) => { + if (valid == true) { + var name = properties._internal_name; + delete properties._internal_name; + + var instance = + _this.connections[integrationID][connectionType] != undefined && + _this.connections[integrationID][connectionType][connectionID] != undefined && + _this.connections[integrationID][connectionType][connectionID].instance != undefined + ? _this.connections[integrationID][connectionType][connectionID].instance + : null; + _this.connections[integrationID][connectionType][connectionID] = { + connectedSince: Date.now(), + lastSeen: Date.now(), + connectionID, + name, + online: true, + properties, + instance + }; + + Undecked.SocketServer.broadcastTo('home', 'connectedlist', this.getList()); + + _this.saveConfig(); + callback(true); + } else callback(false, error); + }); + } + + validate( + integrationID, + connectionType: string, + connectionID: string, + properties: ConnectionManager_Connections_Properties, + callback: (valid: boolean, error?: string) => void + ) { + var _this = this; + if (Undecked.Integrations.exists(integrationID)) { + var integration = Undecked.Integrations.get(integrationID); + + if (integration.api.hasValidator(connectionType)) { + var validator = integration.api.getValidator(connectionType); + + var connectionValidatorAPI: ConnectionValidatorAPI = { + properties: properties, + callback, + instance: _this.getConnectionInstance(integrationID, connectionType, connectionID), + setInstance(instance) { + _this.setConnectionInstance(integrationID, connectionType, connectionID, instance); + } + }; + validator(connectionValidatorAPI); + } else callback(false, `No validator found for connection type ${connectionType}`); + } + } + + getConnectionRequestData( + integrationID: string, + connectionType: string + ): { fields: Integration_Connection_Field[]; message?: string; link?: { address: string; title: string } } { + if (Undecked.Integrations.exists(integrationID)) { + var integrationwrapper = Undecked.Integrations.get(integrationID); + if (integrationwrapper.integration.connections != undefined) { + for (let i = 0; i < integrationwrapper.integration.connections.length; i++) { + var connection = integrationwrapper.integration.connections[i]; + if (connection.type == connectionType) + return { fields: connection.fields, message: connection.message, link: connection.link }; + } + } + } + return null; + } + + getList(): ConnectionManager_ListItem[] { + var list: ConnectionManager_ListItem[] = []; + for (var integrationID in this.connections) { + if (Undecked.Integrations.exists(integrationID)) { + var integration = Undecked.Integrations.get(integrationID); + + for (var connectionType in this.connections[integrationID]) { + for (var connectionID in this.connections[integrationID][connectionType]) { + var connection = this.connections[integrationID][connectionType][connectionID]; + list.push({ + connectionID, + + integrationName: integration.integration.name, + connectionType: integration.connectionsmap[connectionType].name, + name: connection.name, + online: connection.online + }); + } + } + } + } + return list; + } + + getConnections(integrationID: string, connectionType: string): { id: string; text: string }[] { + var connections = []; + if (this.connections != undefined) { + if (this.connections[integrationID] != undefined) { + if (this.connections[integrationID][connectionType] != undefined) { + for (var connectionID in this.connections[integrationID][connectionType]) { + var connection = this.connections[integrationID][connectionType][connectionID]; + connections.push({ id: connection.connectionID, text: connection.name }); + } + } + } + } + + return connections; + } + + getConnection(integrationID: string, connectionType: string, connectionID: string): ConnectionManager_Connection { + if (this.connections != undefined) { + if (this.connections[integrationID] != undefined) { + if (this.connections[integrationID][connectionType] != undefined) { + if (this.connections[integrationID][connectionType][connectionID] != undefined) { + return this.connections[integrationID][connectionType][connectionID]; + } + } + } + } + + return null; + } + + setConnectionInstance(integrationID: string, connectionType: string, connectionID: string, instance: any) { + if (this.connections == undefined) this.connections = {}; + if (this.connections[integrationID] == undefined) this.connections[integrationID] = {}; + if (this.connections[integrationID][connectionType] == undefined) + this.connections[integrationID][connectionType] = {}; + if (this.connections[integrationID][connectionType][connectionID] == undefined) + this.connections[integrationID][connectionType][connectionID] = {}; + this.connections[integrationID][connectionType][connectionID].instance = instance; + return true; + } + + getConnectionInstance(integrationID: string, connectionType: string, connectionID: string) { + if (this.connections != undefined) { + if (this.connections[integrationID] != undefined) { + if (this.connections[integrationID][connectionType] != undefined) { + if (this.connections[integrationID][connectionType][connectionID] != undefined) { + return this.connections[integrationID][connectionType][connectionID].instance; + } + } + } + } + + return null; + } +} + +var defaultConnectionConfig: ConnectionManager_Config = { + connections: {} +}; + +// export interface ConnectionManager { +// load: (callback: () => void) => void; +// getConnectionRequestData: (integrationID: string, connectionType: string) => Integration_Connection_Field[]; +// create: ( +// integrationID, +// connectionType: string, +// properties: ConnectionManager_Connections_Properties, +// callback: (valid: boolean, error?: string) => void +// ) => void; +// validate: ( +// integrationID, +// connectionType: string, +// properties: ConnectionManager_Connections_Properties, +// callback: (valid: boolean, error?: string) => void +// ) => void; +// getList: () => ConnectionManager_ListItem[]; +// getConnections: (integrationID: string, connectionType: string) => { id: string; text: string }[]; +// getConnection: (integrationID: string, connectionType: string, connectionID) => ConnectionManager_Connection; +// } + +export interface ConnectionManager_Config { + connections: ConnectionManager_Connections; +} + +export interface ConnectionManager_Connections { + [integrationID: string]: { + [connectionType: string]: { + [connectionID: string]: ConnectionManager_Connection; + }; + }; +} + +export interface ConnectionManager_Connection { + name: string; + connectedSince: number; + lastSeen: number; + online: boolean; + connectionID: string; + properties: ConnectionManager_Connections_Properties; + instance?: any; +} + +export interface ConnectionManager_Connections_Properties { + [key: string]: any; +} + +export interface ConnectionManager_ListItem { + connectionID: string; + integrationName: string; + connectionType: string; + name: string; + online: boolean; +} diff --git a/Backend/src/Core.ts b/Backend/src/Core.ts new file mode 100644 index 0000000..78e7434 --- /dev/null +++ b/Backend/src/Core.ts @@ -0,0 +1,166 @@ +import { readdir } from 'fs'; +import { copy, ensureDir, move, pathExists } from 'fs-extra'; +import { homedir } from 'os'; +import * as path from 'path'; +import * as os from 'os'; +import * as bnj from 'bonjour'; +import { Config, FileHandler } from './FileHandler'; +import { WebServer } from './WebServer'; +import { SocketServer } from './SocketServer'; +import { DeckManager } from './Decks/DeckManager'; +import { PageManager } from './Pages/PageManager'; +import { IntegrationsManager } from './Integrations/IntegrationsManager'; +import { ConnectionManager } from './ConnectionManager'; +import { Icons } from './Icons'; +import { Log } from './Logger'; +const bonjour = bnj(); + +declare var Undecked: Undecked; +declare var Config: Config; + +Undecked = { + DEVMODE: process.argv.includes('--dev'), + + quality: 96, + + dataPath: path.join(homedir(), 'MorphixProductions', 'Undecked'), + + FileHandler: new FileHandler(), + WebServer: new WebServer(), + SocketServer: new SocketServer(), + + Decks: new DeckManager(), + Pages: new PageManager(), + Integrations: new IntegrationsManager(), + Connections: new ConnectionManager(), + + Icons: new Icons(), + + getName() { + if (Config.name != null) return Config.name; + if (os.userInfo().username.length > 0) return os.userInfo().username; + return os.hostname(); + } +}; + +Undecked.start = () => { + Log('info', 'Starting Undecked'); + + var start = () => + Undecked.FileHandler.load(() => { + Undecked.Decks.load(() => { + Undecked.Icons.load(() => { + Undecked.Pages.load(() => { + Undecked.Integrations.load(() => { + Undecked.Connections.load(() => { + Undecked.WebServer.start((server) => { + Undecked.SocketServer.start(server, () => { + Log('info', 'Undecked started'); + + try { + bonjour.publish({ + name: Undecked.getName(), + type: 'undecked', + port: Config.ports.http + }); + } catch (error) {} + }); + }); + }); + }); + }); + }); + }); + }); + + pathExists(path.join(homedir(), 'GetiyoSoftware', 'Undecked'), (err, exists) => { + if (err) throw err; + if (exists) + move(path.join(homedir(), 'GetiyoSoftware', 'Undecked'), Undecked.dataPath, (err) => { + if (err) throw err; + start(); + }); + else start(); + }); +}; + +Undecked.generateRandom = ( + length: number, + checksum?: (random: string) => boolean, + chars: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' +): string => { + for (let i = 0; i < 1000; i++) { + let str = ''; + for (let i = 0; i < length; i++) { + str += chars.charAt(Math.floor(Math.random() * chars.length)); + } + + if (checksum != undefined) + if (checksum(str)) return str; + else return str; + } +}; + +Undecked.convert = () => { + var outputWhiteDir = path.join(__filename, '..', '..', '..', 'Static', 'materialicons', 'white'); + var outputBlackDir = path.join(__filename, '..', '..', '..', 'Static', 'materialicons', 'black'); + + var inputWhiteDir = path.join(`C:\\Users\\Mees\\Pictures\\materialicons\\white`); + var inputBlackDir = path.join(`C:\\Users\\Mees\\Pictures\\materialicons\\black`); + + ensureDir(outputWhiteDir, (err) => { + if (err) throw err; + ensureDir(inputBlackDir, (err) => { + if (err) throw err; + + readdir(path.join(inputBlackDir), (err, files) => { + if (err) throw err; + + console.log(`Found ${files.length} icons`); + + (function handleCopy(i = 0) { + if (files[i]) { + var inputWhite = path.join(inputWhiteDir, files[i], 'sharp.png'); + var inputBlack = path.join(inputBlackDir, files[i], 'sharp.png'); + var outputWhite = path.join(outputWhiteDir, `${files[i]}_low.png`); + var outputBlack = path.join(outputBlackDir, `${files[i]}_low.png`); + copy(inputWhite, outputWhite, (err) => { + if (err) console.log(`Error whilst copying white '${files[i]}'`); + copy(inputBlack, outputBlack, (err) => { + if (err) console.log(`Error whilst copying black '${files[i]}'`); + console.log(`Completed convertion on ${i + 1}/${files.length}`); + handleCopy(i + 1); + }); + }); + } else console.log('--- Convertion completed ---'); + })(); + }); + }); + }); +}; + +Undecked.start(); +export interface Undecked { + DEVMODE: boolean; + + quality: number; + + dataPath: string; + + FileHandler: FileHandler; + WebServer: WebServer; + SocketServer: SocketServer; + + Decks: DeckManager; + Pages: PageManager; + Integrations: IntegrationsManager; + Connections: ConnectionManager; + + Icons: Icons; + + getName: () => string; + + start?: () => void; + generateRandom?: (length: number, checksum?: (random: string) => boolean, chars?: string) => string; + convert?: (type: string) => void; +} diff --git a/Backend/src/Decks/Deck.ts b/Backend/src/Decks/Deck.ts new file mode 100644 index 0000000..ef78ffa --- /dev/null +++ b/Backend/src/Decks/Deck.ts @@ -0,0 +1,852 @@ +import * as StreamDeck from '@elgato-stream-deck/node' +import { Undecked } from '../Core'; +import * as Jimp from 'jimp' +import { createCanvas, loadImage, registerFont } from 'canvas'; +import * as path from 'path' +import { Page_Key, Page_Key_Actions } from '../Pages/Page'; +import { Log } from '../Logger'; +import { fileURLToPath } from 'url'; + + +registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-ExtraLight.ttf'), { + family: 'Montserrat', + weight: '200' +}); +registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-Light.ttf'), { + family: 'Montserrat', + weight: '300' +}); +registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-Regular.ttf'), { + family: 'Montserrat', + weight: '400' +}); +registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-Medium.ttf'), { + family: 'Montserrat', + weight: '500' +}); +registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-SemiBold.ttf'), { + family: 'Montserrat', + weight: '600' +}); +registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-Bold.ttf'), { + family: 'Montserrat', + weight: '700' +}); +registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-ExtraBold.ttf'), { + family: 'Montserrat', + weight: '800' +}); + +declare var Undecked: Undecked; + +export class Deck { + Deck: StreamDeck.StreamDeck; + + online: boolean; + ready: boolean; + + columns: number; + rows: number; + keys: number; + iconsize: number; + + name: string; + serialNumber: string; + model: string; + + pageIndex: number; + + captures: { + confirm: { + enabled: boolean; + callback: (result: boolean) => void; + callbacktriggers: [number, number, any][]; + }; + }; + + constructor(settings: Deck_Config, devicePath: string) { + this.setDevicePath(devicePath); + + this.online = false; + this.ready = false; + + this.name = settings.name; + this.serialNumber = settings.serialNumber; + this.model = settings.model; + + this.pageIndex = 0; + + this.captures = { + confirm: { + enabled: false, + callback: null, + callbacktriggers: [] + } + }; + } + + export(): Deck_Config { + return { + name: this.name, + serialNumber: this.serialNumber, + model: this.model + }; + } + + init() { + if (this.online) { + this.columns = this.Deck.KEY_COLUMNS; + this.rows = this.Deck.KEY_ROWS; + this.keys = this.columns * this.rows; + this.iconsize = this.Deck.ICON_SIZE; + + this.fill({ appearence: { background: { color: '#ffffff' } } }); + setTimeout(() => { + this.Deck.clearPanel(); + + setTimeout(() => { + var coords = this.getWaveCoords(); + + for (let i = 0; i < coords.length; i++) + this.setKey( + coords[i][0], + coords[i][1], + { + appearence: { + image: { + address: path.join( + __filename, + '..', + '..', + '..', + '..', + 'Static', + 'logo', + 'single.png' + ), + size: 100, + offsetX: 0, + offsetY: 0, + rotation: 0 + } + } + }, + coords[i][2] + ); + + setTimeout(() => { + var coords = this.getWaveCoords(); + + for (let i = 0; i < coords.length; i++) + this.setKey( + coords[i][0], + coords[i][1], + { + state: { + type: 'empty', + toggle: false, + confirm: false + }, + appearence: {} + }, + coords[i][2] + ); + + setTimeout(() => { + var fadeCounter = 100; + var fadeInterval = setInterval(() => { + this.Deck.setBrightness(fadeCounter); + if (fadeCounter > 0) fadeCounter--; + else { + clearInterval(fadeInterval); + + this.ready = true; + Log('info', `Deck ${this.name} is ready for rendering`); + this.updateAll(); + + fadeInterval = setInterval(() => { + this.Deck.setBrightness(fadeCounter); + if (fadeCounter < 100) fadeCounter++; + else { + clearInterval(fadeInterval); + } + }, 10); + } + }, 10); + }, 1000); + }, 1000); + }, 1000); + }, 300); + } + } + + setDevicePath(path: string) { + if (path) { + this.Deck = StreamDeck.openStreamDeck(path); + this.listeners(); + + this.online = true; + + this.Deck.on('error', (error) => { + console.error(`Deck:${this.name}`, error); + this.online = false; + }); + this.init(); + } + } + + handleKeyEvent(triggerKey: Page_Key, event: 'up' | 'down') { + var instance = this; + + var handleEvent = (key: Page_Key) => { + switch (key.state.type) { + case 'custom': + if (key.state.toggle == false) { + if (key.state.confirm == false) { + if (key.actions != undefined && key.actions[event] != undefined) { + Undecked.Integrations.executeActions(key.actions[event], instance); + } + } else { + if (event == 'up') + this.showConfirm((result: boolean) => { + if (result == true) { + if (key.actions != undefined && key.actions.up != undefined) + Undecked.Integrations.executeActions(key.actions.up, instance); + } + }); + } + } else { + if (event == 'up') { + //When latched = true & When unlatch = false + + var state = false; + if (key._internal != undefined && key._internal._toggle != undefined) + state = key._internal._toggle; + + var location = Undecked.Pages.KeyManager.getLocation(key.id); + if (location) { + var handle = () => { + Undecked.Pages + .get(location.pageID) + .setKeyInternal(location.x, location.y, '_toggle', !state); + + var namestate = !state ? 'latch' : 'unlatch'; + + if (key.actions != undefined && key.actions[namestate] != undefined) { + Undecked.Integrations.executeActions(key.actions[namestate], instance); + } + }; + + if (key.state.confirm == true) { + this.showConfirm((result: boolean) => { + if (result == true) handle(); + }); + } else handle(); + } + } else { + if (key.state.confirm == false) + if (key.actions != undefined && key.actions[event] != undefined) + Undecked.Integrations.executeActions(key.actions[event], instance); + } + } + + break; + + case 'pageup': + if (event == 'down') { + var upPageID = Undecked.Pages.getIdByIndex(this.pageIndex - 1); + if (upPageID) this.setPageID(upPageID); + } + break; + + case 'pagedown': + if (event == 'down') { + var downPageID = Undecked.Pages.getIdByIndex(this.pageIndex + 1); + if (downPageID) this.setPageID(downPageID); + } + break; + } + }; + + if (this.ready == true && triggerKey.state != undefined) { + if (triggerKey.state.type == 'ghost') { + if (triggerKey.state.masterID != undefined) { + var masterLocation = Undecked.Pages.KeyManager.getLocation(triggerKey.state.masterID); + var masterPage = Undecked.Pages.get(masterLocation.pageID); + + if (masterPage) { + var masterKey = masterPage.getKey(masterLocation.x, masterLocation.y); + if ( + masterKey.state != undefined && + masterKey.state.ghostIDs != undefined && + masterKey.state.ghostIDs.includes(triggerKey.id) + ) + handleEvent(masterKey); + } + } + } else handleEvent(triggerKey); + } + } + + listeners() { + var instance = this; + function indexToXY(index: number) { + var y = Math.floor(index / instance.columns); + var x = index - Math.floor(index / instance.columns) * instance.columns; + return { x, y }; + } + this.Deck.on('down', (keyIndex) => { + var coords = indexToXY(keyIndex); + + if (Undecked.Pages.exists(instance.getPageID())) { + var page = Undecked.Pages.get(instance.getPageID()); + var key = page.getKey(String(coords.x), String(coords.y)); + + for (var captureType in this.captures) { + if (this.captures[captureType].enabled == true) { + return; + } + } + + this.handleKeyEvent(key, 'down'); + } + }); + + this.Deck.on('up', (keyIndex) => { + var coords = indexToXY(keyIndex); + + if (Undecked.Pages.exists(instance.getPageID())) { + var page = Undecked.Pages.get(instance.getPageID()); + var key = page.getKey(String(coords.x), String(coords.y)); + + for (var captureType in this.captures) { + if (this.captures[captureType].enabled == true) { + if (this.captures[captureType].callbacktriggers) + for (let i = 0; i < this.captures[captureType].callbacktriggers.length; i++) { + var callbacktrigger = this.captures[captureType].callbacktriggers[i]; + if (coords.x == callbacktrigger[0] && coords.y == callbacktrigger[1]) { + this.captures[captureType].callback(callbacktrigger[2]); + this.captures[captureType].enabled = false; + this.captures[captureType].callback = null; + return this.updateAll(); + } + } + return; + } + } + + this.handleKeyEvent(key, 'up'); + } + }); + } + + setPageID(pageID: string) { + var index = Undecked.Pages.getIndexById(pageID); + if (index != this.pageIndex) { + this.pageIndex = index; + this.updateAll(); + } + } + + getPageID() { + return Undecked.Pages.getIdByIndex(this.pageIndex); + } + + getName() { + return this.name; + } + + updateAll() { + if (Undecked.Pages.exists(this.getPageID())) { + var page = Undecked.Pages.get(this.getPageID()); + + for (let x = 0; x < this.columns; x++) { + for (let y = 0; y < this.rows; y++) { + this.setKey(x, y, page.getKey(String(x), String(y))); + } + } + } + } + + updateKey(x: number, y: number) { + for (var captureType in this.captures) if (this.captures[captureType].enabled == true) return; + + if (Undecked.Pages.exists(this.getPageID())) { + var page = Undecked.Pages.get(this.getPageID()); + this.setKey(x, y, page.requestKey(String(x), String(y))); + } + } + + fill(key: Page_Key) { + for (let x = 0; x < this.columns; x++) { + for (let y = 0; y < this.rows; y++) { + this.setKey(x, y, key); + } + } + } + + setKey(x: number, y: number, key: Page_Key, delay = 0) { + if (x < this.columns && y < this.rows) { + var keyIndex = y * this.columns + x; + + if (keyIndex < this.keys) { + setTimeout(() => applyChanges(this), delay); + } + + var applyChanges = (instance: Deck) => { + var canvas = createCanvas(Undecked.quality, Undecked.quality); + var context = canvas.getContext('2d'); + context.textBaseline = 'middle'; + context.textAlign = 'center'; + + if (key.state == undefined) key.state = { type: 'custom' }; + + if (key.state.type == 'empty') { + instance.Deck.clearKey(keyIndex); + } else if (key.state.type == 'custom') { + var appearence = key.appearence; + + render(appearence); + } else if (key.state.type == 'ghost') { + var appearence = key.appearence; + appearence.system = { + ghost: true + }; + render(appearence); + } else if (key.state.type == 'pageup') { + render({ + text: { value: 'Up', color: '#ffffff', size: 18, offsetX: 0, offsetY: 25 }, + background: { color: '#4676b7' }, + image: { + size: 100, + rotation: 0, + offsetX: 0, + offsetY: -15, + iconid: 'keyboard_arrow_up', + iconstyle: 'white' + }, + system: { + border: { + color: '#253e5e', + thickness: 8 + } + } + }); + } else if (key.state.type == 'pagedown') { + render({ + text: { value: 'Down', color: '#ffffff', size: 18, offsetX: 0, offsetY: -25 }, + background: { color: '#4676b7' }, + image: { + size: 100, + rotation: 0, + offsetX: 0, + offsetY: 15, + iconid: 'keyboard_arrow_down', + iconstyle: 'white' + }, + system: { + border: { + color: '#253e5e', + thickness: 8 + } + } + }); + } else if (key.state.type == 'currentpage') { + render({ + text: { + value: `Page\\n\\n${instance.pageIndex + 1}`, + color: '#ffffff', + size: 22, + offsetX: 0, + offsetY: 0 + }, + background: { color: '#4676b7' }, + system: { + border: { + color: '#253e5e', + thickness: 8 + } + } + }); + } + + function render(appearence) { + function background(cb: Function) { + if (appearence.background != undefined) { + context.fillStyle = appearence.background.color; + context.fillRect(0, 0, Undecked.quality, Undecked.quality); + context.fill(); + } + cb(); + } + + function image(cb: Function) { + if (appearence.image != undefined) { + var imageAddress = + appearence.image.address != undefined + ? appearence.image.address + : appearence.image.iconid != undefined + ? Undecked.Icons.getPath(appearence.image.iconid, appearence.image.iconstyle) + : null; + + var imageSize = + appearence.image.size != undefined + ? appearence.image.size / 100 * Undecked.quality + : Undecked.quality; + if (imageAddress) { + var centerX = Undecked.quality / 2 + appearence.image.offsetX / 100 * Undecked.quality; + var centerY = Undecked.quality / 2 + appearence.image.offsetY / 100 * Undecked.quality; + + loadImage(imageAddress).then((image) => { + context.save(); + context.translate(centerX, centerY); + context.rotate(appearence.image.rotation * Math.PI / 180); + context.drawImage( + image, + imageSize / 2 - imageSize, + imageSize / 2 - imageSize, + imageSize, + imageSize + ); + context.restore(); + cb(); + }); + } else cb(); + } else cb(); + } + + function text(cb: Function) { + if (appearence.text != undefined) { + context.fillStyle = appearence.text.color; + context.font = `700 ${appearence.text.size * (Undecked.quality / 100)}px "Montserrat"`; + + var text = appearence.text.value; + var lineHeight = appearence.text.size * (Undecked.quality / 100); + + var centerX = Undecked.quality / 2 + appearence.text.offsetX / 100 * (Undecked.quality * 2); + var centerY = Undecked.quality / 2 + appearence.text.offsetY / 100 * Undecked.quality; + var canvasYCounter = centerY; + + var words = text != undefined ? text.replace(/\\n/g, ' \\n ').split(' ') : ''; + var line = ''; + + var totalLineHeight = 0; + for (var n = 0; n < words.length; n++) { + if (words[n].length == 0) continue; + + var testLine = line + words[n] + ' '; + var metrics = context.measureText(testLine); + var testWidth = metrics.width; + if (words[n] != '\\n') + if (testWidth > Undecked.quality && n > 0) { + line = words[n] + ' '; + totalLineHeight += lineHeight; + } else { + line = testLine; + } + else { + totalLineHeight += lineHeight; + line = ''; + } + } + + line = ''; + canvasYCounter = canvasYCounter - totalLineHeight / 2; + + var firstSkip = false; + for (var n = 0; n < words.length; n++) { + if (words[n].length == 0) continue; + var testLine = line + words[n] + ' '; + var metrics = context.measureText(testLine); + var testWidth = metrics.width; + if (words[n] != '\\n') + if (testWidth > Undecked.quality && n > 0) { + context.fillText(line, centerX, canvasYCounter); + line = words[n] + ' '; + canvasYCounter += lineHeight; + } else { + line = testLine; + } + else { + context.fillText(line, centerX, canvasYCounter); + line = ''; + + canvasYCounter += firstSkip ? lineHeight * 2 : lineHeight; + if (firstSkip) firstSkip = false; + } + } + context.fillText(line, centerX, canvasYCounter); + } + cb(); + } + + function system(cb: Function) { + if (appearence.system != undefined) { + if (appearence.system.border != undefined) { + var relativeThickness = appearence.system.border.thickness / 100 * Undecked.quality; + context.fillStyle = appearence.system.border.color; + context.fillRect(0, 0, Undecked.quality, relativeThickness); + context.rect( + 0, + Undecked.quality - relativeThickness, + Undecked.quality, + relativeThickness + ); + context.rect(0, 0, relativeThickness, Undecked.quality); + context.rect( + Undecked.quality - relativeThickness, + 0, + relativeThickness, + Undecked.quality + ); + context.fill(); + } + + if (appearence.system.ghost == true) { + // var imageAddress = path.join( + // __filename, + // '..', + // '..', + // '..', + // '..', + // 'Static', + // 'icon', + // 'ghost.png' + // ); + // var size = 50 / 100 * Undecked.quality; + // loadImage(imageAddress).then((image) => { + // context.save(); + // context.globalAlpha = 0.7; + // context.translate(Undecked.quality / 2, Undecked.quality / 2); + // context.drawImage(image, size / 2 - size, size / 2 - size, size, size); + // context.restore(); + // cb(); + // }); + } + } + + cb(); + } + + background(() => { + image(() => { + text(() => { + system(() => { + Jimp.read(canvas.toBuffer()) + .then((img) => { + return img.resize(instance.iconsize, instance.iconsize); + }) + .then((image) => { + instance.Deck.fillKeyBuffer(keyIndex, image.bitmap.data, { + format: 'rgba' + }); + }); + }); + }); + }); + }); + } + + // if (keyData.color != undefined) + // instance.Deck.fillKeyColor(keyIndex, keyData.color.r, keyData.color.g, keyData.color.b); + + // if (keyData.image != undefined) { + }; + } + } + + showConfirm(callback: (result: boolean) => void) { + var cancel: [number, number, any] = [ + 0, + 0, + false + ]; + var deny: [number, number, any] = null; + var confirm: [number, number, any] = null; + + if (this.columns % 2 == 0) { + deny = [ + Math.floor(this.columns / 2) - 2, + 2, + false + ]; + confirm = [ + Math.floor(this.columns / 2) + 1, + 2, + true + ]; + } else { + deny = [ + Math.floor(this.columns / 2) - 1, + 2, + false + ]; + confirm = [ + Math.floor(this.columns / 2) + 1, + 2, + true + ]; + } + + this.captures.confirm.enabled = true; + this.captures.confirm.callbacktriggers = [ + cancel, + deny, + confirm + ]; + this.captures.confirm.callback = callback; + + this.Deck.clearPanel(); + + this.setKey(confirm[0], confirm[1], { + appearence: { + image: { + iconid: 'check', + iconstyle: 'white', + offsetX: 0, + offsetY: 0, + rotation: 0, + size: 100 + }, + background: { + color: '#4caf50' + } + } + }); + + this.setKey(deny[0], deny[1], { + appearence: { + image: { + iconid: 'clear', + iconstyle: 'white', + offsetX: 0, + offsetY: 0, + rotation: 0, + size: 100 + }, + background: { + color: '#f44336' + } + } + }); + + this.setKey(cancel[0], cancel[1], { + appearence: { + image: { + iconid: 'arrow_back', + iconstyle: 'white', + offsetX: 0, + offsetY: 0, + rotation: 0, + size: 100 + }, + background: { + color: '#000000' + } + } + }); + + var instance = this; + var flickerList: { x: number; data: Page_Key }[] = []; + function createText(value: string, x: number) { + var data: Page_Key = { + appearence: { + text: { + color: '#ffffff', + offsetX: 1, + offsetY: 0, + size: 30, + value + }, + background: { + color: '#000000' + } + } + }; + instance.setKey(x, 1, data); + flickerList.push({ x, data }); + } + if (this.columns % 2 == 0) { + createText('Are', 2); + createText('you', 3); + createText('sure', 4); + createText('?', 5); + } else { + createText('Are', 1); + createText('you', 2); + createText('sure?', 3); + } + var flickerInterval = setInterval(() => { + if (this.captures.confirm.enabled == true) { + for (let i = 0; i < flickerList.length; i++) { + var flickeritem = flickerList[i]; + if (flickeritem.data.appearence.background.color == '#000000') { + flickeritem.data.appearence.background.color = '#ffffff'; + flickeritem.data.appearence.text.color = '#000000'; + } else { + flickeritem.data.appearence.background.color = '#000000'; + flickeritem.data.appearence.text.color = '#ffffff'; + } + instance.setKey(flickeritem.x, 1, flickeritem.data); + } + } else clearInterval(flickerInterval); + }, 500); + } + + getWaveCoords(): [number, number, number][] { + var coords = []; + for (let x0 = 0; x0 < 8; x0++) { + var delay = x0; + coords.push([ + x0, + 0, + delay * 200 + ]); + } + for (let x1 = -1; x1 < 8; x1++) { + var delay = x1 + 1; + if (x1 >= 0) + coords.push([ + x1, + 1, + delay * 200 + ]); + } + for (let x2 = -2; x2 < 8; x2++) { + var delay = x2 + 2; + if (x2 >= 0) + coords.push([ + x2, + 2, + delay * 200 + ]); + } + for (let x3 = -3; x3 < 8; x3++) { + var delay = x3 + 3; + if (x3 >= 0) + coords.push([ + x3, + 3, + delay * 200 + ]); + } + return coords; + } +}; + +// export interface Deck { +// export: () => Deck_Config; +// setDevicePath: (path: string) => void; +// getPageID: () => string; +// setPageID: (pageID: string) => void; +// setKey: (x: number, y: number, key: Page_Key) => void; +// updateKey: (x: number, y: number) => void; +// updateAll: () => void; +// getName: () => string; +// } + +export interface Deck_Config { + name: string; + serialNumber: string; + model: string; +} diff --git a/Backend/src/Decks/DeckManager.ts b/Backend/src/Decks/DeckManager.ts new file mode 100644 index 0000000..f347290 --- /dev/null +++ b/Backend/src/Decks/DeckManager.ts @@ -0,0 +1,128 @@ +import { Undecked } from '../Core'; +import * as path from 'path' +import { Log } from '../Logger'; +import * as StreamDeck from '@elgato-stream-deck/node' +import { Deck, Deck_Config } from './Deck'; + +import * as fs from 'fs-extra'; +var { writeFile, pathExists, readJson } = fs; + +declare var Undecked: Undecked; + +export class DeckManager { + managerConfigPath: string; + + managerConfig: DeckManager_Config; + + decks: DeckManager_Decks; + + constructor() { } + + load(callback: () => void) { + this.managerConfigPath = path.join(Undecked.dataPath, 'decks.json'); + this.decks = {}; + + this.loadConfig(() => { + for (let i = 0; i < this.managerConfig.decks.length; i++) { + var deckConfig = this.managerConfig.decks[i]; + this.decks[deckConfig.serialNumber] = new Deck(deckConfig, null); + } + + this.ensureDecks((newDecks: number) => { + Log( + 'info', + `Loaded ${Object.keys(this.decks).length - newDecks} existing deck(s) and ${newDecks} new deck(s)` + ); + callback(); + }); + }); + } + + loadConfig(callback: () => void) { + pathExists(this.managerConfigPath, (err, exists) => { + if (err) throw err; + if (exists) { + readJson(this.managerConfigPath, (err, json) => { + if (err) throw err; + this.managerConfig = json; + callback(); + }); + } else { + this.managerConfig = defaultDeckConfig; + this.saveConfig(callback); + } + }); + } + + saveConfig(callback?: () => void) { + var toSave: DeckManager_Config = { + decks: [] + }; + for (var serialNumber in this.decks) toSave.decks.push(this.decks[serialNumber].export()); + + writeFile(this.managerConfigPath, JSON.stringify(toSave, null, 4), (err) => { + if (err) Log('error', 'Error whilst saving manager config', err.message); + if (callback) callback(); + }); + } + + hasDeck(serialNumber: string): boolean { + return this.decks[serialNumber] != undefined; + } + + getDeck(serialNumber: string): Deck { + if (this.decks[serialNumber]) return this.decks[serialNumber]; + return null; + } + + ensureDecks(callback: (newDecks: number) => void) { + var currentDecks = Object.keys(this.decks).length; + var decks = StreamDeck.listStreamDecks(); + for (let i = 0; i < decks.length; i++) { + if (!this.hasDeck(decks[i].serialNumber)) + this.decks[decks[i].serialNumber] = new Deck( + { + serialNumber: decks[i].serialNumber, + model: decks[i].model, + name: `Unnamed ${decks[i].model}` + }, + decks[i].path + ); + else this.decks[decks[i].serialNumber].setDevicePath(decks[i].path); + } + + if (Object.keys(this.decks).length > currentDecks) + this.saveConfig(() => callback(Object.keys(this.decks).length - currentDecks)); + else callback(0); + } + + getList(): { serialNumber: string; name: string }[] { + var list: { serialNumber: string; name: string }[] = []; + for (var serialNumber in this.decks) { + list.push({ serialNumber, name: this.decks[serialNumber].getName() }); + } + + return list; + } +} + +var defaultDeckConfig: DeckManager_Config = { + decks: [] +}; + +// export interface DeckManager { +// decks: DeckManager_Decks; + +// load: (callback: () => void) => void; +// getList: () => { serialNumber: string; name: string }[]; +// hasDeck: (serialNumber: string) => boolean; +// getDeck: (serialNumber: string) => Deck; +// } + +export interface DeckManager_Config { + decks: Deck_Config[]; +} + +export interface DeckManager_Decks { + [serialNumber: string]: Deck; +} diff --git a/Backend/src/FileHandler.ts b/Backend/src/FileHandler.ts new file mode 100644 index 0000000..d6fd5fc --- /dev/null +++ b/Backend/src/FileHandler.ts @@ -0,0 +1,68 @@ +import { writeFile } from 'fs'; +import * as path from 'path' +import { Undecked } from './Core'; +import { Log } from './Logger'; + +import * as fs from 'fs-extra'; +var { ensureDir, pathExists, readJson } = fs; + +declare var Undecked: Undecked; +declare var Config: Config; + +export class FileHandler { + configPath: string; + + constructor() { } + + load(callback: () => void) { + Log('info', 'Preparing files'); + ensureDir(path.join(Undecked.dataPath), (err) => { + if (err) throw err; + this.loadConfig(() => { + callback(); + }); + }); + } + + loadConfig(callback: () => void) { + this.configPath = path.join(Undecked.dataPath, 'config.json'); + pathExists(this.configPath, (err, exists) => { + if (err) throw err; + if (exists) { + readJson(this.configPath, (err, json) => { + if (err) throw err; + Config = json; + callback(); + }); + } else { + Config = defaultConfig; + this.saveConfig(callback); + } + }); + } + + saveConfig(callback?: () => void) { + writeFile(this.configPath, JSON.stringify(Config, null, 4), (err) => { + if (err) Log('error', 'Error whilst saving config', err.message); + if (callback) callback(); + }); + } +} + +var defaultConfig: Config = { + ports: { + http: 9999 + }, + name: null +}; + +// export interface FileHandler { +// load: (callback: () => void) => void; +// } + +export interface Config { + ports: { + http: number; + }; + name: string +} diff --git a/Backend/src/Icons.ts b/Backend/src/Icons.ts new file mode 100644 index 0000000..83be18d --- /dev/null +++ b/Backend/src/Icons.ts @@ -0,0 +1,56 @@ +import { readdir } from 'fs'; +import * as path from 'path' +import { Undecked } from './Core'; +import { Log } from './Logger'; + +declare var Undecked: Undecked; + +export class Icons { + materialPath: string; + + icons: { id: string; name: string }[]; + + iconIDs: string[]; + + constructor() { + this.materialPath = path.join(__filename, '..', '..', '..', 'Static', 'materialicons'); + + this.icons = []; + this.iconIDs = []; + } + + load(callback: () => void) { + Log('info', 'Loading icons'); + readdir(path.join(this.materialPath, 'black'), (err, files) => { + if (err) throw err; + + for (let i = 0; i < files.length; i++) { + if (files[i].includes('.png') && !files[i].includes('_low')) { + var fileID = files[i].replace('.png', ''); + this.iconIDs.push(fileID); + this.icons.push({ id: fileID, name: fileID.replace(/_/g, ' ') }); + } + } + + Log('info', `Loaded ${files.length} icon(s)`); + callback(); + }); + } + + getList(): { id: string; name: string }[] { + return this.icons; + } + + getPath(iconID: string, style: 'black' | 'white') { + if (this.iconIDs.includes(iconID)) return path.join(this.materialPath, style, `${iconID}.png`); + console.log(`Invalid icon '${iconID}'`); + return null; + } +} + +// export interface Icons { +// load: (callback: () => void) => void; + +// getList: () => { id: string; name: string }[]; +// getPath: (iconID: string, style: 'black' | 'white') => string; +// } diff --git a/Backend/src/Integrations/ActionAPI.ts b/Backend/src/Integrations/ActionAPI.ts new file mode 100644 index 0000000..e8c155b --- /dev/null +++ b/Backend/src/Integrations/ActionAPI.ts @@ -0,0 +1,62 @@ +import { ConnectionManager_Connection } from '../ConnectionManager'; +import { Undecked } from '../Core'; +import { Deck } from '../Decks/Deck'; +import { Log } from '../Logger'; +import { EditorAPI } from './EditorAPI'; + +declare var Undecked: Undecked; +export class ActionAPI { + private _integrationID: string; + _openEditor: (editorAPI: EditorAPI, properties: ActionAPI_Properties) => void; + _hdl: (properties: ActionAPI_Properties, status: (text: string) => void, deck: Deck) => void; + + constructor(settings: ActionAPI_Settings) { + this._integrationID = settings.integrationID; + } + + /** + * @deprecated + * Replaced by 'OnExecute' + */ + handle( + callback: ( + properties: ActionAPI_Properties | any, + status: (text: string, type?: ActionAPI_StatusTypes) => void, + deck: Deck + ) => void + ) { + if (this._hdl == undefined) { + this._hdl = callback; + } else Log('error', `Unable to register two 'handle' events`); + } + + onExecute(callback: ( + properties: ActionAPI_Properties | any, + status: (text: string, type?: ActionAPI_StatusTypes) => void, + deck: Deck + ) => void + ) { + if (this._hdl == undefined) { + this._hdl = callback; + } else Log('error', `Unable to register two 'onExecute' (Used to be 'handle') events`); + } + + onOpenEditor(callback: (editorAPI: EditorAPI, properties: ActionAPI_Properties | any) => void) { + if (this._openEditor == undefined) { + this._openEditor = callback; + } else Log('error', `Unable to register two 'onOpenEditor' events`); + } + + getConnection(connectionType: string, connectionID: string): ConnectionManager_Connection { + return Undecked.Connections.getConnection(this._integrationID, connectionType, connectionID); + } +} + +export type ActionAPI_StatusTypes = 'info' | 'error' | 'warn'; +export interface ActionAPI_Settings { + integrationID: string; +} + +export interface ActionAPI_Properties { + [propertyID: string]: any; +} diff --git a/Backend/src/Integrations/EditorAPI.ts b/Backend/src/Integrations/EditorAPI.ts new file mode 100644 index 0000000..d431069 --- /dev/null +++ b/Backend/src/Integrations/EditorAPI.ts @@ -0,0 +1,118 @@ +import { ConnectionManager_Connection } from '../ConnectionManager'; +import { Undecked } from '../Core'; +import { Log } from '../Logger'; +import { Page_Key, Page_Key_Action } from '../Pages/Page'; +import { ActionAPI_Properties } from './ActionAPI'; +import { Integration_Connection_Field } from './IntegrationsManager'; + +declare var Undecked: Undecked; +export class EditorAPI { + _change: (properties: ActionAPI_Properties) => void; + + keyPageID: string; + keyX: number; + keyY: number; + key: Page_Key; + + private _integrationID: string; + private _actionInstance: Page_Key_Action; + private _editorID: string; + isOpen: boolean; + + tools: { + getFieldFromFields: (fields: EditorAPI_Field[], fieldID: string) => EditorAPI_Field; + objectifyFields: (fields: EditorAPI_Field[]) => { [fieldID: string]: EditorAPI_Field }; + objectifyFieldsValues: (fields: EditorAPI_Field[]) => { [fieldID: string]: string }; + }; + + constructor(settings: EditorAPI_Settings) { + this._actionInstance = settings.actionInstance; + + this._integrationID = settings.integrationID; + this.keyPageID = settings.pageID; + this._editorID = settings.editorID; + this.keyX = settings.x; + this.keyY = settings.y; + this.key = settings.key; + this.isOpen = false; + + this.tools = { + getFieldFromFields(fields: EditorAPI_Field[], fieldID: string) { + for (let i = 0; i < fields.length; i++) if ((fields[i].id = fieldID)) return fields[i]; + return null; + }, + objectifyFields(fields: EditorAPI_Field[]): { [fieldID: string]: EditorAPI_Field } { + var fieldObject = {}; + for (let i = 0; i < fields.length; i++) fieldObject[fields[i].id] = fields[i]; + return fieldObject; + }, + objectifyFieldsValues(fields: EditorAPI_Field[]): { [fieldID: string]: string } { + var fieldObject = {}; + for (let i = 0; i < fields.length; i++) fieldObject[fields[i].id] = fields[i].value; + return fieldObject; + } + }; + } + + private _emit(query: string, ...args: any[]) { + if (this.isOpen) Undecked.SocketServer.broadcast(`AE_${this._editorID}`, query, ...args); + } + + close() { + this.isOpen = false; + } + + saveProperties(properties: { [property: string]: any }) { + this._actionInstance.properties = properties; + + if (Undecked.Pages.exists(this.keyPageID)) Undecked.Pages.get(this.keyPageID).save(); + } + + onFieldChanges(callback: (fields: EditorAPI_Field[]) => void) { + if (this._change == undefined) { + this._change = callback; + } else Log('error', `Unable to register two 'onChange' events`); + } + + setFields(fields: EditorAPI_Field[]) { + for (let i = 0; i < fields.length; i++) + if (fields[i].type == 'connection') { + fields[i].values = [ + { id: 'none', text: 'None' } + ]; + var connectionType = fields[i].connectionType; + if (connectionType) { + fields[i].values = [ + { id: 'none', text: 'None' }, + ...Undecked.Connections.getConnections(this._integrationID, connectionType) + ]; + } + } + + this._emit('fields', fields); + } +} + +export interface EditorAPI_Settings { + actionInstance: Page_Key_Action; + + integrationID: string; + pageID: string; + editorID: string; + x: number; + y: number; + key: Page_Key; +} + +export interface EditorAPI_Field { + id: string; + name: string; + type: 'text' | 'number' | 'select' | 'connection' | 'color' | 'checkbox'; + values?: { id: string; text: string }[]; + multi?: boolean; +} + +export interface EditorAPI_Field extends Integration_Connection_Field { + required?: boolean; + value: any; +} diff --git a/Backend/src/Integrations/IntegrationApi.ts b/Backend/src/Integrations/IntegrationApi.ts new file mode 100644 index 0000000..1b6fdc6 --- /dev/null +++ b/Backend/src/Integrations/IntegrationApi.ts @@ -0,0 +1,102 @@ +declare var Undecked: Undecked; + +import { Undecked } from '../Core'; +import { Log } from '../Logger'; +import { ActionAPI } from './ActionAPI'; +import { IntegrationsManager_Integration } from './IntegrationsManager'; + +export class IntegrationAPI { + private _integrationID: string; + private _integration: IntegrationsManager_Integration; + + private _actions: { + [actionID: string]: { api: ActionAPI; name: string }; + }; + + private _connectionvalidators: { + [connectionType: string]: (connectionValidatorAPI: ConnectionValidatorAPI) => void; + }; + + constructor(settings: IntegrationAPI_Settings) { + this._integrationID = settings.integrationID; + this._integration = settings.integration; + this._actions = {}; + this._connectionvalidators = {}; + } + + registerAction(actionID: string, name: string | any, callback?: (actionAPI: ActionAPI) => void) { + //Backwards compatibility + if (typeof name == 'function') { + callback = name; + name = actionID; + if (this._integration.integration.actions != undefined) + for (let i = 0; i < this._integration.integration.actions.length; i++) + if (this._integration.integration.actions[i].id == actionID) { + name = this._integration.integration.actions[i].name; + break; + } + } + + if (this._actions[actionID] == undefined) { + this._actions[actionID] = { api: new ActionAPI({ integrationID: this._integrationID }), name }; + callback(this._actions[actionID].api); + } else Log('error', `Integration '${this._integrationID}' tried to register duplicate action '${actionID}'`); + } + + registerConnectionValidator( + connectionType: string, + callback: (connectionValidatorAPI: ConnectionValidatorAPI) => void + ) { + if (this._integration.connectionslist.includes(connectionType)) { + if (this._connectionvalidators[connectionType] == undefined) { + this._connectionvalidators[connectionType] = callback; + } else + Log( + 'error', + `Integration '${this + ._integrationID}' tried to register duplicate connection validator '${connectionType}'` + ); + } else + Log( + 'error', + `Integration '${this + ._integrationID}' tried to register non-existing connection validator '${connectionType}'` + ); + } + + hasAction(actionID: string): boolean { + return this._actions[actionID] != undefined; + } + + getAction(actionID: string): ActionAPI { + if (this.hasAction(actionID)) return this._actions[actionID].api; + return null; + } + + getActionList(): { id: string; name: string }[] { + var list: { id: string; name: string }[] = []; + for (var actionID in this._actions) list.push({ id: actionID, name: this._actions[actionID].name }); + return list; + } + + hasValidator(connectionType: string): boolean { + return this._connectionvalidators[connectionType] != undefined; + } + + getValidator(connectionType: string): (connectionValidatorAPI: ConnectionValidatorAPI) => void { + if (this.hasValidator(connectionType)) return this._connectionvalidators[connectionType]; + return null; + } +} + +export interface IntegrationAPI_Settings { + integrationID: string; + integration: IntegrationsManager_Integration; +} + +export interface ConnectionValidatorAPI { + properties: { [key: string]: any }; + instance: any; + callback: (valid: boolean, errormessage?: string) => void; + setInstance: (instance: any) => void; +} diff --git a/Backend/src/Integrations/IntegrationsManager.ts b/Backend/src/Integrations/IntegrationsManager.ts new file mode 100644 index 0000000..807c297 --- /dev/null +++ b/Backend/src/Integrations/IntegrationsManager.ts @@ -0,0 +1,389 @@ +import { Undecked } from '../Core'; +import * as path from 'path' +import { Log } from '../Logger'; +import { IntegrationAPI } from './IntegrationApi'; +import { EditorAPI, EditorAPI_Field } from './EditorAPI'; +import { Page_Key_Actions } from '../Pages/Page'; +import { Deck } from '../Decks/Deck'; + +import * as fs from 'fs-extra'; +var { ensureDir, pathExists, readdir, readJSON, readJson } = fs; + +declare var Undecked: Undecked; + +export class IntegrationsManager { + integrations: IntegrationsManager_Integrations; + + openEditors: { [editorID: string]: IntegrationsManager_ActionEditor }; + + constructor() { + this.integrations = {}; + this.openEditors = {}; + } + + load(callback: () => void) { + Log('info', 'Loading integrations'); + ensureDir(path.join(Undecked.dataPath, 'custom_integrations'), (err) => { + if (err) throw err; + + this.loadIntegrations(callback); + }); + } + + loadIntegrations(callback: () => void) { + var instance = this; + + var integrations = { buildin: [], custom: [] }; + readdir(path.join(__filename, '..', 'buildin'), (err, buildinfiles) => { + if (err) throw err; + integrations.buildin = buildinfiles; + readdir(path.join(Undecked.dataPath, 'custom_integrations'), (err, customfiles) => { + if (err) throw err; + integrations.custom = customfiles; + var loaded = { buildin: 0, custom: 0 }; + function loadIntegrations(type: 'buildin' | 'custom', cb: Function, i = 0) { + if (integrations[type][i]) { + var integrationID = integrations[type][i]; + var integrationAddress = + type == 'buildin' + ? path.join(__filename, '..', 'buildin', integrationID, 'integration') + : path.join(Undecked.dataPath, 'custom_integrations', integrationID, 'integration'); + + var waitInterval; + try { + instance.integrations[integrationID] = { + type, + api: null, + connectionslist: [], + connectionsmap: {}, + integration: require(integrationAddress) + }; + + var waitCounter = 0; + waitInterval = setInterval(() => { + if ( + instance.integrations[integrationID].integration != undefined && + instance.integrations[integrationID].integration.main != undefined + ) { + clearInterval(waitInterval); + loaded[type]++; + loadIntegrations( + type, + () => { + Log('info', `Loaded ${type} integration '${integrationID}'`); + cb(); + }, + i + 1 + ); + } else { + waitCounter++; + + if (waitCounter > 200) { + clearInterval(waitInterval); + delete instance.integrations[integrationID]; + + Log( + 'error', + `Unable to load ${type} integration '${integrationID}': Loading timeout` + ); + loadIntegrations(type, cb, i + 1); + } + } + }, 10); + } catch (error) { + clearInterval(waitInterval); + Log('error', `Unable to load ${type} integration '${integrationID}': ${error.message}`); + loadIntegrations(type, cb, i + 1); + } + } else cb(); + } + + loadIntegrations('buildin', () => { + loadIntegrations('custom', () => { + for (var integrationID in instance.integrations) { + var integration = instance.integrations[integrationID]; + // for (let i = 0; i < integration.integration.actions.length; i++) { + // if (integration.integration.actions[i] != undefined) + // integration.actionslist.push(integration.integration.actions[i].id); + // else + // Log( + // `warn`, + // `Invalid action of ${integrationID} ${JSON.stringify( + // integration.integration.actions[i], + // null, + // 4 + // )}` + // ); + // } + if (integration.integration.connections != undefined) + for (let i = 0; i < integration.integration.connections.length; i++) { + integration.connectionslist.push(integration.integration.connections[i].type); + integration.connectionsmap[integration.integration.connections[i].type] = + integration.integration.connections[i]; + } + integration.api = new IntegrationAPI({ integrationID, integration }); + try { + integration.integration.main(integration.api); + } catch (error) { + Log('error', `Error in '${integrationID}'`, error.message, error.stack); + } + } + Log('info', `Loaded ${loaded.buildin} buildin integrations and ${loaded.custom} integrations`); + callback(); + }); + }); + }); + }); + } + + exists(integrationID: string): boolean { + return this.integrations[integrationID] != undefined; + } + + get(integrationID: string): IntegrationsManager_Integration { + if (this.exists(integrationID)) return this.integrations[integrationID]; + return null; + } + + getActions(): IntegrationsManager_ActionsListItem[] { + var actions: IntegrationsManager_ActionsListItem[] = []; + for (var integrationID in this.integrations) { + var integration = this.integrations[integrationID]; + actions = actions.concat( + integration.api.getActionList().map((action) => { + return { + integrationID, + integrationName: integration.integration.name, + actionID: action.id, + actionName: action.name + }; + }) + ); + } + + return actions; + } + + getConnections(): IntegrationsManager_ConnectionsListItem[] { + var connections: IntegrationsManager_ConnectionsListItem[] = []; + + for (var integrationID in this.integrations) { + var integration = this.integrations[integrationID]; + if (integration.integration.connections != undefined) + for (let i = 0; i < integration.integration.connections.length; i++) { + var con = integration.integration.connections[i]; + connections.push({ + integrationID, + integrationName: integration.integration.name, + connectionType: con.type, + connectionName: con.name + }); + } + } + + connections.sort((a, b) => { + if (a.integrationName == b.integrationName) return 0; + return a.integrationName > b.integrationName ? 1 : -1 + }) + + return connections; + } + + startEditor( + settings: Action_Settings + ): { error?: string; actionEditorID?: string; properties?: { [property: string]: any } } { + if (this.exists(settings.integrationID)) { + var integrationWrapper = this.get(settings.integrationID); + var integration = integrationWrapper.integration; + var integrationAPI = integrationWrapper.api; + + if (integrationAPI.hasAction(settings.actionID)) { + var action = integrationAPI.getAction(settings.actionID); + + if (Undecked.Pages.exists(settings.pageID)) { + var page = Undecked.Pages.get(settings.pageID); + if (page.hasKey(settings.keyX, settings.keyY)) { + var key = page.getKey(settings.keyX, settings.keyY); + var actionInstance = page.getActionInstance(key, settings.actionInstanceID); + + if (actionInstance) { + var editorID = Undecked.generateRandom(8, (generatedValid: string) => { + return !this.exists(generatedValid); + }); + + var editorAPI = new EditorAPI({ + actionInstance, + + integrationID: settings.integrationID, + pageID: settings.pageID, + editorID, + x: settings.keyX, + y: settings.keyY, + key + }); + + this.openEditors[editorID] = { + editor: editorAPI, + editorID, + ready: () => { + editorAPI.isOpen = true; + + action._openEditor(editorAPI, actionInstance.properties); + }, + destroy: () => { + if (this.openEditors[editorID] != undefined) { + this.openEditors[editorID].editor.close(); + delete this.openEditors[editorID]; + } + } + }; + return { actionEditorID: editorID, properties: {} }; + } else return { error: `Key does not have this actioninstance` }; + } else return { error: `Key does not exist` }; + } else return { error: `Page '${settings.pageID}' does not exist` }; + } else return { error: `Action '${settings.actionID}' does not exist` }; + } else return { error: `Integration '${settings.integrationID}' does not exist` }; + } + + editorExists(editorID: string): boolean { + return this.openEditors[editorID] != undefined; + } + + getEditor(editorID: string): IntegrationsManager_ActionEditor { + if (this.editorExists(editorID)) return this.openEditors[editorID]; + return null; + } + + executeActions(actions: Page_Key_Actions, deck: Deck) { + for (var actionInstanceID in actions) { + var actionInstance = actions[actionInstanceID]; + + if (Undecked.Integrations.exists(actionInstance.integrationID)) { + var integration = Undecked.Integrations.get(actionInstance.integrationID); + if (integration.api.hasAction(actionInstance.actionID)) { + var action = integration.api.getAction(actionInstance.actionID); + if (typeof action._hdl == 'function') + action._hdl( + actionInstance.properties, + (text: string, type: 'info' | 'error' | 'warning' = 'info') => { + if (actionInstance.logs == undefined) actionInstance.logs = []; + + actionInstance.logs = [ + { timestamp: Date.now(), type, text }, + ...actionInstance.logs + ]; + if (actionInstance.logs.length > 20) + actionInstance.logs.splice(20, actionInstance.logs.length - 20); + + // Log( + // type.replace('warning', 'warn'), + // `[Deck:${deck != null ? deck.getName() : 'Internal'}][Integration:${integration + // .integration.name}][Action:${actionInstance.actionID}] ${text}` + // ); + }, + deck + ); + else + Log( + 'warn', + `Tried calling non-exisintg handler for action '${actionInstance.actionID}' of integration '${actionInstance.integrationID}'` + ); + } + } + } + } +} + +// export interface IntegrationsManager { +// load: (callback: () => void) => void; +// exists: (integrationID: string) => boolean; +// get: (integrationID: string) => IntegrationsManager_Integration; +// getActions: () => IntegrationsManager_ActionsListItem[]; +// getConnections: () => IntegrationsManager_ConnectionsListItem[]; +// startEditor: ( +// settings: Action_Settings +// ) => { error?: string; actionEditorID?: string; properties?: { [property: string]: any } }; +// editorExists: (editorID: string) => boolean; +// getEditor: (editorID: string) => IntegrationsManager_ActionEditor; +// executeActions: (actions: Page_Key_Actions, deck: Deck) => void; +// } + +export interface IntegrationsManager_Integrations { + [integrationID: string]: IntegrationsManager_Integration; +} + +export interface IntegrationsManager_Integration { + type: 'buildin' | 'custom'; + api: IntegrationAPI; + connectionslist: string[]; + connectionsmap: { [connectionType: string]: Integration_Connection }; + integration: Integration; +} + +export interface IntegrationsManager_ActionsListItem { + integrationID: string; + integrationName: string; + actionID: string; + actionName: string; +} + +export interface IntegrationsManager_ConnectionsListItem { + integrationID: string; + integrationName: string; + connectionType: string; + connectionName: string; +} + +export interface Integration { + name: string; + description: string; + main: (api: IntegrationAPI) => {}; + + /** + * @deprecated Has been replaced by title argument in integrationAPI.registerAction function + */ + actions?: Integration_Action[]; + connections?: Integration_Connection[]; +} + +export interface Integration_Action { + id: string; + name: string; +} + +export interface Integration_Connection { + type: string; + name: string; + message?: string; + link?: { + address: string; + title: string; + }; + fields: Integration_Connection_Field[]; +} + +export interface Integration_Connection_Field { + id: string; + name: string; + type: 'text' | 'number' | 'select' | 'connection' | 'color' | 'checkbox'; + value?: any; + values?: { id: string; text: string }[]; + connectionType?: string; +} + +export interface Action_Settings { + integrationID: string; + actionID: string; + actionInstanceID: string; + pageID: string; + actionType: 'up' | 'down'; + keyX: number; + keyY: number; +} + +export interface IntegrationsManager_ActionEditor { + editor: EditorAPI; + editorID: string; + ready: () => void; + destroy: () => void; +} diff --git a/Backend/src/Integrations/buildin/blackmagick/actions/atem/fadeToBlack.ts b/Backend/src/Integrations/buildin/blackmagick/actions/atem/fadeToBlack.ts new file mode 100644 index 0000000..fa6bfbe --- /dev/null +++ b/Backend/src/Integrations/buildin/blackmagick/actions/atem/fadeToBlack.ts @@ -0,0 +1,42 @@ +import { ActionAPI } from "../../../../ActionAPI" +import { EditorAPI } from "../../../../EditorAPI" +const { Atem } = require('atem-connection') + +module.exports = (ActionAPI: ActionAPI) => { + ActionAPI.onExecute((properties, status) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : "none" + + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('bm_atem', connectionID) + if (connection && connection.instance) { + var atem = connection.instance; + + atem.fadeToBlack().then(() => { + status(`Atem fade to black`, 'info') + }).catch((error) => { + status(`Error whilst setting atem fadetoblack: ${error}`, 'error') + }) + } else status('Atem is not online', 'error') + } else status('No connection specified', 'error') + }) + + ActionAPI.onOpenEditor((EditorAPI: EditorAPI, properties: any) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : "none" + + EditorAPI.onFieldChanges((fields) => { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields) + + connectionID = fieldObject.connectionID + + EditorAPI.saveProperties({ connectionID }) + }) + + EditorAPI.setFields([{ + id: 'connectionID', + name: "Connection", + type: "connection", + connectionType: "bm_atem", + value: connectionID + }]) + }) +} \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/blackmagick/actions/atem/setPreview.ts b/Backend/src/Integrations/buildin/blackmagick/actions/atem/setPreview.ts new file mode 100644 index 0000000..8744bb4 --- /dev/null +++ b/Backend/src/Integrations/buildin/blackmagick/actions/atem/setPreview.ts @@ -0,0 +1,85 @@ +declare var Undecked: Undecked; + +import { Undecked } from '../../../../../Core' +import { ActionAPI } from "../../../../ActionAPI" +import { EditorAPI, EditorAPI_Field } from "../../../../EditorAPI" +const { Atem } = require('atem-connection') + +module.exports = (ActionAPI: ActionAPI) => { + ActionAPI.onExecute((properties, status) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : "none" + var input = properties.input != undefined ? properties.input : "none" + + if (connectionID != 'none') { + if (input != 'none') { + var connection = ActionAPI.getConnection('bm_atem', connectionID) + if (connection && connection.instance) { + var atem = connection.instance; + + try { + atem.changePreviewInput(input) + status(`Atem preview was set to ${input}`, 'info') + } catch (error) { + status(`Error whilst setting atem input: ${error}`, 'error') + } + } else status('Atem is not online', 'error') + } else status('No input specified', 'error') + } else status('No connection specified', 'error') + }) + + ActionAPI.onOpenEditor((EditorAPI: EditorAPI, properties: any) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : "none" + var input = properties.input != undefined ? properties.input : "none" + + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: "Connection", + type: "connection", + connectionType: "bm_atem", + value: connectionID + } + + var inputField: EditorAPI_Field = { + id: "input", + name: "Input", + type: "select", + value: input, + values: [{ id: 'none', text: "None" }] + } + + var validate = () => { + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('bm_atem', connectionID) + if (connection && connection.instance) { + var atem = connection.instance; + + var inputs = atem.state.inputs + + var values = [{ id: 'none', text: 'None' }]; + + for (var key in inputs) if (parseInt(key) < 1000) + values.push({ id: inputs[key].inputId, text: inputs[key].longName }) + + inputField.values = values; + } else inputField.values = [{ id: 'none', text: 'none' }] + } else inputField.values = [{ id: 'none', text: 'none' }] + + EditorAPI.setFields([connectionField, inputField]) + } + + EditorAPI.onFieldChanges((fields) => { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields) + + connectionID = fieldObject.connectionID + input = fieldObject.input; + + connectionField.value = connectionID; + inputField.value = input; + + EditorAPI.saveProperties({ connectionID, input }) + validate() + }) + + validate() + }) +} \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/blackmagick/actions/atem/setProgram.ts b/Backend/src/Integrations/buildin/blackmagick/actions/atem/setProgram.ts new file mode 100644 index 0000000..eff2253 --- /dev/null +++ b/Backend/src/Integrations/buildin/blackmagick/actions/atem/setProgram.ts @@ -0,0 +1,82 @@ +import { ActionAPI } from "../../../../ActionAPI" +import { EditorAPI, EditorAPI_Field } from "../../../../EditorAPI" +const { Atem } = require('atem-connection') + +module.exports = (ActionAPI: ActionAPI) => { + ActionAPI.onExecute((properties, status) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : "none" + var input = properties.input != undefined ? properties.input : "none" + + if (connectionID != 'none') { + if (input != 'none') { + var connection = ActionAPI.getConnection('bm_atem', connectionID) + if (connection && connection.instance) { + var atem = connection.instance; + + try { + atem.changeProgramInput(input) + status(`Atem program was set to ${input}`, 'info') + } catch (error) { + status(`Error whilst setting atem input: ${error}`, 'error') + } + } else status('Atem is not online', 'error') + } else status('No input specified', 'error') + } else status('No connection specified', 'error') + }) + + ActionAPI.onOpenEditor((EditorAPI: EditorAPI, properties: any) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : "none" + var input = properties.input != undefined ? properties.input : "none" + + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: "Connection", + type: "connection", + connectionType: "bm_atem", + value: connectionID + } + + var inputField: EditorAPI_Field = { + id: "input", + name: "Input", + type: "select", + value: input, + values: [{ id: 'none', text: "None" }] + } + + var validate = () => { + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('bm_atem', connectionID) + if (connection && connection.instance) { + var atem = connection.instance; + + var inputs = atem.state.inputs + + var values = [{ id: 'none', text: 'None' }]; + + for (var key in inputs) + values.push({ id: inputs[key].inputId, text: inputs[key].longName }) + + inputField.values = values; + } else inputField.values = [{ id: 'none', text: 'none' }] + } else inputField.values = [{ id: 'none', text: 'none' }] + + EditorAPI.setFields([connectionField, inputField]) + } + + EditorAPI.onFieldChanges((fields) => { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields) + + connectionID = fieldObject.connectionID + input = fieldObject.input; + + connectionField.value = connectionID; + inputField.value = input; + + EditorAPI.saveProperties({ connectionID, input }) + validate() + }) + + validate() + }) +} \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/blackmagick/integration.ts b/Backend/src/Integrations/buildin/blackmagick/integration.ts new file mode 100644 index 0000000..73bc07d --- /dev/null +++ b/Backend/src/Integrations/buildin/blackmagick/integration.ts @@ -0,0 +1,19 @@ +import { Integration } from "../../IntegrationsManager"; + +module.exports = { + name: 'BlackMagick', + description: "Control various BlackMagick devices", + main: require('./main'), + connections: [{ + name: "Atem", + type: "bm_atem", + fields: [ + { + id: "ip", + name: "IP Address", + type: "text", + value: "0.0.0.0" + } + ] + }] +} as Integration; \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/blackmagick/main.ts b/Backend/src/Integrations/buildin/blackmagick/main.ts new file mode 100644 index 0000000..d150520 --- /dev/null +++ b/Backend/src/Integrations/buildin/blackmagick/main.ts @@ -0,0 +1,38 @@ +import { IntegrationAPI } from "../../IntegrationApi"; +const { Atem } = require('atem-connection') + +module.exports = (Api: IntegrationAPI) => { + //----- ATEM ----- + Api.registerAction('atem_setPreview', 'Set Atem preview', require('./actions/atem/setPreview')) + Api.registerAction('atem_setProgram', 'Set Atem program', require('./actions/atem/setProgram')) + Api.registerAction('atem_fadeToBlack', 'Atem fade to black', require('./actions/atem/fadeToBlack')) + + Api.registerConnectionValidator('bm_atem', (validatorAPI) => { + var ip = validatorAPI.properties.ip; + + var timeout: NodeJS.Timeout; + var res = (valid: boolean, message?: string) => { + res = () => { }; + validatorAPI.callback(valid, message) + clearTimeout(timeout) + } + + timeout = setTimeout(() => { + res(false, 'Timeout whilst trying to connect to atem') + }, 5000); + + var atem = new Atem({ debugBuffers: true }) + + atem.on('error', (error) => { + res(false, error) + }) + + atem.on('connected', () => { + validatorAPI.setInstance(atem) + + res(true) + }) + + atem.connect(ip) + }) +} \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/deck/actions/changepage.ts b/Backend/src/Integrations/buildin/deck/actions/changepage.ts new file mode 100644 index 0000000..5d5d154 --- /dev/null +++ b/Backend/src/Integrations/buildin/deck/actions/changepage.ts @@ -0,0 +1,99 @@ +import { Undecked } from '../../../../Core'; +import { Deck } from '../../../../Decks/Deck'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +declare var Undecked: Undecked; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle( + ( + properties: Deck_ChangePage, + status: (text: string, type?: 'info' | 'error' | 'warn') => void, + executed: Deck + ) => { + if (properties.page != undefined) { + if (Undecked.Pages.exists(properties.page)) { + var page = Undecked.Pages.get(properties.page); + + if (properties.decks != undefined && properties.decks.length > 0) { + var changed = []; + var failed = []; + for (let i = 0; i < properties.decks.length; i++) { + var serialNumber = properties.decks[i]; + + if (Undecked.Decks.hasDeck(serialNumber) || serialNumber == 'current') { + var deck = serialNumber != 'current' ? Undecked.Decks.getDeck(serialNumber) : executed; + deck.setPageID(page.getID()); + changed.push(serialNumber); + } else failed.push(serialNumber); + } + if (failed.length == 0) + status(`Changed ${changed.length} deck(s) to page '${page.name}'`, 'info'); + else + status( + `Deck(s) '${failed.join( + ', ' + )}' were not found, only changed ${changed.length} deck(s) to page '${page.name}'`, + 'warn' + ); + } else status('No decks selected', 'error'); + } else status('Page does not exist. Maybe it was removed?', 'error'); + } else status('Missing page property', 'error'); + } + ); + + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: Deck_ChangePage) => { + editorAPI.onFieldChanges((fields: EditorAPI_Field[]) => { + var fieldsObject = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ + decks: fieldsObject.deck, + page: fieldsObject.page + }); + }); + + editorAPI.setFields([ + { + id: 'deck', + name: 'Deck', + type: 'select', + multi: true, + value: + properties.decks != undefined + ? properties.decks + : [ + 'current' + ], + values: getDecksValues() + }, + + { + id: 'page', + name: 'Page', + type: 'select', + value: properties.page != undefined ? properties.page : '', + values: getPageValues() + } + ]); + }); + + function getDecksValues(): { id: string; text: string }[] { + return [ + { id: 'current', text: 'Current Deck' }, + ...Undecked.Decks.getList().map((deck) => { + return { id: deck.serialNumber, text: deck.name }; + }) + ]; + } + + function getPageValues(): { id: string; text: string }[] { + return Undecked.Pages.getNames().map((page) => { + return { id: page.pageID, text: page.name }; + }); + } +}; + +interface Deck_ChangePage { + decks: string[]; + page: string; +} diff --git a/Backend/src/Integrations/buildin/deck/actions/setbackground.ts b/Backend/src/Integrations/buildin/deck/actions/setbackground.ts new file mode 100644 index 0000000..f7a9d7e --- /dev/null +++ b/Backend/src/Integrations/buildin/deck/actions/setbackground.ts @@ -0,0 +1,132 @@ +import { Undecked } from '../../../../Core'; +import { Deck } from '../../../../Decks/Deck'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +declare var Undecked: Undecked; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle( + ( + properties: Deck_SetBackground, + status: (text: string, type: 'info' | 'error' | 'warn') => void, + deck: Deck + ) => { + if (properties.key != undefined && properties.key.length > 0) { + if (properties.color != undefined) { + var location = Undecked.Pages.KeyManager.getLocation(properties.key); + if (location) { + if (Undecked.Pages.exists(location.pageID)) { + var page = Undecked.Pages.get(location.pageID); + + if (page.hasKey(location.x, location.y)) { + var key = page.getKey(location.x, location.y); + if (key.appearence == undefined) key.appearence = {}; + if (key.appearence.background == undefined) key.appearence.background = { color: null }; + key.appearence.background.color = properties.color; + + page.updateKey(location.x, location.y, key, null); + + status('Key color has been updated', 'info'); + } else status('Unable to find locaton', 'error'); + } else status('Unable to find page', 'error'); + } else status('Invalid key ID. Maybe it was removed?', 'error'); + } else status('No color specified', 'error'); + } else status('No key specified', 'error'); + } + ); + + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: Deck_SetBackground) => { + var lastPageState = 'current'; + var initKey = 'current'; + var initColor = properties.color != undefined ? properties.color : '#ff0000'; + if (properties.key != undefined) { + var location = Undecked.Pages.KeyManager.getLocation(properties.key); + if (location) { + lastPageState = location.pageID == editorAPI.keyPageID ? 'current' : location.pageID; + } + + initKey = properties.key == editorAPI.key.id ? 'current' : properties.key; + } + + var fields: EditorAPI_Field[] = [ + { + id: 'page', + name: 'Page', + type: 'select', + value: lastPageState, + values: getPageValues() + }, + { + id: 'key', + name: 'Key', + type: 'select', + value: initKey, + values: getPageKeyValues(lastPageState) + }, + { + id: 'color', + name: 'Color', + type: 'color', + value: initColor + } + ]; + + editorAPI.saveProperties({ + key: initKey == 'current' ? editorAPI.key.id : initKey, + color: initColor + }); + + editorAPI.onFieldChanges((changedFields: EditorAPI_Field[]) => { + var fieldObject = editorAPI.tools.objectifyFieldsValues(changedFields); + + fields[0].value = fieldObject.page; + fields[1].value = fieldObject.key; + fields[2].value = fieldObject.color; + + if (fieldObject.page != lastPageState) { + fields[1].values = getPageKeyValues(fieldObject.page); + editorAPI.setFields(fields); + } + + editorAPI.saveProperties({ + key: fieldObject.key == 'current' ? editorAPI.key.id : fieldObject.key, + color: fieldObject.color + }); + }); + + editorAPI.setFields(fields); + + function getPageValues(): { id: string; text: string }[] { + return [ + { id: 'current', text: 'Current Page' }, + ...Undecked.Pages.getNames().map((page) => { + return { id: page.pageID, text: page.name }; + }) + ]; + } + + function getPageKeyValues(pageID: string): { id: string; text: string }[] { + var values = [ + { id: 'current', text: 'Current Key' } + ]; + + if (pageID == 'current') pageID = editorAPI.keyPageID; + else values = []; + + if (Undecked.Pages.exists(pageID)) + return [ + ...values, + ...Undecked.Pages.get(pageID).getKeyTextList().map((key) => { + return { id: key.id, text: `${key.x},${key.y} - ${key.text != null ? key.text : 'Empty'}` }; + }) + ]; + else return []; + } + }); +}; + +interface Deck_SetBackground { + key: string; + color: string; +} diff --git a/Backend/src/Integrations/buildin/deck/actions/settext.ts b/Backend/src/Integrations/buildin/deck/actions/settext.ts new file mode 100644 index 0000000..89eb686 --- /dev/null +++ b/Backend/src/Integrations/buildin/deck/actions/settext.ts @@ -0,0 +1,139 @@ +import { Undecked } from '../../../../Core'; +import { Deck } from '../../../../Decks/Deck'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +declare var Undecked: Undecked; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle( + ( + properties: Deck_SetBackground, + status: (text: string, type: 'info' | 'error' | 'warn') => void, + deck: Deck + ) => { + if (properties.key != undefined && properties.key.length > 0) { + if (properties.text != undefined) { + var location = Undecked.Pages.KeyManager.getLocation(properties.key); + if (location) { + if (Undecked.Pages.exists(location.pageID)) { + var page = Undecked.Pages.get(location.pageID); + + if (page.hasKey(location.x, location.y)) { + var key = page.getKey(location.x, location.y); + if (key.appearence == undefined) key.appearence = {}; + if (key.appearence.text == undefined) + key.appearence.text = { + offsetX: 0, + offsetY: 0, + size: 20, + value: null, + color: '#ffffff' + }; + key.appearence.text.value = properties.text; + + page.updateKey(location.x, location.y, key, null); + + status('Key text has been updated', 'info'); + } else status('Unable to find locaton', 'error'); + } else status('Unable to find page', 'error'); + } else status('Invalid key ID. Maybe it was removed?', 'error'); + } else status('No text specified', 'error'); + } else status('No key specified', 'error'); + } + ); + + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: Deck_SetBackground) => { + var lastPageState = 'current'; + var initKey = ''; + var initText = properties.text != undefined ? properties.text : ''; + if (properties.key != undefined) { + var location = Undecked.Pages.KeyManager.getLocation(properties.key); + if (location) { + lastPageState = location.pageID == editorAPI.keyPageID ? 'current' : location.pageID; + } + + initKey = properties.key == editorAPI.key.id ? 'current' : properties.key; + } + + var fields: EditorAPI_Field[] = [ + { + id: 'page', + name: 'Page', + type: 'select', + value: lastPageState, + values: getPageValues() + }, + { + id: 'key', + name: 'Key', + type: 'select', + value: initKey, + values: getPageKeyValues(lastPageState) + }, + { + id: 'text', + name: 'Text', + type: 'text', + value: initText + } + ]; + + editorAPI.saveProperties({ + key: initKey == 'current' ? editorAPI.key.id : initKey, + text: initText + }); + + editorAPI.onFieldChanges((changedFields: EditorAPI_Field[]) => { + var fieldObject = editorAPI.tools.objectifyFieldsValues(changedFields); + + fields[0].value = fieldObject.page; + fields[1].value = fieldObject.key; + fields[2].value = fieldObject.text; + + if (fieldObject.page != lastPageState) { + fields[1].values = getPageKeyValues(fieldObject.page); + editorAPI.setFields(fields); + } + + editorAPI.saveProperties({ + key: fieldObject.key == 'current' ? editorAPI.key.id : fieldObject.key, + text: fieldObject.text + }); + }); + + editorAPI.setFields(fields); + + function getPageValues(): { id: string; text: string }[] { + return [ + { id: 'current', text: 'Current Page' }, + ...Undecked.Pages.getNames().map((page) => { + return { id: page.pageID, text: page.name }; + }) + ]; + } + + function getPageKeyValues(pageID: string): { id: string; text: string }[] { + var values = [ + { id: 'current', text: 'Current Key' } + ]; + + if (pageID == 'current') pageID = editorAPI.keyPageID; + else values = []; + + if (Undecked.Pages.exists(pageID)) + return [ + ...values, + ...Undecked.Pages.get(pageID).getKeyTextList().map((key) => { + return { id: key.id, text: `${key.x},${key.y} - ${key.text != null ? key.text : 'Empty'}` }; + }) + ]; + else return []; + } + }); +}; + +interface Deck_SetBackground { + key: string; + text: string; +} diff --git a/Backend/src/Integrations/buildin/deck/deck.ts b/Backend/src/Integrations/buildin/deck/deck.ts new file mode 100644 index 0000000..d9707f1 --- /dev/null +++ b/Backend/src/Integrations/buildin/deck/deck.ts @@ -0,0 +1,7 @@ +import { IntegrationAPI } from '../../IntegrationApi'; + +module.exports = (api: IntegrationAPI) => { + api.registerAction('changepage', require('./actions/changepage')); + api.registerAction('setbackground', require('./actions/setbackground')); + api.registerAction('settext', require('./actions/settext')); +}; diff --git a/Backend/src/Integrations/buildin/deck/integration.ts b/Backend/src/Integrations/buildin/deck/integration.ts new file mode 100644 index 0000000..c2c160a --- /dev/null +++ b/Backend/src/Integrations/buildin/deck/integration.ts @@ -0,0 +1,25 @@ +import { Integration } from '../../IntegrationsManager'; + +var Integration: Integration = { + name: 'Deck', + description: "Control the deck you're using.", + actions: [ + { + id: 'changepage', + name: 'Change page' + }, + + { + id: 'setbackground', + name: 'Set key background color' + }, + + { + id: 'settext', + name: 'Set key text' + } + ], + main: require('./deck') +}; + +module.exports = Integration; diff --git a/Backend/src/Integrations/buildin/getiyo/actions/continueTimelineHold.ts b/Backend/src/Integrations/buildin/getiyo/actions/continueTimelineHold.ts new file mode 100644 index 0000000..1b9ec11 --- /dev/null +++ b/Backend/src/Integrations/buildin/getiyo/actions/continueTimelineHold.ts @@ -0,0 +1,9 @@ +import { ActionAPI } from "../../../ActionAPI" +import { EditorAPI } from "../../../EditorAPI" +import { getiyoSimpleExecute, getiyoSimpleOpenEditor } from "../simpleGetiyoActions" + +module.exports = (ActionAPI:ActionAPI) => { + ActionAPI.handle((properties, status) => getiyoSimpleExecute(ActionAPI, properties, status, 'continueTimelineHold')) + + ActionAPI.onOpenEditor(getiyoSimpleOpenEditor) +} \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/getiyo/actions/jumpToTimelineSections.ts b/Backend/src/Integrations/buildin/getiyo/actions/jumpToTimelineSections.ts new file mode 100644 index 0000000..000cd01 --- /dev/null +++ b/Backend/src/Integrations/buildin/getiyo/actions/jumpToTimelineSections.ts @@ -0,0 +1,107 @@ +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; +import { Getiyo } from '../Getiyo'; +import { getiyoSimpleExecute, getiyoSimpleOpenEditor } from '../simpleGetiyoActions'; + +module.exports = (ActionAPI: ActionAPI) => { + ActionAPI.onExecute((properties, status) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var sectionName = properties.sectionName != undefined ? properties.sectionName : 'none'; + + if (connectionID != 'none') { + if (sectionName != 'none') { + var connection = ActionAPI.getConnection('channel', connectionID); + if (connection) { + var channel: Getiyo = connection.instance; + channel + .jumpToTimelineSections(sectionName, 'main') + .then(() => { + status(`Jumped to section ${sectionName}`); + }) + .catch(() => status('Unable to jump to section', 'error')); + } else status(`Connection doesn't exist`, 'error'); + } else status('No section name specfied', 'error'); + } else status('No connection specfied', 'error'); + }); + + ActionAPI.onOpenEditor((EditorAPI: EditorAPI, properties) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var sectionName = properties.sectionName != undefined ? properties.sectionName : 'none'; + + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'Connection', + type: 'connection', + connectionType: 'channel', + value: connectionID + }; + var sectionField: EditorAPI_Field = { + id: 'sectionName', + name: 'Section', + type: 'select', + value: sectionName, + values: [] + }; + + var lastConnectionID = null; + + var validate = () => { + if (connectionID != lastConnectionID) { + lastConnectionID = connectionID; + + if (lastConnectionID != 'none') { + var connection = ActionAPI.getConnection('channel', lastConnectionID); + if (connection) { + var channel: Getiyo = connection.instance; + + channel + .getTimelineSections() + .then((sections: string[]) => { + sectionField.values = sections.map((sectionText) => { + return { id: sectionText, text: sectionText }; + }); + EditorAPI.setFields([ + connectionField, + sectionField + ]); + }) + .catch((error) => { + sectionField.values = []; + EditorAPI.setFields([ + connectionField, + sectionField + ]); + }); + } else { + sectionField.values = []; + EditorAPI.setFields([ + connectionField, + sectionField + ]); + } + } else { + sectionField.values = []; + EditorAPI.setFields([ + connectionField, + sectionField + ]); + } + } + }; + + EditorAPI.onFieldChanges((fields) => { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + + connectionID = fieldObject.connectionID; + sectionName = fieldObject.sectionName; + + connectionField.value = connectionID; + sectionField.value = sectionName; + + EditorAPI.saveProperties({ connectionID, sectionName }); + validate(); + }); + + validate(); + }); +}; diff --git a/Backend/src/Integrations/buildin/getiyo/actions/pauseTimeline.ts b/Backend/src/Integrations/buildin/getiyo/actions/pauseTimeline.ts new file mode 100644 index 0000000..41e14e9 --- /dev/null +++ b/Backend/src/Integrations/buildin/getiyo/actions/pauseTimeline.ts @@ -0,0 +1,9 @@ +import { ActionAPI } from "../../../ActionAPI" +import { EditorAPI } from "../../../EditorAPI" +import { getiyoSimpleExecute, getiyoSimpleOpenEditor } from "../simpleGetiyoActions" + +module.exports = (ActionAPI:ActionAPI) => { + ActionAPI.handle((properties, status) => getiyoSimpleExecute(ActionAPI, properties, status, 'pauseTimeline')) + + ActionAPI.onOpenEditor(getiyoSimpleOpenEditor) +} \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/getiyo/actions/publishScene.ts b/Backend/src/Integrations/buildin/getiyo/actions/publishScene.ts new file mode 100644 index 0000000..8dc4e89 --- /dev/null +++ b/Backend/src/Integrations/buildin/getiyo/actions/publishScene.ts @@ -0,0 +1,112 @@ +import { ActionAPI } from "../../../ActionAPI" +import { EditorAPI, EditorAPI_Field } from "../../../EditorAPI" +import { Getiyo } from "../Getiyo" +import { getiyoSimpleExecute, getiyoSimpleOpenEditor } from "../simpleGetiyoActions" + +module.exports = (ActionAPI: ActionAPI) => { + ActionAPI.handle((properties, status) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none' + var sceneID = properties.sceneID != undefined ? properties.sceneID : 'none' + var displayID = properties.displayID != undefined ? properties.displayID : 'none' + if (connectionID != 'none') { + if (sceneID != 'none') { + if (displayID != 'none') { + var connection = ActionAPI.getConnection('channel', connectionID) + if (connection) { + var channel: Getiyo = connection.instance; + + return channel.publishScene(sceneID, displayID) + } else status(`Connection doesn't exist`, 'error') + } else status('No display specfied', 'error') + } else status('No scene specfied', 'error') + } else status('No connection specfied', 'error') + }) + + ActionAPI.onOpenEditor((EditorAPI: EditorAPI, properties) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none' + var sceneID = properties.sceneID != undefined ? properties.sceneID : 'none' + var displayID = properties.displayID != undefined ? properties.displayID : 'none' + + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: "Connection", + type: "connection", + connectionType: 'channel', + value: connectionID + } + var sceneField: EditorAPI_Field = { + id: 'sceneID', + name: "Scene", + type: "select", + value: sceneID, + values: [] + } + + var displayField: EditorAPI_Field = { + id: 'displayID', + name: "Display", + type: "select", + value: displayID, + values: [] + } + + var lastConnectionID = null; + + + var validate = () => { + if (connectionID != lastConnectionID) { + lastConnectionID = connectionID; + + if (lastConnectionID != "none") { + var connection = ActionAPI.getConnection('channel', lastConnectionID) + if (connection) { + var channel: Getiyo = connection.instance; + + + channel.getScenes().then((scenes: { id: string, name: string }[]) => { + sceneField.values = scenes.map((scene) => { return { id: scene.id, text: scene.name } }) + + channel.getDisplays().then((displays: { id: string, name: string }[]) => { + displayField.values = displays.map((display) => { return { id: display.id, text: display.name } }) + EditorAPI.setFields([connectionField, sceneField, displayField]) + }).catch((error) => { + sceneField.values = []; + EditorAPI.setFields([connectionField, sceneField, displayField]) + }) + + }).catch((error) => { + sceneField.values = []; + EditorAPI.setFields([connectionField, sceneField, displayField]) + }) + + + + } else { + sceneField.values = []; + EditorAPI.setFields([connectionField, sceneField, displayField]) + } + } else { + sceneField.values = []; + EditorAPI.setFields([connectionField, sceneField, displayField]) + } + } + } + + EditorAPI.onFieldChanges((fields) => { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields) + + connectionID = fieldObject.connectionID + sceneID = fieldObject.sceneID; + displayID = fieldObject.displayID; + + connectionField.value = connectionID; + sceneField.value = sceneID + + + EditorAPI.saveProperties({ connectionID, sceneID, displayID }) + validate() + }) + + validate() + }) +} \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/getiyo/actions/skipTimelineBlock.ts b/Backend/src/Integrations/buildin/getiyo/actions/skipTimelineBlock.ts new file mode 100644 index 0000000..a0c820e --- /dev/null +++ b/Backend/src/Integrations/buildin/getiyo/actions/skipTimelineBlock.ts @@ -0,0 +1,9 @@ +import { ActionAPI } from "../../../ActionAPI" +import { EditorAPI } from "../../../EditorAPI" +import { getiyoSimpleExecute, getiyoSimpleOpenEditor } from "../simpleGetiyoActions" + +module.exports = (ActionAPI:ActionAPI) => { + ActionAPI.handle((properties, status) => getiyoSimpleExecute(ActionAPI, properties, status, 'skipTimelineBlock')) + + ActionAPI.onOpenEditor(getiyoSimpleOpenEditor) +} \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/getiyo/actions/startTimeline.ts b/Backend/src/Integrations/buildin/getiyo/actions/startTimeline.ts new file mode 100644 index 0000000..690aad7 --- /dev/null +++ b/Backend/src/Integrations/buildin/getiyo/actions/startTimeline.ts @@ -0,0 +1,9 @@ +import { ActionAPI } from "../../../ActionAPI" +import { EditorAPI } from "../../../EditorAPI" +import { getiyoSimpleExecute, getiyoSimpleOpenEditor } from "../simpleGetiyoActions" + +module.exports = (ActionAPI:ActionAPI) => { + ActionAPI.handle((properties, status) => getiyoSimpleExecute(ActionAPI, properties, status, 'startTimeline')) + + ActionAPI.onOpenEditor(getiyoSimpleOpenEditor) +} \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/getiyo/actions/stopTimeline.ts b/Backend/src/Integrations/buildin/getiyo/actions/stopTimeline.ts new file mode 100644 index 0000000..7d294d4 --- /dev/null +++ b/Backend/src/Integrations/buildin/getiyo/actions/stopTimeline.ts @@ -0,0 +1,9 @@ +import { ActionAPI } from "../../../ActionAPI" +import { EditorAPI } from "../../../EditorAPI" +import { getiyoSimpleExecute, getiyoSimpleOpenEditor } from "../simpleGetiyoActions" + +module.exports = (ActionAPI:ActionAPI) => { + ActionAPI.handle((properties, status) => getiyoSimpleExecute(ActionAPI, properties, status, 'stopTimeline')) + + ActionAPI.onOpenEditor(getiyoSimpleOpenEditor) +} \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/getiyo/getiyo.ts b/Backend/src/Integrations/buildin/getiyo/getiyo.ts new file mode 100644 index 0000000..c3a0cc7 --- /dev/null +++ b/Backend/src/Integrations/buildin/getiyo/getiyo.ts @@ -0,0 +1,182 @@ +import axios from 'axios'; + +export class Getiyo { + serverProtocol: 'http' | 'https'; + serverAddress: string; + serverPort: number; + channelName: string; + channelApiKey: string; + + constructor(settings: { + serverProtocol: 'http' | 'https'; + serverAddress: string; + serverPort: number; + channelName: string; + channelApiKey: string; + }) { + this.serverProtocol = settings.serverProtocol != undefined ? settings.serverProtocol : 'http'; + this.serverAddress = settings.serverAddress; + this.serverPort = settings.serverPort; + this.channelName = settings.channelName; + this.channelApiKey = settings.channelApiKey; + } + + _getBaseURI() { + return `${this.serverProtocol}://${this.serverAddress}:${this.serverPort}/${this.channelName}/api/v1/${this + .channelApiKey}/`; + } + + checkConnection(callback: (succeed: boolean) => void) { + axios.get(this._getBaseURI()).then(() => callback(true)).catch(() => callback(false)); + } + + getScenes(): Promise<{ id: string; name: string }[]> { + return new Promise((resolve, reject) => { + axios + .get(this._getBaseURI() + 'scenes') + .then((response) => { + if (response.data.succeed == true) { + resolve(response.data.response); + } else reject(new Error('Unable to connection to Getiyo instance')); + }) + .catch(reject); + }); + } + + getDisplays(): Promise<{ id: string; name: string; scene: string }[]> { + return new Promise((resolve, reject) => { + axios + .get(this._getBaseURI() + 'displays') + .then((response) => { + if (response.data.succeed == true) { + resolve(response.data.response); + } else reject(new Error('Unable to connection to Getiyo instance')); + }) + .catch(reject); + }); + } + + getModules(): Promise< + { + moduleID: string; + name: string; + type: string; + triggers: { [triggerID: string]: { type: string; description: string; arguments: any[] } }; + }[] + > { + return new Promise((resolve, reject) => { + axios + .get(this._getBaseURI() + 'modules') + .then((response) => { + if (response.data.succeed == true) { + resolve(response.data.response); + } else reject(new Error('Unable to connection to Getiyo instance')); + }) + .catch(reject); + }); + } + + getTimelineSections(): Promise { + return new Promise((resolve, reject) => { + axios + .get(this._getBaseURI() + 'timeline/sections') + .then((response) => { + if (response.data.succeed == true) { + resolve(response.data.response); + } else reject(new Error('Unable to connection to Getiyo instance')); + }) + .catch(reject); + }); + } + + publishScene(sceneID: string, displayID: string): Promise { + return new Promise((resolve, reject) => { + axios + .get(this._getBaseURI() + `scenes/publish/${sceneID}/${displayID}`) + .then((response) => { + if (response.data.succeed == true) { + resolve(); + } else reject(new Error('Unable to connection to Getiyo instance')); + }) + .catch(reject); + }); + } + + startTimeline(createNewRunner: boolean = false): Promise { + return new Promise((resolve, reject) => { + axios + .get(this._getBaseURI() + `timeline/start/${createNewRunner}`) + .then((response) => { + if (response.data.succeed == true) { + resolve(); + } else reject(new Error('Unable to connection to Getiyo instance')); + }) + .catch(reject); + }); + } + + stopTimeline(runnerID: string = 'main'): Promise { + return new Promise((resolve, reject) => { + axios + .get(this._getBaseURI() + `timeline/stop/${runnerID}`) + .then((response) => { + if (response.data.succeed == true) { + resolve(); + } else reject(new Error('Unable to connection to Getiyo instance')); + }) + .catch(reject); + }); + } + + pauseTimeline(runnerID: string = 'main'): Promise { + return new Promise((resolve, reject) => { + axios + .get(this._getBaseURI() + `timeline/pause/${runnerID}`) + .then((response) => { + if (response.data.succeed == true) { + resolve(); + } else reject(new Error('Unable to connection to Getiyo instance')); + }) + .catch(reject); + }); + } + + skipTimelineBlock(runnerID: string = 'main'): Promise { + return new Promise((resolve, reject) => { + axios + .get(this._getBaseURI() + `timeline/skip/${runnerID}`) + .then((response) => { + if (response.data.succeed == true) { + resolve(); + } else reject(new Error('Unable to connection to Getiyo instance')); + }) + .catch(reject); + }); + } + + continueTimelineHold(runnerID: string = 'main'): Promise { + return new Promise((resolve, reject) => { + axios + .get(this._getBaseURI() + `timeline/hold/${runnerID}`) + .then((response) => { + if (response.data.succeed == true) { + resolve(); + } else reject(new Error('Unable to connection to Getiyo instance')); + }) + .catch(reject); + }); + } + + jumpToTimelineSections(sectionName: string, runnerID: string = 'main'): Promise { + return new Promise((resolve, reject) => { + axios + .get(this._getBaseURI() + `timeline/sections/jump/${encodeURI(sectionName)}/${runnerID}`) + .then((response) => { + if (response.data.succeed == true) { + resolve(); + } else reject(new Error('Unable to connection to Getiyo instance')); + }) + .catch(reject); + }); + } +} diff --git a/Backend/src/Integrations/buildin/getiyo/integration.ts b/Backend/src/Integrations/buildin/getiyo/integration.ts new file mode 100644 index 0000000..074b048 --- /dev/null +++ b/Backend/src/Integrations/buildin/getiyo/integration.ts @@ -0,0 +1,22 @@ +import { Integration } from '../../IntegrationsManager'; + +var Integration: Integration = { + name: 'Getiyo', + description: 'Control your Getiyo channel.', + connections: [ + { + type: 'channel', + name: 'Channel', + fields: [ + { id: 'protocol', name: 'Server Protocol', type: 'select', value: 'http', values: [{id:'http', text: "HTTP"}, {id:'https', text:"HTTPS"}] }, + { id: 'address', name: 'Server Address', type: 'text', value: 'getiyo.com' }, + { id: 'port', name: 'Server Port', type: 'number', value: '443' }, + { id: 'channel', name: 'Channel Name', type: 'text' }, + { id: 'key', name: 'API Key', type: 'text' } + ] + } + ], + main: require('./main') +}; + +module.exports = Integration; diff --git a/Backend/src/Integrations/buildin/getiyo/main.ts b/Backend/src/Integrations/buildin/getiyo/main.ts new file mode 100644 index 0000000..fbcdbce --- /dev/null +++ b/Backend/src/Integrations/buildin/getiyo/main.ts @@ -0,0 +1,42 @@ +import { ConnectionValidatorAPI, IntegrationAPI } from '../../IntegrationApi'; + +import { default as axios } from 'axios'; +import { Getiyo } from './Getiyo'; + +module.exports = (api: IntegrationAPI) => { + api.registerAction('publishScene', 'Publish scene', require('./actions/publishScene')); + api.registerAction('startTimeline', 'Start timeline', require('./actions/startTimeline')); + api.registerAction('stopTimeline', 'Stop timeline', require('./actions/stopTimeline')); + api.registerAction('pauseTimeline', 'Pause timeline', require('./actions/pauseTimeline')); + api.registerAction('continueTimelineHold', 'Continue timeline hold', require('./actions/continueTimelineHold')); + api.registerAction('skipTimelineBlock', 'Skip timeline block', require('./actions/skipTimelineBlock')); + api.registerAction('jumpToTimelineSections', 'Jump to timeline section', require('./actions/jumpToTimelineSections')); + + api.registerConnectionValidator('channel', (ValidatorAPI: ConnectionValidatorAPI) => { + var properties = ValidatorAPI.properties; + + + var Channel = new Getiyo({ + serverProtocol: properties.protocol, + serverAddress: properties.address, + serverPort: properties.port, + channelName: properties.channel, + channelApiKey: properties.key + }) + + Channel.checkConnection((succeed) => { + if (succeed == true) { + ValidatorAPI.callback(true) + ValidatorAPI.setInstance(Channel) + } + else ValidatorAPI.callback(false, 'Unable to find a Getiyo channel in this location.') + }) + }); +}; + +interface Channel_Properties { + address: string; + port: string; + channel: string; + key: string; +} diff --git a/Backend/src/Integrations/buildin/getiyo/publish.ts b/Backend/src/Integrations/buildin/getiyo/publish.ts new file mode 100644 index 0000000..b29f11e --- /dev/null +++ b/Backend/src/Integrations/buildin/getiyo/publish.ts @@ -0,0 +1,205 @@ +// import axios from 'axios'; +// import { callbackify } from 'util'; +// import { ConnectionManager_Connection } from '../../../../ConnectionManager'; +// import { Log } from '../../../../Logger'; +// import { ActionAPI } from '../../../ActionAPI'; +// import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +// module.exports = (actionAPI: ActionAPI) => { +// actionAPI.handle( +// (properties: Publish_Properties, status: (text: string, type?: 'info' | 'error' | 'warn') => void) => { +// var connectionID = properties.connectionID; +// var sceneID = properties.sceneID; +// var displayIDs = properties.displayIDs; + +// var connection = actionAPI.getConnection('channel', connectionID); + +// if (connection && connectionID != undefined && sceneID != undefined && displayIDs != undefined) { +// var url = `${getBaseURL(connection)}/scenes/publish/${sceneID}/${displayIDs.join(',')}`; + +// axios +// .get(url) +// .then((response) => { +// if (response.data != undefined) { +// if (response.data.succeed == true) { +// status(`Scene ${sceneID} was published to display(s) ${displayIDs.join(', ')}`); +// } else status(response.data.error, 'error'); +// } +// }) +// .catch((error) => { +// status('Unable to reach Getiyo server', 'error'); +// }); +// } +// } +// ); + +// var channelSceneCache = {}; + +// actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: Publish_Properties) => { +// var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; +// var sceneID = properties.sceneID != undefined ? properties.sceneID : 'none'; +// var displayIDs = properties.displayIDs != undefined ? properties.displayIDs : []; + +// var connection: ConnectionManager_Connection = null; + +// var lastConnectionID: string = connectionID; +// editorAPI.onFieldChanges((newFields: EditorAPI_Field[]) => { +// var fieldObject = editorAPI.tools.objectifyFieldsValues(newFields); + +// editorAPI.saveProperties({ +// connectionID: fieldObject.connection, +// sceneID: fieldObject.sceneID, +// displayIDs: fieldObject.displayIDs +// }); + +// fields[0].value = fieldObject.connection; +// if (lastConnectionID != fieldObject.connection) { +// getConnection(fieldObject.connection, () => { +// editorAPI.setFields(fields); +// }); +// } +// }); + +// function getConnection(connectionID: string, callback: () => void) { +// var newConnection = actionAPI.getConnection('channel', connectionID); +// if (connectionID == 'none') { +// fields[1].values = []; +// fields[2].values = []; +// callback(); +// } else if (newConnection != null) { +// lastConnectionID = connectionID; + +// connection = newConnection; + +// updateScenes(() => updateDisplays(callback)); +// } else callback(); +// } + +// function updateScenes(callback: () => void) { +// var baseURL = getBaseURL(connection); +// if (baseURL) { +// axios +// .get(`${baseURL}/scenes`) +// .then((response) => { +// if (response.data != undefined) { +// if (response.data.succeed == true) { +// var scenes: Channel_Scene[] = response.data.response.map((scene) => { +// return { id: scene.id, text: `${scene.id} - ${scene.name}` }; +// }); +// fields[1].values = scenes; +// channelSceneCache[connection.properties.channel] = scenes; +// callback(); +// } else { +// Log('error', response.data.error); +// callback(); +// } +// } +// }) +// .catch((error) => { +// Log( +// 'error', +// `Error whilst fetching Getiyo scenes for channel '${connection.properties.channel}'`, +// error +// ); +// callback(); +// }); +// } +// } + +// function updateDisplays(callback: () => void) { +// var baseURL = getBaseURL(connection); +// if (baseURL) { +// axios +// .get(`${baseURL}/displays`) +// .then((response) => { +// if (response.data != undefined) { +// if (response.data.succeed == true) { +// var scenes: Channel_Display[] = response.data.response.map((display) => { +// return { id: display.id, text: `${display.id} - ${display.name}` }; +// }); +// fields[2].values = scenes; +// channelSceneCache[connection.properties.channel] = scenes; +// callback(); +// } else { +// Log('error', response.data.error); +// callback(); +// } +// } +// }) +// .catch((error) => { +// Log( +// 'error', +// `Error whilst fetching Getiyo displays for channel '${connection.properties.channel}'`, +// error +// ); +// callback(); +// }); +// } +// } + +// var defaultSceneValues = []; +// if (connection != null && connection.properties != null) { +// if (channelSceneCache[connection.properties.channel] != undefined) { +// defaultSceneValues = channelSceneCache[connection.properties.channel]; +// } +// } + +// var fields: EditorAPI_Field[] = [ +// { +// id: 'connection', +// name: 'Connection', +// type: 'connection', +// value: connectionID, +// connectionType: 'channel' +// }, +// { +// id: 'sceneID', +// name: 'Scene', +// type: 'select', +// value: sceneID, +// values: defaultSceneValues +// }, +// { +// id: 'displayIDs', +// name: 'Displays', +// type: 'select', +// multi: true, +// value: displayIDs, +// values: [] +// } +// ]; + +// getConnection(connectionID, () => editorAPI.setFields(fields)); +// }); + +// function getBaseURL(connection) { +// if (connection != null) { +// var addressString = connection.properties.address; +// var address = +// !addressString.startsWith('http://') && !addressString.startsWith('https://') +// ? `https://${addressString}` +// : addressString; +// var fullQuery = `${address}:${connection.properties.port}/api/v1/${connection.properties.key}/${connection +// .properties.channel}`; +// return fullQuery; +// } +// return null; +// } +// }; + +// interface Publish_Properties { +// connectionID: string; +// sceneID: string; +// displayIDs: string[]; +// } + +// interface Channel_Scene { +// id: string; +// text: string; +// } + +// interface Channel_Display { +// id: string; +// text: string; +// scene: string; +// } diff --git a/Backend/src/Integrations/buildin/getiyo/simpleGetiyoActions.ts b/Backend/src/Integrations/buildin/getiyo/simpleGetiyoActions.ts new file mode 100644 index 0000000..030c42c --- /dev/null +++ b/Backend/src/Integrations/buildin/getiyo/simpleGetiyoActions.ts @@ -0,0 +1,33 @@ +import { ActionAPI } from "../../ActionAPI"; +import { EditorAPI } from "../../EditorAPI"; +import { Getiyo } from "./Getiyo"; + +export function getiyoSimpleOpenEditor(EditorAPI:EditorAPI, properties){ + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none' + + EditorAPI.setFields([{ + id: 'connectionID', + name: "Connection", + type: "connection", + connectionType: 'channel', + value: connectionID + }]) + + EditorAPI.onFieldChanges((fields) => { + var fieldObject= EditorAPI.tools.objectifyFieldsValues(fields) + EditorAPI.saveProperties({connectionID:fieldObject.connectionID}) + }) +} + + +export function getiyoSimpleExecute(ActionAPI:ActionAPI,properties, status:(text:string, type:string) => void, functionName:string):Promise{ + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none' + if (connectionID != 'none'){ + var connection = ActionAPI.getConnection('channel', connectionID) + if (connection){ + var channel:Getiyo = connection.instance; + + return channel[functionName]() + }else status(`Connection doesn't exist`, 'error') + }else status('No connection specfied', 'error') +} \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/http/http.ts b/Backend/src/Integrations/buildin/http/http.ts new file mode 100644 index 0000000..65bf3f5 --- /dev/null +++ b/Backend/src/Integrations/buildin/http/http.ts @@ -0,0 +1,61 @@ +import { ActionAPI } from '../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../EditorAPI'; +import { IntegrationAPI } from '../../IntegrationApi'; +const axios = require('axios').default; + +module.exports = (api: IntegrationAPI) => { + //Register a action + api.registerAction('request', (actionAPI: ActionAPI) => { + //Handle the action when executed + actionAPI.handle( + (properties: Request_Properties, status: (text: string, type?: 'info' | 'error' | 'warn') => void) => { + axios + [properties.method](properties.address) + .then((response) => { + status('Request has been delivered.'); + }) + .catch((error) => { + status('Unable to deliver request.', 'error'); + }); + } + ); + + //Handle the interactive editor + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: Request_Properties) => { + var method: Request_Properties_Methods = properties.method != undefined ? properties.method : 'get'; + var address: string = properties.address != undefined ? properties.address : ''; + + editorAPI.onFieldChanges((fields: EditorAPI_Field[]) => { + var fieldValues = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ method: fieldValues.method, address: fieldValues.address }); + }); + + editorAPI.setFields([ + { + id: 'method', + name: 'Method', + type: 'select', + value: method, + values: [ + { id: 'get', text: 'GET' }, + { id: 'post', text: 'POST' }, + { id: 'put', text: 'PUT' } + ] + }, + { + id: 'address', + name: 'Address', + type: 'text', + value: address + } + ]); + }); + }); +}; + +interface Request_Properties { + method: Request_Properties_Methods; + address: string; +} + +type Request_Properties_Methods = 'post' | 'get' | 'put'; diff --git a/Backend/src/Integrations/buildin/http/integration.ts b/Backend/src/Integrations/buildin/http/integration.ts new file mode 100644 index 0000000..42bd395 --- /dev/null +++ b/Backend/src/Integrations/buildin/http/integration.ts @@ -0,0 +1,16 @@ +import { Integration } from '../../IntegrationsManager'; + +var Integration: Integration = { + name: 'HTTP', + description: 'Make a HTTP request.', + main: require('./http'), + + actions: [ + { + id: 'request', + name: 'Make HTTP request' + } + ] +}; + +module.exports = Integration; diff --git a/Backend/src/Integrations/buildin/mitti/MittiClass.ts b/Backend/src/Integrations/buildin/mitti/MittiClass.ts new file mode 100644 index 0000000..f2422eb --- /dev/null +++ b/Backend/src/Integrations/buildin/mitti/MittiClass.ts @@ -0,0 +1,260 @@ +import * as HyperdeckLib from 'hyperdeck-js-lib'; + +export class Mitti { + hyperdeck: any; + events: { + connected?: () => void; + connectionlost?: () => void; + connecterror?: (message: string) => void; + }; + + connected: boolean; + + constructor(ip: string) { + this.events = {}; + this.connected = false; + + // console.log(`Connecting to hyperdeck at ${ip}`); + + var _this = this; + this.hyperdeck = new HyperdeckLib.Hyperdeck(ip); + this.hyperdeck + .onConnected() + .then(function() { + _this.hyperdeck.getNotifier().on('asynchronousEvent', function(response) { + //console.log('Got an asynchronous event with code ' + response.code + '.'); + }); + + _this.hyperdeck.getNotifier().on('connectionLost', function() { + _this.connected = false; + console.error('Connection lost.'); + if (_this.events.connectionlost != undefined) _this.events.connectionlost(); + }); + + if (_this.events.connected != undefined) _this.events.connected(); + }) + .catch(function(error) { + console.log(error); + _this.connected = false; + if (_this.events.connecterror != undefined) + _this.events.connecterror('Failed to connect to hyperdeck.'); + }); + } + + on(event: 'connected' | 'connectionlost' | 'connecterror', callback: (...args: any[]) => void) { + if (this.events[event] != undefined) throw new Error(`Event '${event}' already created`); + else { + this.events[event] = callback; + if (event == 'connected' && this.connected == true) callback(); + } + } + + raw(command: string) { + return new Promise((resolve, reject) => { + //console.log('Sending command: ' + command); + this.hyperdeck + .makeRequest(command) + .then(function(response) { + //console.log('Got response with code ' + response.code + '.'); + + resolve(response); + }) + .catch(function(errResponse) { + if (!errResponse) { + reject(new Error('The request failed because the hyperdeck connection was lost.')); + } else { + reject(new Error('The hyperdeck returned an error with status code ' + errResponse.code + '.')); + } + }); + }); + } + + getTransportInfo(): Promise<{ + status: 'playing' | 'stopped'; + speed: string; + 'slot id': string; + 'display timecode': string; + 'clip id': string; + 'single clip': string; + 'video format': string; + 'loop': string; + }> { + return new Promise((resolve, reject) => { + //console.log('Getting transport info'); + this.hyperdeck + .makeRequest('transport info') + .then(function(response) { + //console.log('Got response with code ' + response.code + '.'); + + if (response.params != undefined) { + resolve(response.params); + } else { + reject(new Error('Response contained no params')); + } + }) + .catch(function(errResponse) { + if (!errResponse) { + reject(new Error('The request failed because the hyperdeck connection was lost.')); + } else { + reject(new Error('The hyperdeck returned an error with status code ' + errResponse.code + '.')); + } + }); + }); + } + + getClipCount(): Promise { + return new Promise((resolve, reject) => { + //console.log('Getting clips'); + this.hyperdeck + .makeRequest('clips count') + .then(function(response) { + //console.log('Got response with code ' + response.code + '.'); + + if (response.params != undefined) { + if (response.params['clip count'] != undefined) { + resolve(response.params['clip count']); + } else { + reject(new Error('Response contained no clip count data')); + } + } else { + reject(new Error('Response contained no params data')); + } + }) + .catch(function(errResponse) { + if (!errResponse) { + reject(new Error('The request failed because the hyperdeck connection was lost.')); + } else { + reject(new Error('The hyperdeck returned an error with status code ' + errResponse.code + '.')); + } + }); + }); + } + + getClips(): Promise<{ [index: string]: string }> { + return new Promise((resolve, reject) => { + //console.log('Getting clips'); + this.hyperdeck + .clipsGet() + .then(function(response) { + //console.log('Got response with code ' + response.code + '.'); + + if (response.params != undefined) { + if (response.params['clip count'] != undefined) delete response.params['clip count']; + + resolve(response.params); + } else { + reject(new Error('Response contained no clip data')); + } + }) + .catch(function(errResponse) { + if (!errResponse) { + reject(new Error('The request failed because the hyperdeck connection was lost.')); + } else { + reject(new Error('The hyperdeck returned an error with status code ' + errResponse.code + '.')); + } + }); + }); + } + + selectClip(index: number): Promise { + return new Promise((resolve, reject) => { + //console.log('Selecting clip'); + this.hyperdeck + .makeRequest(`goto: clip id: ${index}`) + .then(function(response) { + //console.log('Got response with code ' + response.code + '.'); + + resolve(true); + }) + .catch(function(errResponse) { + if (!errResponse) { + reject(new Error('The request failed because the hyperdeck connection was lost.')); + } else { + reject(new Error('The hyperdeck returned an error with status code ' + errResponse.code + '.')); + } + }); + }); + } + + play(): Promise { + return new Promise((resolve, reject) => { + //console.log('Playing'); + this.hyperdeck + .play() + .then(function(response) { + //console.log('Got response with code ' + response.code + '.'); + + resolve(true); + }) + .catch(function(errResponse) { + if (!errResponse) { + reject(new Error('The request failed because the hyperdeck connection was lost.')); + } else { + reject(new Error('The hyperdeck returned an error with status code ' + errResponse.code + '.')); + } + }); + }); + } + + stop(): Promise { + return new Promise((resolve, reject) => { + //console.log('Stopping'); + this.hyperdeck + .stop() + .then(function(response) { + //console.log('Got response with code ' + response.code + '.'); + + resolve(true); + }) + .catch(function(errResponse) { + if (!errResponse) { + reject(new Error('The request failed because the hyperdeck connection was lost.')); + } else { + reject(new Error('The hyperdeck returned an error with status code ' + errResponse.code + '.')); + } + }); + }); + } + + next(wrap: boolean): Promise { + return new Promise((resolve, reject) => { + //console.log('Next clip'); + + this.getTransportInfo() + .then((transportInfo) => { + var newClip = parseInt(transportInfo['clip id']) + 1; + + if (wrap == true) { + this.getClipCount() + .then((clipCount) => { + if (newClip > clipCount) newClip = 1; + this.selectClip(newClip).then(resolve).catch(reject); + }) + .catch(reject); + } else this.selectClip(newClip).then(resolve).catch(reject); + }) + .catch(reject); + }); + } + + previous(wrap: boolean): Promise { + return new Promise((resolve, reject) => { + //console.log('Previous clip'); + + this.getTransportInfo() + .then((transportInfo) => { + var newClip = parseInt(transportInfo['clip id']) - 1; + + if (wrap == true) { + this.getClipCount() + .then((clipCount) => { + if (newClip < 1) newClip = clipCount; + this.selectClip(newClip).then(resolve).catch(reject); + }) + .catch(reject); + } else this.selectClip(newClip).then(resolve).catch(reject); + }) + .catch(reject); + }); + } +} diff --git a/Backend/src/Integrations/buildin/mitti/actions/clip.ts b/Backend/src/Integrations/buildin/mitti/actions/clip.ts new file mode 100644 index 0000000..e5ae7ab --- /dev/null +++ b/Backend/src/Integrations/buildin/mitti/actions/clip.ts @@ -0,0 +1,133 @@ +import axios from 'axios'; +import { ConnectionManager_Connection } from '../../../../ConnectionManager'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; +import { Mitti } from '../MittiClass'; + +module.exports = (actionAPI: ActionAPI) => { + //Handle the action when executed + actionAPI.handle( + (properties: Source_Properties, status: (text: string, type?: 'info' | 'error' | 'warn') => void) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var clipID = properties.clipID != undefined ? properties.clipID : 'none'; + if (connectionID != 'none') { + if (clipID != 'none') { + var connection = actionAPI.getConnection('mitti', connectionID); + var ip = connection.properties.ip; + var mitti = new Mitti(ip); + + mitti.on('connected', () => { + mitti + .selectClip(parseInt(clipID)) + .then(() => { + status(`Clip ${clipID} has been selected`, 'info'); + }) + .catch((error: Error) => { + status(error.message, 'error'); + }); + }); + } else status('No clip specified', 'error'); + } else status('No connection specified', 'error'); + } + ); + + //Handle the interactive editor + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: Source_Properties) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var clipID = properties.clipID != undefined ? properties.clipID : 'none'; + + var currentIP: string; + var currentPort: number; + + var fields: EditorAPI_Field[] = [ + { + id: 'connectionID', + name: 'Connection', + type: 'connection', + value: connectionID, + connectionType: 'mitti' + }, + { + id: 'clipID', + name: 'Clip', + type: 'select', + value: clipID, + values: [] + } + ]; + + function updateAddress(connectionID: string, callback: (changed: boolean) => void) { + if (connectionID != 'none') { + var connection = actionAPI.getConnection('mitti', connectionID); + + var ip: string = connection.properties.ip; + var port: number = connection.properties.port; + + if (currentIP != ip || currentPort != port) { + currentIP = ip; + currentPort = port; + callback(true); + } else { + callback(false); + } + } else { + if (currentIP != null || currentPort != null) { + currentIP = null; + currentPort = null; + callback(true); + } else { + callback(false); + } + } + } + + function updateSources(callback: () => void) { + var mitti = new Mitti(currentIP); + mitti + .getClips() + .then((clips) => { + var fieldValues: { id: string; text: string }[] = []; + for (var clipID in clips) { + var query = clips[clipID]; + var name = query.split(' ').splice(query.split(' ').length - 3, 2); + fieldValues.push({ id: clipID, text: `${clipID} - ${name}` }); + } + fields[1].values = fieldValues; + + callback(); + }) + .catch((error) => { + fields[1].values = []; + callback(); + }); + } + + function validate(fieldValues: Source_Properties) { + fields[0].value = fieldValues.connectionID; + fields[1].value = fieldValues.clipID; + + editorAPI.saveProperties({ connectionID: fieldValues.connectionID, clipID: fieldValues.clipID }); + + updateAddress(fieldValues.connectionID, (changed) => { + if (changed) { + updateSources(() => { + editorAPI.setFields(fields); + }); + } else editorAPI.setFields(fields); + }); + } + + validate({ connectionID, clipID }); + + editorAPI.onFieldChanges((fields: EditorAPI_Field[]) => { + var fieldValues: Source_Properties = editorAPI.tools.objectifyFieldsValues(fields); + + validate(fieldValues); + }); + }); +}; + +interface Source_Properties { + connectionID: string; + clipID: string; +} diff --git a/Backend/src/Integrations/buildin/mitti/actions/next.ts b/Backend/src/Integrations/buildin/mitti/actions/next.ts new file mode 100644 index 0000000..984e11a --- /dev/null +++ b/Backend/src/Integrations/buildin/mitti/actions/next.ts @@ -0,0 +1,61 @@ +import axios from 'axios'; +import { ConnectionManager_Connection } from '../../../../ConnectionManager'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; +import { Mitti } from '../MittiClass'; + +//TODO: Implement wrap checkbox property in editor + +module.exports = (actionAPI: ActionAPI) => { + //Handle the action when executed + actionAPI.handle((properties: Properties, status: (text: string, type?: 'info' | 'error' | 'warn') => void) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var wrap = properties.wrap != undefined ? properties.wrap : true; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('mitti', connectionID); + var mitti = connection.instance as Mitti; + + mitti + .previous(wrap) + .then(() => { + status(`Previous clip has been selected`, 'info'); + }) + .catch((error: Error) => { + status(error.message, 'error'); + }); + } else status('No connection specified', 'error'); + }); + + //Handle the interactive editor + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: Properties) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var wrap = properties.wrap != undefined ? properties.wrap : true; + + editorAPI.onFieldChanges((fields: EditorAPI_Field[]) => { + var fieldValues: Properties = editorAPI.tools.objectifyFieldsValues(fields); + + editorAPI.saveProperties({ connectionID: fieldValues.connectionID, wrap: fieldValues.wrap }); + }); + + editorAPI.setFields([ + { + id: 'connectionID', + name: 'Connection', + type: 'connection', + value: connectionID, + connectionType: 'mitti' + }, + { + id: 'wrap', + name: 'Wrap', + type: 'checkbox', + value: true + } + ]); + }); +}; + +interface Properties { + connectionID: string; + wrap: boolean; +} diff --git a/Backend/src/Integrations/buildin/mitti/actions/play.ts b/Backend/src/Integrations/buildin/mitti/actions/play.ts new file mode 100644 index 0000000..0c0602a --- /dev/null +++ b/Backend/src/Integrations/buildin/mitti/actions/play.ts @@ -0,0 +1,50 @@ +import axios from 'axios'; +import { ConnectionManager_Connection } from '../../../../ConnectionManager'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; +import { Mitti } from '../MittiClass'; + +module.exports = (actionAPI: ActionAPI) => { + //Handle the action when executed + actionAPI.handle((properties: Properties, status: (text: string, type?: 'info' | 'error' | 'warn') => void) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('mitti', connectionID); + var mitti = connection.instance as Mitti; + + mitti + .play() + .then(() => { + status(`Current clip playing`, 'info'); + }) + .catch((error: Error) => { + status(error.message, 'error'); + }); + } else status('No connection specified', 'error'); + }); + + //Handle the interactive editor + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: Properties) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + + editorAPI.onFieldChanges((fields: EditorAPI_Field[]) => { + var fieldValues: Properties = editorAPI.tools.objectifyFieldsValues(fields); + + editorAPI.saveProperties({ connectionID: fieldValues.connectionID }); + }); + + editorAPI.setFields([ + { + id: 'connectionID', + name: 'Connection', + type: 'connection', + value: connectionID, + connectionType: 'mitti' + } + ]); + }); +}; + +interface Properties { + connectionID: string; +} diff --git a/Backend/src/Integrations/buildin/mitti/actions/previous.ts b/Backend/src/Integrations/buildin/mitti/actions/previous.ts new file mode 100644 index 0000000..984e11a --- /dev/null +++ b/Backend/src/Integrations/buildin/mitti/actions/previous.ts @@ -0,0 +1,61 @@ +import axios from 'axios'; +import { ConnectionManager_Connection } from '../../../../ConnectionManager'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; +import { Mitti } from '../MittiClass'; + +//TODO: Implement wrap checkbox property in editor + +module.exports = (actionAPI: ActionAPI) => { + //Handle the action when executed + actionAPI.handle((properties: Properties, status: (text: string, type?: 'info' | 'error' | 'warn') => void) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var wrap = properties.wrap != undefined ? properties.wrap : true; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('mitti', connectionID); + var mitti = connection.instance as Mitti; + + mitti + .previous(wrap) + .then(() => { + status(`Previous clip has been selected`, 'info'); + }) + .catch((error: Error) => { + status(error.message, 'error'); + }); + } else status('No connection specified', 'error'); + }); + + //Handle the interactive editor + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: Properties) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var wrap = properties.wrap != undefined ? properties.wrap : true; + + editorAPI.onFieldChanges((fields: EditorAPI_Field[]) => { + var fieldValues: Properties = editorAPI.tools.objectifyFieldsValues(fields); + + editorAPI.saveProperties({ connectionID: fieldValues.connectionID, wrap: fieldValues.wrap }); + }); + + editorAPI.setFields([ + { + id: 'connectionID', + name: 'Connection', + type: 'connection', + value: connectionID, + connectionType: 'mitti' + }, + { + id: 'wrap', + name: 'Wrap', + type: 'checkbox', + value: true + } + ]); + }); +}; + +interface Properties { + connectionID: string; + wrap: boolean; +} diff --git a/Backend/src/Integrations/buildin/mitti/actions/stop.ts b/Backend/src/Integrations/buildin/mitti/actions/stop.ts new file mode 100644 index 0000000..c70635e --- /dev/null +++ b/Backend/src/Integrations/buildin/mitti/actions/stop.ts @@ -0,0 +1,50 @@ +import axios from 'axios'; +import { ConnectionManager_Connection } from '../../../../ConnectionManager'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; +import { Mitti } from '../MittiClass'; + +module.exports = (actionAPI: ActionAPI) => { + //Handle the action when executed + actionAPI.handle((properties: Properties, status: (text: string, type?: 'info' | 'error' | 'warn') => void) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('mitti', connectionID); + var mitti = connection.instance as Mitti; + + mitti + .stop() + .then(() => { + status(`Current clip stopped`, 'info'); + }) + .catch((error: Error) => { + status(error.message, 'error'); + }); + } else status('No connection specified', 'error'); + }); + + //Handle the interactive editor + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: Properties) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + + editorAPI.onFieldChanges((fields: EditorAPI_Field[]) => { + var fieldValues: Properties = editorAPI.tools.objectifyFieldsValues(fields); + + editorAPI.saveProperties({ connectionID: fieldValues.connectionID }); + }); + + editorAPI.setFields([ + { + id: 'connectionID', + name: 'Connection', + type: 'connection', + value: connectionID, + connectionType: 'mitti' + } + ]); + }); +}; + +interface Properties { + connectionID: string; +} diff --git a/Backend/src/Integrations/buildin/mitti/integration.ts b/Backend/src/Integrations/buildin/mitti/integration.ts new file mode 100644 index 0000000..4cde7d1 --- /dev/null +++ b/Backend/src/Integrations/buildin/mitti/integration.ts @@ -0,0 +1,47 @@ +import { Integration } from '../../IntegrationsManager'; + +var Integration: Integration = { + name: 'Mitti', + description: 'Control Mitti through the Mitti Undecked Bridge.', + main: require('./mitti'), + + actions: [ + { + id: 'clip', + name: 'Set the Mitti clip' + }, + + { + id: 'play', + name: 'Play current clip' + }, + + { + id: 'stop', + name: 'Stop current clip' + }, + + { + id: 'next', + name: 'Go to next clip' + }, + + { + id: 'previous', + name: 'Go to previous clip' + } + ], + + connections: [ + { + type: 'mitti', + name: 'Mitti Instance', + message: 'For this connection to work you need to enable Hyperdeck in the Mitti settings.', + fields: [ + { id: 'ip', name: 'IP Address', type: 'text', value: '0.0.0.0' } + ] + } + ] +}; + +module.exports = Integration; diff --git a/Backend/src/Integrations/buildin/mitti/mitti.ts b/Backend/src/Integrations/buildin/mitti/mitti.ts new file mode 100644 index 0000000..d55abef --- /dev/null +++ b/Backend/src/Integrations/buildin/mitti/mitti.ts @@ -0,0 +1,46 @@ +import { ConnectionValidatorAPI, IntegrationAPI } from '../../IntegrationApi'; +import { Mitti } from './MittiClass'; +const axios = require('axios').default; + +module.exports = (api: IntegrationAPI) => { + //Register a action + api.registerAction('clip', require('./actions/clip')); + api.registerAction('play', require('./actions/play')); + api.registerAction('stop', require('./actions/stop')); + api.registerAction('next', require('./actions/next')); + api.registerAction('previous', require('./actions/previous')); + + api.registerConnectionValidator('mitti', (ValidatorAPI: ConnectionValidatorAPI) => { + var properties = ValidatorAPI.properties; + if (properties.ip != undefined) { + if (ValidatorAPI.instance != undefined && (ValidatorAPI.instance as Mitti).connected == true) + return ValidatorAPI.callback(true); + + var mitti = new Mitti(properties.ip); + var canRespond = true; + var timeout: NodeJS.Timeout = setTimeout(() => { + canRespond = false; + ValidatorAPI.callback(false, 'Timeout while trying to connect to Mitti'); + }, 3000); + mitti.on('connected', () => { + if (canRespond == true) { + canRespond = false; + ValidatorAPI.setInstance(mitti); + clearTimeout(timeout); + ValidatorAPI.callback(true); + } + }); + mitti.on('connecterror', (errorMessage: string) => { + if (canRespond == true) { + canRespond = false; + clearTimeout(timeout); + ValidatorAPI.callback(false, errorMessage); + } + }); + } else ValidatorAPI.callback(false, 'Incorrect ip address syntax'); + }); +}; + +interface Mitti_Properties { + ip: string; +} diff --git a/Backend/src/Integrations/buildin/mitti/package-lock.json b/Backend/src/Integrations/buildin/mitti/package-lock.json new file mode 100644 index 0000000..311f9c9 --- /dev/null +++ b/Backend/src/Integrations/buildin/mitti/package-lock.json @@ -0,0 +1,173 @@ +{ + "name": "studiomonitor", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "studiomonitor", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "studiomonitor-api": "^2.4.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/studiomonitor-api": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/studiomonitor-api/-/studiomonitor-api-2.4.1.tgz", + "integrity": "sha512-x3eH9+eh1su4aaDWDB1HvQoowZIZ2gzFl5pgOgaG1YEwEnPp7UjoXCBvCDjr9y/xYhmf4199k8mMkUg2JKndlQ==", + "dependencies": { + "axios": "^0.27.2" + } + } + }, + "dependencies": { + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "studiomonitor-api": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/studiomonitor-api/-/studiomonitor-api-2.4.1.tgz", + "integrity": "sha512-x3eH9+eh1su4aaDWDB1HvQoowZIZ2gzFl5pgOgaG1YEwEnPp7UjoXCBvCDjr9y/xYhmf4199k8mMkUg2JKndlQ==", + "requires": { + "axios": "^0.27.2" + } + } + } +} diff --git a/Backend/src/Integrations/buildin/mitti/package.json b/Backend/src/Integrations/buildin/mitti/package.json new file mode 100644 index 0000000..ba2f305 --- /dev/null +++ b/Backend/src/Integrations/buildin/mitti/package.json @@ -0,0 +1,14 @@ +{ + "name": "studiomonitor", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Mees van der Wijk ", + "license": "ISC", + "dependencies": { + "studiomonitor-api": "^2.4.1" + } +} diff --git a/Backend/src/Integrations/buildin/moorentv/MoorenTv.ts b/Backend/src/Integrations/buildin/moorentv/MoorenTv.ts new file mode 100644 index 0000000..1f99ea5 --- /dev/null +++ b/Backend/src/Integrations/buildin/moorentv/MoorenTv.ts @@ -0,0 +1,79 @@ +import axios from "axios"; + +export class MoorenTV { + serverAddress: string; + serverPort: number; + adminPass: string + + + constructor(settings: { serverAddress: string, serverPort: number, adminPass: string }) { + this.serverAddress = settings.serverAddress; + this.serverPort = settings.serverPort; + this.adminPass = settings.adminPass; + } + + _getBaseURI() { + return `http://${this.serverAddress}:${this.serverPort}/api/v1/${this.adminPass}/` + } + + ping(callback: (succeed: boolean) => void) { + axios.get(this._getBaseURI() + "ping").then(() => { + callback(true) + }).catch(() => { + callback(false) + }) + } + + getGames(): Promise<{ + [gameID: string]: { + id: string, + title: string, + description: string, + icon: string, + category: string, + pregame: number, + autojoin: boolean, + screen: { + queue: boolean, + results: boolean, + banner: boolean, + stage: { + left: number, + width: string, + height: string + } + }, + htdocs: string, + gamePage: string, + devicePage: string, + autoaccept: boolean, + joinable: boolean + } + }> { + return new Promise((resolve, reject) => { + axios.get(this._getBaseURI() + 'games').then((response) => { + if (response.data.succeed == true) + resolve(response.data.response) + else reject('Internal server error') + }).catch(reject) + }) + } + + startGame(gameID: string): Promise { + return new Promise((resolve, reject) => { + axios.get(this._getBaseURI() + "games/start/" + gameID).then((response) => { + if (response.data.succeed == true) resolve() + else reject() + }).catch(reject) + }) + } + + stopGame(): Promise { + return new Promise((resolve, reject) => { + axios.get(this._getBaseURI() + "games/stop").then((response) => { + if (response.data.succeed == true) resolve() + else reject() + }).catch(reject) + }) + } +} \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/moorentv/actions/startGame.ts b/Backend/src/Integrations/buildin/moorentv/actions/startGame.ts new file mode 100644 index 0000000..5b3b0db --- /dev/null +++ b/Backend/src/Integrations/buildin/moorentv/actions/startGame.ts @@ -0,0 +1,99 @@ +import { ActionAPI } from "../../../ActionAPI"; +import { EditorAPI, EditorAPI_Field } from "../../../EditorAPI"; +import { MoorenTV } from "../MoorenTv"; + +module.exports = (ActionAPI: ActionAPI) => { + ActionAPI.handle((properties, status) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none' + var game = properties.game != undefined ? properties.game : 'none' + + if (connectionID != 'none') { + if (game != 'none') { + var connection = ActionAPI.getConnection('moorentv', connectionID) + + if (connection) { + var mtv: MoorenTV = connection.instance; + + mtv.startGame(game).then(() => { + + }).catch((error) => { + status(error, 'error') + }) + } else status(`Connection doesn't exist`, 'error') + } else status('No game specified', 'error') + } else status('No connection specified', 'error') + + }) + + + ActionAPI.onOpenEditor((EditorAPI: EditorAPI, properties) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none' + var game = properties.game != undefined ? properties.game : 'none' + + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: "Connection", + type: "connection", + connectionType: 'moorentv', + value: connectionID + } + + var gameField: EditorAPI_Field = { + id: 'game', + name: 'Game', + type: 'select', + value: game, + values: [] + } + + + var sendFields = (clearGameField: boolean = false) => { + if (clearGameField) gameField.values = [{ id: 'none', text: 'None' }] + EditorAPI.setFields([connectionField, gameField]) + } + + var lastConnectionID = null; + var validate = () => { + if (lastConnectionID != connectionID) { + lastConnectionID = connectionID; + + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('moorentv', connectionID) + + if (connection) { + var mtv: MoorenTV = connection.instance; + + mtv.getGames().then((games) => { + var values: { id: string, text: string }[] = [{ id: 'none', text: 'None' }] + for (var gameID in games) + values.push({ id: games[gameID].id, text: games[gameID].title }) + + gameField.values = values; + sendFields() + }).catch((error) => { + sendFields(true) + }) + } else sendFields(true) + } else sendFields(true) + } + } + + + EditorAPI.onFieldChanges((fields) => { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields) + + connectionID = fieldObject.connectionID; + game = fieldObject.game; + + connectionField.value = connectionID; + gameField.value = game + + + EditorAPI.saveProperties({ connectionID, game }) + + validate() + }) + + validate() + }) +} \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/moorentv/actions/stopGame.ts b/Backend/src/Integrations/buildin/moorentv/actions/stopGame.ts new file mode 100644 index 0000000..2313feb --- /dev/null +++ b/Backend/src/Integrations/buildin/moorentv/actions/stopGame.ts @@ -0,0 +1,44 @@ +import { ActionAPI } from "../../../ActionAPI"; +import { EditorAPI, EditorAPI_Field } from "../../../EditorAPI"; +import { MoorenTV } from "../MoorenTv"; + +module.exports = (ActionAPI: ActionAPI) => { + ActionAPI.handle((properties, status) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none' + + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('moorentv', connectionID) + + if (connection) { + var mtv: MoorenTV = connection.instance; + + mtv.stopGame().then(() => { + + }).catch((error) => { + status(error, 'error') + }) + } else status(`Connection doesn't exist`, 'error') + } else status('No connection specified', 'error') + + }) + + + ActionAPI.onOpenEditor((EditorAPI: EditorAPI, properties) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none' + + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: "Connection", + type: "connection", + connectionType: 'moorentv', + value: connectionID + } + + EditorAPI.setFields([connectionField]) + + EditorAPI.onFieldChanges((fields) => { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields) + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID }) + }) + }) +} \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/moorentv/integration.ts b/Backend/src/Integrations/buildin/moorentv/integration.ts new file mode 100644 index 0000000..4f41fd7 --- /dev/null +++ b/Backend/src/Integrations/buildin/moorentv/integration.ts @@ -0,0 +1,16 @@ +import { Integration } from "../../IntegrationsManager"; + +module.exports = { + name: "Mooren TV", + description: "Mooren TV Multiplay game system", + main: require('./main'), + connections: [ + { + name: "MoorenTV Instance", type: "moorentv", fields: [ + { id: 'serverAddress', name: "Server Address", type: "text", value: "0.0.0.0" }, + { id: 'serverPort', name: "Server Port", type: "number", value: "9090" }, + { id: 'adminPass', name: "Server Admin Pass", type: "text", value: "" }, + ] + } + ] +} as Integration \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/moorentv/main.ts b/Backend/src/Integrations/buildin/moorentv/main.ts new file mode 100644 index 0000000..0eb80f7 --- /dev/null +++ b/Backend/src/Integrations/buildin/moorentv/main.ts @@ -0,0 +1,18 @@ +import { ConnectionValidatorAPI, IntegrationAPI } from "../../IntegrationApi"; +import { MoorenTV } from "./MoorenTv"; + +module.exports = (Api: IntegrationAPI) => { + Api.registerAction('startGame', 'Start game', require('./actions/startGame')) + Api.registerAction('stopGame', 'Stop game', require('./actions/stopGame')) + + Api.registerConnectionValidator('moorentv', (validatorApi: ConnectionValidatorAPI) => { + var { serverAddress, serverPort, adminPass } = validatorApi.properties + + var mtv = new MoorenTV({ serverAddress, serverPort, adminPass }) + + mtv.ping((succeed) => { + if (succeed) validatorApi.setInstance(mtv) + validatorApi.callback(succeed, succeed == false ? 'Unable to connect to the MoorenTV instance' : null) + }) + }) +} \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/ndiTools/actions/source.ts b/Backend/src/Integrations/buildin/ndiTools/actions/source.ts new file mode 100644 index 0000000..d9222c3 --- /dev/null +++ b/Backend/src/Integrations/buildin/ndiTools/actions/source.ts @@ -0,0 +1,131 @@ +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; +import { StudioMonitor } from 'studiomonitor-api'; + +module.exports = (actionAPI: ActionAPI) => { + //Handle the action when executed + actionAPI.handle( + (properties: Source_Properties, status: (text: string, type?: 'info' | 'error' | 'warn') => void) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var sourceID = properties.sourceID != undefined ? properties.sourceID : 'none'; + if (connectionID != 'none') { + if (sourceID != 'none') { + var connection = actionAPI.getConnection('studiomonitor', connectionID); + + if (connection.instance != undefined) { + var monitor: StudioMonitor = connection.instance; + monitor + .setSource(sourceID) + .then(() => { + status('Source was set'); + }) + .catch((error) => { + status(`Error whilst setting source: ${error.message}`, 'error'); + }); + } + } else status('No source specified', 'error'); + } else status('No connection specified', 'error'); + } + ); + + //Handle the interactive editor + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: Source_Properties) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var sourceID = properties.sourceID != undefined ? properties.sourceID : 'none'; + + var monitor: StudioMonitor = null; + var currentIP: string = null; + var currentPort: number = null; + + var fields: EditorAPI_Field[] = [ + { + id: 'connectionID', + name: 'Connection', + type: 'connection', + value: connectionID, + connectionType: 'studiomonitor' + }, + { + id: 'sourceID', + name: 'Source', + type: 'select', + value: sourceID, + values: [] + } + ]; + + function updateAddress(connectionID: string, callback: (changed: boolean) => void) { + if (connectionID != 'none') { + var connection = actionAPI.getConnection('studiomonitor', connectionID); + + var ip: string = connection.properties.ip; + var port: number = connection.properties.port; + if (currentIP != ip || currentPort != port) { + currentIP = ip; + currentPort = port; + monitor = connection.instance; + callback(true); + } else { + callback(false); + } + } else { + if (currentIP != null || currentPort != null) { + currentIP = null; + currentPort = null; + monitor = null; + callback(true); + } else { + callback(false); + } + } + } + + function updateSources(callback: () => void) { + if (monitor != null) + monitor + .getSources() + .then((sources: string[]) => { + fields[1].values = sources.map((source) => { + return { id: source, text: source }; + }); + callback(); + }) + .catch((error) => { + fields[1].values = []; + callback(); + }); + else { + fields[1].values = []; + callback(); + } + } + + function validate(fieldValues: Source_Properties) { + fields[0].value = fieldValues.connectionID; + fields[1].value = fieldValues.sourceID; + + editorAPI.saveProperties({ connectionID: fieldValues.connectionID, sourceID: fieldValues.sourceID }); + + updateAddress(fieldValues.connectionID, (changed) => { + if (changed) { + updateSources(() => { + editorAPI.setFields(fields); + }); + } else editorAPI.setFields(fields); + }); + } + + validate({ connectionID, sourceID }); + + editorAPI.onFieldChanges((fields: EditorAPI_Field[]) => { + var fieldValues: Source_Properties = editorAPI.tools.objectifyFieldsValues(fields); + + validate(fieldValues); + }); + }); +}; + +interface Source_Properties { + connectionID: string; + sourceID: string; +} diff --git a/Backend/src/Integrations/buildin/ndiTools/integration.ts b/Backend/src/Integrations/buildin/ndiTools/integration.ts new file mode 100644 index 0000000..6991bb0 --- /dev/null +++ b/Backend/src/Integrations/buildin/ndiTools/integration.ts @@ -0,0 +1,27 @@ +import { Integration } from '../../IntegrationsManager'; + +var Integration: Integration = { + name: 'NDI Tools', + description: 'Control various NDI Tools through the NDI Tools Undecked Bridge.', + main: require('./ndiTools'), + + actions: [ + { + id: 'source', + name: 'Set the StudioMonitor source' + } + ], + + connections: [ + { + type: 'studiomonitor', + name: 'Studio Monitor', + fields: [ + { id: 'ip', name: 'IP Address', type: 'text', value: '0.0.0.0' }, + { id: 'port', name: 'Port', type: 'number', value: '80' } + ] + } + ] +}; + +module.exports = Integration; diff --git a/Backend/src/Integrations/buildin/ndiTools/ndiTools.ts b/Backend/src/Integrations/buildin/ndiTools/ndiTools.ts new file mode 100644 index 0000000..ca27608 --- /dev/null +++ b/Backend/src/Integrations/buildin/ndiTools/ndiTools.ts @@ -0,0 +1,24 @@ +import { ConnectionValidatorAPI, IntegrationAPI } from '../../IntegrationApi'; +import { StudioMonitor } from 'studiomonitor-api'; +const axios = require('axios').default; + +module.exports = (api: IntegrationAPI) => { + //Register a action + api.registerAction('source', require('./actions/source')); + + api.registerConnectionValidator('studiomonitor', (ValidatorAPI: ConnectionValidatorAPI) => { + var monitor = new StudioMonitor(ValidatorAPI.properties.ip, ValidatorAPI.properties.port, (err) => { + ValidatorAPI.callback( + err == undefined, + err == undefined ? null : 'Unable to connect to the StudioMonitor.' + ); + + ValidatorAPI.setInstance(monitor); + }); + }); +}; + +interface StudioMonitor_Properties { + ip: string; + port: number; +} diff --git a/Backend/src/Integrations/buildin/ndiTools/package-lock.json b/Backend/src/Integrations/buildin/ndiTools/package-lock.json new file mode 100644 index 0000000..311f9c9 --- /dev/null +++ b/Backend/src/Integrations/buildin/ndiTools/package-lock.json @@ -0,0 +1,173 @@ +{ + "name": "studiomonitor", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "studiomonitor", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "studiomonitor-api": "^2.4.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/studiomonitor-api": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/studiomonitor-api/-/studiomonitor-api-2.4.1.tgz", + "integrity": "sha512-x3eH9+eh1su4aaDWDB1HvQoowZIZ2gzFl5pgOgaG1YEwEnPp7UjoXCBvCDjr9y/xYhmf4199k8mMkUg2JKndlQ==", + "dependencies": { + "axios": "^0.27.2" + } + } + }, + "dependencies": { + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "studiomonitor-api": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/studiomonitor-api/-/studiomonitor-api-2.4.1.tgz", + "integrity": "sha512-x3eH9+eh1su4aaDWDB1HvQoowZIZ2gzFl5pgOgaG1YEwEnPp7UjoXCBvCDjr9y/xYhmf4199k8mMkUg2JKndlQ==", + "requires": { + "axios": "^0.27.2" + } + } + } +} diff --git a/Backend/src/Integrations/buildin/ndiTools/package.json b/Backend/src/Integrations/buildin/ndiTools/package.json new file mode 100644 index 0000000..ba2f305 --- /dev/null +++ b/Backend/src/Integrations/buildin/ndiTools/package.json @@ -0,0 +1,14 @@ +{ + "name": "studiomonitor", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Mees van der Wijk ", + "license": "ISC", + "dependencies": { + "studiomonitor-api": "^2.4.1" + } +} diff --git a/Backend/src/Integrations/buildin/pjlink/actions/setPower.ts b/Backend/src/Integrations/buildin/pjlink/actions/setPower.ts new file mode 100644 index 0000000..1a89546 --- /dev/null +++ b/Backend/src/Integrations/buildin/pjlink/actions/setPower.ts @@ -0,0 +1,35 @@ +import { ActionAPI } from "../../../ActionAPI"; +import { EditorAPI, EditorAPI_Field } from "../../../EditorAPI"; + +module.exports = (ActionAPI: ActionAPI) => { + ActionAPI.onExecute((properties, status) => { + + }) + + + ActionAPI.onOpenEditor((EditorAPI, properties) => { + var connectionField: EditorAPI_Field = { + id: "connectionID", + name: "Connection", + type: "connection", + connectionType: "pjlink", + value: properties.connectionID != undefined ? properties.connectionID : 'none' + } + + var stateField: EditorAPI_Field = { + id: 'state', + name: "State", + type: 'select', + values: [{ id: "on", text: "Power On" }, { id: "off", text: "Power Off" }], + value: properties.state != undefined ? properties.state : 'on' + } + + EditorAPI.onFieldChanges((fields) => { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields) + + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID, state: fieldObject.state }) + }) + + EditorAPI.setFields([connectionField, stateField]) + }) +} \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/pjlink/integration.ts b/Backend/src/Integrations/buildin/pjlink/integration.ts new file mode 100644 index 0000000..0099e41 --- /dev/null +++ b/Backend/src/Integrations/buildin/pjlink/integration.ts @@ -0,0 +1,34 @@ +import { Integration } from "../../IntegrationsManager"; + +module.exports = { + name: "PJLink", + description: "PJLink is a unified standard for operating and controlling data projectors.", + main: require("./main"), + connections: [ + { + type: "pjlink", + name: "Projector", + message: 'Make you PJLink is enabled on your projector. Most of the time these settings are located under Network.', + fields: [ + { + id: 'ip', + name: "IP Adddress", + type: "text", + value: "0.0.0.0" + }, + { + id: 'port', + name: "PJLink Port", + type: "number", + value: "4352" + }, + { + id: 'password', + name: "PJLink Password", + type: "password", + value: "" + } + ] + } + ] +} as Integration \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/pjlink/main.ts b/Backend/src/Integrations/buildin/pjlink/main.ts new file mode 100644 index 0000000..0cb3025 --- /dev/null +++ b/Backend/src/Integrations/buildin/pjlink/main.ts @@ -0,0 +1,22 @@ +import * as pjlink from 'pjlink' + +import { IntegrationAPI } from "../../IntegrationApi"; + +module.exports = (Api: IntegrationAPI) => { + + + Api.registerConnectionValidator('pjlink', (validatorAPI) => { + var ip = validatorAPI.properties.ip; + var port = validatorAPI.properties.port; + var password = validatorAPI.properties.password; + + var beamer = new pjlink(ip, port, password); + beamer.getClass((err, classNumber) => { + if (!err) + validatorAPI.setInstance(beamer) + + + validatorAPI.callback(err == undefined, err == undefined ? null : 'Unable to connect to projector: ' + err) + }); + }) +} \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/powerpoint/actions/next.ts b/Backend/src/Integrations/buildin/powerpoint/actions/next.ts new file mode 100644 index 0000000..bcef688 --- /dev/null +++ b/Backend/src/Integrations/buildin/powerpoint/actions/next.ts @@ -0,0 +1,50 @@ +import axios from 'axios'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties: Properties, status) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + + if (connectionID != 'none') { + var connection = actionAPI.getConnection('powerpoint-bridge', connectionID); + + axios + .get(`http://${connection.properties.ip}:${connection.properties.port}/v1/next`) + .then(() => { + status('Action completed'); + }) + .catch(() => { + status('Unable to reach Powerpoint-Bridge'); + }); + } else status('No connection specified', 'error'); + }); + + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: Properties) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'powerpoint-bridge', + value: connectionID + }; + editorAPI.onFieldChanges((fields) => { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; + +interface Properties { + connectionID: string; +} diff --git a/Backend/src/Integrations/buildin/powerpoint/actions/overview.ts b/Backend/src/Integrations/buildin/powerpoint/actions/overview.ts new file mode 100644 index 0000000..45a607c --- /dev/null +++ b/Backend/src/Integrations/buildin/powerpoint/actions/overview.ts @@ -0,0 +1,50 @@ +import axios from 'axios'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties: Properties, status) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + + if (connectionID != 'none') { + var connection = actionAPI.getConnection('powerpoint-bridge', connectionID); + + axios + .get(`http://${connection.properties.ip}:${connection.properties.port}/v1/overview`) + .then(() => { + status('Action completed'); + }) + .catch(() => { + status('Unable to reach Powerpoint-Bridge'); + }); + } else status('No connection specified', 'error'); + }); + + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: Properties) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'powerpoint-bridge', + value: connectionID + }; + editorAPI.onFieldChanges((fields) => { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; + +interface Properties { + connectionID: string; +} diff --git a/Backend/src/Integrations/buildin/powerpoint/actions/previous.ts b/Backend/src/Integrations/buildin/powerpoint/actions/previous.ts new file mode 100644 index 0000000..b0b08e0 --- /dev/null +++ b/Backend/src/Integrations/buildin/powerpoint/actions/previous.ts @@ -0,0 +1,50 @@ +import axios from 'axios'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties: Properties, status) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + + if (connectionID != 'none') { + var connection = actionAPI.getConnection('powerpoint-bridge', connectionID); + + axios + .get(`http://${connection.properties.ip}:${connection.properties.port}/v1/previous`) + .then(() => { + status('Action completed'); + }) + .catch(() => { + status('Unable to reach Powerpoint-Bridge'); + }); + } else status('No connection specified', 'error'); + }); + + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: Properties) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'powerpoint-bridge', + value: connectionID + }; + editorAPI.onFieldChanges((fields) => { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; + +interface Properties { + connectionID: string; +} diff --git a/Backend/src/Integrations/buildin/powerpoint/integration.ts b/Backend/src/Integrations/buildin/powerpoint/integration.ts new file mode 100644 index 0000000..c8b7ccd --- /dev/null +++ b/Backend/src/Integrations/buildin/powerpoint/integration.ts @@ -0,0 +1,23 @@ +import { Integration } from '../../IntegrationsManager'; + +module.exports = { + name: 'Powerpoint', + description: 'Control basic Powerpoint functionality on the Undecked computer or via our Powerpoint-Bridge application.', + main: require('./powerpoint'), + connections: [ + { + name: 'Powerpoint-Bridge', + type: 'powerpoint-bridge', + message: + "This connection requires the 'Undecked Powerpoint Bridge' tool to be running on the same machine as Powerpoint. This tool allows Undecked to control various Powerpoint features over the network.", + link: { + address: 'http://www.morphix.productions', + title: 'Get the Powerpoint Bridge' + }, + fields: [ + { id: 'ip', name: 'IP Address', type: 'text' }, + { id: 'port', name: 'Port', type: 'number', value: 9292 } + ] + } + ] +} as Integration; diff --git a/Backend/src/Integrations/buildin/powerpoint/powerpoint.ts b/Backend/src/Integrations/buildin/powerpoint/powerpoint.ts new file mode 100644 index 0000000..672c8dc --- /dev/null +++ b/Backend/src/Integrations/buildin/powerpoint/powerpoint.ts @@ -0,0 +1,21 @@ +import axios from 'axios'; +import { IntegrationAPI } from '../../IntegrationApi'; + +module.exports = (api: IntegrationAPI) => { + api.registerAction('overview', 'Show slide overview', require('./actions/overview')); + api.registerAction('previous', 'Previous slide', require('./actions/previous')); + api.registerAction('next', 'Next slide', require('./actions/next')); + + api.registerConnectionValidator('powerpoint-bridge', (validatorAPI) => { + if (validatorAPI.properties.ip != undefined && validatorAPI.properties.port != undefined) { + axios + .get(`http://${validatorAPI.properties.ip}:${validatorAPI.properties.port}/v1/ping`) + .then(() => { + validatorAPI.callback(true); + }) + .catch(() => { + validatorAPI.callback(false, 'Unable to reach Powerpoint-Bridge'); + }); + } else validatorAPI.callback(false, 'No ip or port specified'); + }); +}; diff --git a/Backend/src/Integrations/buildin/protor/ProtorClass.ts b/Backend/src/Integrations/buildin/protor/ProtorClass.ts new file mode 100644 index 0000000..e31166f --- /dev/null +++ b/Backend/src/Integrations/buildin/protor/ProtorClass.ts @@ -0,0 +1,39 @@ +import axios from "axios"; + +export class Protor { + ip: string; + port: number; + + constructor(ip: string, port: number) { + this.ip = ip; + this.port = port; + } + + _getBaseURI() { + return `http://${this.ip}:${this.port}/` + } + + isOnline(callback: (online: boolean) => void) { + axios.get(this._getBaseURI() + 'online').then(() => { + callback(true) + }).catch(() => { + callback(false) + }) + } + + fadeIn(duration: number = 0) { + axios.get(this._getBaseURI() + 'api/animation/fadein/' + duration).then(() => { + + }).catch(() => { + + }) + } + + fadeOut(duration: number = 0) { + axios.get(this._getBaseURI() + 'api/animation/fadeout/' + duration).then(() => { + + }).catch(() => { + + }) + } +} \ No newline at end of file diff --git a/Backend/src/Integrations/buildin/protor/actions/fadeIn.ts b/Backend/src/Integrations/buildin/protor/actions/fadeIn.ts new file mode 100644 index 0000000..3518c0d --- /dev/null +++ b/Backend/src/Integrations/buildin/protor/actions/fadeIn.ts @@ -0,0 +1,66 @@ +import axios from 'axios'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; +import { Protor } from '../ProtorClass'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties: Properties, status) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var duration = + properties.duration != undefined + ? properties.duration + : 0; + + if (connectionID != 'none') { + var connection = actionAPI.getConnection('protor', connectionID); + + if (connection && connection.instance != undefined) { + var protor: Protor = connection.instance; + + protor.fadeIn(duration) + } else status('Connection not online', 'error'); + } else status('No connection specified', 'error'); + }); + + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: Properties) => { + var connectionID = + properties.connectionID != undefined + ? properties.connectionID + : 'none'; + var duration = + properties.duration != undefined + ? properties.duration + : 0; + + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'protor', + value: connectionID + }; + + var durationField: EditorAPI_Field = { + id: 'duration', + name: 'Duration', + type: 'number', + value: duration + }; + + editorAPI.setFields([connectionField, durationField]) + + editorAPI.onFieldChanges((fields) => { + var fieldObject = editorAPI.tools.objectifyFieldsValues(fields) + editorAPI.saveProperties({ connectionID: fieldObject.connectionID, duration: fieldObject.duration }) + }) + + }); +}; + +interface Properties { + connectionID: string; + duration: number; +} diff --git a/Backend/src/Integrations/buildin/protor/actions/fadeOut.ts b/Backend/src/Integrations/buildin/protor/actions/fadeOut.ts new file mode 100644 index 0000000..781f2d9 --- /dev/null +++ b/Backend/src/Integrations/buildin/protor/actions/fadeOut.ts @@ -0,0 +1,67 @@ +import axios from 'axios'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; +import { Protor } from '../ProtorClass'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties: Properties, status) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var duration = + properties.duration != undefined + ? properties.duration + : 0; + + + if (connectionID != 'none') { + var connection = actionAPI.getConnection('protor', connectionID); + + if (connection && connection.instance != undefined) { + var protor: Protor = connection.instance; + + protor.fadeOut(duration) + } else status('Connection not online', 'error'); + } else status('No connection specified', 'error'); + }); + + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: Properties) => { + var connectionID = + properties.connectionID != undefined + ? properties.connectionID + : 'none'; + var duration = + properties.duration != undefined + ? properties.duration + : 0; + + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'protor', + value: connectionID + }; + + var durationField: EditorAPI_Field = { + id: 'duration', + name: 'Duration', + type: 'number', + value: duration + }; + + editorAPI.setFields([connectionField, durationField]) + + editorAPI.onFieldChanges((fields) => { + var fieldObject = editorAPI.tools.objectifyFieldsValues(fields) + editorAPI.saveProperties({ connectionID: fieldObject.connectionID, duration: fieldObject.duration }) + }) + + }); +}; + +interface Properties { + connectionID: string; + duration: number; +} diff --git a/Backend/src/Integrations/buildin/protor/integration.ts b/Backend/src/Integrations/buildin/protor/integration.ts new file mode 100644 index 0000000..cbceac6 --- /dev/null +++ b/Backend/src/Integrations/buildin/protor/integration.ts @@ -0,0 +1,17 @@ +import { Integration } from '../../IntegrationsManager'; + +module.exports = { + name: 'Protor', + description: 'Control Protor features', + main: require('./protor'), + connections: [ + { + name: 'Protor', + type: 'protor', + fields: [ + { id: 'ip', name: 'IP Address', type: 'text' }, + { id: 'port', name: 'Port', type: 'number', value: 9944 } + ] + } + ] +} as Integration; diff --git a/Backend/src/Integrations/buildin/protor/protor.ts b/Backend/src/Integrations/buildin/protor/protor.ts new file mode 100644 index 0000000..e56917d --- /dev/null +++ b/Backend/src/Integrations/buildin/protor/protor.ts @@ -0,0 +1,18 @@ +import axios from 'axios'; +import { IntegrationAPI } from '../../IntegrationApi'; +import { Protor } from './ProtorClass'; + +module.exports = (api: IntegrationAPI) => { + api.registerAction('fadeIn', 'Fade in', require('./actions/fadeIn')); + api.registerAction('fadeOut', 'Fade out', require('./actions/fadeOut')); + + api.registerConnectionValidator('protor', (validatorAPI) => { + if (validatorAPI.properties.ip != undefined && validatorAPI.properties.port != undefined) { + var protor = new Protor(validatorAPI.properties.ip, validatorAPI.properties.port) + protor.isOnline((online: boolean) => { + validatorAPI.callback(online, online ? null : 'Unable to reach Protor instance') + validatorAPI.setInstance(protor) + }) + } else validatorAPI.callback(false, 'No ip or port specified'); + }); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/focusFar.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/focusFar.ts new file mode 100644 index 0000000..dd02b13 --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/focusFar.ts @@ -0,0 +1,12 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraFocusFar(); + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/focusNear.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/focusNear.ts new file mode 100644 index 0000000..b2b97d0 --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/focusNear.ts @@ -0,0 +1,12 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraFocusNear(); + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/focusStop.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/focusStop.ts new file mode 100644 index 0000000..d18534c --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/focusStop.ts @@ -0,0 +1,12 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraFocusStop(); + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/gainDown.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/gainDown.ts new file mode 100644 index 0000000..5ac00a2 --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/gainDown.ts @@ -0,0 +1,12 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraGainDown(); + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/gainReset.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/gainReset.ts new file mode 100644 index 0000000..5cd48c1 --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/gainReset.ts @@ -0,0 +1,12 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraGainReset(); + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/gainUp.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/gainUp.ts new file mode 100644 index 0000000..614cff1 --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/gainUp.ts @@ -0,0 +1,12 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraGainUp(); + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/home.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/home.ts new file mode 100644 index 0000000..fbed97f --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/home.ts @@ -0,0 +1,12 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraPanTiltHome(); + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/irisDown.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/irisDown.ts new file mode 100644 index 0000000..2b7e496 --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/irisDown.ts @@ -0,0 +1,12 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraIrisDown(); + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/irisReset.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/irisReset.ts new file mode 100644 index 0000000..e581c8f --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/irisReset.ts @@ -0,0 +1,12 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraIrisReset(); + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/irisUp.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/irisUp.ts new file mode 100644 index 0000000..a6db6ce --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/irisUp.ts @@ -0,0 +1,12 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraIrisUp(); + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/panLeft.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/panLeft.ts new file mode 100644 index 0000000..3849515 --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/panLeft.ts @@ -0,0 +1,22 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var connection = actionAPI.getConnection('viscaOverIpCamera', properties.connectionID); + if (connection) { + if (connection.instance != undefined) { + var speed = + connection.instance.internal != undefined && connection.instance.internal.pantiltSpeed != undefined + ? connection.instance.internal.pantiltSpeed + : 10; + + var command = ViscaCommand.cameraPanTilt(-1 * speed, 0); + simpleCommandHandle(actionAPI, command, properties, status); + } + } + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/panRight.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/panRight.ts new file mode 100644 index 0000000..6ddac31 --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/panRight.ts @@ -0,0 +1,22 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var connection = actionAPI.getConnection('viscaOverIpCamera', properties.connectionID); + if (connection) { + if (connection.instance != undefined) { + var speed = + connection.instance.internal != undefined && connection.instance.internal.pantiltSpeed != undefined + ? connection.instance.internal.pantiltSpeed + : 10; + + var command = ViscaCommand.cameraPanTilt(1 * speed, 0); + simpleCommandHandle(actionAPI, command, properties, status); + } + } + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/panTiltSpeed.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/panTiltSpeed.ts new file mode 100644 index 0000000..27326ad --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/panTiltSpeed.ts @@ -0,0 +1,37 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var numberValue = properties.number != undefined ? properties.number : 10; + + if (connectionID != 'none') { + var connection = actionAPI.getConnection('viscaOverIpCamera', connectionID); + if (connection != undefined && connection.instance != undefined) { + if (connection.instance.internal != undefined) connection.instance.internal = {}; + + connection.instance.internal.pantiltSpeed = numberValue; + status('Speed has been set', 'info'); + } else status('Not connected', 'error'); + } else status('No connection specified', 'error'); + }); + + actionAPI.onOpenEditor((EditorAPI, properties) => { + var numberField: EditorAPI_Field = { + id: 'number', + name: 'Speed', + type: 'select', + value: properties.number != undefined ? properties.number : 1, + values: [] + }; + for (let i = 0; i < 25; i++) { + numberField.values.push({ id: String(i), text: String(i) }); + } + simpleCommandEditor(EditorAPI, properties, [ + numberField + ]); + }); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/panTiltStop.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/panTiltStop.ts new file mode 100644 index 0000000..fc807b0 --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/panTiltStop.ts @@ -0,0 +1,13 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraPanTilt(0, 0, 0x03, 0x03); + + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/presetRecall.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/presetRecall.ts new file mode 100644 index 0000000..dfe1c14 --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/presetRecall.ts @@ -0,0 +1,22 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { EditorAPI } from '../../../EditorAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraPresetRecall(properties.number); + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor((EditorAPI, properties) => + simpleCommandEditor(EditorAPI, properties, [ + { + id: 'number', + name: 'Preset Index', + type: 'number', + value: properties.number != undefined ? properties.number : 1 + } + ]) + ); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/presetReset.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/presetReset.ts new file mode 100644 index 0000000..4943d86 --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/presetReset.ts @@ -0,0 +1,22 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { EditorAPI } from '../../../EditorAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraPresetReset(properties.number); + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor((EditorAPI, properties) => + simpleCommandEditor(EditorAPI, properties, [ + { + id: 'number', + name: 'Preset Index', + type: 'number', + value: properties.number != undefined ? properties.number : 1 + } + ]) + ); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/presetSet.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/presetSet.ts new file mode 100644 index 0000000..2d2dfd1 --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/presetSet.ts @@ -0,0 +1,22 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { EditorAPI } from '../../../EditorAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraPresetSet(properties.number); + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor((EditorAPI, properties) => { + simpleCommandEditor(EditorAPI, properties, [ + { + id: 'number', + name: 'Preset Index', + type: 'number', + value: properties.number != undefined ? properties.number : 1 + } + ]); + }); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/reset.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/reset.ts new file mode 100644 index 0000000..ee62beb --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/reset.ts @@ -0,0 +1,12 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraPanTiltReset(); + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/shutterDown.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/shutterDown.ts new file mode 100644 index 0000000..34b6f87 --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/shutterDown.ts @@ -0,0 +1,12 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraShutterDown(); + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/shutterReset.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/shutterReset.ts new file mode 100644 index 0000000..3567e6c --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/shutterReset.ts @@ -0,0 +1,12 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraShutterReset(); + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/shutterUp.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/shutterUp.ts new file mode 100644 index 0000000..7b56916 --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/shutterUp.ts @@ -0,0 +1,12 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraShutterUp(); + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/tiltDown.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/tiltDown.ts new file mode 100644 index 0000000..e018211 --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/tiltDown.ts @@ -0,0 +1,22 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var connection = actionAPI.getConnection('viscaOverIpCamera', properties.connectionID); + if (connection) { + if (connection.instance != undefined) { + var speed = + connection.instance.internal != undefined && connection.instance.internal.pantiltSpeed != undefined + ? connection.instance.internal.pantiltSpeed + : 10; + + var command = ViscaCommand.cameraPanTilt(0, 1 * speed); + simpleCommandHandle(actionAPI, command, properties, status); + } + } + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/tiltUp.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/tiltUp.ts new file mode 100644 index 0000000..62d5144 --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/tiltUp.ts @@ -0,0 +1,23 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var connection = actionAPI.getConnection('viscaOverIpCamera', properties.connectionID); + if (connection) { + if (connection.instance != undefined) { + var speed = + connection.instance.internal != undefined && connection.instance.internal.pantiltSpeed != undefined + ? connection.instance.internal.pantiltSpeed + : 10; + + var command = ViscaCommand.cameraPanTilt(0, -1 * speed); + simpleCommandHandle(actionAPI, command, properties, status); + } + } + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; +0; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/zoomIn.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/zoomIn.ts new file mode 100644 index 0000000..a91589c --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/zoomIn.ts @@ -0,0 +1,12 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraZoomIn(); + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/zoomOut.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/zoomOut.ts new file mode 100644 index 0000000..adc4ab8 --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/zoomOut.ts @@ -0,0 +1,12 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraZoomOut(); + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/actions/zoomStop.ts b/Backend/src/Integrations/buildin/viscaOverIP/actions/zoomStop.ts new file mode 100644 index 0000000..9c7e294 --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/actions/zoomStop.ts @@ -0,0 +1,12 @@ +import { ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../../ActionAPI'; +import { simpleCommandEditor, simpleCommandHandle } from '../simpleCommandHandler'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties, status: (text: string, type: ActionAPI_StatusTypes) => void) => { + var command = ViscaCommand.cameraZoomStop(); + simpleCommandHandle(actionAPI, command, properties, status); + }); + + actionAPI.onOpenEditor(simpleCommandEditor); +}; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/integration.ts b/Backend/src/Integrations/buildin/viscaOverIP/integration.ts new file mode 100644 index 0000000..ae04c5b --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/integration.ts @@ -0,0 +1,20 @@ +import { Integration } from '../../IntegrationsManager'; + +var Integration: Integration = { + name: 'Visca over IP', + description: 'Control PTZ cameras', + main: require('./viscaOverIP'), + + connections: [ + { + type: 'viscaOverIpCamera', + name: 'Camera', + fields: [ + { id: 'ip', name: 'IP Address', type: 'text', value: '0.0.0.0' }, + { id: 'port', name: 'Visca Port', type: 'number', value: '52381' } + ] + } + ] +}; + +module.exports = Integration; diff --git a/Backend/src/Integrations/buildin/viscaOverIP/simpleCommandHandler.ts b/Backend/src/Integrations/buildin/viscaOverIP/simpleCommandHandler.ts new file mode 100644 index 0000000..def64fc --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/simpleCommandHandler.ts @@ -0,0 +1,66 @@ +import { ViscaCamera, ViscaCommand } from 'visca-over-ip'; +import { ActionAPI, ActionAPI_StatusTypes } from '../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../EditorAPI'; + +export function simpleCommandHandle( + actionAPI: ActionAPI, + command: ViscaCommand, + properties: Properties, + status: (text: string, type: ActionAPI_StatusTypes) => void +) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + if (connectionID != 'none') { + var connection = actionAPI.getConnection('viscaOverIpCamera', connectionID); + + if (connection.instance != undefined) { + var camera: ViscaCamera = connection.instance.camera; + status('Sending command', 'info'); + + command.on('ack', () => { + // status('Command acknowledged', 'info'); + }); + command.on('complete', () => { + status('Command complete', 'info'); + }); + command.on('error', (error: Error) => { + status(`Command error: ${error.message}`, 'info'); + }); + camera.sendCommand(command); + } + } else status('No connection specified', 'error'); +} + +export function simpleCommandEditor( + editorAPI: EditorAPI, + properties: Properties, + additionalFields: EditorAPI_Field[] = [] +) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'Connection', + type: 'connection', + connectionType: 'viscaOverIpCamera', + value: connectionID + }; + + editorAPI.onFieldChanges((fields) => { + var fieldObject = editorAPI.tools.objectifyFieldsValues(fields); + + var saveObject = { connectionID: fieldObject.connectionID }; + + for (let i = 0; i < additionalFields.length; i++) + saveObject[additionalFields[i].id] = fieldObject[additionalFields[i].id]; + + editorAPI.saveProperties(saveObject); + }); + + editorAPI.setFields([ + connectionField, + ...additionalFields + ]); +} + +interface Properties { + connectionID: string; +} diff --git a/Backend/src/Integrations/buildin/viscaOverIP/viscaOverIP.ts b/Backend/src/Integrations/buildin/viscaOverIP/viscaOverIP.ts new file mode 100644 index 0000000..d9a5902 --- /dev/null +++ b/Backend/src/Integrations/buildin/viscaOverIP/viscaOverIP.ts @@ -0,0 +1,74 @@ +import { ViscaCamera, ViscaCommand } from 'visca-over-ip'; +import { ConnectionValidatorAPI, IntegrationAPI } from '../../IntegrationApi'; +module.exports = (api: IntegrationAPI) => { + //Register a action + api.registerAction('home', 'Go to home position', require('./actions/home')); + api.registerAction('reset', 'Reset/Calibrate', require('./actions/reset')); + api.registerAction('gainDown', 'Gain down', require('./actions/gainDown')); + api.registerAction('gainUp', 'Gain up', require('./actions/gainUp')); + api.registerAction('gainReset', 'Gain reset', require('./actions/gainReset')); + api.registerAction('irisDown', 'Iris down', require('./actions/irisDown')); + api.registerAction('irisUp', 'Iris up', require('./actions/irisUp')); + api.registerAction('irisReset', 'Iris reset', require('./actions/irisReset')); + api.registerAction('shutterDown', 'Shutter down', require('./actions/shutterDown')); + api.registerAction('shutterUp', 'Shutter up', require('./actions/shutterUp')); + api.registerAction('shutterReset', 'Shutter reset', require('./actions/shutterReset')); + api.registerAction('zoomIn', 'Zoom in', require('./actions/zoomIn')); + api.registerAction('zoomOut', 'Zoom out', require('./actions/zoomOut')); + api.registerAction('zoomStop', 'Zoom stop', require('./actions/zoomStop')); + api.registerAction('presetRecall', 'Recall preset', require('./actions/presetRecall')); + api.registerAction('presetSet', 'Set preset', require('./actions/presetSet')); + api.registerAction('presetReset', 'Reset preset', require('./actions/presetReset')); + api.registerAction('panLeft', 'Pan left', require('./actions/panLeft')); + api.registerAction('panRight', 'Pan right', require('./actions/panRight')); + api.registerAction('tiltUp', 'Tilt up', require('./actions/tiltUp')); + api.registerAction('tiltDown', 'Tilt down', require('./actions/tiltDown')); + api.registerAction('panTiltStop', 'Stop pan/tilt', require('./actions/panTiltStop')); + api.registerAction('panTiltSpeed', 'Set pan/tilt speed', require('./actions/panTiltSpeed')); + api.registerAction('focusFar', 'Focus far', require('./actions/focusFar')); + api.registerAction('focusNear', 'Focus near', require('./actions/focusNear')); + api.registerAction('focusStop', 'Focus stop', require('./actions/focusStop')); + + api.registerConnectionValidator('viscaOverIpCamera', (ValidatorAPI: ConnectionValidatorAPI) => { + if (ValidatorAPI.properties.ip != undefined) { + if (ValidatorAPI.properties.port != undefined) { + var camera = new ViscaCamera(ValidatorAPI.properties.ip, ValidatorAPI.properties.port); + camera.on('error', console.log); + camera.on('connected', () => { + var canRespond = true; + var responseTimeout: NodeJS.Timeout; + + setTimeout(() => { + var command = ViscaCommand.cameraPanTilt(0, 0); + + command.on('ack', () => { + if (canRespond == true) { + canRespond = false; + ValidatorAPI.callback(true); + + ValidatorAPI.setInstance({ internal: { pantiltSpeed: 10 }, camera }); + clearTimeout(responseTimeout); + } + }); + + responseTimeout = setTimeout(() => { + canRespond = false; + ValidatorAPI.callback(false, 'Timeout reached'); + }, 10000); + + camera.sendCommand(command); + }, 1000); + }); + camera.on('error', (error) => { + ValidatorAPI.callback(false, 'Unable to reach camera'); + console.log(error); + }); + } + } + }); +}; + +interface ViscaCamera_Properties { + ip: string; + port: number; +} diff --git a/Backend/src/Integrations/buildin/wirecast/WirecastConnection.ts b/Backend/src/Integrations/buildin/wirecast/WirecastConnection.ts new file mode 100644 index 0000000..b1e7aa3 --- /dev/null +++ b/Backend/src/Integrations/buildin/wirecast/WirecastConnection.ts @@ -0,0 +1,296 @@ +import axios from 'axios'; + +export class WirecastConnection { + ip: string; + port: number; + + clockInterval: any; + + shots: Shots; + layers: Layers; + + constructor() { + this.shots = { + '1': { shots: {} }, + '2': { shots: {} }, + '3': { shots: {} }, + '4': { shots: {} }, + '5': { shots: {} } + }; + this.layers = { + '1': { id: null, name: null }, + '2': { id: null, name: null }, + '3': { id: null, name: null }, + '4': { id: null, name: null }, + '5': { id: null, name: null } + }; + this.clockInterval = setInterval(() => { + this.clock(); + }, 30000); + } + + destroy() { + clearInterval(this.clockInterval); + } + + clock() { + this.update(); + } + + update() { + if (this.ip != undefined && this.port != undefined) { + // axios + // .get(`http://${this.ip}:${this.port}/api/v2/shots/get`) + // .then((response) => { + // if (response.data != undefined && response.data.succeed == true) { + // this.shots = response.data.shots; + // } + // }) + // .catch(() => {}); + // axios + // .get(`http://${this.ip}:${this.port}/api/v2/layers/get`) + // .then((response) => { + // if (response.data != undefined && response.data.succeed == true) { + // this.layers = response.data.layers; + // } + // }) + // .catch(() => {}); + } + } + + setHost(ip: string, port: number) { + this.ip = ip; + this.port = port; + this.update(); + } + + ping(callback?: (state: boolean) => void): Promise { + return new Promise((resolve, reject) => { + axios + .get(`http://${this.ip}:${this.port}/api/v2/ping`) + .then(() => { + if (callback) callback(true); + if (callback == undefined) resolve(); + }) + .catch((error) => { + if (callback) callback(false); + if (callback == undefined) reject(); + }); + }); + } + + setShotLiveByID(shotID: number): Promise { + return new Promise((resolve, reject) => { + axios + .get(`http://${this.ip}:${this.port}/api/v2/shots/liveByID/${shotID}`) + .then((response) => { + if (response.data.succeed == true) resolve(); + else reject(); + }) + .catch((error) => { + console.log(error); + reject(); + }); + }); + } + + clearShotIfLive(shotID: number): Promise { + return new Promise((resolve, reject) => { + axios + .get(`http://${this.ip}:${this.port}/api/v2/shots/clearIfLive/${shotID}`) + .then((response) => { + if (response.data.succeed == true) resolve(); + else reject(); + }) + .catch((error) => { + console.log(error); + reject(); + }); + }); + } + + clearLayer(layerID: number): Promise { + return new Promise((resolve, reject) => { + axios + .get(`http://${this.ip}:${this.port}/api/v2/layers/clear/${layerID}`) + .then((response) => { + if (response.data.succeed == true) resolve(); + else reject(); + }) + .catch((error) => { + console.log(error); + reject(); + }); + }); + } + + go(): Promise { + return new Promise((resolve, reject) => { + console.log(`http://${this.ip}:${this.port}/api/v2/document/go`); + axios + .get(`http://${this.ip}:${this.port}/api/v2/document/go`) + .then((response) => { + if (response.data.succeed == true) resolve(); + else reject(); + }) + .catch((error) => { + console.log(error); + reject(); + }); + }); + } + + multiShot( + layer1Shot: number, + layer2Shot: number, + layer3Shot: number, + layer4Shot: number, + layer5Shot: number + ): Promise { + return new Promise((resolve, reject) => { + axios + .get( + `http://${this.ip}:${this + .port}/api/v2/shots/multi/${layer1Shot}/${layer2Shot}/${layer3Shot}/${layer4Shot}/${layer5Shot}` + ) + .then((response) => { + if (response.data.succeed == true) resolve(response.data); + else reject(response.data); + }) + .catch((error) => { + console.log(error); + reject({ succeed: false, error: 'Unable to reach Wirecast-Bridge' }); + }); + }); + } + + setBroadcasting(state: boolean): Promise { + return new Promise((resolve, reject) => { + axios + .get(`http://${this.ip}:${this.port}/api/v2/document/broadcasting/${state}`) + .then((response) => { + if (response.data.succeed == true) resolve(); + else reject(); + }) + .catch((error) => { + console.log(error); + reject('Unable to reach Wirecast-Bridge'); + }); + }); + } + setRecording(state: boolean): Promise { + return new Promise((resolve, reject) => { + axios + .get(`http://${this.ip}:${this.port}/api/v2/document/recording/${state}`) + .then((response) => { + if (response.data.succeed == true) resolve(); + else reject(); + }) + .catch((error) => { + console.log(error); + reject('Unable to reach Wirecast-Bridge'); + }); + }); + } + setAutoLive(state: boolean): Promise { + return new Promise((resolve, reject) => { + axios + .get(`http://${this.ip}:${this.port}/api/v2/document/autolive/${state}`) + .then((response) => { + if (response.data.succeed == true) resolve(); + else reject(); + }) + .catch((error) => { + console.log(error); + reject('Unable to reach Wirecast-Bridge'); + }); + }); + } + setTransitionSpeed(speed: string): Promise { + return new Promise((resolve, reject) => { + axios + .get(`http://${this.ip}:${this.port}/api/v2/document/transitionspeed/${speed}`) + .then((response) => { + if (response.data.succeed == true) resolve(); + else reject(); + }) + .catch((error) => { + console.log(error); + reject('Unable to reach Wirecast-Bridge'); + }); + }); + } + + getShots(callback: (shots: Shots) => void) { + if (this.ip != undefined && this.port != undefined) { + axios + .get(`http://${this.ip}:${this.port}/api/v2/shots/get`) + .then((response) => { + if (response.data != undefined && response.data.succeed == true) { + this.shots = response.data.shots; + callback(this.shots); + } + }) + .catch(() => {}); + } + } + + getShotsList(layerIndex?: number, callback?: (shots: { id: number; name: string }[]) => void) { + this.getShots(() => { + var list: { id: number; name: string }[] = []; + if (layerIndex == undefined) + for (var layer in this.shots) { + for (var shot in this.shots[layer].shots) { + list.push(this.shots[layer].shots[shot]); + } + } + else { + for (var shot in this.shots[layerIndex].shots) { + list.push(this.shots[layerIndex].shots[shot]); + } + } + + callback(list); + }); + } + + getLayers(callback: (layers: Layers) => void) { + axios + .get(`http://${this.ip}:${this.port}/api/v2/layers/get`) + .then((response) => { + if (response.data != undefined && response.data.succeed == true) { + this.layers = response.data.layers; + callback(this.layers); + } + }) + .catch(() => {}); + } + + getLayersList(callback: (layers: { id: number; name: string }[]) => void) { + this.getLayers(() => { + var list: { id: number; name: string }[] = []; + for (var layer in this.layers) { + list.push(this.layers[layer]); + } + callback(list); + }); + } +} + +interface Shots { + [index: string]: { + shots: { + [index: string]: { + name: string; + id: number; + }; + }; + }; +} + +interface Layers { + [index: string]: { + name: string; + id: number; + }; +} diff --git a/Backend/src/Integrations/buildin/wirecast/actions/clearIfLive.ts b/Backend/src/Integrations/buildin/wirecast/actions/clearIfLive.ts new file mode 100644 index 0000000..952d752 --- /dev/null +++ b/Backend/src/Integrations/buildin/wirecast/actions/clearIfLive.ts @@ -0,0 +1,161 @@ +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +module.exports = (ActionAPI: ActionAPI) => { + ActionAPI.handle((properties: Properties, status) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var shotID = properties.shotID != undefined && properties.shotID.length > 0 ? properties.shotID : 'none'; + + if (connectionID != 'none') { + if (shotID != 'none') { + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + if (connection && connection.instance) { + connection.instance + .clearShotIfLive(shotID) + .then(() => { + status('Shot has been clear if live', 'info'); + }) + .catch((error) => { + status(error, 'error'); + }); + } + } else status('No shot specified', 'error'); + } else status('No connection specified', 'error'); + }); + + function filterValues(values: { id: string; text: string }[]): { id: string; text: string }[] { + var newValues = [ + { id: 'none', text: 'None' } + ]; + for (let i = 0; i < values.length; i++) if (values[i].text != 'Clear Layer') newValues.push(values[i]); + return newValues; + } + + ActionAPI.onOpenEditor((EditorAPI: EditorAPI, properties: Properties) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var shotID = properties.shotID != undefined ? properties.shotID : 'none'; + + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'Connection', + type: 'connection', + connectionType: 'wirecast-bridge', + value: connectionID + }; + + var shotsField: EditorAPI_Field = { + id: 'shotID', + name: 'Shot', + type: 'select', + values: [], + value: shotID + }; + + if (connectionID != 'none') + shotsField.values = [ + { id: '%loading%', text: 'Please wait for shots dropdown to load' } + ]; + + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var shotID = properties.shotID != undefined ? properties.shotID : 'none'; + + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'Connection', + type: 'connection', + connectionType: 'wirecast-bridge', + value: connectionID + }; + + var shotsField: EditorAPI_Field = { + id: 'shotID', + name: 'Shot', + type: 'select', + values: [], + value: shotID + }; + + if (connectionID != 'none') { + shotsField.values = [ + { id: '%loading%', text: 'Please wait for shots dropdown to load' } + ]; + } + + var sendFields = () => { + shotsField.value = shotID; + + EditorAPI.setFields([ + connectionField, + shotsField + ]); + }; + + if (connection != undefined && connection.instance != undefined) { + connection.instance.getShotsList(null, (shots) => { + shotsField.values = filterValues( + shots.map((shot) => { + return { id: shot.id, text: shot.name }; + }) + ); + sendFields(); + }); + } else sendFields(); + + EditorAPI.onFieldChanges((fields) => { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + + connectionField.value = fieldObject.connectionID; + shotsField.value = fieldObject.shotID; + + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID, shotID: fieldObject.shotID }); + + if (connectionID != fieldObject.connectionID) { + connectionID = fieldObject.connectionID; + + if (fieldObject.connectionID != 'none') { + shotsField.values = [ + { id: '%loading%', text: 'Please wait for shots dropdown to load' } + ]; + EditorAPI.setFields([ + connectionField, + shotsField + ]); + + connection = ActionAPI.getConnection('wirecast-bridge', fieldObject.connectionID); + + if (connection && connection.instance) { + connection.instance.getShotsList(null, (shots) => { + shotsField.values = filterValues( + shots.map((shot) => { + return { id: shot.id, text: shot.name }; + }) + ); + + sendFields(); + }); + } + } else { + shotsField.values = []; + + sendFields(); + } + } + }); + + var sendFields = () => { + EditorAPI.setFields([ + connectionField, + shotsField + ]); + }; + }); +}; + +interface Properties { + connectionID: string; + shotID: string; +} diff --git a/Backend/src/Integrations/buildin/wirecast/actions/clearLayer.ts b/Backend/src/Integrations/buildin/wirecast/actions/clearLayer.ts new file mode 100644 index 0000000..aa33573 --- /dev/null +++ b/Backend/src/Integrations/buildin/wirecast/actions/clearLayer.ts @@ -0,0 +1,108 @@ +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +module.exports = (ActionAPI: ActionAPI) => { + ActionAPI.handle((properties: Properties, status) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var layerID = properties.layerID != undefined && properties.layerID.length > 0 ? properties.layerID : 'none'; + + if (connectionID != 'none' && connectionID.length > 0) { + if (layerID != 'none' && layerID.length > 0) { + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + if (connection && connection.instance) { + connection.instance + .clearLayer(layerID) + .then(() => { + status('Shot has been published', 'info'); + }) + .catch((error) => { + status(error, 'error'); + }); + } + } else status('No layer specified', 'error'); + } else status('No connection specified', 'error'); + }); + + function filterValues(values: { id: string; text: string }[]): { id: string; text: string }[] { + var newValues = [ + { id: 'none', text: 'None' } + ]; + for (let i = 0; i < values.length; i++) if (values[i].text != 'Clear Layer') newValues.push(values[i]); + return newValues; + } + + ActionAPI.onOpenEditor((EditorAPI: EditorAPI, properties: Properties) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var layerID = properties.layerID != undefined ? properties.layerID : 'none'; + + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'Connection', + type: 'connection', + connectionType: 'wirecast-bridge', + value: connectionID + }; + + var layerField: EditorAPI_Field = { + id: 'layerID', + name: 'Layer', + type: 'select', + values: [], + value: layerID + }; + + var setFields = () => { + EditorAPI.setFields([ + connectionField, + layerField + ]); + }; + + if (connection != undefined && connection.instance != undefined) { + connection.instance.getLayersList((layers) => { + layerField.values = filterValues( + layers.map((layer) => { + return { id: layer.id, text: layer.name }; + }) + ); + setFields(); + }); + } else setFields(); + + EditorAPI.onFieldChanges((fields) => { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + + connectionField.value = fieldObject.connectionID; + layerField.value = fieldObject.layerID; + + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID, layerID: fieldObject.layerID }); + + if (connectionID != fieldObject.connectionID) { + if (fieldObject.connectionID != 'none') { + connection = ActionAPI.getConnection('wirecast-bridge', fieldObject.connectionID); + if (connection != undefined && connection.instance != undefined) { + connection.instance.getLayersList((layers) => { + layerField.values = filterValues( + layers.map((layer) => { + return { id: layer.id, text: layer.name }; + }) + ); + setFields(); + }); + } else setFields(); + } else { + layerField.values = []; + connectionID = 'none'; + setFields(); + } + } + }); + }); +}; + +interface Properties { + connectionID: string; + layerID: string; +} diff --git a/Backend/src/Integrations/buildin/wirecast/actions/go.ts b/Backend/src/Integrations/buildin/wirecast/actions/go.ts new file mode 100644 index 0000000..73712d7 --- /dev/null +++ b/Backend/src/Integrations/buildin/wirecast/actions/go.ts @@ -0,0 +1,48 @@ +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +module.exports = (ActionAPI: ActionAPI) => { + ActionAPI.handle((properties: Properties, status) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + + if (connectionID != 'none' && connectionID.length > 0) { + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + if (connection && connection.instance) { + connection.instance + .go() + .then(() => { + status('Go!', 'info'); + }) + .catch((error) => { + status(error, 'error'); + }); + } + } else status('No connection specified', 'error'); + }); + + ActionAPI.onOpenEditor((EditorAPI: EditorAPI, properties: Properties) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'Connection', + type: 'connection', + connectionType: 'wirecast-bridge', + value: connectionID + }; + + EditorAPI.onFieldChanges((fields) => { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID }); + }); + + EditorAPI.setFields([ + connectionField + ]); + }); +}; + +interface Properties { + connectionID: string; +} diff --git a/Backend/src/Integrations/buildin/wirecast/actions/multiShot.ts b/Backend/src/Integrations/buildin/wirecast/actions/multiShot.ts new file mode 100644 index 0000000..b59bb4d --- /dev/null +++ b/Backend/src/Integrations/buildin/wirecast/actions/multiShot.ts @@ -0,0 +1,146 @@ +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; +import { WirecastConnection } from '../WirecastConnection'; + +module.exports = (ActionAPI: ActionAPI) => { + ActionAPI.handle((properties: Properties, status) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var layer1 = properties.layer1 != undefined && properties.layer1.length > 0 ? properties.layer1 : 'ignore'; + var layer2 = properties.layer2 != undefined && properties.layer2.length > 0 ? properties.layer2 : 'ignore'; + var layer3 = properties.layer3 != undefined && properties.layer3.length > 0 ? properties.layer3 : 'ignore'; + var layer4 = properties.layer4 != undefined && properties.layer4.length > 0 ? properties.layer4 : 'ignore'; + var layer5 = properties.layer5 != undefined && properties.layer5.length > 0 ? properties.layer5 : 'ignore'; + + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + if (connection && connection.instance) { + connection.instance + .multiShot(layer1, layer2, layer3, layer4, layer5) + .then(() => { + status('Shots has been published', 'info'); + }) + .catch((error) => { + status(error, 'error'); + }); + } + } else status('No connection specified', 'error'); + }); + + function filterValues(values: { id: string; text: string }[]): { id: string; text: string }[] { + var newValues = [ + { id: 'ignore', text: 'Ignore' }, + { id: 'clear', text: 'Clear Layer' } + ]; + for (let i = 0; i < values.length; i++) if (values[i].text != 'Clear Layer') newValues.push(values[i]); + return newValues; + } + + ActionAPI.onOpenEditor((EditorAPI: EditorAPI, properties: Properties) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var layerValues = { + '1': properties.layer1 != undefined && properties.layer1.length > 0 ? properties.layer1 : 'ignore', + '2': properties.layer2 != undefined && properties.layer2.length > 0 ? properties.layer2 : 'ignore', + '3': properties.layer3 != undefined && properties.layer3.length > 0 ? properties.layer3 : 'ignore', + '4': properties.layer4 != undefined && properties.layer4.length > 0 ? properties.layer4 : 'ignore', + '5': properties.layer5 != undefined && properties.layer5.length > 0 ? properties.layer5 : 'ignore' + }; + + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'Connection', + type: 'connection', + connectionType: 'wirecast-bridge', + value: connectionID + }; + + var fields: { + '1'?: EditorAPI_Field; + '2'?: EditorAPI_Field; + '3'?: EditorAPI_Field; + '4'?: EditorAPI_Field; + '5'?: EditorAPI_Field; + } = {}; + for (let i = 1; i < 6; i++) { + fields[i] = { + id: `layer${i}`, + name: `Layer ${i}`, + type: 'select', + values: [], + value: layerValues[i] + }; + } + + var setFields = () => { + EditorAPI.setFields([ + connectionField, + fields[1], + fields[2], + fields[3], + fields[4], + fields[5] + ]); + }; + + function updateLayerFields() { + if (connection && connection.instance) { + var instance: WirecastConnection = connection.instance; + instance.getShots((shots) => { + for (var layer in shots) { + var shotList: { id: string; text: string }[] = []; + for (var shotIndex in shots[layer].shots) { + var shot = shots[layer].shots[shotIndex]; + shotList.push({ id: String(shot.id), text: shot.name }); + } + + fields[layer].value = layerValues[layer]; + fields[layer].values = filterValues(shotList); + } + + setFields(); + }); + } else setFields(); + } + + EditorAPI.onFieldChanges((fields) => { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + var toSave = { + connectionID: fieldObject.connectionID + }; + connectionField.value = fieldObject.connectionID; + for (let i = 1; i < 6; i++) { + fields[i].value = fieldObject[`layer${i}`]; + toSave[`layer${i}`] = fieldObject[`layer${i}`]; + } + EditorAPI.saveProperties(toSave); + + if (connectionID != fieldObject.connectionID) { + connectionID = fieldObject.connectionID; + if (fieldObject.connectionID != 'none') { + connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + updateLayerFields(); + } else { + for (let i = 1; i < 6; i++) { + fields[i].values = []; + } + setFields(); + } + } + }); + + updateLayerFields(); + }); +}; + +interface Properties { + connectionID: string; + layer1: string; + layer2: string; + layer3: string; + layer4: string; + layer5: string; +} diff --git a/Backend/src/Integrations/buildin/wirecast/actions/setAutoLive.ts b/Backend/src/Integrations/buildin/wirecast/actions/setAutoLive.ts new file mode 100644 index 0000000..6100f5d --- /dev/null +++ b/Backend/src/Integrations/buildin/wirecast/actions/setAutoLive.ts @@ -0,0 +1,87 @@ +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +module.exports = (ActionAPI: ActionAPI) => { + ActionAPI.handle((properties: Properties, status, deck) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + + var state = properties.state != undefined && properties.state.length > 0 ? properties.state : 'off'; + + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + + if (connection && connection.instance) { + connection.instance + .setAutoLive(state == 'on') + .then(() => status(`Autolive state has been set to ${state}`)) + .catch((error) => status(error, 'error')); + } + } else status('No connection specfied', 'error'); + }); + + ActionAPI.onOpenEditor((EditorAPI: EditorAPI, properties: Properties) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var state = properties.state != undefined && properties.state.length > 0 ? properties.state : 'off'; + + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'Connection', + value: connectionID, + type: 'connection', + connectionType: 'wirecast-bridge' + }; + var stateField: EditorAPI_Field = { + id: 'state', + name: 'State', + type: 'select', + value: state, + values: [] + }; + + if (connectionID != 'none') + stateField.values = [ + { id: 'on', text: 'AutoLive On' }, + { id: 'off', text: 'AutoLive Off' } + ]; + EditorAPI.setFields([ + connectionField, + stateField + ]); + + EditorAPI.onFieldChanges((fields) => { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + + connectionField.value = fieldObject.connectionID; + stateField.value = fieldObject.state; + + if (connectionID != fieldObject.connectionID) { + connectionID = fieldObject.connectionID; + + stateField.values = + connectionID != 'none' + ? [ + { id: 'on', text: 'On' }, + { id: 'off', text: 'Off' } + ] + : []; + + EditorAPI.setFields([ + connectionField, + stateField + ]); + } + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID, state: fieldObject.state }); + }); + }); +}; + +interface Properties { + connectionID: string; + state: 'on' | 'off'; +} diff --git a/Backend/src/Integrations/buildin/wirecast/actions/setBroadcasting.ts b/Backend/src/Integrations/buildin/wirecast/actions/setBroadcasting.ts new file mode 100644 index 0000000..441cb22 --- /dev/null +++ b/Backend/src/Integrations/buildin/wirecast/actions/setBroadcasting.ts @@ -0,0 +1,87 @@ +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +module.exports = (ActionAPI: ActionAPI) => { + ActionAPI.handle((properties: Properties, status, deck) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + + var state = properties.state != undefined && properties.state.length > 0 ? properties.state : 'offline'; + + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + + if (connection && connection.instance) { + connection.instance + .setBroadcasting(state == 'live') + .then(() => status(`Broadcasting state has been set to ${state}`)) + .catch((error) => status(error, 'error')); + } + } else status('No connection specfied', 'error'); + }); + + ActionAPI.onOpenEditor((EditorAPI: EditorAPI, properties: Properties) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var state = properties.state != undefined && properties.state.length > 0 ? properties.state : 'offline'; + + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'Connection', + value: connectionID, + type: 'connection', + connectionType: 'wirecast-bridge' + }; + var stateField: EditorAPI_Field = { + id: 'state', + name: 'State', + type: 'select', + value: state, + values: [] + }; + + if (connectionID != 'none') + stateField.values = [ + { id: 'live', text: 'Live' }, + { id: 'offline', text: 'Offline' } + ]; + EditorAPI.setFields([ + connectionField, + stateField + ]); + + EditorAPI.onFieldChanges((fields) => { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + + connectionField.value = fieldObject.connectionID; + stateField.value = fieldObject.state; + + if (connectionID != fieldObject.connectionID) { + connectionID = fieldObject.connectionID; + + stateField.values = + connectionID != 'none' + ? [ + { id: 'live', text: 'Live' }, + { id: 'offline', text: 'Offline' } + ] + : []; + + EditorAPI.setFields([ + connectionField, + stateField + ]); + } + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID, state: fieldObject.state }); + }); + }); +}; + +interface Properties { + connectionID: string; + state: 'live' | 'offline'; +} diff --git a/Backend/src/Integrations/buildin/wirecast/actions/setLiveByName.ts b/Backend/src/Integrations/buildin/wirecast/actions/setLiveByName.ts new file mode 100644 index 0000000..2efbe61 --- /dev/null +++ b/Backend/src/Integrations/buildin/wirecast/actions/setLiveByName.ts @@ -0,0 +1,123 @@ +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +module.exports = (ActionAPI: ActionAPI) => { + ActionAPI.handle((properties: Properties, status) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var shotID = properties.shotID != undefined && properties.shotID.length > 0 ? properties.shotID : 'none'; + + if (connectionID != 'none') { + if (shotID != 'none') { + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + if (connection && connection.instance) { + connection.instance + .setShotLiveByID(shotID) + .then(() => { + status('Shot has been published', 'info'); + }) + .catch((error) => { + status(error, 'error'); + }); + } + } else status('No shot specified', 'error'); + } else status('No connection specified', 'error'); + }); + + function filterValues(values: { id: string; text: string }[]): { id: string; text: string }[] { + var newValues = [ + { id: 'none', text: 'None' } + ]; + for (let i = 0; i < values.length; i++) if (values[i].text != 'Clear Layer') newValues.push(values[i]); + return newValues; + } + + ActionAPI.onOpenEditor((EditorAPI: EditorAPI, properties: Properties) => { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var shotID = properties.shotID != undefined ? properties.shotID : 'none'; + + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'Connection', + type: 'connection', + connectionType: 'wirecast-bridge', + value: connectionID + }; + + var shotsField: EditorAPI_Field = { + id: 'shotID', + name: 'Shot', + type: 'select', + values: [], + value: shotID + }; + + var fields = [ + connectionField + ]; + if (connectionID != 'none') { + shotsField.values = [ + { id: '%loading%', text: 'Please wait for shots dropdown to load' } + ]; + } + EditorAPI.setFields(fields); + + var sendFields = () => { + shotsField.value = shotID; + + EditorAPI.setFields([ + connectionField, + shotsField + ]); + }; + + var updateShots = () => { + if (connection != undefined && connection.instance != undefined) { + connection.instance.getShotsList(null, (shots) => { + shotsField.values = filterValues( + shots.map((shot) => { + return { id: shot.id, text: shot.name }; + }) + ); + sendFields(); + }); + } else sendFields(); + }; + updateShots(); + + EditorAPI.onFieldChanges((fields) => { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + + connectionField.value = fieldObject.connectionID; + shotsField.value = fieldObject.shotID; + + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID, shotID: fieldObject.shotID }); + + if (connectionID != fieldObject.connectionID) { + connectionID = fieldObject.connectionID; + + shotsField.values = [ + { id: '%loading%', text: 'Please wait for shots dropdown to load' } + ]; + EditorAPI.setFields([ + connectionField, + shotsField + ]); + + if (connectionID != 'none') { + connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + updateShots(); + } else { + shotsField.values = []; + sendFields(); + } + } + }); + }); +}; + +interface Properties { + connectionID: string; + shotID: string; +} diff --git a/Backend/src/Integrations/buildin/wirecast/actions/setRecording.ts b/Backend/src/Integrations/buildin/wirecast/actions/setRecording.ts new file mode 100644 index 0000000..71e4f47 --- /dev/null +++ b/Backend/src/Integrations/buildin/wirecast/actions/setRecording.ts @@ -0,0 +1,87 @@ +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +module.exports = (ActionAPI: ActionAPI) => { + ActionAPI.handle((properties: Properties, status, deck) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + + var state = properties.state != undefined && properties.state.length > 0 ? properties.state : 'offline'; + + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + + if (connection && connection.instance) { + connection.instance + .setRecording(state == 'on') + .then(() => status(`Recording state has been set to ${state}`)) + .catch((error) => status(error, 'error')); + } + } else status('No connection specfied', 'error'); + }); + + ActionAPI.onOpenEditor((EditorAPI: EditorAPI, properties: Properties) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var state = properties.state != undefined && properties.state.length > 0 ? properties.state : 'offline'; + + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'Connection', + value: connectionID, + type: 'connection', + connectionType: 'wirecast-bridge' + }; + var stateField: EditorAPI_Field = { + id: 'state', + name: 'State', + type: 'select', + value: state, + values: [] + }; + + if (connectionID != 'none') + stateField.values = [ + { id: 'on', text: 'On' }, + { id: 'off', text: 'Off' } + ]; + EditorAPI.setFields([ + connectionField, + stateField + ]); + + EditorAPI.onFieldChanges((fields) => { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + + connectionField.value = fieldObject.connectionID; + stateField.value = fieldObject.state; + + if (connectionID != fieldObject.connectionID) { + connectionID = fieldObject.connectionID; + + stateField.values = + connectionID != 'none' + ? [ + { id: 'on', text: 'On' }, + { id: 'off', text: 'Off' } + ] + : []; + + EditorAPI.setFields([ + connectionField, + stateField + ]); + } + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID, state: fieldObject.state }); + }); + }); +}; + +interface Properties { + connectionID: string; + state: 'on' | 'off'; +} diff --git a/Backend/src/Integrations/buildin/wirecast/actions/transitionSpeed.ts b/Backend/src/Integrations/buildin/wirecast/actions/transitionSpeed.ts new file mode 100644 index 0000000..90a1310 --- /dev/null +++ b/Backend/src/Integrations/buildin/wirecast/actions/transitionSpeed.ts @@ -0,0 +1,93 @@ +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +module.exports = (ActionAPI: ActionAPI) => { + ActionAPI.handle((properties: Properties, status, deck) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + + var speed = properties.speed != undefined && properties.speed.length > 0 ? properties.speed : 'offline'; + + if (connectionID != 'none') { + var connection = ActionAPI.getConnection('wirecast-bridge', connectionID); + + if (connection && connection.instance) { + connection.instance + .setTransitionSpeed(speed) + .then(() => status(`Transition speed has been set to ${speed}`)) + .catch((error) => status(error, 'error')); + } + } else status('No connection specfied', 'error'); + }); + + ActionAPI.onOpenEditor((EditorAPI: EditorAPI, properties: Properties) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var speed = properties.speed != undefined && properties.speed.length > 0 ? properties.speed : 'offline'; + + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'Connection', + value: connectionID, + type: 'connection', + connectionType: 'wirecast-bridge' + }; + var speedField: EditorAPI_Field = { + id: 'speed', + name: 'Speed', + type: 'select', + value: speed, + values: [] + }; + + if (connectionID != 'none') + speedField.values = [ + { id: 'slowest', text: 'Slowest' }, + { id: 'slow', text: 'Slow' }, + { id: 'normal', text: 'Normal' }, + { id: 'faster', text: 'Faster' }, + { id: 'fastest', text: 'Fastest' } + ]; + EditorAPI.setFields([ + connectionField, + speedField + ]); + + EditorAPI.onFieldChanges((fields) => { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + + connectionField.value = fieldObject.connectionID; + speedField.value = fieldObject.speed; + + if (connectionID != fieldObject.connectionID) { + connectionID = fieldObject.connectionID; + + speedField.values = + connectionID != 'none' + ? [ + { id: 'slowest', text: 'Slowest' }, + { id: 'slow', text: 'Slow' }, + { id: 'normal', text: 'Normal' }, + { id: 'faster', text: 'Faster' }, + { id: 'fastest', text: 'Fastest' } + ] + : []; + + EditorAPI.setFields([ + connectionField, + speedField + ]); + } + EditorAPI.saveProperties({ connectionID: fieldObject.connectionID, speed: fieldObject.speed }); + }); + }); +}; + +interface Properties { + connectionID: string; + speed: 'on' | 'off'; +} diff --git a/Backend/src/Integrations/buildin/wirecast/integration.ts b/Backend/src/Integrations/buildin/wirecast/integration.ts new file mode 100644 index 0000000..7310ce2 --- /dev/null +++ b/Backend/src/Integrations/buildin/wirecast/integration.ts @@ -0,0 +1,63 @@ +import { Integration } from '../../IntegrationsManager'; + +var Integration: Integration = { + name: 'Wirecast', + description: 'Control your Wirecast via our Wirecast-Bridge application.', + main: require('./wirecast'), + actions: [ + { + id: 'go', + name: 'Go' + }, + { + id: 'setLiveByName', + name: 'Set shot live' + }, + { + id: 'clearIfLive', + name: 'Clear shot if live' + }, + { + id: 'transitionSpeed', + name: 'Set transition speed' + }, + { + id: 'clearLayer', + name: 'Clear a layer' + }, + { + id: 'multiShot', + name: 'Multi shot' + }, + { + id: 'setBroadcasting', + name: 'Set broadcasting state' + }, + { + id: 'setRecording', + name: 'Set recording state' + }, + { + id: 'setAutoLive', + name: 'Set autolive state' + } + ], + connections: [ + { + name: 'Wirecast-Bridge', + type: 'wirecast-bridge', + message: + "This connection requires the 'Undecked Wirecast Bridge' tool to be running on the same machine as Wirecast. This tool allows Undecked to control various Wirecast features over the network.", + link: { + address: 'http://www.morphix.productions', + title: 'Get the Wirecast Bridge' + }, + fields: [ + { id: 'ip', name: 'IP Address', type: 'text' }, + { id: 'port', name: 'Port', type: 'number', value: 6060 } + ] + } + ] +}; + +module.exports = Integration; diff --git a/Backend/src/Integrations/buildin/wirecast/wirecast.ts b/Backend/src/Integrations/buildin/wirecast/wirecast.ts new file mode 100644 index 0000000..50f8aab --- /dev/null +++ b/Backend/src/Integrations/buildin/wirecast/wirecast.ts @@ -0,0 +1,31 @@ +import { ConnectionValidatorAPI, IntegrationAPI } from '../../IntegrationApi'; +import { default as axios } from 'axios'; +import { WirecastConnection } from './WirecastConnection'; + +//TODO: --------------- TO IMPLEMENT --------------- +//TODO: Transition speed + +module.exports = (api: IntegrationAPI) => { + api.registerAction('setLiveByName', require('./actions/setLiveByName')); + api.registerAction('clearLayer', require('./actions/clearLayer')); + api.registerAction('multiShot', require('./actions/multiShot')); + api.registerAction('clearIfLive', require('./actions/clearIfLive')); + api.registerAction('transitionSpeed', require('./actions/transitionSpeed')); + api.registerAction('go', require('./actions/go')); + api.registerAction('setBroadcasting', require('./actions/setBroadcasting')); + api.registerAction('setRecording', require('./actions/setRecording')); + api.registerAction('setAutoLive', require('./actions/setAutoLive')); + + api.registerConnectionValidator('wirecast-bridge', (ValidatorAPI: ConnectionValidatorAPI) => { + var instance = ValidatorAPI.instance; + if (instance == undefined) { + instance = new WirecastConnection(); + } + instance.setHost(ValidatorAPI.properties.ip, ValidatorAPI.properties.port); + + ValidatorAPI.setInstance(instance); + instance.ping((state: boolean) => { + ValidatorAPI.callback(state, state ? null : 'Unable to reach Wirecast-Bridge'); + }); + }); +}; diff --git a/Backend/src/Integrations/buildin/zoom/actions/enterExitFullscreen.ts b/Backend/src/Integrations/buildin/zoom/actions/enterExitFullscreen.ts new file mode 100644 index 0000000..d6ec5cb --- /dev/null +++ b/Backend/src/Integrations/buildin/zoom/actions/enterExitFullscreen.ts @@ -0,0 +1,50 @@ +import axios from 'axios'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties: ZoomProperties, status) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + + if (connectionID != 'none') { + var connection = actionAPI.getConnection('zoom-bridge', connectionID); + + axios + .get(`http://${connection.properties.ip}:${connection.properties.port}/v1/fullscreen/toggle`) + .then(() => { + status('Action completed'); + }) + .catch(() => { + status('Unable to reach Zoom-Bridge'); + }); + } else status('No connection specified', 'error'); + }); + + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: ZoomProperties) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'zoom-bridge', + value: connectionID + }; + editorAPI.onFieldChanges((fields) => { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; + +interface ZoomProperties { + connectionID: string; +} diff --git a/Backend/src/Integrations/buildin/zoom/actions/muteEveryoneExceptSelf.ts b/Backend/src/Integrations/buildin/zoom/actions/muteEveryoneExceptSelf.ts new file mode 100644 index 0000000..5af2a7d --- /dev/null +++ b/Backend/src/Integrations/buildin/zoom/actions/muteEveryoneExceptSelf.ts @@ -0,0 +1,50 @@ +import axios from 'axios'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties: ZoomProperties, status) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + + if (connectionID != 'none') { + var connection = actionAPI.getConnection('zoom-bridge', connectionID); + + axios + .get(`http://${connection.properties.ip}:${connection.properties.port}/v1/actions/muteAllExpectSelf`) + .then(() => { + status('Action completed'); + }) + .catch(() => { + status('Unable to reach Zoom-Bridge'); + }); + } else status('No connection specified', 'error'); + }); + + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: ZoomProperties) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'zoom-bridge', + value: connectionID + }; + editorAPI.onFieldChanges((fields) => { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; + +interface ZoomProperties { + connectionID: string; +} diff --git a/Backend/src/Integrations/buildin/zoom/actions/muteUnmuteAudio.ts b/Backend/src/Integrations/buildin/zoom/actions/muteUnmuteAudio.ts new file mode 100644 index 0000000..6f40b12 --- /dev/null +++ b/Backend/src/Integrations/buildin/zoom/actions/muteUnmuteAudio.ts @@ -0,0 +1,50 @@ +import axios from 'axios'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties: ZoomProperties, status) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + + if (connectionID != 'none') { + var connection = actionAPI.getConnection('zoom-bridge', connectionID); + + axios + .get(`http://${connection.properties.ip}:${connection.properties.port}/v1/mic/toggle`) + .then(() => { + status('Action completed'); + }) + .catch(() => { + status('Unable to reach Zoom-Bridge'); + }); + } else status('No connection specified', 'error'); + }); + + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: ZoomProperties) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'zoom-bridge', + value: connectionID + }; + editorAPI.onFieldChanges((fields) => { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; + +interface ZoomProperties { + connectionID: string; +} diff --git a/Backend/src/Integrations/buildin/zoom/actions/screenshot.ts b/Backend/src/Integrations/buildin/zoom/actions/screenshot.ts new file mode 100644 index 0000000..2af01f6 --- /dev/null +++ b/Backend/src/Integrations/buildin/zoom/actions/screenshot.ts @@ -0,0 +1,50 @@ +import axios from 'axios'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties: ZoomProperties, status) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + + if (connectionID != 'none') { + var connection = actionAPI.getConnection('zoom-bridge', connectionID); + + axios + .get(`http://${connection.properties.ip}:${connection.properties.port}/v1/actions/screenshot`) + .then(() => { + status('Action completed'); + }) + .catch(() => { + status('Unable to reach Zoom-Bridge'); + }); + } else status('No connection specified', 'error'); + }); + + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: ZoomProperties) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'zoom-bridge', + value: connectionID + }; + editorAPI.onFieldChanges((fields) => { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; + +interface ZoomProperties { + connectionID: string; +} diff --git a/Backend/src/Integrations/buildin/zoom/actions/startStopScreenshare.ts b/Backend/src/Integrations/buildin/zoom/actions/startStopScreenshare.ts new file mode 100644 index 0000000..3a6763c --- /dev/null +++ b/Backend/src/Integrations/buildin/zoom/actions/startStopScreenshare.ts @@ -0,0 +1,50 @@ +import axios from 'axios'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties: ZoomProperties, status) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + + if (connectionID != 'none') { + var connection = actionAPI.getConnection('zoom-bridge', connectionID); + + axios + .get(`http://${connection.properties.ip}:${connection.properties.port}/v1/screenshare/toggle`) + .then(() => { + status('Action completed'); + }) + .catch(() => { + status('Unable to reach Zoom-Bridge'); + }); + } else status('No connection specified', 'error'); + }); + + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: ZoomProperties) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'zoom-bridge', + value: connectionID + }; + editorAPI.onFieldChanges((fields) => { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; + +interface ZoomProperties { + connectionID: string; +} diff --git a/Backend/src/Integrations/buildin/zoom/actions/startStopVideo.ts b/Backend/src/Integrations/buildin/zoom/actions/startStopVideo.ts new file mode 100644 index 0000000..de2ad3a --- /dev/null +++ b/Backend/src/Integrations/buildin/zoom/actions/startStopVideo.ts @@ -0,0 +1,50 @@ +import axios from 'axios'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties: ZoomProperties, status) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + + if (connectionID != 'none') { + var connection = actionAPI.getConnection('zoom-bridge', connectionID); + + axios + .get(`http://${connection.properties.ip}:${connection.properties.port}/v1/cam/toggle`) + .then(() => { + status('Action completed'); + }) + .catch(() => { + status('Unable to reach Zoom-Bridge'); + }); + } else status('No connection specified', 'error'); + }); + + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: ZoomProperties) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'zoom-bridge', + value: connectionID + }; + editorAPI.onFieldChanges((fields) => { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; + +interface ZoomProperties { + connectionID: string; +} diff --git a/Backend/src/Integrations/buildin/zoom/actions/switchToGalleryView.ts b/Backend/src/Integrations/buildin/zoom/actions/switchToGalleryView.ts new file mode 100644 index 0000000..8f4433c --- /dev/null +++ b/Backend/src/Integrations/buildin/zoom/actions/switchToGalleryView.ts @@ -0,0 +1,50 @@ +import axios from 'axios'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties: ZoomProperties, status) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + + if (connectionID != 'none') { + var connection = actionAPI.getConnection('zoom-bridge', connectionID); + + axios + .get(`http://${connection.properties.ip}:${connection.properties.port}/v1/view/gallery`) + .then(() => { + status('Action completed'); + }) + .catch(() => { + status('Unable to reach Zoom-Bridge'); + }); + } else status('No connection specified', 'error'); + }); + + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: ZoomProperties) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'zoom-bridge', + value: connectionID + }; + editorAPI.onFieldChanges((fields) => { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; + +interface ZoomProperties { + connectionID: string; +} diff --git a/Backend/src/Integrations/buildin/zoom/actions/switchToSpeakerView.ts b/Backend/src/Integrations/buildin/zoom/actions/switchToSpeakerView.ts new file mode 100644 index 0000000..4195f98 --- /dev/null +++ b/Backend/src/Integrations/buildin/zoom/actions/switchToSpeakerView.ts @@ -0,0 +1,50 @@ +import axios from 'axios'; +import { ActionAPI } from '../../../ActionAPI'; +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; + +module.exports = (actionAPI: ActionAPI) => { + actionAPI.handle((properties: ZoomProperties, status) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + + if (connectionID != 'none') { + var connection = actionAPI.getConnection('zoom-bridge', connectionID); + + axios + .get(`http://${connection.properties.ip}:${connection.properties.port}/v1/view/speaker`) + .then(() => { + status('Action completed'); + }) + .catch(() => { + status('Unable to reach Zoom-Bridge'); + }); + } else status('No connection specified', 'error'); + }); + + actionAPI.onOpenEditor((editorAPI: EditorAPI, properties: ZoomProperties) => { + var connectionID = + properties.connectionID != undefined && properties.connectionID.length > 0 + ? properties.connectionID + : 'none'; + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'connection', + type: 'connection', + connectionType: 'zoom-bridge', + value: connectionID + }; + editorAPI.onFieldChanges((fields) => { + var values = editorAPI.tools.objectifyFieldsValues(fields); + editorAPI.saveProperties({ connectionID: values.connectionID }); + }); + editorAPI.setFields([ + connectionField + ]); + }); +}; + +interface ZoomProperties { + connectionID: string; +} diff --git a/Backend/src/Integrations/buildin/zoom/integration.ts b/Backend/src/Integrations/buildin/zoom/integration.ts new file mode 100644 index 0000000..ff83df4 --- /dev/null +++ b/Backend/src/Integrations/buildin/zoom/integration.ts @@ -0,0 +1,64 @@ +import { Integration } from '../../IntegrationsManager'; + +module.exports = { + name: 'Zoom', + description: 'Control basic Zoom functionality on the Undecked computer or via our Zoom-Bridge application.', + main: require('./zoom'), + actions: [ + { + id: 'startStopVideo', + name: 'Start/Stop Video' + }, + + { + id: 'muteUnmuteAudio', + name: 'Mute/Unmute My Audio' + }, + + { + id: 'startStopScreenshare', + name: 'Start/Stop Screen Sharing' + }, + + { + id: 'enterExitFullscreen', + name: 'Enter/Exit Full Screen Mode' + }, + + { + id: 'switchToSpeakerView', + name: 'Switch to Speaker View' + }, + + { + id: 'switchToGalleryView', + name: 'Switch to Gallery View' + }, + + { + id: 'muteEveryoneExceptSelf', + name: 'Mute/Unmute Audio for Everyone Except Self (Host Only)' + }, + + { + id: 'screenshot', + name: 'Screenshot' + } + ], + connections: [ + { + name: 'Zoom-Bridge', + type: 'zoom-bridge', + message: + "This connection requires the 'Undecked Zoom Bridge' tool to be running on the same machine as Zoom. This tool allows Undecked to control various Zoom features over the network.", + link: { + address: 'http://www.morphix.productions', + title: 'Get the Zoom Bridge' + }, + fields: [ + { id: 'ip', name: 'IP Address', type: 'text' }, + { id: 'port', name: 'Port', type: 'number', value: 9191 } + ] + } + ] +} as Integration; diff --git a/Backend/src/Integrations/buildin/zoom/zoom.ts b/Backend/src/Integrations/buildin/zoom/zoom.ts new file mode 100644 index 0000000..25737cd --- /dev/null +++ b/Backend/src/Integrations/buildin/zoom/zoom.ts @@ -0,0 +1,26 @@ +import axios from 'axios'; +import { IntegrationAPI } from '../../IntegrationApi'; + +module.exports = (api: IntegrationAPI) => { + api.registerAction('startStopVideo', require('./actions/startStopVideo')); + api.registerAction('muteUnmuteAudio', require('./actions/muteUnmuteAudio')); + api.registerAction('startStopScreenshare', require('./actions/startStopScreenshare')); + api.registerAction('enterExitFullscreen', require('./actions/enterExitFullscreen')); + api.registerAction('switchToSpeakerView', require('./actions/switchToSpeakerView')); + api.registerAction('switchToGalleryView', require('./actions/switchToGalleryView')); + api.registerAction('muteEveryoneExceptSelf', require('./actions/muteEveryoneExceptSelf')); + api.registerAction('screenshot', require('./actions/screenshot')); + + api.registerConnectionValidator('zoom-bridge', (validatorAPI) => { + if (validatorAPI.properties.ip != undefined && validatorAPI.properties.port != undefined) { + axios + .get(`http://${validatorAPI.properties.ip}:${validatorAPI.properties.port}/v1/ping`) + .then(() => { + validatorAPI.callback(true); + }) + .catch(() => { + validatorAPI.callback(false, 'Unable to reach Zoom-Bridge'); + }); + } else validatorAPI.callback(false, 'No ip or port specified'); + }); +}; diff --git a/Backend/src/Integrations/buildin/zoomosc/integration.ts b/Backend/src/Integrations/buildin/zoomosc/integration.ts new file mode 100644 index 0000000..5c9a095 --- /dev/null +++ b/Backend/src/Integrations/buildin/zoomosc/integration.ts @@ -0,0 +1,33 @@ +import { Integration } from '../../IntegrationsManager'; + +module.exports = { + name: 'ZoomOSC', + description: 'Control ZoomOSC', + main: require('./main'), + connections: [ + { + name: 'Zoom OSC', + type: 'zoomosc', + fields: [ + { + id: 'ip', + name: 'IP Address', + type: 'text', + value: '0.0.0.0' + }, + { + id: 'port', + name: 'Port', + type: 'number', + value: 9090 + }, + { + id: 'header', + name: 'OSC Header (Value is "zoom" by default)', + type: 'text', + value: 'zoom' + } + ] + } + ] +} as Integration; diff --git a/Backend/src/Integrations/buildin/zoomosc/main.ts b/Backend/src/Integrations/buildin/zoomosc/main.ts new file mode 100644 index 0000000..9860a8d --- /dev/null +++ b/Backend/src/Integrations/buildin/zoomosc/main.ts @@ -0,0 +1,168 @@ +import { IntegrationAPI } from '../../IntegrationApi'; +import { ZoomOSC_Basic } from './template/basic'; +import { ZoomOSC_ConnectionOnly } from './template/connectionOnly'; +const { Atem } = require('atem-connection'); + +module.exports = (Api: IntegrationAPI) => { + //----- VIDEO/MIC ----- + Api.registerAction('zoomosc_video_on', 'Video on', ZoomOSC_Basic.handleAction('videoOn')); + Api.registerAction('zoomosc_video_off', 'Video off', ZoomOSC_Basic.handleAction('videoOff')); + Api.registerAction('zoomosc_video_toggle', 'Video toggle', ZoomOSC_Basic.handleAction('toggleVideo')); + Api.registerAction('zoomosc_mic_mute', 'Mic Mute', ZoomOSC_Basic.handleAction('mute')); + Api.registerAction('zoomosc_mic_unmute', 'Mic Unmute', ZoomOSC_Basic.handleAction('unMute')); + Api.registerAction('zoomosc_mic_unmute', 'Mic Toggle', ZoomOSC_Basic.handleAction('toggleMute')); + + //----- HAND RAISE ----- + Api.registerAction('zoomosc_hand_raise', 'Hand Raise', ZoomOSC_ConnectionOnly.handleAction('raiseHand')); + Api.registerAction('zoomosc_hand_lower', 'Hand Lower', ZoomOSC_ConnectionOnly.handleAction('lowerHand')); + Api.registerAction('zoomosc_hand_toggle', 'Hand Toggle (WIN)', ZoomOSC_ConnectionOnly.handleAction('toggleHand')); + + //----- SPOTLIGHT ----- + Api.registerAction('zoomosc_spot_add', 'Add spotlight (PRO)', ZoomOSC_Basic.handleAction('addSpot')); + Api.registerAction('zoomosc_spot_un', 'Un-spotlight', ZoomOSC_Basic.handleAction('unSpot')); + Api.registerAction('zoomosc_spot_replace', 'Replace spotlight', ZoomOSC_Basic.handleAction('spot')); + Api.registerAction('zoomosc_spot_toggle', 'Toggle spotlight (PRO)', ZoomOSC_Basic.handleAction('toggleSpot')); + + //----- PIN ----- + Api.registerAction('zoomosc_pin_add', 'Add pin (PRO)', ZoomOSC_Basic.handleAction('addPin')); + Api.registerAction('zoomosc_pin_replace', 'Replace pin', ZoomOSC_Basic.handleAction('pin')); + Api.registerAction('zoomosc_pin_un', 'Un-pin', ZoomOSC_Basic.handleAction('unPin')); + Api.registerAction('zoomosc_pin_toggle', 'Toggle pin (PRO)', ZoomOSC_Basic.handleAction('togglePin')); + Api.registerAction('zoomosc_pin_replace2', 'Replace second screen pin', ZoomOSC_Basic.handleAction('pin2')); + Api.registerAction('zoomosc_pin_un2', 'Un-pin second screen', ZoomOSC_Basic.handleAction('unPin2')); + Api.registerAction('zoomosc_pin_toggle2', 'Toggle pin second screen (PRO)', ZoomOSC_Basic.handleAction('clearPin')); + Api.registerAction('zoomosc_pin_clear', 'Clear all pins', ZoomOSC_Basic.handleAction('togglePin2')); + + //----- VIEW ----- + Api.registerAction('zoomosc_view_gallery', 'Gallery view', ZoomOSC_Basic.handleAction('setGalleryView')); + Api.registerAction('zoomosc_view_speaker', 'Speaker view', ZoomOSC_Basic.handleAction('setSpeakerView')); + Api.registerAction( + 'zoomosc_view_gallerynext', + 'Gallery view next page', + ZoomOSC_ConnectionOnly.handleAction('galleryPageNext') + ); + Api.registerAction( + 'zoomosc_view_galleryprevious', + 'Gallery view previous page', + ZoomOSC_ConnectionOnly.handleAction('galleryPagePrev') + ); + + //----- SETTINGS ----- + Api.registerAction( + 'zoomosc_settings_showusernames', + 'Display Usernames on Videos', + ZoomOSC_ConnectionOnly.handleAction('showUserNames') + ); + Api.registerAction( + 'zoomosc_settings_hideusernames', + 'Hide Usernames on Videos', + ZoomOSC_ConnectionOnly.handleAction('hideUserNames') + ); + Api.registerAction( + 'zoomosc_settings_showusernames', + 'Show Non-Video Participants', + ZoomOSC_ConnectionOnly.handleAction('showNonVideoParticipants') + ); + Api.registerAction( + 'zoomosc_settings_showusernames', + 'Show Non-Video Participants', + ZoomOSC_ConnectionOnly.handleAction('showNonVideoParticipants') + ); + Api.registerAction( + 'zoomosc_settings_enableoriginalaudio', + 'Enable “Original Sound”', + ZoomOSC_ConnectionOnly.handleAction('enableOriginalSound') + ); + Api.registerAction( + 'zoomosc_settings_disableoriginalaudio', + 'Disabled “Original Sound”', + ZoomOSC_ConnectionOnly.handleAction('disableOriginalSound') + ); + + //----- GLOBAL ----- + Api.registerAction('zoomosc_global_muteall', 'Mute all', ZoomOSC_ConnectionOnly.handleAction('all/mute')); + Api.registerAction('zoomosc_global_unmuteall', 'Unmute all', ZoomOSC_ConnectionOnly.handleAction('all/unMute')); + Api.registerAction( + 'zoomosc_global_lowerallhands', + 'Lower All Raised Hands', + ZoomOSC_ConnectionOnly.handleAction('lowerAllHands') + ); + Api.registerAction( + 'zoomosc_global_clearspotlight', + 'Clear all spotlights from meeting (PRO)', + ZoomOSC_ConnectionOnly.handleAction('clearSpot') + ); + Api.registerAction( + 'zoomosc_global_leavemeeting', + 'Leave Meeting (PRO)', + ZoomOSC_ConnectionOnly.handleAction('leaveMeeting') + ); + Api.registerAction( + 'zoomosc_global_endmeeting', + 'End Meeting (PRO)', + ZoomOSC_ConnectionOnly.handleAction('endMeeting') + ); + + Api.registerAction( + 'zoomosc_global_startlocalrecording', + 'Start Local Recording', + ZoomOSC_ConnectionOnly.handleAction('startLocalRecording') + ); + Api.registerAction( + 'zoomosc_global_pauselocalrecording', + 'Pause Local Recording', + ZoomOSC_ConnectionOnly.handleAction('pauseLocalRecording') + ); + Api.registerAction( + 'zoomosc_global_resumelocalrecording', + 'Resume Local Recording', + ZoomOSC_ConnectionOnly.handleAction('resumeLocalRecording') + ); + Api.registerAction( + 'zoomosc_global_stoplocalrecording', + 'Stop Local Recording', + ZoomOSC_ConnectionOnly.handleAction('stopLocalRecording') + ); + + Api.registerAction( + 'zoomosc_global_startcloudrecording', + 'Start Cloud Recording', + ZoomOSC_ConnectionOnly.handleAction('startCloudRecording') + ); + Api.registerAction( + 'zoomosc_global_pausecloudrecording', + 'Pause Cloud Recording', + ZoomOSC_ConnectionOnly.handleAction('pauseCloudRecording') + ); + Api.registerAction( + 'zoomosc_global_resumecloudrecording', + 'Resume Cloud Recording', + ZoomOSC_ConnectionOnly.handleAction('resumeCloudRecording') + ); + Api.registerAction( + 'zoomosc_global_stopcloudrecording', + 'Stop Cloud Recording', + ZoomOSC_ConnectionOnly.handleAction('stopCloudRecording') + ); + + //----- WAITING ROOMS ----- + Api.registerAction( + 'zoomosc_waitingrooms_enable', + 'Enable Waiting Room (PRO)', + ZoomOSC_ConnectionOnly.handleAction('enableWaitingRoom') + ); + Api.registerAction( + 'zoomosc_waitingrooms_disable', + 'Disable Waiting Room (PRO)', + ZoomOSC_ConnectionOnly.handleAction('disableWaitingRoom') + ); + Api.registerAction( + 'zoomosc_waitingrooms_admitall', + 'Admit All from Waiting Room', + ZoomOSC_ConnectionOnly.handleAction('admitAll') + ); + + Api.registerConnectionValidator('zoomosc', (validatorAPI) => { + validatorAPI.callback(true); + }); +}; diff --git a/Backend/src/Integrations/buildin/zoomosc/template/basic.ts b/Backend/src/Integrations/buildin/zoomosc/template/basic.ts new file mode 100644 index 0000000..b581b0c --- /dev/null +++ b/Backend/src/Integrations/buildin/zoomosc/template/basic.ts @@ -0,0 +1,85 @@ +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; +import { Client } from 'node-osc'; +import { ActionAPI } from '../../../ActionAPI'; + +export var ZoomOSC_Basic = { + handleAction(oscAction: string) { + return (ActionAPI: ActionAPI) => { + ActionAPI.onExecute((properties, status, deck) => + ZoomOSC_Basic.onExecute(ActionAPI, oscAction, properties, status, deck) + ); + ActionAPI.onOpenEditor(ZoomOSC_Basic.onOpenEditor); + }; + }, + + onExecute(ActionAPI: ActionAPI, oscAction: string, properties: Properties, status, deck) { + if (properties.connectionID != undefined && properties.connectionID.length > 0) { + var connection = ActionAPI.getConnection('zoomosc', properties.connectionID); + if (connection) { + var ip: string = connection.properties.ip; + var port: number = connection.properties.port; + var header: number = connection.properties.header; + + var client = new Client(ip, port); + client.send(`/${header}/${properties.target}/${oscAction}`, properties.targetValue as any, () => { + status(`OSC Action ${oscAction} has been called with ${properties.targetValue}`, 'info'); + client.close(); + }); + } else status('Connection does not exist', 'error'); + } else status('No connectionID specified', 'error'); + }, + + onOpenEditor(EditorAPI: EditorAPI, properties: Properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + var target = properties.target != undefined ? properties.target : 'userName'; + var targetValue = properties.targetValue != undefined ? properties.targetValue : ''; + + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'Connection', + type: 'connection', + connectionType: 'zoomosc', + value: connectionID + }; + var targetField: EditorAPI_Field = { + id: 'target', + name: 'Target', + type: 'select', + value: target, + values: [ + { id: 'userName', text: 'By username' }, + { id: 'targetID', text: 'By target id' }, + { id: 'zoomID', text: 'By Zoom id' }, + { id: 'galIndex', text: 'By gallery index' }, + { id: 'me', text: 'Me' }, + { id: 'all', text: 'All' } + ] + }; + var targetValueField: EditorAPI_Field = { + id: 'targetValue', + name: 'Value', + type: 'text', + value: targetValue + }; + + EditorAPI.onFieldChanges((fields) => { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + EditorAPI.saveProperties({ + connectionID: fieldObject.connectionID, + target: fieldObject.target, + targetValue: fieldObject.targetValue + }); + }); + EditorAPI.setFields([ + connectionField, + targetField, + targetValueField + ]); + } +}; + +interface Properties { + connectionID: string; + target: 'userName' | 'targetID' | 'zoomID' | 'galIndex' | 'me'; + targetValue: string; +} diff --git a/Backend/src/Integrations/buildin/zoomosc/template/connectionOnly.ts b/Backend/src/Integrations/buildin/zoomosc/template/connectionOnly.ts new file mode 100644 index 0000000..44b576e --- /dev/null +++ b/Backend/src/Integrations/buildin/zoomosc/template/connectionOnly.ts @@ -0,0 +1,59 @@ +import { EditorAPI, EditorAPI_Field } from '../../../EditorAPI'; +import { Client } from 'node-osc'; +import { ActionAPI } from '../../../ActionAPI'; + +export var ZoomOSC_ConnectionOnly = { + handleAction(oscAction: string) { + return (ActionAPI: ActionAPI) => { + ActionAPI.onExecute((properties, status, deck) => + ZoomOSC_ConnectionOnly.onExecute(ActionAPI, oscAction, properties, status, deck) + ); + ActionAPI.onOpenEditor(ZoomOSC_ConnectionOnly.onOpenEditor); + }; + }, + + onExecute(ActionAPI: ActionAPI, oscAction: string, properties: Properties, status, deck) { + if (properties.connectionID != undefined && properties.connectionID.length > 0) { + var connection = ActionAPI.getConnection('zoomosc', properties.connectionID); + if (connection) { + var ip: string = connection.properties.ip; + var port: number = connection.properties.port; + var header: number = connection.properties.header; + + var client = new Client(ip, port); + client.send(`/${header}/${oscAction}`, [], () => { + status(`OSC Action ${oscAction} has been called`, 'info'); + client.close(); + }); + } else status('Connection does not exist', 'error'); + } else status('No connectionID specified', 'error'); + }, + + onOpenEditor(EditorAPI: EditorAPI, properties: Properties) { + var connectionID = properties.connectionID != undefined ? properties.connectionID : 'none'; + + var connectionField: EditorAPI_Field = { + id: 'connectionID', + name: 'Connection', + type: 'connection', + connectionType: 'zoomosc', + value: connectionID + }; + + EditorAPI.onFieldChanges((fields) => { + var fieldObject = EditorAPI.tools.objectifyFieldsValues(fields); + EditorAPI.saveProperties({ + connectionID: fieldObject.connectionID, + target: fieldObject.target, + targetValue: fieldObject.targetValue + }); + }); + EditorAPI.setFields([ + connectionField + ]); + } +}; + +interface Properties { + connectionID: string; +} diff --git a/Backend/src/Logger.ts b/Backend/src/Logger.ts new file mode 100644 index 0000000..343d206 --- /dev/null +++ b/Backend/src/Logger.ts @@ -0,0 +1,40 @@ +import * as CC from '@meesvdw/coloredconsole'; + +export function Log(level: 'info' | 'error' | 'warn' | 'crit', ...args: any[]) { + if (level.includes('.js')) { + level = args[0]; + args.splice(0, 1); + } + function log(origin: string, ...args: any[]) { + level = <'info' | 'error' | 'warn' | 'crit'>level.toLowerCase().replace('warning', 'warn'); + + var format; + if (level == 'info') format = CC.BG.black + CC.white + ' INFO '; + else if (level == 'error') format = CC.BG.black + CC.red + ' ERROR '; + else if (level == 'warn') format = CC.BG.black + CC.yellow + ' WARN '; + else if (level == 'crit') format = CC.BG.red + CC.black + ' CRIT '; + + if (origin == 'Core' && level != 'crit') origin = CC.green + origin + CC.white; + + var d = new Date(); + var n = d.toLocaleTimeString(); + + format = `${format} ${n} ${origin} ${args} ${CC.reset}`; + console.log(format); + } + + var error = new Error(); + if (error && error.stack) { + var stackArray = error.stack.replace('Error\n', '').replace(/ at /g, '%*%').replace(/ /g, '').split('%*%'); + stackArray.splice(0, 1); + + if (stackArray.length > 1) { + var callerSplit = stackArray[1].replace(/\\/g, '/').split('/'); + + var caller = callerSplit[callerSplit.length - 1].replace(/\n/g, '').replace(')', ''); + + return log(caller, ...args); + } + } + log('Unknown', ...args); +} diff --git a/Backend/src/Pages/KeyManager.ts b/Backend/src/Pages/KeyManager.ts new file mode 100644 index 0000000..cd70cfa --- /dev/null +++ b/Backend/src/Pages/KeyManager.ts @@ -0,0 +1,40 @@ +import { Undecked } from '../Core'; +import { Log } from '../Logger'; + +declare var Undecked: Undecked; + +export class KeyManager { + ids: string[]; + + constructor() { + this.ids = []; + } + + register(keyID: string): string { + if (!this.ids.includes(keyID)) this.ids.push(keyID); + else { + Log('warn', `Duplicate key IDs '${keyID}'`); + keyID = this.generateNew(); + } + return keyID; + } + + generateNew() { + return this.register( + Undecked.generateRandom(16, (checkValid) => { + return !this.ids.includes(checkValid); + }) + ); + } + + getLocation(keyID): { pageID: string; x: number; y: number } { + var pages = Undecked.Pages.getAll(); + for (var pageID in pages) { + var page = pages[pageID]; + if (page.hasKeyWithID(keyID)) { + return { pageID, ...page.getKeyLocationWithID(keyID) }; + } + } + return { pageID: null, x: null, y: null }; + } +} diff --git a/Backend/src/Pages/Page.ts b/Backend/src/Pages/Page.ts new file mode 100644 index 0000000..e07da7f --- /dev/null +++ b/Backend/src/Pages/Page.ts @@ -0,0 +1,650 @@ +import { writeJson } from 'fs-extra'; +import * as path from 'path' +import { Undecked } from '../Core'; +import { Deck } from '../Decks/Deck'; +import { Log } from '../Logger'; + +declare var Undecked: Undecked; + +module.exports = class Page { + pageFilePath: string; + + pageID: string; + name: string; + + keys: Page_Config_Keys; + + saveTimeout: any; + + constructor(settings: Page_Config) { + this.pageFilePath = path.join(Undecked.dataPath, 'pages', `${settings.pageID}.json`); + + this.pageID = settings.pageID; + this.name = settings.name || `Unnamed page (${this.pageID})`; + + this.keys = settings.keys || {}; + + this.ensureKeys(); + } + + save(callback?: () => void) { + clearTimeout(this.saveTimeout); + this.saveTimeout = setTimeout(() => { + writeJson(this.pageFilePath, this.export(), (err) => { + if (err) Log('error', `Error whilst saving page ${this.pageID}`, err.message); + else Log('info', `Page ${this.pageID} has been saved`); + if (callback) callback(); + }); + }, 10 * 1000); + } + + export(): Page_Config { + var keys = JSON.parse(JSON.stringify(this.keys)); + for (var y in keys) { + for (var x in keys[y]) { + var key: Page_Key = keys[y][x]; + if (key.state != undefined && key.state.type == 'ghost' && key.state.masterID != undefined) { + var location = Undecked.Pages.KeyManager.getLocation(key.state.masterID); + + var page = Undecked.Pages.get(location.pageID); + if (page) { + var ghostMaster = page.getKey(location.x, location.y); + + key.appearence = ghostMaster.appearence; + key.actions = ghostMaster.actions; + } + } + } + } + return { + pageID: this.pageID, + name: this.name, + keys + }; + } + + getID(): string { + return this.pageID; + } + + ensureKeys() { + for (let y = 0; y < 4; y++) { + if (this.keys[y] == undefined) this.keys[y] = {}; + for (let x = 0; x < 8; x++) { + if (this.keys[y][x] == undefined) + this.keys[y][x] = { + ...defaultKey, + id: null + }; + + if (this.keys[y][x].id == null || this.keys[y][x].id == undefined) + this.keys[y][x].id = Undecked.Pages.KeyManager.generateNew(); + else Undecked.Pages.KeyManager.register(this.keys[y][x].id); + + if (this.keys[y][x].actions == undefined) this.keys[y][x].actions = {}; + + if (this.keys[y][x].actions.up == undefined) this.keys[y][x].actions.up = {}; + + if (this.keys[y][x].actions.down == undefined) this.keys[y][x].actions.down = {}; + + if (this.keys[y][x].actions.latch == undefined) this.keys[y][x].actions.latch = {}; + + if (this.keys[y][x].actions.unlatch == undefined) this.keys[y][x].actions.unlatch = {}; + + if (this.keys[y][x].state.type == 'ghost') { + if (this.keys[y][x].state.masterID != undefined) { + var location = Undecked.Pages.KeyManager.getLocation(this.keys[y][x].state.masterID); + var page = Undecked.Pages.get(location.pageID); + if (page) { + var key = page.getKey(location.x, location.y); + if (key.state.ghostIDs == undefined) key.state.ghostIDs = []; + key.state.ghostIDs.push(this.keys[y][x].id); + } + } + } + } + } + } + + setName(name: string) { + this.name = name; + this.save(); + + Undecked.SocketServer.broadcastTo('home', 'page', 'updatename', this.pageID, name); + } + + + broadcastKeyUpdate(x: string, y: string, responseToken: string = '-1', key?: Page_Key) { + Undecked.SocketServer.broadcastTo( + 'home', + 'page', + 'updatekey', + this.pageID, + x, + y, + key != undefined ? key : this.keys[y][x], + responseToken + ); + } + + updateKey( + x: string, + y: string, + key: Page_Key, + responseToken: string, + originQuery?: string, + force: boolean = false + ) { + if (this.keys[y] != undefined && this.keys[y][x] != undefined) { + //FIXME:GHOST still not working oging to bed now, I think i should rewrite it tomorrow..... + /* When updating key check if key is a ghost, if so recall the function with the master key. Update all properties on master key as usual. If a key has ghostIDs, update the appearence and actions of the key. */ + + //----------------------------------Validating key + var masterResponseToken = + originQuery == undefined + ? responseToken + : `${this.pageID}_${x}_${y}` == originQuery ? responseToken : '-1'; + originQuery = `${this.pageID}_${x}_${y}`; + + var decks = Undecked.Decks.decks; + var currentKey: Page_Key = this.keys[y][x]; + + var grabBest = ( + object: string, + value: any, + defaultValue: any, + incommingFirst: boolean = true + ): any[d] => { + if (key.state.type == 'empty') return defaultValue; + + if ((incommingFirst == true || force == true) && key[object] != undefined) + if (value != null && key[object][value] != undefined) return key[object][value]; + else if (value == null) return key[object]; + + if (currentKey[object] != undefined) + if (value != null && currentKey[object][value] != undefined) return currentKey[object][value]; + else if (value == null) return currentKey[object]; + + if (incommingFirst == false && key[object] != undefined) + if (value != null && key[object][value] != undefined) return key[object][value]; + else if (value == null) return key[object]; + return defaultValue; + }; + + if (currentKey.state.type != 'ghost' && key.state.type == 'ghost') { + //Becoming ghost + } else if (currentKey.state.type == 'ghost' && (key.state.type == 'ghost' || key.state.type == 'custom')) { + //Editing ghost + if (key.state.type == 'custom') key.state.type = 'ghost'; + + var masterID = currentKey.state.masterID; + var masterLocation = Undecked.Pages.KeyManager.getLocation(masterID); + var masterPage = Undecked.Pages.get(masterLocation.pageID); + + if (masterPage) { + var masterKeyClone = JSON.parse( + JSON.stringify(masterPage.getKey(masterLocation.x, masterLocation.y)) + ); + + return masterPage.updateKey( + masterLocation.x, + masterLocation.y, + { + ...masterKeyClone, + state: { + ...masterKeyClone.state, + confirm: key.state.confirm, + toggle: key.state.toggle + }, + appearence: key.appearence + }, + responseToken, + originQuery + ); + } + + return console.log('Unable to find ghost master key'); + } else if (currentKey.state.type == 'ghost' && key.state.type != 'ghost') { + var masterID = currentKey.state.masterID; + var masterLocation = Undecked.Pages.KeyManager.getLocation(masterID); + var masterPage = Undecked.Pages.get(masterLocation.pageID); + + if (masterPage) { + var masterKey = masterPage.getKey(masterLocation.x, masterLocation.y); + + if (masterKey.state != undefined && masterKey.state.ghostIDs != undefined) { + if (masterKey.state.ghostIDs.includes(currentKey.id)) + masterKey.state.ghostIDs.splice(masterKey.state.ghostIDs.indexOf(currentKey.id), 1); + } + } + + //Reverting from ghost + } else if ( + currentKey.state.type == 'custom' && + key.state.type != 'custom' && + currentKey.state.ghostIDs != undefined && + currentKey.state.ghostIDs.length > 0 + ) { + //Master becoming other key + var ghostIDs = currentKey.state.ghostIDs; + var removeGhost = (ghostID: string) => { + var ghostLocation = Undecked.Pages.KeyManager.getLocation(ghostID); + var ghostPage = Undecked.Pages.get(ghostLocation.pageID); + if (ghostPage) { + var ghostKey = ghostPage.getKey(ghostLocation.x, ghostLocation.y); + if (ghostKey.state != undefined && ghostKey.state.masterID == currentKey.id) { + if ( + ghostPage.keys[ghostLocation.y] != undefined && + ghostPage.keys[ghostLocation.y][ghostLocation.x] + ) { + ghostPage.keys[ghostLocation.y][ghostLocation.x] = { + id: ghostKey.id, + appearence: {}, + state: { confirm: false, toggle: false, type: 'empty' } + }; + + ghostPage.broadcastKeyUpdate(ghostLocation.x, ghostLocation.y); + } + } + } + }; + + for (let i = 0; i < ghostIDs.length; i++) { + removeGhost(ghostIDs[i]); + continue; + } + currentKey.state.ghostIDs = null; + } else { + //Normal change + } + + var id = currentKey.id != undefined ? currentKey.id : Undecked.Pages.KeyManager.generateNew(); + var _internal = currentKey._internal != undefined ? currentKey._internal : {}; + var state: Page_Key_State = { + confirm: grabBest('state', 'confirm', false), + toggle: grabBest('state', 'toggle', false), + type: grabBest('state', 'type', 'empty'), + masterID: grabBest('state', 'masterID', null, false), + ghostIDs: grabBest('state', 'ghostIDs', null, false) + }; + var actions: Page_Key_ActionsList = + state.type == 'empty' + ? { down: {}, up: {}, latch: {}, unlatch: {} } + : force == true + ? key.actions + : currentKey.actions != undefined + ? currentKey.actions + : { up: {}, down: {}, latch: {}, unlatch: {} }; + var appearence: Page_Key_Appearence = { + background: grabBest('appearence', 'background', {}), + image: grabBest('appearence', 'image', {}), + text: grabBest('appearence', 'text', {}) + }; + + this.keys[y][x] = { + id, + _internal, + actions, + state, + appearence + }; + + //----------------------------------Updating decks & web ui + var deckPages: { [pageID: string]: Deck[] } = {}; + for (var serialNumber in decks) { + var deck = decks[serialNumber]; + + if (deckPages[deck.getPageID()] == undefined) deckPages[deck.getPageID()] = []; + deckPages[deck.getPageID()].push(deck); + + if (deck.getPageID() == this.pageID) { + deck.updateKey(parseInt(x), parseInt(y)); + } + } + + if (this.keys[y][x].state.type == 'ghost') { + var masterLocation = Undecked.Pages.KeyManager.getLocation(this.keys[y][x].state.masterID); + var masterPage = Undecked.Pages.get(masterLocation.pageID); + + if (masterPage) { + var masterClone: Page_Key = JSON.parse( + JSON.stringify(masterPage.getKey(masterLocation.x, masterLocation.y)) + ); + this.broadcastKeyUpdate(x, y, masterResponseToken, { + ...key, + state: { + ...key.state, + confirm: masterClone.state.confirm, + toggle: masterClone.state.toggle + }, + appearence: masterClone.appearence + }); + } + } else this.broadcastKeyUpdate(x, y, masterResponseToken); + + if ( + currentKey.state.type == 'custom' && + currentKey.state.ghostIDs != undefined && + currentKey.state.ghostIDs.length > 0 + ) { + //Updating ghost of this key + var ghostAppearence = JSON.parse(JSON.stringify(appearence)); + ghostAppearence.system = { ghost: true }; + + for (let i = 0; i < currentKey.state.ghostIDs.length; i++) { + var ghostID = currentKey.state.ghostIDs[i]; + var ghostLocation = Undecked.Pages.KeyManager.getLocation(ghostID); + var ghostPage = Undecked.Pages.get(ghostLocation.pageID); + if (ghostPage) { + var ghostKeyClone: Page_Key = JSON.parse( + JSON.stringify(ghostPage.getKey(ghostLocation.x, ghostLocation.y)) + ); + if (ghostKeyClone.state != undefined && ghostKeyClone.state.masterID == id) { + var responseTokenGhost = + originQuery == undefined + ? responseToken + : `${ghostLocation.pageID}_${ghostLocation.x}_${ghostLocation.y}` == originQuery + ? responseToken + : '-1'; + + var newGhostKey: Page_Key = { + ...ghostKeyClone, + appearence: ghostAppearence + }; + + ghostPage.broadcastKeyUpdate( + ghostLocation.x, + ghostLocation.y, + responseTokenGhost, + newGhostKey + ); + if (deckPages[ghostPage.getID()] != undefined) + for (let i = 0; i < deckPages[ghostPage.getID()].length; i++) { + var deck = deckPages[ghostPage.getID()][i]; + deck.setKey(ghostLocation.x, ghostLocation.y, newGhostKey); + } + } else { + currentKey.state.ghostIDs.splice(i, 1); + i--; + } + } + } + } + + this.save(); + } + } + + setKeyInternal(x: number | string, y: number | string, property: string, value: any) { + if (this.keys[y] != undefined && this.keys[y][x] != undefined) { + this.keys[y][x]._internal[property] = value; + + this.save(); + } + } + + getKey(x: number | string, y: number | string): Page_Key { + if (this.keys[y] != undefined && this.keys[y][x] != undefined) return this.keys[y][x]; + + return null; + } + + requestKey(x: number | string, y: number | string): Page_Key { + if (this.keys[y] != undefined && this.keys[y][x] != undefined) { + if ( + this.keys[y][x].state != undefined && + this.keys[y][x].state.type == 'ghost' && + this.keys[y][x].state.masterID != undefined + ) { + var key = JSON.parse(JSON.stringify(this.keys[y][x])); + var location = Undecked.Pages.KeyManager.getLocation(key.state.masterID); + + var page = Undecked.Pages.get(location.pageID); + if (page) { + var ghostMasterClone: Page_Key = JSON.parse(JSON.stringify(page.getKey(location.x, location.y))); + + key.state = { + ...this.keys[y][x].state, + confirm: ghostMasterClone.state.confirm, + toggle: ghostMasterClone.state.toggle + }; + key.appearence = ghostMasterClone.appearence; + key.actions = ghostMasterClone.actions; + + return key; + } + } else return this.keys[y][x]; + } + + return null; + } + + hasKey(x: number | string, y: number | string) { + return this.keys[y] != undefined && this.keys[y][x] != undefined; + } + + hasKeyWithID(keyID): boolean { + for (let y = 0; y < 4; y++) + for (let x = 0; x < 8; x++) + if (this.keys[y] != undefined && this.keys[y][x] != undefined) + if (this.keys[y][x].id == keyID) return true; + + return false; + } + + getKeyLocationWithID(keyID): { x: number; y: number } { + for (let y = 0; y < 4; y++) + for (let x = 0; x < 8; x++) + if (this.keys[y] != undefined && this.keys[y][x] != undefined) + if (this.keys[y][x].id == keyID) return { x, y }; + + return null; + } + + getKeyTextList(): { x: number; y: number; text: string; id: string }[] { + var list: { x: number; y: number; text: string; id: string }[] = []; + + for (let y = 0; y < 4; y++) + for (let x = 0; x < 8; x++) { + if (this.keys[y] != undefined && this.keys[y][x] != undefined) { + var key: Page_Key = this.keys[y][x]; + if (key.appearence != undefined && key.appearence.text != undefined) { + if (key.appearence.text.value != undefined && key.appearence.text.value.length > 0) { + list.push({ x, y, text: key.appearence.text.value, id: key.id }); + continue; + } + } + + list.push({ x, y, text: null, id: key.id }); + } else list.push({ x, y, text: null, id: null }); + } + + return list; + } + + getActionInstance(key: Page_Key, actionInstanceID: string): Page_Key_Action { + if (key.actions != undefined) { + if (key.actions.up != undefined && key.actions.up[actionInstanceID] != undefined) + return key.actions.up[actionInstanceID]; + if (key.actions.down != undefined && key.actions.down[actionInstanceID] != undefined) + return key.actions.down[actionInstanceID]; + if (key.actions.latch != undefined && key.actions.latch[actionInstanceID] != undefined) + return key.actions.latch[actionInstanceID]; + if (key.actions.unlatch != undefined && key.actions.unlatch[actionInstanceID] != undefined) + return key.actions.unlatch[actionInstanceID]; + } + return null; + } +}; + +var defaultKey: Page_Key = { + id: null, + state: { + type: 'empty', + toggle: false, + confirm: false + }, + actions: { + up: {}, + down: {}, + latch: {}, + unlatch: {} + }, + appearence: { + text: { + color: '#ffffff', + size: 20, + value: '', + offsetX: 0, + offsetY: 0 + } + }, + _internal: {} +}; +export interface Page { + name: string; + keys: Page_Config_Keys; + + save: (callback?: () => void) => void; + export: () => Page_Config; + + getID: () => string; + + setName: (name: string) => void; + updateKey: ( + x: string | number, + y: string | number, + key: Page_Key, + responseToken: string, + originQuery?: string, + force?: boolean + ) => void; + getKey: (x: number | string, y: number | string) => Page_Key; + requestKey: (x: number | string, y: number | string) => Page_Key; + hasKey: (x: number | string, y: number | string) => boolean; + setKeyInternal: (x: number | string, y: number | string, property: string, value: any) => void; + hasKeyWithID: (keyID) => boolean; + getKeyLocationWithID: (keyID) => { x: number; y: number }; + getKeyTextList: () => { x: number; y: number; text: string; id: string }[]; + getActionInstance: (key: Page_Key, actionInstanceID: string) => Page_Key_Action; + broadcastKeyUpdate: (x: number | string, y: number | string, responseToken?: string, key?: Page_Key) => void; +} + +export interface Page_Config { + pageID: string; + name?: string; + + keys?: Page_Config_Keys; +} + +export interface Page_Config_Keys { + '0'?: { + '0'?: Page_Key; + '1'?: Page_Key; + '2'?: Page_Key; + '3'?: Page_Key; + '4'?: Page_Key; + '5'?: Page_Key; + '6'?: Page_Key; + '7'?: Page_Key; + '8'?: Page_Key; + }; + '1'?: { + '0'?: Page_Key; + '1'?: Page_Key; + '2'?: Page_Key; + '3'?: Page_Key; + '4'?: Page_Key; + '5'?: Page_Key; + '6'?: Page_Key; + '7'?: Page_Key; + '8'?: Page_Key; + }; + '2'?: { + '0'?: Page_Key; + '1'?: Page_Key; + '2'?: Page_Key; + '3'?: Page_Key; + '4'?: Page_Key; + '5'?: Page_Key; + '6'?: Page_Key; + '7'?: Page_Key; + '8'?: Page_Key; + }; + '3'?: { + '0'?: Page_Key; + '1'?: Page_Key; + '2'?: Page_Key; + '3'?: Page_Key; + '4'?: Page_Key; + '5'?: Page_Key; + '6'?: Page_Key; + '7'?: Page_Key; + '8'?: Page_Key; + }; +} + +export interface Page_Key { + id?: string; + state?: Page_Key_State; + actions?: Page_Key_ActionsList; + appearence: Page_Key_Appearence; + _internal?: Page_Key_Internal; +} + +export interface Page_Key_State { + type: 'empty' | 'custom' | 'pageup' | 'pagedown' | 'currentpage' | 'ghost'; + toggle: boolean; + confirm: boolean; + masterID?: string; + ghostIDs?: string[]; +} + +export interface Page_Key_ActionsList { + up: Page_Key_Actions; + down: Page_Key_Actions; + latch: Page_Key_Actions; + unlatch: Page_Key_Actions; +} +export interface Page_Key_Actions { + [actionInstanceID: string]: Page_Key_Action; +} +export interface Page_Key_Action { + integrationID: string; + actionID: string; + actionInstanceID: string; + properties: { [property: string]: any }; + logs: { timestamp: number; type: 'error' | 'info' | 'warning'; text: string }[]; +} + +export interface Page_Key_Appearence { + text?: { + value: string; + size: number; + color: string; + offsetX: number; + offsetY: number; + }; + image?: { + address?: string; + iconid?: string; + iconstyle?: 'black' | 'white'; + size: number; + offsetX: number; + offsetY: number; + rotation: number; + }; + background?: { + color: string; + }; + system?: { + border?: { + color: string; + thickness: number; + }; + ghost?: boolean; + }; +} +export interface Page_Key_Internal { + _toggle?: boolean; +} diff --git a/Backend/src/Pages/PageManager.ts b/Backend/src/Pages/PageManager.ts new file mode 100644 index 0000000..08327f7 --- /dev/null +++ b/Backend/src/Pages/PageManager.ts @@ -0,0 +1,353 @@ +import { Undecked } from '../Core'; +import * as path from 'path' +import { Log } from '../Logger'; +import { Page, Page_Config, Page_Key } from './Page'; +import { KeyManager } from './KeyManager'; + +import * as fs from 'fs-extra'; +var { ensureDir, pathExists, readdir, readJSON, readJson, writeFile } = fs; + +const PageClass = require('./Page'); + +declare var Undecked: Undecked; + +export class PageManager { + KeyManager: KeyManager; + + managerConfigPath: string; + managerDataPath: string; + + managerConfig: PageManager_Config; + + pages: PageManager_Pages; + order: string[]; + + constructor() { } + + load(callback: () => void) { + this.managerConfigPath = path.join(Undecked.dataPath, 'pagemanager.json'); + this.managerDataPath = path.join(Undecked.dataPath, 'pages'); + + this.KeyManager = new KeyManager(); + + this.pages = {}; + this.order = []; + + Log('info', 'Loading pages'); + + ensureDir(this.managerDataPath, (err) => { + if (err) throw err; + this.loadConfig(() => { + this.order = this.managerConfig.order || []; + + this.loadPages(callback); + }); + }); + } + + loadConfig(callback: () => void) { + pathExists(this.managerConfigPath, (err, exists) => { + if (err) throw err; + if (exists) { + readJson(this.managerConfigPath, (err, json) => { + if (err) throw err; + this.managerConfig = json; + callback(); + }); + } else { + this.managerConfig = defaultPageConfig; + this.saveConfig(callback); + } + }); + } + + saveConfig(callback?: () => void) { + var toSave: PageManager_Config = { + order: this.order + }; + + writeFile(this.managerConfigPath, JSON.stringify(toSave, null, 4), (err) => { + if (err) Log('error', 'Error whilst saving manager config', err.message); + if (callback) callback(); + }); + } + + loadPages(callback: () => void) { + var instance = this; + readdir(this.managerDataPath, (err, files) => { + if (err) throw err; + + (function readPage(i = 0) { + if (files[i]) { + readJSON(path.join(instance.managerDataPath, files[i]), (err, data: Page_Config) => { + if (err) + Log('error', `Error whilst loading page ${files[i].replace('.json', '')}`, err.message); + else instance.pages[data.pageID] = new PageClass(data); + + readPage(i + 1); + }); + } else { + Log('info', `Loaded ${Object.keys(instance.pages).length} page(s)`); + if (Object.keys(instance.pages).length > 0) callback(); + else { + instance.create('First page', callback); + } + } + })(); + }); + } + + create(pageName: string, callback?: () => void) { + var existingPageIDs = Object.keys(this.pages); + var pageID = Undecked.generateRandom( + 4, + (testrandom: string) => { + return !existingPageIDs.includes(testrandom); + }, + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + ); + this.pages[pageID] = new PageClass({ + pageID, + name: `${pageName} (${pageID})`, + keys: { + '0': { '0': { state: { type: 'pageup' } } }, + '1': { '0': { state: { type: 'currentpage' } } }, + '2': { '0': { state: { type: 'pagedown' } } } + } + }); + + if (!this.order.includes(pageID)) this.order.push(pageID); + Undecked.SocketServer.broadcastTo('home', 'pagelist', this.getNames()); + + this.pages[pageID].save(() => { + Log('info', `Page ${pageID} has been created`); + + if (callback) callback(); + }); + } + + exists(pageID: string): boolean { + return this.pages[pageID] != undefined; + } + + get(pageID: string): Page { + if (this.exists(pageID)) return this.pages[pageID]; + return null; + } + + getAll(): PageManager_Pages { + return this.pages; + } + + getIdByIndex(index: number): string { + var ids = this.order; + if (ids[index]) return ids[index]; + return null; + } + + getIndexById(id: string): number { + var ids = this.order; + if (ids.includes(id)) return ids.indexOf(id); + return null; + } + + getNames(): { pageID: string; name: string }[] { + var order = this.getOrder(); + var names = []; + + for (let i = 0; i < order.length; i++) { + if (this.pages[order[i]] != undefined) { + var page = this.pages[order[i]]; + names.push({ pageID: order[i], name: page.name }); + } + } + + return names; + } + + getOrder(): string[] { + var hasChanges = false; + for (var pageID in this.pages) { + if (!this.order.includes(pageID)) { + this.order.push(pageID); + hasChanges = true; + } + } + for (let i = 0; i < this.order.length; i++) { + if (this.pages[this.order[i]] == undefined) { + this.order.splice(i, 1); + i--; + hasChanges = true; + } + } + if (hasChanges) this.saveConfig(); + return this.order; + } + + setOrder(order: string[]) { + var newOrder: string[] = []; + + for (let i = 0; i < order.length; i++) if (this.exists(order[i])) newOrder.push(order[i]); + + for (var pageID in this.pages) if (!newOrder.includes(pageID)) newOrder.push(pageID); + + this.order = newOrder; + + for (var serialNumber in Undecked.Decks.decks) Undecked.Decks.decks[serialNumber].updateAll(); + + Undecked.SocketServer.broadcastTo('home', 'pagelist', this.getNames()); + + this.saveConfig(); + } + + handleOperation( + operation: 'cut' | 'copy' | 'delete' | 'ghost', + originPageID: string, + originX: number, + originY: number, + destinationPageID?: string, + destinationX?: number, + destinationY?: number + ) { + var findKey = (pageID: string, x: number, y: number): Page_Key => { + if (this.exists(pageID)) { + return this.get(pageID).getKey(x, y); + } + + return null; + }; + var setKey = (pageID: string, x: number, y: number, key: Page_Key, force: boolean = false) => { + if (this.exists(pageID)) { + return this.get(pageID).updateKey(x, y, key, '-1', null, force); + } + + return null; + }; + var newKey = (): Page_Key => { + return { + state: { type: 'empty', confirm: false, toggle: false }, + appearence: {}, + actions: { down: {}, up: {}, latch: {}, unlatch: {} }, + id: Undecked.Pages.KeyManager.generateNew() + }; + }; + + var originKey = findKey(originPageID, originX, originY); + + var destinationKey = findKey(destinationPageID, destinationX, destinationY); + var originKeyClone: Page_Key = JSON.parse(JSON.stringify(originKey)); + + if (originKey && originKey.state.type == 'custom') { + switch (operation) { + case 'copy': + //FIXME: For some reason it doesnt copy the actions + if (destinationKey) { + var destinationKeyID = destinationKey.id; + var actions = originKeyClone.actions; + for (var actionsCategory in actions) { + for (var actionID in actions[actionsCategory]) { + actions[actionsCategory][ + actionID + ].id = Undecked.generateRandom(8, (checkValid: string) => { + return actions[actionsCategory][actionID] == undefined; + }); + } + } + + setKey( + destinationPageID, + destinationX, + destinationY, + { + ...originKey, + actions, + id: destinationKeyID + }, + true + ); + } + break; + + case 'cut': + if (destinationKey) { + setKey(originPageID, originX, originY, newKey(), true); + setKey(destinationPageID, destinationX, destinationY, originKeyClone, true); + } + break; + + case 'ghost': + if (destinationKey) { + var originKeyID = originKey.id; + var destinationKeyID = destinationKey.id; + setKey( + destinationPageID, + destinationX, + destinationY, + { + id: destinationKeyID, + appearence: {}, + state: { + type: 'ghost', + toggle: false, + confirm: false, + masterID: originKeyID + }, + actions: { + up: {}, + down: {}, + latch: {}, + unlatch: {} + } + }, + true + ); + + if (originKey.state.ghostIDs == undefined) originKey.state.ghostIDs = []; + originKey.state.ghostIDs.push(destinationKeyID); + } + break; + + case 'delete': + setKey(originPageID, originX, originY, newKey(), true); + break; + } + } + } +} + +var defaultPageConfig: PageManager_Config = { + order: [] +}; + +// export interface PageManager { +// KeyManager: KeyManager; + +// load: (callback: () => void) => void; +// getNames: () => { pageID: string; name: string }[]; +// getOrder: () => string[]; + +// create: (pageName: string, callback?: () => void) => void; +// exists: (pageID: string) => boolean; +// get: (pageID: string) => Page; +// getAll: () => PageManager_Pages; +// getIdByIndex: (index: number) => string; +// getIndexById: (id: string) => number; +// setOrder: (order: string[]) => void; +// handleOperation: ( +// operation: 'cut' | 'copy' | 'delete', +// originPageID: string, +// originX: number, +// originY: number, +// destinationPageID: string, +// destinationX: number, +// destinationY: number +// ) => void; +// } + +export interface PageManager_Config { + order: string[]; +} + +export interface PageManager_Pages { + [id: string]: Page; +} diff --git a/Backend/src/SocketServer.ts b/Backend/src/SocketServer.ts new file mode 100644 index 0000000..c8e7760 --- /dev/null +++ b/Backend/src/SocketServer.ts @@ -0,0 +1,367 @@ +import { Undecked } from './Core'; +import { Log } from './Logger'; +import { Server } from 'http'; +import { Server as SocketIO, Socket } from 'socket.io'; +import { Config } from './FileHandler'; +import { Page_Key, Page_Key_Action } from './Pages/Page'; +import { Action_Settings, Integration_Connection_Field } from './Integrations/IntegrationsManager'; +import { EditorAPI_Field } from './Integrations/EditorAPI'; + +declare var Undecked: Undecked; +declare var Config: Config; + +export class SocketServer { + io: Socket; + constructor() {} + + start(server: Server, callback: () => void) { + Log('info', 'Preparing SocketServer'); + this.io = require('socket.io')(server); + + this.listeners(); + + var port = Config.ports.http; + server.listen(port, () => { + Log('info', `WebServer & SocketServer running at port ${port}`); + callback(); + }); + } + + listeners() { + this.io.on('connection', (socket: Socket) => { + Log('info', 'Client connected'); + + socket.on('init', (page: 'home') => { + if ( + [ + 'home' + ].includes(page) + ) { + socket.join(page); + + switch (page) { + case 'home': + socket.emit('quality', Undecked.quality); + socket.emit('pagelist', Undecked.Pages.getNames()); + break; + } + } + }); + + socket.on('page', (query: string, ...args: any) => { + switch (query) { + case 'request': + var pageID: string = args[0]; + var callback: (err?: string, page?: any) => void = args[1]; + + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + + callback(null, page.export()); + } else callback('Page does not exist.'); + break; + + case 'setname': + var pageID: string = args[0]; + var newName: string = args[1]; + + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + page.setName(newName); + } + break; + + case 'setkey': + var pageID: string = args[0]; + var x: string = args[1]; + var y: string = args[2]; + var key: Page_Key = args[3]; + var responseToken: string = args[4]; + + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + page.updateKey(x, y, key, responseToken); + } + break; + + case 'getkey': + var pageID: string = args[0]; + var x: string = args[1]; + var y: string = args[2]; + var getkey_callback: (key: Page_Key) => void = args[3]; + + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + if (page.hasKey(x, y)) getkey_callback(page.requestKey(x, y)); + } + break; + + case 'executekey': + var pageID: string = args[0]; + var x: string = args[1]; + var y: string = args[2]; + + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + if (page.hasKey(x, y)) { + if ( + page.getKey(x, y).actions != undefined && + page.getKey(x, y).actions.up != undefined + ) { + Undecked.Integrations.executeActions(page.getKey(x, y).actions.up, null); + } + } + } + break; + + case 'create': + var pageName: string = args[0]; + + Undecked.Pages.create(pageName, () => + Undecked.SocketServer.broadcastTo('home', 'pagelist', Undecked.Pages.getNames()) + ); + + break; + + case 'setorder': + var order: string[] = args[0]; + if (typeof order.includes == 'function') Undecked.Pages.setOrder(order); + + break; + + case 'operation': + var operation: 'cut' | 'copy' | 'delete' = args[0]; + var originPageID = args[1]; + var originX = args[2]; + var originY = args[3]; + var destinationPageID = args[4]; + var destinationX = args[5]; + var destinationY = args[6]; + Undecked.Pages.handleOperation( + operation, + originPageID, + originX, + originY, + destinationPageID, + destinationX, + destinationY + ); + break; + } + }); + + socket.on('actioneditor', (query: string, ...args: any[]) => { + switch (query) { + case 'start': + var settings: Action_Settings = args[0]; + var callback: (error: string, actionEditorID: string) => void = args[1]; + + var pageID: string = settings.pageID; + var keyX: number = settings.keyX; + var keyY: number = settings.keyY; + + var start = () => { + var response = Undecked.Integrations.startEditor(settings); + callback(response.error, response.actionEditorID); + }; + + var page = Undecked.Pages.get(pageID); + if (page && page.hasKey(keyX, keyY)) { + var key = page.getKey(keyX, keyY); + + if (key.state != undefined && key.state.type == 'ghost') { + if (key.state.masterID != undefined) { + var masterLocation = Undecked.Pages.KeyManager.getLocation(key.state.masterID); + var masterPage = Undecked.Pages.get(masterLocation.pageID); + if (masterPage) { + var masterKey = masterPage.getKey(masterLocation.x, masterLocation.y); + if ( + masterKey.state != undefined && + masterKey.state.ghostIDs != undefined && + masterKey.state.ghostIDs.includes(key.id) + ) { + settings.pageID = masterLocation.pageID; + settings.keyX = masterLocation.x; + settings.keyY = masterLocation.y; + start(); + } + } + } + } else start(); + } + + break; + + case 'remove': + var pageID: string = args[0]; + var x: string = args[1]; + var y: string = args[2]; + var actionInstanceID: string = args[3]; + var type: string = args[4]; + + var remove = (key: Page_Key) => { + if (key.actions != undefined && key.actions[type] != undefined) { + if (key.actions[type][actionInstanceID] != undefined) { + delete key.actions[type][actionInstanceID]; + page.save(); + } + } + }; + + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + if (page.hasKey(x, y)) { + var key = page.getKey(x, y); + + if (key.state != undefined && key.state.type == 'ghost') { + if (key.state.masterID != undefined) { + var masterLocation = Undecked.Pages.KeyManager.getLocation(key.state.masterID); + var masterPage = Undecked.Pages.get(masterLocation.pageID); + if (masterPage) { + var masterKey = masterPage.getKey(masterLocation.x, masterLocation.y); + if ( + masterKey.state != undefined && + masterKey.state.ghostIDs != undefined && + masterKey.state.ghostIDs.includes(key.id) + ) + remove(masterKey); + } + } + } else remove(key); + } + } + break; + + case 'create': + var pageID: string = args[0]; + var x: string = args[1]; + var y: string = args[2]; + var createtype: 'up' | 'down' | 'latch' | 'unlatch' = args[3]; + var integrationID: string = args[4]; + var actionID: string = args[5]; + var createCallback: (action: Page_Key_Action) => void = args[6]; + + var create = (key: Page_Key) => { + if (key.actions == undefined) key.actions = { up: {}, down: {}, latch: {}, unlatch: {} }; + if (key.actions[createtype] == undefined) key.actions[createtype] = {}; + + var newActionInstanceID = Undecked.generateRandom(8, (checkValid: string) => { + return key.actions[createtype][checkValid] == undefined; + }); + key.actions[createtype][newActionInstanceID] = { + integrationID, + actionID, + actionInstanceID: newActionInstanceID, + properties: {}, + logs: [] + }; + + createCallback(key.actions[createtype][newActionInstanceID]); + }; + + if (Undecked.Integrations.exists(integrationID)) { + var integration = Undecked.Integrations.get(integrationID); + if (integration.api.hasAction(actionID)) { + if (Undecked.Pages.exists(pageID)) { + var page = Undecked.Pages.get(pageID); + if (page.hasKey(x, y)) { + var key = page.getKey(x, y); + + if (key.state != undefined && key.state.type == 'ghost') { + if (key.state.masterID != undefined) { + var masterLocation = Undecked.Pages.KeyManager.getLocation( + key.state.masterID + ); + var masterPage = Undecked.Pages.get(masterLocation.pageID); + if (masterPage) { + var masterKey = masterPage.getKey( + masterLocation.x, + masterLocation.y + ); + if ( + masterKey.state != undefined && + masterKey.state.ghostIDs != undefined && + masterKey.state.ghostIDs.includes(key.id) + ) + create(masterKey); + } + } + } else create(key); + } + } + } + } + + break; + + case 'instance': + var actionEditorID = args[0]; + var instanceQuery = args[1]; + + if (Undecked.Integrations.editorExists(actionEditorID)) { + var EditorWrapper = Undecked.Integrations.getEditor(actionEditorID); + + switch (instanceQuery) { + case 'ready': + EditorWrapper.ready(); + break; + + case 'fields': + var fields: EditorAPI_Field[] = args[2]; + if (typeof EditorWrapper.editor._change == 'function') + EditorWrapper.editor._change(fields); + break; + + case 'close': + EditorWrapper.destroy(); + break; + } + } + + break; + } + }); + + socket.on('connections', (query: string, ...args: any[]) => { + switch (query) { + case 'request': + var integrationID: string = args[0]; + var connectionType: string = args[1]; + var requestCallback: (fields: Integration_Connection_Field[]) => void = args[2]; + + var fields = Undecked.Connections.getConnectionRequestData(integrationID, connectionType); + requestCallback(fields); + + break; + + case 'create': + var integrationID: string = args[0]; + var connectionType: string = args[1]; + var properties = args[2]; + var createCallback: (succeed: boolean, errormessage?: string) => void = args[3]; + + Undecked.Connections.create(integrationID, connectionType, properties, createCallback); + + break; + + default: + break; + } + }); + }); + } + + broadcastTo(group: string, header: string, ...args: any[]) { + if (this.io) this.io.to(group).emit(header, ...args); + } + + broadcast(header: string, ...args: any[]) { + if (this.io) this.io.emit(header, ...args); + } +} + +// export interface SocketServer { +// start: (server: Server, callback: () => void) => void; +// broadcastTo: (group: string, header: string, ...args: any[]) => void; +// broadcast: (header: string, ...args: any[]) => void; +// } diff --git a/Backend/src/WebServer.ts b/Backend/src/WebServer.ts new file mode 100644 index 0000000..a25216a --- /dev/null +++ b/Backend/src/WebServer.ts @@ -0,0 +1,88 @@ +import { Undecked } from './Core'; +import { Log } from './Logger'; +import { Config } from './FileHandler'; +import { Application, Request } from 'express'; +import * as exphbs from 'express-handlebars' +import * as Express from 'express'; +import * as path from 'path' +import { pathExists } from 'fs-extra'; +import { Server } from 'http'; + +declare var Undecked: Undecked; +declare var Config: Config; + +export class WebServer { + app: Application; + constructor() { + this.app = Express(); + + var hbs = exphbs.create({ defaultLayout: 'main/index' }); + this.app.engine('handlebars', hbs.engine); + this.app.set('view engine', 'handlebars'); + this.app.set('views', path.join(__filename, '..', '..', '..', 'Frontend', 'pages')); + this.app.set('view options', { layout: 'main/index' }); + + var staticDir = path.join(__filename, '..', '..', '..', 'Static'); + this.app.use('/stc', Express.static(staticDir)); + + this.app.use('/favicon.ico', Express.static(path.join(staticDir, 'logo', '256.ico'))); + + this.app.get( + [ + '/pd/:pagename/:type', + '/ld/:pagename/:type' + ], + (req, res, next) => { + var pagename: string = req.params.pagename; + var type: 'style' | 'script' = req.params.type; + + var pagePath = req.url.startsWith('/pd') + ? path.join(__filename, '..', '..', '..', 'Frontend', 'pages', pagename) + : path.join(__filename, '..', '..', '..', 'Frontend', 'pages', 'layouts', pagename); + + + switch (type) { + case 'style': + var stylePath = path.join(pagePath, 'style.css'); + pathExists(stylePath, (err, exists) => { + if (exists == true) res.sendFile(stylePath); + else next(); + }); + break; + + case 'script': + var stylePath = path.join(pagePath, 'script.js'); + pathExists(stylePath, (err, exists) => { + if (exists == true) res.sendFile(stylePath); + else next(); + }); + break; + + default: + next(); + break; + } + } + ); + + this.app.get('/*', (req, res) => { + res.render('home', { + icons: Undecked.Icons.getList(), + actions: Undecked.Integrations.getActions(), + connections: Undecked.Integrations.getConnections(), + connected: Undecked.Connections.getList() + }); + }); + } + + start(callback: (server: Server) => void) { + Log('info', 'Preparing WebServer'); + + var server = require('http').Server(this.app); + callback(server); + } +} + +// export interface WebServer { +// start: (callback: (server: Server) => void) => void; +// } diff --git a/Backend/test.js b/Backend/test.js new file mode 100644 index 0000000..0e6f44d --- /dev/null +++ b/Backend/test.js @@ -0,0 +1,5 @@ +const StreamDeck = require('@elgato-stream-deck/node'); + +var decks = StreamDeck.listStreamDecks(); + +console.log({ decks }); diff --git a/Backend/tsconfig.json b/Backend/tsconfig.json new file mode 100644 index 0000000..524c772 --- /dev/null +++ b/Backend/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "watch": true, + "outDir": "dist", + "sourceMap": true, + "noImplicitUseStrict": true + }, + "include": [ + "./src/**/*.ts" + ], + "exclude": [ + "./src/Integrations/buildin/**/node_modules" + ] +} \ No newline at end of file diff --git a/Frontend/gulpfile.js b/Frontend/gulpfile.js new file mode 100644 index 0000000..2817e18 --- /dev/null +++ b/Frontend/gulpfile.js @@ -0,0 +1,101 @@ +const gulp = require('gulp'); +const path = require('path'); +const fs = require('fs-extra'); +const CC = require('@meesvdw/coloredconsole'); +const ts = require('gulp-typescript'); +const concat = require('gulp-concat'); +const cleanCSS = require('gulp-clean-css'); +const uglify = require('gulp-uglify'); +const rename = require('gulp-rename'); +const { argv } = require('process'); +var sass = require('gulp-sass')(require('sass')); +var tap = require('gulp-tap'); +var browserify = require('browserify'); +var buffer = require('gulp-buffer'); + +exports.default = () => { + var pageIndex = argv.includes('-page') ? argv.indexOf('-page') : null; + var pageName = pageIndex != null && pageIndex + 1 < argv.length ? argv[pageIndex + 1] : null; + + var layoutIndex = argv.includes('-layout') ? argv.indexOf('-layout') : null; + var layoutName = layoutIndex != null && layoutIndex + 1 < argv.length ? argv[layoutIndex + 1] : null; + + if (pageName == null && layoutName == null) + return console.log( + CC.red + + CC.bright + + `\n\nIncorrect syntax. Please use '-page [pagename]' or '-layout [layoutname]'\n\n` + + CC.reset + ); + + var directoryType = pageName ? 'Page' : 'Layout'; + var directoryName = pageName ? pageName : layoutName; + var directoryQuery = pageName ? pageName : `layouts/${layoutName}`; + + var basePath = path.join(__filename, '..', 'pages', directoryQuery); + fs.pathExists(basePath, (err, exists) => { + if (exists == false) + return console.log( + CC.red + CC.bright + `\n\n${directoryType} ${directoryName} does not exist\n\n` + CC.reset + ); + else { + buildTypescript(basePath, () => + buildSass(basePath, () => { + console.log(CC.green + CC.bright + `Watcher running` + CC.reset); + gulp.watch( + [ + `pages/${directoryQuery}/ts/**/*.ts` + ], + (finish) => { + console.log(CC.blue + CC.bright + `Typescript change detected` + CC.reset); + buildTypescript(basePath, finish); + } + ); + + gulp.watch( + [ + `pages/${directoryQuery}/sass/**/*.scss` + ], + (finish) => { + console.log(CC.magenta + CC.bright + `Sass change detected` + CC.reset); + buildSass(basePath, finish); + } + ); + }) + ); + } + }); +}; + +function buildTypescript(basePath, cb) { + var tsProject = ts.createProject(path.join(basePath, 'tsconfig.json')); + gulp + .src(path.join(basePath, 'ts', '**', '*.ts')) + // .pipe( + // tap(function(file) { + // file.contents = browserify(file.path, { debug: true }).bundle(); + // }) + // ) + // .pipe(buffer()) + .pipe(tsProject()) + .js.pipe(concat(`script.js`)) + .pipe(rename(`script.js`)) + .pipe(uglify()) + .pipe(gulp.dest(basePath)) + .on('end', () => { + cb(); + }); +} + +function buildSass(basePath, cb) { + gulp + .src(path.join(basePath, 'sass', '**', '*.scss')) + .pipe(sass().on('error', sass.logError)) + .pipe(cleanCSS({ compatibility: 'ie8' })) + .pipe(concat(`style.css`)) + .pipe(rename(`style.css`)) + .pipe(gulp.dest(basePath)) + .on('end', () => { + cb(); + }); +} diff --git a/Frontend/package-lock.json b/Frontend/package-lock.json new file mode 100644 index 0000000..f0272fa --- /dev/null +++ b/Frontend/package-lock.json @@ -0,0 +1,10597 @@ +{ + "name": "home", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "home", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@meesvdw/coloredconsole": "^1.0.3", + "browserify": "^17.0.0", + "fs-extra": "^10.0.1", + "gulp": "^4.0.2", + "gulp-buffer": "^0.0.2", + "gulp-clean-css": "^4.3.0", + "gulp-concat": "^2.6.1", + "gulp-rename": "^2.0.0", + "gulp-sass": "^5.1.0", + "gulp-tap": "^2.0.0", + "gulp-typescript": "^6.0.0-alpha.1", + "gulp-uglify": "^3.0.2", + "sass": "^1.49.11", + "tsify": "^5.0.4", + "watchify": "^4.0.0" + }, + "devDependencies": { + "@types/node": "^17.0.23" + } + }, + "node_modules/@meesvdw/coloredconsole": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@meesvdw/coloredconsole/-/coloredconsole-1.0.3.tgz", + "integrity": "sha512-MQQULCqGb6WtDazi49p0qmU4kKDGxkwI2TG5PIa1224aOMLjVFeXqp3f45LkDBTJ59wIUOguTSafmoqv0gI9IQ==" + }, + "node_modules/@types/node": { + "version": "17.0.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz", + "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==", + "dev": true + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dependencies": { + "ansi-wrap": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "dependencies": { + "buffer-equal": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", + "dependencies": { + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", + "dependencies": { + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", + "dependencies": { + "array-slice": "^1.0.0", + "is-number": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-initial/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "dependencies": { + "is-number": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-last/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "dependencies": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async-done": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, + "node_modules/async-settle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", + "dependencies": { + "async-done": "^1.2.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "dependencies": { + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "node_modules/browser-pack": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", + "dependencies": { + "combine-source-map": "~0.8.0", + "defined": "^1.0.0", + "JSONStream": "^1.0.3", + "safe-buffer": "^5.1.1", + "through2": "^2.0.0", + "umd": "^3.0.0" + }, + "bin": { + "browser-pack": "bin/cmd.js" + } + }, + "node_modules/browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "dependencies": { + "resolve": "^1.17.0" + } + }, + "node_modules/browserify": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", + "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", + "dependencies": { + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^2.0.0", + "browserify-zlib": "~0.2.0", + "buffer": "~5.2.1", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.1", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^3.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.2.1", + "JSONStream": "^1.0.3", + "labeled-stream-splicer": "^2.0.0", + "mkdirp-classic": "^0.5.2", + "module-deps": "^6.2.3", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "^1.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum-object": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^3.0.0", + "stream-http": "^3.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.12.0", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "browserify": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cached-path-relative": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", + "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==" + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" + }, + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "dependencies": { + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combine-source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", + "dependencies": { + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/concat-with-sourcemaps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "node_modules/convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=" + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-props": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", + "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", + "dependencies": { + "each-props": "^1.3.2", + "is-plain-object": "^5.0.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==" + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "dependencies": { + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + }, + "node_modules/deps-sort": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", + "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", + "dependencies": { + "JSONStream": "^1.0.3", + "shasum-object": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" + }, + "bin": { + "deps-sort": "bin/cmd.js" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dependencies": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "dependencies": { + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" + } + }, + "node_modules/each-props/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.2.tgz", + "integrity": "sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w==", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.59", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.59.tgz", + "integrity": "sha512-cOgyhW0tIJyQY1Kfw6Kr0viu9ZlUctVchRMZ7R0HiH3dxTSp5zJDLecwxUqPUrGKMsgBI1wd1FL+d9Jxfi4cLw==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "dependencies": { + "type": "^2.5.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "dependencies": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fast-levenshtein": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", + "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dependencies": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fined/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs-extra": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "dependencies": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" + }, + "node_modules/get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "dependencies": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-stream/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-stream/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", + "dependencies": { + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", + "object.defaults": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-watcher/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/glob-watcher/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/glob-watcher/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/glob-watcher/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-watcher/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/glob-watcher/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glogg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "dependencies": { + "sparkles": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/gulp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "dependencies": { + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", + "vinyl-fs": "^3.0.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gulp-buffer": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/gulp-buffer/-/gulp-buffer-0.0.2.tgz", + "integrity": "sha1-r4G0NGEBc2tJlC7GyfqGf/5zcDY=", + "dependencies": { + "through2": "~0.4.0" + } + }, + "node_modules/gulp-buffer/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "node_modules/gulp-buffer/node_modules/object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" + }, + "node_modules/gulp-buffer/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/gulp-buffer/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "node_modules/gulp-buffer/node_modules/through2": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", + "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=", + "dependencies": { + "readable-stream": "~1.0.17", + "xtend": "~2.1.1" + } + }, + "node_modules/gulp-buffer/node_modules/xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/gulp-clean-css": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gulp-clean-css/-/gulp-clean-css-4.3.0.tgz", + "integrity": "sha512-mGyeT3qqFXTy61j0zOIciS4MkYziF2U594t2Vs9rUnpkEHqfu6aDITMp8xOvZcvdX61Uz3y1mVERRYmjzQF5fg==", + "dependencies": { + "clean-css": "4.2.3", + "plugin-error": "1.0.1", + "through2": "3.0.1", + "vinyl-sourcemaps-apply": "0.2.1" + } + }, + "node_modules/gulp-clean-css/node_modules/through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "dependencies": { + "readable-stream": "2 || 3" + } + }, + "node_modules/gulp-cli": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", + "dependencies": { + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.4.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.2.0", + "yargs": "^7.1.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gulp-concat": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", + "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", + "dependencies": { + "concat-with-sourcemaps": "^1.0.0", + "through2": "^2.0.0", + "vinyl": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gulp-rename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-2.0.0.tgz", + "integrity": "sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/gulp-sass": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-5.1.0.tgz", + "integrity": "sha512-7VT0uaF+VZCmkNBglfe1b34bxn/AfcssquLKVDYnCDJ3xNBaW7cUuI3p3BQmoKcoKFrs9jdzUxyb+u+NGfL4OQ==", + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "picocolors": "^1.0.0", + "plugin-error": "^1.0.1", + "replace-ext": "^2.0.0", + "strip-ansi": "^6.0.1", + "vinyl-sourcemaps-apply": "^0.2.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/gulp-sass/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/gulp-sass/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/gulp-sass/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gulp-tap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/gulp-tap/-/gulp-tap-2.0.0.tgz", + "integrity": "sha512-U5/v1bTozx672QHzrvzPe6fPl2io7Wqyrx2y30AG53eMU/idH4BrY/b2yikOkdyhjDqGgPoMUMnpBg9e9LK8Nw==", + "dependencies": { + "through2": "^3.0.1" + } + }, + "node_modules/gulp-tap/node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, + "node_modules/gulp-typescript": { + "version": "6.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-6.0.0-alpha.1.tgz", + "integrity": "sha512-KoT0TTfjfT7w3JItHkgFH1T/zK4oXWC+a8xxKfniRfVcA0Fa1bKrIhztYelYmb+95RB80OLMBreknYkdwzdi2Q==", + "dependencies": { + "ansi-colors": "^4.1.1", + "plugin-error": "^1.0.1", + "source-map": "^0.7.3", + "through2": "^3.0.1", + "vinyl": "^2.2.0", + "vinyl-fs": "^3.0.3" + }, + "engines": { + "node": ">= 8" + }, + "peerDependencies": { + "typescript": "~2.7.1 || >=2.8.0-dev || >=2.9.0-dev || ~3.0.0 || >=3.0.0-dev || >=3.1.0-dev || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.7.0-dev " + } + }, + "node_modules/gulp-typescript/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/gulp-typescript/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/gulp-typescript/node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, + "node_modules/gulp-uglify": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-3.0.2.tgz", + "integrity": "sha512-gk1dhB74AkV2kzqPMQBLA3jPoIAPd/nlNzP2XMDSG8XZrqnlCiDGAqC+rZOumzFvB5zOphlFh6yr3lgcAb/OOg==", + "dependencies": { + "array-each": "^1.0.1", + "extend-shallow": "^3.0.2", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "isobject": "^3.0.1", + "make-error-cause": "^1.1.1", + "safe-buffer": "^5.1.2", + "through2": "^2.0.0", + "uglify-js": "^3.0.5", + "vinyl-sourcemaps-apply": "^0.2.0" + } + }, + "node_modules/gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dependencies": { + "glogg": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "dependencies": { + "sparkles": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "node_modules/htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "dependencies": { + "source-map": "~0.5.3" + } + }, + "node_modules/insert-module-globals": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", + "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", + "dependencies": { + "acorn-node": "^1.5.2", + "combine-source-map": "^0.8.0", + "concat-stream": "^1.6.1", + "is-buffer": "^1.1.0", + "JSONStream": "^1.0.3", + "path-is-absolute": "^1.0.1", + "process": "~0.11.0", + "through2": "^2.0.0", + "undeclared-identifiers": "^1.1.2", + "xtend": "^4.0.0" + }, + "bin": { + "insert-module-globals": "bin/cmd.js" + } + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", + "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "node_modules/is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/just-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", + "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==" + }, + "node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/labeled-stream-splicer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", + "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", + "dependencies": { + "inherits": "^2.0.1", + "stream-splicer": "^2.0.0" + } + }, + "node_modules/last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", + "dependencies": { + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "dependencies": { + "flush-write-stream": "^1.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "dependencies": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/liftoff/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "node_modules/lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=" + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "node_modules/make-error-cause": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz", + "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=", + "dependencies": { + "make-error": "^1.2.0" + } + }, + "node_modules/make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/make-iterator/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "dependencies": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/matchdep/node_modules/findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/matchdep/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/module-deps": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", + "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", + "dependencies": { + "browser-resolve": "^2.0.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.2.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "JSONStream": "^1.0.3", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "module-deps": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "optional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dependencies": { + "once": "^1.3.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dependencies": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + }, + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/outpipe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", + "integrity": "sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I=", + "dependencies": { + "shell-quote": "^1.4.2" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "dependencies": { + "path-platform": "~0.11.15" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "dependencies": { + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dependencies": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "dependencies": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "dependencies": { + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "dependencies": { + "value-or-function": "^3.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated" + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass": { + "version": "1.49.11", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.11.tgz", + "integrity": "sha512-wvS/geXgHUGs6A/4ud5BFIWKO1nKd7wYIGimDk4q4GFkJicILActpv9ueMT4eRGSsp1BdKHuw1WwAHXbhsJELQ==", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-greatest-satisfied-range": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "dependencies": { + "sver-compat": "^1.5.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shasum-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", + "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", + "dependencies": { + "fast-safe-stringify": "^2.0.7" + } + }, + "node_modules/shell-quote": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated" + }, + "node_modules/sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==" + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "engines": { + "node": "*" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dependencies": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==" + }, + "node_modules/stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, + "node_modules/stream-http/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "node_modules/stream-splicer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", + "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "dependencies": { + "minimist": "^1.1.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sver-compat": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "dependencies": { + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "dependencies": { + "acorn-node": "^1.2.0" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "dependencies": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "dependencies": { + "process": "~0.11.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "dependencies": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "dependencies": { + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/tsconfig": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-5.0.3.tgz", + "integrity": "sha1-X0J45wGACWeo/Dg/0ZZIh48qbjo=", + "dependencies": { + "any-promise": "^1.3.0", + "parse-json": "^2.2.0", + "strip-bom": "^2.0.0", + "strip-json-comments": "^2.0.0" + } + }, + "node_modules/tsify": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/tsify/-/tsify-5.0.4.tgz", + "integrity": "sha512-XAZtQ5OMPsJFclkZ9xMZWkSNyMhMxEPsz3D2zu79yoKorH9j/DT4xCloJeXk5+cDhosEibu4bseMVjyPOAyLJA==", + "dependencies": { + "convert-source-map": "^1.1.0", + "fs.realpath": "^1.0.0", + "object-assign": "^4.1.0", + "semver": "^6.1.0", + "through2": "^2.0.0", + "tsconfig": "^5.0.3" + }, + "engines": { + "node": ">=0.12" + }, + "peerDependencies": { + "browserify": ">= 10.x", + "typescript": ">= 2.8" + } + }, + "node_modules/tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "node_modules/typescript": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uglify-js": { + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.3.tgz", + "integrity": "sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==", + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/umd": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", + "bin": { + "umd": "bin/cli.js" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/undeclared-identifiers": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", + "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", + "dependencies": { + "acorn-node": "^1.3.0", + "dash-ast": "^1.0.0", + "get-assigned-identifiers": "^1.2.0", + "simple-concat": "^1.0.0", + "xtend": "^4.0.1" + }, + "bin": { + "undeclared-identifiers": "bin.js" + } + }, + "node_modules/undertaker": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", + "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", + "dependencies": { + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "bach": "^1.0.0", + "collection-map": "^1.0.0", + "es6-weak-map": "^2.0.1", + "fast-levenshtein": "^1.0.0", + "last-run": "^1.1.0", + "object.defaults": "^1.0.0", + "object.reduce": "^1.0.0", + "undertaker-registry": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "dependencies": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated" + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dependencies": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "dependencies": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-sourcemap/node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/vinyl-sourcemap/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-sourcemap/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", + "dependencies": { + "source-map": "^0.5.1" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, + "node_modules/watchify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/watchify/-/watchify-4.0.0.tgz", + "integrity": "sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==", + "dependencies": { + "anymatch": "^3.1.0", + "browserify": "^17.0.0", + "chokidar": "^3.4.0", + "defined": "^1.0.0", + "outpipe": "^1.1.0", + "through2": "^4.0.2", + "xtend": "^4.0.2" + }, + "bin": { + "watchify": "bin/cmd.js" + }, + "engines": { + "node": ">= 8.10.0" + } + }, + "node_modules/watchify/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/watchify/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + }, + "node_modules/which-typed-array": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", + "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" + }, + "node_modules/yargs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "dependencies": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.1" + } + }, + "node_modules/yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "dependencies": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } + } + }, + "dependencies": { + "@meesvdw/coloredconsole": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@meesvdw/coloredconsole/-/coloredconsole-1.0.3.tgz", + "integrity": "sha512-MQQULCqGb6WtDazi49p0qmU4kKDGxkwI2TG5PIa1224aOMLjVFeXqp3f45LkDBTJ59wIUOguTSafmoqv0gI9IQ==" + }, + "@types/node": { + "version": "17.0.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz", + "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==", + "dev": true + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "requires": { + "ansi-wrap": "^0.1.0" + } + }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "requires": { + "buffer-equal": "^1.0.0" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", + "requires": { + "make-iterator": "^1.0.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", + "requires": { + "make-iterator": "^1.0.0" + } + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=" + }, + "array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", + "requires": { + "array-slice": "^1.0.0", + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" + } + } + }, + "array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "requires": { + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" + } + } + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==" + }, + "array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "requires": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + } + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "async-done": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, + "async-settle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", + "requires": { + "async-done": "^1.2.2" + } + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, + "bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "requires": { + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-pack": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", + "requires": { + "combine-source-map": "~0.8.0", + "defined": "^1.0.0", + "JSONStream": "^1.0.3", + "safe-buffer": "^5.1.1", + "through2": "^2.0.0", + "umd": "^3.0.0" + } + }, + "browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "requires": { + "resolve": "^1.17.0" + } + }, + "browserify": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", + "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", + "requires": { + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^2.0.0", + "browserify-zlib": "~0.2.0", + "buffer": "~5.2.1", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.1", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^3.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.2.1", + "JSONStream": "^1.0.3", + "labeled-stream-splicer": "^2.0.0", + "mkdirp-classic": "^0.5.2", + "module-deps": "^6.2.3", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "^1.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum-object": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^3.0.0", + "stream-http": "^3.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.12.0", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "requires": { + "pako": "~1.0.5" + } + }, + "buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=" + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cached-path-relative": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", + "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + } + } + }, + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" + }, + "cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "requires": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "collection-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "requires": { + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, + "combine-source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", + "requires": { + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" + } + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=" + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "copy-props": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", + "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", + "requires": { + "each-props": "^1.3.2", + "is-plain-object": "^5.0.0" + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==" + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "requires": { + "kind-of": "^5.0.2" + } + }, + "default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + }, + "deps-sort": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", + "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", + "requires": { + "JSONStream": "^1.0.3", + "shasum-object": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" + } + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" + }, + "detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "requires": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + } + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "requires": { + "readable-stream": "^2.0.2" + } + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "requires": { + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.2.tgz", + "integrity": "sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.59", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.59.tgz", + "integrity": "sha512-cOgyhW0tIJyQY1Kfw6Kr0viu9ZlUctVchRMZ7R0HiH3dxTSp5zJDLecwxUqPUrGKMsgBI1wd1FL+d9Jxfi4cLw==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "requires": { + "type": "^2.5.0" + }, + "dependencies": { + "type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + } + } + }, + "fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "requires": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + } + }, + "fast-levenshtein": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", + "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=" + }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==" + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "requires": { + "for-in": "^1.0.1" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs-extra": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "requires": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "requires": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-watcher": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", + "requires": { + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", + "object.defaults": "^1.1.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "glogg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "requires": { + "sparkles": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "gulp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "requires": { + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", + "vinyl-fs": "^3.0.0" + } + }, + "gulp-buffer": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/gulp-buffer/-/gulp-buffer-0.0.2.tgz", + "integrity": "sha1-r4G0NGEBc2tJlC7GyfqGf/5zcDY=", + "requires": { + "through2": "~0.4.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "through2": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", + "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=", + "requires": { + "readable-stream": "~1.0.17", + "xtend": "~2.1.1" + } + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "requires": { + "object-keys": "~0.4.0" + } + } + } + }, + "gulp-clean-css": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gulp-clean-css/-/gulp-clean-css-4.3.0.tgz", + "integrity": "sha512-mGyeT3qqFXTy61j0zOIciS4MkYziF2U594t2Vs9rUnpkEHqfu6aDITMp8xOvZcvdX61Uz3y1mVERRYmjzQF5fg==", + "requires": { + "clean-css": "4.2.3", + "plugin-error": "1.0.1", + "through2": "3.0.1", + "vinyl-sourcemaps-apply": "0.2.1" + }, + "dependencies": { + "through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "requires": { + "readable-stream": "2 || 3" + } + } + } + }, + "gulp-cli": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", + "requires": { + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.4.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.2.0", + "yargs": "^7.1.0" + } + }, + "gulp-concat": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", + "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", + "requires": { + "concat-with-sourcemaps": "^1.0.0", + "through2": "^2.0.0", + "vinyl": "^2.0.0" + } + }, + "gulp-rename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-2.0.0.tgz", + "integrity": "sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ==" + }, + "gulp-sass": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-5.1.0.tgz", + "integrity": "sha512-7VT0uaF+VZCmkNBglfe1b34bxn/AfcssquLKVDYnCDJ3xNBaW7cUuI3p3BQmoKcoKFrs9jdzUxyb+u+NGfL4OQ==", + "requires": { + "lodash.clonedeep": "^4.5.0", + "picocolors": "^1.0.0", + "plugin-error": "^1.0.1", + "replace-ext": "^2.0.0", + "strip-ansi": "^6.0.1", + "vinyl-sourcemaps-apply": "^0.2.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==" + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "gulp-tap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/gulp-tap/-/gulp-tap-2.0.0.tgz", + "integrity": "sha512-U5/v1bTozx672QHzrvzPe6fPl2io7Wqyrx2y30AG53eMU/idH4BrY/b2yikOkdyhjDqGgPoMUMnpBg9e9LK8Nw==", + "requires": { + "through2": "^3.0.1" + }, + "dependencies": { + "through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + } + } + }, + "gulp-typescript": { + "version": "6.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-6.0.0-alpha.1.tgz", + "integrity": "sha512-KoT0TTfjfT7w3JItHkgFH1T/zK4oXWC+a8xxKfniRfVcA0Fa1bKrIhztYelYmb+95RB80OLMBreknYkdwzdi2Q==", + "requires": { + "ansi-colors": "^4.1.1", + "plugin-error": "^1.0.1", + "source-map": "^0.7.3", + "through2": "^3.0.1", + "vinyl": "^2.2.0", + "vinyl-fs": "^3.0.3" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + }, + "through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + } + } + }, + "gulp-uglify": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-3.0.2.tgz", + "integrity": "sha512-gk1dhB74AkV2kzqPMQBLA3jPoIAPd/nlNzP2XMDSG8XZrqnlCiDGAqC+rZOumzFvB5zOphlFh6yr3lgcAb/OOg==", + "requires": { + "array-each": "^1.0.1", + "extend-shallow": "^3.0.2", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "isobject": "^3.0.1", + "make-error-cause": "^1.1.1", + "safe-buffer": "^5.1.2", + "through2": "^2.0.0", + "uglify-js": "^3.0.5", + "vinyl-sourcemaps-apply": "^0.2.0" + } + }, + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "requires": { + "glogg": "^1.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + }, + "has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "requires": { + "sparkles": "^1.0.0" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=" + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "requires": { + "source-map": "~0.5.3" + } + }, + "insert-module-globals": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", + "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", + "requires": { + "acorn-node": "^1.5.2", + "combine-source-map": "^0.8.0", + "concat-stream": "^1.6.1", + "is-buffer": "^1.1.0", + "JSONStream": "^1.0.3", + "path-is-absolute": "^1.0.1", + "process": "~0.11.0", + "through2": "^2.0.0", + "undeclared-identifiers": "^1.1.2", + "xtend": "^4.0.0" + } + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + } + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + } + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + } + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=" + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", + "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0" + } + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=" + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "just-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", + "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==" + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + }, + "labeled-stream-splicer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", + "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", + "requires": { + "inherits": "^2.0.1", + "stream-splicer": "^2.0.0" + } + }, + "last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", + "requires": { + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" + } + }, + "lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "requires": { + "readable-stream": "^2.0.5" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, + "lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "requires": { + "flush-write-stream": "^1.0.2" + } + }, + "liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "requires": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=" + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "make-error-cause": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz", + "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=", + "requires": { + "make-error": "^1.2.0" + } + }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "requires": { + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + } + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "requires": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + }, + "dependencies": { + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + } + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "module-deps": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", + "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", + "requires": { + "browser-resolve": "^2.0.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.2.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "JSONStream": "^1.0.3", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==" + }, + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + } + } + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "requires": { + "once": "^1.3.2" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "requires": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "object.reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "requires": { + "readable-stream": "^2.0.1" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "^1.0.0" + } + }, + "outpipe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", + "integrity": "sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I=", + "requires": { + "shell-quote": "^1.4.2" + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "requires": { + "path-platform": "~0.11.15" + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==" + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=" + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=" + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "requires": { + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "requires": { + "readable-stream": "^2.0.2" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "requires": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + } + }, + "remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "requires": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==" + }, + "replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "requires": { + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "requires": { + "value-or-function": "^3.0.0" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sass": { + "version": "1.49.11", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.11.tgz", + "integrity": "sha512-wvS/geXgHUGs6A/4ud5BFIWKO1nKd7wYIGimDk4q4GFkJicILActpv9ueMT4eRGSsp1BdKHuw1WwAHXbhsJELQ==", + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "semver-greatest-satisfied-range": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "requires": { + "sver-compat": "^1.5.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shasum-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", + "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", + "requires": { + "fast-safe-stringify": "^2.0.7" + } + }, + "shell-quote": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + }, + "sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==" + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + } + } + }, + "stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "requires": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "requires": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==" + }, + "stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "stream-splicer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", + "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "requires": { + "minimist": "^1.1.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "sver-compat": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "requires": { + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "requires": { + "acorn-node": "^1.2.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "requires": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" + }, + "timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "requires": { + "process": "~0.11.0" + } + }, + "to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "requires": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + } + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "requires": { + "through2": "^2.0.3" + } + }, + "tsconfig": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-5.0.3.tgz", + "integrity": "sha1-X0J45wGACWeo/Dg/0ZZIh48qbjo=", + "requires": { + "any-promise": "^1.3.0", + "parse-json": "^2.2.0", + "strip-bom": "^2.0.0", + "strip-json-comments": "^2.0.0" + } + }, + "tsify": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/tsify/-/tsify-5.0.4.tgz", + "integrity": "sha512-XAZtQ5OMPsJFclkZ9xMZWkSNyMhMxEPsz3D2zu79yoKorH9j/DT4xCloJeXk5+cDhosEibu4bseMVjyPOAyLJA==", + "requires": { + "convert-source-map": "^1.1.0", + "fs.realpath": "^1.0.0", + "object-assign": "^4.1.0", + "semver": "^6.1.0", + "through2": "^2.0.0", + "tsconfig": "^5.0.3" + } + }, + "tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typescript": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", + "peer": true + }, + "uglify-js": { + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.3.tgz", + "integrity": "sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==" + }, + "umd": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==" + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" + }, + "undeclared-identifiers": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", + "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", + "requires": { + "acorn-node": "^1.3.0", + "dash-ast": "^1.0.0", + "get-assigned-identifiers": "^1.2.0", + "simple-concat": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "undertaker": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", + "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", + "requires": { + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "bach": "^1.0.0", + "collection-map": "^1.0.0", + "es6-weak-map": "^2.0.1", + "fast-levenshtein": "^1.0.0", + "last-run": "^1.1.0", + "object.defaults": "^1.0.0", + "object.reduce": "^1.0.0", + "undertaker-registry": "^1.0.0" + } + }, + "undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=" + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + } + } + }, + "unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "requires": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=" + }, + "vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "requires": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + } + }, + "vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "requires": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + } + }, + "vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "requires": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "dependencies": { + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", + "requires": { + "source-map": "^0.5.1" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, + "watchify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/watchify/-/watchify-4.0.0.tgz", + "integrity": "sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==", + "requires": { + "anymatch": "^3.1.0", + "browserify": "^17.0.0", + "chokidar": "^3.4.0", + "defined": "^1.0.0", + "outpipe": "^1.1.0", + "through2": "^4.0.2", + "xtend": "^4.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "requires": { + "readable-stream": "3" + } + } + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + }, + "which-typed-array": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", + "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" + }, + "yargs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.1" + } + }, + "yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "requires": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } + } + } +} diff --git a/Frontend/package.json b/Frontend/package.json new file mode 100644 index 0000000..e58a3be --- /dev/null +++ b/Frontend/package.json @@ -0,0 +1,32 @@ +{ + "name": "home", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "browserify ./ts/*.ts -p [ tsify --noImplicitAny ] > ./dist/bundle.js" + }, + "author": "", + "license": "ISC", + "type": "commonjs", + "dependencies": { + "@meesvdw/coloredconsole": "^1.0.3", + "browserify": "^17.0.0", + "fs-extra": "^10.0.1", + "gulp": "^4.0.2", + "gulp-buffer": "^0.0.2", + "gulp-clean-css": "^4.3.0", + "gulp-concat": "^2.6.1", + "gulp-rename": "^2.0.0", + "gulp-sass": "^5.1.0", + "gulp-tap": "^2.0.0", + "gulp-typescript": "^6.0.0-alpha.1", + "gulp-uglify": "^3.0.2", + "sass": "^1.49.11", + "tsify": "^5.0.4", + "watchify": "^4.0.0" + }, + "devDependencies": { + "@types/node": "^17.0.23" + } +} diff --git a/Frontend/pages/home/index.handlebars b/Frontend/pages/home/index.handlebars new file mode 100644 index 0000000..7b5c80f --- /dev/null +++ b/Frontend/pages/home/index.handlebars @@ -0,0 +1,416 @@ + + + + + + + + Undecked + + + + + + + +
+
+
Pages
+
Connections
+
Decks
+
+
+
+
+
+ +
+
+ +
+
+ +
+ +
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Empty
+
+
+
Custom
+
+
+
Page Up
+
+
+
Page Down
+
+
+
Current Page
+
+
+
+ +
+
+ Appearence +
+
+ +
+
+
+
Text
+
+ + + +
+
+
+
Offset X
+ + +
+
+
Offset Y
+ + +
+
+
+
+
Background
+ +
+
+
+
Image
+
+
+
+
None
+
+
+
Icon
+
+
+
Upload
+
+
+ +
+
+
+
+ Icons +
+
+ Upload +
+
+
+
+
+
+
+
+ {{#each icons}} +
+ + +
{{this.name}}
+
+ {{/each}} +
+
+
+ Upload +
+
+ +
+
+
Size
+ + +
+
+
Offset X
+ + +
+
+
Offset Y
+ + +
+
+
Rotation
+ + +
+
+ +
+
+
+
+
+ Actions +
+ +
+
+ +
Toggle
+
+
+ +
Confirm
+
+
+
+
+
+
+
Key Up
+
+
+ +
+
+
+
+
Key Latch
+
+
+ +
+
+
+
Key Unlatch
+
+
+ +
+
+
+
+
Key Down
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+ +
+
Connections
+ + + + + + + + {{#each connected}} + + + + + + + {{/each}} +
StatusNameIntegrationDevice Type
+
+
+
+
{{this.name}}{{this.integrationName}}{{this.connectionType}}
+
+
+ {{#each connections}} +
+
{{this.integrationName}}
+
{{this.connectionName}}
+ +
Add
+
+ {{/each}} +
+
+
+
Decks
+
+
+ +
+
+
New Connection
+
+ +
+
+
Cancel
+
Connect
+
+
+
+ +
+
+
+ +
Copy
+ +
+
+C
+
+
+
+ +
Paste
+ +
+
+V
+
+
+
+ +
Cut
+
+
+X
+
+
+
+
+ +
Create ghost
+
+
+G
+
+
+
+
+ +
Get OSC address
+
+
+
+
+ +
Get HTTP trigger address
+
+
+
+ +
+ {{#each actions}} +
+
{{this.integrationName}}
+
{{this.actionName}}
+
+ {{/each}} +
+ + + \ No newline at end of file diff --git a/Frontend/pages/home/package-lock.json b/Frontend/pages/home/package-lock.json new file mode 100644 index 0000000..658d9bf --- /dev/null +++ b/Frontend/pages/home/package-lock.json @@ -0,0 +1,265 @@ +{ + "name": "home", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "home", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "socket.io-client": "^4.4.1" + } + }, + "node_modules/@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.0.0.tgz", + "integrity": "sha512-2pTGuibAXJswAPJjaKisthqS/NOK5ypG4LYT6tEAV0S/mxW0zOIvYvGK0V8w8+SHxAm6vRMSjqSalFXeBAqs+Q==" + }, + "node_modules/backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io-client": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.1.1.tgz", + "integrity": "sha512-V05mmDo4gjimYW+FGujoGmmmxRaDsrVr7AXA3ZIfa04MWM1jOfZfUwou0oNqhNwy/votUDvGDt4JA4QF4e0b4g==", + "dependencies": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "has-cors": "1.1.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~8.2.3", + "xmlhttprequest-ssl": "~2.0.0", + "yeast": "0.1.2" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", + "dependencies": { + "@socket.io/base64-arraybuffer": "~1.0.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + }, + "node_modules/parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + }, + "node_modules/socket.io-client": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.4.1.tgz", + "integrity": "sha512-N5C/L5fLNha5Ojd7Yeb/puKcPWWcoB/A09fEjjNsg91EDVr5twk/OEyO6VT9dlLSUNY85NpW6KBhVMvaLKQ3vQ==", + "dependencies": { + "@socket.io/component-emitter": "~3.0.0", + "backo2": "~1.0.2", + "debug": "~4.3.2", + "engine.io-client": "~6.1.1", + "parseuri": "0.0.6", + "socket.io-parser": "~4.1.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.2.tgz", + "integrity": "sha512-j3kk71QLJuyQ/hh5F/L2t1goqzdTL0gvDzuhTuNSwihfuFUrcSji0qFZmJJPtG6Rmug153eOPsUizeirf1IIog==", + "dependencies": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + }, + "dependencies": { + "@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==" + }, + "@socket.io/component-emitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.0.0.tgz", + "integrity": "sha512-2pTGuibAXJswAPJjaKisthqS/NOK5ypG4LYT6tEAV0S/mxW0zOIvYvGK0V8w8+SHxAm6vRMSjqSalFXeBAqs+Q==" + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "engine.io-client": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.1.1.tgz", + "integrity": "sha512-V05mmDo4gjimYW+FGujoGmmmxRaDsrVr7AXA3ZIfa04MWM1jOfZfUwou0oNqhNwy/votUDvGDt4JA4QF4e0b4g==", + "requires": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "has-cors": "1.1.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~8.2.3", + "xmlhttprequest-ssl": "~2.0.0", + "yeast": "0.1.2" + } + }, + "engine.io-parser": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", + "requires": { + "@socket.io/base64-arraybuffer": "~1.0.2" + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + }, + "parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + }, + "socket.io-client": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.4.1.tgz", + "integrity": "sha512-N5C/L5fLNha5Ojd7Yeb/puKcPWWcoB/A09fEjjNsg91EDVr5twk/OEyO6VT9dlLSUNY85NpW6KBhVMvaLKQ3vQ==", + "requires": { + "@socket.io/component-emitter": "~3.0.0", + "backo2": "~1.0.2", + "debug": "~4.3.2", + "engine.io-client": "~6.1.1", + "parseuri": "0.0.6", + "socket.io-parser": "~4.1.1" + } + }, + "socket.io-parser": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.2.tgz", + "integrity": "sha512-j3kk71QLJuyQ/hh5F/L2t1goqzdTL0gvDzuhTuNSwihfuFUrcSji0qFZmJJPtG6Rmug153eOPsUizeirf1IIog==", + "requires": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1" + } + }, + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "requires": {} + }, + "xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==" + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + } +} diff --git a/Frontend/pages/home/package.json b/Frontend/pages/home/package.json new file mode 100644 index 0000000..d882f58 --- /dev/null +++ b/Frontend/pages/home/package.json @@ -0,0 +1,15 @@ +{ + "name": "home", + "version": "1.0.0", + "description": "", + "main": "script.js", + "type": "module", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "socket.io-client": "^4.4.1" + } +} diff --git a/Frontend/pages/home/sass/ActionDialog.scss b/Frontend/pages/home/sass/ActionDialog.scss new file mode 100644 index 0000000..d3b3bd3 --- /dev/null +++ b/Frontend/pages/home/sass/ActionDialog.scss @@ -0,0 +1,51 @@ +.actionselector { + width: calc(100% - 24px); + margin: 5px 0px; + + &:focus, + &:active { + border-bottom-right-radius: 0px; + border-bottom-left-radius: 0px; + } +} + +.actiondialog { + position: absolute; + border: solid var(--main-color); + border-width: 0px 2px 2px 2px; + border-bottom-left-radius: var(--border-radius); + border-bottom-right-radius: var(--border-radius); + overflow: auto; + display: none; + flex-direction: column; + + .item { + width: calc(100% - 20px); + display: flex; + justify-content: flex-start; + align-items: center; + padding: 5px 10px; + background: var(--main-secondary-color); + border-bottom: 1px solid var(--main-color); + transition-duration: .2s; + cursor: pointer; + font-size: 12px; + + &:last-child { + border-bottom: 0px; + } + + &:hover { + background: var(--main-hover-color); + } + + .integration { + margin-right: 10px; + font-weight: 600; + } + } + + .item.hidden { + display: none; + } +} \ No newline at end of file diff --git a/Frontend/pages/home/sass/ActionEditor.scss b/Frontend/pages/home/sass/ActionEditor.scss new file mode 100644 index 0000000..656483f --- /dev/null +++ b/Frontend/pages/home/sass/ActionEditor.scss @@ -0,0 +1,152 @@ +.actioncontainer { + width: calc(100% - 20px); + margin: 10px 10px 0px 10px; + border-bottom: 1px solid #424242; + padding-bottom: 10px; + + &:last-child { + border-bottom: 0px; + } + + .header { + display: flex; + font-size: 12px; + + .integration { + font-weight: 500; + margin-right: 5px; + } + + .action { + color: #d9d9d9; + width: 100%; + } + + .buttons { + display: flex; + justify-content: center; + align-items: center; + + .btn { + padding: 2px 8px; + border-radius: var(--border-radius); + transition-duration: .2s; + cursor: pointer; + } + + .btn.logs { + background: #707070; + + &:hover { + background: #4b4b4b; + } + } + + .btn.remove { + background: var(--color-red); + margin-left: 5px; + + &:hover { + background: var(--color-red-hover); + } + } + } + } + + .fields { + width: 100%; + + .field { + width: calc(100% - 5px); + display: flex; + justify-content: flex-start; + align-items: center; + margin-left: 5px; + margin-top: 5px; + + .fieldlabel { + font-size: 12px; + white-space: nowrap; + margin-right: 10px; + color: #bfbfbf; + } + + .multiselect { + position: relative; + width: calc(100% - 14px); + margin: 0; + padding: 2px 5px; + + select { + width: calc(100% + 4px); + margin: 0; + padding: 2px 5px; + + &.open { + border-bottom-left-radius: 0px; + border-bottom-right-radius: 0px; + border-color: var(--main-color); + } + } + + + .dropdown { + position: absolute; + top: 25px; + left: 5px; + right: 1px; + height: 300px; + display: none; + + .inner { + width: 100%; + max-height: 300px; + overflow-y: auto; + border: 2px solid var(--main-color); + border-bottom-left-radius: var(--border-radius); + border-bottom-right-radius: var(--border-radius); + + // display: flex; + // justify-content: center; + // align-items: center; + // flex-direction: column; + + .option { + width: calc(100% - 20px); + height: 18px; + padding: 4px 10px; + display: flex; + justify-content: flex-start; + align-items: center; + border-bottom: 1px solid var(--main-color); + background: #323232; + user-select: none; + font-size: 12px; + + &:last-child { + border-bottom: 0px; + } + + input { + width: 18px; + height: 18px; + pointer-events: none; + } + + .text { + margin-left: 10px; + } + } + } + } + } + + input, + select { + width: 100%; + margin: 0px; + padding: 2px 5px; + } + } + } +} \ No newline at end of file diff --git a/Frontend/pages/home/sass/ConnectionDialog.scss b/Frontend/pages/home/sass/ConnectionDialog.scss new file mode 100644 index 0000000..a7af8eb --- /dev/null +++ b/Frontend/pages/home/sass/ConnectionDialog.scss @@ -0,0 +1,78 @@ +.connectiondialog { + position: absolute; + top: 0px; + bottom: 0px; + left: 0px; + right: 0px; + z-index: 3; + + display: none; + justify-content: center; + align-items: center; + + background: #0000005e; + + .dialog { + width: 300px; + padding: 20px; + border-radius: var(--border-radius); + border: 2px solid var(--main-color); + background: var(--panel-color); + + .title { + width: 100%; + font-size: 16px; + } + + .message { + width: 100%; + font-size: 12px; + margin: 5px 0px; + } + + .link { + font-size: 14px; + margin-bottom: 10px; + } + + .fields { + width: 100%; + min-height: 100px; + + .field { + width: calc(100% - 5px); + display: flex; + justify-content: flex-start; + align-items: center; + margin-left: 5px; + margin-top: 5px; + + .fieldlabel { + font-size: 12px; + white-space: nowrap; + margin-right: 10px; + color: #bfbfbf; + } + + input, + select { + width: 100%; + margin: 0px; + padding: 2px 5px; + } + } + } + + .buttons { + width: 100%; + display: flex; + justify-content: flex-end; + margin-top: 10px; + font-size: 12px; + + .secondary { + margin-right: 10px; + } + } + } +} \ No newline at end of file diff --git a/Frontend/pages/home/sass/Connections.scss b/Frontend/pages/home/sass/Connections.scss new file mode 100644 index 0000000..de26824 --- /dev/null +++ b/Frontend/pages/home/sass/Connections.scss @@ -0,0 +1,102 @@ +.connections { + position: absolute; + top: 0px; + bottom: 0px; + left: 0px; + right: 0px; + + display: flex; + justify-content: center; + align-items: center; + + + .connected { + width: calc(80% - 20px); + height: calc(100% - 20px); + padding: 10px; + border-right: 2px solid var(--main-color); + + table { + width: 100%; + + tr { + height: 40px; + } + + th, + td { + text-align: left; + border-bottom: 1px solid #323232; + } + + td { + font-size: 12px; + } + + .status { + width: 100px; + + .statuscontainer { + width: 100%; + height: 100%; + display: flex; + justify-content: flex-start; + align-items: center; + + .value { + width: 15px; + height: 15px; + border: 2px solid #00000044; + border-radius: 100%; + + &.online { + background: green; + } + + &.offline { + background: var(--color-red); + } + } + } + } + + .name {} + + .integration {} + + .type {} + } + } + + .connectionbrowser { + width: calc(20% - 20px); + height: calc(100% - 20px); + min-width: 200px; + padding: 10px; + background: var(--subpanel-color); + + .available { + width: 100%; + display: flex; + justify-content: flex-start; + align-items: center; + transition-duration: .2s; + cursor: pointer; + font-size: 12px; + height: 30px; + border-bottom: 1px solid #323232; + + + + .integration { + margin-right: 10px; + font-weight: 600; + white-space: nowrap; + } + + .connectionName { + width: 100%; + } + } + } +} \ No newline at end of file diff --git a/Frontend/pages/home/sass/ContextMenu.scss b/Frontend/pages/home/sass/ContextMenu.scss new file mode 100644 index 0000000..7f54bda --- /dev/null +++ b/Frontend/pages/home/sass/ContextMenu.scss @@ -0,0 +1,106 @@ +.contextmenu { + position: absolute; + z-index: 10; + min-width: 150px; + + display: none; + // flex-direction: column; + + border: 3px solid var(--main-color); + border-radius: var(--border-radius); + + background: var(--panel-color); + box-shadow: 0px 0px 5px #727272; + overflow: hidden; + + &:first-child { + border-top: 0px; + } + + .item { + width: 100%; + height: 24px; + + + border-top: 1px solid var(--main-hover-color); + cursor: pointer; + transition-duration: .2s; + + position: relative; + + &:hover { + background: var(--main-hover-color); + + img { + filter: grayscale(1); + } + + } + + &.disabled { + opacity: .7; + pointer-events: none; + + img { + filter: grayscale(0); + } + + cursor: not-allowed; + } + + + .content { + position: absolute; + inset: 0px; + + display: flex; + justify-content: flex-start; + align-items: center; + + padding: 0px 5px; + box-sizing: border-box; + + + pointer-events: none; + + img { + width: 14px; + height: 14px; + + + transition-duration: .2s; + filter: grayscale(0); + } + + .title { + margin-left: 5px; + font-size: 9px; + white-space: nowrap; + } + } + + .shortcut { + position: absolute; + inset: 0; + + + pointer-events: none; + + display: flex; + align-items: center; + justify-content: flex-end; + + font-size: 8px; + font-weight: 400; + box-sizing: border-box; + padding-right: 5px; + color: #adadad; + } + } + + .seperator { + width: 100%; + height: 1px; + background: var(--main-color); + } +} \ No newline at end of file diff --git a/Frontend/pages/home/sass/Deck.scss b/Frontend/pages/home/sass/Deck.scss new file mode 100644 index 0000000..721112a --- /dev/null +++ b/Frontend/pages/home/sass/Deck.scss @@ -0,0 +1,75 @@ +.overview { + position: absolute; + top: 0px; + bottom: 0px; + left: 202px; + right: 502px; + + display: flex; + justify-content: center; + align-items: center; + + .deck { + width: 960px; + height: 480px; + + display: flex; + flex-wrap: wrap; + + .group { + display: flex; + + .key { + width: 100px; + height: 100px; + border: 2px solid #ffffff8c; + margin: 8px; + border-radius: var(--border-radius); + overflow: hidden; + transition-duration: .1s; + cursor: pointer; + + canvas { + width: 100%; + height: 100%; + pointer-events: none; + } + + &:hover { + border-color: var(--main-hover-color); + } + } + + .key.selected, + .key.selected:hover { + border-color: var(--main-color); + border-width: 4px; + margin: 6px; + } + + .key.context, + .key.context:hover { + border-color: var(--main-color); + border-width: 2px; + margin: 8px; + } + } + + .group.small { + background: #2a2a2a; + } + + .group.fs { + border-top-left-radius: var(--border-radius); + border-top-right-radius: var(--border-radius); + } + + .group.ls { + border-bottom-left-radius: var(--border-radius); + border-bottom-right-radius: var(--border-radius); + } + + + + } +} \ No newline at end of file diff --git a/Frontend/pages/home/sass/Edit.scss b/Frontend/pages/home/sass/Edit.scss new file mode 100644 index 0000000..9522c04 --- /dev/null +++ b/Frontend/pages/home/sass/Edit.scss @@ -0,0 +1,418 @@ +.editcontainer { + position: absolute; + top: 0px; + bottom: 0px; + right: 0px; + width: 500px; + border-left: 2px solid var(--main-color); + background: var(--subpanel-color); + + .edit { + + .split { + position: absolute; + top: 5px; + bottom: 5px; + left: 5px; + right: 5px; + opacity: 1; + transition-duration: .2s; + + .row { + width: calc(100% - 10px); + margin-top: 5px; + padding: 5px; + background: #363636; + + .label { + color: #fff; + margin: 0 0 5px 0; + font-size: 13px; + border-bottom: 1px solid #525252; + padding-bottom: 4px; + padding-left: 5px; + } + + .inputs { + display: flex; + justify-content: flex-start; + align-items: center; + } + } + + .row75 { + width: 100%; + display: flex; + align-items: flex-start; + + .row { + width: calc(25% - 15px); + margin: 0px 0px 0px 5px; + + &:first-child { + width: calc(75% - 10px); + margin: 0px; + } + } + } + + .buttontype { + width: calc(100% + 10px); + display: flex; + justify-content: center; + align-items: center; + border-bottom: 2px solid var(--main-color); + padding-bottom: 5px; + margin-left: -5px; + + .types { + display: flex; + justify-content: center; + + .buttonitem { + border: solid var(--main-hover-color); + border-width: 2px 2px 2px 0px; + transition-duration: .2s; + padding: 5px 10px; + background: var(--background); + color: #fff; + font-size: 12px; + transition-duration: .2s; + cursor: pointer; + + &:hover { + background: var(--main-hover-color); + } + + &:first-child { + border-left-width: 2px; + border-top-left-radius: var(--border-radius); + border-bottom-left-radius: var(--border-radius); + } + + &:last-child { + border-top-right-radius: var(--border-radius); + border-bottom-right-radius: var(--border-radius); + } + } + + .buttonitem.selected, + .buttonitem.selected:hover { + background: var(--main-color); + border-color: var(--main-color); + } + } + } + + .editinner { + width: 100%; + height: calc(100% - 36px); + overflow-y: auto; + } + + + .container { + // position: absolute; + // top: 0px; + // bottom: 0px; + width: 100%; + } + + .containertitle { + width: calc(100% - 10px); + padding-left: 10px; + margin: 10px 0 5px 0; + + &.checktitle { + display: flex; + + .text { + width: 100%; + } + + .checks { + display: flex; + align-items: center; + + .check { + display: flex; + align-items: center; + margin-left: 10px; + user-select: none; + + input { + width: 18px; + height: 18px; + pointer-events: none; + margin-right: 5px; + } + + .checklabel { + font-size: 12px; + } + + } + } + } + } + + .container.appearence { + // left: 0px; + // right: 50%; + // padding-right: 10px; + + + .advanced { + width: calc(100% + 10px); + display: flex; + align-items: center; + justify-content: space-between; + margin-left: -5px; + margin-top: 5px; + + .subrow { + width: 100%; + display: flex; + align-items: center; + flex-wrap: wrap; + margin: 0px 5px; + + .label { + width: 100%; + color: #a5a5a5; + margin: 0px 0px -3px 5px; + font-size: 10px; + border-bottom: 0px; + padding: 0px; + } + + input[type="range"] { + width: calc(100% - 42px); + margin: 0px; + padding: 0px; + } + + input[type="number"] { + padding: 2px 0px; + width: 30px; + font-size: 10px; + text-align: center; + + &::-webkit-inner-spin-button, + &::-webkit-outer-spin-button { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + margin: 0; + } + } + } + } + + + + .row.text { + .value { + height: 17px; + width: calc(100% - 104px); + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; + } + + .size { + width: 80px; + border-radius: 0px; + border-width: 2px 0px; + } + + .color { + height: 31px; + width: 60px; + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; + } + } + + .row.background { + .color { + height: 31px; + width: 100% + } + } + + .row.image { + // width: 100%; + // height: calc(100% - 72px); + // display: flex; + // justify-content: center; + // align-items: flex-start; + // flex-wrap: wrap; + + .imagemenu { + width: 100%; + display: flex; + justify-content: flex-start; + align-items: center; + + .imagetype { + display: flex; + justify-content: center; + + .selectoritem { + border: solid var(--main-hover-color); + border-width: 2px 2px 2px 0px; + transition-duration: .2s; + padding: 5px 10px; + background: var(--background); + color: #fff; + font-size: 12px; + transition-duration: .2s; + cursor: pointer; + + &:hover { + background: var(--main-hover-color); + } + + &:first-child { + border-left-width: 2px; + border-top-left-radius: var(--border-radius); + border-bottom-left-radius: var(--border-radius); + } + + &:last-child { + border-top-right-radius: var(--border-radius); + border-bottom-right-radius: var(--border-radius); + } + } + + .selectoritem.selected, + .selectoritem.selected:hover { + background: var(--main-color); + border-color: var(--main-color); + } + } + + .info { + width: 100%; + height: 28px; + margin-left: 10px; + + .infopanel { + width: 100%; + height: 100%; + display: none; + } + + .infopanel.selected { + display: block; + } + } + } + + .panels { + width: 100%; + + .panel { + width: 100%; + height: calc(100% - 10px); + padding: 5px 0px; + display: none; + } + + .panel.selected { + display: block; + } + + .panel.icons { + max-height: 150px; + overflow-y: auto; + overflow-x: hidden; + + .list { + width: calc(100% + 4px); + height: 100%; + display: flex; + justify-content: center; + align-items: flex-start; + flex-wrap: wrap; + margin-left: -2px; + cursor: pointer; + overflow-y: auto; + + .icon { + position: relative; + width: 55px; + height: 55px; + overflow: hidden; + background: #343434; + margin: 1px; + transition-duration: .2s; + border: 1px solid transparent; + + &:hover { + border-color: var(--main-hover-color); + + .name { + max-height: 100%; + } + + } + + img { + position: absolute; + top: 10px; + bottom: 10px; + left: 10px; + right: 10px; + z-index: 1; + width: calc(100% - 20px); + height: calc(100% - 20px); + opacity: 0; + transition-duration: .2s; + } + + .name { + position: absolute; + max-height: 20%; + bottom: 0px; + left: 0px; + right: 0px; + z-index: 2; + text-align: center; + font-size: 9px; + padding: 2px; + background: #00000096; + transition-duration: .3s; + } + } + + .icon.selected, + .icon.selected:hover { + border-color: var(--main-color); + background: var(--main-secondary-color); + } + } + } + } + + + + } + } + + + .container.actions {} + + + } + } + + .edit.disabled { + pointer-events: none; + + .split { + + opacity: 0; + } + } +} \ No newline at end of file diff --git a/Frontend/pages/home/sass/Home.scss b/Frontend/pages/home/sass/Home.scss new file mode 100644 index 0000000..0c52fe8 --- /dev/null +++ b/Frontend/pages/home/sass/Home.scss @@ -0,0 +1,6 @@ +.blockheader { + font-size: 18px; + letter-spacing: 0px; + font-weight: 500; + color: #dfdfdf; +} \ No newline at end of file diff --git a/Frontend/pages/home/sass/Pages.scss b/Frontend/pages/home/sass/Pages.scss new file mode 100644 index 0000000..d964cf2 --- /dev/null +++ b/Frontend/pages/home/sass/Pages.scss @@ -0,0 +1,182 @@ +.item[tab="pages"] { + + .pageselector { + position: absolute; + top: 0px; + bottom: 0px; + left: 0px; + width: 200px; + border-right: 2px solid var(--main-color); + background: var(--subpanel-color); + + .pageinfo { + position: absolute; + top: 0; + bottom: calc(100% - 90px); + left: 0; + right: 0; + border-bottom: 2px solid var(--main-color); + padding: 10px; + display: flex; + justify-content: center; + align-items: flex-start; + flex-wrap: wrap; + + .pagename { + width: calc(100% - 24px); + } + + .controls { + width: 100%; + display: flex; + justify-content: center; + align-items: flex-start; + margin-top: 10px; + + .box { + width: 30px; + height: 30px; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + + &:hover { + img { + filter: grayscale(1); + } + } + + &.left, + &.right { + img { + width: 30px; + height: 30px; + } + } + + + img { + filter: grayscale(0); + transition-duration: .2s; + } + } + + .centered { + width: calc(100% - 60px); + height: 30px; + + display: flex; + justify-content: center; + align-items: center; + + .box img { + width: 20px; + height: 20px; + } + } + } + } + + .list { + position: absolute; + top: 90px; + bottom: 0px; + left: 0px; + right: 0px; + + .pageitem { + width: 100%; + height: 40px; + display: flex; + align-items: center; + background: #363636; + border-bottom: 1px solid #2c2c2c; + transition-duration: .2s; + cursor: pointer; + + &:hover { + background: #3e3d3d; + } + + + .name { + width: calc(100% - 35px); + margin-left: 10px; + font-size: 12px; + } + + .move { + display: flex; + flex-direction: column; + margin-left: 6px; + + .moveitem { + width: 14px; + height: 14px; + padding: 2px; + border-radius: 2px; + + img { + width: 14px; + height: 14px; + filter: grayscale(0); + transition-duration: .2s; + } + + &:hover { + background: var(--subpanel-color); + + img { + filter: grayscale(1); + } + } + + .selected { + display: none; + } + } + } + + + + &.selected { + background: var(--main-color); + + .moveitem .normal { + display: none; + } + + .moveitem .selected { + display: block; + } + + .moveitem:hover { + background: var(--main-hover-color); + } + } + } + + } + } + + .buttoneditor { + position: absolute; + top: 0px; + bottom: 0px; + left: 202px; + right: 0px; + + + .edit { + position: absolute; + bottom: 0px; + left: 0px; + right: 0px; + height: 400px; + + border-top: 2px solid var(--main-color); + background: var(--subpanel-color); + } + } +} \ No newline at end of file diff --git a/Frontend/pages/home/sass/Scrollbar.scss b/Frontend/pages/home/sass/Scrollbar.scss new file mode 100644 index 0000000..86cb160 --- /dev/null +++ b/Frontend/pages/home/sass/Scrollbar.scss @@ -0,0 +1,20 @@ +/* width */ +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +/* Track */ +::-webkit-scrollbar-track { + background: #ffffff0f; +} + +/* Handle */ +::-webkit-scrollbar-thumb { + background: #b8b8b8; +} + +/* Handle on hover */ +::-webkit-scrollbar-thumb:hover { + background: #d6d6d6; +} \ No newline at end of file diff --git a/Frontend/pages/home/sass/Tabs.scss b/Frontend/pages/home/sass/Tabs.scss new file mode 100644 index 0000000..7d0448b --- /dev/null +++ b/Frontend/pages/home/sass/Tabs.scss @@ -0,0 +1,78 @@ +.tabcontainer { + border: 2px solid var(--main-color); + position: absolute; + top: 0px; + bottom: 0px; + left: 0px; + right: 0px; + + background: #222222; + border-radius: var(--border-radius); + overflow: hidden; + + .tabmenu { + position: absolute; + top: 0; + left: 0; + right: 0; + height: 30px; + + display: flex; + justify-content: flex-start; + align-items: center; + + background: var(--panel-color); + border-bottom: 2px solid var(--main-color); + + .item { + height: 100%; + padding: 0px 15px; + display: flex; + align-items: center; + + background: var(--main-secondary-color); + border-right: 2px solid var(--main-color); + + user-select: none; + transition-duration: .2s; + cursor: pointer; + + &:hover { + background: var(--main-hover-color); + } + } + + .item.active, + .item.active :hover { + background: var(--main-color); + cursor: inherit; + } + } + + .tabpages { + position: absolute; + top: 32px; + bottom: 0px; + left: 0px; + right: 0px; + + .item { + position: absolute; + top: 0px; + bottom: 0px; + left: 0px; + right: 0px; + + transition-duration: .2s; + display: none; + } + + .item.padding { + padding: 10px; + } + + .item.active { + display: inherit; + } + } +} \ No newline at end of file diff --git a/Frontend/pages/home/script.js b/Frontend/pages/home/script.js new file mode 100644 index 0000000..a4817b7 --- /dev/null +++ b/Frontend/pages/home/script.js @@ -0,0 +1 @@ +var __spreadArray=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var o,r=0,i=t.length;rn.clientHeight?o.style.transform="scale(".concat(t,")"):o.style.transform="scale(".concat(e,")")):setTimeout(scaleOverview,100)}window.addEventListener("keydown",function(e){"alt"!=e.key&&1!=e.altKey||(altDown=!0)}),window.addEventListener("keyup",function(e){"alt"!=e.key&&0!=e.altKey||(altDown=!1)}),document.querySelectorAll(".shortcutKey").forEach(function(e){isMac()?e.innerText="Command":e.innerText="Ctrl"}),window.addEventListener("resize",scaleOverview),scaleOverview();var PageHandler={elements:{pagename:document.querySelector(".pagename"),left:document.querySelector(".pageselector").querySelector(".box.left"),right:document.querySelector(".pageselector").querySelector(".box.right"),add:document.querySelector(".pageselector").querySelector(".box.add")},currentPageID:null,currentPage:null,currentIndex:null,request:function(n,o){socket.emit("page","request",n,function(e,t){e?UndeckedNotification("Error whilst getting page ".concat(n,": ").concat(e),"error",5e3):(PageHandler.currentIndex=o,PageHandler.render(t))})},render:function(e){for(var t in KeyHandler.clear(),PageHandler.currentPageID=e.pageID,PageHandler.currentPage=e,PageList.select(e.pageID),PageHandler.elements.pagename.value=e.name,PageHandler.elements.pagename.removeAttribute("disabled"),e.keys)for(var n in e.keys[t])KeyHandler.render(n,t,e.keys[t][n])},listeners:function(){PageHandler.elements.pagename.oninput=function(){null!=PageHandler.currentPageID&&0 + handleNewAction(integrationID, actionID, 'up') + ); + ActionSelector.register(ActionEditor.elements.down.selector, (integrationID: string, actionID: string) => + handleNewAction(integrationID, actionID, 'down') + ); + ActionSelector.register(ActionEditor.elements.latch.selector, (integrationID: string, actionID: string) => + handleNewAction(integrationID, actionID, 'latch') + ); + ActionSelector.register(ActionEditor.elements.unlatch.selector, (integrationID: string, actionID: string) => + handleNewAction(integrationID, actionID, 'unlatch') + ); + + function handleNewAction( + integrationID: string, + actionID: string, + type: 'up' | 'down' | 'latch' | 'unlatch' + ) { + socket.emit( + 'actioneditor', + 'create', + PageHandler.currentPageID, + Editor.currentX, + Editor.currentY, + type, + integrationID, + actionID, + (actionInstance: Page_Key_Action) => { + ActionEditor.openAction(actionInstance, type); + } + ); + } + } else setTimeout(ActionEditor.listeners, 100); + }, + + open(actions: Page_Key_ActionTypes, x: string, y: string, key: Page_Key, pageID: string) { + for (var type in actions) { + ActionEditor.elements[type].actions.innerHTML = ''; + for (var actionInstanceID in actions[type]) { + ActionEditor.openAction(actions[type][actionInstanceID], type); + } + } + }, + + openAction(actionInstance: Page_Key_Action, type: string) { + var actionInstanceID = actionInstance.actionInstanceID; + var container = ce('div', 'actioncontainer', { actionInstanceID }); + + var header = ce('div', 'header'); + header.appendChild( + ce('div', 'integration', null, ActionSelector.maps.integrationNames[actionInstance.integrationID]) + ); + header.appendChild(ce('div', 'action', null, ActionSelector.maps.actionNames[actionInstance.actionID])); + + var buttons = ce('div', 'buttons'); + var actionLogs = ce( + 'div', + [ + 'btn', + 'logs' + ], + null, + 'Logs' + ); + actionLogs.onclick = () => UndeckedNotification('Not implented yet', 'error'); + var actionRemove = ce( + 'div', + [ + 'btn', + 'remove' + ], + null, + 'Remove' + ); + actionRemove.onclick = () => { + if (container.parentElement) container.parentElement.removeChild(container); + if ( + ActionEditor.openEditors[type] != undefined && + ActionEditor.openEditors[type][actionInstanceID] != undefined + ) { + ActionEditor.openEditors[type][actionInstanceID].destroy(); + } + socket.emit( + 'actioneditor', + 'remove', + PageHandler.currentPageID, + Editor.currentX, + Editor.currentY, + actionInstanceID, + type + ); + Editor.registerChange(); + }; + buttons.appendChild(actionLogs); + buttons.appendChild(actionRemove); + header.appendChild(buttons); + + container.appendChild(header); + + var fields = ce('div', 'fields'); + container.appendChild(fields); + + ActionEditor.elements[type].actions.appendChild(container); + + ActionEditor.openEditors[type][actionInstanceID] = new Action( + { + integrationID: actionInstance.integrationID, + actionID: actionInstance.actionID, + actionType: type, + keyX: Editor.currentX, + keyY: Editor.currentY, + actionInstanceID, + pageID: PageHandler.currentPageID + }, + fields + ); + }, + + close() { + for (var type in ActionEditor.openEditors) { + for (var actionInstanceID in ActionEditor.openEditors[type]) { + ActionEditor.openEditors[type][actionInstanceID].destroy(); + } + } + + ActionEditor.elements.up.actions.innerHTML = ''; + ActionEditor.elements.down.actions.innerHTML = ''; + } +}; +ActionEditor.listeners(); + +var Action = class Action { + settings: Action_Settings; + container: HTMLDivElement; + + actionEditorID: string; + + lastFields: EditorAPI_Field[]; + + constructor(settings: Action_Settings, container: HTMLDivElement) { + this.settings = settings; + this.container = container; + + socket.emit( + 'actioneditor', + 'start', + this.settings, + (error: string, actionEditorID: string, ready: () => void) => { + if (error) return UndeckedNotification(error, 'error', 5000); + this.actionEditorID = actionEditorID; + this.listeners(); + this.emit('ready'); + } + ); + } + + emit(query: string, ...args: any[]) { + socket.emit('actioneditor', 'instance', this.actionEditorID, query, ...args); + } + + listeners() { + socket.on(`AE_${this.actionEditorID}`, (query: string, ...args: any[]) => { + switch (query) { + case 'fields': + var fields: EditorAPI_Field[] = args[0]; + this.render(fields); + break; + } + }); + } + + destroy() { + if (this.container && this.container.parentElement) this.container.parentElement.removeChild(this.container); + this.emit('close'); + } + + render(fields: EditorAPI_Field[]) { + var valueNameMap = {}; + + var updateMulti = (selected: string[], input: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement) => { + var text: string = + selected != undefined && selected.length > 0 + ? selected + .map((value) => { + return valueNameMap[value]; + }) + .join(', ') + : 'None'; + + input.innerHTML = ''; + input.appendChild(ce('option', 'mutli', { value: selected.join(',') }, text)); + }; + + var getMultiValues = (dropdowninner: HTMLDivElement): string[] => { + var values: string[] = []; + dropdowninner.querySelectorAll('.option').forEach((option: HTMLDivElement) => { + var checkbox: HTMLInputElement = option.querySelector('input'); + var optionID = option.getAttribute('optionID'); + + if (checkbox.checked) values.push(optionID); + }); + return values; + }; + + fields.forEach((field) => { + var fieldcontainer: HTMLDivElement = this.container.querySelector(`.field_${field.id}`); + if (fieldcontainer == null) { + fieldcontainer = ce('div', [ + 'field', + `field_${field.id}` + ]); + this.container.appendChild(fieldcontainer); + } + + var label: HTMLDivElement = fieldcontainer.querySelector('.fieldlabel'); + if (label == null) { + label = ce('div', 'fieldlabel', null, `${field.name}${field.required ? ' *' : ''}`); + fieldcontainer.appendChild(label); + } else label.innerText = `${field.name}${field.required ? ' *' : ''}`; + + var input: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement = fieldcontainer.querySelector( + '.input' + ); + + if (input == null) { + switch (field.type) { + case 'number': + case 'text': + case 'color': + input = ce('input', 'input', { type: field.type, value: field.value }); + fieldcontainer.appendChild(input); + break; + case 'select': + case 'connection': + if (field.multi != undefined && field.multi == true) { + var multiSelect = ce('div', [ + 'multiselect' + ]); + input = ce('select', [ + 'input', + 'multiinput' + ]); + + input.onmouseup = (e: MouseEvent) => { + e.preventDefault(); + e.stopPropagation(); + + dropdown.style.display = 'block'; + input.classList.add('open'); + + var handleWindowClick = (e: MouseEvent) => { + if (e.target) { + var target = e.target; + + if ( + !target.classList.contains('msdp') && + !target.classList.contains('multiinput') + ) { + window.removeEventListener('click', handleWindowClick); + dropdown.style.display = 'none'; + input.classList.remove('open'); + } + } + }; + + window.addEventListener('click', handleWindowClick); + }; + + input.onmousedown = (e: MouseEvent) => { + e.preventDefault(); + e.stopPropagation(); + }; + + multiSelect.appendChild(input); + + var dropdown = ce('div', [ + 'dropdown', + 'msdp' + ]); + var dropdowninner = ce('div', [ + 'inner', + 'msdp' + ]); + + dropdown.appendChild(dropdowninner); + multiSelect.appendChild(dropdown); + + if (field.values != undefined && field.values.length > 0) + for (let i = 0; i < field.values.length; i++) { + ((value) => { + valueNameMap[value.id] = field.values[i].text; + + var item = ce( + 'div', + [ + 'option', + 'msdp' + ], + { optionID: value.id } + ); + var checkbox = ce('input', 'msdp', { + type: 'checkbox' + }); + + checkbox.checked = field.value != undefined && field.value.includes(value.id); + + item.onclick = () => { + checkbox.checked = !checkbox.checked; + updateMulti(getMultiValues(dropdowninner), input); + this.emit('fields', this.export()); + }; + + item.appendChild(checkbox); + item.appendChild( + ce( + 'div', + [ + 'text', + 'msdp' + ], + null, + value.text + ) + ); + dropdowninner.appendChild(item); + })(field.values[i]); + } + + updateMulti(field.value, input); + + fieldcontainer.appendChild(multiSelect); + } else { + input = ce('select', 'input'); + if (field.values != undefined && field.values.length > 0) + for (let i = 0; i < field.values.length; i++) { + var option = ce( + 'option', + null, + { value: field.values[i].id }, + field.values[i].text + ); + if (field.value == field.values[i].id) option.setAttribute('selected', ''); + input.appendChild(option); + } + + fieldcontainer.appendChild(input); + } + + break; + } + + if (input) input.oninput = () => this.emit('fields', this.export()); + } else { + input.value = field.value; + + if (field.type == 'select' || field.type == 'connection') { + var parsedOptionValues = []; + if (field.multi != undefined && field.multi == true) { + var dropdown_inner = input.parentElement.querySelector('.inner'); + + if (field.values != undefined && field.values.length > 0) + for (let i = 0; i < field.values.length; i++) { + var selectValue = field.values[i]; + var existingOption: HTMLDivElement = dropdown_inner.querySelector( + `.option[optionid="${selectValue.id}"]` + ); + + parsedOptionValues.push(selectValue.id); + + if (existingOption) { + var text: HTMLDivElement = existingOption.querySelector('.text'); + text.innerText = selectValue.text; + } else { + ((value) => { + valueNameMap[value.id] = field.values[i].text; + + var item = ce( + 'div', + [ + 'option', + 'msdp' + ], + { optionID: value.id } + ); + var checkbox = ce('input', 'msdp', { + type: 'checkbox' + }); + + checkbox.checked = field.value != undefined && field.value.includes(value.id); + + item.onclick = () => { + checkbox.checked = !checkbox.checked; + updateMulti(getMultiValues(dropdown_inner), input); + this.emit('fields', this.export()); + }; + + item.appendChild(checkbox); + item.appendChild( + ce( + 'div', + [ + 'text', + 'msdp' + ], + null, + value.text + ) + ); + dropdown_inner.appendChild(item); + })(selectValue); + } + } + else dropdown_inner.innerHTML = ''; + + dropdown_inner.querySelectorAll('.option').forEach((option: HTMLOptionElement) => { + var optionValue = option.getAttribute('optionID'); + var checkbox: HTMLInputElement = option.querySelector('input'); + + if (!parsedOptionValues.includes(optionValue)) option.parentElement.removeChild(option); + else checkbox.checked = field.value.includes(optionValue); + }); + } else { + if (field.values != undefined && field.values.length > 0) + for (let i = 0; i < field.values.length; i++) { + var selectValue = field.values[i]; + var existing: HTMLOptionElement = input.querySelector( + `option[value="${selectValue.id}"]` + ); + + if (existing) existing.innerText = selectValue.text; + else { + existing = ce( + 'option', + null, + { value: selectValue.id }, + selectValue.text + ); + input.appendChild(existing); + } + parsedOptionValues.push(selectValue.id); + } + else input.innerHTML = ''; + + input.querySelectorAll('option').forEach((option: HTMLOptionElement) => { + var optionValue = option.getAttribute('value'); + option.removeAttribute('selected'); + + if (!parsedOptionValues.includes(optionValue)) option.parentElement.removeChild(option); + else if (field.value == option) option.setAttribute('selected', ''); + }); + } + + // if (field.value != undefined && input.value.length > 0) input.value = field.value; + } + } + }); + this.lastFields = fields; + } + + export(): EditorAPI_Field[] { + var copyOfLast = JSON.parse(JSON.stringify(this.lastFields)); + for (let i = 0; i < copyOfLast.length; i++) { + var field = copyOfLast[i]; + var fieldcontainer: HTMLDivElement = this.container.querySelector(`.field_${field.id}`); + if (fieldcontainer) { + var input: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement = fieldcontainer.querySelector( + '.input' + ); + if (input) { + if (!input.classList.contains('multiinput')) copyOfLast[i].value = input.value; + else copyOfLast[i].value = input.value.split(','); + } + } + } + + return copyOfLast; + } +}; + +interface Action_Settings { + integrationID: string; + actionID: string; + actionInstanceID: string; + pageID: string; + actionType: 'up' | 'down'; + keyX: number | string; + keyY: number | string; +} + +interface ActionEditor { + elements: { + up: { + container: HTMLDivElement; + selector: HTMLInputElement; + actions: HTMLDivElement; + }; + down: { + container: HTMLDivElement; + selector: HTMLInputElement; + actions: HTMLDivElement; + }; + latch: { + container: HTMLDivElement; + selector: HTMLInputElement; + actions: HTMLDivElement; + }; + unlatch: { + container: HTMLDivElement; + selector: HTMLInputElement; + actions: HTMLDivElement; + }; + }; + + openEditors: { + up: { [actionInstanceID: string]: typeof Action }; + down: { [actionInstanceID: string]: typeof Action }; + latch: { [actionInstanceID: string]: typeof Action }; + unlatch: { [actionInstanceID: string]: typeof Action }; + }; + + listeners: () => void; + + open: (actions: Page_Key_ActionTypes, x: string, y: string, key: Page_Key, pageID: string) => void; + openAction: (actionInstance: Page_Key_Action, type: string) => void; + close: () => void; +} + +interface Page_Key_ActionTypes { + up: Page_Key_Actions; + down: Page_Key_Actions; +} +interface Page_Key_Actions { + [actionInstanceID: string]: Page_Key_Action; +} + +interface Page_Key_Action { + integrationID: string; + actionID: string; + actionInstanceID: string; + properties: { [property: string]: any }; + logs: { timestamp: number; type: 'error' | 'info' | 'warning'; text: string }[]; +} + +interface EditorAPI_Field { + id: string; + name: string; + type: 'text' | 'number' | 'select' | 'connection' | 'color'; + value: any; + values?: { id: string; text: string }[]; + required?: boolean; + multi?: boolean; +} diff --git a/Frontend/pages/home/ts/ActionSelector.ts b/Frontend/pages/home/ts/ActionSelector.ts new file mode 100644 index 0000000..ab3292f --- /dev/null +++ b/Frontend/pages/home/ts/ActionSelector.ts @@ -0,0 +1,110 @@ +var ActionSelector: ActionSelector = { + elements: { + actiondialog: document.querySelector('.actiondialog') + }, + + fadeTimeout: null, + + maps: { + integrationNames: {}, + actionNames: {} + }, + + init() { + ActionSelector.elements.actiondialog.querySelectorAll('.item').forEach((item: HTMLDivElement) => { + var integrationID = item.getAttribute('integrationID'); + var actionID = item.getAttribute('actionID'); + var integrationName = (item.querySelector('.integration')).innerText.trim(); + var actionName = (item.querySelector('.action')).innerText.trim(); + + if (ActionSelector.maps.integrationNames[integrationID] == undefined) + ActionSelector.maps.integrationNames[integrationID] = integrationName; + if (ActionSelector.maps.actionNames[actionID] == undefined) + ActionSelector.maps.actionNames[actionID] = actionName; + }); + }, + + register(input: HTMLInputElement, callback: (integrationID: string, actionID: string) => void) { + input.onfocus = () => ActionSelector.show(input, callback); + input.onblur = () => setTimeout(ActionSelector.hide, 200); + input.oninput = () => ActionSelector.search(input.value); + }, + + show(input: HTMLInputElement, callback: (integrationID: string, actionID: string) => void) { + clearTimeout(ActionSelector.fadeTimeout); + + ActionSelector.search(''); + + var boundingbox = input.getBoundingClientRect(); + + ActionSelector.elements.actiondialog.style.top = `${boundingbox.top - 31}px`; + ActionSelector.elements.actiondialog.style.left = `${boundingbox.left - 10}px`; + ActionSelector.elements.actiondialog.style.width = `${boundingbox.width - 4}px`; + ActionSelector.elements.actiondialog.style.maxHeight = `${Math.min( + window.innerHeight - boundingbox.top, + 200 + )}px`; + + ActionSelector.elements.actiondialog.style.display = 'flex'; + ActionSelector.elements.actiondialog.style.transitionDuration = '.3s'; + ActionSelector.elements.actiondialog.style.opacity = '1'; + ActionSelector.elements.actiondialog.style.pointerEvents = 'auto'; + + ActionSelector.elements.actiondialog.querySelectorAll('.item').forEach((item: HTMLDivElement) => { + item.onclick = () => { + var integrationID = item.getAttribute('integrationID'); + var actionID = item.getAttribute('actionID'); + callback(integrationID, actionID); + + input.value = ''; + }; + }); + }, + + hide() { + ActionSelector.elements.actiondialog.style.transitionDuration = '.3s'; + ActionSelector.elements.actiondialog.style.opacity = '0'; + ActionSelector.elements.actiondialog.style.pointerEvents = 'none'; + + clearTimeout(ActionSelector.fadeTimeout); + ActionSelector.fadeTimeout = setTimeout(() => { + ActionSelector.elements.actiondialog.style.display = 'none'; + }, 300); + }, + + search(query: string) { + ActionSelector.elements.actiondialog.querySelectorAll('.item').forEach((item: HTMLDivElement) => { + var integration: HTMLDivElement = item.querySelector('.integration'); + var action: HTMLDivElement = item.querySelector('.action'); + + var interactionQuery = integration.innerText.toLowerCase(); + var actionQuery = action.innerText.toLowerCase(); + + query = query.toLowerCase(); + + if (interactionQuery.includes(query) || actionQuery.includes(query) || query.length == 0) + item.classList.remove('hidden'); + else item.classList.add('hidden'); + }); + } +}; +ActionSelector.init(); + +interface ActionSelector { + elements: { + actiondialog: HTMLDivElement; + }; + + fadeTimeout: any; + + maps: { + integrationNames: { [integrationID: string]: string }; + actionNames: { [actionID: string]: string }; + }; + + init: () => void; + register: (input: HTMLInputElement, callback: (integrationID: string, actionID: string) => void) => void; + show: (input: HTMLInputElement, callback: (integrationID: string, actionID: string) => void) => void; + hide: () => void; + search: (query: string) => void; +} diff --git a/Frontend/pages/home/ts/Clipboard.ts b/Frontend/pages/home/ts/Clipboard.ts new file mode 100644 index 0000000..0eacc1d --- /dev/null +++ b/Frontend/pages/home/ts/Clipboard.ts @@ -0,0 +1,72 @@ +var UndeckedClipboard = new class UndeckedClipboard { + constructor() {} + + hasKeyInClipboard() { + return localStorage.getItem('clipboard') != undefined && localStorage.getItem('clipboard').length > 0; + } + + copyKey(originKeyX: number, originKeyY: number) { + localStorage.setItem('clipboard', `key_copy_${PageHandler.currentPageID}.${originKeyX}.${originKeyY}`); + UndeckedNotification('Key has been copied to clipboard'); + } + + copyGhostKey(originKeyX: number, originKeyY: number) { + localStorage.setItem('clipboard', `key_ghost_${PageHandler.currentPageID}.${originKeyX}.${originKeyY}`); + UndeckedNotification('Key has been copied to clipboard as a ghost'); + } + + cutKey(originKeyX: number, originKeyY: number) { + //TODO: Implement something in the front end to show that the item is being cut right now + localStorage.setItem('clipboard', `key_cut_${PageHandler.currentPageID}.${originKeyX}.${originKeyY}`); + UndeckedNotification('Key has been cut to clipboard'); + } + + pasteKey(destinationKeyX: number, destinationKeyY: number) { + if (this.hasKeyInClipboard()) { + var clipboard = this.decodeClipboard(); + + if (clipboard.elementType == 'key') { + socket.emit( + 'page', + 'operation', + clipboard.operationType, + clipboard.id, + clipboard.x, + clipboard.y, + PageHandler.currentPageID, + destinationKeyX, + destinationKeyY + ); + + if (clipboard.operationType == 'cut') localStorage.setItem('clipboard', ''); + } + } + } + + decodeClipboard(): { + elementType: 'key'; + operationType: 'cut' | 'copy' | 'ghost'; + id: string; + x?: number; + y?: number; + } { + var clipboard = { + elementType: null, + operationType: null, + id: null, + x: null, + y: null + }; + + if (this.hasKeyInClipboard()) { + var raw = localStorage.getItem('clipboard').split('_'); + clipboard.elementType = raw[0]; + clipboard.operationType = raw[1]; + var args = raw[2].split('.'); + clipboard.id = args[0]; + clipboard.x = args[1]; + clipboard.y = args[2]; + return clipboard; + } else return clipboard; + } +}(); diff --git a/Frontend/pages/home/ts/Communication.ts b/Frontend/pages/home/ts/Communication.ts new file mode 100644 index 0000000..d36178b --- /dev/null +++ b/Frontend/pages/home/ts/Communication.ts @@ -0,0 +1,75 @@ +declare var ce: ( + type: string, + classList?: string | string[], + attributes?: { [key: string]: string }, + innerText?: string, + innerHTML?: string +) => HTMLElement; +declare var UndeckedNotification: (message: string, type?: 'info' | 'error', time?: number) => void; +declare var io: any; + +var responseToken = Math.random().toString(16).substr(2, 8); + +var socket = io('/'); + +socket.on('connect', () => { + console.log('Connected to server'); + + socket.emit('init', 'home'); +}); + +var fontSizeRatio: number = null; +var renderQuality: number = null; +socket.on('quality', (quality: number) => { + document.querySelectorAll('canvas.ready').forEach((canvas: HTMLCanvasElement) => { + canvas.width = quality; + canvas.height = quality; + + var context = canvas.getContext('2d'); + context.textBaseline = 'middle'; + context.textAlign = 'center'; + }); + + renderQuality = quality; + fontSizeRatio = quality / 100; +}); + +socket.on('pagelist', (pagelist: PageListItem[]) => { + (function render() { + if (fontSizeRatio != null) PageList.render(pagelist); + else setTimeout(render, 100); + })(); +}); + +socket.on('connectedlist', (connected: ConnectedList[]) => Connections.renderConnected(connected)); + +socket.on('page', (query: string, ...args: any[]) => { + switch (query) { + case 'updatename': + var pageID: string = args[0]; + var newName: string = args[1]; + + PageList.updateName(pageID, newName); + break; + + case 'updatekey': + var pageID: string = args[0]; + var x: string = args[1]; + var y: string = args[2]; + var key: Page_Key = args[3]; + var returnResponseToken: string = args[4]; + + if (PageHandler.currentPageID == pageID) { + if (PageHandler.currentPage.keys[y] != undefined && PageHandler.currentPage.keys[y][x] != undefined) + PageHandler.currentPage.keys[y][x] = key; + + if (responseToken != returnResponseToken) { + KeyHandler.render(x, y, key); + + if (Editor.currentKey != undefined && Editor.currentKey.id == key.id) Editor.open(x, y, key); + } + } + + break; + } +}); diff --git a/Frontend/pages/home/ts/Connections.ts b/Frontend/pages/home/ts/Connections.ts new file mode 100644 index 0000000..09277e9 --- /dev/null +++ b/Frontend/pages/home/ts/Connections.ts @@ -0,0 +1,206 @@ +var Connections: Connections = { + elements: { + connectionbrowser: document.querySelector('.connectionbrowser'), + + table: document.querySelector('.connectedtable'), + + dialog: { + container: document.querySelector('.connectiondialog'), + dialog: document.querySelector('.connectiondialog').querySelector('.dialog'), + fields: document.querySelector('.connectiondialog').querySelector('.fields'), + message: document.querySelector('.connectiondialog').querySelector('.message'), + link: document.querySelector('.connectiondialog').querySelector('.link'), + cancel: document.querySelector('.connectiondialog').querySelector('.cn'), + connect: document.querySelector('.connectiondialog').querySelector('.co') + } + }, + + init() { + Connections.elements.connectionbrowser.querySelectorAll('.available').forEach((item: HTMLDivElement) => { + var integrationID = item.getAttribute('integrationID'); + var connectionType = item.getAttribute('connectionType'); + var button: HTMLDivElement = item.querySelector('.button'); + button.onclick = () => Connections.requestNewDevice(integrationID, connectionType); + }); + }, + + requestNewDevice(integrationID: string, connectionType: string) { + socket.emit( + 'connections', + 'request', + integrationID, + connectionType, + (connectionRequestData: ConnectionRequestData) => { + if (connectionRequestData.fields && connectionRequestData.fields.length > 0) + Connections.openDialog(integrationID, connectionType, connectionRequestData); + else UndeckedNotification('Unable to add a new device of this type.', 'error', 5000); + } + ); + }, + + openDialog(integrationID, connectionType, connectionRequestData: ConnectionRequestData) { + Connections.elements.dialog.fields.innerHTML = ''; + + var nameField: Connection_Field = { + id: '_internal_name', + name: 'Connection Name', + type: 'text' + }; + connectionRequestData.fields = [ + nameField, + ...connectionRequestData.fields + ]; + + if (connectionRequestData.message != undefined) { + Connections.elements.dialog.message.style.display = 'block'; + Connections.elements.dialog.message.innerText = connectionRequestData.message; + } else Connections.elements.dialog.message.style.display = 'none'; + + if (connectionRequestData.link != undefined) { + Connections.elements.dialog.link.style.display = 'inline-block'; + Connections.elements.dialog.link.innerText = connectionRequestData.link.title; + Connections.elements.dialog.link.href = connectionRequestData.link.address; + } else Connections.elements.dialog.link.style.display = 'none'; + + connectionRequestData.fields.forEach((field) => { + var fieldcontainer = ce('div', [ + 'field', + `field_${field.id}` + ]); + Connections.elements.dialog.fields.appendChild(fieldcontainer); + + var label = ce('div', 'fieldlabel', null, `${field.name}`); + fieldcontainer.appendChild(label); + + var input: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement = null; + + switch (field.type) { + case 'number': + case 'text': + input = ce('input', 'input', { type: field.type, fieldID: field.id }); + if (field.value != undefined) input.value = field.value; + fieldcontainer.appendChild(input); + break; + case 'select': + input = ce('select', 'input', { fieldID: field.id }); + if (field.values != undefined && field.values.length > 0) + for (let i = 0; i < field.values.length; i++) { + var option = ce('option', null, { value: field.values[i].id }, field.values[i].text); + if (field.value != undefined && field.values[i].id == field.value) + option.setAttribute('selected', ''); + input.appendChild(option); + } + + fieldcontainer.appendChild(input); + break; + } + }); + + Connections.elements.dialog.cancel.onclick = Connections.closeDialog; + Connections.elements.dialog.connect.onclick = () => { + var properties = {}; + var inputs: NodeListOf = Connections.elements.dialog.fields.querySelectorAll('.input'); + for (let i = 0; i < inputs.length; i++) + if (inputs[i].hasAttribute('fieldID')) properties[inputs[i].getAttribute('fieldID')] = inputs[i].value; + + Connections.elements.dialog.dialog.style.display = 'none'; + socket.emit( + 'connections', + 'create', + integrationID, + connectionType, + properties, + (succeed: boolean, errormessage?: string) => { + if (succeed == true) { + Connections.closeDialog(); + } else { + Connections.elements.dialog.dialog.style.display = 'block'; + UndeckedNotification( + errormessage != undefined ? errormessage : 'Unable to validate connection', + 'error', + 5000 + ); + } + } + ); + }; + + Connections.elements.dialog.dialog.style.display = 'block'; + Connections.elements.dialog.container.style.display = 'flex'; + }, + + closeDialog() { + Connections.elements.dialog.container.style.display = 'none'; + }, + + renderConnected(connectList: ConnectedList[]) { + var table = Connections.elements.table; + + for (let i = 0; i < connectList.length; i++) { + var connected = connectList[i]; + if (table.querySelector(`tr[connectionid="${connected.connectionID}"]`) == null) { + var row = ce('tr', null, { connectionID: connected.connectionID }); + var status = ce('td', 'status'); + var statuscontainer = ce('div', 'statuscontainer'); + statuscontainer.appendChild( + ce('div', [ + 'value', + 'online' + ]) + ); + status.appendChild(statuscontainer); + row.appendChild(status); + row.appendChild(ce('td', 'name', null, connected.name)); + row.appendChild(ce('td', 'integration', null, connected.integrationName)); + row.appendChild(ce('td', 'type', null, connected.connectionType)); + table.appendChild(row); + } + } + } +}; +Connections.init(); + +interface Connections { + elements: { + connectionbrowser: HTMLDivElement; + table: HTMLTableElement; + + dialog: { + container: HTMLDivElement; + dialog: HTMLDivElement; + message: HTMLDivElement; + link: HTMLAnchorElement; + fields: HTMLDivElement; + cancel: HTMLDivElement; + connect: HTMLDivElement; + }; + }; + + init: () => void; + requestNewDevice: (integrationID: string, connectionType: string) => void; + openDialog: (integrationID, connectionID, connectionRequestData: ConnectionRequestData) => void; + closeDialog: () => void; + renderConnected: (connectList: ConnectedList[]) => void; +} + +interface Connection_Field { + id: string; + name: string; + type: 'text' | 'number' | 'select'; + values?: { id: string; text: string }[]; + value?: string; +} + +interface ConnectedList { + connectionID: string; + integrationName: string; + connectionType: string; + name: string; + online: boolean; +} + +interface ConnectionRequestData { + fields: Connection_Field[]; + message?: string; + link?: { address: string; title: string }; +} diff --git a/Frontend/pages/home/ts/ContextMenu.ts b/Frontend/pages/home/ts/ContextMenu.ts new file mode 100644 index 0000000..534aedb --- /dev/null +++ b/Frontend/pages/home/ts/ContextMenu.ts @@ -0,0 +1,137 @@ +var ContextMenu = new class ContextMenu { + elements: { + menu: HTMLDivElement; + + items: { + copy: HTMLDivElement; + paste: HTMLDivElement; + cut: HTMLDivElement; + ghost: HTMLDivElement; + osc: HTMLDivElement; + http: HTMLDivElement; + }; + }; + + open: boolean; + contextHolder: HTMLElement; + + constructor() { + this.elements = { + menu: document.querySelector('.contextmenu'), + items: { + copy: document.querySelector('.contextmenu').querySelector('.copy'), + paste: document.querySelector('.contextmenu').querySelector('.paste'), + cut: document.querySelector('.contextmenu').querySelector('.cut'), + ghost: document.querySelector('.contextmenu').querySelector('.ghost'), + osc: document.querySelector('.contextmenu').querySelector('.osc'), + http: document.querySelector('.contextmenu').querySelector('.http') + } + }; + + this.open = false; + this.contextHolder = null; + + window.addEventListener('contextmenu', (ev: MouseEvent) => this.handle(this.elements.menu, ev)); + window.addEventListener('mousedown', (ev: MouseEvent) => { + if (this.open == true) + if (ev.target) { + var target = ev.target as HTMLElement; + + if ( + target.classList.contains('contextmenu') || + (target.parentElement != undefined && target.parentElement.classList.contains('contextmenu')) + ) { + } else { + this.close(); + } + } else this.close(); + }); + } + + setItems(items: DropdownItemTypes[]) { + for (var type in this.elements.items) { + if (items.includes(type)) this.elements.items[type].style.display = 'block'; + else this.elements.items[type].style.display = 'none'; + } + } + + close() { + this.elements.menu.style.display = 'none'; + if (this.contextHolder != null) { + this.contextHolder.classList.remove('context'); + this.contextHolder = null; + } + this.open = false; + } + + handle(menu: HTMLDivElement, ev: MouseEvent) { + if (ev.target != undefined) { + var target = ev.target as HTMLElement; + + var types = { + key: (element: HTMLElement) => { + if (element.hasAttribute('x') && element.hasAttribute('y')) { + var keyX = element.getAttribute('x'); + var keyY = element.getAttribute('y'); + + var items: DropdownItemTypes[] = [ + 'osc', + 'http' + ]; + if (PageHandler.currentPage.keys[keyY][keyX].state.type != 'empty') items.push('copy', 'cut'); + if (PageHandler.currentPage.keys[keyY][keyX].state.type == 'custom') items.push('ghost'); + if (UndeckedClipboard.hasKeyInClipboard()) items.push('paste'); + + this.setItems(items); + + this.elements.items.copy.onclick = () => { + UndeckedClipboard.copyKey(parseInt(keyX), parseInt(keyY)); + this.close(); + }; + + this.elements.items.cut.onclick = () => { + UndeckedClipboard.cutKey(parseInt(keyX), parseInt(keyY)); + this.close(); + }; + + this.elements.items.paste.onclick = () => { + UndeckedClipboard.pasteKey(parseInt(keyX), parseInt(keyY)); + this.close(); + }; + + this.elements.items.ghost.onclick = () => { + UndeckedClipboard.copyGhostKey(parseInt(keyX), parseInt(keyY)); + this.close(); + }; + + return items.length > 0; + } + } + }; + + for (var type in types) + if (target.classList.contains(type)) { + ev.preventDefault(); + + var valid = types[type](target); + + if (valid) { + this.contextHolder = target; + target.classList.add('context'); + + setTimeout(() => { + this.open = true; + }, 100); + + menu.style.left = `${ev.pageX}px`; + menu.style.top = `${ev.pageY - 50}px`; + menu.style.display = 'block'; + } + + return; + } + } + } +}(); + +type DropdownItemTypes = 'copy' | 'paste' | 'cut' | 'ghost' | 'osc' | 'http'; diff --git a/Frontend/pages/home/ts/Editor.ts b/Frontend/pages/home/ts/Editor.ts new file mode 100644 index 0000000..5d6bc68 --- /dev/null +++ b/Frontend/pages/home/ts/Editor.ts @@ -0,0 +1,468 @@ +var Editor: Editor = { + elements: { + container: document.querySelector('.edit'), + appearence: { + text: { + content: document.querySelector('.ap_text_value'), + size: document.querySelector('.ap_text_size'), + color: document.querySelector('.ap_text_color'), + offsetX: document.querySelector('.ap_text_offsetx').querySelector('input[type="range"]'), + offsetY: document.querySelector('.ap_text_offsety').querySelector('input[type="range"]') + }, + background: { + color: document.querySelector('.ap_background_color') + }, + image: { + size: document.querySelector('.ap_image_size').querySelector('input[type="range"]'), + offsetX: document.querySelector('.ap_image_offsetx').querySelector('input[type="range"]'), + offsetY: document.querySelector('.ap_image_offsety').querySelector('input[type="range"]'), + rotation: document.querySelector('.ap_image_rotation').querySelector('input[type="range"]') + } + }, + imageui: { + imagetypes: document.querySelector('.imagetype'), + imageinfopanels: document.querySelector('.imagemenu').querySelector('.info'), + imagepanels: document.querySelector('.row.image').querySelector('.panels'), + advanced: document.querySelector('.row.image').querySelector('.advanced') + }, + buttonui: { + buttontypes: document.querySelector('.buttontype'), + visual: document.querySelector('.vis'), + actioninner: document.querySelector('.actioninner'), + containerTitles: document.querySelector('.editcontainer').querySelectorAll('.containertitle') + }, + checks: { + toggle: { + container: document.querySelector('.checks').querySelector('.check.toggle'), + checkbox: document.querySelector('.checks').querySelector('.check.toggle').querySelector('input') + }, + confirm: { + container: document.querySelector('.checks').querySelector('.check.confirm'), + checkbox: document.querySelector('.checks').querySelector('.check.confirm').querySelector('input') + } + } + }, + + currentX: null, + currentY: null, + currentKey: null, + currentImageType: null, + currentButtonType: null, + isToggle: null, + isConfirm: null, + + isOpen: false, + + registerChange() { + if (Editor.currentKey != null) { + var editorExport = Editor.export(); + KeyHandler.render(Editor.currentX, Editor.currentY, editorExport); + + socket.emit( + 'page', + 'setkey', + PageHandler.currentPageID, + Editor.currentX, + Editor.currentY, + editorExport, + responseToken + ); + } + }, + + listeners() { + for (var inputCategory in Editor.elements.appearence) { + for (var inputName in Editor.elements.appearence[inputCategory]) { + var inputElement: HTMLInputElement = Editor.elements.appearence[inputCategory][inputName]; + + inputElement.oninput = Editor.registerChange; + + if (inputElement.type == 'range') + ((range: HTMLInputElement, number: HTMLInputElement) => { + range.addEventListener('input', () => { + number.value = range.value; + }); + number.addEventListener('input', () => { + range.value = number.value; + Editor.registerChange(); + }); + })(inputElement, inputElement.parentElement.querySelector('input[type="number"]')); + } + } + + Editor.elements.imageui.imagetypes.querySelectorAll('.selectoritem').forEach((item: HTMLDivElement) => { + item.onclick = () => { + var panelType: 'none' | 'icon' | 'upload' = item.getAttribute('panel'); + + Editor.selectImageTab(panelType); + }; + }); + + Editor.elements.buttonui.buttontypes.querySelectorAll('.buttonitem').forEach((item: HTMLDivElement) => { + item.onclick = () => { + var buttonType: 'empty' | 'custom' | 'pageup' | 'pagedown' = item.getAttribute('type'); + + Editor.selectButtonType(buttonType); + }; + }); + + Editor.elements.checks.toggle.container.onclick = () => + Editor.setActionOptions(!Editor.elements.checks.toggle.checkbox.checked, Editor.isConfirm); + + Editor.elements.checks.confirm.container.onclick = () => + Editor.setActionOptions(Editor.isToggle, !Editor.elements.checks.confirm.checkbox.checked); + }, + + export(): Page_Key { + if (Editor.isOpen) { + return { + id: Editor.currentKey.id, + actions: Editor.currentKey.actions, + state: { + type: Editor.currentButtonType, + confirm: Editor.isConfirm, + toggle: Editor.isToggle + }, + appearence: { + text: Editor.getElementCategoryValues('text'), + background: Editor.getElementCategoryValues('background'), + image: Editor.getElementCategoryValues('image') + } + }; + } + return null; + }, + + open(x: string, y: string, key: Page_Key) { + if (Editor.isOpen) Editor.close(); + Editor.currentKey = key; + Editor.currentX = x; + Editor.currentY = y; + Editor.isOpen = true; + + document.querySelectorAll('.actionselector').forEach((selector: HTMLInputElement) => { + selector.value = ''; + }); + + // --------- TEXT --------- + { + var textElems = Editor.elements.appearence.text; + var textData: Page_Key_Text = Editor.getAppearenceCategory('text', key); + textElems.content.value = textData.value != undefined ? textData.value : ''; + textElems.size.value = textData.size != undefined ? String(textData.size) : '10'; + textElems.color.value = textData.color != undefined ? textData.color : '#000000'; + textElems.offsetX.value = textData.offsetX != undefined ? String(textData.offsetX) : '0'; + var offsetXNumber: HTMLInputElement = textElems.offsetX.parentElement.querySelector('input[type="number"]'); + offsetXNumber.value = textData.offsetX != undefined ? String(textData.offsetX) : '0'; + textElems.offsetY.value = textData.offsetY != undefined ? String(textData.offsetY) : '0'; + var offsetYNumber: HTMLInputElement = textElems.offsetY.parentElement.querySelector('input[type="number"]'); + offsetYNumber.value = textData.offsetY != undefined ? String(textData.offsetY) : '0'; + } + + // --------- BACKGROUND --------- + { + var backgroundElems = Editor.elements.appearence.background; + var backgroundData: Page_Key_Background = Editor.getAppearenceCategory('background', key); + backgroundElems.color.value = backgroundData.color != undefined ? backgroundData.color : '#000000'; + } + + // --------- IMAGE --------- + { + var imageElems = Editor.elements.appearence.image; + var imageData: Page_Key_Image = Editor.getAppearenceCategory('image', key); + imageElems.size.value = imageData.size != undefined ? String(imageData.size) : '100'; + var sizeNumber: HTMLInputElement = imageElems.size.parentElement.querySelector('input[type="number"]'); + sizeNumber.value = imageData.size != undefined ? String(imageData.size) : '100'; + imageElems.rotation.value = imageData.rotation != undefined ? String(imageData.rotation) : '0'; + var rotationNumber: HTMLInputElement = imageElems.rotation.parentElement.querySelector( + 'input[type="number"]' + ); + rotationNumber.value = imageData.rotation != undefined ? String(imageData.rotation) : '0'; + imageElems.offsetX.value = imageData.offsetX != undefined ? String(imageData.offsetX) : '0'; + var offsetXNumber: HTMLInputElement = imageElems.offsetX.parentElement.querySelector( + 'input[type="number"]' + ); + offsetXNumber.value = imageData.offsetX != undefined ? String(imageData.offsetX) : '0'; + imageElems.offsetY.value = imageData.offsetY != undefined ? String(imageData.offsetY) : '0'; + var offsetYNumber: HTMLInputElement = imageElems.offsetY.parentElement.querySelector( + 'input[type="number"]' + ); + offsetYNumber.value = imageData.offsetY != undefined ? String(imageData.offsetY) : '0'; + } + + if (imageData.address != undefined) { + Editor.selectImageTab('upload', true); + } else if (imageData.iconid != undefined) { + Editor.selectImageTab('icon', true); + Icons.select(imageData.iconid); + } + + Editor.selectButtonType(key.state.type, true); + Editor.setActionOptions(key.state.toggle, key.state.confirm, true); + + var actions = key.actions != undefined ? key.actions : { up: {}, down: {} }; + ActionEditor.open(actions, x, y, key, PageHandler.currentPageID); + + Editor.elements.container.classList.remove('disabled'); + }, + + close() { + Editor.isOpen = false; + Editor.currentKey = null; + Editor.currentX = null; + Editor.currentY = null; + + document.querySelectorAll('.actionselector').forEach((selector: HTMLInputElement) => { + selector.value = ''; + }); + + var text = Editor.elements.appearence.text; + text.content.value = 'Button'; + text.size.value = '20'; + text.color.value = '#ffffff'; + + var background = Editor.elements.appearence.background; + background.color.value = '#000000'; + + Editor.elements.container.classList.add('disabled'); + + Editor.selectImageTab('none', true); + + ActionEditor.close(); + + Icons.deselect(); + }, + + selectImageTab(panelType: 'none' | 'icon' | 'upload', ignoreUpdate = false) { + Editor.elements.imageui.imagetypes.querySelectorAll('.selectoritem').forEach((selectoritem: HTMLDivElement) => { + if (panelType == selectoritem.getAttribute('panel')) selectoritem.classList.add('selected'); + else selectoritem.classList.remove('selected'); + }); + Editor.elements.imageui.imagepanels.querySelectorAll('.panel').forEach((panel: HTMLDivElement) => { + if (panelType == panel.getAttribute('panel')) panel.classList.add('selected'); + else panel.classList.remove('selected'); + }); + Editor.elements.imageui.imageinfopanels.querySelectorAll('.infopanel').forEach((infopanel: HTMLDivElement) => { + if (panelType == infopanel.getAttribute('panel')) infopanel.classList.add('selected'); + else infopanel.classList.remove('selected'); + }); + + Editor.currentImageType = panelType != 'none' ? panelType : null; + + if (panelType == 'none') Editor.elements.imageui.advanced.style.display = 'none'; + else Editor.elements.imageui.advanced.style.display = 'flex'; + + if (panelType == 'icon') Icons.loadOnScreen(); + if (ignoreUpdate == false) Editor.registerChange(); + }, + + selectButtonType(buttonType: KeyTypes, ignoreUpdate = false) { + if (buttonType == 'ghost') buttonType = 'custom'; + + Editor.elements.buttonui.buttontypes.querySelectorAll('.buttonitem').forEach((selectoritem: HTMLDivElement) => { + if (buttonType == selectoritem.getAttribute('type')) selectoritem.classList.add('selected'); + else selectoritem.classList.remove('selected'); + }); + + Editor.currentButtonType = buttonType; + + switch (buttonType) { + case 'empty': + case 'pageup': + case 'pagedown': + case 'currentpage': + Editor.elements.buttonui.visual.style.display = 'none'; + Editor.elements.buttonui.actioninner.style.display = 'none'; + + Editor.elements.buttonui.containerTitles.forEach((title) => (title.style.display = 'none')); + break; + + case 'custom': + Editor.elements.buttonui.visual.style.display = 'block'; + Editor.elements.buttonui.actioninner.style.display = 'block'; + Editor.elements.buttonui.containerTitles.forEach((title) => (title.style.display = 'flex')); + break; + } + + if (ignoreUpdate == false) Editor.registerChange(); + }, + + setActionOptions(toggle: boolean, confirm: boolean, ignoreUpdate = false) { + if (toggle) { + ActionEditor.elements.up.container.style.display = 'none'; + ActionEditor.elements.latch.container.style.display = 'block'; + } else { + ActionEditor.elements.up.container.style.display = 'block'; + ActionEditor.elements.latch.container.style.display = 'none'; + } + if (confirm) { + ActionEditor.elements.down.container.style.display = 'none'; + } else { + ActionEditor.elements.down.container.style.display = 'block'; + } + + Editor.isToggle = toggle; + Editor.isConfirm = confirm; + + Editor.elements.checks.toggle.checkbox.checked = toggle; + Editor.elements.checks.confirm.checkbox.checked = confirm; + + if (ignoreUpdate == false) Editor.registerChange(); + }, + + getAppearenceCategory(category: Editor_Categories, key: Page_Key = Editor.currentKey) { + switch (category) { + case 'text': + var textData: Page_Key_Text = + key.appearence != undefined && key.appearence.text != undefined + ? key.appearence.text + : { value: '', size: 10, color: '#000000', offsetX: 0, offsetY: 0 }; + return textData; + case 'background': + var backgroundData: Page_Key_Background = + key.appearence != undefined && key.appearence.background != undefined + ? key.appearence.background + : { color: '#000000' }; + return backgroundData; + case 'image': + var imageData: Page_Key_Image = + key.appearence != undefined && key.appearence.image != undefined + ? key.appearence.image + : { offsetX: 0, offsetY: 0, size: 100, rotation: 0 }; + return imageData; + } + }, + + getElementCategoryValues(category: Editor_Categories) { + switch (category) { + case 'text': + var textData: Page_Key_Text = { + value: Editor.currentButtonType != 'empty' ? Editor.elements.appearence.text.content.value : '', + color: + Editor.currentButtonType != 'empty' ? Editor.elements.appearence.text.color.value : '#ffffff', + size: + Editor.currentButtonType != 'empty' ? parseInt(Editor.elements.appearence.text.size.value) : 20, + offsetX: + Editor.currentButtonType != 'empty' + ? parseFloat(Editor.elements.appearence.text.offsetX.value) + : 0, + offsetY: + Editor.currentButtonType != 'empty' + ? parseFloat(Editor.elements.appearence.text.offsetY.value) + : 0 + }; + return textData; + case 'background': + var backgroundData: Page_Key_Background = { + color: + Editor.currentButtonType != 'empty' + ? Editor.elements.appearence.background.color.value + : '#000000' + }; + return backgroundData; + case 'image': + var imageData: Page_Key_Image = { + size: + Editor.currentButtonType != 'empty' + ? parseFloat(Editor.elements.appearence.image.size.value) + : 100, + rotation: + Editor.currentButtonType != 'empty' + ? parseFloat(Editor.elements.appearence.image.rotation.value) + : 0, + offsetX: + Editor.currentButtonType != 'empty' + ? parseFloat(Editor.elements.appearence.image.offsetX.value) + : 0, + offsetY: + Editor.currentButtonType != 'empty' + ? parseFloat(Editor.elements.appearence.image.offsetY.value) + : 0 + }; + + if (Editor.currentImageType != null && Editor.currentButtonType != 'empty') { + switch (Editor.currentImageType) { + case 'icon': + imageData.iconid = Icons.currentSelected; + imageData.iconstyle = 'white'; + break; + } + } + + return imageData; + } + } +}; + +Editor.listeners(); + +interface Editor { + elements: { + container: HTMLDivElement; + appearence: { + text: { + content: HTMLInputElement; + size: HTMLSelectElement; + color: HTMLInputElement; + offsetX: HTMLInputElement; + offsetY: HTMLInputElement; + }; + background: { + color: HTMLInputElement; + }; + image: { + size: HTMLInputElement; + offsetX: HTMLInputElement; + offsetY: HTMLInputElement; + rotation: HTMLInputElement; + }; + }; + imageui: { + imagetypes: HTMLDivElement; + imageinfopanels: HTMLDivElement; + imagepanels: HTMLDivElement; + advanced: HTMLDivElement; + }; + + buttonui: { + buttontypes: HTMLDivElement; + visual: HTMLDivElement; + actioninner: HTMLDivElement; + containerTitles: NodeListOf; + }; + + checks: { + toggle: { + container: HTMLDivElement; + checkbox: HTMLInputElement; + }; + confirm: { + container: HTMLDivElement; + checkbox: HTMLInputElement; + }; + }; + }; + + isOpen: boolean; + currentKey: Page_Key; + currentX: string; + currentY: string; + currentImageType: 'icon' | 'upload'; + currentButtonType: KeyTypes; + isToggle: boolean; + isConfirm: boolean; + + listeners: () => void; + export: () => Page_Key; + open: (x: string, y: string, key: Page_Key) => void; + close: () => void; + registerChange: () => void; + selectImageTab: (panelType: string, ignoreUpdate?: boolean) => void; + selectButtonType: (buttonType: KeyTypes, ignoreUpdate?: boolean) => void; + setActionOptions: (toggle: boolean, confirm: boolean, ignoreUpdate?: boolean) => void; + + getAppearenceCategory: (category: Editor_Categories, key?: Page_Key) => any; + getElementCategoryValues: (category: Editor_Categories) => any; +} + +type Editor_Categories = 'text' | 'background' | 'image'; diff --git a/Frontend/pages/home/ts/Icons.ts b/Frontend/pages/home/ts/Icons.ts new file mode 100644 index 0000000..d70a936 --- /dev/null +++ b/Frontend/pages/home/ts/Icons.ts @@ -0,0 +1,85 @@ +var Icons: Icons = { + elements: { + container: document.querySelector('.panel.icons').querySelector('.list') + }, + + resizeTimeout: null, + + currentSelected: null, + + loadOnScreen() { + Icons.elements.container.querySelectorAll('.icon').forEach((icon: HTMLDivElement) => { + var position = icon.getBoundingClientRect(); + + // checking for partial visibility + if (position.top < window.innerHeight && position.bottom >= 0) { + if (icon.hasAttribute('notloaded')) { + icon.removeAttribute('notloaded'); + var iconID = icon.getAttribute('iconID'); + + var whiteImg: HTMLImageElement = icon.querySelector('img.white'); + var blackImg: HTMLImageElement = icon.querySelector('img.black'); + + whiteImg.src = `/stc/materialicons/white/${iconID}.png`; + blackImg.src = `/stc/materialicons/black/${iconID}.png`; + whiteImg.style.opacity = '1'; + blackImg.style.opacity = '0'; + } + } + + icon.onclick = () => Icons.select(icon.getAttribute('iconID')); + }); + }, + + listeners() { + var counter = 0; + Icons.elements.container.onscroll = () => { + counter++; + if (counter > 5) { + Icons.loadOnScreen(); + counter = 0; + } + clearTimeout(Icons.resizeTimeout); + Icons.resizeTimeout = setTimeout(() => { + Icons.loadOnScreen(); + }, 100); + }; + // Icons.loadOnScreen(); + }, + + select(iconID: string, ignoreUpdate: boolean = false) { + var icons = Icons.elements.container.querySelectorAll('.icon'); + for (let i = 0; i < icons.length; i++) { + var testIconID = icons[i].getAttribute('iconID'); + if (iconID != testIconID) icons[i].classList.remove('selected'); + else icons[i].classList.add('selected'); + } + Icons.currentSelected = iconID; + + if (ignoreUpdate == false) Editor.registerChange(); + }, + + deselect() { + var icons = Icons.elements.container.querySelectorAll('.icon'); + for (let i = 0; i < icons.length; i++) icons[i].classList.remove('selected'); + + Icons.currentSelected = null; + } +}; + +Icons.listeners(); + +interface Icons { + elements: { + container: HTMLDivElement; + }; + + resizeTimeout: any; + + currentSelected: string; + + loadOnScreen: () => void; + listeners: () => void; + select: (iconID: string, ignoreUpdate?: boolean) => void; + deselect: () => void; +} diff --git a/Frontend/pages/home/ts/KeyBoardHandler.ts b/Frontend/pages/home/ts/KeyBoardHandler.ts new file mode 100644 index 0000000..d405a0d --- /dev/null +++ b/Frontend/pages/home/ts/KeyBoardHandler.ts @@ -0,0 +1,57 @@ +window.addEventListener('keydown', (ev: KeyboardEvent) => { + if (document.activeElement && document.activeElement.nodeName != 'INPUT') { + if ((isWin() && ev.ctrlKey) || (isMac() && ev.metaKey)) { + switch (ev.key) { + case 'c': + ev.preventDefault(); + if (PageHandler.currentPageID && KeyHandler.selected.length == 1) { + UndeckedClipboard.copyKey( + parseInt(KeyHandler.selected[0].split(',')[0]), + parseInt(KeyHandler.selected[0].split(',')[1]) + ); + } + break; + + case 'x': + ev.preventDefault(); + if (PageHandler.currentPageID && KeyHandler.selected.length == 1) { + UndeckedClipboard.cutKey( + parseInt(KeyHandler.selected[0].split(',')[0]), + parseInt(KeyHandler.selected[0].split(',')[1]) + ); + } + break; + + case 'v': + ev.preventDefault(); + if (PageHandler.currentPageID && KeyHandler.selected.length == 1) { + UndeckedClipboard.pasteKey( + parseInt(KeyHandler.selected[0].split(',')[0]), + parseInt(KeyHandler.selected[0].split(',')[1]) + ); + } + break; + + case 'g': + ev.preventDefault(); + if (PageHandler.currentPageID && KeyHandler.selected.length == 1) { + UndeckedClipboard.copyGhostKey( + parseInt(KeyHandler.selected[0].split(',')[0]), + parseInt(KeyHandler.selected[0].split(',')[1]) + ); + } + break; + } + } else { + switch (ev.key) { + case 'Delete': + var x = parseInt(KeyHandler.selected[0].split(',')[0]); + var y = parseInt(KeyHandler.selected[0].split(',')[1]); + socket.emit('page', 'operation', 'delete', PageHandler.currentPageID, x, y); + Editor.close(); + KeyHandler.select(String(x), String(y)); + break; + } + } + } +}); diff --git a/Frontend/pages/home/ts/KeyHandler.ts b/Frontend/pages/home/ts/KeyHandler.ts new file mode 100644 index 0000000..322a997 --- /dev/null +++ b/Frontend/pages/home/ts/KeyHandler.ts @@ -0,0 +1,372 @@ +var KeyHandler: KeyHandler = { + elements: { + keys: {} + }, + + selected: [], + imagecache: {}, + ghostImage: null, + + init() { + KeyHandler.ghostImage = new Image(); + KeyHandler.ghostImage.src = '/stc/icon/ghost.png'; + KeyHandler.ghostImage.onload = () => { + for (var y = 0; y < 4; y++) { + if (KeyHandler.elements.keys[y] == undefined) KeyHandler.elements.keys[y] = {}; + for (var x = 0; x < 8; x++) { + var keyCheck: HTMLDivElement = document.querySelector(`.key[y="${y}"][x="${x}"]`); + if (keyCheck) { + ((keyX: number, keyY: number, key: HTMLDivElement) => { + var canvas = key.querySelector('canvas'); + var context = canvas.getContext('2d'); + KeyHandler.elements.keys[keyY][keyX] = { key, canvas, context }; + + context.textBaseline = 'middle'; + context.textAlign = 'center'; + + key.onclick = () => { + if (altDown == false) KeyHandler.select(String(keyX), String(keyY)); + else { + socket.emit('page', 'executekey', PageHandler.currentPageID, keyX, keyY); + } + }; + })(x, y, keyCheck); + } + } + } + }; + }, + + clear() { + for (var y in KeyHandler.elements.keys) { + for (var x in KeyHandler.elements.keys[y]) { + var key = KeyHandler.elements.keys[y][x]; + + key.context.clearRect(0, 0, 100, 100); + key.key.classList.remove('selected'); + } + } + KeyHandler.selected = []; + Editor.close(); + }, + + render(x: string, y: string, data: Page_Key) { + if (KeyHandler.elements.keys[String(y)]) { + if (KeyHandler.elements.keys[String(y)][String(x)]) { + var context = KeyHandler.elements.keys[String(y)][String(x)].context; + + context.clearRect(0, 0, renderQuality, renderQuality); + + if (data.state.type == 'custom') { + var appearence = data.appearence; + + render(appearence); + } else if (data.state.type == 'ghost') { + var appearence = data.appearence; + + if (appearence == undefined) appearence = {}; + + appearence.system = { ghost: true }; + + render(appearence); + } else if (data.state.type == 'pageup') { + render({ + text: { value: 'Up', color: '#ffffff', size: 18, offsetX: 0, offsetY: 25 }, + background: { color: '#4676b7' }, + image: { + size: 100, + rotation: 0, + offsetX: 0, + offsetY: -15, + iconid: 'keyboard_arrow_up', + iconstyle: 'white' + }, + system: { + border: { + color: '#253e5e', + thickness: 8 + } + } + }); + } else if (data.state.type == 'pagedown') { + render({ + text: { value: 'Down', color: '#ffffff', size: 18, offsetX: 0, offsetY: -25 }, + background: { color: '#4676b7' }, + image: { + size: 100, + rotation: 0, + offsetX: 0, + offsetY: 15, + iconid: 'keyboard_arrow_down', + iconstyle: 'white' + }, + system: { + border: { + color: '#253e5e', + thickness: 8 + } + } + }); + } else if (data.state.type == 'currentpage') { + render({ + text: { + value: `Page\\n\\n${PageHandler.currentIndex + 1}`, + color: '#ffffff', + size: 22, + offsetX: 0, + offsetY: 0 + }, + background: { color: '#4676b7' }, + system: { + border: { + color: '#253e5e', + thickness: 8 + } + } + }); + } + } else console.error(`Invalid x '${x}'`); + } else console.error(`Invalid y '${y}'`); + + function render(appearence: Page_Key_Appearence) { + if (appearence.background != undefined) { + context.fillStyle = appearence.background.color; + context.fillRect(0, 0, renderQuality, renderQuality); + context.fill(); + } + + if (appearence.text != undefined) { + context.fillStyle = appearence.text.color; + context.font = `800 ${appearence.text.size * fontSizeRatio}px "Montserrat"`; + + var text = appearence.text.value; + var lineHeight = appearence.text.size * fontSizeRatio; + + var centerX = renderQuality / 2 + appearence.text.offsetX / 100 * (renderQuality * 2); + var centerY = renderQuality / 2 + appearence.text.offsetY / 100 * renderQuality; + var canvasYCounter = centerY; + + var words = text.replace(/\\n/g, ' \\n ').split(' '); + var line = ''; + + var totalLineHeight = 0; + for (var n = 0; n < words.length; n++) { + if (words[n].length == 0) continue; + + var testLine = line + words[n] + ' '; + var metrics = context.measureText(testLine); + var testWidth = metrics.width; + if (words[n] != '\\n') + if (testWidth > renderQuality && n > 0) { + line = words[n] + ' '; + totalLineHeight += lineHeight; + } else { + line = testLine; + } + else { + totalLineHeight += lineHeight; + line = ''; + } + } + + line = ''; + canvasYCounter = canvasYCounter - totalLineHeight / 2; + + var firstSkip = false; + for (var n = 0; n < words.length; n++) { + if (words[n].length == 0) continue; + var testLine = line + words[n] + ' '; + var metrics = context.measureText(testLine); + var testWidth = metrics.width; + if (words[n] != '\\n') + if (testWidth > renderQuality && n > 0) { + context.fillText(line, centerX, canvasYCounter); + line = words[n] + ' '; + canvasYCounter += lineHeight; + } else { + line = testLine; + } + else { + context.fillText(line, centerX, canvasYCounter); + line = ''; + + canvasYCounter += firstSkip ? lineHeight * 2 : lineHeight; + if (firstSkip) firstSkip = false; + } + } + context.fillText(line, centerX, canvasYCounter); + } + + if (appearence.image != undefined) { + var imageAddress = + appearence.image.address != undefined + ? appearence.image.address + : appearence.image.iconid != undefined + ? `/stc/materialicons/white/${appearence.image.iconid}.png` + : null; + + var imageSize = + appearence.image.size != undefined ? appearence.image.size / 100 * renderQuality : renderQuality; + if (imageAddress) { + var centerX = renderQuality / 2 + appearence.image.offsetX / 100 * renderQuality; + var centerY = renderQuality / 2 + appearence.image.offsetY / 100 * renderQuality; + + if (KeyHandler.imagecache[imageAddress] != undefined) + renderImage(KeyHandler.imagecache[imageAddress]); + else { + KeyHandler.imagecache[imageAddress] = new Image(); + KeyHandler.imagecache[imageAddress].src = imageAddress; + KeyHandler.imagecache[imageAddress].onload = () => + renderImage(KeyHandler.imagecache[imageAddress]); + } + + function renderImage(image) { + context.save(); + context.translate(centerX, centerY); + context.rotate(appearence.image.rotation * Math.PI / 180); + context.drawImage( + image, + imageSize / 2 - imageSize, + imageSize / 2 - imageSize, + imageSize, + imageSize + ); + context.restore(); + } + } + } + + if (appearence.system != undefined) { + if (appearence.system.border != undefined) { + var relativeThickness = appearence.system.border.thickness / 100 * renderQuality; + context.fillStyle = appearence.system.border.color; + context.fillRect(0, 0, renderQuality, relativeThickness); + context.rect(0, renderQuality - relativeThickness, renderQuality, relativeThickness); + context.rect(0, 0, relativeThickness, renderQuality); + context.rect(renderQuality - relativeThickness, 0, relativeThickness, renderQuality); + context.fill(); + } + + if (appearence.system.ghost == true) { + var size = 50 / 100 * renderQuality; + context.save(); + context.globalAlpha = 0.7; + context.translate(renderQuality / 2, renderQuality / 2); + context.drawImage(KeyHandler.ghostImage, size / 2 - size, size / 2 - size, size, size); + context.restore(); + } + } + } + }, + + select(x: string, y: string, multi: boolean = false) { + if (PageHandler.currentPage != null) { + if (PageHandler.currentPage.keys[y] != undefined && PageHandler.currentPage.keys[y][x] != undefined) { + // var keyConfig = PageHandler.currentPage.keys[y][x]; + + var query = `${x},${y}`; + if (multi) { + if (!KeyHandler.selected.includes(query)) KeyHandler.selected.push(query); + } else + KeyHandler.selected = [ + query + ]; + + document.querySelectorAll('.key').forEach((key: HTMLDivElement) => { + var checkX = key.getAttribute('x'); + var checkY = key.getAttribute('y'); + var checkQuery = `${checkX},${checkY}`; + if (KeyHandler.selected.includes(checkQuery)) key.classList.add('selected'); + else key.classList.remove('selected'); + }); + + if (KeyHandler.selected.length > 1) Editor.close(); + else { + socket.emit('page', 'getkey', PageHandler.currentPageID, x, y, (key: Page_Key) => { + Editor.open(x, y, key); + }); + } + } + } + } +}; +KeyHandler.init(); + +var altDown = false; + +window.addEventListener('keydown', (e: KeyboardEvent) => { + if (e.key == 'alt' || e.altKey == true) altDown = true; +}); +window.addEventListener('keyup', (e: KeyboardEvent) => { + if (e.key == 'alt' || e.altKey == false) altDown = false; +}); + +interface KeyHandler { + elements: { + keys: { + [y: string]: { + [x: string]: { + key: HTMLDivElement; + canvas: HTMLCanvasElement; + context: CanvasRenderingContext2D; + }; + }; + }; + }; + + selected: string[]; + imagecache: { [iconID: string]: HTMLImageElement }; + ghostImage: any; + + init: () => void; + clear: () => void; + render: (x: string, y: string, data: Page_Key) => void; + select: (x: string, y: string, multi?: boolean) => void; +} + +interface Page_Key { + id: string; + state: { + type: KeyTypes; + toggle: boolean; + confirm: boolean; + }; + actions: Page_Key_ActionTypes; + appearence: Page_Key_Appearence; +} +interface Page_Key_Appearence { + text?: Page_Key_Text; + image?: Page_Key_Image; + background?: Page_Key_Background; + system?: { + border?: { + color: string; + thickness: number; + }; + ghost?: boolean; + }; +} + +interface Page_Key_Text { + value: string; + size: number; + color: string; + offsetX: number; + offsetY: number; +} + +interface Page_Key_Image { + address?: string; + iconid?: string; + iconstyle?: 'black' | 'white'; + size: number; + offsetX: number; + offsetY: number; + rotation: number; +} + +interface Page_Key_Background { + color: string; +} + +type KeyTypes = 'empty' | 'custom' | 'pageup' | 'pagedown' | 'currentpage' | 'ghost'; diff --git a/Frontend/pages/home/ts/MetaData.ts b/Frontend/pages/home/ts/MetaData.ts new file mode 100644 index 0000000..2471eb8 --- /dev/null +++ b/Frontend/pages/home/ts/MetaData.ts @@ -0,0 +1,17 @@ +function isMac() { + return navigator.appVersion.indexOf('Mac') != -1; +} +function isWin() { + return navigator.appVersion.indexOf('Win') != -1; +} +function isLinux() { + return navigator.appVersion.indexOf('Linux') != -1; +} +function isUnix() { + return navigator.appVersion.indexOf('X11') != -1; +} + +document.querySelectorAll('.shortcutKey').forEach((command: HTMLDivElement) => { + if (isMac()) command.innerText = 'Command'; + else command.innerText = 'Ctrl'; +}); diff --git a/Frontend/pages/home/ts/OverviewScaler.ts b/Frontend/pages/home/ts/OverviewScaler.ts new file mode 100644 index 0000000..65fed0e --- /dev/null +++ b/Frontend/pages/home/ts/OverviewScaler.ts @@ -0,0 +1,17 @@ +function scaleOverview() { + var overview: HTMLDivElement = document.querySelector('.overview'); + var deck: HTMLDivElement = overview.querySelector('.deck'); + + if (overview.clientWidth > 0) { + var margin = 10; + + var widthScale = overview.clientWidth / (deck.clientWidth + margin * 2); + var heightScale = overview.clientHeight / (deck.clientHeight + margin * 2); + + if (deck.clientHeight * widthScale > overview.clientHeight) deck.style.transform = `scale(${heightScale})`; + else deck.style.transform = `scale(${widthScale})`; + } else setTimeout(scaleOverview, 100); +} + +window.addEventListener('resize', scaleOverview); +scaleOverview(); diff --git a/Frontend/pages/home/ts/PageHandler.ts b/Frontend/pages/home/ts/PageHandler.ts new file mode 100644 index 0000000..96c1a8f --- /dev/null +++ b/Frontend/pages/home/ts/PageHandler.ts @@ -0,0 +1,141 @@ +var PageHandler: PageHandler = { + elements: { + pagename: document.querySelector('.pagename'), + left: document.querySelector('.pageselector').querySelector('.box.left'), + right: document.querySelector('.pageselector').querySelector('.box.right'), + add: document.querySelector('.pageselector').querySelector('.box.add') + }, + + currentPageID: null, + currentPage: null, + currentIndex: null, + + request(pageID: string, index: number) { + socket.emit('page', 'request', pageID, (err?: string, page?: Page_Config) => { + if (err) UndeckedNotification(`Error whilst getting page ${pageID}: ${err}`, 'error', 5000); + else { + PageHandler.currentIndex = index; + PageHandler.render(page); + } + }); + }, + + render(page: Page_Config) { + KeyHandler.clear(); + + PageHandler.currentPageID = page.pageID; + PageHandler.currentPage = page; + + PageList.select(page.pageID); + + PageHandler.elements.pagename.value = page.name; + PageHandler.elements.pagename.removeAttribute('disabled'); + + for (var y in page.keys) { + for (var x in page.keys[y]) { + KeyHandler.render(x, y, page.keys[y][x]); + } + } + }, + + listeners() { + PageHandler.elements.pagename.oninput = () => { + if (PageHandler.currentPageID != null && PageHandler.elements.pagename.value.length > 0) { + socket.emit('page', 'setname', PageHandler.currentPageID, PageHandler.elements.pagename.value); + } + }; + + PageHandler.elements.add.onclick = () => { + var pageName = prompt('New page name', 'Untitled page'); + if (pageName && pageName.length > 0) { + socket.emit('page', 'create', pageName); + } + }; + + PageHandler.elements.left.onclick = () => { + var selected = document.querySelector('.pageitem.selected'); + if (selected && selected.previousElementSibling) (selected.previousElementSibling).click(); + }; + + PageHandler.elements.right.onclick = () => { + var selected = document.querySelector('.pageitem.selected'); + if (selected && selected.nextElementSibling) (selected.nextElementSibling).click(); + }; + } +}; + +PageHandler.listeners(); + +interface PageHandler { + elements: { + pagename: HTMLInputElement; + + left: HTMLDivElement; + right: HTMLDivElement; + add: HTMLDivElement; + }; + + currentPageID: string; + currentPage: Page_Config; + currentIndex: number; + + request: (pageID: string, index: number) => void; + render: (page: Page_Config) => void; + listeners: () => void; +} + +interface Page_Config { + pageID: string; + name?: string; + + keys?: Page_Config_Keys; +} + +interface Page_Config_Keys { + '0'?: { + '0'?: Page_Key; + '1'?: Page_Key; + '2'?: Page_Key; + '3'?: Page_Key; + '4'?: Page_Key; + '5'?: Page_Key; + '6'?: Page_Key; + '7'?: Page_Key; + '8'?: Page_Key; + }; + '1'?: { + '0'?: Page_Key; + '1'?: Page_Key; + '2'?: Page_Key; + '3'?: Page_Key; + '4'?: Page_Key; + '5'?: Page_Key; + '6'?: Page_Key; + '7'?: Page_Key; + '8'?: Page_Key; + }; + '2'?: { + '0'?: Page_Key; + '1'?: Page_Key; + '2'?: Page_Key; + '3'?: Page_Key; + '4'?: Page_Key; + '5'?: Page_Key; + '6'?: Page_Key; + '7'?: Page_Key; + '8'?: Page_Key; + }; + '3'?: { + '0'?: Page_Key; + '1'?: Page_Key; + '2'?: Page_Key; + '3'?: Page_Key; + '4'?: Page_Key; + '5'?: Page_Key; + '6'?: Page_Key; + '7'?: Page_Key; + '8'?: Page_Key; + }; +} + +type Icon = ''; diff --git a/Frontend/pages/home/ts/PageList.ts b/Frontend/pages/home/ts/PageList.ts new file mode 100644 index 0000000..9165298 --- /dev/null +++ b/Frontend/pages/home/ts/PageList.ts @@ -0,0 +1,115 @@ +var PageList: PageList = { + elements: { + container: document.querySelector('.pageselector') + }, + + order: null, + + firstRender: true, + + render(pagelist: PageListItem[]) { + var list = ce('div', 'list'); + + PageList.order = pagelist.map((page) => { + return page.pageID; + }); + + pagelist.forEach((pagelistitem, index) => { + var pageitem = ce('div', 'pageitem', { pageID: pagelistitem.pageID }); + var name = ce('div', 'name', null, pagelistitem.name); + pageitem.appendChild(name); + var move = ce('div', 'move'); + + var up = ce('div', [ + 'moveitem', + 'up' + ]); + up.appendChild(ce('img', 'normal', { src: '/stc/icon/up.png' })); + up.appendChild(ce('img', 'selected', { src: '/stc/icon/up_gray.png' })); + var down = ce('div', [ + 'moveitem', + 'down' + ]); + down.appendChild(ce('img', 'normal', { src: '/stc/icon/down.png' })); + down.appendChild(ce('img', 'selected', { src: '/stc/icon/down_gray.png' })); + up.onclick = (e: MouseEvent) => { + e.stopPropagation(); + + var current = PageList.order.indexOf(pagelistitem.pageID); + var newIndex = Math.max(current - 1, 0); + + PageList.order.splice(current, 1); + PageList.order.splice(newIndex, 0, pagelistitem.pageID); + + socket.emit('page', 'setorder', PageList.order); + }; + down.onclick = (e: MouseEvent) => { + e.stopPropagation(); + + var current = PageList.order.indexOf(pagelistitem.pageID); + var newIndex = Math.max(current + 1, 0); + + PageList.order.splice(current, 1); + PageList.order.splice(newIndex, 0, pagelistitem.pageID); + + socket.emit('page', 'setorder', PageList.order); + }; + move.appendChild(up); + move.appendChild(down); + pageitem.appendChild(move); + pageitem.onclick = () => { + PageHandler.request(pagelistitem.pageID, index); + }; + list.appendChild(pageitem); + + if (PageHandler.currentPageID == pagelistitem.pageID) { + PageHandler.request(pagelistitem.pageID, index); + } + }); + + var existing = PageList.elements.container.querySelector('.list'); + if (existing) existing.parentElement.removeChild(existing); + PageList.elements.container.appendChild(list); + }, + + select(pageID: string): boolean { + var selectedFound = false; + PageList.elements.container.querySelectorAll('.pageitem').forEach((item: HTMLDivElement) => { + var itemPageID = item.getAttribute('pageID'); + if (itemPageID == pageID) { + item.classList.add('selected'); + selectedFound = true; + } else item.classList.remove('selected'); + }); + + if (selectedFound) { + history.pushState(null, null, `/pages/${pageID}`); + TabController.setTitle(`Page ${pageID}`); + } + return selectedFound; + }, + + updateName(pageID: string, name: string) { + var item = PageList.elements.container.querySelector(`.pageitem[pageid="${pageID}"]`); + if (item) { + var nameElement: HTMLDivElement = item.querySelector('.name'); + nameElement.innerText = name; + } + } +}; + +interface PageList { + elements: { + container: HTMLDivElement; + }; + firstRender: boolean; + order: string[]; + + render: (pagelist: PageListItem[]) => void; + select: (pageID: string) => boolean; + updateName: (pageID: string, name: string) => void; +} +interface PageListItem { + pageID: string; + name: string; +} diff --git a/Frontend/pages/home/ts/TabControllers.ts b/Frontend/pages/home/ts/TabControllers.ts new file mode 100644 index 0000000..e17487f --- /dev/null +++ b/Frontend/pages/home/ts/TabControllers.ts @@ -0,0 +1,95 @@ +var TabController: TabController = { + elements: { + menu: document.querySelector('.tabmenu'), + pages: document.querySelector('.tabpages') + }, + + setTitle(title: string) { + var titleElement = document.querySelector('title'); + titleElement.innerText = `Undecked - ${title}`; + }, + + show(tabname: string) { + TabController.elements.menu.querySelectorAll('.item').forEach((element: HTMLDivElement) => { + var tab = element.getAttribute('tab'); + if (tab == tabname) element.classList.add('active'); + else element.classList.remove('active'); + }); + TabController.elements.pages.querySelectorAll('.item').forEach((element: HTMLDivElement) => { + var tab = element.getAttribute('tab'); + if (tab == tabname) element.classList.add('active'); + else element.classList.remove('active'); + }); + + if (tabname == 'pages') { + var pageID = PageHandler.currentPageID; + + history.pushState(null, null, `/pages/pageID`); + TabController.setTitle(`Page ${pageID}`); + } else { + history.pushState(null, null, `/${tabname}`); + + TabController.setTitle(tabname.charAt(0).toUpperCase() + tabname.slice(1)); + } + }, + + registerListeners() { + TabController.elements.menu.querySelectorAll('.item').forEach((element: HTMLDivElement) => { + var tab = element.getAttribute('tab'); + element.onclick = () => { + TabController.show(tab); + }; + }); + }, + + init() { + var args = window.location.pathname.split('/'); + if (args.length > 0) args.splice(0, 1); + + var tab = args.length > 0 ? args[0] : null; + var subTab = args.length > 1 ? args[1] : null; + + if (PageList.order != null) { + if (tab != undefined && tab.length > 0) { + if (tab == 'pages') { + var valid = PageList.select(subTab); + + if (valid) { + var index = PageList.order.indexOf(subTab); + PageHandler.request(PageList.order[index], index); + TabController.show('pages'); + } else { + PageHandler.request(PageList.order[0], 0); + TabController.show('pages'); + } + } else { + PageHandler.request(PageList.order[0], 0); + TabController.show(tab); + } + } else { + PageList.firstRender = false; + PageHandler.request(PageList.order[0], 0); + TabController.show('pages'); + } + } else + setTimeout(() => { + TabController.init(); + }, 200); + } +}; + +TabController.init(); +TabController.registerListeners(); + +interface TabController { + elements: { + menu: HTMLDivElement; + pages: HTMLDivElement; + }; + + setTitle: (title: string) => void; + show: (tabname: string) => void; + registerListeners: () => void; + + init: () => void; +} diff --git a/Frontend/pages/home/tsconfig.json b/Frontend/pages/home/tsconfig.json new file mode 100644 index 0000000..072040f --- /dev/null +++ b/Frontend/pages/home/tsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "watch": true, + "inlineSourceMap": true, + "noImplicitUseStrict": true + } +} \ No newline at end of file diff --git a/Frontend/pages/layouts/main/index.handlebars b/Frontend/pages/layouts/main/index.handlebars new file mode 100644 index 0000000..91ee3f3 --- /dev/null +++ b/Frontend/pages/layouts/main/index.handlebars @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + +
+ +
+
Undecked
+ by Morphix +
+
+
+ {{{body}}} +
+ + + + + \ No newline at end of file diff --git a/Frontend/pages/layouts/main/sass/Anchors.scss b/Frontend/pages/layouts/main/sass/Anchors.scss new file mode 100644 index 0000000..0e2303c --- /dev/null +++ b/Frontend/pages/layouts/main/sass/Anchors.scss @@ -0,0 +1,8 @@ +a { + color: var(--main-color); + text-decoration: none; + + &:hover { + color: var(--main-hover-color); + } +} \ No newline at end of file diff --git a/Frontend/pages/layouts/main/sass/Button.scss b/Frontend/pages/layouts/main/sass/Button.scss new file mode 100644 index 0000000..74a8784 --- /dev/null +++ b/Frontend/pages/layouts/main/sass/Button.scss @@ -0,0 +1,21 @@ +.button { + padding: 4px 15px; + background: var(--main-color); + border-radius: var(--border-radius); + text-decoration: none; + transition-duration: .2s; + cursor: pointer; + font-weight: 500; + + &.secondary { + background: #565656; + + &:hover { + background: #303030; + } + } + + &:hover { + background: var(--main-hover-color); + } +} \ No newline at end of file diff --git a/Frontend/pages/layouts/main/sass/Feedback.scss b/Frontend/pages/layouts/main/sass/Feedback.scss new file mode 100644 index 0000000..2758c0a --- /dev/null +++ b/Frontend/pages/layouts/main/sass/Feedback.scss @@ -0,0 +1,38 @@ +.feedback { + position: absolute; + inset: 0px; + z-index: 2; + overflow: hidden; + pointer-events: none; + + + .notificationcontainer { + position: absolute; + bottom: -50px; + left: 20px; + right: 20px; + display: flex; + justify-content: center; + align-items: flex-end; + + .notification { + padding: 10px 100px; + border-radius: var(--border-radius); + font-size: 14px; + font-weight: 600; + pointer-events: auto; + cursor: pointer; + + &.info { + + background: var(--main-hover-color); + box-shadow: 0px 0px 4px #243d5e; + } + + &.error { + background: var(--color-red-hover); + box-shadow: 0px 0px 4px #431616; + } + } + } +} \ No newline at end of file diff --git a/Frontend/pages/layouts/main/sass/Input.scss b/Frontend/pages/layouts/main/sass/Input.scss new file mode 100644 index 0000000..9c01aea --- /dev/null +++ b/Frontend/pages/layouts/main/sass/Input.scss @@ -0,0 +1,37 @@ +input, +select, +textarea { + border: 2px solid var(--main-hover-color); + transition-duration: .2s; + border-radius: var(--border-radius); + padding: 5px 10px; + background: var(--background); + color: white; + font-family: 'Montserrat', sans-serif; + font-size: 12px; + + + &:hover { + border: 2px solid var(--main-color); + } + + &:focus, + &:active { + border: 2px solid var(--main-color); + outline: none; + } +} + +input[type="color"] { + overflow: hidden; + + &::-webkit-color-swatch-wrapper { + padding: 0px; + width: calc(100% + 22px); + height: calc(100% + 12px); + margin-top: -6px; + margin-left: -11px; + outline: none; + border: none; + } +} \ No newline at end of file diff --git a/Frontend/pages/layouts/main/sass/Layout.scss b/Frontend/pages/layouts/main/sass/Layout.scss new file mode 100644 index 0000000..5b8208a --- /dev/null +++ b/Frontend/pages/layouts/main/sass/Layout.scss @@ -0,0 +1,67 @@ +:root { + --background: #323232; + --main-color: #4676b7; + --main-hover-color: #305383; + --main-secondary-color: #253e5e; + --border-radius: 10px; + --small-border-radius: 10px; + --panel-color: #222; + --subpanel-color: #2c2c2c; + --color-red: #af2a20; + --color-red-hover: #76201a; + --color-green: #195e19; + --color-green-hover: #124412; +} + +body { + background: var(--background); + color: white; + padding: 0px; + margin: 0px; + + font-family: 'Montserrat', sans-serif; +} + +.headercontainer { + position: absolute; + top: 10px; + left: 10px; + right: 10px; + height: 40px; + display: flex; + justify-content: flex-start; + align-items: center; + + img { + height: 100%; + } + + .title { + display: flex; + flex-direction: column; + align-items: flex-start; + + margin-left: 10px; + + .main { + font-size: 24px; + font-weight: 300; + } + + .sub { + font-size: 12px; + font-weight: 300; + color: lightgrey; + } + } +} + +.bodycontainer { + position: absolute; + top: 60px; + bottom: 10px; + left: 10px; + right: 10px; + + +} \ No newline at end of file diff --git a/Frontend/pages/layouts/main/script.js b/Frontend/pages/layouts/main/script.js new file mode 100644 index 0000000..437a618 --- /dev/null +++ b/Frontend/pages/layouts/main/script.js @@ -0,0 +1 @@ +function ce(e,n,t,i,o,s){var c=document.createElement(e);if(n&&("string"==typeof n?c.classList.add(n):(e=c.classList).add.apply(e,n)),t)for(var r in t)c.setAttribute(r,t[r]);if(i&&(c.innerText=i),o&&(c.innerHTML=o),s)for(var r in s)c.style[r]=s[r];return c}var notificationTimeout,UndeckedNotification,notificationOpen=!1;window.addEventListener("DOMContentLoaded",function(){var o={isOpen:!(UndeckedNotification=function(e,n,t){o.open(e,n=void 0===n?"info":n,t=void 0===t?2e3:t)}),timeout:null,transitionDuration:200,elements:{container:document.querySelector(".feedback").querySelector(".notificationcontainer"),box:document.querySelector(".feedback").querySelector(".notification")},open:function(e,n,t){void 0===n&&(n="info");function i(){o.elements.box.classList.remove("info","error"),o.elements.box.classList.add(n),o.elements.box.innerText=e,o.elements.container.style.transitionTimingFunction="ease-out",o.elements.container.style.transitionDuration="".concat(o.transitionDuration,"ms"),o.elements.container.style.bottom="50px",o.isOpen=!0,o.timeout=setTimeout(o.close,t),o.elements.box.onclick=function(){return o.close()}}1==o.isOpen?o.close(i):i()},close:function(e){clearTimeout(o.timeout),o.elements.container.style.transitionTimingFunction="ease-in",o.elements.container.style.bottom="-50px",setTimeout(function(){e&&e(),o.isOpen=!1},o.transitionDuration+100)}}}); \ No newline at end of file diff --git a/Frontend/pages/layouts/main/style.css b/Frontend/pages/layouts/main/style.css new file mode 100644 index 0000000..15a3446 --- /dev/null +++ b/Frontend/pages/layouts/main/style.css @@ -0,0 +1,5 @@ +a{color:var(--main-color);text-decoration:none}a:hover{color:var(--main-hover-color)} +.button{padding:4px 15px;background:var(--main-color);border-radius:var(--border-radius);text-decoration:none;transition-duration:.2s;cursor:pointer;font-weight:500}.button.secondary{background:#565656}.button.secondary:hover{background:#303030}.button:hover{background:var(--main-hover-color)} +.feedback{position:absolute;inset:0;z-index:2;overflow:hidden;pointer-events:none}.feedback .notificationcontainer{position:absolute;bottom:-50px;left:20px;right:20px;display:flex;justify-content:center;align-items:flex-end}.feedback .notificationcontainer .notification{padding:10px 100px;border-radius:var(--border-radius);font-size:14px;font-weight:600;pointer-events:auto;cursor:pointer}.feedback .notificationcontainer .notification.info{background:var(--main-hover-color);box-shadow:0 0 4px #243d5e}.feedback .notificationcontainer .notification.error{background:var(--color-red-hover);box-shadow:0 0 4px #431616} +input,select,textarea{border:2px solid var(--main-hover-color);transition-duration:.2s;border-radius:var(--border-radius);padding:5px 10px;background:var(--background);color:#fff;font-family:Montserrat,sans-serif;font-size:12px}input:hover,select:hover,textarea:hover{border:2px solid var(--main-color)}input:active,input:focus,select:active,select:focus,textarea:active,textarea:focus{border:2px solid var(--main-color);outline:0}input[type=color]{overflow:hidden}input[type=color]::-webkit-color-swatch-wrapper{padding:0;width:calc(100% + 22px);height:calc(100% + 12px);margin-top:-6px;margin-left:-11px;outline:0;border:none} +:root{--background:#323232;--main-color:#4676b7;--main-hover-color:#305383;--main-secondary-color:#253e5e;--border-radius:10px;--small-border-radius:10px;--panel-color:#222;--subpanel-color:#2c2c2c;--color-red:#af2a20;--color-red-hover:#76201a;--color-green:#195e19;--color-green-hover:#124412}body{background:var(--background);color:#fff;padding:0;margin:0;font-family:Montserrat,sans-serif}.headercontainer{position:absolute;top:10px;left:10px;right:10px;height:40px;display:flex;justify-content:flex-start;align-items:center}.headercontainer img{height:100%}.headercontainer .title{display:flex;flex-direction:column;align-items:flex-start;margin-left:10px}.headercontainer .title .main{font-size:24px;font-weight:300}.headercontainer .title .sub{font-size:12px;font-weight:300;color:#d3d3d3}.bodycontainer{position:absolute;top:60px;bottom:10px;left:10px;right:10px} \ No newline at end of file diff --git a/Frontend/pages/layouts/main/ts/CE.ts b/Frontend/pages/layouts/main/ts/CE.ts new file mode 100644 index 0000000..4640241 --- /dev/null +++ b/Frontend/pages/layouts/main/ts/CE.ts @@ -0,0 +1,20 @@ +function ce( + type: string, + classList?: string | string[], + attributes?: { [key: string]: string }, + innerText?: string, + innerHTML?: string, + styling?: { [key: string]: string } +) { + var element = document.createElement(type); + if (classList) + if (typeof classList == 'string') element.classList.add(classList); + else element.classList.add(...classList); + if (attributes) for (var key in attributes) element.setAttribute(key, attributes[key]); + if (innerText) element.innerText = innerText; + if (innerHTML) element.innerHTML = innerHTML; + if (styling) for (var key in styling) element.style[key] = styling[key]; + return element; +} + +// declare var ce:(type:string, classList?:string|string[], attributes?:{[key:string]:string}, innerText?:string, innerHTML?:string) => HTMLDivElement; diff --git a/Frontend/pages/layouts/main/ts/Notification.ts b/Frontend/pages/layouts/main/ts/Notification.ts new file mode 100644 index 0000000..a16a34b --- /dev/null +++ b/Frontend/pages/layouts/main/ts/Notification.ts @@ -0,0 +1,54 @@ +var notificationOpen = false; +var notificationTimeout: NodeJS.Timeout; + +var UndeckedNotification: (message: string, type?: 'info' | 'error', time?: number) => void; + +window.addEventListener('DOMContentLoaded', () => { + UndeckedNotification = (message: string, type: 'info' | 'error' = 'info', time: number = 2000) => { + _UndeckedNotification.open(message, type, time); + }; + + var _UndeckedNotification = { + isOpen: false, + timeout: null as NodeJS.Timeout, + transitionDuration: 200, + + elements: { + container: document.querySelector('.feedback').querySelector('.notificationcontainer') as HTMLDivElement, + box: document.querySelector('.feedback').querySelector('.notification') as HTMLDivElement + }, + + open: (message: string, type: 'info' | 'error' = 'info', time: number) => { + var open = () => { + _UndeckedNotification.elements.box.classList.remove('info', 'error'); + _UndeckedNotification.elements.box.classList.add(type); + _UndeckedNotification.elements.box.innerText = message; + _UndeckedNotification.elements.container.style.transitionTimingFunction = 'ease-out'; + _UndeckedNotification.elements.container.style.transitionDuration = `${_UndeckedNotification.transitionDuration}ms`; + _UndeckedNotification.elements.container.style.bottom = '50px'; + + _UndeckedNotification.isOpen = true; + + _UndeckedNotification.timeout = setTimeout(_UndeckedNotification.close, time); + + _UndeckedNotification.elements.box.onclick = () => _UndeckedNotification.close(); + }; + + if (_UndeckedNotification.isOpen == true) { + _UndeckedNotification.close(open); + } else open(); + }, + + close: (callback?: Function) => { + clearTimeout(_UndeckedNotification.timeout); + _UndeckedNotification.elements.container.style.transitionTimingFunction = 'ease-in'; + _UndeckedNotification.elements.container.style.bottom = '-50px'; + setTimeout(() => { + if (callback) callback(); + _UndeckedNotification.isOpen = false; + }, _UndeckedNotification.transitionDuration + 100); + } + }; +}); + +// declare var UndeckedNotification: (message:string, type?:'info'|"error", time?:number) => void; diff --git a/Frontend/pages/layouts/main/tsconfig.json b/Frontend/pages/layouts/main/tsconfig.json new file mode 100644 index 0000000..c960557 --- /dev/null +++ b/Frontend/pages/layouts/main/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "inlineSourceMap": true, + "noImplicitUseStrict": true + } +} \ No newline at end of file diff --git a/Frontend/pages/settings/package-lock.json b/Frontend/pages/settings/package-lock.json new file mode 100644 index 0000000..3893575 --- /dev/null +++ b/Frontend/pages/settings/package-lock.json @@ -0,0 +1,265 @@ +{ + "name": "settings", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "settings", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "socket.io-client": "^4.4.1" + } + }, + "node_modules/@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.0.0.tgz", + "integrity": "sha512-2pTGuibAXJswAPJjaKisthqS/NOK5ypG4LYT6tEAV0S/mxW0zOIvYvGK0V8w8+SHxAm6vRMSjqSalFXeBAqs+Q==" + }, + "node_modules/backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io-client": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.1.1.tgz", + "integrity": "sha512-V05mmDo4gjimYW+FGujoGmmmxRaDsrVr7AXA3ZIfa04MWM1jOfZfUwou0oNqhNwy/votUDvGDt4JA4QF4e0b4g==", + "dependencies": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "has-cors": "1.1.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~8.2.3", + "xmlhttprequest-ssl": "~2.0.0", + "yeast": "0.1.2" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", + "dependencies": { + "@socket.io/base64-arraybuffer": "~1.0.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + }, + "node_modules/parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + }, + "node_modules/socket.io-client": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.4.1.tgz", + "integrity": "sha512-N5C/L5fLNha5Ojd7Yeb/puKcPWWcoB/A09fEjjNsg91EDVr5twk/OEyO6VT9dlLSUNY85NpW6KBhVMvaLKQ3vQ==", + "dependencies": { + "@socket.io/component-emitter": "~3.0.0", + "backo2": "~1.0.2", + "debug": "~4.3.2", + "engine.io-client": "~6.1.1", + "parseuri": "0.0.6", + "socket.io-parser": "~4.1.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.2.tgz", + "integrity": "sha512-j3kk71QLJuyQ/hh5F/L2t1goqzdTL0gvDzuhTuNSwihfuFUrcSji0qFZmJJPtG6Rmug153eOPsUizeirf1IIog==", + "dependencies": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + }, + "dependencies": { + "@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==" + }, + "@socket.io/component-emitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.0.0.tgz", + "integrity": "sha512-2pTGuibAXJswAPJjaKisthqS/NOK5ypG4LYT6tEAV0S/mxW0zOIvYvGK0V8w8+SHxAm6vRMSjqSalFXeBAqs+Q==" + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "engine.io-client": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.1.1.tgz", + "integrity": "sha512-V05mmDo4gjimYW+FGujoGmmmxRaDsrVr7AXA3ZIfa04MWM1jOfZfUwou0oNqhNwy/votUDvGDt4JA4QF4e0b4g==", + "requires": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "has-cors": "1.1.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~8.2.3", + "xmlhttprequest-ssl": "~2.0.0", + "yeast": "0.1.2" + } + }, + "engine.io-parser": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", + "requires": { + "@socket.io/base64-arraybuffer": "~1.0.2" + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + }, + "parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + }, + "socket.io-client": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.4.1.tgz", + "integrity": "sha512-N5C/L5fLNha5Ojd7Yeb/puKcPWWcoB/A09fEjjNsg91EDVr5twk/OEyO6VT9dlLSUNY85NpW6KBhVMvaLKQ3vQ==", + "requires": { + "@socket.io/component-emitter": "~3.0.0", + "backo2": "~1.0.2", + "debug": "~4.3.2", + "engine.io-client": "~6.1.1", + "parseuri": "0.0.6", + "socket.io-parser": "~4.1.1" + } + }, + "socket.io-parser": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.2.tgz", + "integrity": "sha512-j3kk71QLJuyQ/hh5F/L2t1goqzdTL0gvDzuhTuNSwihfuFUrcSji0qFZmJJPtG6Rmug153eOPsUizeirf1IIog==", + "requires": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1" + } + }, + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "requires": {} + }, + "xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==" + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + } +} diff --git a/Frontend/pages/settings/package.json b/Frontend/pages/settings/package.json new file mode 100644 index 0000000..db668db --- /dev/null +++ b/Frontend/pages/settings/package.json @@ -0,0 +1,14 @@ +{ + "name": "settings", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "socket.io-client": "^4.4.1" + } +} diff --git a/Static/font/Montserrat-Black.ttf b/Static/font/Montserrat-Black.ttf new file mode 100644 index 0000000..93b8bab Binary files /dev/null and b/Static/font/Montserrat-Black.ttf differ diff --git a/Static/font/Montserrat-BlackItalic.ttf b/Static/font/Montserrat-BlackItalic.ttf new file mode 100644 index 0000000..438630e Binary files /dev/null and b/Static/font/Montserrat-BlackItalic.ttf differ diff --git a/Static/font/Montserrat-Bold.ttf b/Static/font/Montserrat-Bold.ttf new file mode 100644 index 0000000..55e0b1a Binary files /dev/null and b/Static/font/Montserrat-Bold.ttf differ diff --git a/Static/font/Montserrat-BoldItalic.ttf b/Static/font/Montserrat-BoldItalic.ttf new file mode 100644 index 0000000..6b4541d Binary files /dev/null and b/Static/font/Montserrat-BoldItalic.ttf differ diff --git a/Static/font/Montserrat-ExtraBold.ttf b/Static/font/Montserrat-ExtraBold.ttf new file mode 100644 index 0000000..7b4f267 Binary files /dev/null and b/Static/font/Montserrat-ExtraBold.ttf differ diff --git a/Static/font/Montserrat-ExtraBoldItalic.ttf b/Static/font/Montserrat-ExtraBoldItalic.ttf new file mode 100644 index 0000000..66ccd46 Binary files /dev/null and b/Static/font/Montserrat-ExtraBoldItalic.ttf differ diff --git a/Static/font/Montserrat-ExtraLight.ttf b/Static/font/Montserrat-ExtraLight.ttf new file mode 100644 index 0000000..532cbb5 Binary files /dev/null and b/Static/font/Montserrat-ExtraLight.ttf differ diff --git a/Static/font/Montserrat-ExtraLightItalic.ttf b/Static/font/Montserrat-ExtraLightItalic.ttf new file mode 100644 index 0000000..150591a Binary files /dev/null and b/Static/font/Montserrat-ExtraLightItalic.ttf differ diff --git a/Static/font/Montserrat-Italic.ttf b/Static/font/Montserrat-Italic.ttf new file mode 100644 index 0000000..be99e1c Binary files /dev/null and b/Static/font/Montserrat-Italic.ttf differ diff --git a/Static/font/Montserrat-Light.ttf b/Static/font/Montserrat-Light.ttf new file mode 100644 index 0000000..2c91484 Binary files /dev/null and b/Static/font/Montserrat-Light.ttf differ diff --git a/Static/font/Montserrat-LightItalic.ttf b/Static/font/Montserrat-LightItalic.ttf new file mode 100644 index 0000000..7082e03 Binary files /dev/null and b/Static/font/Montserrat-LightItalic.ttf differ diff --git a/Static/font/Montserrat-Medium.ttf b/Static/font/Montserrat-Medium.ttf new file mode 100644 index 0000000..0f0fd1d Binary files /dev/null and b/Static/font/Montserrat-Medium.ttf differ diff --git a/Static/font/Montserrat-MediumItalic.ttf b/Static/font/Montserrat-MediumItalic.ttf new file mode 100644 index 0000000..5bd6dd2 Binary files /dev/null and b/Static/font/Montserrat-MediumItalic.ttf differ diff --git a/Static/font/Montserrat-Regular.ttf b/Static/font/Montserrat-Regular.ttf new file mode 100644 index 0000000..1cd0259 Binary files /dev/null and b/Static/font/Montserrat-Regular.ttf differ diff --git a/Static/font/Montserrat-SemiBold.ttf b/Static/font/Montserrat-SemiBold.ttf new file mode 100644 index 0000000..ccaba1a Binary files /dev/null and b/Static/font/Montserrat-SemiBold.ttf differ diff --git a/Static/font/Montserrat-SemiBoldItalic.ttf b/Static/font/Montserrat-SemiBoldItalic.ttf new file mode 100644 index 0000000..b8278b9 Binary files /dev/null and b/Static/font/Montserrat-SemiBoldItalic.ttf differ diff --git a/Static/font/Montserrat-Thin.ttf b/Static/font/Montserrat-Thin.ttf new file mode 100644 index 0000000..a6d0321 Binary files /dev/null and b/Static/font/Montserrat-Thin.ttf differ diff --git a/Static/font/Montserrat-ThinItalic.ttf b/Static/font/Montserrat-ThinItalic.ttf new file mode 100644 index 0000000..585c82b Binary files /dev/null and b/Static/font/Montserrat-ThinItalic.ttf differ diff --git a/Static/icon/add.png b/Static/icon/add.png new file mode 100644 index 0000000..2eec042 Binary files /dev/null and b/Static/icon/add.png differ diff --git a/Static/icon/copy.png b/Static/icon/copy.png new file mode 100644 index 0000000..8cdf846 Binary files /dev/null and b/Static/icon/copy.png differ diff --git a/Static/icon/cut.png b/Static/icon/cut.png new file mode 100644 index 0000000..aa0939e Binary files /dev/null and b/Static/icon/cut.png differ diff --git a/Static/icon/down.png b/Static/icon/down.png new file mode 100644 index 0000000..e894309 Binary files /dev/null and b/Static/icon/down.png differ diff --git a/Static/icon/down_gray.png b/Static/icon/down_gray.png new file mode 100644 index 0000000..93e44de Binary files /dev/null and b/Static/icon/down_gray.png differ diff --git a/Static/icon/ghost.png b/Static/icon/ghost.png new file mode 100644 index 0000000..245fcef Binary files /dev/null and b/Static/icon/ghost.png differ diff --git a/Static/icon/left.png b/Static/icon/left.png new file mode 100644 index 0000000..7815026 Binary files /dev/null and b/Static/icon/left.png differ diff --git a/Static/icon/paste.png b/Static/icon/paste.png new file mode 100644 index 0000000..251bab3 Binary files /dev/null and b/Static/icon/paste.png differ diff --git a/Static/icon/right.png b/Static/icon/right.png new file mode 100644 index 0000000..7b4866a Binary files /dev/null and b/Static/icon/right.png differ diff --git a/Static/icon/trash.png b/Static/icon/trash.png new file mode 100644 index 0000000..0573215 Binary files /dev/null and b/Static/icon/trash.png differ diff --git a/Static/icon/up.png b/Static/icon/up.png new file mode 100644 index 0000000..d3c8fe3 Binary files /dev/null and b/Static/icon/up.png differ diff --git a/Static/icon/up_gray.png b/Static/icon/up_gray.png new file mode 100644 index 0000000..7828213 Binary files /dev/null and b/Static/icon/up_gray.png differ diff --git a/Static/libs/socket.io.min.js b/Static/libs/socket.io.min.js new file mode 100644 index 0000000..8560bed --- /dev/null +++ b/Static/libs/socket.io.min.js @@ -0,0 +1,7 @@ +/*! + * Socket.IO v4.4.1 + * (c) 2014-2022 Guillermo Rauch + * Released under the MIT License. + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).io=e()}(this,(function(){"use strict";function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,a=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return s=t.done,t},e:function(t){a=!0,i=t},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw i}}}}var d=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,y=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],v=function(t){var e=t,n=t.indexOf("["),r=t.indexOf("]");-1!=n&&-1!=r&&(t=t.substring(0,n)+t.substring(n,r).replace(/:/g,";")+t.substring(r,t.length));for(var o,i,s=d.exec(t||""),a={},c=14;c--;)a[y[c]]=s[c]||"";return-1!=n&&-1!=r&&(a.source=e,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,":"),a.authority=a.authority.replace("[","").replace("]","").replace(/;/g,":"),a.ipv6uri=!0),a.pathNames=function(t,e){var n=/\/{2,9}/g,r=e.replace(n,"/").split("/");"/"!=e.substr(0,1)&&0!==e.length||r.splice(0,1);"/"==e.substr(e.length-1,1)&&r.splice(r.length-1,1);return r}(0,a.path),a.queryKey=(o=a.query,i={},o.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,(function(t,e,n){e&&(i[e]=n)})),i),a};var m={exports:{}};try{m.exports="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(t){m.exports=!1}var g=m.exports,k="undefined"!=typeof self?self:"undefined"!=typeof window?window:Function("return this")();function b(t){var e=t.xdomain;try{if("undefined"!=typeof XMLHttpRequest&&(!e||g))return new XMLHttpRequest}catch(t){}if(!e)try{return new(k[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(t){}}function w(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r1?{type:O[n],data:t.substring(1)}:{type:O[n]}:S},M=function(t,e){if(I){var n=function(t){var e,n,r,o,i,s=.75*t.length,a=t.length,c=0;"="===t[t.length-1]&&(s--,"="===t[t.length-2]&&s--);var u=new ArrayBuffer(s),h=new Uint8Array(u);for(e=0;e>4,h[c++]=(15&r)<<4|o>>2,h[c++]=(3&o)<<6|63&i;return u}(t);return U(n,e)}return{base64:!0,data:t}},U=function(t,e){return"blob"===e&&t instanceof ArrayBuffer?new Blob([t]):t},V=String.fromCharCode(30),H=function(t){i(o,t);var n=h(o);function o(t){var r;return e(this,o),(r=n.call(this)).writable=!1,A(c(r),t),r.opts=t,r.query=t.query,r.readyState="",r.socket=t.socket,r}return r(o,[{key:"onError",value:function(t,e){var n=new Error(t);return n.type="TransportError",n.description=e,f(s(o.prototype),"emit",this).call(this,"error",n),this}},{key:"open",value:function(){return"closed"!==this.readyState&&""!==this.readyState||(this.readyState="opening",this.doOpen()),this}},{key:"close",value:function(){return"opening"!==this.readyState&&"open"!==this.readyState||(this.doClose(),this.onClose()),this}},{key:"send",value:function(t){"open"===this.readyState&&this.write(t)}},{key:"onOpen",value:function(){this.readyState="open",this.writable=!0,f(s(o.prototype),"emit",this).call(this,"open")}},{key:"onData",value:function(t){var e=F(t,this.socket.binaryType);this.onPacket(e)}},{key:"onPacket",value:function(t){f(s(o.prototype),"emit",this).call(this,"packet",t)}},{key:"onClose",value:function(){this.readyState="closed",f(s(o.prototype),"emit",this).call(this,"close")}}]),o}(R),K="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),Y={},z=0,$=0;function W(t){var e="";do{e=K[t%64]+e,t=Math.floor(t/64)}while(t>0);return e}function J(){var t=W(+new Date);return t!==D?(z=0,D=t):t+"."+W(z++)}for(;$<64;$++)Y[K[$]]=$;J.encode=W,J.decode=function(t){var e=0;for($=0;$0&&void 0!==arguments[0]?arguments[0]:{};return o(t,{xd:this.xd,xs:this.xs},this.opts),new nt(this.uri(),t)}},{key:"doWrite",value:function(t,e){var n=this,r=this.request({method:"POST",data:t});r.on("success",e),r.on("error",(function(t){n.onError("xhr post error",t)}))}},{key:"doPoll",value:function(){var t=this,e=this.request();e.on("data",this.onData.bind(this)),e.on("error",(function(e){t.onError("xhr poll error",e)})),this.pollXhr=e}}]),s}(Q),nt=function(t){i(o,t);var n=h(o);function o(t,r){var i;return e(this,o),A(c(i=n.call(this)),r),i.opts=r,i.method=r.method||"GET",i.uri=t,i.async=!1!==r.async,i.data=void 0!==r.data?r.data:null,i.create(),i}return r(o,[{key:"create",value:function(){var t=this,e=w(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");e.xdomain=!!this.opts.xd,e.xscheme=!!this.opts.xs;var n=this.xhr=new b(e);try{n.open(this.method,this.uri,this.async);try{if(this.opts.extraHeaders)for(var r in n.setDisableHeaderCheck&&n.setDisableHeaderCheck(!0),this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(r)&&n.setRequestHeader(r,this.opts.extraHeaders[r])}catch(t){}if("POST"===this.method)try{n.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(t){}try{n.setRequestHeader("Accept","*/*")}catch(t){}"withCredentials"in n&&(n.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(n.timeout=this.opts.requestTimeout),n.onreadystatechange=function(){4===n.readyState&&(200===n.status||1223===n.status?t.onLoad():t.setTimeoutFn((function(){t.onError("number"==typeof n.status?n.status:0)}),0))},n.send(this.data)}catch(e){return void this.setTimeoutFn((function(){t.onError(e)}),0)}"undefined"!=typeof document&&(this.index=o.requestsCount++,o.requests[this.index]=this)}},{key:"onSuccess",value:function(){this.emit("success"),this.cleanup()}},{key:"onData",value:function(t){this.emit("data",t),this.onSuccess()}},{key:"onError",value:function(t){this.emit("error",t),this.cleanup(!0)}},{key:"cleanup",value:function(t){if(void 0!==this.xhr&&null!==this.xhr){if(this.xhr.onreadystatechange=Z,t)try{this.xhr.abort()}catch(t){}"undefined"!=typeof document&&delete o.requests[this.index],this.xhr=null}}},{key:"onLoad",value:function(){var t=this.xhr.responseText;null!==t&&this.onData(t)}},{key:"abort",value:function(){this.cleanup()}}]),o}(R);if(nt.requestsCount=0,nt.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",rt);else if("function"==typeof addEventListener){addEventListener("onpagehide"in k?"pagehide":"unload",rt,!1)}function rt(){for(var t in nt.requests)nt.requests.hasOwnProperty(t)&&nt.requests[t].abort()}var ot="function"==typeof Promise&&"function"==typeof Promise.resolve?function(t){return Promise.resolve().then(t)}:function(t,e){return e(t,0)},it=k.WebSocket||k.MozWebSocket,st="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),at=function(t){i(o,t);var n=h(o);function o(t){var r;return e(this,o),(r=n.call(this,t)).supportsBinary=!t.forceBase64,r}return r(o,[{key:"name",get:function(){return"websocket"}},{key:"doOpen",value:function(){if(this.check()){var t=this.uri(),e=this.opts.protocols,n=st?{}:w(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(n.headers=this.opts.extraHeaders);try{this.ws=st?new it(t,e,n):e?new it(t,e):new it(t)}catch(t){return this.emit("error",t)}this.ws.binaryType=this.socket.binaryType||"arraybuffer",this.addEventListeners()}}},{key:"addEventListeners",value:function(){var t=this;this.ws.onopen=function(){t.opts.autoUnref&&t.ws._socket.unref(),t.onOpen()},this.ws.onclose=this.onClose.bind(this),this.ws.onmessage=function(e){return t.onData(e.data)},this.ws.onerror=function(e){return t.onError("websocket error",e)}}},{key:"write",value:function(t){var e=this;this.writable=!1;for(var n=function(n){var r=t[n],o=n===t.length-1;x(r,e.supportsBinary,(function(t){try{e.ws.send(t)}catch(t){}o&&ot((function(){e.writable=!0,e.emit("drain")}),e.setTimeoutFn)}))},r=0;r1&&void 0!==arguments[1]?arguments[1]:{};return e(this,a),r=s.call(this),n&&"object"===t(n)&&(i=n,n=null),n?(n=v(n),i.hostname=n.host,i.secure="https"===n.protocol||"wss"===n.protocol,i.port=n.port,n.query&&(i.query=n.query)):i.host&&(i.hostname=v(i.host).host),A(c(r),i),r.secure=null!=i.secure?i.secure:"undefined"!=typeof location&&"https:"===location.protocol,i.hostname&&!i.port&&(i.port=r.secure?"443":"80"),r.hostname=i.hostname||("undefined"!=typeof location?location.hostname:"localhost"),r.port=i.port||("undefined"!=typeof location&&location.port?location.port:r.secure?"443":"80"),r.transports=i.transports||["polling","websocket"],r.readyState="",r.writeBuffer=[],r.prevBufferLen=0,r.opts=o({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!0},i),r.opts.path=r.opts.path.replace(/\/$/,"")+"/","string"==typeof r.opts.query&&(r.opts.query=G.decode(r.opts.query)),r.id=null,r.upgrades=null,r.pingInterval=null,r.pingTimeout=null,r.pingTimeoutTimer=null,"function"==typeof addEventListener&&(r.opts.closeOnBeforeunload&&addEventListener("beforeunload",(function(){r.transport&&(r.transport.removeAllListeners(),r.transport.close())}),!1),"localhost"!==r.hostname&&(r.offlineEventListener=function(){r.onClose("transport close")},addEventListener("offline",r.offlineEventListener,!1))),r.open(),r}return r(a,[{key:"createTransport",value:function(t){var e=function(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}(this.opts.query);e.EIO=4,e.transport=t,this.id&&(e.sid=this.id);var n=o({},this.opts.transportOptions[t],this.opts,{query:e,socket:this,hostname:this.hostname,secure:this.secure,port:this.port});return new ct[t](n)}},{key:"open",value:function(){var t,e=this;if(this.opts.rememberUpgrade&&a.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))t="websocket";else{if(0===this.transports.length)return void this.setTimeoutFn((function(){e.emitReserved("error","No transports available")}),0);t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(t){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)}},{key:"setTransport",value:function(t){var e=this;this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",(function(){e.onClose("transport close")}))}},{key:"probe",value:function(t){var e=this,n=this.createTransport(t),r=!1;a.priorWebsocketSuccess=!1;var o=function(){r||(n.send([{type:"ping",data:"probe"}]),n.once("packet",(function(t){if(!r)if("pong"===t.type&&"probe"===t.data){if(e.upgrading=!0,e.emitReserved("upgrading",n),!n)return;a.priorWebsocketSuccess="websocket"===n.name,e.transport.pause((function(){r||"closed"!==e.readyState&&(f(),e.setTransport(n),n.send([{type:"upgrade"}]),e.emitReserved("upgrade",n),n=null,e.upgrading=!1,e.flush())}))}else{var o=new Error("probe error");o.transport=n.name,e.emitReserved("upgradeError",o)}})))};function i(){r||(r=!0,f(),n.close(),n=null)}var s=function(t){var r=new Error("probe error: "+t);r.transport=n.name,i(),e.emitReserved("upgradeError",r)};function c(){s("transport closed")}function u(){s("socket closed")}function h(t){n&&t.name!==n.name&&i()}var f=function(){n.removeListener("open",o),n.removeListener("error",s),n.removeListener("close",c),e.off("close",u),e.off("upgrading",h)};n.once("open",o),n.once("error",s),n.once("close",c),this.once("close",u),this.once("upgrading",h),n.open()}},{key:"onOpen",value:function(){if(this.readyState="open",a.priorWebsocketSuccess="websocket"===this.transport.name,this.emitReserved("open"),this.flush(),"open"===this.readyState&&this.opts.upgrade&&this.transport.pause)for(var t=0,e=this.upgrades.length;t0;case bt.ACK:case bt.BINARY_ACK:return Array.isArray(n)}}}]),a}(R);var Et=function(){function t(n){e(this,t),this.packet=n,this.buffers=[],this.reconPack=n}return r(t,[{key:"takeBinaryData",value:function(t){if(this.buffers.push(t),this.buffers.length===this.reconPack.attachments){var e=gt(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null}},{key:"finishedReconstruction",value:function(){this.reconPack=null,this.buffers=[]}}]),t}(),At=Object.freeze({__proto__:null,protocol:5,get PacketType(){return bt},Encoder:wt,Decoder:_t});function Rt(t,e,n){return t.on(e,n),function(){t.off(e,n)}}var Tt=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1}),Ct=function(t){i(o,t);var n=h(o);function o(t,r,i){var s;return e(this,o),(s=n.call(this)).connected=!1,s.disconnected=!0,s.receiveBuffer=[],s.sendBuffer=[],s.ids=0,s.acks={},s.flags={},s.io=t,s.nsp=r,i&&i.auth&&(s.auth=i.auth),s.io._autoConnect&&s.open(),s}return r(o,[{key:"subEvents",value:function(){if(!this.subs){var t=this.io;this.subs=[Rt(t,"open",this.onopen.bind(this)),Rt(t,"packet",this.onpacket.bind(this)),Rt(t,"error",this.onerror.bind(this)),Rt(t,"close",this.onclose.bind(this))]}}},{key:"active",get:function(){return!!this.subs}},{key:"connect",value:function(){return this.connected||(this.subEvents(),this.io._reconnecting||this.io.open(),"open"===this.io._readyState&&this.onopen()),this}},{key:"open",value:function(){return this.connect()}},{key:"send",value:function(){for(var t=arguments.length,e=new Array(t),n=0;n1?e-1:0),r=1;r0&&t.jitter<=1?t.jitter:0,this.attempts=0}St.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),n=Math.floor(e*this.jitter*t);t=0==(1&Math.floor(10*e))?t-n:t+n}return 0|Math.min(t,this.max)},St.prototype.reset=function(){this.attempts=0},St.prototype.setMin=function(t){this.ms=t},St.prototype.setMax=function(t){this.max=t},St.prototype.setJitter=function(t){this.jitter=t};var Bt=function(n){i(s,n);var o=h(s);function s(n,r){var i,a;e(this,s),(i=o.call(this)).nsps={},i.subs=[],n&&"object"===t(n)&&(r=n,n=void 0),(r=r||{}).path=r.path||"/socket.io",i.opts=r,A(c(i),r),i.reconnection(!1!==r.reconnection),i.reconnectionAttempts(r.reconnectionAttempts||1/0),i.reconnectionDelay(r.reconnectionDelay||1e3),i.reconnectionDelayMax(r.reconnectionDelayMax||5e3),i.randomizationFactor(null!==(a=r.randomizationFactor)&&void 0!==a?a:.5),i.backoff=new Ot({min:i.reconnectionDelay(),max:i.reconnectionDelayMax(),jitter:i.randomizationFactor()}),i.timeout(null==r.timeout?2e4:r.timeout),i._readyState="closed",i.uri=n;var u=r.parser||At;return i.encoder=new u.Encoder,i.decoder=new u.Decoder,i._autoConnect=!1!==r.autoConnect,i._autoConnect&&i.open(),i}return r(s,[{key:"reconnection",value:function(t){return arguments.length?(this._reconnection=!!t,this):this._reconnection}},{key:"reconnectionAttempts",value:function(t){return void 0===t?this._reconnectionAttempts:(this._reconnectionAttempts=t,this)}},{key:"reconnectionDelay",value:function(t){var e;return void 0===t?this._reconnectionDelay:(this._reconnectionDelay=t,null===(e=this.backoff)||void 0===e||e.setMin(t),this)}},{key:"randomizationFactor",value:function(t){var e;return void 0===t?this._randomizationFactor:(this._randomizationFactor=t,null===(e=this.backoff)||void 0===e||e.setJitter(t),this)}},{key:"reconnectionDelayMax",value:function(t){var e;return void 0===t?this._reconnectionDelayMax:(this._reconnectionDelayMax=t,null===(e=this.backoff)||void 0===e||e.setMax(t),this)}},{key:"timeout",value:function(t){return arguments.length?(this._timeout=t,this):this._timeout}},{key:"maybeReconnectOnOpen",value:function(){!this._reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()}},{key:"open",value:function(t){var e=this;if(~this._readyState.indexOf("open"))return this;this.engine=new ut(this.uri,this.opts);var n=this.engine,r=this;this._readyState="opening",this.skipReconnect=!1;var o=Rt(n,"open",(function(){r.onopen(),t&&t()})),i=Rt(n,"error",(function(n){r.cleanup(),r._readyState="closed",e.emitReserved("error",n),t?t(n):r.maybeReconnectOnOpen()}));if(!1!==this._timeout){var s=this._timeout;0===s&&o();var a=this.setTimeoutFn((function(){o(),n.close(),n.emit("error",new Error("timeout"))}),s);this.opts.autoUnref&&a.unref(),this.subs.push((function(){clearTimeout(a)}))}return this.subs.push(o),this.subs.push(i),this}},{key:"connect",value:function(t){return this.open(t)}},{key:"onopen",value:function(){this.cleanup(),this._readyState="open",this.emitReserved("open");var t=this.engine;this.subs.push(Rt(t,"ping",this.onping.bind(this)),Rt(t,"data",this.ondata.bind(this)),Rt(t,"error",this.onerror.bind(this)),Rt(t,"close",this.onclose.bind(this)),Rt(this.decoder,"decoded",this.ondecoded.bind(this)))}},{key:"onping",value:function(){this.emitReserved("ping")}},{key:"ondata",value:function(t){this.decoder.add(t)}},{key:"ondecoded",value:function(t){this.emitReserved("packet",t)}},{key:"onerror",value:function(t){this.emitReserved("error",t)}},{key:"socket",value:function(t,e){var n=this.nsps[t];return n||(n=new Ct(this,t,e),this.nsps[t]=n),n}},{key:"_destroy",value:function(t){for(var e=0,n=Object.keys(this.nsps);e=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{var n=this.backoff.duration();this._reconnecting=!0;var r=this.setTimeoutFn((function(){e.skipReconnect||(t.emitReserved("reconnect_attempt",e.backoff.attempts),e.skipReconnect||e.open((function(n){n?(e._reconnecting=!1,e.reconnect(),t.emitReserved("reconnect_error",n)):e.onreconnect()})))}),n);this.opts.autoUnref&&r.unref(),this.subs.push((function(){clearTimeout(r)}))}}},{key:"onreconnect",value:function(){var t=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",t)}}]),s}(R),Nt={};function xt(e,n){"object"===t(e)&&(n=e,e=void 0);var r,o=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,r=t;n=n||"undefined"!=typeof location&&location,null==t&&(t=n.protocol+"//"+n.host),"string"==typeof t&&("/"===t.charAt(0)&&(t="/"===t.charAt(1)?n.protocol+t:n.host+t),/^(https?|wss?):\/\//.test(t)||(t=void 0!==n?n.protocol+"//"+t:"https://"+t),r=v(t)),r.port||(/^(http|ws)$/.test(r.protocol)?r.port="80":/^(http|ws)s$/.test(r.protocol)&&(r.port="443")),r.path=r.path||"/";var o=-1!==r.host.indexOf(":")?"["+r.host+"]":r.host;return r.id=r.protocol+"://"+o+":"+r.port+e,r.href=r.protocol+"://"+o+(n&&n.port===r.port?"":":"+r.port),r}(e,(n=n||{}).path||"/socket.io"),i=o.source,s=o.id,a=o.path,c=Nt[s]&&a in Nt[s].nsps;return n.forceNew||n["force new connection"]||!1===n.multiplex||c?r=new Bt(i,n):(Nt[s]||(Nt[s]=new Bt(i,n)),r=Nt[s]),o.query&&!n.query&&(n.query=o.queryKey),r.socket(o.path,n)}return o(xt,{Manager:Bt,Socket:Ct,io:xt,connect:xt}),xt})); +//# sourceMappingURL=socket.io.min.js.map diff --git a/Static/logo/256.ico b/Static/logo/256.ico new file mode 100644 index 0000000..39822ea Binary files /dev/null and b/Static/logo/256.ico differ diff --git a/Static/logo/256.png b/Static/logo/256.png new file mode 100644 index 0000000..87f4998 Binary files /dev/null and b/Static/logo/256.png differ diff --git a/Static/logo/512.ico b/Static/logo/512.ico new file mode 100644 index 0000000..b940d50 Binary files /dev/null and b/Static/logo/512.ico differ diff --git a/Static/logo/512.png b/Static/logo/512.png new file mode 100644 index 0000000..a058058 Binary files /dev/null and b/Static/logo/512.png differ diff --git a/Static/logo/single.ico b/Static/logo/single.ico new file mode 100644 index 0000000..969a91b Binary files /dev/null and b/Static/logo/single.ico differ diff --git a/Static/logo/single.png b/Static/logo/single.png new file mode 100644 index 0000000..f9c8ddd Binary files /dev/null and b/Static/logo/single.png differ diff --git a/Static/materialicons.zip b/Static/materialicons.zip new file mode 100644 index 0000000..bc2bfd7 Binary files /dev/null and b/Static/materialicons.zip differ