diff --git a/index.html b/index.html index 81b5fb1..2bdf5b8 100644 --- a/index.html +++ b/index.html @@ -488,62 +488,8 @@ - - - - 0x76 - - - 0 - - - - - - - - 73 - - - - - - - - - - 0x69 - - - - - - - #ff0000 - #3333ff - - - 28 - - - - - 15 - - - - - - - - - 0 - - - - - - + diff --git a/index.js b/index.js index 585c6a9..9231916 100644 --- a/index.js +++ b/index.js @@ -93,9 +93,6 @@ Blockly.Msg["UGJ_FOREACH_TITLE"] = "リスト %1 の各 %2 について %3 %4"; Blockly.Msg["UGJ_FOREACH_ITEM"] = "項目"; Blockly.Msg["UGJ_FOREACH_TOOLTIP"] = "リストの各項目について、その項目を変数「項目」としてステートメントを実行します。"; -Blockly.Msg["UGJ_DRAW_GRIDEYEDATA_TITLE"] = "赤外線アレイセンサ画像表示 %1 温度データ %2 温度範囲上限 %3 %4 温度範囲下限 %5 %6"; -Blockly.Msg["UGJ_DRAW_GRIDEYEDATA_TOOLTIP"] = "AMG8833の温度データを、画像としてキャンバスに描画します。「着色」をチェックすると、温度範囲で設定されている色をつけて表示します。"; - Blockly.Msg["GPIO_OPEN_TITLE"] = "GPIO を使えるようにする"; Blockly.Msg["GPIO_OPEN_TOOLTIP"] = "GPIOを初期化して接続します。"; Blockly.Msg["GPIO_CLOSE_TITLE"] = "GPIO の後片付けをする"; @@ -143,38 +140,6 @@ Blockly.Msg["I2C_READ_DEVICE_TOOLTIP"] = "デバイスから指定したバイ Blockly.Msg["I2C_WRITE_DEVICE_TITLE"] = "i2c デバイスに %1 を送信"; Blockly.Msg["I2C_WRITE_DEVICE_TOOLTIP"] = "i2c デバイスにデータを送信します。"; -Blockly.Msg["UGJ_BME280_TITLE"] = "BME280(アドレス %1 )から %2 %3 %4 を取得"; -Blockly.Msg["UGJ_BME280_TOOLTIP"] = "環境センサーBME280で、気温(摂氏)、湿度(%)、気圧(hPa)を計測し、それぞれを変数に代入します。"; -Blockly.Msg["UGJ_BME280_READ_TEMP"] = "気温"; -Blockly.Msg["UGJ_BME280_READ_HUM"] = "湿度"; -Blockly.Msg["UGJ_BME280_READ_PRES"] = "気圧"; -Blockly.Msg["UGJ_GESTURE_INIT_TITLE"] = "ジェスチャーセンサー(アドレス: %1 )を初期化"; -Blockly.Msg["UGJ_GESTURE_INIT_TOOLTIP"] = "PAJ7620 ジェスチャーセンサーを使用する準備をします。"; -Blockly.Msg["UGJ_GESTURE_READ_TITLE"] = "ジェスチャーの値"; -Blockly.Msg["UGJ_GESTURE_READ_TOOLTIP"] = "センサーから現在のジェスチャーの値(0〜9)を読み込みます"; -Blockly.Msg["UGJ_GESTURE_STOP_TITLE"] = "ジェスチャーセンサーから切断"; -Blockly.Msg["UGJ_GESTURE_STOP_TOOLTIP"] = "センサーとの接続を停止します。"; -Blockly.Msg["UGJ_GRIDEYE_INIT_TITLE"] = "赤外線アレイセンサ(アドレス: %1 )を初期化"; -Blockly.Msg["UGJ_GRIDEYE_INIT_TOOLTIP"] = "赤外線アレイセンサ AMG8833 の使用準備をします。"; -Blockly.Msg["UGJ_GRIDEYE_THERMISTOR_TITLE"] = "赤外線アレイセンサ本体温度"; -Blockly.Msg["UGJ_GRIDEYE_THERMISTOR_TOOLTIP"] = "AMG8833に内蔵されたサーミスタ(温度センサ)の値を取得します。"; -Blockly.Msg["UGJ_GRIDEYE_READ_TITLE"] = "赤外線アレイセンサの値"; -Blockly.Msg["UGJ_GRIDEYE_READ_TOOLTIP"] = "AMG8833から読み取った温度データを、8x8の配列で取得します。"; -Blockly.Msg["UGJ_GRIDEYE_STOP_TITLE"] = "赤外線アレイセンサから切断"; -Blockly.Msg["UGJ_GRIDEYE_STOP_TOOLTIP"] = "センサーとの接続を停止します。"; -Blockly.Msg["UGJ_GRIDEYE_CANVAS_CREATE_TITLE"] = "赤外線アレイセンサデータ表示キャンバスを作成"; -Blockly.Msg["UGJ_GRIDEYE_CANVAS_CREATE_TOOLTIP"] = "ディスプレイエリアにAMG8833データ表示用キャンバスを作成します。"; -Blockly.Msg["UGJ_TEACHABLE_MACHINE_TITLE"] = "TensorFlow.jsによる画像分類器の準備"; -Blockly.Msg["UGJ_TEACHABLE_MACHINE_TOOLTIP"] = "TensorFlow.jsにMobileNet, KNN Classifierを読み込んで、画像認識(分類)を行う準備をします。"; -Blockly.Msg["UGJ_GRIDEYE_PREDICT_CLASS_TITLE"] = "赤外線アレイセンサの画像で推論を行う"; -Blockly.Msg["UGJ_GRIDEYE_PREDICT_CLASS_TOOLTIP"] = "キャンバスに表示されたAMG8833の画像を元に画像分類の推論を行います。推論の結果として定義済みのラベルを返します。"; -Blockly.Msg["UGJ_GRIDEYE_ADD_EXAMPLE_TITLE"] = "赤外線アレイセンサの画像にラベル %1 をつけてデータセットへ追加"; -Blockly.Msg["UGJ_GRIDEYE_ADD_EXAMPLE_TOOLTIP"] = "キャンバスに表示されているAMG8833の画像にラベル(クラス名)をつけてデータセットへ追加します。"; -Blockly.Msg["UGJ_TENSORSET_STRINGIFY_TITLE"] = "学習したクラスデータセットを文字列に変換"; -Blockly.Msg["UGJ_TENSORSET_STRINGIFY_TOOLTIP"] = "学習したクラスデータセットを文字列に変換して保存します。"; -Blockly.Msg["UGJ_TENSORSET_PARSE_TITLE"] = "クラスデータ文字列 %1 を画像分類器にセット"; -Blockly.Msg["UGJ_TENSORSET_PARSE_TOOLTIP"] = "JSONテキストをパースして画像分類器に戻します。"; - Blockly.Msg["UGJ_CODECHAR_TITLE"] = "コード %1 の文字"; Blockly.Msg["UGJ_CODECHAR_TOOLTIP"] = "文字コードを文字に変換します。"; Blockly.Msg["UGJ_CHARCODE_TITLE"] = "%1 の文字コード"; @@ -670,3 +635,27 @@ window.onbeforeunload = () => { elutil.cleanupGPIO(); } +// センサーブロック +// ブロックデータ格納ディレクトリのリスト +const allDirents = elutil.fs.readdirSync(elutil.blocks_sensors_dir, { withFileTypes: true }); +const blocks_list = allDirents.filter(dirent => dirent.isDirectory()).map(({ name }) => name); +// センサーカテゴリのインスタンス +var category_sensors = workspace.getToolbox().getToolboxItemById('category_sensors'); +var flyout_contents = []; // フライアウトのjsonのリスト +for (const sensor_dir of blocks_list) { //ディレクトリ巡り + if (sensor_dir.charAt(0) == '.') continue; //隠しディレクトリをスキップ + // フライアウトのjsonを取得してパース、リストに追加 + let fname = elutil.path.join(elutil.blocks_sensors_dir, sensor_dir, 'index.json'); + let json_text = elutil.fs.readFileSync(fname); + let obj = JSON.parse(json_text); + flyout_contents = flyout_contents.concat(obj); + // ブロック定義のスクリプト要素をbody要素の最後に追加 + fname = elutil.path.join(elutil.blocks_sensors_dir, sensor_dir, 'index.js'); + let script = document.createElement('script'); + script.type = 'text/javascript'; + script.src = fname; + document.body.appendChild(script); +} +// センサーカテゴリのフライアウトをアップデート +category_sensors.updateFlyoutContents(flyout_contents); + diff --git a/index_elutil.js b/index_elutil.js index 93dd0de..2e1bdd7 100644 --- a/index_elutil.js +++ b/index_elutil.js @@ -9,7 +9,8 @@ const ugj_const = { mascot_defname: 'tamachee.png', library_dirname: 'lib', document_root: 'Documents', - executable_path: '.local/lib/ocogeclub', + executable_path: '.ocogeclub/apps/', + blocks_sensors_dir: '.ocogeclub/sensors/', localStorage_fname: 'ocoge.json', error_ja_all: 'エラーが発生しました。\n『おこげ倶楽部』までお問い合わせください。', pig: 'pigpio', @@ -34,6 +35,7 @@ class elUtil { this.doc_root = this.path.join(process.env["HOME"], ugj_const.document_root); this.doc_current = this.path.join(process.env["HOME"], ugj_const.document_root); this.executable_path = this.path.join(process.env["HOME"], ugj_const.executable_path); + this.blocks_sensors_dir = this.path.join(process.env["HOME"], ugj_const.blocks_sensors_dir); } // static init = async () => { // return new elUtil(await elUtil.get_app_path()); @@ -214,8 +216,8 @@ class elUtil { // GPIO 関連:リロードでGPIOをロックしたままハンドルを失うのを防ぐ cleanupGPIO() { require('@ocogeclub/' + this.gpio_backend).close_all_handle(); - require('@ocogeclub/paj7620').stop(); - require('@ocogeclub/amg8833').stop(); + // require('@ocogeclub/paj7620').stop(); + // require('@ocogeclub/amg8833').stop(); } // 設定(保存ファイルパスと未保存フラグ)をローカルストレージに保存 diff --git a/local_modules/@ocogeclub/amg8833/AMG8833.js b/local_modules/@ocogeclub/amg8833/AMG8833.js deleted file mode 100644 index 406cc3f..0000000 --- a/local_modules/@ocogeclub/amg8833/AMG8833.js +++ /dev/null @@ -1,46 +0,0 @@ -'use strict'; - -const pig = require('@ocogeclub/pigpio'); - -let pi = -1; -let i2c_hand = -1; -exports.init = async (i2c_bus, i2c_addr) => { - if (pi < 0) pi = await pig._pigpio_start('', ''); - if (i2c_hand < 0) await pig._i2c_close(pi, i2c_hand); - i2c_hand = await pig._i2c_open(pi, i2c_bus, i2c_addr); - await pig._i2c_write_byte_data(pi, i2c_hand, 0x00, 0x00); //Normal mode - await pig._i2c_write_byte_data(pi, i2c_hand, 0x02, 0x00); //10FPS -} - -exports.read_thermistor = async () => { - let temp = await pig._i2c_read_word_data(pi, i2c_hand, 0x0e); - return temp * 0.0625; -} - -exports.read_temp_array = async () => { - let linedata = []; - for (let i = 0; i < 8; i++) { - let data = await pig._i2c_read_i2c_block_data(pi, i2c_hand, 0x80 + 0x10 * i, 16); - let oneline = []; - for (let j = 0; j < 8; j++) { - oneline.push(((data[2 * j + 1] & 0x07) * 256 + data[2 * j]) * 0.25); - } - linedata.push(oneline); - } - return linedata; -} - -exports.stop = async () => { - if (i2c_hand >= 0) { - await pig._i2c_close(pi, i2c_hand); - i2c_hand = -1; - } - if (pi >= 0) { - await pig._pigpio_stop(pi); - pi = -1; - } -} - -/* -* This code was ported from https://www.denshi.club/pc/raspi/5raspberry-pi-zeroiot381i2c-amg8833.html -*/ \ No newline at end of file diff --git a/local_modules/@ocogeclub/amg8833/package.json b/local_modules/@ocogeclub/amg8833/package.json deleted file mode 100644 index 750f0af..0000000 --- a/local_modules/@ocogeclub/amg8833/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "@ocogeclub/amg8833", - "version": "0.0.1", - "main": "AMG8833.js", - "private": true, - "license": "MIT", - "dependencies": { - "@ocogeclub/pigpio": "file:../pigpio" - } -} \ No newline at end of file diff --git a/local_modules/@ocogeclub/bme280/BME280.js b/local_modules/@ocogeclub/bme280/BME280.js deleted file mode 100644 index 0a186a1..0000000 --- a/local_modules/@ocogeclub/bme280/BME280.js +++ /dev/null @@ -1,291 +0,0 @@ -'use strict'; - -this.pig = null; -this.pi = null; - -this.i2cBusNo = null; -this.i2cAddress = null; -this.i2cHand = null; - -this.I2C_ADDRESS_B = 0x76; -this.I2C_ADDRESS_A = 0x77; -this.CHIP_ID = 0x58; - -this.REGISTER_DIG_T1 = 0x88; -this.REGISTER_DIG_T2 = 0x8A; -this.REGISTER_DIG_T3 = 0x8C; - -this.REGISTER_DIG_P1 = 0x8E; -this.REGISTER_DIG_P2 = 0x90; -this.REGISTER_DIG_P3 = 0x92; -this.REGISTER_DIG_P4 = 0x94; -this.REGISTER_DIG_P5 = 0x96; -this.REGISTER_DIG_P6 = 0x98; -this.REGISTER_DIG_P7 = 0x9A; -this.REGISTER_DIG_P8 = 0x9C; -this.REGISTER_DIG_P9 = 0x9E; - -this.REGISTER_DIG_H1 = 0xA1; -this.REGISTER_DIG_H2 = 0xE1; -this.REGISTER_DIG_H3 = 0xE3; -this.REGISTER_DIG_H4 = 0xE4; -this.REGISTER_DIG_H5 = 0xE5; -this.REGISTER_DIG_H6 = 0xE7; - -this.REGISTER_CHIPID = 0xD0; -this.REGISTER_RESET = 0xE0; - -this.REGISTER_CONTROL_HUM = 0xF2; -this.REGISTER_CONTROL = 0xF4; -this.REGISTER_PRESSURE_DATA = 0xF7; -this.REGISTER_TEMP_DATA = 0xFA; -this.REGISTER_HUMIDITY_DATA = 0xFD; - -exports.init = async (options) => { - this.pig = require('@ocogeclub/pigpio') - // console.log('pig= ' + this.pig) - this.pi = await this.pig._pigpio_start('', ''); - // console.log('pi= ' + this.pi) - // this.pi = require('@ocogeclub/lgpio'); - - this.i2cBusNo = (options && options.hasOwnProperty('i2cBusNo')) ? options.i2cBusNo : 1; - this.i2cAddress = (options && options.hasOwnProperty('i2cAddress')) ? options.i2cAddress : this.BME280_DEFAULT_I2C_ADDRESS(); - this.i2cHand = await this.pig._i2c_open(this.pi, this.i2cBusNo, this.i2cAddress); - // console.log('i2cHand= ' + this.i2cHand) - // this.i2cHand = this.pi._i2c_open(this.i2cBusNo, this.i2cAddress); - - let r; - r = await this.pig._i2c_write_byte_data(this.pi, this.i2cHand, this.REGISTER_CHIPID, 0); - // r = this.pi._i2c_write_byte_data(this.i2cHand, this.REGISTER_CHIPID, 0); - if (r < 0) return r; - let chipId = await this.pig._i2c_read_byte_data(this.pi, this.i2cHand, this.REGISTER_CHIPID); - // let chipId = this.pi._i2c_read_byte_data(this.i2cHand, this.REGISTER_CHIPID); - if (chipId !== this.CHIP_ID_BME280() && - chipId !== this.CHIP_ID1_BMP280() && - chipId !== this.CHIP_ID2_BMP280() && - chipId !== this.CHIP_ID3_BMP280()) { - return `Unexpected BMx280 chip ID: 0x${chipId.toString(16).toUpperCase()}`; - } - // console.log(`Found BMx280 chip ID 0x${chipId.toString(16).toUpperCase()} on bus i2c-${this.i2cBusNo}, address 0x${this.i2cAddress.toString(16).toUpperCase()}`); - await this.loadCalibration(async (err) => { - if (err) { - return err; - } - // Humidity 16x oversampling - // - let r = await this.pig._i2c_write_byte_data(this.pi, this.i2cHand, this.REGISTER_CONTROL_HUM, 0b00000101); - // let r = this.pi._i2c_write_byte_data(this.i2cHand, this.REGISTER_CONTROL_HUM, 0b00000101); - if (r < 0) return `Humidity 16x oversampling error: ${r}`; - // Temperture/pressure 16x oversampling, normal mode - // - r = await this.pig._i2c_write_byte_data(this.pi, this.i2cHand, this.REGISTER_CONTROL, 0b10110111); - // r = this.pi._i2c_write_byte_data(this.i2cHand, this.REGISTER_CONTROL, 0b10110111); - if (r < 0) return `Temperture/pressure 16x oversampling error: ${r}`; - - return 0; - }); -} - -// reset() -// -// Perform a power-on reset procedure. You will need to call init() following a reset() -// -exports.reset = async () => { - const POWER_ON_RESET_CMD = 0xB6; - let r = await this.pig._i2c_write_byte_data(this.pi, this.i2cHand, this.REGISTER_RESET, POWER_ON_RESET_CMD); - // let r = this.pi._i2c_write_byte_data(this.i2cHand, this.REGISTER_RESET, POWER_ON_RESET_CMD); - if (r < 0) return `cannot power-on reset: ${r}`; - else return 0; -} - -// cancel() -// -// Cancels the sensor and releases resources. -// -exports.cancel = async () => { - if (this.i2cHand >= 0) { - await this.pig._i2c_close(this.pi, this.i2cHand); - // this.pi._i2c_close(this.i2cHand); - this.i2cHand = null; - await this.pig._pigpio_stop(this.pi); - this.pi = null; - } -} - -exports.readSensorData = async () => { - if (!this.cal) { - return 'You must first call bme280.init()'; - } - - // Grab temperature, humidity, and pressure in a single read - // - let buffer = await this.pig._i2c_read_i2c_block_data(this.pi, this.i2cHand, this.REGISTER_PRESSURE_DATA, 8); - // let buffer = this.pi._i2c_read_i2c_block_data(this.i2cHand, this.REGISTER_PRESSURE_DATA, 8); - if (!buffer) return `couldn't grab data`; - // Temperature (temperature first since we need t_fine for pressure and humidity) - // - let adc_T = this.uint20(buffer[3], buffer[4], buffer[5]); - let tvar1 = ((((adc_T >> 3) - (this.cal.dig_T1 << 1))) * this.cal.dig_T2) >> 11; - let tvar2 = (((((adc_T >> 4) - this.cal.dig_T1) * ((adc_T >> 4) - this.cal.dig_T1)) >> 12) * this.cal.dig_T3) >> 14; - let t_fine = tvar1 + tvar2; - - let temperature_C = ((t_fine * 5 + 128) >> 8) / 100; - - // Pressure - // - let adc_P = this.uint20(buffer[0], buffer[1], buffer[2]); - let pvar1 = t_fine / 2 - 64000; - let pvar2 = pvar1 * pvar1 * this.cal.dig_P6 / 32768; - pvar2 = pvar2 + pvar1 * this.cal.dig_P5 * 2; - pvar2 = pvar2 / 4 + this.cal.dig_P4 * 65536; - pvar1 = (this.cal.dig_P3 * pvar1 * pvar1 / 524288 + this.cal.dig_P2 * pvar1) / 524288; - pvar1 = (1 + pvar1 / 32768) * this.cal.dig_P1; - - let pressure_hPa = 0; - - if (pvar1 !== 0) { - let p = 1048576 - adc_P; - p = ((p - pvar2 / 4096) * 6250) / pvar1; - pvar1 = this.cal.dig_P9 * p * p / 2147483648; - pvar2 = p * this.cal.dig_P8 / 32768; - p = p + (pvar1 + pvar2 + this.cal.dig_P7) / 16; - - pressure_hPa = p / 100; - } - - // Humidity (available on the BME280, will be zero on the BMP280 since it has no humidity sensor) - // - let adc_H = this.uint16(buffer[6], buffer[7]); - - let h = t_fine - 76800; - h = (adc_H - (this.cal.dig_H4 * 64 + this.cal.dig_H5 / 16384 * h)) * - (this.cal.dig_H2 / 65536 * (1 + this.cal.dig_H6 / 67108864 * h * (1 + this.cal.dig_H3 / 67108864 * h))); - h = h * (1 - this.cal.dig_H1 * h / 524288); - - let humidity = (h > 100) ? 100 : (h < 0 ? 0 : h); - - return { - temperature_C: temperature_C, - humidity: humidity, - pressure_hPa: pressure_hPa - }; -} - -exports.loadCalibration = async (callback) => { - let buffer = await this.pig._i2c_read_i2c_block_data(this.pi, this.i2cHand, this.REGISTER_DIG_T1, 24); - // let buffer = this.pi._i2c_read_i2c_block_data(this.i2cHand, this.REGISTER_DIG_T1, 24); - // for (let i = 0; i < 24; i++) console.log(parseInt(buffer[i], 16)); - if (buffer) { - let h1 = await this.pig._i2c_read_byte_data(this.pi, this.i2cHand, this.REGISTER_DIG_H1); - let h2 = await this.pig._i2c_read_word_data(this.pi, this.i2cHand, this.REGISTER_DIG_H2); - let h3 = await this.pig._i2c_read_byte_data(this.pi, this.i2cHand, this.REGISTER_DIG_H3); - let h4 = await this.pig._i2c_read_byte_data(this.pi, this.i2cHand, this.REGISTER_DIG_H4); - let h5 = await this.pig._i2c_read_byte_data(this.pi, this.i2cHand, this.REGISTER_DIG_H5); - let h5_1 = await this.pig._i2c_read_byte_data(this.pi, this.i2cHand, this.REGISTER_DIG_H5 + 1); - let h6 = await this.pig._i2c_read_byte_data(this.pi, this.i2cHand, this.REGISTER_DIG_H6); - // let h1 = this.pi._i2c_read_byte_data(this.i2cHand, this.REGISTER_DIG_H1); - // let h2 = this.pi._i2c_read_word_data(this.i2cHand, this.REGISTER_DIG_H2); - // let h3 = this.pi._i2c_read_byte_data(this.i2cHand, this.REGISTER_DIG_H3); - // let h4 = this.pi._i2c_read_byte_data(this.i2cHand, this.REGISTER_DIG_H4); - // let h5 = this.pi._i2c_read_byte_data(this.i2cHand, this.REGISTER_DIG_H5); - // let h5_1 = this.pi._i2c_read_byte_data(this.i2cHand, this.REGISTER_DIG_H5 + 1); - // let h6 = this.pi._i2c_read_byte_data(this.i2cHand, this.REGISTER_DIG_H6); - - this.cal = { - dig_T1: this.uint16(buffer[1], buffer[0]), - dig_T2: this.int16(buffer[3], buffer[2]), - dig_T3: this.int16(buffer[5], buffer[4]), - - dig_P1: this.uint16(buffer[7], buffer[6]), - dig_P2: this.int16(buffer[9], buffer[8]), - dig_P3: this.int16(buffer[11], buffer[10]), - dig_P4: this.int16(buffer[13], buffer[12]), - dig_P5: this.int16(buffer[15], buffer[14]), - dig_P6: this.int16(buffer[17], buffer[16]), - dig_P7: this.int16(buffer[19], buffer[18]), - dig_P8: this.int16(buffer[21], buffer[20]), - dig_P9: this.int16(buffer[23], buffer[22]), - - dig_H1: h1, - dig_H2: h2, - dig_H3: h3, - dig_H4: (h4 << 4) | (h5 & 0xF), - dig_H5: (h5_1 << 4) | (h5 >> 4), - dig_H6: h6 - }; - - // console.log('BME280 cal = ' + JSON.stringify(this.cal, null, 2)); - await callback(); - } -} - -exports.BME280_DEFAULT_I2C_ADDRESS = () => { - return 0x77; -} - -exports.CHIP_ID1_BMP280 = () => { - return 0x56; -} - -exports.CHIP_ID2_BMP280 = () => { - return 0x57; -} - -exports.CHIP_ID3_BMP280 = () => { - return 0x58; -} - -exports.CHIP_ID_BME280 = () => { - return 0x60; -} - -exports.int16 = (msb, lsb) => { - let val = this.uint16(msb, lsb); - return val > 32767 ? (val - 65536) : val; -} - -exports.uint16 = (msb, lsb) => { - return msb << 8 | lsb; -} - -exports.uint20 = (msb, lsb, xlsb) => { - return ((msb << 8 | lsb) << 8 | xlsb) >> 4; -} - -exports.convertCelciusToFahrenheit = (c) => { - return c * 9 / 5 + 32; -} - -exports.convertHectopascalToInchesOfMercury = (hPa) => { - return hPa * 0.02952998751; -} - -exports.convertMetersToFeet = (m) => { - return m * 3.28084; -} - -exports.calculateHeatIndexCelcius = (temperature_C, humidity) => { - return -8.784695 + 1.61139411 * temperature_C + 2.33854900 * humidity + - -0.14611605 * temperature_C * humidity + -0.01230809 * Math.pow(temperature_C, 2) + - -0.01642482 * Math.pow(humidity, 2) + 0.00221173 * Math.pow(temperature_C, 2) * humidity + - 0.00072546 * temperature_C * Math.pow(humidity, 2) + - -0.00000358 * Math.pow(temperature_C, 2) * Math.pow(humidity, 2); -} - -exports.calculateDewPointCelcius = (temperature_C, humidity) => { - return 243.04 * (Math.log(humidity / 100.0) + ((17.625 * temperature_C) / (243.04 + temperature_C))) / - (17.625 - Math.log(humidity / 100.0) - ((17.625 * temperature_C) / (243.04 + temperature_C))); -} - -exports.calculateAltitudeMeters = (pressure_hPa, seaLevelPressure_hPa) => { - if (!seaLevelPressure_hPa) { - seaLevelPressure_hPa = 1013.25; - } - - return (1.0 - Math.pow(pressure_hPa / seaLevelPressure_hPa, (1 / 5.2553))) * 145366.45 * 0.3048; -} - - -/* - * This code was forked from skylarstein's bme280-sensor: https://github.com/skylarstein/bme280-sensor - */ \ No newline at end of file diff --git a/local_modules/@ocogeclub/bme280/package.json b/local_modules/@ocogeclub/bme280/package.json deleted file mode 100644 index b3780a4..0000000 --- a/local_modules/@ocogeclub/bme280/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "@ocogeclub/bme280", - "version": "0.0.1", - "main": "BME280.js", - "private": true, - "license": "MIT", - "dependencies": { - "@ocogeclub/pigpio": "file:../pigpio" - } -} \ No newline at end of file diff --git a/local_modules/@ocogeclub/paj7620/PAJ7620.js b/local_modules/@ocogeclub/paj7620/PAJ7620.js deleted file mode 100644 index 5b8dffd..0000000 --- a/local_modules/@ocogeclub/paj7620/PAJ7620.js +++ /dev/null @@ -1,474 +0,0 @@ -"use strict"; - -const pig = require('@ocogeclub/pigpio'); - -const sleep = sec => - new Promise(r => setTimeout(r, sec * 1000)); - -const GES_REACTION_TIME = .100; // default:0.5 // You can adjust the reaction time according to the actual circumstance. -const GES_ENTRY_TIME = .050; // default:0.8 // When you want to recognize the Forward/Backward gestures, your gestures' reaction time must less than GES_ENTRY_TIME(0.8s). -const GES_QUIT_TIME = 1.000; - -const BANK0 = 0; -const BANK1 = 1; - -const PAJ7620_ADDR_BASE = 0x00; - -//REGISTER BANK SELECT -const PAJ7620_REGITER_BANK_SEL = (PAJ7620_ADDR_BASE + 0xEF); //W - -//DEVICE ID -// const PAJ7620_ID = 0x73; - -//REGISTER BANK 0 -const PAJ7620_ADDR_SUSPEND_CMD = (PAJ7620_ADDR_BASE + 0x3); //W -const PAJ7620_ADDR_GES_PS_DET_MASK_0 = (PAJ7620_ADDR_BASE + 0x41); //RW -const PAJ7620_ADDR_GES_PS_DET_MASK_1 = (PAJ7620_ADDR_BASE + 0x42); //RW -const PAJ7620_ADDR_GES_PS_DET_FLAG_0 = (PAJ7620_ADDR_BASE + 0x43); //R -const PAJ7620_ADDR_GES_PS_DET_FLAG_1 = (PAJ7620_ADDR_BASE + 0x44); //R -const PAJ7620_ADDR_STATE_INDICATOR = (PAJ7620_ADDR_BASE + 0x45); //R -const PAJ7620_ADDR_PS_HIGH_THRESHOLD = (PAJ7620_ADDR_BASE + 0x69); //RW -const PAJ7620_ADDR_PS_LOW_THRESHOLD = (PAJ7620_ADDR_BASE + 0x6A); //RW -const PAJ7620_ADDR_PS_APPROACH_STATE = (PAJ7620_ADDR_BASE + 0x6B); //R -const PAJ7620_ADDR_PS_RAW_DATA = (PAJ7620_ADDR_BASE + 0x6C); //R - -//REGISTER BANK 1 -const PAJ7620_ADDR_PS_GAIN = (PAJ7620_ADDR_BASE + 0x44); //RW -const PAJ7620_ADDR_IDLE_S1_STEP_0 = (PAJ7620_ADDR_BASE + 0x67); //RW -const PAJ7620_ADDR_IDLE_S1_STEP_1 = (PAJ7620_ADDR_BASE + 0x68); //RW -const PAJ7620_ADDR_IDLE_S2_STEP_0 = (PAJ7620_ADDR_BASE + 0x69); //RW -const PAJ7620_ADDR_IDLE_S2_STEP_1 = (PAJ7620_ADDR_BASE + 0x6A); //RW -const PAJ7620_ADDR_OP_TO_S1_STEP_0 = (PAJ7620_ADDR_BASE + 0x6B); //RW -const PAJ7620_ADDR_OP_TO_S1_STEP_1 = (PAJ7620_ADDR_BASE + 0x6C); //RW -const PAJ7620_ADDR_OP_TO_S2_STEP_0 = (PAJ7620_ADDR_BASE + 0x6D); //RW -const PAJ7620_ADDR_OP_TO_S2_STEP_1 = (PAJ7620_ADDR_BASE + 0x6E); //RW -const PAJ7620_ADDR_OPERATION_ENABLE = (PAJ7620_ADDR_BASE + 0x72); //RW - -//PAJ7620_REGITER_BANK_SEL -const PAJ7620_BANK0 = 0; -const PAJ7620_BANK1 = 1; - -//PAJ7620_ADDR_SUSPEND_CMD -const PAJ7620_I2C_WAKEUP = 1; -const PAJ7620_I2C_SUSPEND = 0; - -//PAJ7620_ADDR_OPERATION_ENABLE -const PAJ7620_ENABLE = 1; -const PAJ7620_DISABLE = 0; - -//ADC, delete -const REG_ADDR_RESULT = 0x00; -const REG_ADDR_ALERT = 0x01; -const REG_ADDR_CONFIG = 0x02; -const REG_ADDR_LIMITL = 0x03; -const REG_ADDR_LIMITH = 0x04; -const REG_ADDR_HYST = 0x05; -const REG_ADDR_CONVL = 0x06; -const REG_ADDR_CONVH = 0x07; - -const GES_RIGHT_FLAG = 1 << 0; -const GES_LEFT_FLAG = 1 << 1; -const GES_UP_FLAG = 1 << 2; -const GES_DOWN_FLAG = 1 << 3; -const GES_FORWARD_FLAG = 1 << 4; -const GES_BACKWARD_FLAG = 1 << 5; -const GES_CLOCKWISE_FLAG = 1 << 6; -const GES_COUNT_CLOCKWISE_FLAG = 1 << 7; -const GES_WAVE_FLAG = 1 << 0; - -//Gesture output -exports.FORWARD = 1; -exports.BACKWARD = 2; -exports.RIGHT = 3; -exports.LEFT = 4; -exports.UP = 5; -exports.DOWN = 6; -exports.CLOCKWISE = 7; -exports.ANTI_CLOCKWISE = 8; -exports.WAVE = 9; - -//Initial register state -const initRegisterArray = [ - [0xEF, 0x00], - [0x32, 0x29], - [0x33, 0x01], - [0x34, 0x00], - [0x35, 0x01], - [0x36, 0x00], - [0x37, 0x07], - [0x38, 0x17], - [0x39, 0x06], - [0x3A, 0x12], - [0x3F, 0x00], - [0x40, 0x02], - [0x41, 0xFF], - [0x42, 0x01], - [0x46, 0x2D], - [0x47, 0x0F], - [0x48, 0x3C], - [0x49, 0x00], - [0x4A, 0x1E], - [0x4B, 0x00], - [0x4C, 0x20], - [0x4D, 0x00], - [0x4E, 0x1A], - [0x4F, 0x14], - [0x50, 0x00], - [0x51, 0x10], - [0x52, 0x00], - [0x5C, 0x02], - [0x5D, 0x00], - [0x5E, 0x10], - [0x5F, 0x3F], - [0x60, 0x27], - [0x61, 0x28], - [0x62, 0x00], - [0x63, 0x03], - [0x64, 0xF7], - [0x65, 0x03], - [0x66, 0xD9], - [0x67, 0x03], - [0x68, 0x01], - [0x69, 0xC8], - [0x6A, 0x40], - [0x6D, 0x04], - [0x6E, 0x00], - [0x6F, 0x00], - [0x70, 0x80], - [0x71, 0x00], - [0x72, 0x00], - [0x73, 0x00], - [0x74, 0xF0], - [0x75, 0x00], - [0x80, 0x42], - [0x81, 0x44], - [0x82, 0x04], - [0x83, 0x20], - [0x84, 0x20], - [0x85, 0x00], - [0x86, 0x10], - [0x87, 0x00], - [0x88, 0x05], - [0x89, 0x18], - [0x8A, 0x10], - [0x8B, 0x01], - [0x8C, 0x37], - [0x8D, 0x00], - [0x8E, 0xF0], - [0x8F, 0x81], - [0x90, 0x06], - [0x91, 0x06], - [0x92, 0x1E], - [0x93, 0x0D], - [0x94, 0x0A], - [0x95, 0x0A], - [0x96, 0x0C], - [0x97, 0x05], - [0x98, 0x0A], - [0x99, 0x41], - [0x9A, 0x14], - [0x9B, 0x0A], - [0x9C, 0x3F], - [0x9D, 0x33], - [0x9E, 0xAE], - [0x9F, 0xF9], - [0xA0, 0x48], - [0xA1, 0x13], - [0xA2, 0x10], - [0xA3, 0x08], - [0xA4, 0x30], - [0xA5, 0x19], - [0xA6, 0x10], - [0xA7, 0x08], - [0xA8, 0x24], - [0xA9, 0x04], - [0xAA, 0x1E], - [0xAB, 0x1E], - [0xCC, 0x19], - [0xCD, 0x0B], - [0xCE, 0x13], - [0xCF, 0x64], - [0xD0, 0x21], - [0xD1, 0x0F], - [0xD2, 0x88], - [0xE0, 0x01], - [0xE1, 0x04], - [0xE2, 0x41], - [0xE3, 0xD6], - [0xE4, 0x00], - [0xE5, 0x0C], - [0xE6, 0x0A], - [0xE7, 0x00], - [0xE8, 0x00], - [0xE9, 0x00], - [0xEE, 0x07], - [0xEF, 0x01], - [0x00, 0x1E], - [0x01, 0x1E], - [0x02, 0x0F], - [0x03, 0x10], - [0x04, 0x02], - [0x05, 0x00], - [0x06, 0xB0], - [0x07, 0x04], - [0x08, 0x0D], - [0x09, 0x0E], - [0x0A, 0x9C], - [0x0B, 0x04], - [0x0C, 0x05], - [0x0D, 0x0F], - [0x0E, 0x02], - [0x0F, 0x12], - [0x10, 0x02], - [0x11, 0x02], - [0x12, 0x00], - [0x13, 0x01], - [0x14, 0x05], - [0x15, 0x07], - [0x16, 0x05], - [0x17, 0x07], - [0x18, 0x01], - [0x19, 0x04], - [0x1A, 0x05], - [0x1B, 0x0C], - [0x1C, 0x2A], - [0x1D, 0x01], - [0x1E, 0x00], - [0x21, 0x00], - [0x22, 0x00], - [0x23, 0x00], - [0x25, 0x01], - [0x26, 0x00], - [0x27, 0x39], - [0x28, 0x7F], - [0x29, 0x08], - [0x30, 0x03], - [0x31, 0x00], - [0x32, 0x1A], - [0x33, 0x1A], - [0x34, 0x07], - [0x35, 0x07], - [0x36, 0x01], - [0x37, 0xFF], - [0x38, 0x36], - [0x39, 0x07], - [0x3A, 0x00], - [0x3E, 0xFF], - [0x3F, 0x00], - [0x40, 0x77], - [0x41, 0x40], - [0x42, 0x00], - [0x43, 0x30], - [0x44, 0xA0], - [0x45, 0x5C], - [0x46, 0x00], - [0x47, 0x00], - [0x48, 0x58], - [0x4A, 0x1E], - [0x4B, 0x1E], - [0x4C, 0x00], - [0x4D, 0x00], - [0x4E, 0xA0], - [0x4F, 0x80], - [0x50, 0x00], - [0x51, 0x00], - [0x52, 0x00], - [0x53, 0x00], - [0x54, 0x00], - [0x57, 0x80], - [0x59, 0x10], - [0x5A, 0x08], - [0x5B, 0x94], - [0x5C, 0xE8], - [0x5D, 0x08], - [0x5E, 0x3D], - [0x5F, 0x99], - [0x60, 0x45], - [0x61, 0x40], - [0x63, 0x2D], - [0x64, 0x02], - [0x65, 0x96], - [0x66, 0x00], - [0x67, 0x97], - [0x68, 0x01], - [0x69, 0xCD], - [0x6A, 0x01], - [0x6B, 0xB0], - [0x6C, 0x04], - [0x6D, 0x2C], - [0x6E, 0x01], - [0x6F, 0x32], - [0x71, 0x00], - [0x72, 0x01], - [0x73, 0x35], - [0x74, 0x00], - [0x75, 0x33], - [0x76, 0x31], - [0x77, 0x01], - [0x7C, 0x84], - [0x7D, 0x03], - [0x7E, 0x01] -]; - -//Enable debug message -const debug = 0; - -let pi = -1; -let i2c_hand = -1; -//Initialize the sensors -exports.init = async (i2c_bus, i2c_addr) => { - if (pi < 0) pi = await pig._pigpio_start('', ''); - if (i2c_hand < 0) await pig._i2c_close(pi, i2c_hand); - i2c_hand = await pig._i2c_open(pi, i2c_bus, i2c_addr); - if (debug) - console.log("pi" + pi + "i2c_hand" + i2c_hand); - - await sleep(.001); - await paj7620SelectBank(BANK0); - await paj7620SelectBank(BANK0); - - let data0 = (await paj7620ReadReg(0, 1))[0]; - let data1 = (await paj7620ReadReg(1, 1))[0]; - if (debug) - console.log("data0:" + data0 + ", data1:" + data1); - if (data0 != 0x20) //or data1 <> 0x76 - console.log("Error with sensor"); - //return 0xff - if (data0 == 0x20) - console.log("wake-up finish."); - - for (let i = 0; i < initRegisterArray.length; i += 1) - await paj7620WriteReg(initRegisterArray[i][0], initRegisterArray[i][1]); - - await paj7620SelectBank(BANK0); - - console.log("Paj7620 initialize register finished."); - -} - -// Write a byte to a register on the Gesture sensor -const paj7620WriteReg = async (addr, cmd) => - await pig._i2c_write_word_data(pi, i2c_hand, addr, cmd); - -//Select a register bank on the Gesture Sensor -const paj7620SelectBank = async bank => { - if (bank == BANK0) - await paj7620WriteReg(PAJ7620_REGITER_BANK_SEL, PAJ7620_BANK0); -} - -//Read a block of bytes of length "qty" starting at address "addr" from the Gesture sensor -const paj7620ReadReg = async (addr, qty) => { - return await pig._i2c_read_i2c_block_data(pi, i2c_hand, addr, qty); -} - -//Return a vlaue from the gestire sensor which can be used in a program -// 0:nothing -// 1:Forward -// 2:Backward -// 3:Right -// 4:Left -// 5:Up -// 6:Down -// 7:Clockwise -// 8:anti-clockwise -// 9:wave -exports.return_gesture = async () => { - - let data = (await paj7620ReadReg(0x43, 1))[0]; - if (data == GES_RIGHT_FLAG) { - await sleep(GES_ENTRY_TIME); - data = (await paj7620ReadReg(0x43, 1))[0]; - if (data == GES_FORWARD_FLAG) { - return 1; - // await sleep(GES_QUIT_TIME); - } - else if (data == GES_BACKWARD_FLAG) { - return 2; - // await sleep(GES_QUIT_TIME); - } - else - return 3; - } - - else if (data == GES_LEFT_FLAG) { - await sleep(GES_ENTRY_TIME); - data = (await paj7620ReadReg(0x43, 1))[0]; - if (data == GES_FORWARD_FLAG) { - return 1; - // await sleep(GES_QUIT_TIME); - } - else if (data == GES_BACKWARD_FLAG) { - return 2; - // await sleep(GES_QUIT_TIME); - } - else - return 4; - } - - else if (data == GES_UP_FLAG) { - await sleep(GES_ENTRY_TIME); - data = (await paj7620ReadReg(0x43, 1))[0]; - if (data == GES_FORWARD_FLAG) { - return 1; - // await sleep(GES_QUIT_TIME); - } - else if (data == GES_BACKWARD_FLAG) { - return 2; - // await sleep(GES_QUIT_TIME); - } - else - return 5; - } - - else if (data == GES_DOWN_FLAG) { - await sleep(GES_ENTRY_TIME); - data = (await paj7620ReadReg(0x43, 1))[0]; - if (data == GES_FORWARD_FLAG) { - return 1; - // await sleep(GES_QUIT_TIME); - } - else if (data == GES_BACKWARD_FLAG) { - return 2; - // await sleep(GES_QUIT_TIME); - } - else - return 6; - } - else if (data == GES_FORWARD_FLAG) { - return 1; - // await sleep(GES_QUIT_TIME); - } - - else if (data == GES_BACKWARD_FLAG) { - return 2; - // await sleep(GES_QUIT_TIME); - } - - else if (data == GES_CLOCKWISE_FLAG) - return 7; - - else if (data == GES_COUNT_CLOCKWISE_FLAG) - return 8; - - else { - let data1 = (await paj7620ReadReg(0x44, 1))[0]; - if (data1 == GES_WAVE_FLAG) - return 9; - } - return 0; -} - -exports.stop = async () => { - if (i2c_hand >= 0) { - await pig._i2c_close(pi, i2c_hand); - i2c_hand = -1; - } - if (pi >= 0) { - await pig._pigpio_stop(pi); - pi = -1; - } -} - -/* - * This code was ported from "Grove - Gesture Sensor v1.0 Python library and examples": https://github.com/DexterInd/GrovePi/tree/master/Software/Python/grove_gesture_sensor - */ \ No newline at end of file diff --git a/local_modules/@ocogeclub/paj7620/package.json b/local_modules/@ocogeclub/paj7620/package.json deleted file mode 100644 index 1021c5f..0000000 --- a/local_modules/@ocogeclub/paj7620/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "@ocogeclub/paj7620", - "version": "0.0.1", - "main": "PAJ7620.js", - "private": true, - "license": "MIT", - "dependencies": { - "@ocogeclub/pigpio": "file:../pigpio" - } -} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 776fda4..05419b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,6 @@ "license": "ISC", "dependencies": { "@ocogeclub/amg8833": "file:local_modules/@ocogeclub/amg8833", - "@ocogeclub/bme280": "file:local_modules/@ocogeclub/bme280", - "@ocogeclub/paj7620": "file:local_modules/@ocogeclub/paj7620", "@ocogeclub/pigpio": "file:local_modules/@ocogeclub/pigpio", "@tensorflow-models/blazeface": "^0.0.7", "@tensorflow-models/knn-classifier": "^1.2.2", @@ -27,7 +25,7 @@ "@electron-forge/cli": "^6.0.0-beta.63", "@electron-forge/maker-deb": "^6.0.0-beta.63", "@electron-forge/maker-rpm": "^6.0.0-beta.63", - "@electron-forge/maker-squirrel": "^6.0.0-beta.33", + "@electron-forge/maker-squirrel": "6.0.0-beta.33", "@electron-forge/maker-zip": "^6.0.0-beta.63", "electron": "^17.0.0", "electron-rebuild": "^3.2.7" @@ -42,6 +40,7 @@ }, "local_modules/@ocogeclub/bme280": { "version": "0.0.1", + "extraneous": true, "license": "MIT", "dependencies": { "@ocogeclub/pigpio": "file:../pigpio" @@ -49,6 +48,7 @@ }, "local_modules/@ocogeclub/paj7620": { "version": "0.0.1", + "extraneous": true, "license": "MIT", "dependencies": { "@ocogeclub/pigpio": "file:../pigpio" @@ -56,7 +56,6 @@ }, "local_modules/@ocogeclub/pigpio": { "version": "0.0.1", - "hasInstallScript": true, "license": "MIT", "dependencies": { "bindings": "^1.5.0", @@ -328,20 +327,820 @@ } }, "node_modules/@electron-forge/maker-squirrel": { - "version": "6.0.0-beta.63", - "resolved": "https://registry.npmjs.org/@electron-forge/maker-squirrel/-/maker-squirrel-6.0.0-beta.63.tgz", - "integrity": "sha512-18eLRQmMZ6zBcI1Jhuqvhm50bmmatRCbyOUHTaIbhVf1M6ksq34xXXVWKUGlqDiCNLLLNzVw5MIb9O04eUdfIg==", + "version": "6.0.0-beta.33", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-squirrel/-/maker-squirrel-6.0.0-beta.33.tgz", + "integrity": "sha512-ALrQvdS/docVfhkad5bUo03EF4D8XgLu0gmaEO9LPRtdD4KYjd/MgFpLpyT4Bzy28urZblETLbtwP1K9oTKIog==", "dev": true, "dependencies": { - "@electron-forge/maker-base": "6.0.0-beta.63", - "@electron-forge/shared-types": "6.0.0-beta.63", - "fs-extra": "^10.0.0" + "@electron-forge/maker-base": "6.0.0-beta.33", + "@electron-forge/shared-types": "6.0.0-beta.33", + "fs-extra": "^7.0.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 6.0" }, "optionalDependencies": { - "electron-winstaller": "^5.0.0" + "electron-winstaller": "^2.5.0" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/@electron-forge/async-ora": { + "version": "6.0.0-beta.33", + "resolved": "https://registry.npmjs.org/@electron-forge/async-ora/-/async-ora-6.0.0-beta.33.tgz", + "integrity": "sha512-c/xNgoL96XNnBgDZepgWoRbWVKP/dyl0l+b30IlKr094HgC9T2bjLLiQgwQ1yDd+8pDZbYe2l6IhlyPveDEXGA==", + "dev": true, + "dependencies": { + "colors": "^1.2.0", + "debug": "^4.1.0", + "log-symbols": "^2.0.0", + "ora": "^3.0.0", + "pretty-ms": "^4.0.0" + }, + "engines": { + "node": ">= 6.0" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/@electron-forge/maker-base": { + "version": "6.0.0-beta.33", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-base/-/maker-base-6.0.0-beta.33.tgz", + "integrity": "sha512-8PUuTPJ+G7JhCLj0W50wBx/m7Gp2ISBRZvPV7MkC+jJiX+XOiR1IfjWYYz/PXhyQW8JoCkgENfb6LpHip4pCTg==", + "dev": true, + "dependencies": { + "@electron-forge/shared-types": "6.0.0-beta.33", + "fs-extra": "^7.0.0" + }, + "engines": { + "node": ">= 6.0" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/@electron-forge/shared-types": { + "version": "6.0.0-beta.33", + "resolved": "https://registry.npmjs.org/@electron-forge/shared-types/-/shared-types-6.0.0-beta.33.tgz", + "integrity": "sha512-3nASnYKFt91w1FVi2dSJOfU3+4mBP2adoS1f1lvVcMlnuzx45QbGm35OdIZVX/pEgWSWgcIt6uoygV/NizIGqg==", + "dev": true, + "dependencies": { + "@electron-forge/async-ora": "6.0.0-beta.33", + "@types/electron-packager": "^13.0.0", + "electron-rebuild": "^1.6.0", + "ora": "^3.0.0" + }, + "engines": { + "node": ">= 6.0" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/@electron-forge/maker-squirrel/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==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/cliui/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/electron-rebuild": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/electron-rebuild/-/electron-rebuild-1.11.0.tgz", + "integrity": "sha512-cn6AqZBQBVtaEyj5jZW1/LOezZZ22PA1HvhEP7asvYPJ8PDF4i4UFt9be4i9T7xJKiSiomXvY5Fd+dSq3FXZxA==", + "dev": true, + "dependencies": { + "colors": "^1.3.3", + "debug": "^4.1.1", + "detect-libc": "^1.0.3", + "fs-extra": "^8.1.0", + "node-abi": "^2.11.0", + "node-gyp": "^6.0.1", + "ora": "^3.4.0", + "spawn-rx": "^3.0.0", + "yargs": "^14.2.0" + }, + "bin": { + "electron-rebuild": "lib/src/cli.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/electron-rebuild/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "dependencies": { + "minipass": "^2.6.0" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "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/@electron-forge/maker-squirrel/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@electron-forge/maker-squirrel/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=", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/@electron-forge/maker-squirrel/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==", + "dev": true, + "dependencies": { + "semver": "^5.4.1" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/node-gyp": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-6.1.0.tgz", + "integrity": "sha512-h4A2zDlOujeeaaTx06r4Vy+8MZ1679lU+wbCKDS4ZtvY2A37DESo37oejIw0mtmR3+rvNwts5B6Kpt1KrNYdNw==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.1.2", + "request": "^2.88.0", + "rimraf": "^2.6.3", + "semver": "^5.7.1", + "tar": "^4.4.12", + "which": "^1.3.1" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/@electron-forge/maker-squirrel/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==", + "dev": true, + "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/@electron-forge/maker-squirrel/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/ora/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/ora/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/pretty-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-4.0.0.tgz", + "integrity": "sha512-qG66ahoLCwpLXD09ZPHSCbUWYTqdosB7SMP4OffgTgL2PBKXMuUsrk5Bwg8q4qPkjTXsKBMr+YK3Ltd/6F9s/Q==", + "dev": true, + "dependencies": { + "parse-ms": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@electron-forge/maker-squirrel/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==", + "dev": true, + "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/@electron-forge/maker-squirrel/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "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/@electron-forge/maker-squirrel/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=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dev": true, + "dependencies": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/wrap-ansi/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/yargs": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/yargs-parser": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz", + "integrity": "sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/yargs/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@electron-forge/maker-squirrel/node_modules/yargs/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/@electron-forge/maker-zip": { @@ -625,14 +1424,6 @@ "resolved": "local_modules/@ocogeclub/amg8833", "link": true }, - "node_modules/@ocogeclub/bme280": { - "resolved": "local_modules/@ocogeclub/bme280", - "link": true - }, - "node_modules/@ocogeclub/paj7620": { - "resolved": "local_modules/@ocogeclub/paj7620", - "link": true - }, "node_modules/@ocogeclub/pigpio": { "resolved": "local_modules/@ocogeclub/pigpio", "link": true @@ -818,6 +1609,15 @@ "@types/responselike": "*" } }, + "node_modules/@types/electron-packager": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/@types/electron-packager/-/electron-packager-13.0.1.tgz", + "integrity": "sha512-K9CCdarh7JdWvIIWM+xCWoROYXgcRFmX3OgjgwaFIFOb87bMTvtQVLyVi8LO0NroURadaae5L1AaK1BxKhytoA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/emscripten": { "version": "0.0.34", "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-0.0.34.tgz", @@ -1201,6 +2001,20 @@ "tweetnacl": "^0.14.3" } }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "dev": true, + "optional": true, + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, "node_modules/bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -1330,6 +2144,16 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.2.0" + } + }, "node_modules/cacache": { "version": "15.3.0", "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", @@ -1450,6 +2274,19 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "dev": true, + "optional": true, + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1590,6 +2427,15 @@ "color-support": "bin.js" } }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -1825,6 +2671,68 @@ "node": ">=4" } }, + "node_modules/decompress-zip": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.3.3.tgz", + "integrity": "sha512-/fy1L4s+4jujqj3kNptWjilFw3E6De8U6XUFvqmh4npN3Vsypm3oT2V0bXcmbBWS+5j5tr4okYaFrOmyZkszEg==", + "dev": true, + "optional": true, + "dependencies": { + "binary": "^0.3.0", + "graceful-fs": "^4.1.3", + "mkpath": "^0.1.0", + "nopt": "^3.0.1", + "q": "^1.1.2", + "readable-stream": "^1.1.8", + "touch": "0.0.3" + }, + "bin": { + "decompress-zip": "bin/decompress-zip" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-zip/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true, + "optional": true + }, + "node_modules/decompress-zip/node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "optional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/decompress-zip/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "optional": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/decompress-zip/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=", + "dev": true, + "optional": true + }, "node_modules/defaults": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", @@ -2670,48 +3578,49 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/electron-winstaller": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.0.0.tgz", - "integrity": "sha512-V+jFda7aVAm0htCG8Q95buPUpmXZW9ujh1HdhSlWY6y4QnJnw4TfrmxTlQWV4p2ioF/71JMI/1YF+/qbSICogA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-2.7.0.tgz", + "integrity": "sha512-WKRUTyGzTQbM2Q6dYm/iQqdYRQRTMiFakPxqOCJrH29YPVelGG9vNldal68fnq2yL+FFsoQi/3+qb6jDk143mw==", "dev": true, - "hasInstallScript": true, "optional": true, "dependencies": { - "asar": "^2.0.1", - "debug": "^4.1.1", - "fs-extra": "^7.0.1", + "asar": "^0.11.0", + "bluebird": "^3.3.4", + "debug": "^2.2.0", + "fs-extra": "^2.1.2", "lodash.template": "^4.2.2", - "temp": "^0.9.0" + "temp": "^0.8.3" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.4.0" } }, "node_modules/electron-winstaller/node_modules/asar": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/asar/-/asar-2.1.0.tgz", - "integrity": "sha512-d2Ovma+bfqNpvBzY/KU8oPY67ZworixTpkjSx0PCXnQi67c2cXmssaTxpFDUM0ttopXoGx/KRxNg/GDThYbXQA==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/asar/-/asar-0.11.0.tgz", + "integrity": "sha1-uSbnksMV+MBIxDNx4yWwnJenZGQ=", "dev": true, "optional": true, "dependencies": { - "chromium-pickle-js": "^0.2.0", - "commander": "^2.20.0", - "cuint": "^0.2.2", - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "tmp-promise": "^1.0.5" + "chromium-pickle-js": "^0.1.0", + "commander": "^2.9.0", + "cuint": "^0.2.1", + "glob": "^6.0.4", + "minimatch": "^3.0.0", + "mkdirp": "^0.5.0", + "mksnapshot": "^0.3.0" }, "bin": { - "asar": "bin/asar.js" - }, - "engines": { - "node": ">=8.0" - }, - "optionalDependencies": { - "@types/glob": "^7.1.1" + "asar": "bin/asar" } }, + "node_modules/electron-winstaller/node_modules/chromium-pickle-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.1.0.tgz", + "integrity": "sha1-HUixB9ghJqLz4hHC6iX4A7pVGyE=", + "dev": true, + "optional": true + }, "node_modules/electron-winstaller/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -2719,77 +3628,60 @@ "dev": true, "optional": true }, + "node_modules/electron-winstaller/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "dependencies": { + "ms": "2.0.0" + } + }, "node_modules/electron-winstaller/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", + "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", "dev": true, "optional": true, "dependencies": { "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^2.1.0" + } + }, + "node_modules/electron-winstaller/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "optional": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": "*" } }, "node_modules/electron-winstaller/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "dev": true, "optional": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, - "node_modules/electron-winstaller/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/electron-winstaller/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true, - "optional": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/electron-winstaller/node_modules/tmp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", - "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", - "dev": true, - "optional": true, - "dependencies": { - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/electron-winstaller/node_modules/tmp-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-1.1.0.tgz", - "integrity": "sha512-8+Ah9aB1IRXCnIOxXZ0uFozV1nMU5xiu7hhFVUSxZ3bYu+psD4TzagCzVbexUCgNNGJnsmNDQlS4nG3mTyoNkw==", - "dev": true, - "optional": true, - "dependencies": { - "bluebird": "^3.5.0", - "tmp": "0.1.0" - } - }, - "node_modules/electron-winstaller/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 4.0.0" - } + "optional": true }, "node_modules/electron/node_modules/@types/node": { "version": "14.18.11", @@ -2816,7 +3708,6 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -2826,7 +3717,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -4114,6 +5004,16 @@ "json-buffer": "3.0.0" } }, + "node_modules/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "optional": true, + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, "node_modules/load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -4166,6 +5066,12 @@ "dev": true, "optional": true }, + "node_modules/lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -4671,6 +5577,62 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mkpath": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/mkpath/-/mkpath-0.1.0.tgz", + "integrity": "sha1-dVSm+Nhxg0zJe1RisSLEwSTW3pE=", + "dev": true, + "optional": true + }, + "node_modules/mksnapshot": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mksnapshot/-/mksnapshot-0.3.5.tgz", + "integrity": "sha512-PSBoZaj9h9myC3uRRW62RxmX8mrN3XbOkMEyURUD7v5CeJgtYTar50XU738t7Q0LtG1pBPtp5n5QwDGggRnEvw==", + "dev": true, + "optional": true, + "dependencies": { + "decompress-zip": "0.3.x", + "fs-extra": "0.26.7", + "request": "2.x" + } + }, + "node_modules/mksnapshot/node_modules/fs-extra": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", + "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", + "dev": true, + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "node_modules/mksnapshot/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "optional": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/mksnapshot/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "optional": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -5016,6 +5978,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -5025,6 +5996,16 @@ "node": ">=0.10.0" } }, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, "node_modules/p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -5459,6 +6440,17 @@ "node": ">=6" } }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, "node_modules/qs": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", @@ -5721,8 +6713,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true, - "optional": true + "dev": true }, "node_modules/resolve": { "version": "1.22.0", @@ -5905,7 +6896,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "devOptional": true }, "node_modules/seedrandom": { "version": "2.4.3", @@ -6109,6 +7100,50 @@ "source-map": "^0.6.0" } }, + "node_modules/spawn-rx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spawn-rx/-/spawn-rx-3.0.0.tgz", + "integrity": "sha512-dw4Ryg/KMNfkKa5ezAR5aZe9wNwPdKlnHEXtHOjVnyEDSPQyOpIPPRtcIiu7127SmtHhaCjw21yC43HliW0iIg==", + "dev": true, + "dependencies": { + "debug": "^2.5.1", + "lodash.assign": "^4.2.0", + "rxjs": "^6.3.1" + } + }, + "node_modules/spawn-rx/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/spawn-rx/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/spawn-rx/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/spawn-rx/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -6338,13 +7373,12 @@ } }, "node_modules/temp": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", - "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", + "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", "dev": true, "optional": true, "dependencies": { - "mkdirp": "^0.5.1", "rimraf": "~2.6.2" }, "engines": { @@ -6585,6 +7619,35 @@ "node": ">=8.0" } }, + "node_modules/touch": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/touch/-/touch-0.0.3.tgz", + "integrity": "sha1-Ua7z1ElXHU8oel2Hyci0kYGg2x0=", + "dev": true, + "optional": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch/node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "optional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, "node_modules/tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -6603,6 +7666,16 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "dev": true, + "optional": true, + "engines": { + "node": "*" + } + }, "node_modules/trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", @@ -6825,8 +7898,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true, - "optional": true + "dev": true }, "node_modules/wide-align": { "version": "1.1.5", @@ -7232,15 +8304,657 @@ } }, "@electron-forge/maker-squirrel": { - "version": "6.0.0-beta.63", - "resolved": "https://registry.npmjs.org/@electron-forge/maker-squirrel/-/maker-squirrel-6.0.0-beta.63.tgz", - "integrity": "sha512-18eLRQmMZ6zBcI1Jhuqvhm50bmmatRCbyOUHTaIbhVf1M6ksq34xXXVWKUGlqDiCNLLLNzVw5MIb9O04eUdfIg==", + "version": "6.0.0-beta.33", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-squirrel/-/maker-squirrel-6.0.0-beta.33.tgz", + "integrity": "sha512-ALrQvdS/docVfhkad5bUo03EF4D8XgLu0gmaEO9LPRtdD4KYjd/MgFpLpyT4Bzy28urZblETLbtwP1K9oTKIog==", "dev": true, "requires": { - "@electron-forge/maker-base": "6.0.0-beta.63", - "@electron-forge/shared-types": "6.0.0-beta.63", - "electron-winstaller": "^5.0.0", - "fs-extra": "^10.0.0" + "@electron-forge/maker-base": "6.0.0-beta.33", + "@electron-forge/shared-types": "6.0.0-beta.33", + "electron-winstaller": "^2.5.0", + "fs-extra": "^7.0.0" + }, + "dependencies": { + "@electron-forge/async-ora": { + "version": "6.0.0-beta.33", + "resolved": "https://registry.npmjs.org/@electron-forge/async-ora/-/async-ora-6.0.0-beta.33.tgz", + "integrity": "sha512-c/xNgoL96XNnBgDZepgWoRbWVKP/dyl0l+b30IlKr094HgC9T2bjLLiQgwQ1yDd+8pDZbYe2l6IhlyPveDEXGA==", + "dev": true, + "requires": { + "colors": "^1.2.0", + "debug": "^4.1.0", + "log-symbols": "^2.0.0", + "ora": "^3.0.0", + "pretty-ms": "^4.0.0" + } + }, + "@electron-forge/maker-base": { + "version": "6.0.0-beta.33", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-base/-/maker-base-6.0.0-beta.33.tgz", + "integrity": "sha512-8PUuTPJ+G7JhCLj0W50wBx/m7Gp2ISBRZvPV7MkC+jJiX+XOiR1IfjWYYz/PXhyQW8JoCkgENfb6LpHip4pCTg==", + "dev": true, + "requires": { + "@electron-forge/shared-types": "6.0.0-beta.33", + "fs-extra": "^7.0.0" + } + }, + "@electron-forge/shared-types": { + "version": "6.0.0-beta.33", + "resolved": "https://registry.npmjs.org/@electron-forge/shared-types/-/shared-types-6.0.0-beta.33.tgz", + "integrity": "sha512-3nASnYKFt91w1FVi2dSJOfU3+4mBP2adoS1f1lvVcMlnuzx45QbGm35OdIZVX/pEgWSWgcIt6uoygV/NizIGqg==", + "dev": true, + "requires": { + "@electron-forge/async-ora": "6.0.0-beta.33", + "@types/electron-packager": "^13.0.0", + "electron-rebuild": "^1.6.0", + "ora": "^3.0.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "electron-rebuild": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/electron-rebuild/-/electron-rebuild-1.11.0.tgz", + "integrity": "sha512-cn6AqZBQBVtaEyj5jZW1/LOezZZ22PA1HvhEP7asvYPJ8PDF4i4UFt9be4i9T7xJKiSiomXvY5Fd+dSq3FXZxA==", + "dev": true, + "requires": { + "colors": "^1.3.3", + "debug": "^4.1.1", + "detect-libc": "^1.0.3", + "fs-extra": "^8.1.0", + "node-abi": "^2.11.0", + "node-gyp": "^6.0.1", + "ora": "^3.4.0", + "spawn-rx": "^3.0.0", + "yargs": "^14.2.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "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" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "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=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "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==", + "dev": true, + "requires": { + "semver": "^5.4.1" + } + }, + "node-gyp": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-6.1.0.tgz", + "integrity": "sha512-h4A2zDlOujeeaaTx06r4Vy+8MZ1679lU+wbCKDS4ZtvY2A37DESo37oejIw0mtmR3+rvNwts5B6Kpt1KrNYdNw==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.1.2", + "request": "^2.88.0", + "rimraf": "^2.6.3", + "semver": "^5.7.1", + "tar": "^4.4.12", + "which": "^1.3.1" + } + }, + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pretty-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-4.0.0.tgz", + "integrity": "sha512-qG66ahoLCwpLXD09ZPHSCbUWYTqdosB7SMP4OffgTgL2PBKXMuUsrk5Bwg8q4qPkjTXsKBMr+YK3Ltd/6F9s/Q==", + "dev": true, + "requires": { + "parse-ms": "^2.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "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==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "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": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dev": true, + "requires": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yargs": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz", + "integrity": "sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } } }, "@electron-forge/maker-zip": { @@ -7461,18 +9175,6 @@ "@ocogeclub/pigpio": "file:../pigpio" } }, - "@ocogeclub/bme280": { - "version": "file:local_modules/@ocogeclub/bme280", - "requires": { - "@ocogeclub/pigpio": "file:../pigpio" - } - }, - "@ocogeclub/paj7620": { - "version": "file:local_modules/@ocogeclub/paj7620", - "requires": { - "@ocogeclub/pigpio": "file:../pigpio" - } - }, "@ocogeclub/pigpio": { "version": "file:local_modules/@ocogeclub/pigpio", "requires": { @@ -7505,17 +9207,20 @@ "@tensorflow-models/blazeface": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/@tensorflow-models/blazeface/-/blazeface-0.0.7.tgz", - "integrity": "sha512-+hInPkvHJoubfiXlmNuF3SCucZvU6W1PMC25IV99NSAftJUpKvLokfF93iX8UkOFQCXkPFbnLKacGfGlbjgvMw==" + "integrity": "sha512-+hInPkvHJoubfiXlmNuF3SCucZvU6W1PMC25IV99NSAftJUpKvLokfF93iX8UkOFQCXkPFbnLKacGfGlbjgvMw==", + "requires": {} }, "@tensorflow-models/knn-classifier": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@tensorflow-models/knn-classifier/-/knn-classifier-1.2.2.tgz", - "integrity": "sha512-QRnkCf7ErOxSRtvJ6yCwhlLREPcBJGaXRanF46f0iY6ii3Sybjb6Ux0qnNPTrHZChD0izPa3Z4GQEgSAykiHkQ==" + "integrity": "sha512-QRnkCf7ErOxSRtvJ6yCwhlLREPcBJGaXRanF46f0iY6ii3Sybjb6Ux0qnNPTrHZChD0izPa3Z4GQEgSAykiHkQ==", + "requires": {} }, "@tensorflow-models/mobilenet": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@tensorflow-models/mobilenet/-/mobilenet-2.1.0.tgz", - "integrity": "sha512-JjqT9ijHDFA2FEpUGWg7H2lQ0GrMuE2VmiCRBYmUew6b4JKht8LXDjG5HxZh95YH6c/25sZWTpGeHbquloH+hw==" + "integrity": "sha512-JjqT9ijHDFA2FEpUGWg7H2lQ0GrMuE2VmiCRBYmUew6b4JKht8LXDjG5HxZh95YH6c/25sZWTpGeHbquloH+hw==", + "requires": {} }, "@tensorflow/tfjs": { "version": "3.13.0", @@ -7569,7 +9274,8 @@ "@tensorflow/tfjs-converter": { "version": "3.13.0", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-3.13.0.tgz", - "integrity": "sha512-H2VpDTv9Ve0HBt7ttzz46DmnsPaiT0B+yJjVH3NebGZbgY9C8boBgJIsdyqfiqEWBS3WxF8h4rh58Hv5XXMgaQ==" + "integrity": "sha512-H2VpDTv9Ve0HBt7ttzz46DmnsPaiT0B+yJjVH3NebGZbgY9C8boBgJIsdyqfiqEWBS3WxF8h4rh58Hv5XXMgaQ==", + "requires": {} }, "@tensorflow/tfjs-core": { "version": "3.13.0", @@ -7597,7 +9303,8 @@ "@tensorflow/tfjs-layers": { "version": "3.13.0", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-3.13.0.tgz", - "integrity": "sha512-kTWJ/+9fbNCMDA9iQjDMYHmWivsiWz8CKNSOZdeCW7tiBwF1EiREBVQXMk1JI11ngQa8f+rYSLs7rkhp3SYl5Q==" + "integrity": "sha512-kTWJ/+9fbNCMDA9iQjDMYHmWivsiWz8CKNSOZdeCW7tiBwF1EiREBVQXMk1JI11ngQa8f+rYSLs7rkhp3SYl5Q==", + "requires": {} }, "@tootallnate/once": { "version": "1.1.2", @@ -7617,6 +9324,15 @@ "@types/responselike": "*" } }, + "@types/electron-packager": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/@types/electron-packager/-/electron-packager-13.0.1.tgz", + "integrity": "sha512-K9CCdarh7JdWvIIWM+xCWoROYXgcRFmX3OgjgwaFIFOb87bMTvtQVLyVi8LO0NroURadaae5L1AaK1BxKhytoA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/emscripten": { "version": "0.0.34", "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-0.0.34.tgz", @@ -7930,6 +9646,17 @@ "tweetnacl": "^0.14.3" } }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "dev": true, + "optional": true, + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, "bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -8038,6 +9765,13 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", + "dev": true, + "optional": true + }, "cacache": { "version": "15.3.0", "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", @@ -8132,6 +9866,16 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "dev": true, + "optional": true, + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -8236,6 +9980,12 @@ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -8390,6 +10140,61 @@ "mimic-response": "^1.0.0" } }, + "decompress-zip": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.3.3.tgz", + "integrity": "sha512-/fy1L4s+4jujqj3kNptWjilFw3E6De8U6XUFvqmh4npN3Vsypm3oT2V0bXcmbBWS+5j5tr4okYaFrOmyZkszEg==", + "dev": true, + "optional": true, + "requires": { + "binary": "^0.3.0", + "graceful-fs": "^4.1.3", + "mkpath": "^0.1.0", + "nopt": "^3.0.1", + "q": "^1.1.2", + "readable-stream": "^1.1.8", + "touch": "0.0.3" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true, + "optional": true + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1" + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "optional": true, + "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=", + "dev": true, + "optional": true + } + } + }, "defaults": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", @@ -9029,36 +10834,43 @@ } }, "electron-winstaller": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.0.0.tgz", - "integrity": "sha512-V+jFda7aVAm0htCG8Q95buPUpmXZW9ujh1HdhSlWY6y4QnJnw4TfrmxTlQWV4p2ioF/71JMI/1YF+/qbSICogA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-2.7.0.tgz", + "integrity": "sha512-WKRUTyGzTQbM2Q6dYm/iQqdYRQRTMiFakPxqOCJrH29YPVelGG9vNldal68fnq2yL+FFsoQi/3+qb6jDk143mw==", "dev": true, "optional": true, "requires": { - "asar": "^2.0.1", - "debug": "^4.1.1", - "fs-extra": "^7.0.1", + "asar": "^0.11.0", + "bluebird": "^3.3.4", + "debug": "^2.2.0", + "fs-extra": "^2.1.2", "lodash.template": "^4.2.2", - "temp": "^0.9.0" + "temp": "^0.8.3" }, "dependencies": { "asar": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/asar/-/asar-2.1.0.tgz", - "integrity": "sha512-d2Ovma+bfqNpvBzY/KU8oPY67ZworixTpkjSx0PCXnQi67c2cXmssaTxpFDUM0ttopXoGx/KRxNg/GDThYbXQA==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/asar/-/asar-0.11.0.tgz", + "integrity": "sha1-uSbnksMV+MBIxDNx4yWwnJenZGQ=", "dev": true, "optional": true, "requires": { - "@types/glob": "^7.1.1", - "chromium-pickle-js": "^0.2.0", - "commander": "^2.20.0", - "cuint": "^0.2.2", - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "tmp-promise": "^1.0.5" + "chromium-pickle-js": "^0.1.0", + "commander": "^2.9.0", + "cuint": "^0.2.1", + "glob": "^6.0.4", + "minimatch": "^3.0.0", + "mkdirp": "^0.5.0", + "mksnapshot": "^0.3.0" } }, + "chromium-pickle-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.1.0.tgz", + "integrity": "sha1-HUixB9ghJqLz4hHC6iX4A7pVGyE=", + "dev": true, + "optional": true + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -9066,63 +10878,55 @@ "dev": true, "optional": true }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", + "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", "dev": true, "optional": true, "requires": { "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^2.1.0" + } + }, + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "optional": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "dev": true, "optional": true, "requires": { "graceful-fs": "^4.1.6" } }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "tmp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", - "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", - "dev": true, - "optional": true, - "requires": { - "rimraf": "^2.6.3" - } - }, - "tmp-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-1.1.0.tgz", - "integrity": "sha512-8+Ah9aB1IRXCnIOxXZ0uFozV1nMU5xiu7hhFVUSxZ3bYu+psD4TzagCzVbexUCgNNGJnsmNDQlS4nG3mTyoNkw==", - "dev": true, - "optional": true, - "requires": { - "bluebird": "^3.5.0", - "tmp": "0.1.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true, "optional": true } @@ -9144,7 +10948,6 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, "optional": true, "requires": { "iconv-lite": "^0.6.2" @@ -9154,7 +10957,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "optional": true, "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -10181,6 +11983,16 @@ "json-buffer": "3.0.0" } }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -10223,6 +12035,12 @@ "dev": true, "optional": true }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -10614,6 +12432,61 @@ "minimist": "^1.2.5" } }, + "mkpath": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/mkpath/-/mkpath-0.1.0.tgz", + "integrity": "sha1-dVSm+Nhxg0zJe1RisSLEwSTW3pE=", + "dev": true, + "optional": true + }, + "mksnapshot": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mksnapshot/-/mksnapshot-0.3.5.tgz", + "integrity": "sha512-PSBoZaj9h9myC3uRRW62RxmX8mrN3XbOkMEyURUD7v5CeJgtYTar50XU738t7Q0LtG1pBPtp5n5QwDGggRnEvw==", + "dev": true, + "optional": true, + "requires": { + "decompress-zip": "0.3.x", + "fs-extra": "0.26.7", + "request": "2.x" + }, + "dependencies": { + "fs-extra": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", + "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -10877,12 +12750,28 @@ "wcwidth": "^1.0.1" } }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -11201,6 +13090,13 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true, + "optional": true + }, "qs": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", @@ -11400,8 +13296,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true, - "optional": true + "dev": true }, "resolve": { "version": "1.22.0", @@ -11537,7 +13432,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "devOptional": true }, "seedrandom": { "version": "2.4.3", @@ -11695,6 +13590,49 @@ "source-map": "^0.6.0" } }, + "spawn-rx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spawn-rx/-/spawn-rx-3.0.0.tgz", + "integrity": "sha512-dw4Ryg/KMNfkKa5ezAR5aZe9wNwPdKlnHEXtHOjVnyEDSPQyOpIPPRtcIiu7127SmtHhaCjw21yC43HliW0iIg==", + "dev": true, + "requires": { + "debug": "^2.5.1", + "lodash.assign": "^4.2.0", + "rxjs": "^6.3.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -11873,13 +13811,12 @@ } }, "temp": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", - "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", + "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", "dev": true, "optional": true, "requires": { - "mkdirp": "^0.5.1", "rimraf": "~2.6.2" }, "dependencies": { @@ -11946,7 +13883,8 @@ "@tensorflow/tfjs-converter": { "version": "2.8.6", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-2.8.6.tgz", - "integrity": "sha512-Uv4YC66qjVC9UwBxz0IeLZ8KS2CReh63WlGRtHcSwDEYiwsa7cvp9H6lFSSPT7kiJmrK6JtHeJGIVcTuNnSt9w==" + "integrity": "sha512-Uv4YC66qjVC9UwBxz0IeLZ8KS2CReh63WlGRtHcSwDEYiwsa7cvp9H6lFSSPT7kiJmrK6JtHeJGIVcTuNnSt9w==", + "requires": {} }, "@tensorflow/tfjs-core": { "version": "2.8.6", @@ -11972,7 +13910,8 @@ "@tensorflow/tfjs-layers": { "version": "2.8.6", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-2.8.6.tgz", - "integrity": "sha512-fdZ0i/R2dIKmy8OB5tBAsm5IbAHfJpI6AlbjxpgoU3aWj1HCdDo+pMji928MkDJhP01ISgFTgw/7PseGNaUflw==" + "integrity": "sha512-fdZ0i/R2dIKmy8OB5tBAsm5IbAHfJpI6AlbjxpgoU3aWj1HCdDo+pMji928MkDJhP01ISgFTgw/7PseGNaUflw==", + "requires": {} }, "@types/webgl2": { "version": "0.0.5", @@ -12082,6 +14021,28 @@ "is-number": "^7.0.0" } }, + "touch": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/touch/-/touch-0.0.3.tgz", + "integrity": "sha1-Ua7z1ElXHU8oel2Hyci0kYGg2x0=", + "dev": true, + "optional": true, + "requires": { + "nopt": "~1.0.10" + }, + "dependencies": { + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1" + } + } + } + }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -12097,6 +14058,13 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "dev": true, + "optional": true + }, "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", @@ -12281,8 +14249,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true, - "optional": true + "dev": true }, "wide-align": { "version": "1.1.5", diff --git a/package.json b/package.json index 8bec757..e5ebcfd 100644 --- a/package.json +++ b/package.json @@ -25,15 +25,13 @@ "@electron-forge/cli": "^6.0.0-beta.63", "@electron-forge/maker-deb": "^6.0.0-beta.63", "@electron-forge/maker-rpm": "^6.0.0-beta.63", - "@electron-forge/maker-squirrel": "^6.0.0-beta.33", + "@electron-forge/maker-squirrel": "6.0.0-beta.33", "@electron-forge/maker-zip": "^6.0.0-beta.63", "electron": "^17.0.0", "electron-rebuild": "^3.2.7" }, "dependencies": { "@ocogeclub/amg8833": "file:local_modules/@ocogeclub/amg8833", - "@ocogeclub/bme280": "file:local_modules/@ocogeclub/bme280", - "@ocogeclub/paj7620": "file:local_modules/@ocogeclub/paj7620", "@ocogeclub/pigpio": "file:local_modules/@ocogeclub/pigpio", "@tensorflow-models/blazeface": "^0.0.7", "@tensorflow-models/knn-classifier": "^1.2.2", @@ -76,4 +74,4 @@ ] } } -} \ No newline at end of file +} diff --git a/ugj_blocks.js b/ugj_blocks.js index b82b78f..7594fa3 100644 --- a/ugj_blocks.js +++ b/ugj_blocks.js @@ -1003,284 +1003,8 @@ Blockly.Python['ugj_i2c_write_device'] = function (block) { }; /** センサー */ -/********* */ -/** BME280 */ -/********* */ -Blockly.Blocks['ugj_bme280'] = { - init: function () { - this.appendDummyInput() - .appendField("BME280(アドレス") - .appendField(new Blockly.FieldDropdown([["0x76", "0x76"], ["0x77", "0x77"]]), "addr") - .appendField(")の計測値を取得"); - this.setInputsInline(true); - this.setPreviousStatement(true, null); - this.setNextStatement(true, null); - this.setStyle('sensor_blocks'); - this.setTooltip("環境センサーBME280で、気温(摂氏)、湿度(%)、気圧(hPa)を計測します。計測結果は計測値ブロックで参照します。"); - this.setHelpUrl(""); - } -}; -Blockly.JavaScript['ugj_bme280'] = function (block) { - var dropdown_addr = block.getFieldValue('addr'); - Blockly.JavaScript.provideFunction_( - 'require_bme280', [`const _bme280 = require('@ocogeclub/bme280');`] - ); - var code = `const options = { - i2cBusNo: ${elutil.i2c_bus}, - i2cAddress: ${dropdown_addr} -}; -await _bme280.init(options); -let _thp = await _bme280.readSensorData(); -let _bmedata = []; -_bmedata[0] = Math.round(_thp.temperature_C * 10) / 10; -_bmedata[1] = Math.round(_thp.humidity * 10) / 10; -_bmedata[2] = Math.round(_thp.pressure_hPa); -await _bme280.cancel(); - `; - return code; -}; -Blockly.Blocks['ugj_bme280_data'] = { - init: function () { - this.appendDummyInput() - .appendField(new Blockly.FieldDropdown([["気温", "0"], ["湿度", "1"], ["気圧", "2"]]), "thp"); - this.setInputsInline(true); - this.setOutput(true, null); - this.setStyle('sensor_blocks'); - this.setTooltip("BME280 の計測値を返します。"); - this.setHelpUrl(""); - } -}; -Blockly.JavaScript['ugj_bme280_data'] = function (block) { - var dropdown_thp = block.getFieldValue('thp'); - var code = `_bmedata[${dropdown_thp}]`; - return [code, Blockly.JavaScript.ORDER_ATOMIC]; -}; -/********** */ -/** PAJ7620 */ -/********** */ -var ugjGestureInitDefinition = { - "type": "ugj_gesture_init", - "message0": "%{BKY_UGJ_GESTURE_INIT_TITLE}", - "args0": [ - { - "type": "input_value", - "name": "i2c_addr", - "check": "Number" - } - ], - "inputsInline": true, - "previousStatement": null, - "nextStatement": null, - "tooltip": "%{BKY_UGJ_GESTURE_INIT_TOOLTIP}", - "helpUrl": "", - "style": "sensor_blocks" -}; -Blockly.Blocks['ugj_gesture_init'] = { - init: function () { - this.jsonInit(ugjGestureInitDefinition); - } -}; -Blockly.JavaScript['ugj_gesture_init'] = function (block) { - var value_i2c_addr = Blockly.JavaScript.valueToCode(block, 'i2c_addr', Blockly.JavaScript.ORDER_ATOMIC); - Blockly.JavaScript.provideFunction_( - 'require_paj7620', [`const _paj7620 = require('@ocogeclub/paj7620');`] - ); - var code = `await _paj7620.init(${elutil.i2c_bus}, ${value_i2c_addr}); - `; - return code; -}; -Blockly.Python['ugj_gesture_init'] = function (block) { - var value_i2c_addr = Blockly.Python.valueToCode(block, 'i2c_addr', Blockly.Python.ORDER_ATOMIC); - // TODO: Assemble Python into code variable. - var code = '...\n'; - return code; -}; -/****************** */ -/** Gesture Read ** */ -/****************** */ -var ugjGestureReadDefinition = { - "type": "ugj_gesture_read", - "message0": "%{BKY_UGJ_GESTURE_READ_TITLE}", - "inputsInline": true, - "output": "Number", - "tooltip": "%{BKY_UGJ_GESTURE_READ_TOOLTIP}", - "helpUrl": "https://ocoge.club/sensors/paj7620.html", - "style": "sensor_blocks" -}; -Blockly.Blocks['ugj_gesture_read'] = { - init: function () { - this.jsonInit(ugjGestureReadDefinition); - } -}; -Blockly.JavaScript['ugj_gesture_read'] = function (block) { - var code = 'await _paj7620.return_gesture()'; - return [code, Blockly.JavaScript.ORDER_ATOMIC]; -}; -Blockly.Python['ugj_gesture_read'] = function (block) { - // TODO: Assemble Python into code variable. - var code = '...'; - // TODO: Change ORDER_NONE to the correct strength. - return [code, Blockly.Python.ORDER_NONE]; -}; -/****************** */ -/** Gesture Stop ** */ -/****************** */ -var ugjGestureStopDefinition = { - "type": "ugj_gesture_stop", - "message0": "%{BKY_UGJ_GESTURE_STOP_TITLE}", - "inputsInline": true, - "previousStatement": null, - "nextStatement": null, - "tooltip": "%{BKY_UGJ_GESTURE_STOP_TOOLTIP}", - "helpUrl": "", - "style": "sensor_blocks" -}; -Blockly.Blocks['ugj_gesture_stop'] = { - init: function () { - this.jsonInit(ugjGestureStopDefinition); - } -}; -Blockly.JavaScript['ugj_gesture_stop'] = function (block) { - var code = 'await _paj7620.stop();\n'; - return code; -}; -Blockly.Python['ugj_gesture_stop'] = function (block) { - // TODO: Assemble Python into code variable. - var code = '...\n'; - return code; -}; - -/******************* */ -/** Init Grid-Eye ** */ -/******************* */ -var ugjGridEyeInitDefinition = { - "type": "ugj_grideye_init", - "message0": "%{BKY_UGJ_GRIDEYE_INIT_TITLE}", - "args0": [ - { - "type": "field_dropdown", - "name": "addr", - "options": [ - [ - "0x68", - "0x68" - ], - [ - "0x69", - "0x69" - ] - ] - } - ], - "inputsInline": true, - "previousStatement": null, - "nextStatement": null, - "tooltip": "%{BKY_UGJ_GRIDEYE_INIT_TOOLTIP}", - "helpUrl": "", - "style": "sensor_blocks" -}; -Blockly.Blocks['ugj_grideye_init'] = { - init: function () { - this.jsonInit(ugjGridEyeInitDefinition); - } -}; -Blockly.JavaScript['ugj_grideye_init'] = function (block) { - var dropdown_addr = block.getFieldValue('addr'); - Blockly.JavaScript.provideFunction_( - 'require_amg8833', [`const _amg8833 = require('@ocogeclub/amg8833');`] - ); - var code = `await _amg8833.init(${elutil.i2c_bus}, ${dropdown_addr});\n`; - return code; -}; -Blockly.Python['ugj_grideye_init'] = function (block) { - var dropdown_addr = block.getFieldValue('addr'); - // TODO: Assemble Python into code variable. - var code = '...\n'; - return code; -}; -/********************** */ -/** Grid-Eye 本体温度 ** */ -/********************** */ -var ugjGridEyeThermistorDefinition = { - "type": "ugj_grideye_thermistor", - "message0": "%{BKY_UGJ_GRIDEYE_THERMISTOR_TITLE}", - "output": "Number", - "tooltip": "%{BKY_UGJ_GRIDEYE_THERMISTOR_TOOLTIP}", - "helpUrl": "", - "style": "sensor_blocks" -}; -Blockly.Blocks['ugj_grideye_thermistor'] = { - init: function () { - this.jsonInit(ugjGridEyeThermistorDefinition); - } -}; -Blockly.JavaScript['ugj_grideye_thermistor'] = function (block) { - var code = `await _amg8833.read_thermistor()`; - return [code, Blockly.JavaScript.ORDER_NONE]; -}; -Blockly.Python['ugj_grideye_thermistor'] = function (block) { - // TODO: Assemble Python into code variable. - var code = '...'; - // TODO: Change ORDER_NONE to the correct strength. - return [code, Blockly.Python.ORDER_NONE]; -}; - -/**************************** */ -/** Read Temperature Array ** */ -/**************************** */ -var ugjGridEyeReadDefinition = { - "type": "ugj_grideye_read", - "message0": "%{BKY_UGJ_GRIDEYE_READ_TITLE}", - "inputsInline": true, - "output": "Array", - "tooltip": "%{BKY_UGJ_GRIDEYE_READ_TOOLTIP}", - "helpUrl": "", - "style": "sensor_blocks" -}; -Blockly.Blocks['ugj_grideye_read'] = { - init: function () { - this.jsonInit(ugjGridEyeReadDefinition); - } -}; -Blockly.JavaScript['ugj_grideye_read'] = function (block) { - var code = 'await _amg8833.read_temp_array()'; - return [code, Blockly.JavaScript.ORDER_ATOMIC]; -}; -Blockly.Python['ugj_grideye_read'] = function (block) { - // TODO: Assemble Python into code variable. - var code = '...'; - // TODO: Change ORDER_NONE to the correct strength. - return [code, Blockly.Python.ORDER_NONE]; -}; -/******************* */ -/** Stop Grid-Eye ** */ -/******************* */ -var ugjGridEyeStopDefinition = { - "type": "ugj_grideye_stop", - "message0": "%{BKY_UGJ_GRIDEYE_STOP_TITLE}", - "inputsInline": true, - "previousStatement": null, - "nextStatement": null, - "tooltip": "%{BKY_UGJ_GRIDEYE_STOP_TOOLTIP}", - "helpUrl": "", - "style": "sensor_blocks" -}; -Blockly.Blocks['ugj_grideye_stop'] = { - init: function () { - this.jsonInit(ugjGridEyeStopDefinition); - } -}; -Blockly.JavaScript['ugj_grideye_stop'] = function (block) { - var code = 'await _amg8833.stop();\n'; - return code; -}; -Blockly.Python['ugj_grideye_stop'] = function (block) { - // TODO: Assemble Python into code variable. - var code = '...\n'; - return code; -}; /** Multimedia *****************************************************************************************************/