Add cache interface
This commit is contained in:
parent
e9a20c82ed
commit
197b963e4c
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wms-core",
|
||||
"version": "0.16.3",
|
||||
"version": "0.17.0",
|
||||
"description": "Node web framework",
|
||||
"repository": "git@gitlab.com:ArisuOngaku/wms-core.git",
|
||||
"author": "Alice Gaudon <alice@gaudon.pro>",
|
||||
|
@ -14,14 +14,17 @@ import config from "config";
|
||||
import * as fs from "fs";
|
||||
import SecurityError from "./SecurityError";
|
||||
import * as path from "path";
|
||||
import CacheProvider from "./CacheProvider";
|
||||
import RedisComponent from "./components/RedisComponent";
|
||||
import TemplateError = lib.TemplateError;
|
||||
|
||||
export default abstract class Application {
|
||||
private readonly version: string;
|
||||
private readonly ignoreCommandLine: boolean;
|
||||
private readonly controllers: Controller[] = [];
|
||||
private readonly webSocketListeners: { [p: string]: WebSocketListener } = {};
|
||||
private readonly webSocketListeners: { [p: string]: WebSocketListener<any> } = {};
|
||||
private readonly components: ApplicationComponent<any>[] = [];
|
||||
private cacheProvider?: CacheProvider;
|
||||
|
||||
private ready: boolean = false;
|
||||
|
||||
@ -34,16 +37,21 @@ export default abstract class Application {
|
||||
|
||||
protected abstract async init(): Promise<void>;
|
||||
|
||||
protected use(thing: Controller | WebSocketListener | ApplicationComponent<any>) {
|
||||
protected use(thing: Controller | WebSocketListener<this> | ApplicationComponent<any>) {
|
||||
if (thing instanceof Controller) {
|
||||
this.controllers.push(thing);
|
||||
} else if (thing instanceof WebSocketListener) {
|
||||
const path = thing.path();
|
||||
this.webSocketListeners[path] = thing;
|
||||
thing.init(this);
|
||||
Logger.info(`Added websocket listener on ${path}`);
|
||||
} else {
|
||||
thing.setApp(this);
|
||||
this.components.push(thing);
|
||||
|
||||
if (thing instanceof RedisComponent) {
|
||||
this.cacheProvider = thing;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -231,10 +239,6 @@ export default abstract class Application {
|
||||
});
|
||||
}
|
||||
|
||||
public getWebSocketListeners(): { [p: string]: WebSocketListener } {
|
||||
return this.webSocketListeners;
|
||||
}
|
||||
|
||||
public isReady(): boolean {
|
||||
return this.ready;
|
||||
}
|
||||
@ -242,4 +246,12 @@ export default abstract class Application {
|
||||
public getVersion(): string {
|
||||
return this.version;
|
||||
}
|
||||
|
||||
public getWebSocketListeners(): { [p: string]: WebSocketListener<any> } {
|
||||
return this.webSocketListeners;
|
||||
}
|
||||
|
||||
public getCache(): CacheProvider | undefined {
|
||||
return this.cacheProvider;
|
||||
}
|
||||
}
|
14
src/CacheProvider.ts
Normal file
14
src/CacheProvider.ts
Normal file
@ -0,0 +1,14 @@
|
||||
export default interface CacheProvider {
|
||||
get(key: string, defaultValue?: string): Promise<string | null>;
|
||||
|
||||
has(key: string): Promise<boolean>;
|
||||
|
||||
forget(key: string): Promise<void>;
|
||||
|
||||
/**
|
||||
* @param key
|
||||
* @param value
|
||||
* @param ttl in ms
|
||||
*/
|
||||
remember(key: string, value: string, ttl: number): Promise<void>;
|
||||
}
|
@ -1,7 +1,14 @@
|
||||
import WebSocket from "ws";
|
||||
import {IncomingMessage} from "http";
|
||||
import Application from "./Application";
|
||||
|
||||
export default abstract class WebSocketListener<T extends Application> {
|
||||
private app!: T;
|
||||
|
||||
public init(app: T): void {
|
||||
this.app = app;
|
||||
}
|
||||
|
||||
export default abstract class WebSocketListener {
|
||||
public abstract path(): string;
|
||||
|
||||
public abstract async handle(socket: WebSocket, request: IncomingMessage, session: Express.SessionData): Promise<void>;
|
||||
|
@ -3,7 +3,7 @@ import {IncomingMessage} from "http";
|
||||
import WebSocketListener from "../../WebSocketListener";
|
||||
import MagicLink from "../models/MagicLink";
|
||||
|
||||
export default class MagicLinkWebSocketListener extends WebSocketListener {
|
||||
export default class MagicLinkWebSocketListener extends WebSocketListener<any> {
|
||||
private static readonly connections: { [p: string]: (() => void)[] } = {};
|
||||
|
||||
public static refreshMagicLink(sessionID: string) {
|
||||
|
@ -5,10 +5,11 @@ import config from "config";
|
||||
import Logger from "../Logger";
|
||||
import session, {Store} from "express-session";
|
||||
import connect_redis from "connect-redis";
|
||||
import CacheProvider from "../CacheProvider";
|
||||
|
||||
const RedisStore = connect_redis(session);
|
||||
|
||||
export default class RedisComponent extends ApplicationComponent<void> {
|
||||
export default class RedisComponent extends ApplicationComponent<void> implements CacheProvider {
|
||||
private redisClient?: RedisClient;
|
||||
private store?: Store;
|
||||
|
||||
@ -39,4 +40,60 @@ export default class RedisComponent extends ApplicationComponent<void> {
|
||||
public canServe(): boolean {
|
||||
return this.redisClient !== undefined && this.redisClient.connected;
|
||||
}
|
||||
|
||||
public async get(key: string, defaultValue?: string): Promise<string | null> {
|
||||
return new Promise<string | null>((resolve, reject) => {
|
||||
if (!this.redisClient) {
|
||||
reject(`Redis store was not initialized.`);
|
||||
return;
|
||||
}
|
||||
|
||||
this.redisClient.get(key, (err, val) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
return;
|
||||
}
|
||||
resolve(val !== null ? val : (defaultValue !== undefined ? defaultValue : null));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public async has(key: string): Promise<boolean> {
|
||||
return await this.get(key) !== null;
|
||||
}
|
||||
|
||||
public async forget(key: string): Promise<void> {
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
if (!this.redisClient) {
|
||||
reject(`Redis store was not initialized.`);
|
||||
return;
|
||||
}
|
||||
|
||||
this.redisClient.del(key, (err) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
return;
|
||||
}
|
||||
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public async remember(key: string, value: string, ttl: number): Promise<void> {
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
if (!this.redisClient) {
|
||||
reject(`Redis store was not initialized.`);
|
||||
return;
|
||||
}
|
||||
|
||||
this.redisClient.psetex(key, ttl, value, (err) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
return;
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
@ -25,7 +25,7 @@ export default class WebSocketServerComponent extends ApplicationComponent<void>
|
||||
}
|
||||
|
||||
public async start(app: Express): Promise<void> {
|
||||
const listeners: { [p: string]: WebSocketListener } = this.application.getWebSocketListeners();
|
||||
const listeners: { [p: string]: WebSocketListener<any> } = this.application.getWebSocketListeners();
|
||||
this.wss = new WebSocketServer({
|
||||
server: this.expressAppComponent.getServer(),
|
||||
}, () => {
|
||||
|
153
yarn.lock
153
yarn.lock
@ -10,35 +10,34 @@
|
||||
"@babel/highlight" "^7.10.4"
|
||||
|
||||
"@babel/core@^7.1.0", "@babel/core@^7.7.5":
|
||||
version "7.10.4"
|
||||
resolved "https://registry.toot.party/@babel%2fcore/-/core-7.10.4.tgz#780e8b83e496152f8dd7df63892b2e052bf1d51d"
|
||||
integrity sha512-3A0tS0HWpy4XujGc7QtOIHTeNwUgWaZc/WuS5YQrfhU67jnVmsD6OGPc1AKHH0LJHQICGncy3+YUjIhVlfDdcA==
|
||||
version "7.10.5"
|
||||
resolved "https://registry.toot.party/@babel%2fcore/-/core-7.10.5.tgz#1f15e2cca8ad9a1d78a38ddba612f5e7cdbbd330"
|
||||
integrity sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.10.4"
|
||||
"@babel/generator" "^7.10.4"
|
||||
"@babel/helper-module-transforms" "^7.10.4"
|
||||
"@babel/generator" "^7.10.5"
|
||||
"@babel/helper-module-transforms" "^7.10.5"
|
||||
"@babel/helpers" "^7.10.4"
|
||||
"@babel/parser" "^7.10.4"
|
||||
"@babel/parser" "^7.10.5"
|
||||
"@babel/template" "^7.10.4"
|
||||
"@babel/traverse" "^7.10.4"
|
||||
"@babel/types" "^7.10.4"
|
||||
"@babel/traverse" "^7.10.5"
|
||||
"@babel/types" "^7.10.5"
|
||||
convert-source-map "^1.7.0"
|
||||
debug "^4.1.0"
|
||||
gensync "^1.0.0-beta.1"
|
||||
json5 "^2.1.2"
|
||||
lodash "^4.17.13"
|
||||
lodash "^4.17.19"
|
||||
resolve "^1.3.2"
|
||||
semver "^5.4.1"
|
||||
source-map "^0.5.0"
|
||||
|
||||
"@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==
|
||||
"@babel/generator@^7.10.5":
|
||||
version "7.10.5"
|
||||
resolved "https://registry.toot.party/@babel%2fgenerator/-/generator-7.10.5.tgz#1b903554bc8c583ee8d25f1e8969732e6b829a69"
|
||||
integrity sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==
|
||||
dependencies:
|
||||
"@babel/types" "^7.10.4"
|
||||
"@babel/types" "^7.10.5"
|
||||
jsesc "^2.5.1"
|
||||
lodash "^4.17.13"
|
||||
source-map "^0.5.0"
|
||||
|
||||
"@babel/helper-function-name@^7.10.4":
|
||||
@ -58,11 +57,11 @@
|
||||
"@babel/types" "^7.10.4"
|
||||
|
||||
"@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==
|
||||
version "7.10.5"
|
||||
resolved "https://registry.toot.party/@babel%2fhelper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz#172f56e7a63e78112f3a04055f24365af702e7ee"
|
||||
integrity sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==
|
||||
dependencies:
|
||||
"@babel/types" "^7.10.4"
|
||||
"@babel/types" "^7.10.5"
|
||||
|
||||
"@babel/helper-module-imports@^7.10.4":
|
||||
version "7.10.4"
|
||||
@ -71,18 +70,18 @@
|
||||
dependencies:
|
||||
"@babel/types" "^7.10.4"
|
||||
|
||||
"@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==
|
||||
"@babel/helper-module-transforms@^7.10.5":
|
||||
version "7.10.5"
|
||||
resolved "https://registry.toot.party/@babel%2fhelper-module-transforms/-/helper-module-transforms-7.10.5.tgz#120c271c0b3353673fcdfd8c053db3c544a260d6"
|
||||
integrity sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA==
|
||||
dependencies:
|
||||
"@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/types" "^7.10.5"
|
||||
lodash "^4.17.19"
|
||||
|
||||
"@babel/helper-optimise-call-expression@^7.10.4":
|
||||
version "7.10.4"
|
||||
@ -144,10 +143,10 @@
|
||||
chalk "^2.0.0"
|
||||
js-tokens "^4.0.0"
|
||||
|
||||
"@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/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.10.5":
|
||||
version "7.10.5"
|
||||
resolved "https://registry.toot.party/@babel%2fparser/-/parser-7.10.5.tgz#e7c6bf5a7deff957cec9f04b551e2762909d826b"
|
||||
integrity sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==
|
||||
|
||||
"@babel/plugin-syntax-async-generators@^7.8.4":
|
||||
version "7.8.4"
|
||||
@ -227,9 +226,9 @@
|
||||
"@babel/helper-plugin-utils" "^7.8.0"
|
||||
|
||||
"@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==
|
||||
version "7.10.5"
|
||||
resolved "https://registry.toot.party/@babel%2fruntime/-/runtime-7.10.5.tgz#303d8bd440ecd5a491eae6117fd3367698674c5c"
|
||||
integrity sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg==
|
||||
dependencies:
|
||||
regenerator-runtime "^0.13.4"
|
||||
|
||||
@ -242,28 +241,28 @@
|
||||
"@babel/parser" "^7.10.4"
|
||||
"@babel/types" "^7.10.4"
|
||||
|
||||
"@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==
|
||||
"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.10.5":
|
||||
version "7.10.5"
|
||||
resolved "https://registry.toot.party/@babel%2ftraverse/-/traverse-7.10.5.tgz#77ce464f5b258be265af618d8fddf0536f20b564"
|
||||
integrity sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.10.4"
|
||||
"@babel/generator" "^7.10.4"
|
||||
"@babel/generator" "^7.10.5"
|
||||
"@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"
|
||||
"@babel/parser" "^7.10.5"
|
||||
"@babel/types" "^7.10.5"
|
||||
debug "^4.1.0"
|
||||
globals "^11.1.0"
|
||||
lodash "^4.17.13"
|
||||
lodash "^4.17.19"
|
||||
|
||||
"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.3.0", "@babel/types@^7.3.3":
|
||||
version "7.10.4"
|
||||
resolved "https://registry.toot.party/@babel%2ftypes/-/types-7.10.4.tgz#369517188352e18219981efd156bfdb199fff1ee"
|
||||
integrity sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==
|
||||
"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3":
|
||||
version "7.10.5"
|
||||
resolved "https://registry.toot.party/@babel%2ftypes/-/types-7.10.5.tgz#d88ae7e2fde86bfbfe851d4d81afa70a997b5d15"
|
||||
integrity sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==
|
||||
dependencies:
|
||||
"@babel/helper-validator-identifier" "^7.10.4"
|
||||
lodash "^4.17.13"
|
||||
lodash "^4.17.19"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@bcoe/v8-coverage@^0.2.3":
|
||||
@ -479,9 +478,9 @@
|
||||
safe-buffer "^5.1.2"
|
||||
|
||||
"@sinonjs/commons@^1.7.0":
|
||||
version "1.8.0"
|
||||
resolved "https://registry.toot.party/@sinonjs%2fcommons/-/commons-1.8.0.tgz#c8d68821a854c555bba172f3b06959a0039b236d"
|
||||
integrity sha512-wEj54PfsZ5jGSwMX68G8ZXFawcSglQSXqCftWX3ec8MDUzQdHgcKvw97awHbY0efQEL5iKUOAmmVtoYgmrSG4Q==
|
||||
version "1.8.1"
|
||||
resolved "https://registry.toot.party/@sinonjs%2fcommons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217"
|
||||
integrity sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==
|
||||
dependencies:
|
||||
type-detect "4.0.8"
|
||||
|
||||
@ -666,9 +665,9 @@
|
||||
"@types/istanbul-lib-report" "*"
|
||||
|
||||
"@types/jest@^26.0.4":
|
||||
version "26.0.4"
|
||||
resolved "https://registry.toot.party/@types%2fjest/-/jest-26.0.4.tgz#d2e513e85aca16992816f192582b5e67b0b15efb"
|
||||
integrity sha512-4fQNItvelbNA9+sFgU+fhJo8ZFF+AS4Egk3GWwCW2jFtViukXbnztccafAdLhzE/0EiCogljtQQXP8aQ9J7sFg==
|
||||
version "26.0.5"
|
||||
resolved "https://registry.toot.party/@types%2fjest/-/jest-26.0.5.tgz#23a8eecf4764a770ea8d3a0d1ea16b96c822035d"
|
||||
integrity sha512-heU+7w8snfwfjtcj2H458aTx3m5unIToOJhx75ebHilBiiQ39OIdA18WkG4LP08YKeAoWAGvWg8s+22w/PeJ6w==
|
||||
dependencies:
|
||||
jest-diff "^25.2.1"
|
||||
pretty-format "^25.2.1"
|
||||
@ -684,9 +683,9 @@
|
||||
integrity sha512-4PhI6iZ1zGXZ9X9W0bbmI7mS2xdxITURueqSWJ/cTeS5+tbAtOUDG1ww/fPbfcffWwR4NeOjyNcZiczafH/yfw==
|
||||
|
||||
"@types/mysql@^2.15.10":
|
||||
version "2.15.14"
|
||||
resolved "https://registry.toot.party/@types%2fmysql/-/mysql-2.15.14.tgz#df60e7b5f531662a8758e74b7685bed2b0ef1835"
|
||||
integrity sha512-YyNcxZZ4qlb9v41lu8Qfo+quX8eUqz4mr/6Nx7sclc2pUemOvjU7xrpuVave0/sR/VdtDPTXZOWQLC/kthxrHg==
|
||||
version "2.15.15"
|
||||
resolved "https://registry.toot.party/@types%2fmysql/-/mysql-2.15.15.tgz#af2223d2841091a5a819eabee6dff19567f1cf1f"
|
||||
integrity sha512-1GJnq7RwuFPRicMHdT53vza5v39nep9OKIbozxNUpFXP04CydcdWrqpZQ+MlVdlLFCisWnnt09xughajjWpFsw==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
@ -699,9 +698,9 @@
|
||||
form-data "^3.0.0"
|
||||
|
||||
"@types/node@*":
|
||||
version "14.0.22"
|
||||
resolved "https://registry.toot.party/@types%2fnode/-/node-14.0.22.tgz#23ea4d88189cec7d58f9e6b66f786b215eb61bdc"
|
||||
integrity sha512-emeGcJvdiZ4Z3ohbmw93E/64jRzUHAItSHt8nF7M4TGgQTiWqFVGB8KNpLGFmUHmHLvjvBgFwVlqNcq+VuGv9g==
|
||||
version "14.0.23"
|
||||
resolved "https://registry.toot.party/@types%2fnode/-/node-14.0.23.tgz#676fa0883450ed9da0bb24156213636290892806"
|
||||
integrity sha512-Z4U8yDAl5TFkmYsZdFPdjeMa57NOvnaf1tljHzhouaPEp7LCj2JKkejpI1ODviIAQuW4CcQmxkQ77rnLsOOoKw==
|
||||
|
||||
"@types/nodemailer@^6.4.0":
|
||||
version "6.4.0"
|
||||
@ -1362,9 +1361,9 @@ cheerio@^0.22.0:
|
||||
lodash.some "^4.4.0"
|
||||
|
||||
chokidar@^3.0.0, chokidar@^3.3.0:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.toot.party/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8"
|
||||
integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==
|
||||
version "3.4.1"
|
||||
resolved "https://registry.toot.party/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1"
|
||||
integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==
|
||||
dependencies:
|
||||
anymatch "~3.1.1"
|
||||
braces "~3.0.2"
|
||||
@ -3298,7 +3297,7 @@ jest-snapshot@^26.1.0:
|
||||
pretty-format "^26.1.0"
|
||||
semver "^7.3.2"
|
||||
|
||||
jest-util@^26.1.0:
|
||||
jest-util@26.x, jest-util@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.toot.party/jest-util/-/jest-util-26.1.0.tgz#80e85d4ba820decacf41a691c2042d5276e5d8d8"
|
||||
integrity sha512-rNMOwFQevljfNGvbzNQAxdmXQ+NawW/J72dmddsK0E8vgxXCMtwQ/EH0BiWEIxh0hhMcTsxwAxINt7Lh46Uzbg==
|
||||
@ -3613,7 +3612,7 @@ lodash.unescape@^4.0.1:
|
||||
resolved "https://registry.toot.party/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c"
|
||||
integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=
|
||||
|
||||
lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15:
|
||||
lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19:
|
||||
version "4.17.19"
|
||||
resolved "https://registry.toot.party/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
|
||||
integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
|
||||
@ -3721,14 +3720,6 @@ methods@~1.1.2:
|
||||
resolved "https://registry.toot.party/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
|
||||
integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
|
||||
|
||||
micromatch@4.x, micromatch@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.toot.party/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
|
||||
integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
|
||||
dependencies:
|
||||
braces "^3.0.1"
|
||||
picomatch "^2.0.5"
|
||||
|
||||
micromatch@^3.1.4:
|
||||
version "3.1.10"
|
||||
resolved "https://registry.toot.party/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
|
||||
@ -3748,6 +3739,14 @@ micromatch@^3.1.4:
|
||||
snapdragon "^0.8.1"
|
||||
to-regex "^3.0.2"
|
||||
|
||||
micromatch@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.toot.party/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
|
||||
integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
|
||||
dependencies:
|
||||
braces "^3.0.1"
|
||||
picomatch "^2.0.5"
|
||||
|
||||
mime-db@1.44.0, "mime-db@>= 1.43.0 < 2":
|
||||
version "1.44.0"
|
||||
resolved "https://registry.toot.party/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"
|
||||
@ -5634,17 +5633,17 @@ tr46@^2.0.2:
|
||||
punycode "^2.1.1"
|
||||
|
||||
ts-jest@^26.1.1:
|
||||
version "26.1.1"
|
||||
resolved "https://registry.toot.party/ts-jest/-/ts-jest-26.1.1.tgz#b98569b8a4d4025d966b3d40c81986dd1c510f8d"
|
||||
integrity sha512-Lk/357quLg5jJFyBQLnSbhycnB3FPe+e9i7ahxokyXxAYoB0q1pPmqxxRPYr4smJic1Rjcf7MXDBhZWgxlli0A==
|
||||
version "26.1.3"
|
||||
resolved "https://registry.toot.party/ts-jest/-/ts-jest-26.1.3.tgz#aac928a05fdf13e3e6dfbc8caec3847442667894"
|
||||
integrity sha512-beUTSvuqR9SmKQEylewqJdnXWMVGJRFqSz2M8wKJe7GBMmLZ5zw6XXKSJckbHNMxn+zdB3guN2eOucSw2gBMnw==
|
||||
dependencies:
|
||||
bs-logger "0.x"
|
||||
buffer-from "1.x"
|
||||
fast-json-stable-stringify "2.x"
|
||||
jest-util "26.x"
|
||||
json5 "2.x"
|
||||
lodash.memoize "4.x"
|
||||
make-error "1.x"
|
||||
micromatch "4.x"
|
||||
mkdirp "1.x"
|
||||
semver "7.x"
|
||||
yargs-parser "18.x"
|
||||
@ -5715,9 +5714,9 @@ typedarray-to-buffer@^3.1.5:
|
||||
is-typedarray "^1.0.0"
|
||||
|
||||
typescript@^3.8.3:
|
||||
version "3.9.6"
|
||||
resolved "https://registry.toot.party/typescript/-/typescript-3.9.6.tgz#8f3e0198a34c3ae17091b35571d3afd31999365a"
|
||||
integrity sha512-Pspx3oKAPJtjNwE92YS05HQoY7z2SFyOpHo9MqJor3BXAGNaPUs83CuVp9VISFkSjyRfiTpmKuAYGJB7S7hOxw==
|
||||
version "3.9.7"
|
||||
resolved "https://registry.toot.party/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa"
|
||||
integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==
|
||||
|
||||
uglify-js@3.4.x:
|
||||
version "3.4.10"
|
||||
|
Loading…
Reference in New Issue
Block a user