修复定时删除日志

This commit is contained in:
whyour 2022-02-19 17:36:49 +08:00
parent cf5f1b6f25
commit 7d6e1d3e3d
9 changed files with 146 additions and 96 deletions

View File

@ -4,7 +4,7 @@ import { DataTypes, Model, ModelDefined } from 'sequelize';
export class Crontab { export class Crontab {
name?: string; name?: string;
command: string; command: string;
schedule: string; schedule?: string;
timestamp?: string; timestamp?: string;
saved?: boolean; saved?: boolean;
id?: number; id?: number;

View File

@ -7,11 +7,15 @@ import EnvService from '../services/env';
import _ from 'lodash'; import _ from 'lodash';
import { DependenceModel } from '../data/dependence'; import { DependenceModel } from '../data/dependence';
import { Op } from 'sequelize'; import { Op } from 'sequelize';
import SystemService from '../services/system';
import ScheduleService from '../services/schedule';
export default async () => { export default async () => {
const cronService = Container.get(CronService); const cronService = Container.get(CronService);
const envService = Container.get(EnvService); const envService = Container.get(EnvService);
const dependenceService = Container.get(DependenceService); const dependenceService = Container.get(DependenceService);
const systemService = Container.get(SystemService);
const scheduleService = Container.get(ScheduleService);
// 初始化更新所有任务状态为空闲 // 初始化更新所有任务状态为空闲
await CrontabModel.update( await CrontabModel.update(
@ -53,6 +57,20 @@ export default async () => {
// 初始化保存一次ck和定时任务数据 // 初始化保存一次ck和定时任务数据
await cronService.autosave_crontab(); await cronService.autosave_crontab();
await envService.set_envs(); await envService.set_envs();
// 运行删除日志任务
const data = await systemService.getLogRemoveFrequency();
if (data && data.info && data.info.frequency) {
const cron = {
id: data.id,
name: '删除日志',
command: `ql rmlog ${data.info.frequency}`,
};
await scheduleService.createIntervalTask(cron, {
days: data.info.frequency,
runImmediately: true,
});
}
}; };
function randomSchedule(from: number, to: number) { function randomSchedule(from: number, to: number) {

View File

@ -3,24 +3,33 @@ import winston from 'winston';
import nodeSchedule from 'node-schedule'; import nodeSchedule from 'node-schedule';
import { Crontab } from '../data/cron'; import { Crontab } from '../data/cron';
import { exec } from 'child_process'; import { exec } from 'child_process';
import {
ToadScheduler,
SimpleIntervalJob,
Task,
SimpleIntervalSchedule,
} from 'toad-scheduler';
@Service() @Service()
export default class ScheduleService { export default class ScheduleService {
private scheduleStacks = new Map<number, nodeSchedule.Job>(); private scheduleStacks = new Map<string, nodeSchedule.Job>();
private intervalSchedule = new ToadScheduler();
constructor(@Inject('logger') private logger: winston.Logger) {} constructor(@Inject('logger') private logger: winston.Logger) {}
async generateSchedule({ id = 0, command, name, schedule }: Crontab) { async createCronTask({ id = 0, command, name, schedule = '' }: Crontab) {
const _id = this.formatId(id);
this.logger.info( this.logger.info(
'[创建定时任务]任务ID: %scron: %s任务名: %s执行命令: %s', '[创建cron任务]任务ID: %scron: %s任务名: %s执行命令: %s',
id, _id,
schedule, schedule,
name, name,
command, command,
); );
this.scheduleStacks.set( this.scheduleStacks.set(
id, _id,
nodeSchedule.scheduleJob(id + '', schedule, async () => { nodeSchedule.scheduleJob(id + '', schedule, async () => {
try { try {
exec(command, async (error, stdout, stderr) => { exec(command, async (error, stdout, stderr) => {
@ -55,8 +64,67 @@ export default class ScheduleService {
); );
} }
async cancelSchedule({ id = 0, name }: Crontab) { async cancelCronTask({ id = 0, name }: Crontab) {
const _id = this.formatId(id);
this.logger.info('[取消定时任务],任务名:%s', name); this.logger.info('[取消定时任务],任务名:%s', name);
this.scheduleStacks.has(id) && this.scheduleStacks.get(id)?.cancel(); this.scheduleStacks.has(_id) && this.scheduleStacks.get(_id)?.cancel();
}
async createIntervalTask(
{ id = 0, command, name = '' }: Crontab,
schedule: SimpleIntervalSchedule,
) {
const _id = this.formatId(id);
this.logger.info(
'[创建interval任务]任务ID: %s任务名: %s执行命令: %s',
_id,
name,
command,
);
const task = new Task(name, async () => {
try {
exec(command, async (error, stdout, stderr) => {
if (error) {
await this.logger.info(
'执行任务%s失败时间%s, 错误信息:%j',
command,
new Date().toLocaleString(),
error,
);
}
if (stderr) {
await this.logger.info(
'执行任务%s失败时间%s, 错误信息:%j',
command,
new Date().toLocaleString(),
stderr,
);
}
});
} catch (error) {
await this.logger.info(
'执行任务%s失败时间%s, 错误信息:%j',
command,
new Date().toLocaleString(),
error,
);
} finally {
}
});
const job = new SimpleIntervalJob({ ...schedule }, task, _id);
this.intervalSchedule.addIntervalJob(job);
}
async cancelIntervalTask({ id = 0, name }: Crontab) {
const _id = this.formatId(id);
this.logger.info('[取消interval任务]任务ID: %s任务名%s', _id, name);
this.intervalSchedule.removeById(_id);
}
private formatId(id: number): string {
return String(id);
} }
} }

View File

@ -24,7 +24,7 @@ export default class SystemService {
public async getLogRemoveFrequency() { public async getLogRemoveFrequency() {
const doc = await this.getDb({ type: AuthDataType.removeLogFrequency }); const doc = await this.getDb({ type: AuthDataType.removeLogFrequency });
return (doc && doc.info) || {}; return doc || {};
} }
private async updateAuthDb(payload: AuthInfo): Promise<any> { private async updateAuthDb(payload: AuthInfo): Promise<any> {
@ -65,11 +65,13 @@ export default class SystemService {
id: result.id, id: result.id,
name: '删除日志', name: '删除日志',
command: `ql rmlog ${frequency}`, command: `ql rmlog ${frequency}`,
schedule: `5 23 */${frequency} * *`,
}; };
await this.scheduleService.cancelSchedule(cron); await this.scheduleService.cancelIntervalTask(cron);
if (frequency > 0) { if (frequency > 0) {
await this.scheduleService.generateSchedule(cron); await this.scheduleService.createIntervalTask(cron, {
days: frequency,
runImmediately: true,
});
} }
return { code: 200, data: { ...cron } }; return { code: 200, data: { ...cron } };
} }

View File

@ -360,9 +360,9 @@ export default class UserService {
command: `ql rmlog ${frequency}`, command: `ql rmlog ${frequency}`,
schedule: `5 23 */${frequency} * *`, schedule: `5 23 */${frequency} * *`,
}; };
await this.scheduleService.cancelSchedule(cron); await this.scheduleService.cancelCronTask(cron);
if (frequency > 0) { if (frequency > 0) {
await this.scheduleService.generateSchedule(cron); await this.scheduleService.createCronTask(cron);
} }
return { code: 200, data: { ...cron } }; return { code: 200, data: { ...cron } };
} }

View File

@ -51,6 +51,7 @@
"serve-handler": "^6.1.3", "serve-handler": "^6.1.3",
"sockjs": "^0.3.21", "sockjs": "^0.3.21",
"sqlite3": "^5.0.2", "sqlite3": "^5.0.2",
"toad-scheduler": "^1.6.0",
"typedi": "^0.8.0", "typedi": "^0.8.0",
"uuid": "^8.3.2", "uuid": "^8.3.2",
"winston": "^3.3.3", "winston": "^3.3.3",

View File

@ -1,8 +1,10 @@
.container { .container {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; flex-wrap: wrap;
padding: 50px 130px; max-width: 800px;
margin: 20px auto;
.right { .right {
display: flex; display: flex;
justify-content: center; justify-content: center;

View File

@ -12,6 +12,7 @@ import {
Modal, Modal,
message, message,
Typography, Typography,
Input,
} from 'antd'; } from 'antd';
import config from '@/utils/config'; import config from '@/utils/config';
import { PageContainer } from '@ant-design/pro-layout'; import { PageContainer } from '@ant-design/pro-layout';
@ -273,8 +274,10 @@ const Setting = ({
request request
.get(`${config.apiPrefix}system/log/remove`) .get(`${config.apiPrefix}system/log/remove`)
.then((data: any) => { .then((data: any) => {
setLogRemoveFrequency(data.data.frequency); if (data.data.info) {
form.setFieldsValue({ frequency: data.data.frequency }); const { frequency } = data.data.info;
setLogRemoveFrequency(frequency);
}
}) })
.catch((error: any) => { .catch((error: any) => {
console.log(error); console.log(error);
@ -367,14 +370,19 @@ const Setting = ({
name="frequency" name="frequency"
tooltip="每x天自动删除x天以前的日志" tooltip="每x天自动删除x天以前的日志"
> >
<InputNumber <Input.Group compact>
addonBefore="每" <InputNumber
addonAfter="天" addonBefore="每"
style={{ width: 150 }} addonAfter="天"
min={0} style={{ width: 150 }}
onBlur={updateRemoveLogFrequency} min={0}
onChange={(value) => setLogRemoveFrequency(value)} value={logRemoveFrequency}
/> onChange={(value) => setLogRemoveFrequency(value)}
/>
<Button type="primary" onClick={updateRemoveLogFrequency}>
</Button>
</Input.Group>
</Form.Item> </Form.Item>
<Form.Item label="检查更新" name="update"> <Form.Item label="检查更新" name="update">
<CheckUpdate socketMessage={socketMessage} /> <CheckUpdate socketMessage={socketMessage} />

View File

@ -868,7 +868,7 @@
"@sentry/browser@6.17.2": "@sentry/browser@6.17.2":
version "6.17.2" version "6.17.2"
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.17.2.tgz#8e794b846f43a341068c83420918d896683d903e" resolved "https://registry.npmjs.org/@sentry/browser/-/browser-6.17.2.tgz"
integrity sha512-4Ow5z9GxK5dG9+stBNKb7s6NoxE4wgEcHRmO66QTK4gH2NNmzV4R/aaZ7iDoS/lD86sH0M86jm76dpg9uiJPmw== integrity sha512-4Ow5z9GxK5dG9+stBNKb7s6NoxE4wgEcHRmO66QTK4gH2NNmzV4R/aaZ7iDoS/lD86sH0M86jm76dpg9uiJPmw==
dependencies: dependencies:
"@sentry/core" "6.17.2" "@sentry/core" "6.17.2"
@ -878,7 +878,7 @@
"@sentry/core@6.17.2": "@sentry/core@6.17.2":
version "6.17.2" version "6.17.2"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.17.2.tgz#f218920f269ccdbaee20a092bbc90a71a007cc88" resolved "https://registry.npmjs.org/@sentry/core/-/core-6.17.2.tgz"
integrity sha512-Uew0CNMr+QvowrF4EJYjOUgHep/sZJ3l5zevPEELugIgqWBodd+ZDCV3fQFR7cr6KOqx1rMgVrgcKIkLl0l+RA== integrity sha512-Uew0CNMr+QvowrF4EJYjOUgHep/sZJ3l5zevPEELugIgqWBodd+ZDCV3fQFR7cr6KOqx1rMgVrgcKIkLl0l+RA==
dependencies: dependencies:
"@sentry/hub" "6.17.2" "@sentry/hub" "6.17.2"
@ -889,7 +889,7 @@
"@sentry/hub@6.17.2": "@sentry/hub@6.17.2":
version "6.17.2" version "6.17.2"
resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.17.2.tgz#d92accada845fa21fff1b2b491d3c6964851693b" resolved "https://registry.npmjs.org/@sentry/hub/-/hub-6.17.2.tgz"
integrity sha512-CMi6jU920bTwRTmGHjP4u8toOx4gm1dsx+rsxvp+FKzqRwpwoyi9mOw8oEYERVzaqaYceGdFylyRUrjdf0f77g== integrity sha512-CMi6jU920bTwRTmGHjP4u8toOx4gm1dsx+rsxvp+FKzqRwpwoyi9mOw8oEYERVzaqaYceGdFylyRUrjdf0f77g==
dependencies: dependencies:
"@sentry/types" "6.17.2" "@sentry/types" "6.17.2"
@ -898,7 +898,7 @@
"@sentry/minimal@6.17.2": "@sentry/minimal@6.17.2":
version "6.17.2" version "6.17.2"
resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.17.2.tgz#3b482a0d76aa33b6c9441dd21acbcc3a113e5120" resolved "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.17.2.tgz"
integrity sha512-Cdh+iM6QhLKfxwUWWP4mk2K7+EsQj4tuF2dGQke4Zcbp7zQ7wbcMruUcZHiZfvg5kiSYxwNVkH7cXMzcO7AJsg== integrity sha512-Cdh+iM6QhLKfxwUWWP4mk2K7+EsQj4tuF2dGQke4Zcbp7zQ7wbcMruUcZHiZfvg5kiSYxwNVkH7cXMzcO7AJsg==
dependencies: dependencies:
"@sentry/hub" "6.17.2" "@sentry/hub" "6.17.2"
@ -907,7 +907,7 @@
"@sentry/node@^6.17.2": "@sentry/node@^6.17.2":
version "6.17.2" version "6.17.2"
resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.17.2.tgz#32a5fa00b64a331073daf1e44f500c8c57184eb1" resolved "https://registry.npmjs.org/@sentry/node/-/node-6.17.2.tgz"
integrity sha512-358z45WaejnsE8RZVpuLJJiFVCSEi0TRY7P60CljZuz8rnvniD3G0tuXChvu4djVty8NScWZHT/QoxvuJdTHgQ== integrity sha512-358z45WaejnsE8RZVpuLJJiFVCSEi0TRY7P60CljZuz8rnvniD3G0tuXChvu4djVty8NScWZHT/QoxvuJdTHgQ==
dependencies: dependencies:
"@sentry/core" "6.17.2" "@sentry/core" "6.17.2"
@ -922,7 +922,7 @@
"@sentry/react@^6.17.2": "@sentry/react@^6.17.2":
version "6.17.2" version "6.17.2"
resolved "https://registry.yarnpkg.com/@sentry/react/-/react-6.17.2.tgz#ba2a65141ef3f3c2416313b448e06f6764a9f274" resolved "https://registry.npmjs.org/@sentry/react/-/react-6.17.2.tgz"
integrity sha512-/5mcHLxBhdh67EI6mGj20NwGCZbBjJdEOmTNTUydvNGXa9Rvrluf1iz2hNSH4sju0d/Qt1rakxC5y8gWy1E5Kw== integrity sha512-/5mcHLxBhdh67EI6mGj20NwGCZbBjJdEOmTNTUydvNGXa9Rvrluf1iz2hNSH4sju0d/Qt1rakxC5y8gWy1E5Kw==
dependencies: dependencies:
"@sentry/browser" "6.17.2" "@sentry/browser" "6.17.2"
@ -934,7 +934,7 @@
"@sentry/tracing@6.17.2", "@sentry/tracing@^6.17.2": "@sentry/tracing@6.17.2", "@sentry/tracing@^6.17.2":
version "6.17.2" version "6.17.2"
resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.17.2.tgz#437337071fdeffa319746905b3706518b099ec6b" resolved "https://registry.npmjs.org/@sentry/tracing/-/tracing-6.17.2.tgz"
integrity sha512-oWY2Ga+5D5f90utvfF2Y0eQvme+eS768ZWjR+klRYgZWoY8r1v8uWwWsvroYU1g+h6X0G/xh3giFjsdOWtRENw== integrity sha512-oWY2Ga+5D5f90utvfF2Y0eQvme+eS768ZWjR+klRYgZWoY8r1v8uWwWsvroYU1g+h6X0G/xh3giFjsdOWtRENw==
dependencies: dependencies:
"@sentry/hub" "6.17.2" "@sentry/hub" "6.17.2"
@ -945,12 +945,12 @@
"@sentry/types@6.17.2": "@sentry/types@6.17.2":
version "6.17.2" version "6.17.2"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.17.2.tgz#4dde3423db5953e798b19ed29618c28fc7bf2e30" resolved "https://registry.npmjs.org/@sentry/types/-/types-6.17.2.tgz"
integrity sha512-UrFLRDz5mn253O8k/XftLxoldF+NyZdkqKLGIQmST5HEVr7ub9nQJ4Y5ZFA3zJYWpraaW8faIbuw+pgetC8hmQ== integrity sha512-UrFLRDz5mn253O8k/XftLxoldF+NyZdkqKLGIQmST5HEVr7ub9nQJ4Y5ZFA3zJYWpraaW8faIbuw+pgetC8hmQ==
"@sentry/utils@6.17.2": "@sentry/utils@6.17.2":
version "6.17.2" version "6.17.2"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.17.2.tgz#e8044e753b47f86068053c8d79e4ae61a39b6732" resolved "https://registry.npmjs.org/@sentry/utils/-/utils-6.17.2.tgz"
integrity sha512-ePWtO44KJQwUULOiU86fa1WU3Ird2TH0i39gqB2d3zNS3QyVp9qPlzSdPKSPJ9LdgadzBHw7ikEuE+GY8JTrhA== integrity sha512-ePWtO44KJQwUULOiU86fa1WU3Ird2TH0i39gqB2d3zNS3QyVp9qPlzSdPKSPJ9LdgadzBHw7ikEuE+GY8JTrhA==
dependencies: dependencies:
"@sentry/types" "6.17.2" "@sentry/types" "6.17.2"
@ -1219,13 +1219,6 @@
resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz" resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz"
integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
"@types/nedb@^1.8.11":
version "1.8.12"
resolved "https://registry.npmjs.org/@types/nedb/-/nedb-1.8.12.tgz"
integrity sha512-ICDoQMORMjOSqfNFXT4ENXfwwCir1BPblXNm0SPH7C4Q10ou+pvVagcFAJ+rrzf3A47tGU4K/KbzKu7wO9j45Q==
dependencies:
"@types/node" "*"
"@types/node-fetch@^2.5.8": "@types/node-fetch@^2.5.8":
version "2.5.11" version "2.5.11"
resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.11.tgz" resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.11.tgz"
@ -2290,11 +2283,6 @@ async-validator@^4.0.2:
resolved "https://registry.npmjs.org/async-validator/-/async-validator-4.0.3.tgz" resolved "https://registry.npmjs.org/async-validator/-/async-validator-4.0.3.tgz"
integrity sha512-LVoIbJNHPKsO7FMLamo88uxdrvayGkF3vLTMTeiN3CqAbP3qSafLRc6yx3Sq9lHkiEOLNpoA2jwwnfGDdu1SMQ== integrity sha512-LVoIbJNHPKsO7FMLamo88uxdrvayGkF3vLTMTeiN3CqAbP3qSafLRc6yx3Sq9lHkiEOLNpoA2jwwnfGDdu1SMQ==
async@0.2.10:
version "0.2.10"
resolved "https://registry.npmjs.org/async/-/async-0.2.10.tgz"
integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E=
async@^1.5.0: async@^1.5.0:
version "1.5.2" version "1.5.2"
resolved "https://registry.npmjs.org/async/-/async-1.5.2.tgz" resolved "https://registry.npmjs.org/async/-/async-1.5.2.tgz"
@ -2492,13 +2480,6 @@ binary-extensions@^2.0.0:
resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
binary-search-tree@0.2.5:
version "0.2.5"
resolved "https://registry.npmjs.org/binary-search-tree/-/binary-search-tree-0.2.5.tgz"
integrity sha1-fbs7IQ/coIJFDa0jNMMErzm9x4Q=
dependencies:
underscore "~1.4.4"
bindings@^1.5.0: bindings@^1.5.0:
version "1.5.0" version "1.5.0"
resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz" resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz"
@ -3169,7 +3150,7 @@ concat-map@0.0.1:
concurrently@^7.0.0: concurrently@^7.0.0:
version "7.0.0" version "7.0.0"
resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-7.0.0.tgz#78d31b441cec338dab03316c221a2f9a67c529b0" resolved "https://registry.npmjs.org/concurrently/-/concurrently-7.0.0.tgz"
integrity sha512-WKM7PUsI8wyXpF80H+zjHP32fsgsHNQfPLw/e70Z5dYkV7hF+rf8q3D+ScWJIEr57CpkO3OWBko6hwhQLPR8Pw== integrity sha512-WKM7PUsI8wyXpF80H+zjHP32fsgsHNQfPLw/e70Z5dYkV7hF+rf8q3D+ScWJIEr57CpkO3OWBko6hwhQLPR8Pw==
dependencies: dependencies:
chalk "^4.1.0" chalk "^4.1.0"
@ -3523,7 +3504,7 @@ csstype@^3.0.2:
darkreader@4.9.40: darkreader@4.9.40:
version "4.9.40" version "4.9.40"
resolved "https://registry.yarnpkg.com/darkreader/-/darkreader-4.9.40.tgz#9217a2ae83d8aca0b4dc129bba78a0617aca5bce" resolved "https://registry.npmjs.org/darkreader/-/darkreader-4.9.40.tgz"
integrity sha512-Dm8S5jkXSIxvq9WitcvuH4KexV9ZuzGqDMsFOm2VwXzRkMo9VIg8udjq2Mm7cM6SaQSp/zzH4VIWioX93iWayQ== integrity sha512-Dm8S5jkXSIxvq9WitcvuH4KexV9ZuzGqDMsFOm2VwXzRkMo9VIg8udjq2Mm7cM6SaQSp/zzH4VIWioX93iWayQ==
dashdash@^1.12.0: dashdash@^1.12.0:
@ -3558,7 +3539,7 @@ date-fns@2.x:
date-fns@^2.16.1: date-fns@^2.16.1:
version "2.28.0" version "2.28.0"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2" resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz"
integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw== integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==
dayjs@1.x: dayjs@1.x:
@ -4957,11 +4938,6 @@ ignore-walk@^3.0.1:
dependencies: dependencies:
minimatch "^3.0.4" minimatch "^3.0.4"
immediate@~3.0.5:
version "3.0.6"
resolved "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz"
integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=
import-cwd@^2.0.0: import-cwd@^2.0.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz" resolved "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz"
@ -6224,13 +6200,6 @@ levn@~0.3.0:
prelude-ls "~1.1.2" prelude-ls "~1.1.2"
type-check "~0.3.2" type-check "~0.3.2"
lie@3.1.1:
version "3.1.1"
resolved "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz"
integrity sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=
dependencies:
immediate "~3.0.5"
lines-and-columns@^1.1.6: lines-and-columns@^1.1.6:
version "1.1.6" version "1.1.6"
resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz" resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz"
@ -6294,13 +6263,6 @@ loader-utils@^1.1.0:
emojis-list "^3.0.0" emojis-list "^3.0.0"
json5 "^1.0.1" json5 "^1.0.1"
localforage@^1.3.0:
version "1.9.0"
resolved "https://registry.npmjs.org/localforage/-/localforage-1.9.0.tgz"
integrity sha512-rR1oyNrKulpe+VM9cYmcFn6tsHuokyVHFaCM3+osEmxaHTbEk8oQu6eGDfS6DQLWi/N67XRmB8ECG37OES368g==
dependencies:
lie "3.1.1"
locate-path@^3.0.0: locate-path@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz"
@ -6690,7 +6652,7 @@ mixin-deep@^1.2.0:
for-in "^1.0.2" for-in "^1.0.2"
is-extendable "^1.0.1" is-extendable "^1.0.1"
"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.1: "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5:
version "0.5.5" version "0.5.5"
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz"
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
@ -6761,17 +6723,6 @@ natural-compare@^1.4.0:
resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
nedb@^1.8.0:
version "1.8.0"
resolved "https://registry.npmjs.org/nedb/-/nedb-1.8.0.tgz"
integrity sha1-DjUCzYLABNU1WkPJ5VV3vXvZHYg=
dependencies:
async "0.2.10"
binary-search-tree "0.2.5"
localforage "^1.3.0"
mkdirp "~0.5.1"
underscore "~1.4.4"
needle@^2.2.1: needle@^2.2.1:
version "2.9.1" version "2.9.1"
resolved "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz" resolved "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz"
@ -9807,7 +9758,7 @@ source-map@^0.7.3, source-map@~0.7.2:
spawn-command@^0.0.2-1: spawn-command@^0.0.2-1:
version "0.0.2-1" version "0.0.2-1"
resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" resolved "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz"
integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A= integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=
spdx-correct@^3.0.0: spdx-correct@^3.0.0:
@ -10348,6 +10299,11 @@ to-regex@^3.0.1, to-regex@^3.0.2:
regex-not "^1.0.2" regex-not "^1.0.2"
safe-regex "^1.1.0" safe-regex "^1.1.0"
toad-scheduler@^1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/toad-scheduler/-/toad-scheduler-1.6.0.tgz#717b867d2f5da67d13d166ec16adc39d0506c537"
integrity sha512-+TdQhHTYLKfjXxLrAi4DgEptoQd99jUcr2teJnQrGlb70MEVrwP4SlVsaQO/dxCsNIM5qmYwZmynQd9tOPDRLQ==
toggle-selection@^1.0.6: toggle-selection@^1.0.6:
version "1.0.6" version "1.0.6"
resolved "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz" resolved "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz"
@ -10403,7 +10359,7 @@ tr46@^2.1.0:
tree-kill@^1.2.2: tree-kill@^1.2.2:
version "1.2.2" version "1.2.2"
resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz"
integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==
triple-beam@^1.2.0, triple-beam@^1.3.0: triple-beam@^1.2.0, triple-beam@^1.3.0:
@ -10548,11 +10504,6 @@ undefsafe@^2.0.3:
dependencies: dependencies:
debug "^2.2.0" debug "^2.2.0"
underscore@~1.4.4:
version "1.4.4"
resolved "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz"
integrity sha1-YaajIBBiKvoHljvzJSA88SI51gQ=
union-value@^1.0.0: union-value@^1.0.0:
version "1.0.1" version "1.0.1"
resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz"
@ -11173,7 +11124,7 @@ yargs@^15.4.1:
yargs@^16.2.0: yargs@^16.2.0:
version "16.2.0" version "16.2.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz"
integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
dependencies: dependencies:
cliui "^7.0.2" cliui "^7.0.2"