Compare commits

...

26 Commits

Author SHA1 Message Date
sualko 055bf2db1d
release: 2.3.0 🎉 2022-07-24 14:31:56 +02:00
sualko 460d317d56 docs: update change log 2022-07-24 14:31:35 +02:00
sualko 99208709c6 chore: update release scripts 2022-07-24 14:31:35 +02:00
sualko 19d588b300 Merge branch 'master' of github.com:sualko/cloud_bbb 2022-07-24 14:03:23 +02:00
sualko 6a41825856 Merge branch 'SpechtD-feat-clone-room' 2022-07-24 14:02:50 +02:00
Specht, David 46806ebe1a feat: clone rooms
fix #191
2022-07-24 14:02:38 +02:00
Klaus 06ea35003e
Merge pull request #217 from sualko/SpechtD-add-nc-24
Bump Nextcloud version
2022-07-24 13:42:35 +02:00
sualko 9b9491b864 feat: bump nc version 2022-07-24 13:41:30 +02:00
sualko da1dacfc5f Merge branch 'add-nc-24' of https://github.com/SpechtD/cloud_bbb into SpechtD-add-nc-24 2022-07-24 13:10:48 +02:00
Klaus 26c3a3c5e7
Merge pull request #204 from sualko/dependabot/npm_and_yarn/minimist-1.2.6
chore(deps): bump minimist from 1.2.5 to 1.2.6
2022-07-24 13:07:15 +02:00
Klaus 4e42eff678
Merge pull request #206 from sualko/dependabot/npm_and_yarn/simple-git-3.5.0
chore(deps): bump simple-git from 3.3.0 to 3.5.0
2022-07-24 13:07:07 +02:00
Klaus a9e29729ce
Merge pull request #212 from sualko/dependabot/npm_and_yarn/libxmljs-0.19.8
chore(deps): bump libxmljs from 0.19.7 to 0.19.8
2022-07-24 13:06:58 +02:00
Klaus 41d641d578
Merge pull request #213 from sualko/dependabot/npm_and_yarn/semver-regex-3.1.4
chore(deps): bump semver-regex from 3.1.3 to 3.1.4
2022-07-24 13:06:48 +02:00
Klaus 7b15a8f2e9
Merge pull request #216 from sualko/dependabot/npm_and_yarn/terser-5.14.2
chore(deps): bump terser from 5.12.1 to 5.14.2
2022-07-24 13:06:36 +02:00
dependabot[bot] da07c98f9c
chore(deps): bump terser from 5.12.1 to 5.14.2
Bumps [terser](https://github.com/terser/terser) from 5.12.1 to 5.14.2.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-20 23:04:00 +00:00
David 95422856cc
feat: remove nextcloud 20 2022-06-23 14:10:04 +02:00
David cf98557d59
fix: nextcloud to nexcloud-versions and removed array 2022-06-23 14:02:42 +02:00
David 12d87136e1
feat: add Nextcloud version to 24 2022-06-23 13:37:48 +02:00
dependabot[bot] f728cc65f9
chore(deps): bump semver-regex from 3.1.3 to 3.1.4
Bumps [semver-regex](https://github.com/sindresorhus/semver-regex) from 3.1.3 to 3.1.4.
- [Release notes](https://github.com/sindresorhus/semver-regex/releases)
- [Commits](https://github.com/sindresorhus/semver-regex/commits/v3.1.4)

---
updated-dependencies:
- dependency-name: semver-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-03 23:26:14 +00:00
dependabot[bot] ec032fc010
chore(deps): bump libxmljs from 0.19.7 to 0.19.8
Bumps [libxmljs](https://github.com/libxmljs/libxmljs) from 0.19.7 to 0.19.8.
- [Release notes](https://github.com/libxmljs/libxmljs/releases)
- [Commits](https://github.com/libxmljs/libxmljs/compare/v0.19.7...v0.19.8)

---
updated-dependencies:
- dependency-name: libxmljs
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-16 21:30:17 +00:00
dependabot[bot] 19bda86cda
chore(deps): bump simple-git from 3.3.0 to 3.5.0
Bumps [simple-git](https://github.com/steveukx/git-js/tree/HEAD/simple-git) from 3.3.0 to 3.5.0.
- [Release notes](https://github.com/steveukx/git-js/releases)
- [Changelog](https://github.com/steveukx/git-js/blob/main/simple-git/CHANGELOG.md)
- [Commits](https://github.com/steveukx/git-js/commits/simple-git@3.5.0/simple-git)

---
updated-dependencies:
- dependency-name: simple-git
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-12 22:42:36 +00:00
dependabot[bot] ef4fcc9ada
chore(deps): bump minimist from 1.2.5 to 1.2.6
Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6.
- [Release notes](https://github.com/substack/minimist/releases)
- [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6)

---
updated-dependencies:
- dependency-name: minimist
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-26 14:28:10 +00:00
sualko 9564fcd63c fix: add feedback to send file action 2022-03-21 11:23:54 +01:00
sualko d5b9c82e1d feat: add option to insert document
to running meeting. Currently only available in debug mode,
because BBB PHP API needs to be injected manually.
2022-03-17 17:08:44 +01:00
sualko 65b499d7a3 feat: change button color
depending on room state
2022-03-17 17:08:44 +01:00
sualko e63cbaaed1 feat: track room state
use cron job to check room state every 15 minutes

fix #79
2022-03-17 17:08:44 +01:00
26 changed files with 489 additions and 344 deletions

View File

@ -11,13 +11,13 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
php-versions: ['7.3', '7.4']
nextcloud-versions: ['stable20', 'stable21', 'stable22']
php-versions: ['7.4', '8']
nextcloud-versions: ['stable22', 'stable23', 'stable24']
include:
- php-versions: '7.2'
nextcloud-versions: 'stable20'
- php-versions: '8'
- php-versions: '7.3'
nextcloud-versions: 'stable22'
- php-versions: '7.3'
nextcloud-versions: 'stable23'
name: php${{ matrix.php-versions }} on ${{ matrix.nextcloud-versions }} unit tests
env:
CI: true
@ -37,14 +37,9 @@ jobs:
uses: actions/checkout@master
with:
path: nextcloud/apps/bbb
- name: Fix php-parser on stable20 incompatibility with phpunit 9.3+
if: ${{ matrix.nextcloud-versions == 'stable20' }}
working-directory: nextcloud/3rdparty
run: composer require nikic/php-parser:4.10
- name: Downgrade phpunit for php7.2
if: ${{ matrix.php-versions == '7.2' }}
- name: Update test stub
working-directory: nextcloud/apps/bbb
run: composer update phpunit/phpunit christophwurst/nextcloud -W
run: composer update christophwurst/nextcloud -W
- name: Install dependencies
working-directory: nextcloud/apps/bbb
run: composer install

View File

@ -6,7 +6,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
ocp-version: [ 'dev-stable22', 'dev-stable21', 'dev-stable20' ]
ocp-version: [ 'dev-stable24', 'dev-stable23', 'dev-stable22' ]
name: Nextcloud ${{ matrix.ocp-version }}
steps:
- name: Checkout

View File

@ -6,6 +6,21 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
## [Unreleased]
## 2.3.0 (2022-07-24)
### Added
- [#191](https://github.com/sualko/cloud_bbb/issues/191) clone rooms
- bump Nextcloud version (min 22, max 24)
- disable file transfer if room is running
- [#79](https://github.com/sualko/cloud_bbb/issues/79) track room state
- [#5](https://github.com/sualko/cloud_bbb/issues/5) use modal to send file
- [#194](https://github.com/sualko/cloud_bbb/issues/194) add support for analytics callback url
- [#192](https://github.com/sualko/cloud_bbb/issues/192) add access mode to send all users to lobby
### Fixed
- add feedback to send file action
- image loader for webpack 5
- change button color
## 2.2.0 (2022-01-17)
### Added
- add optional avatar cache

View File

@ -22,7 +22,7 @@ Developer wanted! If you have time it would be awesome if you could help to enha
*This app integrates BigBlueButton and is not endorsed or certified by BigBlueButton Inc. BigBlueButton and the BigBlueButton Logo are trademarks of BigBlueButton Inc.*
]]></description>
<version>2.2.0</version>
<version>2.3.0</version>
<licence>agpl</licence>
<author mail="klaus@jsxc.org">Klaus Herberth</author>
<namespace>BigBlueButton</namespace>
@ -43,7 +43,7 @@ Developer wanted! If you have time it would be awesome if you could help to enha
<lib>curl</lib>
<lib>mbstring</lib>
<lib>SimpleXML</lib>
<nextcloud min-version="20" max-version="23"/>
<nextcloud min-version="22" max-version="24"/>
</dependencies>
<commands>
<command>OCA\BigBlueButton\Command\ClearAvatarCache</command>

View File

@ -8,6 +8,8 @@ return [
],
'routes' => [
['name' => 'page#index', 'url' => '/', 'verb' => 'GET'],
['name' => 'server#isRunning', 'url' => '/server/{roomUid}/isRunning', 'verb' => 'GET'],
['name' => 'server#insertDocument', 'url' => '/server/{roomUid}/insertDocument', 'verb' => 'POST'],
['name' => 'server#records', 'url' => '/server/{roomUid}/records', 'verb' => 'GET'],
['name' => 'server#check', 'url' => '/server/check', 'verb' => 'POST'],
['name' => 'server#version', 'url' => '/server/version', 'verb' => 'GET'],

View File

@ -17,7 +17,7 @@
"friendsofphp/php-cs-fixer": "^2.16",
"nextcloud/coding-standard": "^0.5.0",
"phpstan/phpstan": "^0.12.29",
"christophwurst/nextcloud": "^20.0 || ^21.0 || ^22.0",
"christophwurst/nextcloud": "^22.0 || ^23.0 || ^24.0",
"vimeo/psalm": "^4.5"
},
"config": {

View File

@ -0,0 +1,54 @@
<?php
namespace OCA\BigBlueButton\BackgroundJob;
use OCA\BigBlueButton\BigBlueButton\API;
use OCA\BigBlueButton\Service\RoomNotFound;
use OCA\BigBlueButton\Service\RoomService;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\BackgroundJob\IJobList;
use OCP\BackgroundJob\TimedJob;
class IsRunningJob extends TimedJob {
/** @var IJobList */
private $jobList;
/** @var RoomService */
private $service;
/** @var API */
private $api;
public function __construct(ITimeFactory $time, IJobList $jobList, RoomService $service, API $api) {
parent::__construct($time);
$this->jobList = $jobList;
$this->service = $service;
$this->api = $api;
$this->setInterval(15 * 60);
}
protected function run($argument) {
try {
$room = $this->service->find($argument['id']);
} catch (RoomNotFound $e) {
$this->jobList->remove($this, $argument);
return;
}
if (!$room->running) {
$this->jobList->remove($this, $argument);
return;
}
$isRunning = $this->api->isRunning($room);
if (!$isRunning) {
$this->service->updateRunning($room->id, $isRunning);
$this->jobList->remove($this, $argument);
}
}
}

View File

@ -7,6 +7,7 @@ use BigBlueButton\Core\Record;
use BigBlueButton\Parameters\CreateMeetingParameters;
use BigBlueButton\Parameters\DeleteRecordingsParameters;
use BigBlueButton\Parameters\GetRecordingsParameters;
use BigBlueButton\Parameters\InsertDocumentParameters;
use BigBlueButton\Parameters\IsMeetingRunningParameters;
use BigBlueButton\Parameters\JoinMeetingParameters;
use OCA\BigBlueButton\AppInfo\Application;
@ -320,4 +321,14 @@ class API {
return $response->success() && $response->isRunning();
}
public function insertDocument(Room $room, string $url, string $filename): bool {
$insertDocumentParams = new InsertDocumentParameters($room->getUid());
$insertDocumentParams->addPresentation($url, $filename, null, null);
$response = $this->getServer()->insertDocument($insertDocumentParams);
return $response->success();
}
}

View File

@ -63,6 +63,8 @@ class HookController extends Controller {
$recordingmarks = \boolval($recordingmarks);
$room = $this->getRoom();
$this->service->updateRunning($room->getId(), false);
$this->avatarRepository->clearRoom($room->uid);
$this->eventDispatcher->dispatch(MeetingEndedEvent::class, new MeetingEndedEvent($room, $recordingmarks));

View File

@ -2,6 +2,7 @@
namespace OCA\BigBlueButton\Controller;
use OCA\BigBlueButton\BackgroundJob\IsRunningJob;
use OCA\BigBlueButton\BigBlueButton\API;
use OCA\BigBlueButton\BigBlueButton\Presentation;
use OCA\BigBlueButton\Db\Room;
@ -12,6 +13,7 @@ use OCA\BigBlueButton\Service\RoomService;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\RedirectResponse;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\BackgroundJob\IJobList;
use OCP\IRequest;
use OCP\IURLGenerator;
use OCP\IUserSession;
@ -38,6 +40,9 @@ class JoinController extends Controller {
/** @var Permission */
private $permission;
/** @var IJobList */
private $jobList;
public function __construct(
string $appName,
IRequest $request,
@ -45,7 +50,8 @@ class JoinController extends Controller {
IURLGenerator $urlGenerator,
IUserSession $userSession,
API $api,
Permission $permission
Permission $permission,
IJobList $jobList
) {
parent::__construct($appName, $request);
@ -54,6 +60,7 @@ class JoinController extends Controller {
$this->userSession = $userSession;
$this->api = $api;
$this->permission = $permission;
$this->jobList = $jobList;
}
public function setToken(string $token): void {
@ -129,6 +136,8 @@ class JoinController extends Controller {
$creationDate = $this->api->createMeeting($room, $presentation);
$joinUrl = $this->api->createJoinUrl($room, $creationDate, $displayname, $isModerator, $userId);
$this->markAsRunning($room);
\OCP\Util::addHeader('meta', ['http-equiv' => 'refresh', 'content' => '3;url='.$joinUrl]);
return new TemplateResponse($this->appName, 'forward', [
@ -153,4 +162,18 @@ class JoinController extends Controller {
),
]);
}
private function markAsRunning(Room $room) {
if (!$room->running) {
$this->service->updateRunning($room->getId(), true);
}
if (!$this->jobList->has(IsRunningJob::class, [
'id' => $room->id,
])) {
$this->jobList->add(IsRunningJob::class, [
'id' => $room->id,
]);
}
}
}

View File

@ -40,6 +40,44 @@ class ServerController extends Controller {
$this->userId = $UserId;
}
/**
* @NoAdminRequired
*/
public function isRunning(string $roomUid): DataResponse {
$room = $this->service->findByUid($roomUid);
if ($room === null) {
return new DataResponse([], Http::STATUS_NOT_FOUND);
}
if (!$this->permission->isUser($room, $this->userId)) {
return new DataResponse([], Http::STATUS_FORBIDDEN);
}
$isRunning = $this->server->isRunning($room);
return new DataResponse($isRunning);
}
/**
* @NoAdminRequired
*/
public function insertDocument(string $roomUid, string $url, string $filename): DataResponse {
$room = $this->service->findByUid($roomUid);
if ($room === null) {
return new DataResponse([], Http::STATUS_NOT_FOUND);
}
if (!$this->permission->isModerator($room, $this->userId)) {
return new DataResponse([], Http::STATUS_FORBIDDEN);
}
$success = $this->server->insertDocument($room, $url, $filename);
return new DataResponse($success);
}
/**
* @NoAdminRequired
*/

View File

@ -25,6 +25,7 @@ use OCP\AppFramework\Db\Entity;
* @method bool getMediaCheck()
* @method bool getCleanLayout()
* @method bool getJoinMuted()
* @method bool getRunning()
* @method void setUid(string $uid)
* @method void setName(string $name)
* @method void setAttendeePassword(string $pw)
@ -42,6 +43,7 @@ use OCP\AppFramework\Db\Entity;
* @method void setMediaCheck(bool $mediaCheck)
* @method void setCleanLayout(bool $cleanLayout)
* @method void setJoinMuted(bool $joinMuted)
* @method void setRunning(bool $running)
*/
class Room extends Entity implements JsonSerializable {
public const ACCESS_PUBLIC = 'public';
@ -71,6 +73,7 @@ class Room extends Entity implements JsonSerializable {
public $mediaCheck;
public $cleanLayout;
public $joinMuted;
public $running;
public function __construct() {
$this->addType('maxParticipants', 'integer');
@ -82,6 +85,7 @@ class Room extends Entity implements JsonSerializable {
$this->addType('mediaCheck', 'boolean');
$this->addType('cleanLayout', 'boolean');
$this->addType('joinMuted', 'boolean');
$this->addType('running', 'boolean');
}
public function jsonSerialize(): array {
@ -103,6 +107,7 @@ class Room extends Entity implements JsonSerializable {
'mediaCheck' => boolval($this->mediaCheck),
'cleanLayout' => boolval($this->cleanLayout),
'joinMuted' => boolval($this->joinMuted),
'running' => boolval($this->running),
];
}
}

View File

@ -0,0 +1,42 @@
<?php
declare(strict_types=1);
namespace OCA\BigBlueButton\Migration;
use Closure;
use OCP\DB\ISchemaWrapper;
use OCP\Migration\IOutput;
use OCP\Migration\SimpleMigrationStep;
/**
* Auto-generated migration step: Please modify to your needs!
*/
class Version000000Date20220316151400 extends SimpleMigrationStep {
/**
* @param IOutput $output
* @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
* @param array $options
* @return null|ISchemaWrapper
*/
public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper {
$schema = $schemaClosure();
if ($schema->hasTable('bbb_rooms')) {
$table = $schema->getTable('bbb_rooms');
if (!$table->hasColumn('running')) {
$table->addColumn('running', 'boolean', [
'notnull' => false,
'default' => false
]);
}
return $schema;
}
return null;
}
}

View File

@ -163,6 +163,21 @@ class RoomService {
}
}
/**
* @return \OCP\AppFramework\Db\Entity|null
*/
public function updateRunning(int $id, bool $running) {
try {
$room = $this->mapper->find($id);
$room->setRunning($running);
return $this->mapper->update($room);
} catch (Exception $e) {
$this->handleException($e);
}
}
/**
* @return Room|null
*/

View File

@ -1,7 +1,7 @@
{
"name": "@sualko/cloud_bbb",
"description": "Nextcloud Integration for BigBlueButton",
"version": "2.2.0",
"version": "2.3.0",
"author": "Klaus Herberth <klaus@jsxc.org>",
"bugs": {
"url": "https://github.com/sualko/cloud_bbb/issues"
@ -38,16 +38,17 @@
"@commitlint/config-conventional": "^16.2.1",
"@commitlint/travis-cli": "^16.2.3",
"@nextcloud/axios": "^1.3.2",
"@nextcloud/dialogs": "^3.1.2",
"@nextcloud/router": "^2.0.0",
"@octokit/rest": "^18.0.4",
"archiver": "^5.0.0",
"colors": "^1.4.0",
"dotenv": "^16.0.0",
"execa": "^6.1.0",
"libxmljs": "^0.19.7",
"libxmljs": "^0.19.8",
"qrcode.react": "^2.0.0",
"react-copy-to-clipboard": "^5.0.2",
"simple-git": "^3.3.0"
"simple-git": "^3.5.0"
},
"husky": {
"hooks": {

View File

@ -5,8 +5,7 @@ const path = require('path');
const libxml = require('libxmljs');
const https = require('https');
const archiver = require('archiver');
const execa = require('execa');
const simpleGit = require('simple-git/promise');
const simpleGit = require('simple-git');
const inquirer = require('inquirer');
const { exec } = require('child_process');
const { generateChangelog, hasChangeLogEntry } = require('./imports/changelog');
@ -69,6 +68,8 @@ async function createRelease(appId) {
console.log('✔ repo is clean'.green);
}
const execa = (await import('execa')).execaCommand;
await execa('yarn', ['composer:install:dev']);
console.log('✔ composer dev dependencies installed'.green);

View File

@ -3,13 +3,14 @@ const colors = require('colors');
const fs = require('fs');
const path = require('path');
const https = require('https');
const execa = require('execa');
const simpleGit = require('simple-git/promise');
const simpleGit = require('simple-git');
const inquirer = require('inquirer');
const dotenv = require('dotenv');
const { Octokit } = require('@octokit/rest');
const { getChangelogEntry, hasChangeLogEntry } = require('./imports/changelog');
const getExeca = async () => (await import('execa')).execaCommand;
// eslint-disable-next-line @typescript-eslint/no-var-requires
const packageInfo = require('../package.json');
@ -63,19 +64,11 @@ async function stageAllFiles() {
return;
}
const gitProcess = execa('git', ['add', '-u']);
gitProcess.stdout.pipe(process.stdout);
return gitProcess;
await git.raw('add', '-u');
}
function showStagedDiff() {
const gitProcess = execa('git', ['diff', '--staged']);
gitProcess.stdout.pipe(process.stdout);
return gitProcess;
async function showStagedDiff() {
console.log(await git.raw('diff', '--staged'));
}
async function keypress() {
@ -141,6 +134,7 @@ async function createGithubRelease(changeLog) {
name: `BigBlueButton Integration ${tagName}`,
body: changeLog.replace(/^## [^\n]+\n/, ''),
prerelease: !/^\d+\.\d+\.\d+$/.test(packageInfo.version),
draft: true,
};
if (isDryRun) {
@ -251,6 +245,8 @@ async function uploadToNextcloudStore(archiveUrl) {
}
async function run() {
const execa = await getExeca();
await pull();
console.log('✔ pulled latest changes'.green);

View File

@ -11,6 +11,7 @@ use OCA\BigBlueButton\Service\RoomService;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\RedirectResponse;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\BackgroundJob\IJobList;
use OCP\IRequest;
use OCP\IURLGenerator;
use OCP\IUser;
@ -26,6 +27,7 @@ class JoinControllerTest extends TestCase {
private $api;
private $permission;
private $room;
private $jobList;
public function setUp(): void {
parent::setUp();
@ -36,6 +38,7 @@ class JoinControllerTest extends TestCase {
$this->urlGenerator = $this->createMock(IURLGenerator::class);
$this->api = $this->createMock(API::class);
$this->permission = $this->createMock(Permission::class);
$this->jobList = $this->createMock(IJobList::class);
$this->controller = new JoinController(
'bbb',
@ -44,10 +47,12 @@ class JoinControllerTest extends TestCase {
$this->urlGenerator,
$this->userSession,
$this->api,
$this->permission
$this->permission,
$this->jobList
);
$this->room = new Room();
$this->room->id = 1;
$this->room->uid = 'uid_foo';
$this->room->userId = 'user_foo';
$this->room->access = Room::ACCESS_PUBLIC;

View File

@ -44,6 +44,7 @@ export interface Room {
mediaCheck: boolean,
cleanLayout: boolean,
joinMuted: boolean,
running: boolean,
}
export interface RoomShare {
@ -132,6 +133,18 @@ class Api {
return response.data;
}
public async isRunning(uid: string): Promise<boolean> {
const response = await axios.get(this.getUrl(`server/${uid}/isRunning`));
return response.data;
}
public async insertDocument(uid: string, url: string, filename: string): Promise<boolean> {
const response = await axios.post(this.getUrl(`server/${uid}/insertDocument`), { url, filename });
return response.data;
}
public getRoomUrl(room: Room, forModerator = false) {
const shortener = document.getElementById('bbb-root')?.getAttribute('data-shortener') || '';
const token = (forModerator && room.moderatorToken) ? `${room.uid}/${room.moderatorToken}` : room.uid;
@ -257,9 +270,9 @@ class Api {
groups: [],
circles: [],
exact: {
users: response.data.ocs.data.exact.users,
groups: response.data.ocs.data.exact.groups,
circles: response.data.ocs.data.exact.circles || [],
users: response.data.ocs.data.exact.users,
groups: response.data.ocs.data.exact.groups,
circles: response.data.ocs.data.exact.circles || [],
},
};
}

View File

@ -102,6 +102,16 @@ pre {
margin-bottom: 1em;
}
.button.success {
background-color: var(--color-success);
border-color: var(--color-success-hover);
color: var(--color-primary-text);
&:hover {
background-color: var(--color-success-hover);
}
}
.icon {
display: inline-block;
opacity: 0;
@ -184,6 +194,10 @@ pre {
width: 42px;
padding: 0;
}
&.name {
width: 100%;
}
}
tfoot td {

View File

@ -43,7 +43,7 @@ const App: React.FC<Props> = () => {
const [orderBy, setOrderBy] = useState<SortKey>('name');
const [sortOrder, setSortOrder] = useState(SortOrder.ASC);
const rows = rooms.sort(sortRooms(orderBy, sortOrder)).map(room => <RoomRow room={room} restriction={restriction} key={room.id} updateRoom={updateRoom} deleteRoom={deleteRoom} />);
const rows = rooms.sort(sortRooms(orderBy, sortOrder)).map(room => <RoomRow room={room} restriction={restriction} key={room.id} updateRoom={updateRoom} deleteRoom={deleteRoom} cloneRoom={cloneRoom}/>);
useEffect(() => {
Promise.all([
@ -105,13 +105,18 @@ const App: React.FC<Props> = () => {
function updateRoom(room: Room) {
return api.updateRoom(room).then(updatedRoom => {
setRooms(rooms.map(room => {
if (room.id === updatedRoom.id) {
return updatedRoom;
}
return room;
}));
if (!rooms.find(room => room.id === updatedRoom.id)) {
setRooms(rooms.concat([updatedRoom]));
} else {
setRooms(rooms.map(room => {
if (room.id === updatedRoom.id) {
return updatedRoom;
}
return room;
}));
}
});
}
@ -121,6 +126,25 @@ const App: React.FC<Props> = () => {
});
}
function cloneRoom(room: Room) {
if (room.moderatorToken !== null) {
room.moderatorToken = 'true';
}
return api.createRoom(room.name, room.access, room.maxParticipants).then(newRoom => {
api.getRoomShares(room.id).then(shares => shares.forEach(share => {
api.createRoomShare(newRoom.id, share.shareType, share.shareWith, share.permission);
}));
updateRoom({
...room,
uid: newRoom.uid,
id: newRoom.id,
});
});
}
const maxRooms = restriction?.maxRooms || 0;
const quota = maxRooms < 0 ? t('bbb', 'unlimited') : rooms.filter(room => room.userId === OC.currentUser).length + ' / ' + maxRooms;
@ -151,6 +175,7 @@ const App: React.FC<Props> = () => {
</th>
<th />
<th />
<th />
</tr>
</thead>
<tbody>

View File

@ -11,6 +11,7 @@ type Props = {
restriction?: Restriction;
updateRoom: (room: Room) => Promise<void>;
deleteRoom: (id: number) => void;
cloneRoom: (room: Room) => void;
}
type RecordingsNumberProps = {
@ -175,6 +176,10 @@ const RoomRow: React.FC<Props> = (props) => {
return <EditableValue field={field} value={room[field]} setValue={updateRoom} type={type} options={options} />;
}
function cloneRow() {
props.cloneRoom({...props.room});
}
const avatarUrl = OC.generateUrl('/avatar/' + encodeURIComponent(room.userId) + '/' + 24, {
user: room.userId,
size: 24,
@ -187,9 +192,9 @@ const RoomRow: React.FC<Props> = (props) => {
return (
<>
<tr className={showRecordings ? 'selected-row' : ''}>
<td className="start icon-col">
<a href={api.getRoomUrl(room)} className="action-item" target="_blank" rel="noopener noreferrer" title={t('bbb', 'Open room')}>
<span className="icon icon-play icon-visible"></span>
<td className="start">
<a href={api.getRoomUrl(room)} className={`button ${room.running ? 'success' : 'primary'}`} target="_blank" rel="noopener noreferrer" title={t('bbb', 'Open room')}>
{room.running ? t('bbb', 'Join') : t('bbb', 'Start')}
</a>
</td>
<td className="share icon-col">
@ -225,6 +230,11 @@ const RoomRow: React.FC<Props> = (props) => {
<td className="edit icon-col">
<EditRoom room={props.room} restriction={props.restriction} updateProperty={updateRoom} />
</td>
<td className="clone icon-col">
<button className="action-item" onClick={cloneRow} title={t('bbb', 'Clone Room')}>
<span className="icon icon-template-add icon-visible"></span>
</button>
</td>
<td className="remove icon-col">
<button className="action-item" onClick={deleteRow as any} title={t('bbb', 'Delete')}>
<span className="icon icon-delete icon-visible"></span>

2
ts/Nextcloud.d.ts vendored
View File

@ -73,6 +73,8 @@ declare namespace OC {
const PERMISSION_SHARE = 16;
const PERMISSION_ALL = 31;
const debug: boolean;
const currentUser: string;
function getCurrentUser(): {uid: string; displayName: string}

11
ts/filelist.scss Normal file
View File

@ -0,0 +1,11 @@
#bbb-file-action {
button.success {
background-color: var(--color-success);
border-color: var(--color-success-hover);
color: var(--color-primary-text);
&:hover {
background-color: var(--color-success-hover);
}
}
}

View File

@ -1,6 +1,9 @@
import axios from '@nextcloud/axios';
import { generateOcsUrl, generateUrl } from '@nextcloud/router';
import { showSuccess, showWarning, showError } from '@nextcloud/dialogs';
import '@nextcloud/dialogs/styles/toast';
import { api } from './Common/Api';
import './filelist.scss';
type OC_Dialogs_Message = (content: string, title: string, dialogType: 'notice' | 'alert' | 'warn' | 'none', buttons?: number, callback?: () => void, modal?: boolean, allowHtml?: boolean) => Promise<void>;
type ExtendedDialogs = typeof OC.dialogs & { message: OC_Dialogs_Message };
@ -38,8 +41,7 @@ async function createDirectShare(fileId: number): Promise<string> {
return createResponse.data?.ocs?.data?.url;
}
async function share(fileId: number, filename: string, roomUid: string) {
const shareUrl = await createDirectShare(fileId);
async function createRoomWithFile(shareUrl: string, filename: string, roomUid: string) {
const joinUrl = generateUrl('/apps/bbb/b/{uid}?u={url}&filename={filename}', {
uid: roomUid,
url: shareUrl,
@ -49,6 +51,31 @@ async function share(fileId: number, filename: string, roomUid: string) {
window.open(joinUrl, '_blank', 'noopener,noreferrer');
}
function insertDocumentToRoom(shareUrl: string, filename: string, roomUid: string) {
return api.insertDocument(roomUid, shareUrl, filename);
}
async function sendFile(fileId: number, filename: string, roomUid: string) {
const shareUrl = await createDirectShare(fileId);
const isRunning = await api.isRunning(roomUid);
if (isRunning) {
try {
const success = await insertDocumentToRoom(shareUrl, filename, roomUid);
if (success) {
showSuccess(t('bbb', 'The file "{filename}" was uploaded to your room.', { filename }));
} else {
showWarning(t('bbb', 'The file "{filename}" could not be uploaded to your room.', { filename }));
}
} catch {
showError(t('bbb', 'The file "{filename}" could not be uploaded to your room. Maybe your BigBlueButton server does not support this action.', { filename }));
}
} else {
createRoomWithFile(shareUrl, filename, roomUid);
}
}
async function openDialog(fileId: number, filename: string) {
const initContent = '<div id="bbb-file-action"><span className="icon icon-loading-small icon-visible"></span></div>';
const title = t('bbb', 'Send file to BBB');
@ -65,15 +92,21 @@ async function openDialog(fileId: number, filename: string) {
const row = $('<tr>');
const button = $('<button>');
button.text(t('bbb', 'Start'));
button.addClass('primary');
if (!OC.debug) {
button.prop('disabled', room.running);
}
button.text(room.running ? t('bbb', 'Send to') : t('bbb', 'Start with'));
button.addClass(room.running ? 'success' : 'primary');
button.attr('type', 'button');
button.on('click', (ev) => {
ev.preventDefault();
share(fileId, filename, room.uid);
table.find('button').prop('disabled', true);
$(ev.target).addClass('icon-loading-small');
container.parents('.oc-dialog').find('.oc-dialog-close').trigger('click');
sendFile(fileId, filename, room.uid).then(() => {
container.parents('.oc-dialog').find('.oc-dialog-close').trigger('click');
});
});
row.append($('<td>').append(button));

410
yarn.lock
View File

@ -1273,15 +1273,37 @@
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
"@jridgewell/gen-mapping@^0.3.0":
version "0.3.2"
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9"
integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==
dependencies:
"@jridgewell/set-array" "^1.0.1"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/trace-mapping" "^0.3.9"
"@jridgewell/resolve-uri@^3.0.3":
version "3.0.5"
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c"
integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==
version "3.1.0"
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
"@jridgewell/set-array@^1.0.1":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
"@jridgewell/source-map@^0.3.2":
version "0.3.2"
resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb"
integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==
dependencies:
"@jridgewell/gen-mapping" "^0.3.0"
"@jridgewell/trace-mapping" "^0.3.9"
"@jridgewell/sourcemap-codec@^1.4.10":
version "1.4.11"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec"
integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==
version "1.4.14"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
"@jridgewell/trace-mapping@^0.3.0", "@jridgewell/trace-mapping@^0.3.4":
version "0.3.4"
@ -1291,6 +1313,14 @@
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/trace-mapping@^0.3.9":
version "0.3.14"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed"
integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==
dependencies:
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@kwsites/file-exists@^1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz#ad1efcac13e1987d8dbaf235ef3be5b0d96faa99"
@ -1303,6 +1333,21 @@
resolved "https://registry.yarnpkg.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919"
integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==
"@mapbox/node-pre-gyp@^1.0.9":
version "1.0.9"
resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz#09a8781a3a036151cdebbe8719d6f8b25d4058bc"
integrity sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==
dependencies:
detect-libc "^2.0.0"
https-proxy-agent "^5.0.0"
make-dir "^3.1.0"
node-fetch "^2.6.7"
nopt "^5.0.0"
npmlog "^5.0.1"
rimraf "^3.0.2"
semver "^7.3.5"
tar "^6.1.11"
"@nextcloud/auth@^1.2.2":
version "1.3.0"
resolved "https://registry.yarnpkg.com/@nextcloud/auth/-/auth-1.3.0.tgz#1ad94dcb001871bf725114675690ae9f4871e5d1"
@ -1330,6 +1375,16 @@
resolved "https://registry.yarnpkg.com/@nextcloud/browserslist-config/-/browserslist-config-2.2.0.tgz#85c2b9363b4aa98ea534576b9f9094cc0afa8f78"
integrity sha512-kC42RQW5rZjZZsRaEjVlIQpp6aW/yxm+zZdETnrRQnUzcPwBgF4wO4makfGT63Ckd+LkgUW+geesPiPRqxFVew==
"@nextcloud/dialogs@^3.1.2":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@nextcloud/dialogs/-/dialogs-3.1.2.tgz#84c6b9dd13f757863a2d95215e00a161d6bb654a"
integrity sha512-hVgpr/CF0F+cE7tRZHJDVpB1S05K/pDcUMrfDpoxMKhux5SXlpwLXUaWM7iAbHEKYm6ArWdpUyhxBTTAo9yrvg==
dependencies:
"@nextcloud/l10n" "^1.3.0"
"@nextcloud/typings" "^1.0.0"
core-js "^3.6.4"
toastify-js "^1.10.0"
"@nextcloud/eslint-plugin@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@nextcloud/eslint-plugin/-/eslint-plugin-2.0.0.tgz#55336973752af669954b0cf0c8887503e8494ba6"
@ -1376,6 +1431,13 @@
dependencies:
"@types/jquery" "2.0.54"
"@nextcloud/typings@^1.0.0":
version "1.3.0"
resolved "https://registry.yarnpkg.com/@nextcloud/typings/-/typings-1.3.0.tgz#8898d3a31c10a31b409c6815560285f047f699cc"
integrity sha512-lxAWXobayeaAnydCWKMljJXDLXECimUf3HbTjnrjL7pslPyGyH70LHj4NZ5BmGbKeU2yjF2FTXIGji10lOryiQ==
dependencies:
"@types/jquery" "2.0.57"
"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3":
version "2.1.8-no-fsevents.3"
resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b"
@ -1606,6 +1668,11 @@
resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-2.0.54.tgz#d7999245f77c3fab5d84e7d32b8a6c20bfd1f072"
integrity sha512-D/PomKwNkDfSKD13DEVQT/pq2TUjN54c6uB341fEZanIzkjfGe7UaFuuaLZbpEiS5j7Wk2MUHAZqZIoECw29lg==
"@types/jquery@2.0.57":
version "2.0.57"
resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-2.0.57.tgz#df4241708df642021c5c715de64207371240c6e5"
integrity sha512-QUJ5wVL8iTZofgZjCfVnHxcMqqPPLfVfEKe8rfksMdmSmqEenpcpEBQO45VSSfng/tunwoLF+3I8rzEzVhYNLQ==
"@types/jquery@^3.3.35":
version "3.5.14"
resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.14.tgz#ac8e11ee591e94d4d58da602cb3a5a8320dee577"
@ -1962,9 +2029,9 @@ acorn-walk@^8.1.1:
integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.0:
version "8.7.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf"
integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==
version "8.7.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30"
integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==
agent-base@6, agent-base@^6.0.2:
version "6.0.2"
@ -2022,11 +2089,6 @@ ansi-escapes@^4.2.1:
dependencies:
type-fest "^0.21.3"
ansi-regex@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
ansi-regex@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
@ -2054,11 +2116,6 @@ anymatch@~3.1.2:
normalize-path "^3.0.0"
picomatch "^2.0.4"
aproba@^1.0.3:
version "1.2.0"
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
"aproba@^1.0.3 || ^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"
@ -2109,14 +2166,6 @@ are-we-there-yet@^3.0.0:
delegates "^1.0.0"
readable-stream "^3.6.0"
are-we-there-yet@~1.1.2:
version "1.1.7"
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146"
integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==
dependencies:
delegates "^1.0.0"
readable-stream "^2.0.6"
arg@^4.1.0:
version "4.1.3"
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
@ -2480,11 +2529,6 @@ chokidar@^3.4.0:
optionalDependencies:
fsevents "~2.3.2"
chownr@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
chownr@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
@ -2552,11 +2596,6 @@ clone@^1.0.2:
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
code-point-at@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
color-convert@^1.9.0:
version "1.9.3"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
@ -2656,7 +2695,7 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0:
console-control-strings@^1.0.0, console-control-strings@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
@ -2839,7 +2878,7 @@ dashdash@^1.12.0:
dependencies:
assert-plus "^1.0.0"
debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3:
debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3:
version "4.3.3"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
@ -2853,20 +2892,13 @@ debug@^2.6.9:
dependencies:
ms "2.0.0"
debug@^3.2.6, debug@^3.2.7:
debug@^3.2.7:
version "3.2.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
dependencies:
ms "^2.1.1"
debug@^4.3.1:
version "4.3.2"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
dependencies:
ms "2.1.2"
decamelize-keys@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
@ -2880,11 +2912,6 @@ decamelize@^1.1.0, decamelize@^1.2.0:
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
deep-extend@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
deep-is@^0.1.3:
version "0.1.4"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
@ -2924,10 +2951,10 @@ deprecation@^2.0.0, deprecation@^2.3.1:
resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919"
integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==
detect-libc@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
detect-libc@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd"
integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==
diff@^4.0.1:
version "4.0.2"
@ -3596,13 +3623,6 @@ fs-extra@^10.0.0:
jsonfile "^6.0.1"
universalify "^2.0.0"
fs-minipass@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
dependencies:
minipass "^2.6.0"
fs-minipass@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
@ -3664,20 +3684,6 @@ gauge@^4.0.0:
strip-ansi "^6.0.1"
wide-align "^1.1.5"
gauge@~2.7.3:
version "2.7.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
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"
gaze@^1.0.0:
version "1.1.3"
resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a"
@ -3912,7 +3918,7 @@ has-tostringtag@^1.0.0:
dependencies:
has-symbols "^1.0.2"
has-unicode@^2.0.0, has-unicode@^2.0.1:
has-unicode@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
@ -4012,7 +4018,7 @@ husky@^4.2.5:
slash "^3.0.0"
which-pm-runs "^1.0.0"
iconv-lite@^0.4.24, iconv-lite@^0.4.4:
iconv-lite@^0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@ -4036,13 +4042,6 @@ ieee754@^1.1.13:
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
ignore-walk@^3.0.1:
version "3.0.4"
resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335"
integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==
dependencies:
minimatch "^3.0.4"
ignore@^5.1.1, ignore@^5.1.8:
version "5.1.9"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb"
@ -4102,7 +4101,7 @@ inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
ini@^1.3.4, ini@^1.3.5:
version "1.3.8"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
@ -4207,13 +4206,6 @@ is-extglob@^2.1.1:
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
is-fullwidth-code-point@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
dependencies:
number-is-nan "^1.0.0"
is-fullwidth-code-point@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
@ -4513,14 +4505,14 @@ levn@^0.4.1:
prelude-ls "^1.2.1"
type-check "~0.4.0"
libxmljs@^0.19.7:
version "0.19.7"
resolved "https://registry.yarnpkg.com/libxmljs/-/libxmljs-0.19.7.tgz#96c2151b0b73f33dd29917edec82902587004e5a"
integrity sha512-lFJyG9T1mVwTzNTw6ZkvIt0O+NsIR+FTE+RcC2QDFGU8YMnQrnyEOGrj6HWSe1AdwQK7s37BOp4NL+pcAqfK2g==
libxmljs@^0.19.8:
version "0.19.8"
resolved "https://registry.yarnpkg.com/libxmljs/-/libxmljs-0.19.8.tgz#a009279e7c9f2bde154c03f1fea0e1fb0834fdbf"
integrity sha512-B0xPH/Ucco52fY3YEWi3zive8hFscuc71mcWCHTAR88iVgYE18e62T55b5fL6AjkT0sOhxP7rH9cZL80ZK8e7Q==
dependencies:
"@mapbox/node-pre-gyp" "^1.0.9"
bindings "~1.3.0"
nan "~2.14.0"
node-pre-gyp "~0.11.0"
lines-and-columns@^1.1.6:
version "1.2.4"
@ -4849,9 +4841,9 @@ minimist-options@4.1.0:
kind-of "^6.0.3"
minimist@^1.2.0, minimist@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
version "1.2.6"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
minipass-collect@^1.0.2:
version "1.0.2"
@ -4892,14 +4884,6 @@ minipass-sized@^1.0.3:
dependencies:
minipass "^3.0.0"
minipass@^2.6.0, minipass@^2.9.0:
version "2.9.0"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
dependencies:
safe-buffer "^5.1.2"
yallist "^3.0.0"
minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3:
version "3.1.6"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee"
@ -4907,13 +4891,6 @@ minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3:
dependencies:
yallist "^4.0.0"
minizlib@^1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
dependencies:
minipass "^2.9.0"
minizlib@^2.0.0, minizlib@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
@ -4922,13 +4899,6 @@ minizlib@^2.0.0, minizlib@^2.1.1:
minipass "^3.0.0"
yallist "^4.0.0"
mkdirp@^0.5.1, mkdirp@^0.5.5:
version "0.5.5"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
dependencies:
minimist "^1.2.5"
mkdirp@^1.0.3, mkdirp@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
@ -4974,15 +4944,6 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
needle@^2.2.1:
version "2.9.1"
resolved "https://registry.yarnpkg.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684"
integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==
dependencies:
debug "^3.2.6"
iconv-lite "^0.4.4"
sax "^1.2.4"
negotiator@^0.6.2:
version "0.6.3"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
@ -4998,7 +4959,7 @@ nice-try@^1.0.4:
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
node-fetch@^2.6.1:
node-fetch@^2.6.1, node-fetch@^2.6.7:
version "2.6.7"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
@ -5028,22 +4989,6 @@ node-gyp@^8.4.1:
tar "^6.1.2"
which "^2.0.2"
node-pre-gyp@~0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054"
integrity sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==
dependencies:
detect-libc "^1.0.2"
mkdirp "^0.5.1"
needle "^2.2.1"
nopt "^4.0.1"
npm-packlist "^1.1.6"
npmlog "^4.0.2"
rc "^1.2.7"
rimraf "^2.6.1"
semver "^5.3.0"
tar "^4"
node-releases@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01"
@ -5070,14 +5015,6 @@ node-sass@^7.0.0:
stdout-stream "^1.4.0"
"true-case-path" "^1.0.2"
nopt@^4.0.1:
version "4.0.3"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
dependencies:
abbrev "1"
osenv "^0.1.4"
nopt@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88"
@ -5115,27 +5052,6 @@ normalize-selector@^0.2.0:
resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03"
integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=
npm-bundled@^1.0.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1"
integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==
dependencies:
npm-normalize-package-bin "^1.0.1"
npm-normalize-package-bin@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2"
integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==
npm-packlist@^1.1.6:
version "1.4.8"
resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e"
integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==
dependencies:
ignore-walk "^3.0.1"
npm-bundled "^1.0.1"
npm-normalize-package-bin "^1.0.1"
npm-run-all@^4.1.5:
version "4.1.5"
resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba"
@ -5165,17 +5081,7 @@ npm-run-path@^5.1.0:
dependencies:
path-key "^4.0.0"
npmlog@^4.0.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
dependencies:
are-we-there-yet "~1.1.2"
console-control-strings "~1.1.0"
gauge "~2.7.3"
set-blocking "~2.0.0"
npmlog@^5.0.0:
npmlog@^5.0.0, npmlog@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0"
integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==
@ -5195,17 +5101,12 @@ npmlog@^6.0.0:
gauge "^4.0.0"
set-blocking "^2.0.0"
number-is-nan@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
oauth-sign@~0.9.0:
version "0.9.0"
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
object-assign@^4.1.0, object-assign@^4.1.1:
object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
@ -5318,24 +5219,11 @@ ora@^5.4.1:
strip-ansi "^6.0.0"
wcwidth "^1.0.1"
os-homedir@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
os-tmpdir@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
osenv@^0.1.4:
version "0.1.5"
resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
dependencies:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
p-limit@^1.1.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
@ -5708,16 +5596,6 @@ randombytes@^2.1.0:
dependencies:
safe-buffer "^5.1.0"
rc@^1.2.7:
version "1.2.8"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
dependencies:
deep-extend "^0.6.0"
ini "~1.3.0"
minimist "^1.2.0"
strip-json-comments "~2.0.1"
react-copy-to-clipboard@^5.0.2:
version "5.0.4"
resolved "https://registry.yarnpkg.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.4.tgz#42ec519b03eb9413b118af92d1780c403a5f19bf"
@ -5832,7 +5710,7 @@ readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.1.1, readable-stre
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.5, readable-stream@^2.0.6:
readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.5:
version "2.3.7"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
@ -6043,13 +5921,6 @@ reusify@^1.0.4:
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
rimraf@^2.6.1:
version "2.7.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
dependencies:
glob "^7.1.3"
rimraf@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
@ -6076,7 +5947,7 @@ rxjs@^7.2.0, rxjs@^7.5.5:
dependencies:
tslib "^2.1.0"
safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0:
safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
@ -6109,11 +5980,6 @@ sass-loader@^12.6.0:
klona "^2.0.4"
neo-async "^2.6.2"
sax@^1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
scheduler@^0.20.2:
version "0.20.2"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91"
@ -6154,11 +6020,11 @@ semver-compare@^1.0.0:
integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
semver-regex@^3.1.2:
version "3.1.3"
resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.3.tgz#b2bcc6f97f63269f286994e297e229b6245d0dc3"
integrity sha512-Aqi54Mk9uYTjVexLnR67rTyBusmwd04cLkHy9hNvk3+G3nT2Oyg7E0l4XVbOaNwIvQ3hHeYxGcyEy+mKreyBFQ==
version "3.1.4"
resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.4.tgz#13053c0d4aa11d070a2f2872b6b1e3ae1e1971b4"
integrity sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA==
"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.1:
"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0, semver@^5.7.1:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
@ -6187,7 +6053,7 @@ serialize-javascript@^6.0.0:
dependencies:
randombytes "^2.1.0"
set-blocking@^2.0.0, set-blocking@~2.0.0:
set-blocking@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
@ -6252,10 +6118,10 @@ signal-exit@^3.0.2:
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f"
integrity sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==
simple-git@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.3.0.tgz#91692d576f851be691124781b79872b246d2f92c"
integrity sha512-K9qcbbZwPHhk7MLi0k0ekvSFXJIrRoXgHhqMXAFM75qS68vdHTcuzmul1ilKI02F/4lXshVgBoDll2t++JK0PQ==
simple-git@^3.5.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.5.0.tgz#3c3538f4d7a1b3c8f3904412b12740bdcad9c8b1"
integrity sha512-fZsaq5nzdxQRhMNs6ESGLpMUHoL5GRP+boWPhq9pMYMKwOGZV2jHOxi8AbFFA2Y/6u4kR99HoULizSbpzaODkA==
dependencies:
"@kwsites/file-exists" "^1.1.1"
"@kwsites/promise-deferred" "^1.1.1"
@ -6325,7 +6191,7 @@ source-map@^0.6.0, source-map@^0.6.1:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
source-map@^0.7.1, source-map@^0.7.3, source-map@~0.7.2:
source-map@^0.7.1, source-map@^0.7.3:
version "0.7.3"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
@ -6397,15 +6263,6 @@ stdout-stream@^1.4.0:
dependencies:
readable-stream "^2.0.1"
string-width@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
dependencies:
code-point-at "^1.0.0"
is-fullwidth-code-point "^1.0.0"
strip-ansi "^3.0.0"
"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
@ -6468,13 +6325,6 @@ string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
dependencies:
ansi-regex "^2.0.0"
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
@ -6509,11 +6359,6 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
strip-json-comments@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
style-loader@^3.3.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575"
@ -6672,20 +6517,7 @@ tar-stream@^2.2.0:
inherits "^2.0.3"
readable-stream "^3.1.1"
tar@^4:
version "4.4.19"
resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3"
integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==
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"
tar@^6.0.2, tar@^6.1.2:
tar@^6.0.2, tar@^6.1.11, tar@^6.1.2:
version "6.1.11"
resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621"
integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==
@ -6709,13 +6541,13 @@ terser-webpack-plugin@^5.1.3:
terser "^5.7.2"
terser@^5.7.2:
version "5.12.1"
resolved "https://registry.yarnpkg.com/terser/-/terser-5.12.1.tgz#4cf2ebed1f5bceef5c83b9f60104ac4a78b49e9c"
integrity sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==
version "5.14.2"
resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10"
integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==
dependencies:
"@jridgewell/source-map" "^0.3.2"
acorn "^8.5.0"
commander "^2.20.0"
source-map "~0.7.2"
source-map-support "~0.5.20"
text-extensions@^1.0.0:
@ -6759,6 +6591,11 @@ to-regex-range@^5.0.1:
dependencies:
is-number "^7.0.0"
toastify-js@^1.10.0:
version "1.11.2"
resolved "https://registry.yarnpkg.com/toastify-js/-/toastify-js-1.11.2.tgz#5c66cb05cee30b09e5bd8961ab809e41a3ce716c"
integrity sha512-bMBNKhZLPX/sDhpwM7KHIRUTtqCylQeoZDiEWy5zE7iDUJ92XmP8AKgDAp9rXx6pR5GXGFtQHHoH62toahbHgQ==
toggle-selection@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32"
@ -7128,7 +6965,7 @@ which@^2.0.1, which@^2.0.2:
dependencies:
isexe "^2.0.0"
wide-align@^1.1.0, wide-align@^1.1.2, wide-align@^1.1.5:
wide-align@^1.1.2, wide-align@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
@ -7172,11 +7009,6 @@ y18n@^5.0.5:
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
yallist@^3.0.0, yallist@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"