mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01:38:19 +08:00
将题目纳入rating计算系统
This commit is contained in:
1 parent
bf29661eaa
commit
17b38cbf4e
19 files changed
+290
-271
No files matched your search
@@ -25,8 +25,8 @@ export const builtinHandler = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
export const builtinScript = [
|
export const builtinScript = [
|
||||||
'install', 'rating', 'recalcRating', 'register', 'problemStat',
|
'install', 'rating', 'register', 'problemStat', 'blacklist',
|
||||||
'blacklist', 'setSuperadmin', 'deleteUser',
|
'setSuperadmin', 'deleteUser',
|
||||||
];
|
];
|
||||||
|
|
||||||
function getFiles(folder: string, base = ''): string[] {
|
function getFiles(folder: string, base = ''): string[] {
|
||||||
|
|||||||
@@ -142,7 +142,8 @@ class HomeSecurityHandler extends Handler {
|
|||||||
@param('verifyPassword', Types.String)
|
@param('verifyPassword', Types.String)
|
||||||
async postChangePassword(current: string, password: string, verifyPassword: string) {
|
async postChangePassword(current: string, password: string, verifyPassword: string) {
|
||||||
if (password !== verifyPassword) throw new VerifyPasswordError();
|
if (password !== verifyPassword) throw new VerifyPasswordError();
|
||||||
await user.changePassword(this.user._id, current, password);
|
this.user.checkPassword(current);
|
||||||
|
await user.setPassword(this.user._id, password);
|
||||||
this.back();
|
this.back();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,9 +50,9 @@ class RecordListHandler extends RecordHandler {
|
|||||||
rdocs,
|
rdocs,
|
||||||
pdict,
|
pdict,
|
||||||
udict,
|
udict,
|
||||||
fliterPid: pid,
|
filterPid: pid,
|
||||||
fliterTid: tid,
|
filterTid: tid,
|
||||||
fliterUidOrName: uidOrName,
|
filterUidOrName: uidOrName,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ export type Udict = NumericDictionary<User>;
|
|||||||
export interface Pdoc {
|
export interface Pdoc {
|
||||||
_id: ObjectID,
|
_id: ObjectID,
|
||||||
domainId: string,
|
domainId: string,
|
||||||
|
docType: number,
|
||||||
docId: number,
|
docId: number,
|
||||||
pid: string,
|
pid: string,
|
||||||
owner: number,
|
owner: number,
|
||||||
|
|||||||
@@ -238,7 +238,7 @@ export async function setIfNotStatus(
|
|||||||
{
|
{
|
||||||
domainId, docType, docId, uid, key: { $not: { $eq: ifNot } },
|
domainId, docType, docId, uid, key: { $not: { $eq: ifNot } },
|
||||||
},
|
},
|
||||||
{ $set: { [key]: value, args } },
|
{ $set: { [key]: value, ...args } },
|
||||||
{ upsert: true, returnOriginal: false },
|
{ upsert: true, returnOriginal: false },
|
||||||
);
|
);
|
||||||
return res.value;
|
return res.value;
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import readConfig from '../lib/readConfig';
|
|||||||
export const pdocHidden: Pdoc = {
|
export const pdocHidden: Pdoc = {
|
||||||
_id: new ObjectID(),
|
_id: new ObjectID(),
|
||||||
domainId: 'system',
|
domainId: 'system',
|
||||||
|
docType: document.TYPE_PROBLEM,
|
||||||
docId: -1,
|
docId: -1,
|
||||||
pid: '',
|
pid: '',
|
||||||
owner: 1,
|
owner: 1,
|
||||||
|
|||||||
+36
-1
@@ -57,6 +57,41 @@ export async function consume(query: any, cb: Function) {
|
|||||||
}, 100);
|
}, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class Consumer {
|
||||||
|
consuming: boolean;
|
||||||
|
|
||||||
|
running?: Promise<any>;
|
||||||
|
|
||||||
|
interval: NodeJS.Timeout;
|
||||||
|
|
||||||
|
filter: any;
|
||||||
|
|
||||||
|
func: Function;
|
||||||
|
|
||||||
|
constructor(filter: any, func: Function) {
|
||||||
|
this.consuming = true;
|
||||||
|
this.filter = filter;
|
||||||
|
this.func = func;
|
||||||
|
this.interval = setInterval(this.consume.bind(this), 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
async consume() {
|
||||||
|
if (this.running || !this.consuming) return;
|
||||||
|
const res = await getFirst(this.filter);
|
||||||
|
if (res) {
|
||||||
|
this.running = this.func(res);
|
||||||
|
if (this.running instanceof Promise) await this.running;
|
||||||
|
this.running = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async destory() {
|
||||||
|
this.consuming = false;
|
||||||
|
clearInterval(this.interval);
|
||||||
|
if (this.running) await this.running;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
global.Hydro.model.task = {
|
global.Hydro.model.task = {
|
||||||
add, get, del, count, getFirst, consume,
|
Consumer, add, get, del, count, getFirst, consume,
|
||||||
};
|
};
|
||||||
@@ -156,17 +156,6 @@ export function setEmail(uid: number, mail: string) {
|
|||||||
return setById(uid, { mail, mailLower: mail.trim().toLowerCase() });
|
return setById(uid, { mail, mailLower: mail.trim().toLowerCase() });
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function changePassword(uid: number, currentPassword: string, newPassword: string) {
|
|
||||||
const udoc = await getById('system', uid);
|
|
||||||
if (!udoc) throw new UserNotFoundError(uid);
|
|
||||||
udoc.checkPassword(currentPassword);
|
|
||||||
const salt = String.random();
|
|
||||||
return await coll.findOneAndUpdate(
|
|
||||||
{ _id: udoc._id },
|
|
||||||
{ $set: { salt, hash: pwhash(newPassword, salt), hashType: 'hydro' } },
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function inc(_id: number, field: string, n = 1) {
|
export async function inc(_id: number, field: string, n = 1) {
|
||||||
const udoc = await coll.findOne({ _id });
|
const udoc = await coll.findOne({ _id });
|
||||||
if (!udoc) throw new UserNotFoundError(_id);
|
if (!udoc) throw new UserNotFoundError(_id);
|
||||||
@@ -234,7 +223,6 @@ export function ensureIndexes() {
|
|||||||
|
|
||||||
global.Hydro.model.user = {
|
global.Hydro.model.user = {
|
||||||
User,
|
User,
|
||||||
changePassword,
|
|
||||||
create,
|
create,
|
||||||
getByEmail,
|
getByEmail,
|
||||||
getById,
|
getById,
|
||||||
|
|||||||
+137
-15
@@ -1,28 +1,150 @@
|
|||||||
|
/* eslint-disable no-await-in-loop */
|
||||||
|
import { NumericDictionary } from 'lodash';
|
||||||
import { ObjectID } from 'mongodb';
|
import { ObjectID } from 'mongodb';
|
||||||
|
import * as domain from '../model/domain';
|
||||||
import * as contest from '../model/contest';
|
import * as contest from '../model/contest';
|
||||||
import * as user from '../model/user';
|
import * as problem from '../model/problem';
|
||||||
import rating from '../lib/rating';
|
import rating from '../lib/rating';
|
||||||
|
import { STATUS } from '../model/builtin';
|
||||||
|
import { Tdoc, Pdoc } from '../interface';
|
||||||
|
|
||||||
export const description = 'Calculate the rating of a contest';
|
export const description = 'Calculate rating of a domain, or all domains';
|
||||||
|
|
||||||
export async function run({ domainId, contestId }) {
|
type ND = NumericDictionary<number>
|
||||||
contestId = new ObjectID(contestId);
|
|
||||||
const tdoc = await contest.get(domainId, contestId);
|
function calc(udict: ND, rankedDocs: [number, number][]) {
|
||||||
const tsdocs = await contest.getMultiStatus(domainId, { docId: contestId })
|
|
||||||
.sort(contest.RULES[tdoc.rule].statusSort).toArray();
|
|
||||||
const udict = await user.getList(domainId, tsdocs.map((tsdoc) => tsdoc.uid));
|
|
||||||
const rankedTsdocs = contest.RULES[tdoc.rule].rank(tsdocs);
|
|
||||||
const users = [];
|
const users = [];
|
||||||
for (const result of rankedTsdocs) {
|
for (const [rank, uid] of rankedDocs) {
|
||||||
users.push({ ...result[1], rank: result[0], old: udict[result[1].uid].rating || 1500 });
|
users.push({ uid, rank, old: users[uid] || 1500 });
|
||||||
}
|
}
|
||||||
const rated = rating(users);
|
const rated = rating(users);
|
||||||
return rated;
|
for (const udoc of rated) {
|
||||||
|
udict[udoc.uid] = udoc.new;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function runProblem(pdoc: Pdoc, udict: ND, report: Function): Promise<void>
|
||||||
|
async function runProblem(
|
||||||
|
domainId: string, pid: number, udict: ND, report: Function
|
||||||
|
): Promise<void>
|
||||||
|
async function runProblem(...arg: Array<any>) {
|
||||||
|
const start = new Date().getTime();
|
||||||
|
const pdoc: Pdoc = (typeof arg[0] === 'string')
|
||||||
|
? await contest.get(arg[0], arg[1], -1)
|
||||||
|
: arg[0];
|
||||||
|
const udict: ND = (typeof arg[0] === 'string') ? arg[2] : arg[1];
|
||||||
|
const report = (typeof arg[0] === 'string') ? arg[3] : arg[2];
|
||||||
|
// TODO maybe some other rules?
|
||||||
|
// TODO pagination
|
||||||
|
const psdocs = await problem.getMultiStatus(
|
||||||
|
pdoc.domainId, { docId: pdoc.docId, status: STATUS.STATUS_ACCEPTED },
|
||||||
|
).sort('rid', 1).toArray();
|
||||||
|
const ranked = [];
|
||||||
|
for (const index of psdocs) {
|
||||||
|
ranked.push([index + 1, psdocs[index].uid]);
|
||||||
|
}
|
||||||
|
calc(udict, ranked);
|
||||||
|
await report({
|
||||||
|
case: {
|
||||||
|
status: STATUS.STATUS_ACCEPTED,
|
||||||
|
judgeText: `Problem ${pdoc.title} finished`,
|
||||||
|
time_ms: new Date().getTime() - start,
|
||||||
|
memory_kb: 0,
|
||||||
|
score: 0,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function runContest(tdoc: Tdoc, udict: ND, report: Function): Promise<void>
|
||||||
|
async function runContest(
|
||||||
|
domainId: string, tid: ObjectID, udict: ND, report: Function
|
||||||
|
): Promise<void>
|
||||||
|
async function runContest(...arg: Array<any>) {
|
||||||
|
const start = new Date().getTime();
|
||||||
|
const tdoc: Tdoc = (typeof arg[0] === 'string')
|
||||||
|
? await contest.get(arg[0], arg[1], -1)
|
||||||
|
: arg[0];
|
||||||
|
const udict: ND = (typeof arg[0] === 'string') ? arg[2] : arg[1];
|
||||||
|
const report = (typeof arg[0] === 'string') ? arg[3] : arg[2];
|
||||||
|
const tsdocs = await contest.getMultiStatus(tdoc.domainId, tdoc.docId, tdoc.docType)
|
||||||
|
.sort(contest.RULES[tdoc.rule].statusSort).toArray();
|
||||||
|
const rankedTsdocs = contest.RULES[tdoc.rule].rank(tsdocs);
|
||||||
|
const ranked = [];
|
||||||
|
for (const result of rankedTsdocs) {
|
||||||
|
ranked.push([result[0], result[1].uid]);
|
||||||
|
}
|
||||||
|
calc(udict, ranked);
|
||||||
|
await report({
|
||||||
|
case: {
|
||||||
|
status: STATUS.STATUS_ACCEPTED,
|
||||||
|
judgeText: `Contest ${tdoc.title} finished`,
|
||||||
|
time_ms: new Date().getTime() - start,
|
||||||
|
memory_kb: 0,
|
||||||
|
score: 0,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function runInDomain(domainId: string, isSub: boolean, report: Function) {
|
||||||
|
await domain.setMultiUserInDomain(domainId, {}, { rating: 1500 });
|
||||||
|
const udict: ND = {};
|
||||||
|
// TODO pagination
|
||||||
|
const problems = await problem.getMulti(domainId, { hidden: false }).toArray();
|
||||||
|
await report({ message: `Found ${problems.length} problems in ${domainId}` });
|
||||||
|
for (const i in problems) {
|
||||||
|
const pdoc = problems[i];
|
||||||
|
runProblem(pdoc, udict, report);
|
||||||
|
if (!isSub) {
|
||||||
|
await report({
|
||||||
|
progress: Math.floor(((parseInt(i, 10) + 1) / problems.length) * 100),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const contests = await contest.getMulti(domainId, { rated: true }, -1).sort('endAt', -1).toArray();
|
||||||
|
await report({ message: `Found ${contests.length} contests in ${domainId}` });
|
||||||
|
for (const i in contests) {
|
||||||
|
const tdoc = contests[i];
|
||||||
|
runContest(tdoc, udict, report);
|
||||||
|
if (!isSub) {
|
||||||
|
await report({
|
||||||
|
progress: Math.floor(((parseInt(i, 10) + 1) / contests.length) * 100),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const tasks = [];
|
||||||
|
for (const uid in udict) {
|
||||||
|
tasks.push(domain.setUserInDomain(domainId, parseInt(uid, 10), { rating: udict[uid] }));
|
||||||
|
}
|
||||||
|
await Promise.all(tasks);
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function run({ domainId }, report: Function) {
|
||||||
|
if (!domainId) {
|
||||||
|
const domains = await domain.getMulti().toArray();
|
||||||
|
await report({ message: `Found ${domains.length} domains` });
|
||||||
|
for (const i in domains) {
|
||||||
|
const start = new Date().getTime();
|
||||||
|
await runInDomain(domains[i]._id, true, report);
|
||||||
|
await report({
|
||||||
|
case: {
|
||||||
|
status: STATUS.STATUS_ACCEPTED,
|
||||||
|
judgeText: `Domain ${domains[i]._id} finished`,
|
||||||
|
time_ms: new Date().getTime() - start,
|
||||||
|
memory_kb: 0,
|
||||||
|
score: 0,
|
||||||
|
},
|
||||||
|
progress: Math.floor(((parseInt(i, 10) + 1) / domains.length) * 100),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else runInDomain(domainId, false, report);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const validate = {
|
export const validate = {
|
||||||
domainId: { $type: 'string' },
|
$or: [
|
||||||
contestId: { $type: ObjectID },
|
{ domainId: 'string' },
|
||||||
|
{ domainId: 'undefined' },
|
||||||
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
global.Hydro.script.rating = { run, description, validate };
|
global.Hydro.script.recalcRating = { run, description, validate };
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
/* eslint-disable no-await-in-loop */
|
|
||||||
import * as domain from '../model/domain';
|
|
||||||
import * as contest from '../model/contest';
|
|
||||||
import rating from '../lib/rating';
|
|
||||||
import { STATUS } from '../model/builtin';
|
|
||||||
|
|
||||||
export const description = 'Calculate rating of a domain, or all domains';
|
|
||||||
|
|
||||||
export async function run({ domainId, isSub = false }, report: Function) {
|
|
||||||
if (!domainId) {
|
|
||||||
const domains = await domain.getMulti().toArray();
|
|
||||||
await report({ message: `Found ${domains.length} domains` });
|
|
||||||
for (const i in domains) {
|
|
||||||
const start = new Date().getTime();
|
|
||||||
await run({ domainId: domains[i]._id, isSub: true }, report);
|
|
||||||
await report({
|
|
||||||
case: {
|
|
||||||
status: STATUS.STATUS_ACCEPTED,
|
|
||||||
judgeText: `Domain ${domains[i]._id} finished`,
|
|
||||||
time_ms: new Date().getTime() - start,
|
|
||||||
memory_kb: 0,
|
|
||||||
score: 0,
|
|
||||||
},
|
|
||||||
progress: Math.floor(((parseInt(i, 10) + 1) / domains.length) * 100),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
await domain.setMultiUserInDomain(domainId, {}, { rating: 1500 });
|
|
||||||
const contests = await contest.getMulti(domainId, { rated: true }).sort('endAt', -1).toArray();
|
|
||||||
await report({ message: `Found ${contests.length} contests in ${domainId}` });
|
|
||||||
const udict = {};
|
|
||||||
for (const i in contests) {
|
|
||||||
const start = new Date().getTime();
|
|
||||||
const tdoc = contests[i];
|
|
||||||
const tsdocs = await contest.getMultiStatus(domainId, { docId: tdoc.docId })
|
|
||||||
.sort(contest.RULES[tdoc.rule].statusSort).toArray();
|
|
||||||
const rankedTsdocs = contest.RULES[tdoc.rule].rank(tsdocs);
|
|
||||||
const users = [];
|
|
||||||
for (const result of rankedTsdocs) {
|
|
||||||
users.push({ ...result[1], rank: result[0], old: udict[result[1].uid] || 1500 });
|
|
||||||
}
|
|
||||||
const rated = rating(users);
|
|
||||||
for (const udoc of rated) {
|
|
||||||
udict[udoc.uid] = udoc.new;
|
|
||||||
}
|
|
||||||
if (!isSub) {
|
|
||||||
await report({ progress: Math.floor(((parseInt(i, 10) + 1) / contests.length) * 100) });
|
|
||||||
}
|
|
||||||
await report({
|
|
||||||
case: {
|
|
||||||
status: STATUS.STATUS_ACCEPTED,
|
|
||||||
judgeText: `Contest ${tdoc.title} finished`,
|
|
||||||
time_ms: new Date().getTime() - start,
|
|
||||||
memory_kb: 0,
|
|
||||||
score: 0,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const tasks = [];
|
|
||||||
for (const uid in udict) {
|
|
||||||
tasks.push(domain.setUserInDomain(domainId, parseInt(uid, 10), { rating: udict[uid] }));
|
|
||||||
}
|
|
||||||
await Promise.all(tasks);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const validate = {
|
|
||||||
$or: [
|
|
||||||
{ domainId: 'string' },
|
|
||||||
{ domainId: 'undefined' },
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
global.Hydro.script.recalcRating = { run, description, validate };
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// eslint-disable-next-line import/no-extraneous-dependencies
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
|||||||
@@ -120,16 +120,6 @@ export default function (env = {}) {
|
|||||||
exclude: /node_modules[/\\]/,
|
exclude: /node_modules[/\\]/,
|
||||||
use: [babelLoader()],
|
use: [babelLoader()],
|
||||||
},
|
},
|
||||||
{
|
|
||||||
// fix pickadate loading
|
|
||||||
test: /pickadate/,
|
|
||||||
use: [
|
|
||||||
{
|
|
||||||
loader: 'imports-loader',
|
|
||||||
options: { define: '>false' },
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
test: /\.styl$/,
|
test: /\.styl$/,
|
||||||
use: [extractCssLoader(), cssLoader(), postcssLoader(), 'stylus-loader']
|
use: [extractCssLoader(), cssLoader(), postcssLoader(), 'stylus-loader']
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.ReactCodeMirror
|
.ScratchpadMonacoEditor
|
||||||
flex: 1
|
flex: 1
|
||||||
position: relative
|
position: relative
|
||||||
overflow: hidden
|
overflow: hidden
|
||||||
@@ -12,13 +12,3 @@
|
|||||||
font-family: $code-font-family
|
font-family: $code-font-family
|
||||||
font-size: rem($font-size-secondary)
|
font-size: rem($font-size-secondary)
|
||||||
line-height: 1.2
|
line-height: 1.2
|
||||||
|
|
||||||
&.CodeMirror-focused .CodeMirror-selected
|
|
||||||
background: #cee4f2
|
|
||||||
|
|
||||||
.CodeMirror-gutters
|
|
||||||
border-right: 0
|
|
||||||
background: none
|
|
||||||
|
|
||||||
.CodeMirror-linenumber
|
|
||||||
color: #DDD
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
@import './var.inc.styl'
|
|
||||||
|
|
||||||
.scratchpad__panel-tab
|
|
||||||
margin-top: rem(-($panel-header-height))
|
|
||||||
|
|
||||||
&.rc-tabs-top
|
|
||||||
border: 0
|
|
||||||
|
|
||||||
&.rc-tabs-top .rc-tabs-bar
|
|
||||||
border: 0
|
|
||||||
|
|
||||||
.rc-tabs-bar
|
|
||||||
padding-left: rem(120px)
|
|
||||||
|
|
||||||
.rc-tabs-ink-bar
|
|
||||||
background: $tab-color
|
|
||||||
|
|
||||||
.rc-tabs-tab-prev-icon, .rc-tabs-tab-next-icon
|
|
||||||
display: none
|
|
||||||
font-family: $icon-font-name !important
|
|
||||||
line-height: rem($panel-header-height)
|
|
||||||
font-size: rem($font-size)
|
|
||||||
color: #FFF
|
|
||||||
|
|
||||||
.rc-tabs-tab-arrow-show
|
|
||||||
display: block
|
|
||||||
|
|
||||||
&.rc-tabs-top .rc-tabs-tab-prev-icon:before
|
|
||||||
content: $icon-chevron_left
|
|
||||||
|
|
||||||
&.rc-tabs-top .rc-tabs-tab-next-icon:before
|
|
||||||
content: $icon-chevron_right
|
|
||||||
|
|
||||||
.rc-tabs-content
|
|
||||||
flex: 1
|
|
||||||
|
|
||||||
.rc-tabs-tabpane
|
|
||||||
display: flex
|
|
||||||
flex-direction: column
|
|
||||||
|
|
||||||
&.rc-tabs-top .rc-tabs-tab
|
|
||||||
padding: rem(0 5px)
|
|
||||||
line-height: rem($panel-header-height)
|
|
||||||
margin: 0
|
|
||||||
margin-right: rem(5px)
|
|
||||||
color: rgba(#FFF, 0.8)
|
|
||||||
|
|
||||||
&.rc-tabs-top .rc-tabs-tab-active
|
|
||||||
&, &:hover
|
|
||||||
color: #FFF
|
|
||||||
|
|
||||||
.rc-tabs-bar, .rc-tabs-nav-container
|
|
||||||
line-height: 1
|
|
||||||
font-size: rem($font-size-small)
|
|
||||||
|
|
||||||
.rc-tabs-tab-btn-disabled
|
|
||||||
color: rgba(#FFF, 0.7)
|
|
||||||
|
|
||||||
.rc-tabs-tabpane-hidden
|
|
||||||
display: none
|
|
||||||
|
|
||||||
.rc-tabs-tabpane
|
|
||||||
overflow: auto
|
|
||||||
@@ -30,6 +30,7 @@ export default class ScratchpadEditorContainer extends React.PureComponent {
|
|||||||
<MonacoEditor
|
<MonacoEditor
|
||||||
language={languageEnum.LANG_MONACO_MODES[this.props.lang]}
|
language={languageEnum.LANG_MONACO_MODES[this.props.lang]}
|
||||||
theme="vs-dark"
|
theme="vs-dark"
|
||||||
|
class="ScratchpadMonacoEditor"
|
||||||
value={this.props.code}
|
value={this.props.code}
|
||||||
options={getOptions(this.props.lang)}
|
options={getOptions(this.props.lang)}
|
||||||
ref="editor"
|
ref="editor"
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ export default class ScratchpadContainer extends React.PureComponent {
|
|||||||
handleChangeSize(uiElement, size) {
|
handleChangeSize(uiElement, size) {
|
||||||
this.props.changeUiSize(uiElement, size);
|
this.props.changeUiSize(uiElement, size);
|
||||||
$('#scratchpad').trigger('vjScratchpadRelayout');
|
$('#scratchpad').trigger('vjScratchpadRelayout');
|
||||||
|
this.forceUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
|||||||
+9
-8
@@ -46,17 +46,17 @@
|
|||||||
"gulp-if": "^3.0.0",
|
"gulp-if": "^3.0.0",
|
||||||
"gulp-nunjucks": "^5.0.1",
|
"gulp-nunjucks": "^5.0.1",
|
||||||
"gulp-plumber": "^1.2.1",
|
"gulp-plumber": "^1.2.1",
|
||||||
"gulp-svgmin": "^2.2.0",
|
"gulp-svgmin": "^3.0.0",
|
||||||
"imports-loader": "^0.8.0",
|
"imports-loader": "^1.1.0",
|
||||||
"js-yaml": "^3.14.0",
|
"js-yaml": "^3.14.0",
|
||||||
"monaco-editor-webpack-plugin": "^1.9.0",
|
"monaco-editor-webpack-plugin": "^1.9.0",
|
||||||
"optimize-css-assets-webpack-plugin": "^5.0.3",
|
"optimize-css-assets-webpack-plugin": "^5.0.3",
|
||||||
"postcss-loader": "^3.0.0",
|
"postcss-loader": "^3.0.0",
|
||||||
"rupture": "^0.7.1",
|
"rupture": "^0.7.1",
|
||||||
"style-loader": "^1.2.1",
|
"style-loader": "^1.2.1",
|
||||||
"stylus": "^0.54.5",
|
"stylus": "^0.54.8",
|
||||||
"stylus-loader": "^3.0.2",
|
"stylus-loader": "^3.0.2",
|
||||||
"through2": "^3.0.2",
|
"through2": "^4.0.2",
|
||||||
"uglifyjs-webpack-plugin": "^2.2.0",
|
"uglifyjs-webpack-plugin": "^2.2.0",
|
||||||
"vinyl-buffer": "^1.0.1",
|
"vinyl-buffer": "^1.0.1",
|
||||||
"webpack": "^4.43.0",
|
"webpack": "^4.43.0",
|
||||||
@@ -90,12 +90,13 @@
|
|||||||
"react": "^16.13.1",
|
"react": "^16.13.1",
|
||||||
"react-codemirror": "^1.0.0",
|
"react-codemirror": "^1.0.0",
|
||||||
"react-dom": "^16.13.1",
|
"react-dom": "^16.13.1",
|
||||||
"react-monaco-editor": "^0.36.0",
|
"react-monaco-editor": "^0.39.1",
|
||||||
"react-redux": "^5.0.6",
|
"react-redux": "^7.2.0",
|
||||||
|
"react-resize-detector": "^5.0.6",
|
||||||
"react-split-pane": "^0.1.65",
|
"react-split-pane": "^0.1.65",
|
||||||
"redux": "^3.7.2",
|
"redux": "^4.0.5",
|
||||||
"redux-logger": "^3.0.6",
|
"redux-logger": "^3.0.6",
|
||||||
"redux-promise-middleware": "^4.3.0",
|
"redux-promise-middleware": "^6.1.2",
|
||||||
"redux-thunk": "^2.2.0",
|
"redux-thunk": "^2.2.0",
|
||||||
"slideout": "^1.0.1",
|
"slideout": "^1.0.1",
|
||||||
"sockjs-client": "^1.3.0",
|
"sockjs-client": "^1.3.0",
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ export default async function loadReactRedux(storeReducer) {
|
|||||||
|
|
||||||
const reduxMiddlewares = [];
|
const reduxMiddlewares = [];
|
||||||
reduxMiddlewares.push(reduxThunk);
|
reduxMiddlewares.push(reduxThunk);
|
||||||
reduxMiddlewares.push(reduxPromise());
|
reduxMiddlewares.push(reduxPromise);
|
||||||
|
|
||||||
if (process.env.NODE_ENV !== 'production') {
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
const { createLogger } = await import('redux-logger');
|
const { createLogger } = await import('redux-logger');
|
||||||
|
|||||||
+93
-68
@@ -1066,13 +1066,6 @@
|
|||||||
core-js-pure "^3.0.0"
|
core-js-pure "^3.0.0"
|
||||||
regenerator-runtime "^0.13.4"
|
regenerator-runtime "^0.13.4"
|
||||||
|
|
||||||
"@babel/runtime@^7.1.2", "@babel/runtime@^7.8.4":
|
|
||||||
version "7.9.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06"
|
|
||||||
integrity sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==
|
|
||||||
dependencies:
|
|
||||||
regenerator-runtime "^0.13.4"
|
|
||||||
|
|
||||||
"@babel/runtime@^7.10.2":
|
"@babel/runtime@^7.10.2":
|
||||||
version "7.10.3"
|
version "7.10.3"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.3.tgz#670d002655a7c366540c67f6fd3342cd09500364"
|
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.3.tgz#670d002655a7c366540c67f6fd3342cd09500364"
|
||||||
@@ -1080,6 +1073,20 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
regenerator-runtime "^0.13.4"
|
regenerator-runtime "^0.13.4"
|
||||||
|
|
||||||
|
"@babel/runtime@^7.5.5":
|
||||||
|
version "7.10.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.5.tgz#303d8bd440ecd5a491eae6117fd3367698674c5c"
|
||||||
|
integrity sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg==
|
||||||
|
dependencies:
|
||||||
|
regenerator-runtime "^0.13.4"
|
||||||
|
|
||||||
|
"@babel/runtime@^7.8.4":
|
||||||
|
version "7.9.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06"
|
||||||
|
integrity sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==
|
||||||
|
dependencies:
|
||||||
|
regenerator-runtime "^0.13.4"
|
||||||
|
|
||||||
"@babel/template@^7.10.4":
|
"@babel/template@^7.10.4":
|
||||||
version "7.10.4"
|
version "7.10.4"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278"
|
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278"
|
||||||
@@ -4279,7 +4286,7 @@ glob-watcher@^5.0.3:
|
|||||||
just-debounce "^1.0.0"
|
just-debounce "^1.0.0"
|
||||||
object.defaults "^1.1.0"
|
object.defaults "^1.1.0"
|
||||||
|
|
||||||
glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
|
glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
|
||||||
version "7.1.6"
|
version "7.1.6"
|
||||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
|
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
|
||||||
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
|
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
|
||||||
@@ -4495,13 +4502,13 @@ gulp-svgicons2svgfont@^5.0.1:
|
|||||||
svgicons2svgfont "^9.0.3"
|
svgicons2svgfont "^9.0.3"
|
||||||
vinyl "^2.1.0"
|
vinyl "^2.1.0"
|
||||||
|
|
||||||
gulp-svgmin@^2.2.0:
|
gulp-svgmin@^3.0.0:
|
||||||
version "2.2.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/gulp-svgmin/-/gulp-svgmin-2.2.0.tgz#eabc2b97aa4aef90c21cef65ae5499b075007323"
|
resolved "https://registry.yarnpkg.com/gulp-svgmin/-/gulp-svgmin-3.0.0.tgz#c5fecee998f3836ad9298153c6b5f10bb96a9b85"
|
||||||
integrity sha512-MjfZ7DNlomplrhACwmdowPnAV3firF+3432chp1XQyy6OxbZmM7AyMwsITfglS6bGaE3msKiNeqIb0Sn3LHlyg==
|
integrity sha512-z1eaUlkJVAX1bh7uNAWG+7IbEYEHBgj+MXgJDOrt05vJNplFPxq/+QonT29nzRmvdpzd04+JHsephGpfnwa95g==
|
||||||
dependencies:
|
dependencies:
|
||||||
plugin-error "^1.0.1"
|
plugin-error "^1.0.1"
|
||||||
svgo "^1.2.1"
|
svgo "^1.3.2"
|
||||||
|
|
||||||
gulp-ttf2eot@^1.1.1:
|
gulp-ttf2eot@^1.1.1:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
@@ -4853,13 +4860,15 @@ import-from@^2.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
resolve-from "^3.0.0"
|
resolve-from "^3.0.0"
|
||||||
|
|
||||||
imports-loader@^0.8.0:
|
imports-loader@^1.1.0:
|
||||||
version "0.8.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.8.0.tgz#030ea51b8ca05977c40a3abfd9b4088fe0be9a69"
|
resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-1.1.0.tgz#1c3a388d0c5cd7f9eb08f3646d4aae3b70e57933"
|
||||||
integrity sha512-kXWL7Scp8KQ4552ZcdVTeaQCZSLW+e6nJfp3cwUMB673T7Hr98Xjx5JK+ql7ADlJUvj1JS5O01RLbKoutN5QDQ==
|
integrity sha512-HcPM6rULdQ6EBLVq+5O+CF9xb7qiUjsRm6V28bTG/c3IU5sQkVZzUDwYY0r4jHvSAmVFdO9WA/vLAURR5WQSeQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
loader-utils "^1.0.2"
|
loader-utils "^2.0.0"
|
||||||
|
schema-utils "^2.7.0"
|
||||||
source-map "^0.6.1"
|
source-map "^0.6.1"
|
||||||
|
strip-comments "^2.0.1"
|
||||||
|
|
||||||
imurmurhash@^0.1.4:
|
imurmurhash@^0.1.4:
|
||||||
version "0.1.4"
|
version "0.1.4"
|
||||||
@@ -4889,7 +4898,7 @@ inflight@^1.0.4:
|
|||||||
once "^1.3.0"
|
once "^1.3.0"
|
||||||
wrappy "1"
|
wrappy "1"
|
||||||
|
|
||||||
inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
|
inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
|
||||||
version "2.0.4"
|
version "2.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||||
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||||
@@ -5610,7 +5619,7 @@ locate-path@^5.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
p-locate "^4.1.0"
|
p-locate "^4.1.0"
|
||||||
|
|
||||||
lodash-es@^4.2.1:
|
lodash-es@^4.17.15:
|
||||||
version "4.17.15"
|
version "4.17.15"
|
||||||
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78"
|
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78"
|
||||||
integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==
|
integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==
|
||||||
@@ -5739,7 +5748,7 @@ lodash.uniq@^4.5.0:
|
|||||||
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
|
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
|
||||||
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
|
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
|
||||||
|
|
||||||
lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.5, lodash@^4.2.1:
|
lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.5:
|
||||||
version "4.17.15"
|
version "4.17.15"
|
||||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
|
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
|
||||||
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
|
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
|
||||||
@@ -6038,14 +6047,14 @@ 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.1, mkdirp@^0.5.3, mkdirp@~0.5.1, mkdirp@~0.5.x:
|
mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1:
|
||||||
version "0.5.5"
|
version "0.5.5"
|
||||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
|
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
|
||||||
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
|
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
minimist "^1.2.5"
|
minimist "^1.2.5"
|
||||||
|
|
||||||
mkdirp@^1.0.3, mkdirp@^1.0.4:
|
mkdirp@^1.0.3, mkdirp@^1.0.4, mkdirp@~1.0.4:
|
||||||
version "1.0.4"
|
version "1.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
|
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
|
||||||
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
|
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
|
||||||
@@ -7270,7 +7279,7 @@ promise@^7.1.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
asap "~2.0.3"
|
asap "~2.0.3"
|
||||||
|
|
||||||
prop-types@^15.5.4, prop-types@^15.5.9, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
|
prop-types@^15.5.4, prop-types@^15.5.9, prop-types@^15.6.2, prop-types@^15.7.2:
|
||||||
version "15.7.2"
|
version "15.7.2"
|
||||||
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
|
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
|
||||||
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
|
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
|
||||||
@@ -7374,6 +7383,11 @@ querystringify@^2.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"
|
resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"
|
||||||
integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==
|
integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==
|
||||||
|
|
||||||
|
raf-schd@^4.0.2:
|
||||||
|
version "4.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.2.tgz#bd44c708188f2e84c810bf55fcea9231bcaed8a0"
|
||||||
|
integrity sha512-VhlMZmGy6A6hrkJWHLNTGl5gtgMUm+xfGza6wbwnE914yeQ5Ybm18vgM734RZhMgfw4tacUrWseGZlpUrrakEQ==
|
||||||
|
|
||||||
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
|
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
|
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
|
||||||
@@ -7441,37 +7455,46 @@ react-dom@^16.13.1:
|
|||||||
prop-types "^15.6.2"
|
prop-types "^15.6.2"
|
||||||
scheduler "^0.19.1"
|
scheduler "^0.19.1"
|
||||||
|
|
||||||
react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1:
|
react-is@^16.7.0, react-is@^16.8.1, react-is@^16.9.0:
|
||||||
version "16.13.1"
|
version "16.13.1"
|
||||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
|
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
|
||||||
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
||||||
|
|
||||||
react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4:
|
react-lifecycles-compat@^3.0.4:
|
||||||
version "3.0.4"
|
version "3.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
|
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
|
||||||
integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
|
integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
|
||||||
|
|
||||||
react-monaco-editor@^0.36.0:
|
react-monaco-editor@^0.39.1:
|
||||||
version "0.36.0"
|
version "0.39.1"
|
||||||
resolved "https://registry.yarnpkg.com/react-monaco-editor/-/react-monaco-editor-0.36.0.tgz#ac085c14f25fb072514c925596f6a06a711ee078"
|
resolved "https://registry.yarnpkg.com/react-monaco-editor/-/react-monaco-editor-0.39.1.tgz#2be0edf38f62eab127214c4d930f3d3ae369bfee"
|
||||||
integrity sha512-JVA5SZhOoYZ0DCdTwYgagtRb3jHo4KN7TVFiJauG+ZBAJWfDSTzavPIrwzWbgu8ahhDqDk4jUcYlOJL2BC/0UA==
|
integrity sha512-D2GKJlPxEIwkad9n1L7K/J3rLZ/UlMItS44YPO4cGQCcUJyKdwJkhOtk7q8gCqVd2uu7jyfyb8U34iSe+z9Aeg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/react" "^16.x"
|
"@types/react" "^16.x"
|
||||||
monaco-editor "*"
|
monaco-editor "*"
|
||||||
prop-types "^15.7.2"
|
prop-types "^15.7.2"
|
||||||
|
|
||||||
react-redux@^5.0.6:
|
react-redux@^7.2.0:
|
||||||
version "5.1.2"
|
version "7.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.1.2.tgz#b19cf9e21d694422727bf798e934a916c4080f57"
|
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.0.tgz#f970f62192b3981642fec46fd0db18a074fe879d"
|
||||||
integrity sha512-Ns1G0XXc8hDyH/OcBHOxNgQx9ayH3SPxBnFCOidGKSle8pKihysQw2rG/PmciUQRoclhVBO8HMhiRmGXnDja9Q==
|
integrity sha512-EvCAZYGfOLqwV7gh849xy9/pt55rJXPwmYvI4lilPM5rUT/1NxuuN59ipdBksRVSvz0KInbPnp4IfoXJXCqiDA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.1.2"
|
"@babel/runtime" "^7.5.5"
|
||||||
hoist-non-react-statics "^3.3.0"
|
hoist-non-react-statics "^3.3.0"
|
||||||
invariant "^2.2.4"
|
loose-envify "^1.4.0"
|
||||||
loose-envify "^1.1.0"
|
prop-types "^15.7.2"
|
||||||
prop-types "^15.6.1"
|
react-is "^16.9.0"
|
||||||
react-is "^16.6.0"
|
|
||||||
react-lifecycles-compat "^3.0.0"
|
react-resize-detector@^5.0.6:
|
||||||
|
version "5.0.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-5.0.6.tgz#7a5b67df1117af83249fbda8bda33df29b0b7e22"
|
||||||
|
integrity sha512-wvyK350xvq3GgRDd8ENE0T5wqTBniGhKuK0rGHeg0L79AlW+2Be6ulecGCzCpC6CE7Zshohf1GZyDaf2onoGFg==
|
||||||
|
dependencies:
|
||||||
|
lodash "^4.17.15"
|
||||||
|
lodash-es "^4.17.15"
|
||||||
|
prop-types "^15.7.2"
|
||||||
|
raf-schd "^4.0.2"
|
||||||
|
resize-observer-polyfill "^1.5.1"
|
||||||
|
|
||||||
react-split-pane@^0.1.65:
|
react-split-pane@^0.1.65:
|
||||||
version "0.1.91"
|
version "0.1.91"
|
||||||
@@ -7545,7 +7568,7 @@ read-pkg@^2.0.0:
|
|||||||
string_decoder "~1.1.1"
|
string_decoder "~1.1.1"
|
||||||
util-deprecate "~1.0.1"
|
util-deprecate "~1.0.1"
|
||||||
|
|
||||||
"readable-stream@2 || 3", readable-stream@^3.1.1, readable-stream@^3.4.0:
|
"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.1.1, readable-stream@^3.4.0:
|
||||||
version "3.6.0"
|
version "3.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
|
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
|
||||||
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
|
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
|
||||||
@@ -7601,25 +7624,23 @@ redux-logger@^3.0.6:
|
|||||||
dependencies:
|
dependencies:
|
||||||
deep-diff "^0.3.5"
|
deep-diff "^0.3.5"
|
||||||
|
|
||||||
redux-promise-middleware@^4.3.0:
|
redux-promise-middleware@^6.1.2:
|
||||||
version "4.4.2"
|
version "6.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/redux-promise-middleware/-/redux-promise-middleware-4.4.2.tgz#8defa5d1384299b99a6d2a7b4f4c21b96b3dda39"
|
resolved "https://registry.yarnpkg.com/redux-promise-middleware/-/redux-promise-middleware-6.1.2.tgz#1c14222686934be243cbb292e348ef7d5b20d6d2"
|
||||||
integrity sha512-PdBYebU+pstX2/CIrHiSD0meFetsFI0P/LrtsQLfhLPxU7zJASnMdO9KSrv1fHRh0fftYMtg8HfYiyVePBcDFg==
|
integrity sha512-ZqZu/nnSzGgwTtNbGoGVontpk7LjTOv0kigtt3CcgXI9gpq+8WlfXTXRZD0WTD5yaohRq0q2nYmJXSTjwXs83Q==
|
||||||
|
|
||||||
redux-thunk@^2.2.0:
|
redux-thunk@^2.2.0:
|
||||||
version "2.3.0"
|
version "2.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622"
|
resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622"
|
||||||
integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==
|
integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==
|
||||||
|
|
||||||
redux@^3.7.2:
|
redux@^4.0.5:
|
||||||
version "3.7.2"
|
version "4.0.5"
|
||||||
resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b"
|
resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f"
|
||||||
integrity sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==
|
integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==
|
||||||
dependencies:
|
dependencies:
|
||||||
lodash "^4.2.1"
|
loose-envify "^1.4.0"
|
||||||
lodash-es "^4.2.1"
|
symbol-observable "^1.2.0"
|
||||||
loose-envify "^1.1.0"
|
|
||||||
symbol-observable "^1.0.3"
|
|
||||||
|
|
||||||
regenerate-unicode-properties@^8.2.0:
|
regenerate-unicode-properties@^8.2.0:
|
||||||
version "8.2.0"
|
version "8.2.0"
|
||||||
@@ -8573,6 +8594,11 @@ strip-bom@^3.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
|
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
|
||||||
integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
|
integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
|
||||||
|
|
||||||
|
strip-comments@^2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b"
|
||||||
|
integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==
|
||||||
|
|
||||||
strip-json-comments@^3.1.0:
|
strip-json-comments@^3.1.0:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180"
|
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180"
|
||||||
@@ -8609,18 +8635,18 @@ stylus-loader@^3.0.2:
|
|||||||
lodash.clonedeep "^4.5.0"
|
lodash.clonedeep "^4.5.0"
|
||||||
when "~3.6.x"
|
when "~3.6.x"
|
||||||
|
|
||||||
stylus@^0.54.5:
|
stylus@^0.54.8:
|
||||||
version "0.54.7"
|
version "0.54.8"
|
||||||
resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.7.tgz#c6ce4793965ee538bcebe50f31537bfc04d88cd2"
|
resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.8.tgz#3da3e65966bc567a7b044bfe0eece653e099d147"
|
||||||
integrity sha512-Yw3WMTzVwevT6ZTrLCYNHAFmanMxdylelL3hkWNgPMeTCpMwpV3nXjpOHuBXtFv7aiO2xRuQS6OoAdgkNcSNug==
|
integrity sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==
|
||||||
dependencies:
|
dependencies:
|
||||||
css-parse "~2.0.0"
|
css-parse "~2.0.0"
|
||||||
debug "~3.1.0"
|
debug "~3.1.0"
|
||||||
glob "^7.1.3"
|
glob "^7.1.6"
|
||||||
mkdirp "~0.5.x"
|
mkdirp "~1.0.4"
|
||||||
safer-buffer "^2.1.2"
|
safer-buffer "^2.1.2"
|
||||||
sax "~1.2.4"
|
sax "~1.2.4"
|
||||||
semver "^6.0.0"
|
semver "^6.3.0"
|
||||||
source-map "^0.7.3"
|
source-map "^0.7.3"
|
||||||
|
|
||||||
supports-color@^2.0.0:
|
supports-color@^2.0.0:
|
||||||
@@ -8692,7 +8718,7 @@ svgicons2svgfont@^9.0.3:
|
|||||||
svg-pathdata "^5.0.0"
|
svg-pathdata "^5.0.0"
|
||||||
transformation-matrix-js "^2.7.1"
|
transformation-matrix-js "^2.7.1"
|
||||||
|
|
||||||
svgo@^1.0.0, svgo@^1.2.1:
|
svgo@^1.0.0, svgo@^1.3.2:
|
||||||
version "1.3.2"
|
version "1.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
|
resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
|
||||||
integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==
|
integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==
|
||||||
@@ -8716,7 +8742,7 @@ svgpath@^2.1.5:
|
|||||||
resolved "https://registry.yarnpkg.com/svgpath/-/svgpath-2.2.3.tgz#749c673899f92c3a4fc2d5415cf85dec349d9512"
|
resolved "https://registry.yarnpkg.com/svgpath/-/svgpath-2.2.3.tgz#749c673899f92c3a4fc2d5415cf85dec349d9512"
|
||||||
integrity sha512-xA0glXYpJ9SYT4JeMp3c0psbqdZsG1c0ywGvdJUPY2FKEgwJV7NgkeYuuQiOxMp+XsK9nCqjm3KDw0LkM1YLXw==
|
integrity sha512-xA0glXYpJ9SYT4JeMp3c0psbqdZsG1c0ywGvdJUPY2FKEgwJV7NgkeYuuQiOxMp+XsK9nCqjm3KDw0LkM1YLXw==
|
||||||
|
|
||||||
symbol-observable@^1.0.3:
|
symbol-observable@^1.2.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
|
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
|
||||||
integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
|
integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
|
||||||
@@ -8840,13 +8866,12 @@ through2@^3.0.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
readable-stream "2 || 3"
|
readable-stream "2 || 3"
|
||||||
|
|
||||||
through2@^3.0.2:
|
through2@^4.0.2:
|
||||||
version "3.0.2"
|
version "4.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4"
|
resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764"
|
||||||
integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==
|
integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==
|
||||||
dependencies:
|
dependencies:
|
||||||
inherits "^2.0.4"
|
readable-stream "3"
|
||||||
readable-stream "2 || 3"
|
|
||||||
|
|
||||||
time-stamp@^1.0.0:
|
time-stamp@^1.0.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
|
|||||||
Reference in new issue
Block a user