From 7dbe9192cd4a795849a34fb6b09015017ce88992 Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Sun, 5 Jul 2020 19:40:51 +0200
Subject: [PATCH 01/21] Make file actions post requests
---
src/controllers/FileController.ts | 8 ++++----
views/file-manager.njk | 4 +++-
views/file-upload.njk | 4 +++-
3 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/src/controllers/FileController.ts b/src/controllers/FileController.ts
index bbf7972..a5b29a1 100644
--- a/src/controllers/FileController.ts
+++ b/src/controllers/FileController.ts
@@ -18,12 +18,12 @@ export default class FileController extends Controller {
this.get('/files/upload/script', this.downloadLinuxScript, 'linux-script');
this.post('/files/post', this.postFileFrontend, 'post-file-frontend', REQUIRE_AUTH_MIDDLEWARE, FILE_UPLOAD_FORM_MIDDLEWARE);
this.get('/files/:page([0-9]+)?', this.getFileManager, 'file-manager', REQUIRE_AUTH_MIDDLEWARE);
- this.get('/files/delete/:slug', this.deleteFile, 'delete-file-frontend', REQUIRE_AUTH_MIDDLEWARE);
+ this.post('/files/delete/:slug', this.deleteFile, 'delete-file-frontend', REQUIRE_AUTH_MIDDLEWARE);
this.post('/gen-auth-token', this.postGenAuthToken, 'generate-token', REQUIRE_AUTH_MIDDLEWARE);
- this.get('/revoke-auth-token/:id', this.getRevokeAuthToken, 'revoke-token', REQUIRE_AUTH_MIDDLEWARE);
+ this.post('/revoke-auth-token/:id', this.postRevokeAuthToken, 'revoke-token', REQUIRE_AUTH_MIDDLEWARE);
this.post('/', this.postFile, 'post-file', REQUIRE_REQUEST_AUTH_MIDDLEWARE, FILE_UPLOAD_FORM_MIDDLEWARE);
- this.delete('/delete/:slug', this.deleteFile, 'delete-file', REQUIRE_REQUEST_AUTH_MIDDLEWARE);
+ this.delete('/:slug', this.deleteFile, 'delete-file', REQUIRE_REQUEST_AUTH_MIDDLEWARE);
this.get('/:slug', this.downloadFile, 'get-file');
this.put('/:slug', this.putFile, 'put-file', REQUIRE_REQUEST_AUTH_MIDDLEWARE, FILE_UPLOAD_FORM_MIDDLEWARE);
}
@@ -55,7 +55,7 @@ export default class FileController extends Controller {
res.redirectBack(Controller.route('file-upload'));
}
- protected async getRevokeAuthToken(req: Request, res: Response): Promise {
+ protected async postRevokeAuthToken(req: Request, res: Response): Promise {
const id = req.params.id;
if (!id) throw new BadRequestError('Cannot revoke token without an id.', 'Please provide an id.', req.url);
diff --git a/views/file-manager.njk b/views/file-manager.njk
index fa81e46..a59611c 100644
--- a/views/file-manager.njk
+++ b/views/file-manager.njk
@@ -39,7 +39,9 @@
{% set expires_at = file.getExpirationDate() %}
{% if expires_at %}{{ expires_at.toISOString() }}{% else %}Never{% endif %}
- Delete
+
{% endfor %}
diff --git a/views/file-upload.njk b/views/file-upload.njk
index c0d4cc9..318d301 100644
--- a/views/file-upload.njk
+++ b/views/file-upload.njk
@@ -147,7 +147,9 @@ https://ily.li/
{{ token.created_at.toISOString() }}
{{ token.used_at.toISOString() }}
- Revoke
+
{% endfor %}
From f7a2603e7f05c407ee0c4c7694204ae4833b064b Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Sun, 5 Jul 2020 19:43:56 +0200
Subject: [PATCH 02/21] Require specifying PUT/POST type on /:slug
---
assets/files/upload_file.sh | 22 ++++++++++++----------
src/controllers/FileController.ts | 7 +++++--
src/models/FileModel.ts | 2 +-
views/file-upload.njk | 3 +++
4 files changed, 21 insertions(+), 13 deletions(-)
diff --git a/assets/files/upload_file.sh b/assets/files/upload_file.sh
index 4239746..5c0d36e 100755
--- a/assets/files/upload_file.sh
+++ b/assets/files/upload_file.sh
@@ -4,15 +4,17 @@ local_file=$1
token=$(cat $HOME/.ily_token)
if test -z "$2"; then
- curl -X POST -H 'Accept: text/plain' \
- -H "Authorization: $token" \
- -F 'upload=@'$local_file \
- -F 'ttl=2592000' \
- https://ily.li/
+ curl -X POST -H 'Accept: text/plain' \
+ -H "Authorization: $token" \
+ -F 'type=file' \
+ -F 'upload=@'$local_file \
+ -F 'ttl=2592000' \
+ https://ily.li/
else
- curl -X PUT -H 'Accept: text/plain' \
- -H "Authorization: $token" \
- -F 'upload=@'$local_file \
- -F 'ttl=2592000' \
- "https://ily.li/$2"
+ curl -X PUT -H 'Accept: text/plain' \
+ -H "Authorization: $token" \
+ -F 'type=file' \
+ -F 'upload=@'$local_file \
+ -F 'ttl=2592000' \
+ "https://ily.li/$2"
fi
diff --git a/src/controllers/FileController.ts b/src/controllers/FileController.ts
index a5b29a1..98cc2d5 100644
--- a/src/controllers/FileController.ts
+++ b/src/controllers/FileController.ts
@@ -86,11 +86,14 @@ export default class FileController extends Controller {
}
}
- protected async postFile(req: Request, res: Response): Promise {
+ protected async postFile(req: Request, res: Response, next: NextFunction): Promise {
+ if (req.body.type !== 'file') return next();
+
await this.handleFileUpload(req.body.slug || await this.generateSlug(10), req, res);
}
- protected async putFile(req: Request, res: Response): Promise {
+ protected async putFile(req: Request, res: Response, next: NextFunction): Promise {
+ if (req.body.type !== 'file') return next();
const slug = req.params.slug;
if (!slug) throw new BadRequestError('Cannot put without a slug.', 'Either provide a slug or use POST method instead.', req.url);
diff --git a/src/models/FileModel.ts b/src/models/FileModel.ts
index 0ce748e..ef12535 100644
--- a/src/models/FileModel.ts
+++ b/src/models/FileModel.ts
@@ -15,7 +15,7 @@ export default class FileModel extends Model {
}
public static async paginateForUser(req: Request, perPage: number, user_id: number): Promise {
- return await this.paginate(req, perPage, this.select().where('user_id', user_id));
+ return await this.paginate(req, perPage, this.select().where('user_id', user_id));
}
public readonly user_id!: number;
diff --git a/views/file-upload.njk b/views/file-upload.njk
index 318d301..16b4dd6 100644
--- a/views/file-upload.njk
+++ b/views/file-upload.njk
@@ -100,14 +100,17 @@
Example with curl:
curl -X POST -H 'Accept: application/json' \
-H "Authorization: very_secret_and_personal_token" \
+-F 'type=file' \
-F 'upload=@path/to/local/file' \
https://ily.li/
curl -X PUT -H 'Accept: application/json' \
-H "Authorization: very_secret_and_personal_token" \
+-F 'type=file' \
-F 'upload=@path/to/local/file' \
https://ily.li/my_very_important_file.png
curl -X POST -H 'Accept: application/json' \
-H "Authorization: very_secret_and_personal_token" \
+-F 'type=file' \
-F 'upload=@path/to/local/file' \
-F 'ttl=30' \
https://ily.li/
From e34c0d46db3e0ec1db71e3149f88babe00b928bf Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Sun, 5 Jul 2020 19:44:55 +0200
Subject: [PATCH 03/21] Don't throw errors on file not found and delete files
that should be deleted on access
---
src/controllers/FileController.ts | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/src/controllers/FileController.ts b/src/controllers/FileController.ts
index 98cc2d5..3ba5c25 100644
--- a/src/controllers/FileController.ts
+++ b/src/controllers/FileController.ts
@@ -1,6 +1,6 @@
import Controller from "wms-core/Controller";
import {REQUIRE_AUTH_MIDDLEWARE, REQUIRE_REQUEST_AUTH_MIDDLEWARE} from "wms-core/auth/AuthComponent";
-import {Request, Response} from "express";
+import {NextFunction, Request, Response} from "express";
import {BadRequestError, ForbiddenHttpError, NotFoundHttpError, ServerError} from "wms-core/HttpError";
import FileModel from "../models/FileModel";
import {cryptoRandomDictionary} from "wms-core/Utils";
@@ -9,6 +9,7 @@ import * as fs from "fs";
import AuthToken from "../models/AuthToken";
import {IncomingForm} from "formidable";
import {FILE_UPLOAD_MIDDLEWARE} from "wms-core/components/ExpressAppComponent";
+import Logger from "wms-core/Logger";
const SLUG_DICTIONARY = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
@@ -73,9 +74,15 @@ export default class FileController extends Controller {
await this.handleFileUpload(req.body.autogen_url === undefined && req.body.slug ? req.body.slug : await this.generateSlug(10), req, res);
}
- protected async downloadFile(req: Request, res: Response): Promise {
+ protected async downloadFile(req: Request, res: Response, next: NextFunction): Promise {
const file = await FileModel.getBySlug(req.params.slug);
- if (!file || file.shouldBeDeleted()) throw new NotFoundHttpError('File', req.url);
+ if (!file) return next();
+ if (file.shouldBeDeleted()) {
+ await fs.unlinkSync(file.storage_path);
+ await file.delete();
+ Logger.info('Deleted', file.storage_path, `(${file.real_name})`);
+ return next();
+ }
switch (file.storage_type) {
case 'local':
@@ -139,12 +146,12 @@ export default class FileController extends Controller {
});
}
- protected async deleteFile(req: Request, res: Response): Promise {
+ protected async deleteFile(req: Request, res: Response, next: NextFunction): Promise {
const slug = req.params.slug;
if (!slug) throw new BadRequestError('Cannot delete nothing.', 'Please provide a slug.', req.url);
const file = await FileModel.getBySlug(req.params.slug);
- if (!file) throw new NotFoundHttpError('File', req.url);
+ if (!file) return next();
if (!file.canDelete(req.models.user!.id!)) throw new ForbiddenHttpError('file', req.url);
switch (file.storage_type) {
From 9b5a0b2824fced5a4dba088674f168428f981f66 Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Mon, 6 Jul 2020 10:49:18 +0200
Subject: [PATCH 04/21] Add URL shortening
---
assets/config.json | 1 +
assets/files/shorten_url.sh | 17 ++++
assets/files/upload_file.sh | 26 +++--
assets/js/url-shortener.js | 11 ++
src/App.ts | 8 ++
src/SlugGenerator.ts | 17 ++++
src/controllers/AuthTokenController.ts | 36 +++++++
src/controllers/FileController.ts | 50 ++-------
src/controllers/URLRedirectController.ts | 82 +++++++++++++++
src/migrations/CreateUrlRedirectsTable.ts | 20 ++++
src/models/URLRedirect.ts | 44 ++++++++
views/desktop-utility.njk | 119 ++++++++++++++++++++++
views/file-upload.njk | 117 +--------------------
views/layouts/base.njk | 5 +-
views/url-manager.njk | 44 ++++++++
views/url-shortener.njk | 40 ++++++++
yarn.lock | 52 +++++++---
17 files changed, 498 insertions(+), 191 deletions(-)
create mode 100755 assets/files/shorten_url.sh
create mode 100644 assets/js/url-shortener.js
create mode 100644 src/SlugGenerator.ts
create mode 100644 src/controllers/AuthTokenController.ts
create mode 100644 src/controllers/URLRedirectController.ts
create mode 100644 src/migrations/CreateUrlRedirectsTable.ts
create mode 100644 src/models/URLRedirect.ts
create mode 100644 views/desktop-utility.njk
create mode 100644 views/url-manager.njk
create mode 100644 views/url-shortener.njk
diff --git a/assets/config.json b/assets/config.json
index a181d7c..60bc2c0 100644
--- a/assets/config.json
+++ b/assets/config.json
@@ -2,6 +2,7 @@
"bundles": {
"app": "js/app.js",
"fm": "js/fm.js",
+ "url-shortener": "js/url-shortener.js",
"layout": "sass/layout.scss",
"error": "sass/error.scss",
"logo": "img/logo.svg",
diff --git a/assets/files/shorten_url.sh b/assets/files/shorten_url.sh
new file mode 100755
index 0000000..667e434
--- /dev/null
+++ b/assets/files/shorten_url.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+target_url=$1
+slug=$2
+token=$(cat "$HOME/.ily_token")
+
+if test -z "$slug"; then
+ method=POST
+else
+ method=PUT
+fi
+
+curl -X $method -H 'Accept: text/plain' \
+ -H "Authorization: $token" \
+ -F 'type=url' \
+ -F "target_url=$target_url" \
+ "https://ily.li/$slug"
diff --git a/assets/files/upload_file.sh b/assets/files/upload_file.sh
index 5c0d36e..d4a1890 100755
--- a/assets/files/upload_file.sh
+++ b/assets/files/upload_file.sh
@@ -1,20 +1,18 @@
#!/bin/sh
local_file=$1
-token=$(cat $HOME/.ily_token)
+slug=$2
+token=$(cat "$HOME/.ily_token")
-if test -z "$2"; then
- curl -X POST -H 'Accept: text/plain' \
- -H "Authorization: $token" \
- -F 'type=file' \
- -F 'upload=@'$local_file \
- -F 'ttl=2592000' \
- https://ily.li/
+if test -z "$slug"; then
+ method=POST
else
- curl -X PUT -H 'Accept: text/plain' \
- -H "Authorization: $token" \
- -F 'type=file' \
- -F 'upload=@'$local_file \
- -F 'ttl=2592000' \
- "https://ily.li/$2"
+ method=PUT
fi
+
+curl -X $method -H 'Accept: text/plain' \
+ -H "Authorization: $token" \
+ -F 'type=file' \
+ -F "upload=@$local_file" \
+ -F 'ttl=2592000' \
+ "https://ily.li/$slug"
diff --git a/assets/js/url-shortener.js b/assets/js/url-shortener.js
new file mode 100644
index 0000000..efc5190
--- /dev/null
+++ b/assets/js/url-shortener.js
@@ -0,0 +1,11 @@
+document.addEventListener('DOMContentLoaded', () => {
+ const form = document.getElementById('url-shortener-form');
+ if (!form) return;
+
+ const autogenUrlCheckbox = document.getElementById('field-autogen_url');
+ const slugField = document.getElementById('field-slug');
+
+ autogenUrlCheckbox.addEventListener('change', () => {
+ slugField.disabled = autogenUrlCheckbox.checked;
+ });
+});
diff --git a/src/App.ts b/src/App.ts
index 68c7770..2ca486f 100644
--- a/src/App.ts
+++ b/src/App.ts
@@ -36,6 +36,9 @@ import CreateFilesTable from "./migrations/CreateFilesTable";
import IncreaseFilesSizeField from "./migrations/IncreaseFilesSizeField";
import AddApprovedFieldToUsersTable from "wms-core/auth/migrations/AddApprovedFieldToUsersTable";
import BackendController from "./controllers/BackendController";
+import CreateUrlRedirectsTable from "./migrations/CreateUrlRedirectsTable";
+import AuthTokenController from "./controllers/AuthTokenController";
+import URLRedirectController from "./controllers/URLRedirectController";
export default class App extends Application {
private readonly port: number;
@@ -56,6 +59,7 @@ export default class App extends Application {
CreateFilesTable,
IncreaseFilesSizeField,
AddApprovedFieldToUsersTable,
+ CreateUrlRedirectsTable,
];
}
@@ -136,10 +140,14 @@ export default class App extends Application {
// Core functionality
this.use(new MailController());
+ // Other functionality
+ this.use(new AuthTokenController());
+
// Semi-static
this.use(new AboutController());
// Global slug
this.use(new FileController());
+ this.use(new URLRedirectController());
}
}
\ No newline at end of file
diff --git a/src/SlugGenerator.ts b/src/SlugGenerator.ts
new file mode 100644
index 0000000..b95997a
--- /dev/null
+++ b/src/SlugGenerator.ts
@@ -0,0 +1,17 @@
+import {cryptoRandomDictionary} from "wms-core/Utils";
+import config from "config";
+import FileModel from "./models/FileModel";
+import {ServerError} from "wms-core/HttpError";
+
+const SLUG_DICTIONARY = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
+export default async function generateSlug(tries: number): Promise {
+ let i = 0;
+ do {
+ const slug = cryptoRandomDictionary(config.get('newlyGeneratedSlugSize'), SLUG_DICTIONARY);
+ if (!await FileModel.getBySlug(slug)) {
+ return slug;
+ }
+ i++;
+ } while (i < tries);
+ throw new ServerError('Failed to generate slug; newly generated slug size should be increased by 1.');
+};
\ No newline at end of file
diff --git a/src/controllers/AuthTokenController.ts b/src/controllers/AuthTokenController.ts
new file mode 100644
index 0000000..625d027
--- /dev/null
+++ b/src/controllers/AuthTokenController.ts
@@ -0,0 +1,36 @@
+import Controller from "wms-core/Controller";
+import {REQUIRE_AUTH_MIDDLEWARE} from "wms-core/auth/AuthComponent";
+import {Request, Response} from "express";
+import AuthToken from "../models/AuthToken";
+import {BadRequestError, ForbiddenHttpError, NotFoundHttpError} from "wms-core/HttpError";
+
+export default class AuthTokenController extends Controller {
+ routes(): void {
+ this.post('/gen-auth-token', this.postGenAuthToken, 'generate-token', REQUIRE_AUTH_MIDDLEWARE);
+ this.post('/revoke-auth-token/:id', this.postRevokeAuthToken, 'revoke-token', REQUIRE_AUTH_MIDDLEWARE);
+ }
+
+ protected async postGenAuthToken(req: Request, res: Response): Promise {
+ const authToken = new AuthToken({
+ user_id: req.models.user!.id,
+ ttl: req.body.ttl ? parseInt(req.body.ttl) : 365 * 24 * 3600,
+ });
+ await authToken.save();
+ req.flash('success', 'Successfully created auth token.');
+ res.redirectBack(Controller.route('file-upload'));
+ }
+
+ protected async postRevokeAuthToken(req: Request, res: Response): Promise {
+ const id = req.params.id;
+ if (!id) throw new BadRequestError('Cannot revoke token without an id.', 'Please provide an id.', req.url);
+
+ const authToken = await AuthToken.getById(parseInt(id));
+ if (!authToken) throw new NotFoundHttpError('Auth token', req.url);
+ if (!authToken.canDelete(req.models.user!.id!)) throw new ForbiddenHttpError('auth token', req.url);
+
+ await authToken.delete();
+
+ req.flash('success', 'Successfully deleted auth token.');
+ res.redirectBack(Controller.route('file-upload'));
+ }
+}
\ No newline at end of file
diff --git a/src/controllers/FileController.ts b/src/controllers/FileController.ts
index 3ba5c25..cc2ce06 100644
--- a/src/controllers/FileController.ts
+++ b/src/controllers/FileController.ts
@@ -1,27 +1,24 @@
import Controller from "wms-core/Controller";
import {REQUIRE_AUTH_MIDDLEWARE, REQUIRE_REQUEST_AUTH_MIDDLEWARE} from "wms-core/auth/AuthComponent";
import {NextFunction, Request, Response} from "express";
-import {BadRequestError, ForbiddenHttpError, NotFoundHttpError, ServerError} from "wms-core/HttpError";
+import {BadRequestError, ForbiddenHttpError, ServerError} from "wms-core/HttpError";
import FileModel from "../models/FileModel";
-import {cryptoRandomDictionary} from "wms-core/Utils";
import config from "config";
import * as fs from "fs";
import AuthToken from "../models/AuthToken";
import {IncomingForm} from "formidable";
import {FILE_UPLOAD_MIDDLEWARE} from "wms-core/components/ExpressAppComponent";
import Logger from "wms-core/Logger";
+import generateSlug from "../SlugGenerator";
-const SLUG_DICTIONARY = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
export default class FileController extends Controller {
routes(): void {
this.get('/files/upload', this.getFileUploader, 'file-upload', REQUIRE_AUTH_MIDDLEWARE);
- this.get('/files/upload/script', this.downloadLinuxScript, 'linux-script');
+ this.get('/files/upload/script', this.downloadLinuxScript, 'file-linux-script');
this.post('/files/post', this.postFileFrontend, 'post-file-frontend', REQUIRE_AUTH_MIDDLEWARE, FILE_UPLOAD_FORM_MIDDLEWARE);
this.get('/files/:page([0-9]+)?', this.getFileManager, 'file-manager', REQUIRE_AUTH_MIDDLEWARE);
this.post('/files/delete/:slug', this.deleteFile, 'delete-file-frontend', REQUIRE_AUTH_MIDDLEWARE);
- this.post('/gen-auth-token', this.postGenAuthToken, 'generate-token', REQUIRE_AUTH_MIDDLEWARE);
- this.post('/revoke-auth-token/:id', this.postRevokeAuthToken, 'revoke-token', REQUIRE_AUTH_MIDDLEWARE);
this.post('/', this.postFile, 'post-file', REQUIRE_REQUEST_AUTH_MIDDLEWARE, FILE_UPLOAD_FORM_MIDDLEWARE);
this.delete('/:slug', this.deleteFile, 'delete-file', REQUIRE_REQUEST_AUTH_MIDDLEWARE);
@@ -46,32 +43,9 @@ export default class FileController extends Controller {
});
}
- protected async postGenAuthToken(req: Request, res: Response): Promise {
- const authToken = new AuthToken({
- user_id: req.models.user!.id,
- ttl: req.body.ttl ? parseInt(req.body.ttl) : 365 * 24 * 3600,
- });
- await authToken.save();
- req.flash('success', 'Successfully created auth token.');
- res.redirectBack(Controller.route('file-upload'));
- }
-
- protected async postRevokeAuthToken(req: Request, res: Response): Promise {
- const id = req.params.id;
- if (!id) throw new BadRequestError('Cannot revoke token without an id.', 'Please provide an id.', req.url);
-
- const authToken = await AuthToken.getById(parseInt(id));
- if (!authToken) throw new NotFoundHttpError('Auth token', req.url);
- if (!authToken.canDelete(req.models.user!.id!)) throw new ForbiddenHttpError('auth token', req.url);
-
- await authToken.delete();
-
- req.flash('success', 'Successfully deleted auth token.');
- res.redirectBack(Controller.route('file-upload'));
- }
-
protected async postFileFrontend(req: Request, res: Response): Promise {
- await this.handleFileUpload(req.body.autogen_url === undefined && req.body.slug ? req.body.slug : await this.generateSlug(10), req, res);
+ req.body.type = 'file';
+ await this.handleFileUpload(req.body.autogen_url === undefined && req.body.slug ? req.body.slug : await generateSlug(10), req, res);
}
protected async downloadFile(req: Request, res: Response, next: NextFunction): Promise {
@@ -96,7 +70,7 @@ export default class FileController extends Controller {
protected async postFile(req: Request, res: Response, next: NextFunction): Promise {
if (req.body.type !== 'file') return next();
- await this.handleFileUpload(req.body.slug || await this.generateSlug(10), req, res);
+ await this.handleFileUpload(req.body.slug || await generateSlug(10), req, res);
}
protected async putFile(req: Request, res: Response, next: NextFunction): Promise {
@@ -174,18 +148,6 @@ export default class FileController extends Controller {
},
});
}
-
- private async generateSlug(tries: number): Promise {
- let i = 0;
- do {
- const slug = cryptoRandomDictionary(config.get('newlyGeneratedSlugSize'), SLUG_DICTIONARY);
- if (!await FileModel.getBySlug(slug)) {
- return slug;
- }
- i++;
- } while (i < tries);
- throw new ServerError('Failed to generate slug; newly generated slug size should be increased by 1.');
- }
}
diff --git a/src/controllers/URLRedirectController.ts b/src/controllers/URLRedirectController.ts
new file mode 100644
index 0000000..aa51a38
--- /dev/null
+++ b/src/controllers/URLRedirectController.ts
@@ -0,0 +1,82 @@
+import Controller from "wms-core/Controller";
+import {NextFunction, Request, Response} from "express";
+import URLRedirect from "../models/URLRedirect";
+import {REQUIRE_AUTH_MIDDLEWARE, REQUIRE_REQUEST_AUTH_MIDDLEWARE} from "wms-core/auth/AuthComponent";
+import generateSlug from "../SlugGenerator";
+import {BadRequestError} from "wms-core/HttpError";
+
+export default class URLRedirectController extends Controller {
+ routes(): void {
+ this.get('/url/shorten', this.getURLShortener, 'url-shortener', REQUIRE_AUTH_MIDDLEWARE);
+ this.get('/url/shorten/script', this.downloadLinuxScript, 'url-linux-script');
+ this.post('/url/shorten', this.addURLFrontend, 'shorten-url', REQUIRE_AUTH_MIDDLEWARE);
+ this.get('/urls/:page([0-9]+)?', this.getURLRedirectManager, 'url-manager', REQUIRE_AUTH_MIDDLEWARE);
+
+ this.post('/', this.addURL, 'post-url', REQUIRE_REQUEST_AUTH_MIDDLEWARE);
+ this.delete('/:slug', this.deleteURL, 'delete-url', REQUIRE_REQUEST_AUTH_MIDDLEWARE);
+ this.get('/:slug', this.getURLRedirect, 'get-url');
+ this.put('/:slug', this.addURL, 'put-url', REQUIRE_REQUEST_AUTH_MIDDLEWARE);
+ }
+
+ protected async getURLShortener(req: Request, res: Response): Promise {
+ res.render('url-shortener');
+ }
+
+ protected async downloadLinuxScript(req: Request, res: Response): Promise {
+ res.download('assets/files/shorten_url.sh', 'shorten_url.sh');
+ }
+
+ protected async getURLRedirectManager(req: Request, res: Response): Promise {
+ res.render('url-manager', {
+ urls: await URLRedirect.paginateForUser(req, 100, req.models.user!.id!),
+ });
+ }
+
+ protected async getURLRedirect(req: Request, res: Response, next: NextFunction): Promise {
+ const url = await URLRedirect.getBySlug(req.params.slug);
+ if (!url) return next();
+
+ res.redirect(url.target_url, 301);
+ }
+
+ protected async deleteURL(req: Request, res: Response, next: NextFunction): Promise {
+ const urlRedirect = await URLRedirect.getBySlug(req.params.slug);
+ if (!urlRedirect) return next();
+
+ throw new BadRequestError(
+ 'Deleting url redirects is disabled for security reasons.',
+ 'If you still want to disable the redirection, please contact us via email.',
+ req.url
+ );
+ }
+
+ protected async addURLFrontend(req: Request, res: Response, next: NextFunction): Promise {
+ req.body.type = 'url';
+ await this.addURL(req, res, next, req.body.autogen_url === undefined && req.body.slug ? req.body.slug : await generateSlug(10));
+ }
+
+ protected async addURL(req: Request, res: Response, next: NextFunction, slug?: string): Promise {
+ if (req.body.type !== 'url') return next();
+
+ slug = slug || req.params.slug || req.body.slug || await generateSlug(10);
+ const urlRedirect = new URLRedirect({
+ user_id: req.models.user!.id,
+ slug: slug,
+ target_url: req.body.target_url,
+ });
+
+ await urlRedirect.save();
+
+ res.format({
+ json: () => res.json({
+ url: urlRedirect.getURL(),
+ }),
+ text: () => res.send(urlRedirect.getURL()),
+ html: () => {
+ req.flash('success', 'URL shortened successfully!');
+ req.flash('url', urlRedirect.getURL());
+ res.redirectBack('/');
+ },
+ });
+ }
+}
\ No newline at end of file
diff --git a/src/migrations/CreateUrlRedirectsTable.ts b/src/migrations/CreateUrlRedirectsTable.ts
new file mode 100644
index 0000000..b82fb6d
--- /dev/null
+++ b/src/migrations/CreateUrlRedirectsTable.ts
@@ -0,0 +1,20 @@
+import Migration from "wms-core/db/Migration";
+import {Connection} from "mysql";
+
+export default class CreateUrlRedirectsTable extends Migration {
+ public async install(connection: Connection): Promise {
+ await this.query('CREATE TABLE url_redirects(' +
+ 'id INT NOT NULL AUTO_INCREMENT,' +
+ 'user_id INT NOT NULL,' +
+ 'slug VARCHAR(259) UNIQUE NOT NULL,' +
+ 'target_url VARCHAR(1745) NOT NULL,' +
+ 'created_at DATETIME NOT NULL DEFAULT NOW(),' +
+ 'PRIMARY KEY (id)' +
+ ')', connection);
+ }
+
+ public async rollback(connection: Connection): Promise {
+ await this.query('DROP TABLE IF EXISTS url_redirects', connection);
+ }
+
+}
\ No newline at end of file
diff --git a/src/models/URLRedirect.ts b/src/models/URLRedirect.ts
new file mode 100644
index 0000000..b3bd2c2
--- /dev/null
+++ b/src/models/URLRedirect.ts
@@ -0,0 +1,44 @@
+import Model from "wms-core/db/Model";
+import Validator from "wms-core/db/Validator";
+import User from "wms-core/auth/models/User";
+import FileModel from "./FileModel";
+import {Request} from "express";
+import config from "config";
+import Controller from "wms-core/Controller";
+
+export default class URLRedirect extends Model {
+ public static get table(): string {
+ return 'url_redirects';
+ }
+
+ public static async getBySlug(slug: string): Promise {
+ return await this.select().where('slug', slug).first();
+ }
+
+ public static async paginateForUser(req: Request, perPage: number, user_id: number): Promise {
+ return await this.paginate(req, perPage, this.select().where('user_id', user_id));
+ }
+
+ public readonly user_id!: number;
+ public readonly slug!: string;
+ public readonly target_url!: string;
+ public created_at?: Date;
+
+ constructor(data: any) {
+ super(data);
+ }
+
+ protected init(): void {
+ this.addProperty('user_id', new Validator().defined().exists(User, 'id'));
+ this.addProperty('slug', new Validator().defined().minLength(1).maxLength(259).unique(URLRedirect, 'slug').unique(FileModel, 'slug'));
+ this.addProperty('target_url', new Validator().defined().maxLength(1745).regexp(/^https?:\/\/.{3,259}?\/?/i));
+ this.addProperty('created_at', new Validator());
+ }
+
+ public getURL(): string {
+ return config.get('base_url') + Controller.route('get-url', {
+ slug: this.slug,
+ });
+ }
+
+}
\ No newline at end of file
diff --git a/views/desktop-utility.njk b/views/desktop-utility.njk
new file mode 100644
index 0000000..3c2a975
--- /dev/null
+++ b/views/desktop-utility.njk
@@ -0,0 +1,119 @@
+
+
+ Setup a desktop utility
+ There may be a desktop client at some point. For now, if you're an advanced user, you can setup
+ scripts/macros.
+
+
+
+ First alternative: sh script (native on linux)
+ If you have the sh shell on your machine (i.e. you are on linux, git bash on windows...), you can
+ download this script .
+ You must put a valid auth token (generated in the form at the bottom of this page) in a .ily_token
+ file in your home directory ($HOME/.ily_token).
+ Examples:
+ upload_script.sh path/to/file
+ upload_script.sh path/to/file my_very_important_file.png
+
+
+
+
+
+ Second alternative: implement your own client
+
+ To upload the file, you must:
+
+
+ Set the "Authorization" HTTP header to an auth token (generate one with the form below)
+ Make a proper file upload request either with the method "POST" on / (auto-generates a short
+ url) or "PUT" (choose the target url you want, alphanum)
+
+
+
+
+
+ Field name
+ Description
+ Optional?
+ Example
+
+
+
+
+
+ upload
+ The file field
+ No
+ -
+
+
+
+ ttl
+ How much time (in seconds) to keep the file
+ Yes
+ 0 (never delete), 30 (delete after 30s)
+
+
+
+ Example with curl:
+ curl -X POST -H 'Accept: application/json' \
+-H "Authorization: very_secret_and_personal_token" \
+-F 'type=file' \
+-F 'upload=@path/to/local/file' \
+https://ily.li/
+ curl -X PUT -H 'Accept: application/json' \
+-H "Authorization: very_secret_and_personal_token" \
+-F 'type=file' \
+-F 'upload=@path/to/local/file' \
+https://ily.li/my_very_important_file.png
+ curl -X POST -H 'Accept: application/json' \
+-H "Authorization: very_secret_and_personal_token" \
+-F 'type=file' \
+-F 'upload=@path/to/local/file' \
+-F 'ttl=30' \
+https://ily.li/
+
+
+
+
+
+ Auth tokens
+
+
+
+
+
+ #
+ Secret
+ Created at
+ Last used at
+ Actions
+
+
+
+
+ {% for token in auth_tokens %}
+
+ {{ token.id }}
+
+
+
+ {{ token.created_at.toISOString() }}
+ {{ token.used_at.toISOString() }}
+
+
+
+
+ {% endfor %}
+
+
+
\ No newline at end of file
diff --git a/views/file-upload.njk b/views/file-upload.njk
index 16b4dd6..ef54f77 100644
--- a/views/file-upload.njk
+++ b/views/file-upload.njk
@@ -41,122 +41,7 @@
-
-
- Setup a desktop utility
- There may be a desktop client at some point. For now, if you're an advanced user, you can setup
- scripts/macros.
-
-
-
- First alternative: sh script (native on linux)
- If you have the sh shell on your machine (i.e. you are on linux, git bash on windows...), you can
- download this script .
- You must put a valid auth token (generated in the form at the bottom of this page) in a .ily_token file in your home directory ($HOME/.ily_token).
- Examples:
- upload_script.sh path/to/file
- upload_script.sh path/to/file my_very_important_file.png
-
-
-
-
-
- Second alternative: implement your own client
-
- To upload the file, you must:
-
-
- Set the "Authorization" HTTP header to an auth token (generate one with the form below)
- Make a proper file upload request either with the method "POST" on / (auto-generates a short
- url) or "PUT" (choose the target url you want, alphanum)
-
-
-
-
-
- Field name
- Description
- Optional?
- Example
-
-
-
-
-
- upload
- The file field
- No
- -
-
-
-
- ttl
- How much time (in seconds) to keep the file
- Yes
- 0 (never delete), 30 (delete after 30s)
-
-
-
- Example with curl:
- curl -X POST -H 'Accept: application/json' \
--H "Authorization: very_secret_and_personal_token" \
--F 'type=file' \
--F 'upload=@path/to/local/file' \
-https://ily.li/
- curl -X PUT -H 'Accept: application/json' \
--H "Authorization: very_secret_and_personal_token" \
--F 'type=file' \
--F 'upload=@path/to/local/file' \
-https://ily.li/my_very_important_file.png
- curl -X POST -H 'Accept: application/json' \
--H "Authorization: very_secret_and_personal_token" \
--F 'type=file' \
--F 'upload=@path/to/local/file' \
--F 'ttl=30' \
-https://ily.li/
-
-
-
- Auth tokens
-
-
-
-
-
- #
- Secret
- Created at
- Last used at
- Actions
-
-
-
-
- {% for token in auth_tokens %}
-
- {{ token.id }}
-
-
-
- {{ token.created_at.toISOString() }}
- {{ token.used_at.toISOString() }}
-
-
-
-
- {% endfor %}
-
-
-
+ {% include 'desktop-utility.njk' %}
{% endblock %}
\ No newline at end of file
diff --git a/views/layouts/base.njk b/views/layouts/base.njk
index a622ad1..b979698 100644
--- a/views/layouts/base.njk
+++ b/views/layouts/base.njk
@@ -15,10 +15,11 @@
{{ app.name }}
- About
{% if user %}
File uploader
File manager
+ URL shortener
+ URL manager
{% if user.is_admin %}
Backend
{% endif %}
@@ -47,4 +48,4 @@
{% endblock %}
-{% block footer %}{{ app.name }} v{{ app_version }} - all rights reserved.{% endblock %}
\ No newline at end of file
+{% block footer %}{{ app.name }} v{{ app_version }} - all rights reserved. | About {% endblock %}
\ No newline at end of file
diff --git a/views/url-manager.njk b/views/url-manager.njk
new file mode 100644
index 0000000..d15c766
--- /dev/null
+++ b/views/url-manager.njk
@@ -0,0 +1,44 @@
+{% extends 'layouts/base.njk' %}
+
+{% set title = app.name + ' - URL manager' %}
+
+{% block scripts %}{% endblock %}
+
+{% block body %}
+ URL manager
+ These are permanent.
+
+
+ URL list
+
+
+
+ #
+ URL
+ Target
+ Actions
+
+
+
+
+ {% for url in urls %}
+
+ {{ url.id }}
+
+
+
+ {{ url.target_url }}
+
+
+
+
+ {% endfor %}
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/views/url-shortener.njk b/views/url-shortener.njk
new file mode 100644
index 0000000..d450d82
--- /dev/null
+++ b/views/url-shortener.njk
@@ -0,0 +1,40 @@
+{% extends 'layouts/base.njk' %}
+
+{% set title = app.name + ' - URL shortener' %}
+
+{% block scripts %}
+
+{% endblock %}
+
+{% block body %}
+ Shorten URLs
+ (no phishing allowed)
+
+
+
+ Shorten a URL
+
+
+
+ {% set url = flash('url') %}
+ {% if url | length %}
+
+ {% endif %}
+
+
+
+ {% include 'desktop-utility.njk' %}
+{% endblock %}
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index ca903e7..d7420ff 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -770,13 +770,20 @@
"@babel/types" "^7.4.4"
esutils "^2.0.2"
-"@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7":
+"@babel/runtime@^7.8.4":
version "7.10.3"
resolved "https://registry.toot.party/@babel%2fruntime/-/runtime-7.10.3.tgz#670d002655a7c366540c67f6fd3342cd09500364"
integrity sha512-RzGO0RLSdokm9Ipe/YD+7ww8X2Ro79qiXZF3HU9ljrM+qnJmH1Vqth+hbiQZy761LnMJTMitHDuKVYTk3k4dLw==
dependencies:
regenerator-runtime "^0.13.4"
+"@babel/runtime@^7.8.7":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fruntime/-/runtime-7.10.4.tgz#a6724f1a6b8d2f6ea5236dbfe58c7d7ea9c5eb99"
+ integrity sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==
+ dependencies:
+ regenerator-runtime "^0.13.4"
+
"@babel/template@^7.10.1", "@babel/template@^7.10.3", "@babel/template@^7.3.3":
version "7.10.3"
resolved "https://registry.toot.party/@babel%2ftemplate/-/template-7.10.3.tgz#4d13bc8e30bf95b0ce9d175d30306f42a2c9a7b8"
@@ -1270,9 +1277,9 @@
integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==
"@types/redis@^2.8.18":
- version "2.8.22"
- resolved "https://registry.toot.party/@types%2fredis/-/redis-2.8.22.tgz#8935227cbe39080506b625276d64974ddbcb9ea4"
- integrity sha512-O21YLcAtcSzax8wy4CfxMNjIMNf5X2c1pKTXDWLMa2p77Igvy7wuNjWVv+Db93wTvRvLLev6oq3IE7gxNKFZyg==
+ version "2.8.24"
+ resolved "https://registry.toot.party/@types%2fredis/-/redis-2.8.24.tgz#164d1d1b9f628d089e63874b072100c30d9d1c1a"
+ integrity sha512-I5LivNsNdEvBDJnBthjL4YAqD888eSf/k8kM5ROzgRHy7UE7n+ijwFVKqCSM4Ekujfb+3SDz/GbEhXWjnuI04w==
dependencies:
"@types/node" "*"
@@ -1290,9 +1297,9 @@
integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
"@types/ws@^7.2.4":
- version "7.2.5"
- resolved "https://registry.toot.party/@types%2fws/-/ws-7.2.5.tgz#513f28b04a1ea1aa9dc2cad3f26e8e37c88aae49"
- integrity sha512-4UEih9BI1nBKii385G9id1oFrSkLcClbwtDfcYj8HJLQqZVAtb/42vXVrYvRWCcufNF/a+rZD3MxNwghA7UmCg==
+ version "7.2.6"
+ resolved "https://registry.toot.party/@types%2fws/-/ws-7.2.6.tgz#516cbfb818310f87b43940460e065eb912a4178d"
+ integrity sha512-Q07IrQUSNpr+cXU4E4LtkSIBPie5GLZyyMC1QtQYRLWz701+XcoVygGUZgvLqElq1nU4ICldMYPnexlBsg3dqQ==
dependencies:
"@types/node" "*"
@@ -1519,7 +1526,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
resolved "https://registry.toot.party/ajv-keywords/-/ajv-keywords-3.5.0.tgz#5c894537098785926d71e696114a53ce768ed773"
integrity sha512-eyoaac3btgU8eJlvh01En8OCKzRqlLe2G5jDsCr3RiE2uLGMEEB1aaGwVVpwR8M95956tGH6R+9edC++OvzaVw==
-ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.5.5:
+ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2:
version "6.12.2"
resolved "https://registry.toot.party/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd"
integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==
@@ -1529,6 +1536,16 @@ ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.5.5:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
+ajv@^6.5.5:
+ version "6.12.3"
+ resolved "https://registry.toot.party/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706"
+ integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
amdefine@>=0.0.4:
version "1.0.1"
resolved "https://registry.toot.party/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
@@ -6785,9 +6802,9 @@ no-case@^2.2.0:
lower-case "^1.1.1"
node-addon-api@^2.0.0:
- version "2.0.1"
- resolved "https://registry.toot.party/node-addon-api/-/node-addon-api-2.0.1.tgz#4fd0931bf6d7e48b219ff3e6abc73cbb0252b7a3"
- integrity sha512-2WVfwRfIr1AVn3dRq4yRc2Hn35ND+mPJH6inC6bjpYCZVrpXPB4j3T6i//OGVfqVsR1t/X/axRulDsheq4F0LQ==
+ version "2.0.2"
+ resolved "https://registry.toot.party/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32"
+ integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==
node-gyp@^3.8.0:
version "3.8.0"
@@ -9825,9 +9842,9 @@ widest-line@^3.1.0:
string-width "^4.0.0"
wms-core@^0:
- version "0.10.18"
- resolved "https://registry.toot.party/wms-core/-/wms-core-0.10.18.tgz#450bf5be19f1a5872230199b04353169e3cfe2aa"
- integrity sha512-x4+FgnfovJHLpAKYKmh5+rM9Zovklya8mZC+KnrQ65y2v3vw3i9hDRjXeums5OvyQsBA7X4OObEffTbClLNCTQ==
+ version "0.10.19"
+ resolved "https://registry.toot.party/wms-core/-/wms-core-0.10.19.tgz#d04830bd66ea5ee2e43b7314dfa8c92e6b11697f"
+ integrity sha512-9DGTKtdKho8FJV5b0k7D6/21zFjOQTbJz4wkvTdgW+EL2iriH9ojFVRaakGqgb3WoxejZFaz14HSYysNAJ4Xsw==
dependencies:
"@types/express" "^4.17.6"
"@types/express-session" "^1.17.0"
@@ -9901,11 +9918,16 @@ write-file-atomic@^3.0.0:
signal-exit "^3.0.2"
typedarray-to-buffer "^3.1.5"
-ws@^7.0.0, ws@^7.2.3:
+ws@^7.0.0:
version "7.3.0"
resolved "https://registry.toot.party/ws/-/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd"
integrity sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w==
+ws@^7.2.3:
+ version "7.3.1"
+ resolved "https://registry.toot.party/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8"
+ integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==
+
xdg-basedir@^4.0.0:
version "4.0.0"
resolved "https://registry.toot.party/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
From e911089c979837be8cf41e6aeddc306f85f95708 Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Mon, 6 Jul 2020 11:05:04 +0200
Subject: [PATCH 05/21] Prevent the creation of files where slugs are already
taken by URLs
---
src/models/FileModel.ts | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/models/FileModel.ts b/src/models/FileModel.ts
index ef12535..d6bff5d 100644
--- a/src/models/FileModel.ts
+++ b/src/models/FileModel.ts
@@ -4,6 +4,7 @@ import Controller from "wms-core/Controller";
import config from "config";
import User from "wms-core/auth/models/User";
import {Request} from "express";
+import URLRedirect from "./URLRedirect";
export default class FileModel extends Model {
public static get table(): string {
@@ -29,7 +30,7 @@ export default class FileModel extends Model {
protected init() {
this.addProperty('user_id', new Validator().defined().exists(User, 'id'));
- this.addProperty('slug', new Validator().defined().minLength(1).maxLength(259).unique(this, 'slug'));
+ this.addProperty('slug', new Validator().defined().minLength(1).maxLength(259).unique(FileModel, 'slug').unique(URLRedirect, 'slug'));
this.addProperty('real_name', new Validator().defined().minLength(1).maxLength(259));
this.addProperty('storage_type', new Validator().defined().maxLength(64));
this.addProperty('storage_path', new Validator().defined().maxLength(1745));
From 48cf65591771361ded66032cc2ae072b1bb3647c Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Mon, 6 Jul 2020 11:05:17 +0200
Subject: [PATCH 06/21] Update desktop utility instructions
---
views/desktop-utility.njk | 88 ++++++++++++++++++++++++++-------------
1 file changed, 58 insertions(+), 30 deletions(-)
diff --git a/views/desktop-utility.njk b/views/desktop-utility.njk
index 3c2a975..f784a5f 100644
--- a/views/desktop-utility.njk
+++ b/views/desktop-utility.njk
@@ -7,13 +7,33 @@
First alternative: sh script (native on linux)
- If you have the sh shell on your machine (i.e. you are on linux, git bash on windows...), you can
- download this script .
+ If you have the sh shell on your machine (i.e. you are on linux, git bash on windows...) and curl, you can
+ download and use these scripts:
+
+
+
+ Name
+ Download link
+
+
+
+
+ upload_file.sh
+ Download
+
+
+ shorten_url.sh
+ Download
+
+
+
You must put a valid auth token (generated in the form at the bottom of this page) in a .ily_token
- file in your home directory ($HOME/.ily_token).
+ file in your home directory ($HOME/.ily_token
).
Examples:
- upload_script.sh path/to/file
- upload_script.sh path/to/file my_very_important_file.png
+ upload_file.sh path/to/file
+ upload_file.sh path/to/file my_very_important_file.png
+ shorten_url.sh https://gitlab.com/ArisuOngaku/ilyli
+ shorten_url.sh https://gitlab.com/ArisuOngaku/ilyli repo
@@ -34,44 +54,52 @@
Field name
Description
- Optional?
- Example
+ Required?
+ Value(s)
- upload
- The file field
- No
- -
+ File upload
+
+
+ type
+ Request type
+ Yes
+ file
+
+
+ upload
+ File field
+ Yes
+ The actual file contents
-
ttl
How much time (in seconds) to keep the file
- Yes
+ No
0 (never delete), 30 (delete after 30s)
+
+
+ URL shorten
+
+
+ type
+ Request type
+ Yes
+ url
+
+
+ target_url
+ Target url
+ Yes
+ A valid URL starting with https:// or http://
+
- Example with curl:
- curl -X POST -H 'Accept: application/json' \
--H "Authorization: very_secret_and_personal_token" \
--F 'type=file' \
--F 'upload=@path/to/local/file' \
-https://ily.li/
- curl -X PUT -H 'Accept: application/json' \
--H "Authorization: very_secret_and_personal_token" \
--F 'type=file' \
--F 'upload=@path/to/local/file' \
-https://ily.li/my_very_important_file.png
- curl -X POST -H 'Accept: application/json' \
--H "Authorization: very_secret_and_personal_token" \
--F 'type=file' \
--F 'upload=@path/to/local/file' \
--F 'ttl=30' \
-https://ily.li/
+ For examples with curl, please download and review the scripts above.
From babfe3271a7a1f84e08a9846e752ebb6819eefa7 Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Mon, 6 Jul 2020 11:05:34 +0200
Subject: [PATCH 07/21] Remove Delete button from url manager
---
views/url-manager.njk | 6 ------
1 file changed, 6 deletions(-)
diff --git a/views/url-manager.njk b/views/url-manager.njk
index d15c766..621031a 100644
--- a/views/url-manager.njk
+++ b/views/url-manager.njk
@@ -16,7 +16,6 @@
#
URL
Target
- Actions
@@ -31,11 +30,6 @@
{{ url.target_url }}
-
-
-
{% endfor %}
From 6ea4f57b727c40b3b16c86460deab8b282af62a4 Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Mon, 6 Jul 2020 11:06:50 +0200
Subject: [PATCH 08/21] Add missing 'formidable' types
---
package.json | 1 +
1 file changed, 1 insertion(+)
diff --git a/package.json b/package.json
index aec7d2a..f9bf4df 100644
--- a/package.json
+++ b/package.json
@@ -18,6 +18,7 @@
"@babel/preset-env": "^7.9.5",
"@types/config": "^0.0.36",
"@types/express": "^4.17.6",
+ "@types/formidable": "^1.0.31",
"@types/jest": "^25.2.1",
"@types/node": "^13.13.2",
"babel-loader": "^8.1.0",
From 2c649d2030ab243afd98a865c99b8a30cd4332c5 Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Mon, 6 Jul 2020 11:08:31 +0200
Subject: [PATCH 09/21] Update default config
---
config/default.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/config/default.ts b/config/default.ts
index 2d97df0..8f2cf14 100644
--- a/config/default.ts
+++ b/config/default.ts
@@ -14,13 +14,13 @@ export default Object.assign(require("wms-core/config/default").default, {
host: "localhost",
user: "root",
password: "",
- database: "wms2",
+ database: "example_app",
create_database_automatically: false
},
redis: {
host: "127.0.0.1",
port: 6379,
- prefix: 'wms'
+ prefix: 'example_app'
},
session: {
secret: "very_secret_not_known",
From 4ca381a4052bde76420cd0b321644db3acb87fad Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Mon, 6 Jul 2020 11:36:37 +0200
Subject: [PATCH 10/21] Make main menu mobile-compatible
---
assets/sass/_vars.scss | 3 ++
assets/sass/layout.scss | 77 +++++++++++++++++++++++++++++++----------
views/layouts/base.njk | 1 +
3 files changed, 62 insertions(+), 19 deletions(-)
diff --git a/assets/sass/_vars.scss b/assets/sass/_vars.scss
index cae690a..21d06e7 100644
--- a/assets/sass/_vars.scss
+++ b/assets/sass/_vars.scss
@@ -25,3 +25,6 @@ $warningColor: desaturate($warningText, 50%);
$error: #ff0000;
$errorText: darken($error, 30%);
$errorColor: desaturate($errorText, 50%);
+
+// Responsivity
+$menuLayoutSwitchTreshold: 700px;
diff --git a/assets/sass/layout.scss b/assets/sass/layout.scss
index 9cc7bfd..3537169 100644
--- a/assets/sass/layout.scss
+++ b/assets/sass/layout.scss
@@ -51,32 +51,71 @@ header {
}
}
- nav ul {
- display: flex;
- flex-direction: row;
- margin: 0;
- padding: 0;
+ nav {
+ ul {
+ display: flex;
+ flex-direction: row;
+ margin: 0;
+ padding: 0;
- font-size: 20px;
+ font-size: 20px;
- li {
- list-style: none;
+ li {
+ list-style: none;
- a, span {
- display: flex;
- flex-direction: row;
- align-items: center;
- height: 64px;
- padding: 0 24px;
+ a, span {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ height: 64px;
+ padding: 0 24px;
- .feather {
- --icon-size: 24px;
- margin-right: 10px;
+ .feather {
+ --icon-size: 24px;
+ margin-right: 10px;
+ }
+ }
+
+ a:hover {
+ background-color: rgba(255, 255, 255, 0.07);
+ }
+ }
+ }
+
+ .hamburger {
+ display: none;
+ }
+ }
+
+ @media (max-width: $menuLayoutSwitchTreshold) {
+ flex-direction: row-reverse;
+
+ nav {
+ flex: 1;
+ .hamburger {
+ display: block;
+ padding: 0 16px;
+ cursor: pointer;
+
+ width: max-content;
+
+ &:hover {
+ width: auto;
}
}
- a:hover {
- background-color: rgba(255, 255, 255, 0.07);
+ ul {
+ flex-direction: column;
+ position: absolute;
+ left: 0;
+ transform: translateX(-100%);
+ transition: transform ease-out 150ms;
+
+ background-color: $headerBackground;
+ }
+
+ .hamburger:hover + ul, ul:hover {
+ transform: translateX(0%);
}
}
}
diff --git a/views/layouts/base.njk b/views/layouts/base.njk
index 97f72d7..7aafc89 100644
--- a/views/layouts/base.njk
+++ b/views/layouts/base.njk
@@ -14,6 +14,7 @@
{% block header %}
{{ app.name }}
+
From b30719110af560adafed206f91f3cc4e77375a1b Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Mon, 6 Jul 2020 11:37:54 +0200
Subject: [PATCH 11/21] Add responsive viewport
---
views/layouts/barebone.njk | 2 ++
1 file changed, 2 insertions(+)
diff --git a/views/layouts/barebone.njk b/views/layouts/barebone.njk
index c40f522..3a82d94 100644
--- a/views/layouts/barebone.njk
+++ b/views/layouts/barebone.njk
@@ -8,6 +8,8 @@
+
+
{% if description %}
{% endif %}
From 27b53bf04da255e4633a0171ca286ab9f5fbcd18 Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Mon, 6 Jul 2020 12:03:45 +0200
Subject: [PATCH 12/21] Change mobile menu technique to button with JS
---
assets/js/app.js | 1 +
assets/js/main_menu.js | 17 +++++++++++++++++
assets/sass/layout.scss | 34 +++++++++++++++++++++++-----------
views/layouts/base.njk | 4 ++--
4 files changed, 43 insertions(+), 13 deletions(-)
create mode 100644 assets/js/main_menu.js
diff --git a/assets/js/app.js b/assets/js/app.js
index 2c4466c..10fa287 100644
--- a/assets/js/app.js
+++ b/assets/js/app.js
@@ -2,6 +2,7 @@ import './external_links';
import './message_icons';
import './forms';
import './copyable_text';
+import './main_menu';
import '../sass/app.scss';
diff --git a/assets/js/main_menu.js b/assets/js/main_menu.js
new file mode 100644
index 0000000..f2a89da
--- /dev/null
+++ b/assets/js/main_menu.js
@@ -0,0 +1,17 @@
+document.addEventListener('DOMContentLoaded', () => {
+ const menuButton = document.getElementById('menu-button');
+ const mainMenu = document.getElementById('main-menu');
+
+ menuButton.addEventListener('click', (e) => {
+ e.stopPropagation();
+ mainMenu.classList.toggle('open');
+ });
+
+ mainMenu.addEventListener('click', (e) => {
+ e.stopPropagation();
+ });
+
+ document.addEventListener('click', () => {
+ mainMenu.classList.remove('open');
+ });
+});
\ No newline at end of file
diff --git a/assets/sass/layout.scss b/assets/sass/layout.scss
index 3537169..2185a98 100644
--- a/assets/sass/layout.scss
+++ b/assets/sass/layout.scss
@@ -76,13 +76,13 @@ header {
}
}
- a:hover {
+ a:hover, a:active {
background-color: rgba(255, 255, 255, 0.07);
}
}
}
- .hamburger {
+ #menu-button {
display: none;
}
}
@@ -90,17 +90,29 @@ header {
@media (max-width: $menuLayoutSwitchTreshold) {
flex-direction: row-reverse;
+ .logo {
+ padding: 0 16px 0 8px;
+ font-size: 24px;
+
+ img {
+ margin-right: 8px;
+ }
+ }
+
nav {
- flex: 1;
- .hamburger {
+ #menu-button {
display: block;
+ margin: 0;
padding: 0 16px;
+ line-height: $headerHeight;
+
cursor: pointer;
+ background: transparent;
+ border-radius: 0;
- width: max-content;
-
- &:hover {
- width: auto;
+ .feather {
+ --icon-size: 28px;
+ margin: 0 8px;
}
}
@@ -112,10 +124,10 @@ header {
transition: transform ease-out 150ms;
background-color: $headerBackground;
- }
- .hamburger:hover + ul, ul:hover {
- transform: translateX(0%);
+ &.open {
+ transform: translateX(0%);
+ }
}
}
}
diff --git a/views/layouts/base.njk b/views/layouts/base.njk
index 7aafc89..f87c6aa 100644
--- a/views/layouts/base.njk
+++ b/views/layouts/base.njk
@@ -14,8 +14,8 @@
{% block header %}
{{ app.name }}
-
-
From ca9002acba59bdae5d603ce5944bc370c07a39ee Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Mon, 6 Jul 2020 12:10:42 +0200
Subject: [PATCH 13/21] Put main menu in front
---
assets/sass/layout.scss | 1 +
1 file changed, 1 insertion(+)
diff --git a/assets/sass/layout.scss b/assets/sass/layout.scss
index 2185a98..e91200e 100644
--- a/assets/sass/layout.scss
+++ b/assets/sass/layout.scss
@@ -119,6 +119,7 @@ header {
ul {
flex-direction: column;
position: absolute;
+ z-index: 10;
left: 0;
transform: translateX(-100%);
transition: transform ease-out 150ms;
From 9b9dc176eacc45dee4e974d3d16ffa5773048731 Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Mon, 6 Jul 2020 12:12:16 +0200
Subject: [PATCH 14/21] Tweak menu layout switch threshold
---
assets/sass/_vars.scss | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/assets/sass/_vars.scss b/assets/sass/_vars.scss
index b3df9c8..1d2ad17 100644
--- a/assets/sass/_vars.scss
+++ b/assets/sass/_vars.scss
@@ -27,4 +27,4 @@ $errorText: darken($error, 30%);
$errorColor: desaturate($errorText, 50%);
// Responsivity
-$menuLayoutSwitchTreshold: 700px;
+$menuLayoutSwitchTreshold: 1320px;
From fea9fe00e01ad5eaea9cdc16f57cd6c87a3d0243 Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Mon, 6 Jul 2020 12:45:09 +0200
Subject: [PATCH 15/21] Add optional icon only menu layout
---
assets/sass/layout.scss | 42 ++++++++++++++++++++++++++++++++++++++++-
1 file changed, 41 insertions(+), 1 deletion(-)
diff --git a/assets/sass/layout.scss b/assets/sass/layout.scss
index a895ef4..0d69eda 100644
--- a/assets/sass/layout.scss
+++ b/assets/sass/layout.scss
@@ -64,6 +64,7 @@ header {
list-style: none;
a, span {
+ position: relative;
display: flex;
flex-direction: row;
align-items: center;
@@ -72,7 +73,15 @@ header {
.feather {
--icon-size: 24px;
- margin-right: 10px;
+ }
+
+ &:hover {
+ .tip {
+ visibility: visible;
+ opacity: 1;
+ transition: opacity ease-out 100ms;
+ transition-delay: 150ms;
+ }
}
}
@@ -129,9 +138,40 @@ header {
&.open {
transform: translateX(0%);
}
+
+ li a {
+ .tip {
+ display: block;
+ margin-left: 8px;
+ }
+ }
}
}
}
+
+ @media (min-width: $menuLayoutSwitchTreshold) {
+ nav ul li a .tip {
+ visibility: hidden;
+ position: absolute;
+ display: block;
+ width: max-content;
+ height: 30px;
+ padding: 4px 8px;
+ line-height: 22px;
+ top: calc(100% + 8px);
+ left: 50%;
+ transform: translateX(-50%);
+
+ text-align: center;
+ font-size: 18px;
+ color: $defaultTextColor;
+ opacity: 0;
+ transition: opacity ease-out 100ms, visibility step-end 150ms;
+ transition-delay: 0ms;
+ background-color: #000;
+ border-radius: 5px;
+ }
+ }
}
footer {
From 590a31f1333240d746e9c08274d2a2d9c57119c4 Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Mon, 6 Jul 2020 12:45:36 +0200
Subject: [PATCH 16/21] Update frontend with new icon only layout
---
assets/sass/_vars.scss | 2 +-
views/layouts/base.njk | 17 +++++++++--------
2 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/assets/sass/_vars.scss b/assets/sass/_vars.scss
index 1d2ad17..b3df9c8 100644
--- a/assets/sass/_vars.scss
+++ b/assets/sass/_vars.scss
@@ -27,4 +27,4 @@ $errorText: darken($error, 30%);
$errorColor: desaturate($errorText, 50%);
// Responsivity
-$menuLayoutSwitchTreshold: 1320px;
+$menuLayoutSwitchTreshold: 700px;
diff --git a/views/layouts/base.njk b/views/layouts/base.njk
index 3f9ae97..a4640b8 100644
--- a/views/layouts/base.njk
+++ b/views/layouts/base.njk
@@ -16,17 +16,18 @@
@@ -49,4 +50,4 @@
{% endblock %}
-{% block footer %}{{ app.name }} v{{ app_version }} - all rights reserved. | About {% endblock %}
\ No newline at end of file
+{% block footer %}{{ app.name }} v{{ app_version }} - all rights reserved.{% endblock %}
\ No newline at end of file
From d3909c0371b6cd4a3373afc544b52068b3e89dfc Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Mon, 6 Jul 2020 12:49:28 +0200
Subject: [PATCH 17/21] Fix last menu item tip overflowing out of document
---
assets/sass/layout.scss | 46 ++++++++++++++++++++++++-----------------
1 file changed, 27 insertions(+), 19 deletions(-)
diff --git a/assets/sass/layout.scss b/assets/sass/layout.scss
index 0d69eda..a651859 100644
--- a/assets/sass/layout.scss
+++ b/assets/sass/layout.scss
@@ -150,26 +150,34 @@ header {
}
@media (min-width: $menuLayoutSwitchTreshold) {
- nav ul li a .tip {
- visibility: hidden;
- position: absolute;
- display: block;
- width: max-content;
- height: 30px;
- padding: 4px 8px;
- line-height: 22px;
- top: calc(100% + 8px);
- left: 50%;
- transform: translateX(-50%);
+ nav ul li {
+ a .tip {
+ visibility: hidden;
+ position: absolute;
+ display: block;
+ width: max-content;
+ height: 30px;
+ padding: 4px 8px;
+ line-height: 22px;
+ top: calc(100% + 8px);
+ left: 50%;
+ transform: translateX(-50%);
- text-align: center;
- font-size: 18px;
- color: $defaultTextColor;
- opacity: 0;
- transition: opacity ease-out 100ms, visibility step-end 150ms;
- transition-delay: 0ms;
- background-color: #000;
- border-radius: 5px;
+ text-align: center;
+ font-size: 18px;
+ color: $defaultTextColor;
+ opacity: 0;
+ transition: opacity ease-out 100ms, visibility step-end 150ms;
+ transition-delay: 0ms;
+ background-color: #000;
+ border-radius: 5px;
+ }
+
+ &:last-child a .tip {
+ left: unset;
+ right: 4px;
+ transform: none;
+ }
}
}
}
From 095e68b27e6c11169481a4fd83e9dfaa97164cef Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Mon, 6 Jul 2020 14:52:38 +0200
Subject: [PATCH 18/21] Add multi-domain support for urls and rename url
"shortening" to url "shrinking"
---
assets/config.json | 2 +-
.../files/{shorten_url.sh => shrink_url.sh} | 0
.../js/{url-shortener.js => url-shrinker.js} | 2 +-
config/default.ts | 6 +++++
config/production.ts | 6 +++++
src/controllers/FileController.ts | 9 +++++--
src/controllers/URLRedirectController.ts | 26 ++++++++++++-------
src/models/FileModel.ts | 4 +--
src/models/URLRedirect.ts | 4 +--
views/desktop-utility.njk | 20 +++++++++++---
views/file-upload.njk | 11 +++++++-
views/layouts/base.njk | 2 +-
views/{url-shortener.njk => url-shrinker.njk} | 14 +++++-----
13 files changed, 75 insertions(+), 31 deletions(-)
rename assets/files/{shorten_url.sh => shrink_url.sh} (100%)
rename assets/js/{url-shortener.js => url-shrinker.js} (84%)
rename views/{url-shortener.njk => url-shrinker.njk} (75%)
diff --git a/assets/config.json b/assets/config.json
index 60bc2c0..b60dc10 100644
--- a/assets/config.json
+++ b/assets/config.json
@@ -2,7 +2,7 @@
"bundles": {
"app": "js/app.js",
"fm": "js/fm.js",
- "url-shortener": "js/url-shortener.js",
+ "url-shrinker": "js/url-shrinker.js",
"layout": "sass/layout.scss",
"error": "sass/error.scss",
"logo": "img/logo.svg",
diff --git a/assets/files/shorten_url.sh b/assets/files/shrink_url.sh
similarity index 100%
rename from assets/files/shorten_url.sh
rename to assets/files/shrink_url.sh
diff --git a/assets/js/url-shortener.js b/assets/js/url-shrinker.js
similarity index 84%
rename from assets/js/url-shortener.js
rename to assets/js/url-shrinker.js
index efc5190..e1e10f5 100644
--- a/assets/js/url-shortener.js
+++ b/assets/js/url-shrinker.js
@@ -1,5 +1,5 @@
document.addEventListener('DOMContentLoaded', () => {
- const form = document.getElementById('url-shortener-form');
+ const form = document.getElementById('url-shrink-form');
if (!form) return;
const autogenUrlCheckbox = document.getElementById('field-autogen_url');
diff --git a/config/default.ts b/config/default.ts
index 46e389d..ccc50c5 100644
--- a/config/default.ts
+++ b/config/default.ts
@@ -33,4 +33,10 @@ export default Object.assign(require("wms-core/config/default").default, {
from: 'contact@ily.li',
from_name: 'ily.li',
},
+ allowed_url_domains: [
+ 'localhost:4893',
+ '127.0.0.1:4893',
+ ],
+ default_url_domain_for_files: 0,
+ default_url_domain_for_urls: 1,
});
\ No newline at end of file
diff --git a/config/production.ts b/config/production.ts
index a820f21..5aafd65 100644
--- a/config/production.ts
+++ b/config/production.ts
@@ -21,4 +21,10 @@ export default Object.assign(require("wms-core/config/production").default, {
secure: true,
allow_invalid_tls: false
},
+ allowed_url_domains: [
+ 'ily.li',
+ 'gris.li',
+ ],
+ default_url_domain_for_files: 0,
+ default_url_domain_for_urls: 1,
});
\ No newline at end of file
diff --git a/src/controllers/FileController.ts b/src/controllers/FileController.ts
index cc2ce06..364522b 100644
--- a/src/controllers/FileController.ts
+++ b/src/controllers/FileController.ts
@@ -27,9 +27,12 @@ export default class FileController extends Controller {
}
protected async getFileUploader(req: Request, res: Response): Promise {
+ const allowedDomains = config.get('allowed_url_domains');
res.render('file-upload', {
max_upload_size: config.get('max_upload_size'),
auth_tokens: await AuthToken.select().where('user_id', req.models.user!.id!),
+ allowed_domains: allowedDomains,
+ default_domain: allowedDomains[config.get('default_url_domain_for_files')],
});
}
@@ -108,13 +111,15 @@ export default class FileController extends Controller {
await file.save();
fs.renameSync(upload.path, file.storage_path);
+ const domain = req.body.url_domain || config.get('allowed_url_domains')[config.get('default_url_domain_for_files')];
res.format({
json: () => res.json({
- url: file.getURL(),
+ url: file.getURL(domain),
}),
- text: () => res.send(file.getURL()),
+ text: () => res.send(file.getURL(domain)),
html: () => {
req.flash('success', 'Upload success!');
+ req.flash('url', file.getURL(domain));
res.redirectBack('/');
},
});
diff --git a/src/controllers/URLRedirectController.ts b/src/controllers/URLRedirectController.ts
index aa51a38..5306492 100644
--- a/src/controllers/URLRedirectController.ts
+++ b/src/controllers/URLRedirectController.ts
@@ -4,12 +4,13 @@ import URLRedirect from "../models/URLRedirect";
import {REQUIRE_AUTH_MIDDLEWARE, REQUIRE_REQUEST_AUTH_MIDDLEWARE} from "wms-core/auth/AuthComponent";
import generateSlug from "../SlugGenerator";
import {BadRequestError} from "wms-core/HttpError";
+import config from "config";
export default class URLRedirectController extends Controller {
routes(): void {
- this.get('/url/shorten', this.getURLShortener, 'url-shortener', REQUIRE_AUTH_MIDDLEWARE);
- this.get('/url/shorten/script', this.downloadLinuxScript, 'url-linux-script');
- this.post('/url/shorten', this.addURLFrontend, 'shorten-url', REQUIRE_AUTH_MIDDLEWARE);
+ this.get('/url/shrink', this.getURLShrinker, 'url-shrinker', REQUIRE_AUTH_MIDDLEWARE);
+ this.get('/url/shrink/script', this.downloadLinuxScript, 'url-linux-script');
+ this.post('/url/shrink', this.addURLFrontend, 'shrink-url', REQUIRE_AUTH_MIDDLEWARE);
this.get('/urls/:page([0-9]+)?', this.getURLRedirectManager, 'url-manager', REQUIRE_AUTH_MIDDLEWARE);
this.post('/', this.addURL, 'post-url', REQUIRE_REQUEST_AUTH_MIDDLEWARE);
@@ -18,12 +19,16 @@ export default class URLRedirectController extends Controller {
this.put('/:slug', this.addURL, 'put-url', REQUIRE_REQUEST_AUTH_MIDDLEWARE);
}
- protected async getURLShortener(req: Request, res: Response): Promise {
- res.render('url-shortener');
+ protected async getURLShrinker(req: Request, res: Response): Promise {
+ const allowedDomains = config.get('allowed_url_domains');
+ res.render('url-shrinker', {
+ allowed_domains: allowedDomains,
+ default_domain: allowedDomains[config.get('default_url_domain_for_urls')],
+ });
}
protected async downloadLinuxScript(req: Request, res: Response): Promise {
- res.download('assets/files/shorten_url.sh', 'shorten_url.sh');
+ res.download('assets/files/shrink_url.sh', 'shrink_url.sh');
}
protected async getURLRedirectManager(req: Request, res: Response): Promise {
@@ -67,14 +72,15 @@ export default class URLRedirectController extends Controller {
await urlRedirect.save();
+ const domain = req.body.url_domain || config.get('allowed_url_domains')[config.get('default_url_domain_for_urls')];
res.format({
json: () => res.json({
- url: urlRedirect.getURL(),
+ url: urlRedirect.getURL(domain),
}),
- text: () => res.send(urlRedirect.getURL()),
+ text: () => res.send(urlRedirect.getURL(domain)),
html: () => {
- req.flash('success', 'URL shortened successfully!');
- req.flash('url', urlRedirect.getURL());
+ req.flash('success', 'URL shrunk successfully!');
+ req.flash('url', urlRedirect.getURL(domain));
res.redirectBack('/');
},
});
diff --git a/src/models/FileModel.ts b/src/models/FileModel.ts
index d6bff5d..7997c76 100644
--- a/src/models/FileModel.ts
+++ b/src/models/FileModel.ts
@@ -39,8 +39,8 @@ export default class FileModel extends Model {
this.addProperty('ttl', new Validator().defined().min(0).max(4294967295));
}
- public getURL(): string {
- return config.get('base_url') + Controller.route('get-file', {
+ public getURL(domain: string = config.get('base_url')): string {
+ return (/^https?:\/\//.test(domain) ? '' : 'https://') + domain + Controller.route('get-file', {
slug: this.slug,
});
}
diff --git a/src/models/URLRedirect.ts b/src/models/URLRedirect.ts
index b3bd2c2..c0f3cf9 100644
--- a/src/models/URLRedirect.ts
+++ b/src/models/URLRedirect.ts
@@ -35,8 +35,8 @@ export default class URLRedirect extends Model {
this.addProperty('created_at', new Validator());
}
- public getURL(): string {
- return config.get('base_url') + Controller.route('get-url', {
+ public getURL(domain: string = config.get('base_url')): string {
+ return (/^https?:\/\//.test(domain) ? '' : 'https://') + domain + Controller.route('get-url', {
slug: this.slug,
});
}
diff --git a/views/desktop-utility.njk b/views/desktop-utility.njk
index f784a5f..9eb4f6f 100644
--- a/views/desktop-utility.njk
+++ b/views/desktop-utility.njk
@@ -22,7 +22,7 @@
Download
- shorten_url.sh
+ shrink_url.sh
Download
@@ -32,8 +32,8 @@
Examples:
upload_file.sh path/to/file
upload_file.sh path/to/file my_very_important_file.png
- shorten_url.sh https://gitlab.com/ArisuOngaku/ilyli
- shorten_url.sh https://gitlab.com/ArisuOngaku/ilyli repo
+ shrink_url.sh https://gitlab.com/ArisuOngaku/ilyli
+ shrink_url.sh https://gitlab.com/ArisuOngaku/ilyli repo
@@ -81,9 +81,15 @@
No
0 (never delete), 30 (delete after 30s)
+
+ url_domain
+ Choose domain name
+ No
+ {{ allowed_domains.join('|') }}
+
- URL shorten
+ URL shrink
type
@@ -97,6 +103,12 @@
Yes
A valid URL starting with https:// or http://
+
+ url_domain
+ Choose domain name
+ No
+ {{ allowed_domains.join('|') }}
+
For examples with curl, please download and review the scripts above.
diff --git a/views/file-upload.njk b/views/file-upload.njk
index ef54f77..04d2052 100644
--- a/views/file-upload.njk
+++ b/views/file-upload.njk
@@ -21,7 +21,7 @@
{{ macros.field(_locals, 'number', 'expire_after_days', '30', 'How many days to delete this file after', null, validation_attributes='max="1825"') }}
{{ macros.field(_locals, 'checkbox', 'never_expire', '', 'Never delete this file') }}
- {{ macros.field(_locals, 'text', 'slug', '', 'Custom url slug', 'Example: beautiful_image.jpg sets url to https://ily.li/beautiful_image.jpg', validation_attributes='disabled') }}
+ {{ macros.field(_locals, 'text', 'slug', '', 'Custom url slug', 'Example: beautiful_image.jpg sets url to https://'+default_domain+'/beautiful_image.jpg', validation_attributes='disabled') }}
{{ macros.field(_locals, 'checkbox', 'autogen_url', '', 'Generate url automatically', null, validation_attributes='checked') }}
{{ macros.csrf(getCSRFToken) }}
@@ -40,6 +40,15 @@
+
+ {% set url = flash('url') %}
+ {% if url | length %}
+
+ {% endif %}
diff --git a/views/layouts/base.njk b/views/layouts/base.njk
index a4640b8..28033ac 100644
--- a/views/layouts/base.njk
+++ b/views/layouts/base.njk
@@ -21,7 +21,7 @@
File manager
Upload file
URL manager
- Shorten URL
+ Shrink URL
{% if user.is_admin %}
Backend
{% endif %}
diff --git a/views/url-shortener.njk b/views/url-shrinker.njk
similarity index 75%
rename from views/url-shortener.njk
rename to views/url-shrinker.njk
index d450d82..87172ec 100644
--- a/views/url-shortener.njk
+++ b/views/url-shrinker.njk
@@ -1,28 +1,28 @@
{% extends 'layouts/base.njk' %}
-{% set title = app.name + ' - URL shortener' %}
+{% set title = app.name + ' - URL shrinker' %}
{% block scripts %}
-
+
{% endblock %}
{% block body %}
- Shorten URLs
+ Shrink URLs
(no phishing allowed)
- Shorten a URL
+ Shrink a URL
-
{% set url = flash('url') %}
From 3b5554b9b3626bdee74360606c576ee1bfb4dee9 Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Mon, 6 Jul 2020 15:39:47 +0200
Subject: [PATCH 19/21] Prevent not-main domains from serving frontend
---
src/App.ts | 4 ++
src/controllers/FileController.ts | 48 ++-----------
src/controllers/LinkController.ts | 87 ++++++++++++++++++++++++
src/controllers/URLRedirectController.ts | 30 +-------
4 files changed, 99 insertions(+), 70 deletions(-)
create mode 100644 src/controllers/LinkController.ts
diff --git a/src/App.ts b/src/App.ts
index 2ca486f..5ba7241 100644
--- a/src/App.ts
+++ b/src/App.ts
@@ -39,6 +39,7 @@ import BackendController from "./controllers/BackendController";
import CreateUrlRedirectsTable from "./migrations/CreateUrlRedirectsTable";
import AuthTokenController from "./controllers/AuthTokenController";
import URLRedirectController from "./controllers/URLRedirectController";
+import LinkController from "./controllers/LinkController";
export default class App extends Application {
private readonly port: number;
@@ -132,6 +133,9 @@ export default class App extends Application {
}
private registerControllers() {
+ // Multi-domain + vhost
+ this.use(new LinkController());
+
// Priority
this.use(new AuthController());
this.use(new MagicLinkController(this.magicLinkWebSocketListener!));
diff --git a/src/controllers/FileController.ts b/src/controllers/FileController.ts
index 364522b..3fd9e7d 100644
--- a/src/controllers/FileController.ts
+++ b/src/controllers/FileController.ts
@@ -18,12 +18,7 @@ export default class FileController extends Controller {
this.get('/files/upload/script', this.downloadLinuxScript, 'file-linux-script');
this.post('/files/post', this.postFileFrontend, 'post-file-frontend', REQUIRE_AUTH_MIDDLEWARE, FILE_UPLOAD_FORM_MIDDLEWARE);
this.get('/files/:page([0-9]+)?', this.getFileManager, 'file-manager', REQUIRE_AUTH_MIDDLEWARE);
- this.post('/files/delete/:slug', this.deleteFile, 'delete-file-frontend', REQUIRE_AUTH_MIDDLEWARE);
-
- this.post('/', this.postFile, 'post-file', REQUIRE_REQUEST_AUTH_MIDDLEWARE, FILE_UPLOAD_FORM_MIDDLEWARE);
- this.delete('/:slug', this.deleteFile, 'delete-file', REQUIRE_REQUEST_AUTH_MIDDLEWARE);
- this.get('/:slug', this.downloadFile, 'get-file');
- this.put('/:slug', this.putFile, 'put-file', REQUIRE_REQUEST_AUTH_MIDDLEWARE, FILE_UPLOAD_FORM_MIDDLEWARE);
+ this.post('/files/delete/:slug', FileController.deleteFile, 'delete-file-frontend', REQUIRE_AUTH_MIDDLEWARE);
}
protected async getFileUploader(req: Request, res: Response): Promise {
@@ -48,43 +43,10 @@ export default class FileController extends Controller {
protected async postFileFrontend(req: Request, res: Response): Promise {
req.body.type = 'file';
- await this.handleFileUpload(req.body.autogen_url === undefined && req.body.slug ? req.body.slug : await generateSlug(10), req, res);
+ await FileController.handleFileUpload(req.body.autogen_url === undefined && req.body.slug ? req.body.slug : await generateSlug(10), req, res);
}
- protected async downloadFile(req: Request, res: Response, next: NextFunction): Promise {
- const file = await FileModel.getBySlug(req.params.slug);
- if (!file) return next();
- if (file.shouldBeDeleted()) {
- await fs.unlinkSync(file.storage_path);
- await file.delete();
- Logger.info('Deleted', file.storage_path, `(${file.real_name})`);
- return next();
- }
-
- switch (file.storage_type) {
- case 'local':
- res.download(file.storage_path, file.real_name);
- break;
- default:
- throw new ServerError(`This file cannot be served. Download protocol for ${file.storage_type} storage type not implemented.`);
- }
- }
-
- protected async postFile(req: Request, res: Response, next: NextFunction): Promise {
- if (req.body.type !== 'file') return next();
-
- await this.handleFileUpload(req.body.slug || await generateSlug(10), req, res);
- }
-
- protected async putFile(req: Request, res: Response, next: NextFunction): Promise {
- if (req.body.type !== 'file') return next();
- const slug = req.params.slug;
- if (!slug) throw new BadRequestError('Cannot put without a slug.', 'Either provide a slug or use POST method instead.', req.url);
-
- await this.handleFileUpload(slug, req, res);
- }
-
- protected async handleFileUpload(slug: string, req: Request, res: Response): Promise {
+ public static async handleFileUpload(slug: string, req: Request, res: Response): Promise {
// Check for file upload
if (!req.files || !req.files['upload']) {
throw new BadRequestError('No file received.', 'You must upload exactly one (1) file.', req.url);
@@ -125,7 +87,7 @@ export default class FileController extends Controller {
});
}
- protected async deleteFile(req: Request, res: Response, next: NextFunction): Promise {
+ public static async deleteFile(req: Request, res: Response, next: NextFunction): Promise {
const slug = req.params.slug;
if (!slug) throw new BadRequestError('Cannot delete nothing.', 'Please provide a slug.', req.url);
@@ -156,7 +118,7 @@ export default class FileController extends Controller {
}
-const FILE_UPLOAD_FORM_MIDDLEWARE = FILE_UPLOAD_MIDDLEWARE(() => {
+export const FILE_UPLOAD_FORM_MIDDLEWARE = FILE_UPLOAD_MIDDLEWARE(() => {
const form = new IncomingForm();
form.uploadDir = 'storage/tmp';
form.maxFileSize = config.get('max_upload_size') * 1024 * 1024;
diff --git a/src/controllers/LinkController.ts b/src/controllers/LinkController.ts
new file mode 100644
index 0000000..707f480
--- /dev/null
+++ b/src/controllers/LinkController.ts
@@ -0,0 +1,87 @@
+import Controller from "wms-core/Controller";
+import {NextFunction, Request, Response} from "express";
+import {BadRequestError, NotFoundHttpError, ServerError} from "wms-core/HttpError";
+import config from "config";
+import {REQUIRE_REQUEST_AUTH_MIDDLEWARE} from "wms-core/auth/AuthComponent";
+import URLRedirect from "../models/URLRedirect";
+import URLRedirectController from "./URLRedirectController";
+import FileModel from "../models/FileModel";
+import fs from "fs";
+import Logger from "wms-core/Logger";
+import generateSlug from "../SlugGenerator";
+import FileController, {FILE_UPLOAD_FORM_MIDDLEWARE} from "./FileController";
+
+export default class LinkController extends Controller {
+ routes(): void {
+ this.post('/', this.postFile, 'post-file', REQUIRE_REQUEST_AUTH_MIDDLEWARE, FILE_UPLOAD_FORM_MIDDLEWARE);
+ this.delete('/:slug', FileController.deleteFile, 'delete-file', REQUIRE_REQUEST_AUTH_MIDDLEWARE);
+ this.get('/:slug', this.downloadFile, 'get-file');
+ this.put('/:slug', this.putFile, 'put-file', REQUIRE_REQUEST_AUTH_MIDDLEWARE, FILE_UPLOAD_FORM_MIDDLEWARE);
+
+ this.post('/', URLRedirectController.addURL, 'post-url', REQUIRE_REQUEST_AUTH_MIDDLEWARE);
+ this.delete('/:slug', this.deleteURL, 'delete-url', REQUIRE_REQUEST_AUTH_MIDDLEWARE);
+ this.get('/:slug', this.getURLRedirect, 'get-url');
+ this.put('/:slug', URLRedirectController.addURL, 'put-url', REQUIRE_REQUEST_AUTH_MIDDLEWARE);
+
+ this.get(/(.*)/, this.domainFilter);
+ }
+
+ protected async downloadFile(req: Request, res: Response, next: NextFunction): Promise {
+ const file = await FileModel.getBySlug(req.params.slug);
+ if (!file) return next();
+ if (file.shouldBeDeleted()) {
+ await fs.unlinkSync(file.storage_path);
+ await file.delete();
+ Logger.info('Deleted', file.storage_path, `(${file.real_name})`);
+ return next();
+ }
+
+ switch (file.storage_type) {
+ case 'local':
+ res.download(file.storage_path, file.real_name);
+ break;
+ default:
+ throw new ServerError(`This file cannot be served. Download protocol for ${file.storage_type} storage type not implemented.`);
+ }
+ }
+
+ protected async postFile(req: Request, res: Response, next: NextFunction): Promise {
+ if (req.body.type !== 'file') return next();
+
+ await FileController.handleFileUpload(req.body.slug || await generateSlug(10), req, res);
+ }
+
+ protected async putFile(req: Request, res: Response, next: NextFunction): Promise {
+ if (req.body.type !== 'file') return next();
+ const slug = req.params.slug;
+ if (!slug) throw new BadRequestError('Cannot put without a slug.', 'Either provide a slug or use POST method instead.', req.url);
+
+ await FileController.handleFileUpload(slug, req, res);
+ }
+
+ protected async getURLRedirect(req: Request, res: Response, next: NextFunction): Promise {
+ const url = await URLRedirect.getBySlug(req.params.slug);
+ if (!url) return next();
+
+ res.redirect(url.target_url, 301);
+ }
+
+ protected async deleteURL(req: Request, res: Response, next: NextFunction): Promise {
+ const urlRedirect = await URLRedirect.getBySlug(req.params.slug);
+ if (!urlRedirect) return next();
+
+ throw new BadRequestError(
+ 'Deleting url redirects is disabled for security reasons.',
+ 'If you still want to disable the redirection, please contact us via email.',
+ req.url
+ );
+ }
+
+ protected async domainFilter(req: Request, res: Response, next: NextFunction): Promise {
+ if (req.hostname !== config.get('domain')) {
+ if (req.path === '/') return res.redirect(config.get('base_url'));
+ throw new NotFoundHttpError('Page', req.url);
+ }
+ next();
+ }
+}
\ No newline at end of file
diff --git a/src/controllers/URLRedirectController.ts b/src/controllers/URLRedirectController.ts
index 5306492..4eb2eca 100644
--- a/src/controllers/URLRedirectController.ts
+++ b/src/controllers/URLRedirectController.ts
@@ -1,9 +1,8 @@
import Controller from "wms-core/Controller";
import {NextFunction, Request, Response} from "express";
import URLRedirect from "../models/URLRedirect";
-import {REQUIRE_AUTH_MIDDLEWARE, REQUIRE_REQUEST_AUTH_MIDDLEWARE} from "wms-core/auth/AuthComponent";
+import {REQUIRE_AUTH_MIDDLEWARE} from "wms-core/auth/AuthComponent";
import generateSlug from "../SlugGenerator";
-import {BadRequestError} from "wms-core/HttpError";
import config from "config";
export default class URLRedirectController extends Controller {
@@ -12,11 +11,6 @@ export default class URLRedirectController extends Controller {
this.get('/url/shrink/script', this.downloadLinuxScript, 'url-linux-script');
this.post('/url/shrink', this.addURLFrontend, 'shrink-url', REQUIRE_AUTH_MIDDLEWARE);
this.get('/urls/:page([0-9]+)?', this.getURLRedirectManager, 'url-manager', REQUIRE_AUTH_MIDDLEWARE);
-
- this.post('/', this.addURL, 'post-url', REQUIRE_REQUEST_AUTH_MIDDLEWARE);
- this.delete('/:slug', this.deleteURL, 'delete-url', REQUIRE_REQUEST_AUTH_MIDDLEWARE);
- this.get('/:slug', this.getURLRedirect, 'get-url');
- this.put('/:slug', this.addURL, 'put-url', REQUIRE_REQUEST_AUTH_MIDDLEWARE);
}
protected async getURLShrinker(req: Request, res: Response): Promise {
@@ -37,30 +31,12 @@ export default class URLRedirectController extends Controller {
});
}
- protected async getURLRedirect(req: Request, res: Response, next: NextFunction): Promise {
- const url = await URLRedirect.getBySlug(req.params.slug);
- if (!url) return next();
-
- res.redirect(url.target_url, 301);
- }
-
- protected async deleteURL(req: Request, res: Response, next: NextFunction): Promise {
- const urlRedirect = await URLRedirect.getBySlug(req.params.slug);
- if (!urlRedirect) return next();
-
- throw new BadRequestError(
- 'Deleting url redirects is disabled for security reasons.',
- 'If you still want to disable the redirection, please contact us via email.',
- req.url
- );
- }
-
protected async addURLFrontend(req: Request, res: Response, next: NextFunction): Promise {
req.body.type = 'url';
- await this.addURL(req, res, next, req.body.autogen_url === undefined && req.body.slug ? req.body.slug : await generateSlug(10));
+ await URLRedirectController.addURL(req, res, next, req.body.autogen_url === undefined && req.body.slug ? req.body.slug : await generateSlug(10));
}
- protected async addURL(req: Request, res: Response, next: NextFunction, slug?: string): Promise {
+ public static async addURL(req: Request, res: Response, next: NextFunction, slug?: string): Promise {
if (req.body.type !== 'url') return next();
slug = slug || req.params.slug || req.body.slug || await generateSlug(10);
From 5a6940ace3b8273236c37d8fdc9b4bcfe13c2907 Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Mon, 6 Jul 2020 15:43:54 +0200
Subject: [PATCH 20/21] Upgrade dependencies
---
yarn.lock | 1143 ++++++++++++++++++++++++++---------------------------
1 file changed, 571 insertions(+), 572 deletions(-)
diff --git a/yarn.lock b/yarn.lock
index d7420ff..2ef5c0a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,35 +2,35 @@
# yarn lockfile v1
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fcode-frame/-/code-frame-7.10.3.tgz#324bcfd8d35cd3d47dae18cde63d752086435e9a"
- integrity sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fcode-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a"
+ integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==
dependencies:
- "@babel/highlight" "^7.10.3"
+ "@babel/highlight" "^7.10.4"
-"@babel/compat-data@^7.10.1", "@babel/compat-data@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fcompat-data/-/compat-data-7.10.3.tgz#9af3e033f36e8e2d6e47570db91e64a846f5d382"
- integrity sha512-BDIfJ9uNZuI0LajPfoYV28lX8kyCPMHY6uY4WH1lJdcicmAfxCK5ASzaeV0D/wsUaRH/cLk+amuxtC37sZ8TUg==
+"@babel/compat-data@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fcompat-data/-/compat-data-7.10.4.tgz#706a6484ee6f910b719b696a9194f8da7d7ac241"
+ integrity sha512-t+rjExOrSVvjQQXNp5zAIYDp00KjdvGl/TpDX5REPr0S9IAIPQMTilcfG6q8c0QFmj9lSTVySV2VTsyggvtNIw==
dependencies:
browserslist "^4.12.0"
invariant "^2.2.4"
semver "^5.5.0"
"@babel/core@^7.1.0", "@babel/core@^7.7.5", "@babel/core@^7.9.0":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fcore/-/core-7.10.3.tgz#73b0e8ddeec1e3fdd7a2de587a60e17c440ec77e"
- integrity sha512-5YqWxYE3pyhIi84L84YcwjeEgS+fa7ZjK6IBVGTjDVfm64njkR2lfDhVR5OudLk8x2GK59YoSyVv+L/03k1q9w==
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fcore/-/core-7.10.4.tgz#780e8b83e496152f8dd7df63892b2e052bf1d51d"
+ integrity sha512-3A0tS0HWpy4XujGc7QtOIHTeNwUgWaZc/WuS5YQrfhU67jnVmsD6OGPc1AKHH0LJHQICGncy3+YUjIhVlfDdcA==
dependencies:
- "@babel/code-frame" "^7.10.3"
- "@babel/generator" "^7.10.3"
- "@babel/helper-module-transforms" "^7.10.1"
- "@babel/helpers" "^7.10.1"
- "@babel/parser" "^7.10.3"
- "@babel/template" "^7.10.3"
- "@babel/traverse" "^7.10.3"
- "@babel/types" "^7.10.3"
+ "@babel/code-frame" "^7.10.4"
+ "@babel/generator" "^7.10.4"
+ "@babel/helper-module-transforms" "^7.10.4"
+ "@babel/helpers" "^7.10.4"
+ "@babel/parser" "^7.10.4"
+ "@babel/template" "^7.10.4"
+ "@babel/traverse" "^7.10.4"
+ "@babel/types" "^7.10.4"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.1"
@@ -40,312 +40,312 @@
semver "^5.4.1"
source-map "^0.5.0"
-"@babel/generator@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fgenerator/-/generator-7.10.3.tgz#32b9a0d963a71d7a54f5f6c15659c3dbc2a523a5"
- integrity sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==
+"@babel/generator@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fgenerator/-/generator-7.10.4.tgz#e49eeed9fe114b62fa5b181856a43a5e32f5f243"
+ integrity sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==
dependencies:
- "@babel/types" "^7.10.3"
+ "@babel/types" "^7.10.4"
jsesc "^2.5.1"
lodash "^4.17.13"
source-map "^0.5.0"
-"@babel/helper-annotate-as-pure@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fhelper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz#f6d08acc6f70bbd59b436262553fb2e259a1a268"
- integrity sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw==
+"@babel/helper-annotate-as-pure@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3"
+ integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==
dependencies:
- "@babel/types" "^7.10.1"
+ "@babel/types" "^7.10.4"
-"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.1":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fhelper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.3.tgz#4e9012d6701bef0030348d7f9c808209bd3e8687"
- integrity sha512-lo4XXRnBlU6eRM92FkiZxpo1xFLmv3VsPFk61zJKMm7XYJfwqXHsYJTY6agoc4a3L8QPw1HqWehO18coZgbT6A==
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3"
+ integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==
dependencies:
- "@babel/helper-explode-assignable-expression" "^7.10.3"
- "@babel/types" "^7.10.3"
+ "@babel/helper-explode-assignable-expression" "^7.10.4"
+ "@babel/types" "^7.10.4"
-"@babel/helper-compilation-targets@^7.10.2":
- version "7.10.2"
- resolved "https://registry.toot.party/@babel%2fhelper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz#a17d9723b6e2c750299d2a14d4637c76936d8285"
- integrity sha512-hYgOhF4To2UTB4LTaZepN/4Pl9LD4gfbJx8A34mqoluT8TLbof1mhUlYuNWTEebONa8+UlCC4X0TEXu7AOUyGA==
+"@babel/helper-compilation-targets@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2"
+ integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==
dependencies:
- "@babel/compat-data" "^7.10.1"
+ "@babel/compat-data" "^7.10.4"
browserslist "^4.12.0"
invariant "^2.2.4"
levenary "^1.1.1"
semver "^5.5.0"
-"@babel/helper-create-class-features-plugin@^7.10.1":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fhelper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.3.tgz#2783daa6866822e3d5ed119163b50f0fc3ae4b35"
- integrity sha512-iRT9VwqtdFmv7UheJWthGc/h2s7MqoweBF9RUj77NFZsg9VfISvBTum3k6coAhJ8RWv2tj3yUjA03HxPd0vfpQ==
+"@babel/helper-create-class-features-plugin@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.4.tgz#2d4015d0136bd314103a70d84a7183e4b344a355"
+ integrity sha512-9raUiOsXPxzzLjCXeosApJItoMnX3uyT4QdM2UldffuGApNrF8e938MwNpDCK9CPoyxrEoCgT+hObJc3mZa6lQ==
dependencies:
- "@babel/helper-function-name" "^7.10.3"
- "@babel/helper-member-expression-to-functions" "^7.10.3"
- "@babel/helper-optimise-call-expression" "^7.10.3"
- "@babel/helper-plugin-utils" "^7.10.3"
- "@babel/helper-replace-supers" "^7.10.1"
- "@babel/helper-split-export-declaration" "^7.10.1"
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/helper-member-expression-to-functions" "^7.10.4"
+ "@babel/helper-optimise-call-expression" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-replace-supers" "^7.10.4"
+ "@babel/helper-split-export-declaration" "^7.10.4"
-"@babel/helper-create-regexp-features-plugin@^7.10.1", "@babel/helper-create-regexp-features-plugin@^7.8.3":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fhelper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz#1b8feeab1594cbcfbf3ab5a3bbcabac0468efdbd"
- integrity sha512-Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA==
+"@babel/helper-create-regexp-features-plugin@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8"
+ integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.10.1"
- "@babel/helper-regex" "^7.10.1"
+ "@babel/helper-annotate-as-pure" "^7.10.4"
+ "@babel/helper-regex" "^7.10.4"
regexpu-core "^4.7.0"
-"@babel/helper-define-map@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fhelper-define-map/-/helper-define-map-7.10.3.tgz#d27120a5e57c84727b30944549b2dfeca62401a8"
- integrity sha512-bxRzDi4Sin/k0drWCczppOhov1sBSdBvXJObM1NLHQzjhXhwRtn7aRWGvLJWCYbuu2qUk3EKs6Ci9C9ps8XokQ==
+"@babel/helper-define-map@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-define-map/-/helper-define-map-7.10.4.tgz#f037ad794264f729eda1889f4ee210b870999092"
+ integrity sha512-nIij0oKErfCnLUCWaCaHW0Bmtl2RO9cN7+u2QT8yqTywgALKlyUVOvHDElh+b5DwVC6YB1FOYFOTWcN/+41EDA==
dependencies:
- "@babel/helper-function-name" "^7.10.3"
- "@babel/types" "^7.10.3"
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/types" "^7.10.4"
lodash "^4.17.13"
-"@babel/helper-explode-assignable-expression@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fhelper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.3.tgz#9dc14f0cfa2833ea830a9c8a1c742b6e7461b05e"
- integrity sha512-0nKcR64XrOC3lsl+uhD15cwxPvaB6QKUDlD84OT9C3myRbhJqTMYir69/RWItUvHpharv0eJ/wk7fl34ONSwZw==
+"@babel/helper-explode-assignable-expression@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c"
+ integrity sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==
dependencies:
- "@babel/traverse" "^7.10.3"
- "@babel/types" "^7.10.3"
+ "@babel/traverse" "^7.10.4"
+ "@babel/types" "^7.10.4"
-"@babel/helper-function-name@^7.10.1", "@babel/helper-function-name@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fhelper-function-name/-/helper-function-name-7.10.3.tgz#79316cd75a9fa25ba9787ff54544307ed444f197"
- integrity sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==
+"@babel/helper-function-name@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a"
+ integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==
dependencies:
- "@babel/helper-get-function-arity" "^7.10.3"
- "@babel/template" "^7.10.3"
- "@babel/types" "^7.10.3"
+ "@babel/helper-get-function-arity" "^7.10.4"
+ "@babel/template" "^7.10.4"
+ "@babel/types" "^7.10.4"
-"@babel/helper-get-function-arity@^7.10.1", "@babel/helper-get-function-arity@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fhelper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz#3a28f7b28ccc7719eacd9223b659fdf162e4c45e"
- integrity sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==
+"@babel/helper-get-function-arity@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2"
+ integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==
dependencies:
- "@babel/types" "^7.10.3"
+ "@babel/types" "^7.10.4"
-"@babel/helper-hoist-variables@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fhelper-hoist-variables/-/helper-hoist-variables-7.10.3.tgz#d554f52baf1657ffbd7e5137311abc993bb3f068"
- integrity sha512-9JyafKoBt5h20Yv1+BXQMdcXXavozI1vt401KBiRc2qzUepbVnd7ogVNymY1xkQN9fekGwfxtotH2Yf5xsGzgg==
+"@babel/helper-hoist-variables@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e"
+ integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==
dependencies:
- "@babel/types" "^7.10.3"
+ "@babel/types" "^7.10.4"
-"@babel/helper-member-expression-to-functions@^7.10.1", "@babel/helper-member-expression-to-functions@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fhelper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.3.tgz#bc3663ac81ac57c39148fef4c69bf48a77ba8dd6"
- integrity sha512-q7+37c4EPLSjNb2NmWOjNwj0+BOyYlssuQ58kHEWk1Z78K5i8vTUsteq78HMieRPQSl/NtpQyJfdjt3qZ5V2vw==
+"@babel/helper-member-expression-to-functions@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz#7cd04b57dfcf82fce9aeae7d4e4452fa31b8c7c4"
+ integrity sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A==
dependencies:
- "@babel/types" "^7.10.3"
+ "@babel/types" "^7.10.4"
-"@babel/helper-module-imports@^7.10.1", "@babel/helper-module-imports@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fhelper-module-imports/-/helper-module-imports-7.10.3.tgz#766fa1d57608e53e5676f23ae498ec7a95e1b11a"
- integrity sha512-Jtqw5M9pahLSUWA+76nhK9OG8nwYXzhQzVIGFoNaHnXF/r4l7kz4Fl0UAW7B6mqC5myoJiBP5/YQlXQTMfHI9w==
+"@babel/helper-module-imports@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620"
+ integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==
dependencies:
- "@babel/types" "^7.10.3"
+ "@babel/types" "^7.10.4"
-"@babel/helper-module-transforms@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fhelper-module-transforms/-/helper-module-transforms-7.10.1.tgz#24e2f08ee6832c60b157bb0936c86bef7210c622"
- integrity sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==
+"@babel/helper-module-transforms@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-module-transforms/-/helper-module-transforms-7.10.4.tgz#ca1f01fdb84e48c24d7506bb818c961f1da8805d"
+ integrity sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q==
dependencies:
- "@babel/helper-module-imports" "^7.10.1"
- "@babel/helper-replace-supers" "^7.10.1"
- "@babel/helper-simple-access" "^7.10.1"
- "@babel/helper-split-export-declaration" "^7.10.1"
- "@babel/template" "^7.10.1"
- "@babel/types" "^7.10.1"
+ "@babel/helper-module-imports" "^7.10.4"
+ "@babel/helper-replace-supers" "^7.10.4"
+ "@babel/helper-simple-access" "^7.10.4"
+ "@babel/helper-split-export-declaration" "^7.10.4"
+ "@babel/template" "^7.10.4"
+ "@babel/types" "^7.10.4"
lodash "^4.17.13"
-"@babel/helper-optimise-call-expression@^7.10.1", "@babel/helper-optimise-call-expression@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fhelper-optimise-call-expression/-/helper-optimise-call-expression-7.10.3.tgz#f53c4b6783093195b0f69330439908841660c530"
- integrity sha512-kT2R3VBH/cnSz+yChKpaKRJQJWxdGoc6SjioRId2wkeV3bK0wLLioFpJROrX0U4xr/NmxSSAWT/9Ih5snwIIzg==
+"@babel/helper-optimise-call-expression@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673"
+ integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==
dependencies:
- "@babel/types" "^7.10.3"
+ "@babel/types" "^7.10.4"
-"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.1", "@babel/helper-plugin-utils@^7.10.3", "@babel/helper-plugin-utils@^7.8.0":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz#aac45cccf8bc1873b99a85f34bceef3beb5d3244"
- integrity sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g==
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375"
+ integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==
-"@babel/helper-regex@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fhelper-regex/-/helper-regex-7.10.1.tgz#021cf1a7ba99822f993222a001cc3fec83255b96"
- integrity sha512-7isHr19RsIJWWLLFn21ubFt223PjQyg1HY7CZEMRr820HttHPpVvrsIN3bUOo44DEfFV4kBXO7Abbn9KTUZV7g==
+"@babel/helper-regex@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-regex/-/helper-regex-7.10.4.tgz#59b373daaf3458e5747dece71bbaf45f9676af6d"
+ integrity sha512-inWpnHGgtg5NOF0eyHlC0/74/VkdRITY9dtTpB2PrxKKn+AkVMRiZz/Adrx+Ssg+MLDesi2zohBW6MVq6b4pOQ==
dependencies:
lodash "^4.17.13"
-"@babel/helper-remap-async-to-generator@^7.10.1", "@babel/helper-remap-async-to-generator@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fhelper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.3.tgz#18564f8a6748be466970195b876e8bba3bccf442"
- integrity sha512-sLB7666ARbJUGDO60ZormmhQOyqMX/shKBXZ7fy937s+3ID8gSrneMvKSSb+8xIM5V7Vn6uNVtOY1vIm26XLtA==
+"@babel/helper-remap-async-to-generator@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz#fce8bea4e9690bbe923056ded21e54b4e8b68ed5"
+ integrity sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.10.1"
- "@babel/helper-wrap-function" "^7.10.1"
- "@babel/template" "^7.10.3"
- "@babel/traverse" "^7.10.3"
- "@babel/types" "^7.10.3"
+ "@babel/helper-annotate-as-pure" "^7.10.4"
+ "@babel/helper-wrap-function" "^7.10.4"
+ "@babel/template" "^7.10.4"
+ "@babel/traverse" "^7.10.4"
+ "@babel/types" "^7.10.4"
-"@babel/helper-replace-supers@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fhelper-replace-supers/-/helper-replace-supers-7.10.1.tgz#ec6859d20c5d8087f6a2dc4e014db7228975f13d"
- integrity sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==
+"@babel/helper-replace-supers@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf"
+ integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==
dependencies:
- "@babel/helper-member-expression-to-functions" "^7.10.1"
- "@babel/helper-optimise-call-expression" "^7.10.1"
- "@babel/traverse" "^7.10.1"
- "@babel/types" "^7.10.1"
+ "@babel/helper-member-expression-to-functions" "^7.10.4"
+ "@babel/helper-optimise-call-expression" "^7.10.4"
+ "@babel/traverse" "^7.10.4"
+ "@babel/types" "^7.10.4"
-"@babel/helper-simple-access@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fhelper-simple-access/-/helper-simple-access-7.10.1.tgz#08fb7e22ace9eb8326f7e3920a1c2052f13d851e"
- integrity sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==
+"@babel/helper-simple-access@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461"
+ integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==
dependencies:
- "@babel/template" "^7.10.1"
- "@babel/types" "^7.10.1"
+ "@babel/template" "^7.10.4"
+ "@babel/types" "^7.10.4"
-"@babel/helper-split-export-declaration@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fhelper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz#c6f4be1cbc15e3a868e4c64a17d5d31d754da35f"
- integrity sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==
+"@babel/helper-split-export-declaration@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz#2c70576eaa3b5609b24cb99db2888cc3fc4251d1"
+ integrity sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==
dependencies:
- "@babel/types" "^7.10.1"
+ "@babel/types" "^7.10.4"
-"@babel/helper-validator-identifier@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz#60d9847f98c4cea1b279e005fdb7c28be5412d15"
- integrity sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw==
+"@babel/helper-validator-identifier@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2"
+ integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==
-"@babel/helper-wrap-function@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fhelper-wrap-function/-/helper-wrap-function-7.10.1.tgz#956d1310d6696257a7afd47e4c42dfda5dfcedc9"
- integrity sha512-C0MzRGteVDn+H32/ZgbAv5r56f2o1fZSA/rj/TYo8JEJNHg+9BdSmKBUND0shxWRztWhjlT2cvHYuynpPsVJwQ==
+"@babel/helper-wrap-function@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87"
+ integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==
dependencies:
- "@babel/helper-function-name" "^7.10.1"
- "@babel/template" "^7.10.1"
- "@babel/traverse" "^7.10.1"
- "@babel/types" "^7.10.1"
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/template" "^7.10.4"
+ "@babel/traverse" "^7.10.4"
+ "@babel/types" "^7.10.4"
-"@babel/helpers@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fhelpers/-/helpers-7.10.1.tgz#a6827b7cb975c9d9cef5fd61d919f60d8844a973"
- integrity sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw==
+"@babel/helpers@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhelpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044"
+ integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==
dependencies:
- "@babel/template" "^7.10.1"
- "@babel/traverse" "^7.10.1"
- "@babel/types" "^7.10.1"
+ "@babel/template" "^7.10.4"
+ "@babel/traverse" "^7.10.4"
+ "@babel/types" "^7.10.4"
-"@babel/highlight@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fhighlight/-/highlight-7.10.3.tgz#c633bb34adf07c5c13156692f5922c81ec53f28d"
- integrity sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==
+"@babel/highlight@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fhighlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143"
+ integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==
dependencies:
- "@babel/helper-validator-identifier" "^7.10.3"
+ "@babel/helper-validator-identifier" "^7.10.4"
chalk "^2.0.0"
js-tokens "^4.0.0"
-"@babel/parser@^7.1.0", "@babel/parser@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fparser/-/parser-7.10.3.tgz#7e71d892b0d6e7d04a1af4c3c79d72c1f10f5315"
- integrity sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA==
+"@babel/parser@^7.1.0", "@babel/parser@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fparser/-/parser-7.10.4.tgz#9eedf27e1998d87739fb5028a5120557c06a1a64"
+ integrity sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==
-"@babel/plugin-proposal-async-generator-functions@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fplugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.3.tgz#5a02453d46e5362e2073c7278beab2e53ad7d939"
- integrity sha512-WUUWM7YTOudF4jZBAJIW9D7aViYC/Fn0Pln4RIHlQALyno3sXSjqmTA4Zy1TKC2D49RCR8Y/Pn4OIUtEypK3CA==
+"@babel/plugin-proposal-async-generator-functions@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.4.tgz#4b65abb3d9bacc6c657aaa413e56696f9f170fc6"
+ integrity sha512-MJbxGSmejEFVOANAezdO39SObkURO5o/8b6fSH6D1pi9RZQt+ldppKPXfqgUWpSQ9asM6xaSaSJIaeWMDRP0Zg==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.3"
- "@babel/helper-remap-async-to-generator" "^7.10.3"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-remap-async-to-generator" "^7.10.4"
"@babel/plugin-syntax-async-generators" "^7.8.0"
-"@babel/plugin-proposal-class-properties@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz#046bc7f6550bb08d9bd1d4f060f5f5a4f1087e01"
- integrity sha512-sqdGWgoXlnOdgMXU+9MbhzwFRgxVLeiGBqTrnuS7LC2IBU31wSsESbTUreT2O418obpfPdGUR2GbEufZF1bpqw==
+"@babel/plugin-proposal-class-properties@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807"
+ integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==
dependencies:
- "@babel/helper-create-class-features-plugin" "^7.10.1"
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-create-class-features-plugin" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-proposal-dynamic-import@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz#e36979dc1dc3b73f6d6816fc4951da2363488ef0"
- integrity sha512-Cpc2yUVHTEGPlmiQzXj026kqwjEQAD9I4ZC16uzdbgWgitg/UHKHLffKNCQZ5+y8jpIZPJcKcwsr2HwPh+w3XA==
+"@babel/plugin-proposal-dynamic-import@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e"
+ integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-dynamic-import" "^7.8.0"
-"@babel/plugin-proposal-json-strings@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz#b1e691ee24c651b5a5e32213222b2379734aff09"
- integrity sha512-m8r5BmV+ZLpWPtMY2mOKN7wre6HIO4gfIiV+eOmsnZABNenrt/kzYBwrh+KOfgumSWpnlGs5F70J8afYMSJMBg==
+"@babel/plugin-proposal-json-strings@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db"
+ integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-json-strings" "^7.8.0"
-"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz#02dca21673842ff2fe763ac253777f235e9bbf78"
- integrity sha512-56cI/uHYgL2C8HVuHOuvVowihhX0sxb3nnfVRzUeVHTWmRHTZrKuAh/OBIMggGU/S1g/1D2CRCXqP+3u7vX7iA==
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a"
+ integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
-"@babel/plugin-proposal-numeric-separator@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz#a9a38bc34f78bdfd981e791c27c6fdcec478c123"
- integrity sha512-jjfym4N9HtCiNfyyLAVD8WqPYeHUrw4ihxuAynWj6zzp2gf9Ey2f7ImhFm6ikB3CLf5Z/zmcJDri6B4+9j9RsA==
+"@babel/plugin-proposal-numeric-separator@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06"
+ integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
- "@babel/plugin-syntax-numeric-separator" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.4"
-"@babel/plugin-proposal-object-rest-spread@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fplugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.3.tgz#b8d0d22f70afa34ad84b7a200ff772f9b9fce474"
- integrity sha512-ZZh5leCIlH9lni5bU/wB/UcjtcVLgR8gc+FAgW2OOY+m9h1II3ItTO1/cewNUcsIDZSYcSaz/rYVls+Fb0ExVQ==
+"@babel/plugin-proposal-object-rest-spread@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz#50129ac216b9a6a55b3853fdd923e74bf553a4c0"
+ integrity sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.3"
+ "@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-object-rest-spread" "^7.8.0"
- "@babel/plugin-transform-parameters" "^7.10.1"
+ "@babel/plugin-transform-parameters" "^7.10.4"
-"@babel/plugin-proposal-optional-catch-binding@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz#c9f86d99305f9fa531b568ff5ab8c964b8b223d2"
- integrity sha512-VqExgeE62YBqI3ogkGoOJp1R6u12DFZjqwJhqtKc2o5m1YTUuUWnos7bZQFBhwkxIFpWYJ7uB75U7VAPPiKETA==
+"@babel/plugin-proposal-optional-catch-binding@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd"
+ integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
-"@babel/plugin-proposal-optional-chaining@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fplugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.3.tgz#9a726f94622b653c0a3a7a59cdce94730f526f7c"
- integrity sha512-yyG3n9dJ1vZ6v5sfmIlMMZ8azQoqx/5/nZTSWX1td6L1H1bsjzA8TInDChpafCZiJkeOFzp/PtrfigAQXxI1Ng==
+"@babel/plugin-proposal-optional-chaining@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.4.tgz#750f1255e930a1f82d8cdde45031f81a0d0adff7"
+ integrity sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.3"
+ "@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-optional-chaining" "^7.8.0"
-"@babel/plugin-proposal-private-methods@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz#ed85e8058ab0fe309c3f448e5e1b73ca89cdb598"
- integrity sha512-RZecFFJjDiQ2z6maFprLgrdnm0OzoC23Mx89xf1CcEsxmHuzuXOdniEuI+S3v7vjQG4F5sa6YtUp+19sZuSxHg==
+"@babel/plugin-proposal-private-methods@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909"
+ integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==
dependencies:
- "@babel/helper-create-class-features-plugin" "^7.10.1"
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-create-class-features-plugin" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-proposal-unicode-property-regex@^7.10.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz#dc04feb25e2dd70c12b05d680190e138fa2c0c6f"
- integrity sha512-JjfngYRvwmPwmnbRZyNiPFI8zxCZb8euzbCG/LxyKdeTb59tVciKo9GK9bi6JYKInk1H11Dq9j/zRqIH4KigfQ==
+"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d"
+ integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.10.1"
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-create-regexp-features-plugin" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4":
version "7.8.4"
@@ -361,12 +361,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-class-properties@^7.10.1", "@babel/plugin-syntax-class-properties@^7.8.3":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz#d5bc0645913df5b17ad7eda0fa2308330bde34c5"
- integrity sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ==
+"@babel/plugin-syntax-class-properties@^7.10.4", "@babel/plugin-syntax-class-properties@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c"
+ integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-dynamic-import@^7.8.0":
version "7.8.3"
@@ -376,11 +376,11 @@
"@babel/helper-plugin-utils" "^7.8.0"
"@babel/plugin-syntax-import-meta@^7.8.3":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.1.tgz#3e59120ed8b3c2ccc5abb1cfc7aaa3ea01cd36b6"
- integrity sha512-ypC4jwfIVF72og0dgvEcFRdOM2V9Qm1tu7RGmdZOlhsccyK0wisXmMObGuWEOd5jQ+K9wcIgSNftCpk2vkjUfQ==
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
+ integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3":
version "7.8.3"
@@ -390,11 +390,11 @@
"@babel/helper-plugin-utils" "^7.8.0"
"@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.1.tgz#fffee77b4934ce77f3b427649ecdddbec1958550"
- integrity sha512-XyHIFa9kdrgJS91CUH+ccPVTnJShr8nLGc5bG2IhGXv5p1Rd+8BleGE5yzIg2Nc1QZAdHDa0Qp4m6066OL96Iw==
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
+ integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
version "7.8.3"
@@ -403,12 +403,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-numeric-separator@^7.10.1", "@babel/plugin-syntax-numeric-separator@^7.8.3":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz#25761ee7410bc8cf97327ba741ee94e4a61b7d99"
- integrity sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg==
+"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
+ integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3":
version "7.8.3"
@@ -431,328 +431,328 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-top-level-await@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz#8b8733f8c57397b3eaa47ddba8841586dcaef362"
- integrity sha512-hgA5RYkmZm8FTFT3yu2N9Bx7yVVOKYT6yEdXXo6j2JTm0wNxgqaGeQVaSHRjhfnQbX91DtjFB6McRFSlcJH3xQ==
+"@babel/plugin-syntax-top-level-await@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d"
+ integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-arrow-functions@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz#cb5ee3a36f0863c06ead0b409b4cc43a889b295b"
- integrity sha512-6AZHgFJKP3DJX0eCNJj01RpytUa3SOGawIxweHkNX2L6PYikOZmoh5B0d7hIHaIgveMjX990IAa/xK7jRTN8OA==
+"@babel/plugin-transform-arrow-functions@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd"
+ integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-async-to-generator@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz#e5153eb1a3e028f79194ed8a7a4bf55f862b2062"
- integrity sha512-XCgYjJ8TY2slj6SReBUyamJn3k2JLUIiiR5b6t1mNCMSvv7yx+jJpaewakikp0uWFQSF7ChPPoe3dHmXLpISkg==
+"@babel/plugin-transform-async-to-generator@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37"
+ integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==
dependencies:
- "@babel/helper-module-imports" "^7.10.1"
- "@babel/helper-plugin-utils" "^7.10.1"
- "@babel/helper-remap-async-to-generator" "^7.10.1"
+ "@babel/helper-module-imports" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-remap-async-to-generator" "^7.10.4"
-"@babel/plugin-transform-block-scoped-functions@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz#146856e756d54b20fff14b819456b3e01820b85d"
- integrity sha512-B7K15Xp8lv0sOJrdVAoukKlxP9N59HS48V1J3U/JGj+Ad+MHq+am6xJVs85AgXrQn4LV8vaYFOB+pr/yIuzW8Q==
+"@babel/plugin-transform-block-scoped-functions@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8"
+ integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-block-scoping@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz#47092d89ca345811451cd0dc5d91605982705d5e"
- integrity sha512-8bpWG6TtF5akdhIm/uWTyjHqENpy13Fx8chg7pFH875aNLwX8JxIxqm08gmAT+Whe6AOmaTeLPe7dpLbXt+xUw==
+"@babel/plugin-transform-block-scoping@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.4.tgz#a670d1364bb5019a621b9ea2001482876d734787"
+ integrity sha512-J3b5CluMg3hPUii2onJDRiaVbPtKFPLEaV5dOPY5OeAbDi1iU/UbbFFTgwb7WnanaDy7bjU35kc26W3eM5Qa0A==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
lodash "^4.17.13"
-"@babel/plugin-transform-classes@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-classes/-/plugin-transform-classes-7.10.3.tgz#8d9a656bc3d01f3ff69e1fccb354b0f9d72ac544"
- integrity sha512-irEX0ChJLaZVC7FvvRoSIxJlmk0IczFLcwaRXUArBKYHCHbOhe57aG8q3uw/fJsoSXvZhjRX960hyeAGlVBXZw==
+"@babel/plugin-transform-classes@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7"
+ integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.10.1"
- "@babel/helper-define-map" "^7.10.3"
- "@babel/helper-function-name" "^7.10.3"
- "@babel/helper-optimise-call-expression" "^7.10.3"
- "@babel/helper-plugin-utils" "^7.10.3"
- "@babel/helper-replace-supers" "^7.10.1"
- "@babel/helper-split-export-declaration" "^7.10.1"
+ "@babel/helper-annotate-as-pure" "^7.10.4"
+ "@babel/helper-define-map" "^7.10.4"
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/helper-optimise-call-expression" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-replace-supers" "^7.10.4"
+ "@babel/helper-split-export-declaration" "^7.10.4"
globals "^11.1.0"
-"@babel/plugin-transform-computed-properties@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.3.tgz#d3aa6eef67cb967150f76faff20f0abbf553757b"
- integrity sha512-GWzhaBOsdbjVFav96drOz7FzrcEW6AP5nax0gLIpstiFaI3LOb2tAg06TimaWU6YKOfUACK3FVrxPJ4GSc5TgA==
+"@babel/plugin-transform-computed-properties@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb"
+ integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.3"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-destructuring@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz#abd58e51337815ca3a22a336b85f62b998e71907"
- integrity sha512-V/nUc4yGWG71OhaTH705pU8ZSdM6c1KmmLP8ys59oOYbT7RpMYAR3MsVOt6OHL0WzG7BlTU076va9fjJyYzJMA==
+"@babel/plugin-transform-destructuring@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5"
+ integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-dotall-regex@^7.10.1", "@babel/plugin-transform-dotall-regex@^7.4.4":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz#920b9fec2d78bb57ebb64a644d5c2ba67cc104ee"
- integrity sha512-19VIMsD1dp02RvduFUmfzj8uknaO3uiHHF0s3E1OHnVsNj8oge8EQ5RzHRbJjGSetRnkEuBYO7TG1M5kKjGLOA==
+"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee"
+ integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.10.1"
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-create-regexp-features-plugin" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-duplicate-keys@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz#c900a793beb096bc9d4d0a9d0cde19518ffc83b9"
- integrity sha512-wIEpkX4QvX8Mo9W6XF3EdGttrIPZWozHfEaDTU0WJD/TDnXMvdDh30mzUl/9qWhnf7naicYartcEfUghTCSNpA==
+"@babel/plugin-transform-duplicate-keys@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47"
+ integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-exponentiation-operator@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz#279c3116756a60dd6e6f5e488ba7957db9c59eb3"
- integrity sha512-lr/przdAbpEA2BUzRvjXdEDLrArGRRPwbaF9rvayuHRvdQ7lUTTkZnhZrJ4LE2jvgMRFF4f0YuPQ20vhiPYxtA==
+"@babel/plugin-transform-exponentiation-operator@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e"
+ integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==
dependencies:
- "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.1"
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-for-of@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz#ff01119784eb0ee32258e8646157ba2501fcfda5"
- integrity sha512-US8KCuxfQcn0LwSCMWMma8M2R5mAjJGsmoCBVwlMygvmDUMkTCykc84IqN1M7t+agSfOmLYTInLCHJM+RUoz+w==
+"@babel/plugin-transform-for-of@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9"
+ integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-function-name@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz#4ed46fd6e1d8fde2a2ec7b03c66d853d2c92427d"
- integrity sha512-//bsKsKFBJfGd65qSNNh1exBy5Y9gD9ZN+DvrJ8f7HXr4avE5POW6zB7Rj6VnqHV33+0vXWUwJT0wSHubiAQkw==
+"@babel/plugin-transform-function-name@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7"
+ integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==
dependencies:
- "@babel/helper-function-name" "^7.10.1"
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-literals@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz#5794f8da82846b22e4e6631ea1658bce708eb46a"
- integrity sha512-qi0+5qgevz1NHLZroObRm5A+8JJtibb7vdcPQF1KQE12+Y/xxl8coJ+TpPW9iRq+Mhw/NKLjm+5SHtAHCC7lAw==
+"@babel/plugin-transform-literals@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c"
+ integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-member-expression-literals@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz#90347cba31bca6f394b3f7bd95d2bbfd9fce2f39"
- integrity sha512-UmaWhDokOFT2GcgU6MkHC11i0NQcL63iqeufXWfRy6pUOGYeCGEKhvfFO6Vz70UfYJYHwveg62GS83Rvpxn+NA==
+"@babel/plugin-transform-member-expression-literals@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7"
+ integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-modules-amd@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz#65950e8e05797ebd2fe532b96e19fc5482a1d52a"
- integrity sha512-31+hnWSFRI4/ACFr1qkboBbrTxoBIzj7qA69qlq8HY8p7+YCzkCT6/TvQ1a4B0z27VeWtAeJd6pr5G04dc1iHw==
+"@babel/plugin-transform-modules-amd@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.4.tgz#cb407c68b862e4c1d13a2fc738c7ec5ed75fc520"
+ integrity sha512-3Fw+H3WLUrTlzi3zMiZWp3AR4xadAEMv6XRCYnd5jAlLM61Rn+CRJaZMaNvIpcJpQ3vs1kyifYvEVPFfoSkKOA==
dependencies:
- "@babel/helper-module-transforms" "^7.10.1"
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-module-transforms" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
babel-plugin-dynamic-import-node "^2.3.3"
-"@babel/plugin-transform-modules-commonjs@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz#d5ff4b4413ed97ffded99961056e1fb980fb9301"
- integrity sha512-AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg==
+"@babel/plugin-transform-modules-commonjs@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0"
+ integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==
dependencies:
- "@babel/helper-module-transforms" "^7.10.1"
- "@babel/helper-plugin-utils" "^7.10.1"
- "@babel/helper-simple-access" "^7.10.1"
+ "@babel/helper-module-transforms" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-simple-access" "^7.10.4"
babel-plugin-dynamic-import-node "^2.3.3"
-"@babel/plugin-transform-modules-systemjs@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.3.tgz#004ae727b122b7b146b150d50cba5ffbff4ac56b"
- integrity sha512-GWXWQMmE1GH4ALc7YXW56BTh/AlzvDWhUNn9ArFF0+Cz5G8esYlVbXfdyHa1xaD1j+GnBoCeoQNlwtZTVdiG/A==
+"@babel/plugin-transform-modules-systemjs@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.4.tgz#8f576afd943ac2f789b35ded0a6312f929c633f9"
+ integrity sha512-Tb28LlfxrTiOTGtZFsvkjpyjCl9IoaRI52AEU/VIwOwvDQWtbNJsAqTXzh+5R7i74e/OZHH2c2w2fsOqAfnQYQ==
dependencies:
- "@babel/helper-hoist-variables" "^7.10.3"
- "@babel/helper-module-transforms" "^7.10.1"
- "@babel/helper-plugin-utils" "^7.10.3"
+ "@babel/helper-hoist-variables" "^7.10.4"
+ "@babel/helper-module-transforms" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
babel-plugin-dynamic-import-node "^2.3.3"
-"@babel/plugin-transform-modules-umd@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz#ea080911ffc6eb21840a5197a39ede4ee67b1595"
- integrity sha512-EIuiRNMd6GB6ulcYlETnYYfgv4AxqrswghmBRQbWLHZxN4s7mupxzglnHqk9ZiUpDI4eRWewedJJNj67PWOXKA==
+"@babel/plugin-transform-modules-umd@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e"
+ integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==
dependencies:
- "@babel/helper-module-transforms" "^7.10.1"
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-module-transforms" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-named-capturing-groups-regex@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.3.tgz#a4f8444d1c5a46f35834a410285f2c901c007ca6"
- integrity sha512-I3EH+RMFyVi8Iy/LekQm948Z4Lz4yKT7rK+vuCAeRm0kTa6Z5W7xuhRxDNJv0FPya/her6AUgrDITb70YHtTvA==
+"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6"
+ integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.8.3"
+ "@babel/helper-create-regexp-features-plugin" "^7.10.4"
-"@babel/plugin-transform-new-target@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz#6ee41a5e648da7632e22b6fb54012e87f612f324"
- integrity sha512-MBlzPc1nJvbmO9rPr1fQwXOM2iGut+JC92ku6PbiJMMK7SnQc1rytgpopveE3Evn47gzvGYeCdgfCDbZo0ecUw==
+"@babel/plugin-transform-new-target@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888"
+ integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-object-super@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz#2e3016b0adbf262983bf0d5121d676a5ed9c4fde"
- integrity sha512-WnnStUDN5GL+wGQrJylrnnVlFhFmeArINIR9gjhSeYyvroGhBrSAXYg/RHsnfzmsa+onJrTJrEClPzgNmmQ4Gw==
+"@babel/plugin-transform-object-super@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894"
+ integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
- "@babel/helper-replace-supers" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-replace-supers" "^7.10.4"
-"@babel/plugin-transform-parameters@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz#b25938a3c5fae0354144a720b07b32766f683ddd"
- integrity sha512-tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg==
+"@babel/plugin-transform-parameters@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-parameters/-/plugin-transform-parameters-7.10.4.tgz#7b4d137c87ea7adc2a0f3ebf53266871daa6fced"
+ integrity sha512-RurVtZ/D5nYfEg0iVERXYKEgDFeesHrHfx8RT05Sq57ucj2eOYAP6eu5fynL4Adju4I/mP/I6SO0DqNWAXjfLQ==
dependencies:
- "@babel/helper-get-function-arity" "^7.10.1"
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-get-function-arity" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-property-literals@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz#cffc7315219230ed81dc53e4625bf86815b6050d"
- integrity sha512-Kr6+mgag8auNrgEpbfIWzdXYOvqDHZOF0+Bx2xh4H2EDNwcbRb9lY6nkZg8oSjsX+DH9Ebxm9hOqtKW+gRDeNA==
+"@babel/plugin-transform-property-literals@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0"
+ integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-regenerator@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-regenerator/-/plugin-transform-regenerator-7.10.3.tgz#6ec680f140a5ceefd291c221cb7131f6d7e8cb6d"
- integrity sha512-H5kNeW0u8mbk0qa1jVIVTeJJL6/TJ81ltD4oyPx0P499DhMJrTmmIFCmJ3QloGpQG8K9symccB7S7SJpCKLwtw==
+"@babel/plugin-transform-regenerator@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63"
+ integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==
dependencies:
regenerator-transform "^0.14.2"
-"@babel/plugin-transform-reserved-words@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz#0fc1027312b4d1c3276a57890c8ae3bcc0b64a86"
- integrity sha512-qN1OMoE2nuqSPmpTqEM7OvJ1FkMEV+BjVeZZm9V9mq/x1JLKQ4pcv8riZJMNN3u2AUGl0ouOMjRr2siecvHqUQ==
+"@babel/plugin-transform-reserved-words@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd"
+ integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-shorthand-properties@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz#e8b54f238a1ccbae482c4dce946180ae7b3143f3"
- integrity sha512-AR0E/lZMfLstScFwztApGeyTHJ5u3JUKMjneqRItWeEqDdHWZwAOKycvQNCasCK/3r5YXsuNG25funcJDu7Y2g==
+"@babel/plugin-transform-shorthand-properties@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6"
+ integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-spread@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz#0c6d618a0c4461a274418460a28c9ccf5239a7c8"
- integrity sha512-8wTPym6edIrClW8FI2IoaePB91ETOtg36dOkj3bYcNe7aDMN2FXEoUa+WrmPc4xa1u2PQK46fUX2aCb+zo9rfw==
+"@babel/plugin-transform-spread@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz#4e2c85ea0d6abaee1b24dcfbbae426fe8d674cff"
+ integrity sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-sticky-regex@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz#90fc89b7526228bed9842cff3588270a7a393b00"
- integrity sha512-j17ojftKjrL7ufX8ajKvwRilwqTok4q+BjkknmQw9VNHnItTyMP5anPFzxFJdCQs7clLcWpCV3ma+6qZWLnGMA==
+"@babel/plugin-transform-sticky-regex@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d"
+ integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
- "@babel/helper-regex" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-regex" "^7.10.4"
-"@babel/plugin-transform-template-literals@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-template-literals/-/plugin-transform-template-literals-7.10.3.tgz#69d39b3d44b31e7b4864173322565894ce939b25"
- integrity sha512-yaBn9OpxQra/bk0/CaA4wr41O0/Whkg6nqjqApcinxM7pro51ojhX6fv1pimAnVjVfDy14K0ULoRL70CA9jWWA==
+"@babel/plugin-transform-template-literals@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-template-literals/-/plugin-transform-template-literals-7.10.4.tgz#e6375407b30fcb7fcfdbba3bb98ef3e9d36df7bc"
+ integrity sha512-4NErciJkAYe+xI5cqfS8pV/0ntlY5N5Ske/4ImxAVX7mk9Rxt2bwDTGv1Msc2BRJvWQcmYEC+yoMLdX22aE4VQ==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.10.1"
- "@babel/helper-plugin-utils" "^7.10.3"
+ "@babel/helper-annotate-as-pure" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-typeof-symbol@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz#60c0239b69965d166b80a84de7315c1bc7e0bb0e"
- integrity sha512-qX8KZcmbvA23zDi+lk9s6hC1FM7jgLHYIjuLgULgc8QtYnmB3tAVIYkNoKRQ75qWBeyzcoMoK8ZQmogGtC/w0g==
+"@babel/plugin-transform-typeof-symbol@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc"
+ integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-unicode-escapes@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz#add0f8483dab60570d9e03cecef6c023aa8c9940"
- integrity sha512-zZ0Poh/yy1d4jeDWpx/mNwbKJVwUYJX73q+gyh4bwtG0/iUlzdEu0sLMda8yuDFS6LBQlT/ST1SJAR6zYwXWgw==
+"@babel/plugin-transform-unicode-escapes@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007"
+ integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==
dependencies:
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-unicode-regex@^7.10.1":
- version "7.10.1"
- resolved "https://registry.toot.party/@babel%2fplugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz#6b58f2aea7b68df37ac5025d9c88752443a6b43f"
- integrity sha512-Y/2a2W299k0VIUdbqYm9X2qS6fE0CUBhhiPpimK6byy7OJ/kORLlIX+J6UrjgNu5awvs62k+6RSslxhcvVw2Tw==
+"@babel/plugin-transform-unicode-regex@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fplugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8"
+ integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.10.1"
- "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-create-regexp-features-plugin" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
"@babel/preset-env@^7.9.5":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fpreset-env/-/preset-env-7.10.3.tgz#3e58c9861bbd93b6a679987c7e4bd365c56c80c9"
- integrity sha512-jHaSUgiewTmly88bJtMHbOd1bJf2ocYxb5BWKSDQIP5tmgFuS/n0gl+nhSrYDhT33m0vPxp+rP8oYYgPgMNQlg==
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fpreset-env/-/preset-env-7.10.4.tgz#fbf57f9a803afd97f4f32e4f798bb62e4b2bef5f"
+ integrity sha512-tcmuQ6vupfMZPrLrc38d0sF2OjLT3/bZ0dry5HchNCQbrokoQi4reXqclvkkAT5b+gWc23meVWpve5P/7+w/zw==
dependencies:
- "@babel/compat-data" "^7.10.3"
- "@babel/helper-compilation-targets" "^7.10.2"
- "@babel/helper-module-imports" "^7.10.3"
- "@babel/helper-plugin-utils" "^7.10.3"
- "@babel/plugin-proposal-async-generator-functions" "^7.10.3"
- "@babel/plugin-proposal-class-properties" "^7.10.1"
- "@babel/plugin-proposal-dynamic-import" "^7.10.1"
- "@babel/plugin-proposal-json-strings" "^7.10.1"
- "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1"
- "@babel/plugin-proposal-numeric-separator" "^7.10.1"
- "@babel/plugin-proposal-object-rest-spread" "^7.10.3"
- "@babel/plugin-proposal-optional-catch-binding" "^7.10.1"
- "@babel/plugin-proposal-optional-chaining" "^7.10.3"
- "@babel/plugin-proposal-private-methods" "^7.10.1"
- "@babel/plugin-proposal-unicode-property-regex" "^7.10.1"
+ "@babel/compat-data" "^7.10.4"
+ "@babel/helper-compilation-targets" "^7.10.4"
+ "@babel/helper-module-imports" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-proposal-async-generator-functions" "^7.10.4"
+ "@babel/plugin-proposal-class-properties" "^7.10.4"
+ "@babel/plugin-proposal-dynamic-import" "^7.10.4"
+ "@babel/plugin-proposal-json-strings" "^7.10.4"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4"
+ "@babel/plugin-proposal-numeric-separator" "^7.10.4"
+ "@babel/plugin-proposal-object-rest-spread" "^7.10.4"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.10.4"
+ "@babel/plugin-proposal-optional-chaining" "^7.10.4"
+ "@babel/plugin-proposal-private-methods" "^7.10.4"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.10.4"
"@babel/plugin-syntax-async-generators" "^7.8.0"
- "@babel/plugin-syntax-class-properties" "^7.10.1"
+ "@babel/plugin-syntax-class-properties" "^7.10.4"
"@babel/plugin-syntax-dynamic-import" "^7.8.0"
"@babel/plugin-syntax-json-strings" "^7.8.0"
"@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
- "@babel/plugin-syntax-numeric-separator" "^7.10.1"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.4"
"@babel/plugin-syntax-object-rest-spread" "^7.8.0"
"@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
"@babel/plugin-syntax-optional-chaining" "^7.8.0"
- "@babel/plugin-syntax-top-level-await" "^7.10.1"
- "@babel/plugin-transform-arrow-functions" "^7.10.1"
- "@babel/plugin-transform-async-to-generator" "^7.10.1"
- "@babel/plugin-transform-block-scoped-functions" "^7.10.1"
- "@babel/plugin-transform-block-scoping" "^7.10.1"
- "@babel/plugin-transform-classes" "^7.10.3"
- "@babel/plugin-transform-computed-properties" "^7.10.3"
- "@babel/plugin-transform-destructuring" "^7.10.1"
- "@babel/plugin-transform-dotall-regex" "^7.10.1"
- "@babel/plugin-transform-duplicate-keys" "^7.10.1"
- "@babel/plugin-transform-exponentiation-operator" "^7.10.1"
- "@babel/plugin-transform-for-of" "^7.10.1"
- "@babel/plugin-transform-function-name" "^7.10.1"
- "@babel/plugin-transform-literals" "^7.10.1"
- "@babel/plugin-transform-member-expression-literals" "^7.10.1"
- "@babel/plugin-transform-modules-amd" "^7.10.1"
- "@babel/plugin-transform-modules-commonjs" "^7.10.1"
- "@babel/plugin-transform-modules-systemjs" "^7.10.3"
- "@babel/plugin-transform-modules-umd" "^7.10.1"
- "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.3"
- "@babel/plugin-transform-new-target" "^7.10.1"
- "@babel/plugin-transform-object-super" "^7.10.1"
- "@babel/plugin-transform-parameters" "^7.10.1"
- "@babel/plugin-transform-property-literals" "^7.10.1"
- "@babel/plugin-transform-regenerator" "^7.10.3"
- "@babel/plugin-transform-reserved-words" "^7.10.1"
- "@babel/plugin-transform-shorthand-properties" "^7.10.1"
- "@babel/plugin-transform-spread" "^7.10.1"
- "@babel/plugin-transform-sticky-regex" "^7.10.1"
- "@babel/plugin-transform-template-literals" "^7.10.3"
- "@babel/plugin-transform-typeof-symbol" "^7.10.1"
- "@babel/plugin-transform-unicode-escapes" "^7.10.1"
- "@babel/plugin-transform-unicode-regex" "^7.10.1"
+ "@babel/plugin-syntax-top-level-await" "^7.10.4"
+ "@babel/plugin-transform-arrow-functions" "^7.10.4"
+ "@babel/plugin-transform-async-to-generator" "^7.10.4"
+ "@babel/plugin-transform-block-scoped-functions" "^7.10.4"
+ "@babel/plugin-transform-block-scoping" "^7.10.4"
+ "@babel/plugin-transform-classes" "^7.10.4"
+ "@babel/plugin-transform-computed-properties" "^7.10.4"
+ "@babel/plugin-transform-destructuring" "^7.10.4"
+ "@babel/plugin-transform-dotall-regex" "^7.10.4"
+ "@babel/plugin-transform-duplicate-keys" "^7.10.4"
+ "@babel/plugin-transform-exponentiation-operator" "^7.10.4"
+ "@babel/plugin-transform-for-of" "^7.10.4"
+ "@babel/plugin-transform-function-name" "^7.10.4"
+ "@babel/plugin-transform-literals" "^7.10.4"
+ "@babel/plugin-transform-member-expression-literals" "^7.10.4"
+ "@babel/plugin-transform-modules-amd" "^7.10.4"
+ "@babel/plugin-transform-modules-commonjs" "^7.10.4"
+ "@babel/plugin-transform-modules-systemjs" "^7.10.4"
+ "@babel/plugin-transform-modules-umd" "^7.10.4"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4"
+ "@babel/plugin-transform-new-target" "^7.10.4"
+ "@babel/plugin-transform-object-super" "^7.10.4"
+ "@babel/plugin-transform-parameters" "^7.10.4"
+ "@babel/plugin-transform-property-literals" "^7.10.4"
+ "@babel/plugin-transform-regenerator" "^7.10.4"
+ "@babel/plugin-transform-reserved-words" "^7.10.4"
+ "@babel/plugin-transform-shorthand-properties" "^7.10.4"
+ "@babel/plugin-transform-spread" "^7.10.4"
+ "@babel/plugin-transform-sticky-regex" "^7.10.4"
+ "@babel/plugin-transform-template-literals" "^7.10.4"
+ "@babel/plugin-transform-typeof-symbol" "^7.10.4"
+ "@babel/plugin-transform-unicode-escapes" "^7.10.4"
+ "@babel/plugin-transform-unicode-regex" "^7.10.4"
"@babel/preset-modules" "^0.1.3"
- "@babel/types" "^7.10.3"
+ "@babel/types" "^7.10.4"
browserslist "^4.12.0"
core-js-compat "^3.6.2"
invariant "^2.2.2"
@@ -770,50 +770,51 @@
"@babel/types" "^7.4.4"
esutils "^2.0.2"
-"@babel/runtime@^7.8.4":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2fruntime/-/runtime-7.10.3.tgz#670d002655a7c366540c67f6fd3342cd09500364"
- integrity sha512-RzGO0RLSdokm9Ipe/YD+7ww8X2Ro79qiXZF3HU9ljrM+qnJmH1Vqth+hbiQZy761LnMJTMitHDuKVYTk3k4dLw==
+"@babel/runtime-corejs3@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2fruntime-corejs3/-/runtime-corejs3-7.10.4.tgz#f29fc1990307c4c57b10dbd6ce667b27159d9e0d"
+ integrity sha512-BFlgP2SoLO9HJX9WBwN67gHWMBhDX/eDz64Jajd6mR/UAUzqrNMm99d4qHnVaKscAElZoFiPv+JpR/Siud5lXw==
dependencies:
+ core-js-pure "^3.0.0"
regenerator-runtime "^0.13.4"
-"@babel/runtime@^7.8.7":
+"@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7":
version "7.10.4"
resolved "https://registry.toot.party/@babel%2fruntime/-/runtime-7.10.4.tgz#a6724f1a6b8d2f6ea5236dbfe58c7d7ea9c5eb99"
integrity sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==
dependencies:
regenerator-runtime "^0.13.4"
-"@babel/template@^7.10.1", "@babel/template@^7.10.3", "@babel/template@^7.3.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2ftemplate/-/template-7.10.3.tgz#4d13bc8e30bf95b0ce9d175d30306f42a2c9a7b8"
- integrity sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==
+"@babel/template@^7.10.4", "@babel/template@^7.3.3":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2ftemplate/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278"
+ integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==
dependencies:
- "@babel/code-frame" "^7.10.3"
- "@babel/parser" "^7.10.3"
- "@babel/types" "^7.10.3"
+ "@babel/code-frame" "^7.10.4"
+ "@babel/parser" "^7.10.4"
+ "@babel/types" "^7.10.4"
-"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.1", "@babel/traverse@^7.10.3":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2ftraverse/-/traverse-7.10.3.tgz#0b01731794aa7b77b214bcd96661f18281155d7e"
- integrity sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==
+"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2ftraverse/-/traverse-7.10.4.tgz#e642e5395a3b09cc95c8e74a27432b484b697818"
+ integrity sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==
dependencies:
- "@babel/code-frame" "^7.10.3"
- "@babel/generator" "^7.10.3"
- "@babel/helper-function-name" "^7.10.3"
- "@babel/helper-split-export-declaration" "^7.10.1"
- "@babel/parser" "^7.10.3"
- "@babel/types" "^7.10.3"
+ "@babel/code-frame" "^7.10.4"
+ "@babel/generator" "^7.10.4"
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/helper-split-export-declaration" "^7.10.4"
+ "@babel/parser" "^7.10.4"
+ "@babel/types" "^7.10.4"
debug "^4.1.0"
globals "^11.1.0"
lodash "^4.17.13"
-"@babel/types@^7.0.0", "@babel/types@^7.10.1", "@babel/types@^7.10.3", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
- version "7.10.3"
- resolved "https://registry.toot.party/@babel%2ftypes/-/types-7.10.3.tgz#6535e3b79fea86a6b09e012ea8528f935099de8e"
- integrity sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==
+"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
+ version "7.10.4"
+ resolved "https://registry.toot.party/@babel%2ftypes/-/types-7.10.4.tgz#369517188352e18219981efd156bfdb199fff1ee"
+ integrity sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==
dependencies:
- "@babel/helper-validator-identifier" "^7.10.3"
+ "@babel/helper-validator-identifier" "^7.10.4"
lodash "^4.17.13"
to-fast-properties "^2.0.0"
@@ -1526,17 +1527,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
resolved "https://registry.toot.party/ajv-keywords/-/ajv-keywords-3.5.0.tgz#5c894537098785926d71e696114a53ce768ed773"
integrity sha512-eyoaac3btgU8eJlvh01En8OCKzRqlLe2G5jDsCr3RiE2uLGMEEB1aaGwVVpwR8M95956tGH6R+9edC++OvzaVw==
-ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2:
- version "6.12.2"
- resolved "https://registry.toot.party/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd"
- integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==
- dependencies:
- fast-deep-equal "^3.1.1"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.4.1"
- uri-js "^4.2.2"
-
-ajv@^6.5.5:
+ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.5.5:
version "6.12.3"
resolved "https://registry.toot.party/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706"
integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==
@@ -2158,12 +2149,12 @@ browserify-zlib@^0.2.0:
pako "~1.0.5"
browserslist@^4.12.0, browserslist@^4.8.5:
- version "4.12.2"
- resolved "https://registry.toot.party/browserslist/-/browserslist-4.12.2.tgz#76653d7e4c57caa8a1a28513e2f4e197dc11a711"
- integrity sha512-MfZaeYqR8StRZdstAK9hCKDd2StvePCYp5rHzQCPicUjfFliDgmuaBNPHYUTpAywBN8+Wc/d7NYVFkO0aqaBUw==
+ version "4.13.0"
+ resolved "https://registry.toot.party/browserslist/-/browserslist-4.13.0.tgz#42556cba011e1b0a2775b611cba6a8eca18e940d"
+ integrity sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==
dependencies:
- caniuse-lite "^1.0.30001088"
- electron-to-chromium "^1.3.483"
+ caniuse-lite "^1.0.30001093"
+ electron-to-chromium "^1.3.488"
escalade "^3.0.1"
node-releases "^1.1.58"
@@ -2334,10 +2325,10 @@ camelcase@^5.0.0, camelcase@^5.3.1:
resolved "https://registry.toot.party/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
-caniuse-lite@^1.0.30001088:
- version "1.0.30001089"
- resolved "https://registry.toot.party/caniuse-lite/-/caniuse-lite-1.0.30001089.tgz#0634653159f1179093a35fd7f36dbd7c4ed85101"
- integrity sha512-RnL5dbdqAfQ5oxHjFUU8uiyJMvTKoXfRn0Asp2R5cpRsyiY5+kLl0fcocQijb0V9XAWFEG/2A/vSswRmpYarmA==
+caniuse-lite@^1.0.30001093:
+ version "1.0.30001094"
+ resolved "https://registry.toot.party/caniuse-lite/-/caniuse-lite-1.0.30001094.tgz#0b11d02e1cdc201348dbd8e3e57bd9b6ce82b175"
+ integrity sha512-ufHZNtMaDEuRBpTbqD93tIQnngmJ+oBknjvr0IbFympSdtFpAUFmNv4mVKbb53qltxFx0nK3iy32S9AqkLzUNA==
capture-exit@^2.0.0:
version "2.0.0"
@@ -2790,6 +2781,11 @@ core-js-compat@^3.6.2:
browserslist "^4.8.5"
semver "7.0.0"
+core-js-pure@^3.0.0:
+ version "3.6.5"
+ resolved "https://registry.toot.party/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813"
+ integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==
+
core-js@^2.4.0:
version "2.6.11"
resolved "https://registry.toot.party/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
@@ -3061,6 +3057,13 @@ decamelize@^1.1.2, decamelize@^1.2.0:
resolved "https://registry.toot.party/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+decamelize@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.toot.party/decamelize/-/decamelize-3.2.0.tgz#84b8e8f4f8c579f938e35e2cc7024907e0090851"
+ integrity sha512-4TgkVUsmmu7oCSyGBm5FvfMoACuoh9EOidm7V5/J2X2djAwwt57qb3F2KMP2ITqODTCSwb+YRV+0Zqrv18k/hw==
+ dependencies:
+ xregexp "^4.2.4"
+
decode-uri-component@^0.2.0:
version "0.2.0"
resolved "https://registry.toot.party/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
@@ -3411,10 +3414,10 @@ ee-first@1.1.1:
resolved "https://registry.toot.party/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
-electron-to-chromium@^1.3.483:
- version "1.3.483"
- resolved "https://registry.toot.party/electron-to-chromium/-/electron-to-chromium-1.3.483.tgz#9269e7cfc1c8e72709824da171cbe47ca5e3ca9e"
- integrity sha512-+05RF8S9rk8S0G8eBCqBRBaRq7+UN3lDs2DAvnG8SBSgQO3hjy0+qt4CmRk5eiuGbTcaicgXfPmBi31a+BD3lg==
+electron-to-chromium@^1.3.488:
+ version "1.3.488"
+ resolved "https://registry.toot.party/electron-to-chromium/-/electron-to-chromium-1.3.488.tgz#9226229f5fbc825959210e81e0bb3e63035d1c06"
+ integrity sha512-NReBdOugu1yl8ly+0VDtiQ6Yw/1sLjnvflWq0gvY1nfUXU2PbA+1XAVuEb7ModnwL/MfUPjby7e4pAFnSHiy6Q==
elliptic@^6.0.0, elliptic@^6.5.2:
version "6.5.3"
@@ -7669,11 +7672,6 @@ pretty-format@^25.2.1, pretty-format@^25.5.0:
ansi-styles "^4.0.0"
react-is "^16.12.0"
-private@^0.1.8:
- version "0.1.8"
- resolved "https://registry.toot.party/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
- integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
-
process-nextick-args@~2.0.0:
version "2.0.1"
resolved "https://registry.toot.party/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
@@ -8027,12 +8025,11 @@ regenerator-runtime@^0.13.4:
integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==
regenerator-transform@^0.14.2:
- version "0.14.4"
- resolved "https://registry.toot.party/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7"
- integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==
+ version "0.14.5"
+ resolved "https://registry.toot.party/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4"
+ integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==
dependencies:
"@babel/runtime" "^7.8.4"
- private "^0.1.8"
regex-not@^1.0.0, regex-not@^1.0.2:
version "1.0.2"
@@ -8270,9 +8267,9 @@ run-queue@^1.0.0, run-queue@^1.0.3:
aproba "^1.1.1"
rxjs@^6.5.2:
- version "6.5.5"
- resolved "https://registry.toot.party/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec"
- integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==
+ version "6.6.0"
+ resolved "https://registry.toot.party/rxjs/-/rxjs-6.6.0.tgz#af2901eedf02e3a83ffa7f886240ff9018bbec84"
+ integrity sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg==
dependencies:
tslib "^1.9.0"
@@ -9371,9 +9368,9 @@ typedarray@^0.0.6:
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
typescript@^3.8.3:
- version "3.9.5"
- resolved "https://registry.toot.party/typescript/-/typescript-3.9.5.tgz#586f0dba300cde8be52dd1ac4f7e1009c1b13f36"
- integrity sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==
+ version "3.9.6"
+ resolved "https://registry.toot.party/typescript/-/typescript-3.9.6.tgz#8f3e0198a34c3ae17091b35571d3afd31999365a"
+ integrity sha512-Pspx3oKAPJtjNwE92YS05HQoY7z2SFyOpHo9MqJor3BXAGNaPUs83CuVp9VISFkSjyRfiTpmKuAYGJB7S7hOxw==
uglify-js@3.4.x:
version "3.4.10"
@@ -9918,12 +9915,7 @@ write-file-atomic@^3.0.0:
signal-exit "^3.0.2"
typedarray-to-buffer "^3.1.5"
-ws@^7.0.0:
- version "7.3.0"
- resolved "https://registry.toot.party/ws/-/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd"
- integrity sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w==
-
-ws@^7.2.3:
+ws@^7.0.0, ws@^7.2.3:
version "7.3.1"
resolved "https://registry.toot.party/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8"
integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==
@@ -9943,6 +9935,13 @@ xmlchars@^2.1.1:
resolved "https://registry.toot.party/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+xregexp@^4.2.4:
+ version "4.3.0"
+ resolved "https://registry.toot.party/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50"
+ integrity sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g==
+ dependencies:
+ "@babel/runtime-corejs3" "^7.8.3"
+
xtend@^4.0.0, xtend@^4.0.2, xtend@~4.0.1:
version "4.0.2"
resolved "https://registry.toot.party/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
@@ -9963,7 +9962,7 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3:
resolved "https://registry.toot.party/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
-yargs-parser@18.x, yargs-parser@^18.1.1:
+yargs-parser@18.x, yargs-parser@^18.1.2:
version "18.1.3"
resolved "https://registry.toot.party/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
@@ -9996,12 +9995,12 @@ yargs@^13.3.0, yargs@^13.3.2:
yargs-parser "^13.1.2"
yargs@^15.3.1:
- version "15.3.1"
- resolved "https://registry.toot.party/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b"
- integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==
+ version "15.4.0"
+ resolved "https://registry.toot.party/yargs/-/yargs-15.4.0.tgz#53949fb768309bac1843de9b17b80051e9805ec2"
+ integrity sha512-D3fRFnZwLWp8jVAAhPZBsmeIHY8tTsb8ItV9KaAaopmC6wde2u6Yw29JBIZHXw14kgkRnYmDgmQU4FVMDlIsWw==
dependencies:
cliui "^6.0.0"
- decamelize "^1.2.0"
+ decamelize "^3.2.0"
find-up "^4.1.0"
get-caller-file "^2.0.1"
require-directory "^2.1.1"
@@ -10010,7 +10009,7 @@ yargs@^15.3.1:
string-width "^4.2.0"
which-module "^2.0.0"
y18n "^4.0.0"
- yargs-parser "^18.1.1"
+ yargs-parser "^18.1.2"
yauzl@^2.4.2, yauzl@^2.9.2:
version "2.10.0"
From dc78c80e29d83394c5a9e5b7ba74e229c8207b9a Mon Sep 17 00:00:00 2001
From: Alice Gaudon
Date: Mon, 6 Jul 2020 16:01:17 +0200
Subject: [PATCH 21/21] Version 0.4.0
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 3ec58d1..850a826 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ily.li",
- "version": "0.3.1",
+ "version": "0.4.0",
"description": "Self-hosted file pusher",
"repository": "git@gitlab.com:ArisuOngaku/ily.li.git",
"author": "Alice Gaudon ",