From f0752640c24bae65cf4642be5977561a9826973b Mon Sep 17 00:00:00 2001 From: Chrystian Huot Date: Sat, 2 Jan 2021 07:58:18 -0500 Subject: [PATCH] Version 4.9.0 --- CHANGELOG.md | 8 + client/package-lock.json | 8 +- client/package.json | 4 +- client/proxy.conf.js | 2 +- client/src/app/app.component.ts | 2 +- client/src/app/app.module.ts | 2 +- .../src/app/components/rdio-scanner/index.ts | 2 +- .../rdio-scanner/main/main.component.html | 16 +- .../rdio-scanner/main/main.component.scss | 24 +- .../rdio-scanner/main/main.component.ts | 60 ++- .../rdio-scanner/rdio-scanner.component.ts | 33 +- .../rdio-scanner/rdio-scanner.module.ts | 2 +- .../rdio-scanner/rdio-scanner.service.ts | 12 +- .../components/rdio-scanner/rdio-scanner.ts | 3 +- .../rdio-scanner/search/search.component.ts | 2 +- .../rdio-scanner/select/select.component.ts | 2 +- client/src/app/shared/locale/locale.module.ts | 2 +- .../app/shared/material/material.module.ts | 2 +- client/src/app/shared/shared.module.ts | 2 +- client/src/main.ts | 2 +- docs/examples/csdr/csdr-am | 2 +- docs/webapp.md | 24 +- package.json | 2 +- run.js | 2 +- server/index.js | 2 +- server/lib/rdio-scanner/api/call-upload.js | 2 +- server/lib/rdio-scanner/api/index.js | 2 +- .../api/trunk-recorder-call-upload.js | 2 +- server/lib/rdio-scanner/controller.js | 25 +- server/lib/rdio-scanner/defaults.js | 2 +- server/lib/rdio-scanner/dir-watch.js | 2 +- server/lib/rdio-scanner/downstream.js | 2 +- server/lib/rdio-scanner/index.js | 2 +- ...191028144433-create-rdio-scanner-system.js | 2 +- ...20191029092201-create-rdio-scanner-call.js | 2 +- ...91126135515-optimize-rdio-scanner-calls.js | 2 +- .../20191220093214-new-v3-tables.js | 2 +- ...00123094105-optimize-rdio-scanner-calls.js | 2 +- .../20200428132918-new-v4-tables.js | 2 +- server/lib/rdio-scanner/models/call.js | 2 +- server/lib/rdio-scanner/models/index.js | 2 +- server/lib/rdio-scanner/models/system.js | 2 +- server/lib/rdio-scanner/utils.js | 2 +- server/lib/rdio-scanner/websocket.js | 2 +- server/package-lock.json | 407 ++++++++---------- server/package.json | 14 +- server/webpack.config.js | 2 +- update.js | 2 +- 48 files changed, 390 insertions(+), 318 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23d0412..2227daf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# Version 4.9 + +- Add basic duplicate call detection and rejection. +- Add keyboard shortcuts for the main buttons. +- Add an avoid indicator when the talkgroup is avoided. +- Add an no link indicator when websocket connection is down. +- Node modules update. + # Version 4.8 - Add downstream.system.id_as property to allow export system with a different id. diff --git a/client/package-lock.json b/client/package-lock.json index 5b14bd6..40fd583 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1,6 +1,6 @@ { "name": "rdio-scanner-client", - "version": "4.8.5", + "version": "4.9.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1609,9 +1609,9 @@ "dev": true }, "@types/node": { - "version": "14.14.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.16.tgz", - "integrity": "sha512-naXYePhweTi+BMv11TgioE2/FXU4fSl29HAH1ffxVciNsH3rYXjNP2yM8wqmSm7jS20gM8TIklKiTen+1iVncw==", + "version": "14.14.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.19.tgz", + "integrity": "sha512-4nhBPStMK04rruRVtVc6cDqhu7S9GZai0fpXgPXrFpcPX6Xul8xnrjSdGB4KPBVYG/R5+fXWdCM8qBoiULWGPQ==", "dev": true }, "@types/parse-json": { diff --git a/client/package.json b/client/package.json index 9c57e8d..5e59d49 100644 --- a/client/package.json +++ b/client/package.json @@ -19,7 +19,7 @@ "@angular-devkit/build-angular": "~0.1100.5", "@angular/cli": "^11.0.5", "@angular/compiler-cli": "~11.0.5", - "@types/node": "~14.14.16", + "@types/node": "~14.14.19", "codelyzer": "^6.0.1", "ts-node": "~9.1.1", "tslint": "~6.1.3", @@ -32,5 +32,5 @@ "build": "ng build --base-href ./ --prod", "start": "ng serve" }, - "version": "4.8.5" + "version": "4.9.0" } diff --git a/client/proxy.conf.js b/client/proxy.conf.js index a267276..d8d5e5e 100644 --- a/client/proxy.conf.js +++ b/client/proxy.conf.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/client/src/app/app.component.ts b/client/src/app/app.component.ts index eb47637..a648f35 100644 --- a/client/src/app/app.component.ts +++ b/client/src/app/app.component.ts @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts index c2b3701..54d9921 100644 --- a/client/src/app/app.module.ts +++ b/client/src/app/app.module.ts @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/client/src/app/components/rdio-scanner/index.ts b/client/src/app/components/rdio-scanner/index.ts index f7bc574..660ee26 100644 --- a/client/src/app/components/rdio-scanner/index.ts +++ b/client/src/app/components/rdio-scanner/index.ts @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/client/src/app/components/rdio-scanner/main/main.component.html b/client/src/app/components/rdio-scanner/main/main.component.html index 0cf89b9..af85628 100644 --- a/client/src/app/components/rdio-scanner/main/main.component.html +++ b/client/src/app/components/rdio-scanner/main/main.component.html @@ -2,14 +2,18 @@
-
+
{{ clock | date:'HH:mm' }}
+
+ NO LINK +
Q: {{ callQueue }}
+
{{ callSystem }} @@ -26,7 +30,7 @@ {{ callProgress | date:'HH:mm' }}
-
+
{{ callTalkgroupName }}
@@ -37,7 +41,7 @@ TGID: {{ callTalkgroupId || 0 }}
-
+
E: {{ callError || 0 }} S: {{ callSpike || 0 }}
@@ -45,6 +49,12 @@ UID: {{ callUnit }}
+
+
+
+ AVOID +
+
diff --git a/client/src/app/components/rdio-scanner/main/main.component.scss b/client/src/app/components/rdio-scanner/main/main.component.scss index fdd661c..ad3c965 100644 --- a/client/src/app/components/rdio-scanner/main/main.component.scss +++ b/client/src/app/components/rdio-scanner/main/main.component.scss @@ -35,6 +35,22 @@ &.idle { background: rgb(190, 190, 174); + + .avoid { + color: rgb(190, 190, 174); + } + } + + .avoid { + background: rgba(0, 0, 0, 0.8); + border-radius: 3px; + color: rgb(209, 238, 238); + padding: 0 3px; + visibility: hidden; + } + + .avoided { + visibility: visible; } * { @@ -80,14 +96,16 @@ height: 20px; justify-content: space-between; - &.bold { + &.big { font-size: 24px; height: 32px; line-height: 32px; } - &.margin { - margin-bottom: 12px; + &.small { + font-size: 12px; + height: 14px; + line-height: 14px; } } diff --git a/client/src/app/components/rdio-scanner/main/main.component.ts b/client/src/app/components/rdio-scanner/main/main.component.ts index 0678121..970f03a 100644 --- a/client/src/app/components/rdio-scanner/main/main.component.ts +++ b/client/src/app/components/rdio-scanner/main/main.component.ts @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,12 +17,20 @@ * **************************************************************************** */ -import { ChangeDetectorRef, Component, EventEmitter, OnDestroy, OnInit, Output, ViewChild } from '@angular/core'; +import { ChangeDetectorRef, Component, EventEmitter, HostListener, OnDestroy, OnInit, Output, ViewChild } from '@angular/core'; import { FormBuilder } from '@angular/forms'; import { MatInput } from '@angular/material/input'; import { Subscription, timer } from 'rxjs'; import { name as appName, version } from '../../../../../package.json'; -import { RdioScannerAvoidOptions, RdioScannerBeepStyle, RdioScannerCall, RdioScannerConfig, RdioScannerEvent, RdioScannerLivefeedMode } from '../rdio-scanner'; +import { + RdioScannerAvoidOptions, + RdioScannerBeepStyle, + RdioScannerCall, + RdioScannerConfig, + RdioScannerEvent, + RdioScannerLivefeedMap, + RdioScannerLivefeedMode, +} from '../rdio-scanner'; import { AppRdioScannerService } from '../rdio-scanner.service'; const LOCAL_STORAGE_KEY = AppRdioScannerService.LOCAL_STORAGE_KEY + '-pin'; @@ -39,6 +47,8 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit { auth = false; authForm = this.ngFormBuilder.group({ password: [] }); + avoided = false; + call: RdioScannerCall | undefined; callError = '0'; callFrequency: string = this.formatFrequency(0); @@ -64,10 +74,14 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit { ledStyle = ''; + linked = false; + livefeedOffline = true; livefeedOnline = false; livefeedPaused = false; + map: RdioScannerLivefeedMap = {}; + playbackMode = false; @Output() openSearchPanel = new EventEmitter(); @@ -104,16 +118,24 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit { } } + @HostListener('document:keydown.a') avoid(options?: RdioScannerAvoidOptions): void { if (this.auth) { this.authFocus(); } else { - if (options || this.call || this.callPrevious) { - this.appRdioScannerService.beep(RdioScannerBeepStyle.Activate); + const call = this.call || this.callPrevious; + if (options || call) { this.appRdioScannerService.avoid(options); + if (call && !this.map[call.system][call.talkgroup]) { + this.appRdioScannerService.beep(RdioScannerBeepStyle.Activate); + + } else { + this.appRdioScannerService.beep(RdioScannerBeepStyle.Deactivate); + } + } else { this.appRdioScannerService.beep(RdioScannerBeepStyle.Denied); } @@ -122,6 +144,7 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit { } } + @HostListener('document:keydown.s') holdSystem(): void { if (this.auth) { this.authFocus(); @@ -140,6 +163,7 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit { } } + @HostListener('document:keydown.t') holdTalkgroup(): void { if (this.auth) { this.authFocus(); @@ -158,6 +182,7 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit { } } + @HostListener('document:keydown.l') livefeed(): void { if (this.auth) { this.authFocus(); @@ -181,7 +206,11 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit { this.syncClock(); } - pause(): void { + @HostListener('document:keydown.space', ['$event']) + @HostListener('document:keydown.p') + pause(event?: KeyboardEvent): void { + event?.preventDefault(); + if (this.auth) { this.authFocus(); @@ -199,6 +228,7 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit { } } + @HostListener('document:keydown.r') replay(): void { if (this.auth) { this.authFocus(); @@ -247,6 +277,7 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit { } } + @HostListener('document:keydown.n') skip(options?: { delay?: boolean }): void { if (this.auth) { this.authFocus(); @@ -334,6 +365,10 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit { this.holdTg = event.holdTg || false; } + if ('linked' in event) { + this.linked = event.linked || false; + } + if ('livefeedMode' in event && event.livefeedMode) { this.livefeedOffline = event.livefeedMode === RdioScannerLivefeedMode.Offline; @@ -342,6 +377,10 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit { this.playbackMode = event.livefeedMode === RdioScannerLivefeedMode.Playback; } + if ('map' in event) { + this.map = event.map || {}; + } + if ('pause' in event) { this.livefeedPaused = event.pause || false; } @@ -456,6 +495,15 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit { } } + const call = this.call || this.callPrevious; + + if (call && this.map[call.system]) { + this.avoided = !this.map[call.system][call.talkgroup]; + + } else { + this.avoided = false; + } + const colors = ['blue', 'cyan', 'green', 'magenta', 'red', 'white', 'yellow']; this.ledStyle = this.call && this.livefeedPaused ? 'on paused' : this.call ? 'on' : 'off'; diff --git a/client/src/app/components/rdio-scanner/rdio-scanner.component.ts b/client/src/app/components/rdio-scanner/rdio-scanner.component.ts index e51ebb0..f49c392 100644 --- a/client/src/app/components/rdio-scanner/rdio-scanner.component.ts +++ b/client/src/app/components/rdio-scanner/rdio-scanner.component.ts @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -58,7 +58,6 @@ export class AppRdioScannerComponent implements OnDestroy { this.appRdioScannerService.stopLivefeed(); this.searchPanel?.close(); - this.selectPanel?.close(); } @@ -66,7 +65,11 @@ export class AppRdioScannerComponent implements OnDestroy { this.eventSubscription.unsubscribe(); } - toggleFullscreen(): void { + @HostListener('document:keydown.f') + @HostListener('document:keydown.tab', ['$event']) + toggleFullscreen(event?: KeyboardEvent): void { + event?.preventDefault(); + if (document.fullscreenElement) { const el: { exitFullscreen?: () => void; @@ -111,4 +114,28 @@ export class AppRdioScannerComponent implements OnDestroy { this.livefeedMode = event.livefeedMode; } } + + @HostListener('document:keydown.arrowleft', ['$event']) + private keyLeftArrow(event?: KeyboardEvent): void { + event?.preventDefault(); + + if (this.selectPanel?.opened) { + this.selectPanel?.close(); + + } else { + this.searchPanel?.open(); + } + } + + @HostListener('document:keydown.arrowright', ['$event']) + private keyRightArrow(event?: KeyboardEvent): void { + event?.preventDefault(); + + if (this.searchPanel?.opened) { + this.searchPanel?.close(); + + } else { + this.selectPanel?.open(); + } + } } diff --git a/client/src/app/components/rdio-scanner/rdio-scanner.module.ts b/client/src/app/components/rdio-scanner/rdio-scanner.module.ts index 33003f0..85503e2 100644 --- a/client/src/app/components/rdio-scanner/rdio-scanner.module.ts +++ b/client/src/app/components/rdio-scanner/rdio-scanner.module.ts @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/client/src/app/components/rdio-scanner/rdio-scanner.service.ts b/client/src/app/components/rdio-scanner/rdio-scanner.service.ts index a6bdca3..cb58d9a 100644 --- a/client/src/app/components/rdio-scanner/rdio-scanner.service.ts +++ b/client/src/app/components/rdio-scanner/rdio-scanner.service.ts @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -152,7 +152,9 @@ export class AppRdioScannerService implements OnDestroy { } } - this.cleanQueue(); + if (this.livefeedMode !== RdioScannerLivefeedMode.Playback) { + this.cleanQueue(); + } this.rebuildGroups(); @@ -731,14 +733,18 @@ export class AppRdioScannerService implements OnDestroy { this.websocket = new WebSocket(websocketUrl); this.websocket.onclose = (ev: CloseEvent) => { + this.event.emit({ linked: false }); + if (ev.code !== 1000) { timer(2000).subscribe(() => this.reconnectWebsocket()); } }; - this.websocket.onerror = () => { }; + this.websocket.onerror = () => this.event.emit({ linked: false }); this.websocket.onopen = () => { + this.event.emit({ linked: true }); + if (this.websocket instanceof WebSocket) { this.websocket.onmessage = (ev: MessageEvent) => this.parseWebsocketMessage(ev.data); } diff --git a/client/src/app/components/rdio-scanner/rdio-scanner.ts b/client/src/app/components/rdio-scanner/rdio-scanner.ts index 64670cf..bd2952b 100644 --- a/client/src/app/components/rdio-scanner/rdio-scanner.ts +++ b/client/src/app/components/rdio-scanner/rdio-scanner.ts @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -85,6 +85,7 @@ export interface RdioScannerEvent { groups?: RdioScannerGroup[]; holdSys?: boolean; holdTg?: boolean; + linked?: boolean; livefeedMode?: RdioScannerLivefeedMode; map?: RdioScannerLivefeedMap; pause?: boolean; diff --git a/client/src/app/components/rdio-scanner/search/search.component.ts b/client/src/app/components/rdio-scanner/search/search.component.ts index 7b8d34c..b3cce1e 100644 --- a/client/src/app/components/rdio-scanner/search/search.component.ts +++ b/client/src/app/components/rdio-scanner/search/search.component.ts @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/client/src/app/components/rdio-scanner/select/select.component.ts b/client/src/app/components/rdio-scanner/select/select.component.ts index 5b2d2a0..9076719 100644 --- a/client/src/app/components/rdio-scanner/select/select.component.ts +++ b/client/src/app/components/rdio-scanner/select/select.component.ts @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/client/src/app/shared/locale/locale.module.ts b/client/src/app/shared/locale/locale.module.ts index 685a70d..934fa8f 100644 --- a/client/src/app/shared/locale/locale.module.ts +++ b/client/src/app/shared/locale/locale.module.ts @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/client/src/app/shared/material/material.module.ts b/client/src/app/shared/material/material.module.ts index e7c6327..61cb36e 100644 --- a/client/src/app/shared/material/material.module.ts +++ b/client/src/app/shared/material/material.module.ts @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/client/src/app/shared/shared.module.ts b/client/src/app/shared/shared.module.ts index 47870d5..4e2c883 100644 --- a/client/src/app/shared/shared.module.ts +++ b/client/src/app/shared/shared.module.ts @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/client/src/main.ts b/client/src/main.ts index a143a40..f00d84c 100644 --- a/client/src/main.ts +++ b/client/src/main.ts @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/docs/examples/csdr/csdr-am b/docs/examples/csdr/csdr-am index d4c5fbc..bb2e9e1 100755 --- a/docs/examples/csdr/csdr-am +++ b/docs/examples/csdr/csdr-am @@ -2,7 +2,7 @@ ## ## ############################################################################# -## Copyright (C) 2019-2020 Chrystian Huot +## Copyright (C) 2019-2021 Chrystian Huot ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by diff --git a/docs/webapp.md b/docs/webapp.md index 6f721d8..1ea444a 100644 --- a/docs/webapp.md +++ b/docs/webapp.md @@ -36,23 +36,23 @@ The color is _green_ by default, but can be customized in `config.json` by the s - **UID: 4612205** - the unit ID or alias name - History - The last five played audio files -> Note that you can double-click or double-tap the display area to switch to full-screen display (also on mobile devices). +> Note that you can double-click, double-tap the display area, press the `f key` or the `tab key` to switch to full-screen display (also on mobile devices). ### Control area ![Control Area](./images/rdio_scanner_control.png?raw=true "Control Area") -| Button | Description | -| ------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ![LIVE FEED](./images/rdio_scanner_control_livefeed_offline.png?raw=true "LIVE FEED") | When active, incoming audio will be played according to the active systems/talkgroups on the **SELECT TG** panel. The LED can also be _yellow_ if playing audio from the archive while **LIVE FEED** is inactive, this is called **offline playback mode**. Disabling **LIVE FEED** will also stop any playing audio and will clear the listening queue. | -| ![HOLD SYS](./images/rdio_scanner_control_holdsys.png?raw=true "HOLD SYS") | Temporarily maintain the current system in live feed mode. | -| ![HOLD TG](./images/rdio_scanner_control_holdtg.png?raw=true "HOLD TG") | Temporarily maintain the current talkgroup in live feed mode. | -| ![REPLAY LAST](./images/rdio_scanner_control_replay.png?raw=true "REPLAY LAST") | Replay the current audio from the beginning or the previous one if there is none active. | -| ![SKIP NEXT](./images/rdio_scanner_control_skip.png?raw=true "SKIP NEXT") | Stop the audio currently playing and play the next one in the listening queue. This is useful when playing boring or encrypted sound. | -| ![AVOID](./images/rdio_scanner_control_avoid.png?raw=true "AVOID") | Activate and deactivate the talkgroup from the current or previous audio. | -| ![SEARCH CALL](./images/rdio_scanner_control_search.png?raw=true "SEARCH CALL") | Display the archived audio panel. | -| ![PAUSE](./images/rdio_scanner_control_pause.png?raw=true "PAUSE") | Stop playing queue audio. Useful if you have to answer the phone without losing what's queued up for playing. | -| ![SELECT TG](./images/rdio_scanner_control_select.png?raw=true "SELECT TG") | Display the systems/talkgroups selection panel where you decide which audio you want to listen to in \*_LIVE FEED_ (not in offline playback mode). | +| Button | Keyboard | Description | +| ------------------------------------------------------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ![LIVE FEED](./images/rdio_scanner_control_livefeed_offline.png?raw=true "LIVE FEED") | l | When active, incoming audio will be played according to the active systems/talkgroups on the **SELECT TG** panel. The LED can also be _yellow_ if playing audio from the archive while **LIVE FEED** is inactive, this is called **offline playback mode**. Disabling **LIVE FEED** will also stop any playing audio and will clear the listening queue. | +| ![HOLD SYS](./images/rdio_scanner_control_holdsys.png?raw=true "HOLD SYS") | s | Temporarily maintain the current system in live feed mode. | +| ![HOLD TG](./images/rdio_scanner_control_holdtg.png?raw=true "HOLD TG") | t | Temporarily maintain the current talkgroup in live feed mode. | +| ![REPLAY LAST](./images/rdio_scanner_control_replay.png?raw=true "REPLAY LAST") | r | Replay the current audio from the beginning or the previous one if there is none active. | +| ![SKIP NEXT](./images/rdio_scanner_control_skip.png?raw=true "SKIP NEXT") | n | Stop the audio currently playing and play the next one in the listening queue. This is useful when playing boring or encrypted sound. | +| ![AVOID](./images/rdio_scanner_control_avoid.png?raw=true "AVOID") | a | Activate and deactivate the talkgroup from the current or previous audio. | +| ![SEARCH CALL](./images/rdio_scanner_control_search.png?raw=true "SEARCH CALL") | ← | Display the archived audio panel. | +| ![PAUSE](./images/rdio_scanner_control_pause.png?raw=true "PAUSE") | p, space | Stop playing queue audio. Useful if you have to answer the phone without losing what's queued up for playing. | +| ![SELECT TG](./images/rdio_scanner_control_select.png?raw=true "SELECT TG") | → | Display the systems/talkgroups selection panel where you decide which audio you want to listen to in \*_LIVE FEED_ (not in offline playback mode). | ### Systems/Talkgroups selection panel diff --git a/package.json b/package.json index 9c55120..3495aaa 100644 --- a/package.json +++ b/package.json @@ -10,5 +10,5 @@ "start": "node run", "update": "node update" }, - "version": "4.8.5" + "version": "4.9.0" } diff --git a/run.js b/run.js index 602b926..c190e3b 100644 --- a/run.js +++ b/run.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/server/index.js b/server/index.js index 504b2cd..3ccd231 100644 --- a/server/index.js +++ b/server/index.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/server/lib/rdio-scanner/api/call-upload.js b/server/lib/rdio-scanner/api/call-upload.js index 0fb6ba8..e2130ae 100644 --- a/server/lib/rdio-scanner/api/call-upload.js +++ b/server/lib/rdio-scanner/api/call-upload.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/server/lib/rdio-scanner/api/index.js b/server/lib/rdio-scanner/api/index.js index 6628b49..959bab5 100644 --- a/server/lib/rdio-scanner/api/index.js +++ b/server/lib/rdio-scanner/api/index.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/server/lib/rdio-scanner/api/trunk-recorder-call-upload.js b/server/lib/rdio-scanner/api/trunk-recorder-call-upload.js index 81ebc99..ce31dfd 100644 --- a/server/lib/rdio-scanner/api/trunk-recorder-call-upload.js +++ b/server/lib/rdio-scanner/api/trunk-recorder-call-upload.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/server/lib/rdio-scanner/controller.js b/server/lib/rdio-scanner/controller.js index fe561ce..ecf232f 100644 --- a/server/lib/rdio-scanner/controller.js +++ b/server/lib/rdio-scanner/controller.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -492,6 +492,29 @@ class Controller extends EventEmitter { return; } + const dateFrom = new Date(call.dateTime); + const dateTo = new Date(call.dateTime); + + dateFrom.setMilliseconds(dateFrom.getMilliseconds() - 500); + dateTo.setMilliseconds(dateTo.getMilliseconds() + 500); + + const duplicateCall = await this.models.call.findOne({ + where: { + dateTime: { + [Op.gte]: dateFrom, + [Op.lte]: dateTo, + }, + system: call.system, + talkgroup: call.talkgroup, + }, + }); + + if (duplicateCall) { + console.log(`NewCall: system=${call.system} talkgroup=${call.talkgroup} file=${call.audioName} Duplicate call rejected`); + + return; + } + if (!this.config.disableAudioConversion && call.audioType !== 'audio/aac') { try { call = await this.convertCallAudio(call); diff --git a/server/lib/rdio-scanner/defaults.js b/server/lib/rdio-scanner/defaults.js index 8610f6e..555569a 100644 --- a/server/lib/rdio-scanner/defaults.js +++ b/server/lib/rdio-scanner/defaults.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/server/lib/rdio-scanner/dir-watch.js b/server/lib/rdio-scanner/dir-watch.js index f27adb1..e62880d 100644 --- a/server/lib/rdio-scanner/dir-watch.js +++ b/server/lib/rdio-scanner/dir-watch.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/server/lib/rdio-scanner/downstream.js b/server/lib/rdio-scanner/downstream.js index 62bf308..e5c163e 100644 --- a/server/lib/rdio-scanner/downstream.js +++ b/server/lib/rdio-scanner/downstream.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/server/lib/rdio-scanner/index.js b/server/lib/rdio-scanner/index.js index c1dce1b..2dd8895 100644 --- a/server/lib/rdio-scanner/index.js +++ b/server/lib/rdio-scanner/index.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/server/lib/rdio-scanner/migrations/20191028144433-create-rdio-scanner-system.js b/server/lib/rdio-scanner/migrations/20191028144433-create-rdio-scanner-system.js index 82c5c29..3d87435 100644 --- a/server/lib/rdio-scanner/migrations/20191028144433-create-rdio-scanner-system.js +++ b/server/lib/rdio-scanner/migrations/20191028144433-create-rdio-scanner-system.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/server/lib/rdio-scanner/migrations/20191029092201-create-rdio-scanner-call.js b/server/lib/rdio-scanner/migrations/20191029092201-create-rdio-scanner-call.js index 756b624..2981019 100644 --- a/server/lib/rdio-scanner/migrations/20191029092201-create-rdio-scanner-call.js +++ b/server/lib/rdio-scanner/migrations/20191029092201-create-rdio-scanner-call.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/server/lib/rdio-scanner/migrations/20191126135515-optimize-rdio-scanner-calls.js b/server/lib/rdio-scanner/migrations/20191126135515-optimize-rdio-scanner-calls.js index ff75b34..96fe5f5 100644 --- a/server/lib/rdio-scanner/migrations/20191126135515-optimize-rdio-scanner-calls.js +++ b/server/lib/rdio-scanner/migrations/20191126135515-optimize-rdio-scanner-calls.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/server/lib/rdio-scanner/migrations/20191220093214-new-v3-tables.js b/server/lib/rdio-scanner/migrations/20191220093214-new-v3-tables.js index a7f5384..f8f74ae 100644 --- a/server/lib/rdio-scanner/migrations/20191220093214-new-v3-tables.js +++ b/server/lib/rdio-scanner/migrations/20191220093214-new-v3-tables.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/server/lib/rdio-scanner/migrations/20200123094105-optimize-rdio-scanner-calls.js b/server/lib/rdio-scanner/migrations/20200123094105-optimize-rdio-scanner-calls.js index 5216fb9..b4b2327 100644 --- a/server/lib/rdio-scanner/migrations/20200123094105-optimize-rdio-scanner-calls.js +++ b/server/lib/rdio-scanner/migrations/20200123094105-optimize-rdio-scanner-calls.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/server/lib/rdio-scanner/migrations/20200428132918-new-v4-tables.js b/server/lib/rdio-scanner/migrations/20200428132918-new-v4-tables.js index df47759..19515a3 100644 --- a/server/lib/rdio-scanner/migrations/20200428132918-new-v4-tables.js +++ b/server/lib/rdio-scanner/migrations/20200428132918-new-v4-tables.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/server/lib/rdio-scanner/models/call.js b/server/lib/rdio-scanner/models/call.js index 2df8d8e..38fdc69 100644 --- a/server/lib/rdio-scanner/models/call.js +++ b/server/lib/rdio-scanner/models/call.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/server/lib/rdio-scanner/models/index.js b/server/lib/rdio-scanner/models/index.js index 15c4b0b..f0ad05b 100644 --- a/server/lib/rdio-scanner/models/index.js +++ b/server/lib/rdio-scanner/models/index.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/server/lib/rdio-scanner/models/system.js b/server/lib/rdio-scanner/models/system.js index 438728e..13cb90b 100644 --- a/server/lib/rdio-scanner/models/system.js +++ b/server/lib/rdio-scanner/models/system.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/server/lib/rdio-scanner/utils.js b/server/lib/rdio-scanner/utils.js index c1af59e..953317b 100644 --- a/server/lib/rdio-scanner/utils.js +++ b/server/lib/rdio-scanner/utils.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/server/lib/rdio-scanner/websocket.js b/server/lib/rdio-scanner/websocket.js index 2f5be68..c2c5eda 100644 --- a/server/lib/rdio-scanner/websocket.js +++ b/server/lib/rdio-scanner/websocket.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/server/package-lock.json b/server/package-lock.json index 98a6d1c..fc7d699 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1,6 +1,6 @@ { "name": "rdio-scanner-server", - "version": "4.8.5", + "version": "4.9.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -67,6 +67,12 @@ } } }, + "@discoveryjs/json-ext": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", + "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", + "dev": true + }, "@eslint/eslintrc": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", @@ -339,18 +345,18 @@ } }, "@webpack-cli/info": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.1.0.tgz", - "integrity": "sha512-uNWSdaYHc+f3LdIZNwhdhkjjLDDl3jP2+XBqAq9H8DjrJUvlOKdP8TNruy1yEaDfgpAIgbSAN7pye4FEHg9tYQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.1.tgz", + "integrity": "sha512-fLnDML5HZ5AEKzHul8xLAksoKN2cibu6MgonkUj8R9V7bbeVRkd1XbGEGWrAUNYHbX1jcqCsDEpBviE5StPMzQ==", "dev": true, "requires": { "envinfo": "^7.7.3" } }, "@webpack-cli/serve": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.1.0.tgz", - "integrity": "sha512-7RfnMXCpJ/NThrhq4gYQYILB18xWyoQcBey81oIyVbmgbc6m5ZHHyFK+DyH7pLHJf0p14MxL4mTsoPAgBSTpIg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.2.1.tgz", + "integrity": "sha512-Zj1z6AyS+vqV6Hfi7ngCjFGdHV5EwZNIHo6QfFTNe9PyW+zBU1zJ9BiOW1pmUEq950RC4+Dym6flyA/61/vhyw==", "dev": true }, "@xtuc/ieee754": { @@ -518,12 +524,6 @@ "sprintf-js": "~1.0.2" } }, - "array-back": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.1.tgz", - "integrity": "sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==", - "dev": true - }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -727,9 +727,9 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "caniuse-lite": { - "version": "1.0.30001170", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001170.tgz", - "integrity": "sha512-Dd4d/+0tsK0UNLrZs3CvNukqalnVTRrxb5mcQm8rHL49t7V5ZaTygwXkrq+FB+dVDf++4ri8eJnFEJAB8332PA==", + "version": "1.0.30001171", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001171.tgz", + "integrity": "sha512-5Alrh8TTYPG9IH4UkRqEBZoEToWRLvPbSQokvzSz0lii8/FOWKG4keO1HoYfPWs8IF/NH/dyNPg1cmJGvV3Zlg==", "dev": true }, "caseless": { @@ -841,55 +841,6 @@ "delayed-stream": "~1.0.0" } }, - "command-line-usage": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", - "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", - "dev": true, - "requires": { - "array-back": "^4.0.1", - "chalk": "^2.4.2", - "table-layout": "^1.0.1", - "typical": "^5.2.0" - }, - "dependencies": { - "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" - } - }, - "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" - } - }, - "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 - } - } - }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -1222,9 +1173,9 @@ "dev": true }, "eslint": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.16.0.tgz", - "integrity": "sha512-iVWPS785RuDA4dWuhhgXTNrGxHHK3a8HLSMBgbbU59ruJDubUraXN8N5rn7kb8tG6sjg74eE0RA3YWT51eusEw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.17.0.tgz", + "integrity": "sha512-zJk08MiBgwuGoxes5sSQhOtibZ75pz0J35XTRlZOk9xMffhpA9BTbQZxoXZzOl5zMbleShbGwtw+1kGferfFwQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -1454,30 +1405,27 @@ "dev": true }, "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", "dev": true, "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" }, "dependencies": { "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", + "dev": true } } }, @@ -1546,6 +1494,12 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, "file-entry-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", @@ -1578,12 +1532,12 @@ } }, "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, @@ -1864,9 +1818,9 @@ "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" }, "helmet": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-4.2.0.tgz", - "integrity": "sha512-aoiSxXMd0ks1ojYpSCFoCRzgv4rY/uB9jKStaw8PkXwsdLYa/Gq+Nc5l0soH0cwBIsLAlujPnx4HLQs+LaXCrQ==" + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-4.3.1.tgz", + "integrity": "sha512-WsafDyKsIexB0+pUNkq3rL1rB5GVAghR68TP8ssM9DPEMzfBiluEQlVzJ/FEj6Vq2Ag3CNuxf7aYMjXrN0X49Q==" }, "http-cache-semantics": { "version": "4.1.0", @@ -1897,9 +1851,9 @@ } }, "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, "iconv-lite": { @@ -1952,6 +1906,54 @@ "requires": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^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": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + } } }, "imurmurhash": { @@ -2011,9 +2013,9 @@ } }, "is-core-module": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", - "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", "dev": true, "requires": { "has": "^1.0.3" @@ -2215,12 +2217,6 @@ "package-json": "^6.3.0" } }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2238,12 +2234,12 @@ "dev": true }, "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" } }, "lodash": { @@ -2355,16 +2351,16 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==" }, "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", "requires": { - "mime-db": "1.44.0" + "mime-db": "1.45.0" } }, "mimic-fn": { @@ -2803,21 +2799,21 @@ "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" }, "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" } }, "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" } }, "p-try": { @@ -2957,12 +2953,12 @@ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" }, "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dev": true, "requires": { - "find-up": "^4.0.0" + "find-up": "^5.0.0" } }, "please-upgrade-node": { @@ -3134,12 +3130,6 @@ "resolve": "^1.9.0" } }, - "reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true - }, "regexpp": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", @@ -3215,6 +3205,12 @@ } } }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "resolve": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", @@ -3654,27 +3650,35 @@ } }, "table": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.4.tgz", - "integrity": "sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.6.tgz", + "integrity": "sha512-OInCtPmDNieVBkVFi6C8RwU2S2H0h8mF3e3TQK4nreaUNCpooQUkI+A/KuEkm5FawfhWIfNqG+qfelVVR+V00g==", "dev": true, "requires": { - "ajv": "^6.12.4", + "ajv": "^7.0.2", "lodash": "^4.17.20", "slice-ansi": "^4.0.0", "string-width": "^4.2.0" - } - }, - "table-layout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.1.tgz", - "integrity": "sha512-dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q==", - "dev": true, - "requires": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.3.tgz", + "integrity": "sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } } }, "tapable": { @@ -3730,17 +3734,6 @@ "serialize-javascript": "^5.0.1", "source-map": "^0.6.1", "terser": "^5.3.8" - }, - "dependencies": { - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - } } }, "text-table": { @@ -3847,12 +3840,6 @@ "is-typedarray": "^1.0.0" } }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - }, "umzug": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/umzug/-/umzug-2.3.0.tgz", @@ -3971,9 +3958,9 @@ } }, "webpack": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.11.0.tgz", - "integrity": "sha512-ubWv7iP54RqAC/VjixgpnLLogCFbAfSOREcSWnnOlZEU8GICC5eKmJSu6YEnph2N2amKqY9rvxSwgyHxVqpaRw==", + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.11.1.tgz", + "integrity": "sha512-tNUIdAmYJv+nupRs/U/gqmADm6fgrf5xE+rSlSsf2PgsGO7j2WG7ccU6AWNlOJlHFl+HnmXlBmHIkiLf+XA9mQ==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", @@ -4007,80 +3994,34 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz", "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==", "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", - "dev": true, - "requires": { - "find-up": "^5.0.0" - } } } }, "webpack-cli": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.2.0.tgz", - "integrity": "sha512-EIl3k88vaF4fSxWSgtAQR+VwicfLMTZ9amQtqS4o+TDPW9HGaEpbFBbAZ4A3ZOT5SOnMxNOzROsSTPiE8tBJPA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.3.1.tgz", + "integrity": "sha512-/F4+9QNZM/qKzzL9/06Am8NXIkGV+/NqQ62Dx7DSqudxxpAgBqYn6V7+zp+0Y7JuWksKUbczRY3wMTd+7Uj6OA==", "dev": true, "requires": { - "@webpack-cli/info": "^1.1.0", - "@webpack-cli/serve": "^1.1.0", + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/info": "^1.2.1", + "@webpack-cli/serve": "^1.2.1", "colorette": "^1.2.1", - "command-line-usage": "^6.1.0", "commander": "^6.2.0", "enquirer": "^2.3.6", - "execa": "^4.1.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", "interpret": "^2.2.0", - "leven": "^3.1.0", "rechoir": "^0.7.0", "v8-compile-cache": "^2.2.0", "webpack-merge": "^4.2.2" }, "dependencies": { "commander": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", - "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true } } @@ -4173,16 +4114,6 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, - "wordwrapjs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.0.tgz", - "integrity": "sha512-Svqw723a3R34KvsMgpjFBYCgNOSdcW3mQFK4wIfhGQhtaFVOJmdYoXgi63ne3dTlWgatVcUc7t4HtQ/+bUVIzQ==", - "dev": true, - "requires": { - "reduce-flatten": "^2.0.0", - "typical": "^5.0.0" - } - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -4200,9 +4131,9 @@ } }, "ws": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz", - "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==" + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", + "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==" }, "xdg-basedir": { "version": "4.0.0", diff --git a/server/package.json b/server/package.json index 0eba9ec..1c4f05a 100644 --- a/server/package.json +++ b/server/package.json @@ -6,9 +6,9 @@ "dotenv": "^8.2.0", "express": "^4.17.1", "form-data": "^3.0.0", - "helmet": "^4.2.0", + "helmet": "^4.3.1", "mariadb": "^2.5.2", - "mime-types": "^2.1.27", + "mime-types": "^2.1.28", "multer": "^1.4.2", "mysql2": "^2.2.5", "nodemon": "^2.0.6", @@ -17,12 +17,12 @@ "sqlite3": "^5.0.0", "umzug": "^2.3.0", "uuid": "^8.3.2", - "ws": "^7.4.1" + "ws": "^7.4.2" }, "devDependencies": { - "eslint": "^7.16.0", - "webpack": "^5.11.0", - "webpack-cli": "^4.2.0", + "eslint": "^7.17.0", + "webpack": "^5.11.1", + "webpack-cli": "^4.3.1", "webpack-node-externals": "^2.5.2" }, "license": "LICENSE", @@ -39,5 +39,5 @@ "build": "webpack", "start": "nodemon" }, - "version": "4.8.5" + "version": "4.9.0" } diff --git a/server/webpack.config.js b/server/webpack.config.js index b3d23ed..d43a016 100644 --- a/server/webpack.config.js +++ b/server/webpack.config.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/update.js b/update.js index c1af15c..8d91a1b 100644 --- a/update.js +++ b/update.js @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2019-2020 Chrystian Huot + * Copyright (C) 2019-2021 Chrystian Huot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by