diff --git a/package.json b/package.json index 5c0475e..f3f8f69 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "lodash": "^4.17.11", "marked": "^0.5.0", "path-to-regexp": "^3.0.0", + "rustpython_wasm": "^0.1.0-pre-alpha.1", "vue": "^2.5.17", "vue-codemirror": "^4.0.5", "vue-router": "^3.0.1", diff --git a/src/nico/package.json b/src/nico/package.json index 8f3484e..dfea980 100644 --- a/src/nico/package.json +++ b/src/nico/package.json @@ -9,6 +9,7 @@ }, "dependencies": { "lodash.clonedeep": "^4.5.0", + "rustpython_wasm": "0.1.0-pre-alpha.1", "vue": "^2.5.17", "vue-codemirror": "^4.0.5", "vuex": "^3.0.1" diff --git a/src/nico/src/nico/constants.js b/src/nico/src/nico/constants.js index efac014..14140be 100644 --- a/src/nico/src/nico/constants.js +++ b/src/nico/src/nico/constants.js @@ -3,12 +3,14 @@ import _ from 'lodash/fp' export const FUNCTIONS = [ { name: 'User', - description: 'You define these functions to tell nico how to run your game.', + description: + 'You define these functions to tell nico how to run your game.', functions: [ { name: 'init', parameters: [], - description: 'Contains any code that you should run in the very beginning.', + description: + 'Contains any code that you should run in the very beginning.', }, { name: 'update', @@ -83,7 +85,8 @@ export const FUNCTIONS = [ { name: 'keyPressed', parameters: ['key'], - description: 'Returns whether a key was pressed and then immediately released.', + description: + 'Returns whether a key was pressed and then immediately released.', }, ], }, @@ -110,7 +113,8 @@ export const FUNCTIONS = [ { name: 'buttonPressed', parameters: ['button'], - description: 'Returns whether a button was pressed and then immediately released.', + description: + 'Returns whether a button was pressed and then immediately released.', }, ], }, @@ -121,12 +125,14 @@ export const FUNCTIONS = [ { name: 'hasFlag', parameters: ['flag', 'x', 'y'], - description: 'Returns whether a tile has the flag. Flags are indexed starting with 0.', + description: + 'Returns whether a tile has the flag. Flags are indexed starting with 0.', }, { name: 'getTile', parameters: ['x', 'y'], - description: 'Returns the index of the sprite of a tile given its coordinates.', + description: + 'Returns the index of the sprite of a tile given its coordinates.', }, { name: 'changeTile', @@ -140,6 +146,6 @@ export const FUNCTIONS = [ export const FUNCTIONS_BARE = FUNCTIONS |> - _.filter((section) => section.name !== 'User') |> + _.filter(section => section.name !== 'User') |> _.flatMap('functions') |> _.map('name') diff --git a/src/nico/src/nico/languages/Lang.js b/src/nico/src/nico/languages/Lang.js index 8630380..84eaf3c 100644 --- a/src/nico/src/nico/languages/Lang.js +++ b/src/nico/src/nico/languages/Lang.js @@ -1,24 +1,5 @@ export default class Lang { needsLoading = false - constructor (mars) { - this.mars = mars - } - cleanup () {} - - convertWindowError ({ lineno: lineNumber, colno: columnNumber, ...other }, OFFSET = 0) { - return Object.freeze({ - ...other, - - from: { - line: lineNumber - 1 - OFFSET, - ch: columnNumber - 1, - }, - to: { - line: lineNumber - 1 - OFFSET, - ch: columnNumber, - }, - }) - } } diff --git a/src/nico/src/nico/languages/Python.js b/src/nico/src/nico/languages/Python.js index 4441624..8d5816e 100644 --- a/src/nico/src/nico/languages/Python.js +++ b/src/nico/src/nico/languages/Python.js @@ -2,20 +2,7 @@ import _ from 'lodash/fp' import Lang from './Lang' import { FUNCTIONS_BARE } from '../constants.js' -function ifDoesntExist (id, callback) { - if (!document.querySelector(id)) callback() -} - -function loadScript (id, source, onLoad) { - const script = document.createElement('script') - - script.src = source - script.type = 'text/javascript' - script.id = id - script.setAttribute('crossorigin', 'anonymous') - script.onload = onLoad - document.querySelector('head').appendChild(script) -} +let rustpython, rpProm export default class Python extends Lang { name = 'Python' @@ -32,110 +19,66 @@ def draw(): pass ` - // prettier-ignore - PYTHON_TEMPLATE = ` -from browser import window -` + FUNCTIONS_BARE.map(funcName => ` -def ${_.snakeCase(funcName)}(*args): - return window.${funcName}(*args) -`).join('\n') + constructor (onLoad) { + super() - PYTHON_TEMPLATE_LENGTH = this.PYTHON_TEMPLATE.split('\n').length - - constructor (mars, onLoad) { - super(mars) - - if (onLoad) { - ifDoesntExist('python', () => { - loadScript('python', 'https://s3.us-east-2.amazonaws.com/chicode/brython.js', onLoad) + if (onLoad && !rustpython) { + rpProm = import('rustpython_wasm').then(rp => { + rustpython = rp }) + rpProm.then(onLoad) } } - transformPython (code) { - return this.PYTHON_TEMPLATE + code - } - - transformJS (code, scriptId) { - return ` -var $locals_${scriptId} = {} -${code}; - -const init = $locals___main__.init || (() => {}) -const update = $locals___main__.update || (() => {}) -const draw = $locals___main__.draw - -${this.mars} - ` - } - - convertWindowError ({ error, ...other }) { - return this.convertError(error) - } - - convertError (error) { - // TODO find a way to get the location of runtime errors - // https://github.com/brython-dev/brython/issues/938 - console.log('RUNTIME ERROR:') - console.dir(error) - return { - message: `${error.args[0]}`, - } - } - - convertSyntaxError (e) { - return { - message: `${e.msg}: ${e.text.trim()}`, - from: { - line: e.lineno - this.PYTHON_TEMPLATE_LENGTH, - ch: e.offset - 1, - }, - to: { - line: e.lineno - this.PYTHON_TEMPLATE_LENGTH, - ch: e.offset, - }, - } - } - - async prepareCode (code) { + async refresh (code, mars) { // https://github.com/brython-dev/brython/issues/937 - const $B = window.__BRYTHON__ - if (!$B) { - throw new Error('Brython is not loaded!') - } + await rpProm - $B.meta_path = $B.$meta_path.slice() - if (!$B.use_VFS) { - $B.meta_path.shift() - } + // clear previous state + rustpython.vmStore.destroy('mars') + const vm = rustpython.vmStore.init('mars', false) - const scriptId = '__main__' + for (const func of FUNCTIONS_BARE) { + vm.addToScope(this.translateName(func), mars[func]) + } - let py = this.transformPython(code) - // console.log('PYTHON CODE:\n', py) + vm.setStdout() - let js try { - js = $B.py2js(py, scriptId, scriptId).to_js() - } catch (e) { - // console.dir(e) + vm.exec(code) + } catch (err) { + console.error(err) return { success: false, - errors: [this.convertSyntaxError(e)], + errors: [err], } } - js = this.transformJS(js, scriptId) - // console.log('JS CODE:\n', js) - - return { + const ret = { success: true, - code: js, } + for (const fn of ['init', 'draw', 'update']) { + try { + ret[fn] = vm.eval(fn) || (() => {}) + } catch (_) { + ret[fn] = () => {} + } + } + return ret + } + + translateName (name) { + return _.snakeCase(name) } getSyntax ({ name, parameters }) { - return `${_.snakeCase(name)}(${parameters |> _.map(_.snakeCase) |> _.join(', ')})` + return `${this.translateName(name)}(${parameters |> + _.map(this.translateName) |> + _.join(', ')})` + } + + transformError (err) { + return { message: err } } } diff --git a/src/nico/src/nico/mars.js b/src/nico/src/nico/mars.js new file mode 100644 index 0000000..95eaca0 --- /dev/null +++ b/src/nico/src/nico/mars.js @@ -0,0 +1,229 @@ +export function initMars ({ + state, + ctx, + sprites, + clear, + tilemap, + flags, + language, + onError, +}) { + ctx.font = '.3rem Karla' + ctx.textBaseline = 'top' + + const marsState = {} + + const mars = {} + + const tilemapCanvas = document.createElement('canvas') + const tilemapCtx = tilemapCanvas.getContext('2d') + + const GRID_SIZE = 8 + + function updateTilemapCanvas () { + tilemap.forEach((row, y) => + row.forEach((spriteI, x) => { + if (spriteI !== null) { + tilemapCtx.clearRect( + x * GRID_SIZE, + y * GRID_SIZE, + GRID_SIZE, + GRID_SIZE + ) + tilemapCtx.drawImage(sprites[spriteI], x * GRID_SIZE, y * GRID_SIZE) + } + }) + ) + } + + updateTilemapCanvas() + + // drawing + + mars.rect = (x, y, width, height, outline = false, color = null) => { + ctx.rect(x, y, width, height) + if (outline) { + ctx.stroke() + } else { + ctx.fill() + } + } + + mars.sprite = (i, x, y) => { + ctx.drawImage( + sprites[i], + Math.floor(x) * GRID_SIZE, + Math.floor(y) * GRID_SIZE + ) + } + + mars.point = (x, y) => { + ctx.rect(x, y, 1, 1) + ctx.fill() + } + + mars.line = (x0, y0, x1, y1) => { + ctx.beginPath() + ctx.moveTo(x0, y0) + + const dx = Math.abs(x1 - x0) + const dy = Math.abs(y1 - y0) + const sx = x0 < x1 ? 1 : -1 + const sy = y0 < y1 ? 1 : -1 + let err = dx - dy + + while (x0 !== x1 && y0 !== y1) { + if (2 * err > -dy) { + err -= dy + x0 += sx + } else if (2 * err < dx) { + err += dx + y0 += sy + } + ctx.lineTo(x0, y0) + } + ctx.stroke() + } + + mars.text = (text, x, y) => { + ctx.fillText(text, x, y) + } + + mars.tilemap = () => { + ctx.drawImage(tilemapCanvas, 0, 0) + } + + // key + + marsState.keys = {} + marsState.keysPressed = {} + + document.addEventListener('keydown', event => { + marsState.keys[event.key] = true + // console.log(`"${event.key}" pressed!`) + }) + + document.addEventListener('keyup', event => { + delete marsState.keys[event.key] + marsState.keysPressed[event.key] = true + // console.log(`"${event.key}" released!`) + }) + + mars.getKeys = () => marsState.keys + + mars.keyDown = key => { + return !!marsState.keys[key] + } + + mars.keyUp = key => { + return !marsState.keys[key] + } + + mars.keyPressed = key => { + return !!marsState.keysPressed[key] + } + + // button + + const mouseButtons = { + 0: 'left', + 1: 'middle', + 2: 'right', + } + marsState.buttons = {} + marsState.buttonsPressed = {} + document.addEventListener('mousedown', event => { + marsState.buttons[mouseButtons[event.button]] = true + }) + document.addEventListener('mouseup', event => { + marsState.buttons[mouseButtons[event.button]] = false + marsState.buttonsPressed[mouseButtons[event.button]] = true + }) + document.addEventListener('mouseout', event => { + marsState.buttons[mouseButtons[event.button]] = false + marsState.buttonsPressed[mouseButtons[event.button]] = true + }) + + let mouseCoordinates = [0, 0] + document.addEventListener('mousemove', event => { + mouseCoordinates = [event.pageX, event.pageY] + }) + + mars.getButtons = () => marsState.buttons + + mars.buttonDown = button => { + return !!marsState.buttons[button] + } + + mars.buttonUp = button => { + return !marsState.buttons[button] + } + + mars.buttonPressed = button => { + return !!marsState.buttonsPressed[button] + } + + // tilemap + + mars.hasFlag = (flag, x, y) => { + try { + return !!flags[Math.floor(x)][Math.floor(y)][flag] + } catch (e) {} + } + + mars.getTile = (x, y) => { + try { + return tilemap[Math.floor(x)][Math.floor(y)] + } catch (e) {} + } + + mars.changeTile = (i, x, y) => { + try { + tilemap[Math.floor(x)][Math.floor(y)] = i + updateTilemapCanvas() + } catch (e) {} + } + + const DELAY = 1000 / 20 + let time = Date.now() + + const main = () => { + const { updateFunc, drawFunc } = state + try { + if (!state.paused) { + if (Date.now() - time >= DELAY) { + updateFunc() + time = Date.now() + } + if (clear) ctx.clearRect(0, 0, window.innerWidth, window.innerHeight) + drawFunc() + } + if (state.running) window.requestAnimationFrame(main) + marsState.keysPressed = {} + marsState.buttonsPressed = {} + } catch (err) { + console.error(err) + onError(language.transformError(err)) + } + } + const updateMarsParams = ({ + state: state_, + ctx: ctx_, + sprites: sprites_, + clear: clear_, + tilemap: tilemap_, + flags: flags_, + language: language_, + onError: onError_, + }) => { + state = state_ + ctx = ctx_ + sprites = sprites_ + clear = clear_ + tilemap = tilemap_ + flags = flags_ + language = language_ + onError = onError_ + } + return [main, mars, updateMarsParams] +} diff --git a/src/nico/src/nico/mars.raw.js b/src/nico/src/nico/mars.raw.js deleted file mode 100644 index 6382a3d..0000000 --- a/src/nico/src/nico/mars.raw.js +++ /dev/null @@ -1,190 +0,0 @@ -/* global _state, _ctx, _sprites, _clear, _tilemap, _flags, draw, init, update */ -/* eslint-disable no-unused-vars */ - -if (typeof draw === 'undefined' || !draw) throw new Error('You must define a "draw" function.') - -const _mars = {} -;((_mars) => { - _ctx.font = '.3rem Karla' - _ctx.textBaseline = 'top' - - const tilemapCanvas = document.createElement('canvas') - const tilemapCtx = tilemapCanvas.getContext('2d') - - const GRID_SIZE = 8 - - function updateTilemapCanvas () { - _tilemap.forEach((row, y) => - row.forEach((spriteI, x) => { - if (spriteI !== null) { - tilemapCtx.clearRect(x * GRID_SIZE, y * GRID_SIZE, GRID_SIZE, GRID_SIZE) - tilemapCtx.drawImage(_sprites[spriteI], x * GRID_SIZE, y * GRID_SIZE) - } - }), - ) - } - - updateTilemapCanvas() - - // drawing - - window.rect = (x, y, width, height, outline = false, color = null) => { - _ctx.rect(x, y, width, height) - if (outline) { - _ctx.stroke() - } else { - _ctx.fill() - } - } - - window.sprite = (i, x, y) => { - _ctx.drawImage(_sprites[i], Math.floor(x) * GRID_SIZE, Math.floor(y) * GRID_SIZE) - } - - window.point = (x, y) => { - _ctx.rect(x, y, 1, 1) - _ctx.fill() - } - - window.line = (x0, y0, x1, y1) => { - _ctx.beginPath() - _ctx.moveTo(x0, y0) - - const dx = Math.abs(x1 - x0) - const dy = Math.abs(y1 - y0) - const sx = x0 < x1 ? 1 : -1 - const sy = y0 < y1 ? 1 : -1 - let err = dx - dy - - while (x0 !== x1 && y0 !== y1) { - if (2 * err > -dy) { - err -= dy - x0 += sx - } else if (2 * err < dx) { - err += dx - y0 += sy - } - _ctx.lineTo(x0, y0) - } - _ctx.stroke() - } - - window.text = (text, x, y) => { - _ctx.fillText(text, x, y) - } - - window.tilemap = () => { - _ctx.drawImage(tilemapCanvas, 0, 0) - } - - // key - - _mars.keys = {} - _mars.keysPressed = {} - document.addEventListener('keydown', (event) => { - _mars.keys[event.key] = true - // console.log(`"${event.key}" pressed!`) - }) - - document.addEventListener('keyup', (event) => { - _mars.keys[event.key] = false - _mars.keysPressed[event.key] = true - // console.log(`"${event.key}" released!`) - }) - - window.getKeys = () => _mars.keys - - window.keyDown = (key) => { - return !!_mars.keys[key] - } - - window.keyUp = (key) => { - return !_mars.keys[key] - } - - window.keyPressed = (key) => { - return !!_mars.keysPressed[key] - } - - // button - - const mouseButtons = { - 0: 'left', - 1: 'middle', - 2: 'right', - } - _mars.buttons = {} - _mars.buttonsPressed = {} - document.addEventListener('mousedown', (event) => { - _mars.buttons[mouseButtons[event.button]] = true - }) - document.addEventListener('mouseup', (event) => { - _mars.buttons[mouseButtons[event.button]] = false - _mars.buttonsPressed[mouseButtons[event.button]] = true - }) - document.addEventListener('mouseout', (event) => { - _mars.buttons[mouseButtons[event.button]] = false - _mars.buttonsPressed[mouseButtons[event.button]] = true - }) - - let mouseCoordinates = [0, 0] - document.addEventListener('mousemove', (event) => { - mouseCoordinates = [event.pageX, event.pageY] - }) - - window.getButtons = () => _mars.buttons - - window.buttonDown = (button) => { - return !!_mars.buttons[button] - } - - window.buttonUp = (button) => { - return !_mars.buttons[button] - } - - window.buttonPressed = (button) => { - return !!_mars.buttonsPressed[button] - } - - // tilemap - - window.hasFlag = (flag, x, y) => { - try { - return !!_flags[Math.floor(x)][Math.floor(y)][flag] - } catch (e) {} - } - - window.getTile = (x, y) => { - try { - return _tilemap[Math.floor(x)][Math.floor(y)] - } catch (e) {} - } - - window.changeTile = (i, x, y) => { - try { - _tilemap[Math.floor(x)][Math.floor(y)] = i - updateTilemapCanvas() - } catch (e) {} - } -})(_mars) - -init() - -const DELAY = 1000 / 20 -let time = Date.now() -// this being an arrow function is important because it makes the browser treat -// the errors thrown inside of the function as normkl errors and not cross-origin errors -const _main = () => { - if (!_state.paused) { - if (Date.now() - time >= DELAY) { - update() - time = Date.now() - } - if (_clear) _ctx.clearRect(0, 0, window.innerWidth, window.innerHeight) - draw() - } - if (_state.running) window.requestAnimationFrame(_main) - _mars.keysPressed = {} - _mars.buttonsPressed = {} -} -window.requestAnimationFrame(_main) diff --git a/src/nico/src/nico/store.js b/src/nico/src/nico/store.js index 33e6333..af95692 100644 --- a/src/nico/src/nico/store.js +++ b/src/nico/src/nico/store.js @@ -1,9 +1,7 @@ import generateSet from '@/generateSet' import * as languages from './languages' -// inline loader syntax used because otherwise this loader doesn't work -// eslint-disable-next-line import/no-webpack-loader-syntax -import mars from '!raw-loader!./mars.raw' +import { initMars } from './mars' export default { namespaced: true, @@ -22,6 +20,9 @@ export default { langLoading: false, loadingTime: null, clicks: 0, + mars: null, + drawFunc: null, + updateFunc: null, }, getters: { @@ -45,6 +46,9 @@ export default { 'clicks', 'language', 'langLoading', + 'mars', + 'drawFunc', + 'updateFunc', ]), setView (state, view) { @@ -76,10 +80,13 @@ export default { actions: { setLanguage ({ commit }, language) { commit('setLangLoading', true) - commit('setLanguage', new languages[language](mars, () => commit('setLangLoading', false))) + commit( + 'setLanguage', + new languages[language](() => commit('setLangLoading', false)) + ) }, - run ({ state, commit, rootGetters, rootState, getters }) { + run ({ state, commit, rootGetters, rootState }) { commit('setClicks', state.clicks + 1) if (state.loading || state.langLoading) return @@ -87,64 +94,55 @@ export default { commit('setRunning', false) commit('setErrors', []) commit('setLoading', false) - window.onerror = (message, source, lineno, colno, error) => { - commit('setErrors', [ - state.language.convertWindowError({ message, source, lineno, colno, error }), - ]) - commit('setRunning', false) + + const { language } = state + + const marsParams = { + state, + ctx: state.mainCtx, + sprites: rootGetters['sprite/sprite/sprites'], + clear: true, + tilemap: rootGetters['tile/sprite/tilemap'](), + flags: rootState.tile.flags, + language, + onError: err => { + commit('setErrors', [err]) + commit('setRunning', false) + }, } + if (state.mars) { + const [, , updateMarsParams] = state.mars + updateMarsParams(marsParams) + } else { + commit('setMars', initMars(marsParams)) + } + + const [startMars, mars] = state.mars // this timeout is necessary for vuex to register the change in `loading` setTimeout(() => { - if (state.language.needsLoading) { - commit('setLoading', true) - state.language.getLoadingTime(this.client).then((time) => commit('setLoadingTime', time)) - } - state.language - .prepareCode(state.code, this.client) - .then(({ success, code, errors, warnings, blocked }) => { - commit('setLoading', false) - commit('setWarnings', warnings || []) - commit('setClicks', 0) - - if (success) { - commit('setRunning', true) - commit('setPaused', false) - - /* eslint-disable no-unused-vars */ - const variables = { - _state: state, - _ctx: state.mainCtx, - _sprites: rootGetters['sprite/sprite/sprites'], - _clear: true, - _tilemap: rootGetters['tile/sprite/tilemap'](), - _flags: rootState.tile.flags, - } - /* eslint-enable no-unused-vars */ - - try { - // keys: variable names, values: variable values, this is a way to scope values - // eslint-disable-next-line no-new-func - new Function(...Object.keys(variables), code)(...Object.values(variables)) - } catch (e) { - // most errors occur in the window scope and are caught by window.onerror, but a very small amount don't - // one example: python runtime error that occurs in the global scope - // because that's the only instance I've detected so far, a language does not have to implement this handler - - // is standard js error - if (e.message) { - commit('setErrors', [e]) - commit('setRunning', false) - // is weird language-specific area and handler implemented - } else if (state.language.convertError) { - commit('setErrors', [state.language.convertError(e)]) - commit('setRunning', false) - } + language + .refresh(state.code, mars) + .then( + ({ success, draw, update, init, errors, warnings, blocked }) => { + commit('setLoading', false) + commit('setWarnings', warnings || []) + commit('setClicks', 0) + + if (success) { + commit('setRunning', true) + commit('setPaused', false) + + commit('setDrawFunc', draw) + commit('setUpdateFunc', update) + + init() + startMars() + } else if (!blocked) { + commit('setErrors', errors) } - } else if (!blocked) { - commit('setErrors', errors) } - }) + ) // delay helps make sure that the old game stops }, 100) }, diff --git a/src/nico/yarn.lock b/src/nico/yarn.lock index bf733dd..b1636d9 100644 --- a/src/nico/yarn.lock +++ b/src/nico/yarn.lock @@ -5783,6 +5783,11 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" +rustpython_wasm@0.1.0-pre-alpha.1: + version "0.1.0-pre-alpha.1" + resolved "https://registry.yarnpkg.com/rustpython_wasm/-/rustpython_wasm-0.1.0-pre-alpha.1.tgz#981b65f56a240e25d6c1d3ac0d3f52cc2cb0a8b0" + integrity sha512-AliaQtmlH7OZsXT81KBOuZQgIxBdEWxDcjUVhkhFPr4Gc7xKF65lW9992xgSb3xtSyJM19bExvnzA51AgAbZwg== + rx-lite-aggregates@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" diff --git a/yarn.lock b/yarn.lock index 3dd100a..1da5d51 100644 --- a/yarn.lock +++ b/yarn.lock @@ -810,10 +810,10 @@ "@vue/babel-plugin-transform-vue-jsx" "^1.0.0-beta.2" camelcase "^5.0.0" -"@vue/cli-overlay@^3.4.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-3.4.0.tgz#7fe7cf41eacbaf1f1579efcad93e23b65d4581db" - integrity sha512-uLfQZvMChAf3UQNR+WN8a7vAPqvaw2tJs1TrNxPg+Dr7bm7HWoitvFremF0vLWkxIRM5e+VJgYV3wHk9EwWhzg== +"@vue/cli-overlay@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-3.4.1.tgz#f850c2f8d7cd42b475d03ec6658ccf2ec9830511" + integrity sha512-mO0680PClML4lj6ruH+YV3BwPjxvJ4HkgsyMlmCyOZimQBxifvjK/6MX2p179M1QoJtSaz8omRJ7a6/mAP5SXg== "@vue/cli-plugin-babel@^3.0.1": version "3.4.0" @@ -839,19 +839,19 @@ globby "^9.0.0" webpack ">=4 < 4.29" -"@vue/cli-service@^3.0.1": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-3.4.0.tgz#d2160ee4cf9de8dc4e9d780ccd61cc15862f2950" - integrity sha512-AtLiin5Jlw0ULKXJtBhUaykz0VzDgYq2RCf7nxfB7Vsi5fTbJyOVeWYe9KsnsM6VTRBWRUI8NzPPMYxV2uxtQA== +"@vue/cli-service@^3.4.0": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-3.4.1.tgz#65ef3ed00b8e6eeeca736308a703c264cfa280cc" + integrity sha512-HAF2yeafVJVKiBaapvbVIK4cM+lDU4r6aJzbKLOonzQrnI45T2NLEvYC+9uW7C5LvC1d4g1XUx25Q8ixSBKegQ== dependencies: "@intervolga/optimize-cssnano-plugin" "^1.0.5" "@soda/friendly-errors-webpack-plugin" "^1.7.1" - "@vue/cli-overlay" "^3.4.0" - "@vue/cli-shared-utils" "^3.4.0" + "@vue/cli-overlay" "^3.4.1" + "@vue/cli-shared-utils" "^3.4.1" "@vue/component-compiler-utils" "^2.5.2" "@vue/preload-webpack-plugin" "^1.1.0" "@vue/web-component-wrapper" "^1.2.0" - acorn "^6.0.6" + acorn "^6.1.0" acorn-walk "^6.1.1" address "^1.0.3" autoprefixer "^9.4.7" @@ -862,8 +862,9 @@ cliui "^4.1.0" copy-webpack-plugin "^4.6.0" css-loader "^1.0.1" - cssnano "^4.1.8" + cssnano "^4.1.10" debug "^4.1.1" + dotenv "^6.2.0" escape-string-regexp "^1.0.5" file-loader "^3.0.1" fs-extra "^7.0.1" @@ -876,7 +877,7 @@ lodash.transform "^4.6.0" mini-css-extract-plugin "^0.5.0" minimist "^1.2.0" - ora "^3.0.0" + ora "^3.1.0" portfinder "^1.0.20" postcss-loader "^3.0.0" read-pkg "^4.0.1" @@ -885,12 +886,12 @@ source-map-url "^0.4.0" ssri "^6.0.1" string.prototype.padend "^3.0.0" - terser-webpack-plugin "^1.2.1" + terser-webpack-plugin "^1.2.2" thread-loader "^2.1.2" url-loader "^1.1.2" vue-loader "^15.6.2" webpack ">=4 < 4.29" - webpack-bundle-analyzer "^3.0.3" + webpack-bundle-analyzer "^3.0.4" webpack-chain "^4.11.0" webpack-dev-server "^3.1.14" webpack-merge "^4.2.1" @@ -914,6 +915,24 @@ semver "^5.5.0" string.prototype.padstart "^3.0.0" +"@vue/cli-shared-utils@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-3.4.1.tgz#963454d2d2bc549d027c8988666c939903be6d7e" + integrity sha512-IbAQP1J48+q1ChjcHGnE06SdcCEeO77BERcPapjqZl3qJ6aPnq7z8VrNrZxo6oOnBJm7elGOvz4kJ6hirK9aPA== + dependencies: + chalk "^2.4.1" + execa "^1.0.0" + joi "^14.3.0" + launch-editor "^2.2.1" + lru-cache "^5.1.1" + node-ipc "^9.1.1" + opn "^5.3.0" + ora "^3.0.0" + request "^2.87.0" + request-promise-native "^1.0.5" + semver "^5.5.0" + string.prototype.padstart "^3.0.0" + "@vue/component-compiler-utils@^2.5.1", "@vue/component-compiler-utils@^2.5.2": version "2.5.2" resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-2.5.2.tgz#a8d57e773354ab10e4742c7d6a8dd86184d4d7be" @@ -1152,15 +1171,15 @@ acorn@^4.0.4, acorn@~4.0.2: resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c= -acorn@^5.0.0, acorn@^5.5.0, acorn@^5.6.2, acorn@^5.7.3: +acorn@^5.0.0, acorn@^5.5.0, acorn@^5.6.2: version "5.7.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== -acorn@^6.0.6: - version "6.0.6" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.6.tgz#cd75181670d5b99bdb1b1c993941d3a239ab1f56" - integrity sha512-5M3G/A4uBSMIlfJ+h9W125vJvPFH/zirISsW5qfxF5YzEvXJCtolLoQvM5yZft0DvMcUrPGKPOlgEu55I6iUtA== +acorn@^6.0.7, acorn@^6.1.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" + integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== address@^1.0.3: version "1.0.3" @@ -1246,6 +1265,11 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= +ansi-regex@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9" + integrity sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -1727,11 +1751,6 @@ browserslist@^4.0.0, browserslist@^4.3.4, browserslist@^4.4.1: electron-to-chromium "^1.3.103" node-releases "^1.1.3" -brython@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/brython/-/brython-3.7.0.tgz#458eb255dd3df1af6979b5e48d83a0a8b7be8d15" - integrity sha512-pwugFOXljE935ttmEjHO9h+FGLllosaoVXJv3e9JALc4KcsFh0Lf7LaaNfjxv9AvQ4GQBfMnorm6eHKcVf/0/g== - buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -2062,6 +2081,11 @@ cli-spinners@^1.1.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg== +cli-spinners@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.0.0.tgz#4b078756fc17a8f72043fdc9f1f14bf4fa87e2df" + integrity sha512-yiEBmhaKPPeBj7wWm4GEdtPZK940p9pl3EANIrnJ3JnvWyrPjcFcsEq6qRUuQ7fzB0+Y82ld3p6B34xo95foWw== + cli-table3@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" @@ -2633,6 +2657,42 @@ cssnano-preset-default@^4.0.0, cssnano-preset-default@^4.0.6: postcss-svgo "^4.0.1" postcss-unique-selectors "^4.0.1" +cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.2" + postcss-unique-selectors "^4.0.1" + cssnano-util-get-arguments@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" @@ -2655,7 +2715,7 @@ cssnano-util-same-parent@^4.0.0: resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== -cssnano@^4.0.0, cssnano@^4.1.8: +cssnano@^4.0.0: version "4.1.8" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.8.tgz#8014989679d5fd42491e4499a521dbfb85c95fd1" integrity sha512-5GIY0VzAHORpbKiL3rMXp4w4M1Ki+XlXgEXyuWXVd3h6hlASb+9Vo76dNP56/elLMVBBsUfusCo1q56uW0UWig== @@ -2665,6 +2725,16 @@ cssnano@^4.0.0, cssnano@^4.1.8: is-resolvable "^1.0.0" postcss "^7.0.0" +cssnano@^4.1.10: + version "4.1.10" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.7" + is-resolvable "^1.0.0" + postcss "^7.0.0" + csso@^3.5.0: version "3.5.1" resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" @@ -2988,6 +3058,11 @@ dot-prop@^4.1.1: dependencies: is-obj "^1.0.0" +dotenv@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" + integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== + duplexer@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" @@ -3964,13 +4039,6 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== -graphql@^0.13.2: - version "0.13.2" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-0.13.2.tgz#4c740ae3c222823e7004096f832e7b93b2108270" - integrity sha512-QZ5BL8ZO/B20VA8APauGBg3GyEgZ19eduvpLWoq5x7gMmWnHoy8rlQWPLmWgFvo1yNgjSEFMesmS4R6pPr7xog== - dependencies: - iterall "^1.2.1" - gzip-size@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz#a55ecd99222f4c48fd8c01c625ce3b349d0a0e80" @@ -4749,11 +4817,6 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -iterall@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" - integrity sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA== - javascript-stringify@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3" @@ -5903,6 +5966,18 @@ ora@^3.0.0: strip-ansi "^4.0.0" wcwidth "^1.0.1" +ora@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-3.2.0.tgz#67e98a7e11f7f0ac95deaaaf11bb04de3d09e481" + integrity sha512-XHMZA5WieCbtg+tu0uPF8CjvwQdNzKCX6BVh3N6GFsEXH40mTk5dsw/ya1lBTUGJslcEFJFQ8cBhOgkkZXQtMA== + dependencies: + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-spinners "^2.0.0" + log-symbols "^2.2.0" + strip-ansi "^5.0.0" + wcwidth "^1.0.1" + original@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" @@ -6223,7 +6298,7 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -postcss-calc@^7.0.0: +postcss-calc@^7.0.0, postcss-calc@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436" integrity sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ== @@ -6244,6 +6319,17 @@ postcss-colormin@^4.0.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-convert-values@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" @@ -6259,6 +6345,13 @@ postcss-discard-comments@^4.0.1: dependencies: postcss "^7.0.0" +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + postcss-discard-duplicates@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" @@ -6308,6 +6401,16 @@ postcss-merge-longhand@^4.0.10: postcss-value-parser "^3.0.0" stylehacks "^4.0.0" +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + postcss-merge-rules@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz#2be44401bf19856f27f32b8b12c0df5af1b88e74" @@ -6320,6 +6423,18 @@ postcss-merge-rules@^4.0.2: postcss-selector-parser "^3.0.0" vendors "^1.0.0" +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + postcss-minify-font-values@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" @@ -6338,6 +6453,16 @@ postcss-minify-gradients@^4.0.1: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-minify-params@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz#5b2e2d0264dd645ef5d68f8fec0d4c38c1cf93d2" @@ -6350,6 +6475,18 @@ postcss-minify-params@^4.0.1: postcss-value-parser "^3.0.0" uniqs "^2.0.0" +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + postcss-minify-selectors@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz#a891c197977cc37abf60b3ea06b84248b1c1e9cd" @@ -6360,6 +6497,16 @@ postcss-minify-selectors@^4.0.1: postcss "^7.0.0" postcss-selector-parser "^3.0.0" +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + postcss-modules-extract-imports@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" @@ -6407,6 +6554,15 @@ postcss-normalize-display-values@^4.0.1: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-normalize-positions@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz#ee2d4b67818c961964c6be09d179894b94fd6ba1" @@ -6417,6 +6573,16 @@ postcss-normalize-positions@^4.0.1: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-normalize-repeat-style@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz#5293f234b94d7669a9f805495d35b82a581c50e5" @@ -6427,6 +6593,16 @@ postcss-normalize-repeat-style@^4.0.1: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-normalize-string@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz#23c5030c2cc24175f66c914fa5199e2e3c10fef3" @@ -6436,6 +6612,15 @@ postcss-normalize-string@^4.0.1: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-normalize-timing-functions@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz#8be83e0b9cb3ff2d1abddee032a49108f05f95d7" @@ -6445,6 +6630,15 @@ postcss-normalize-timing-functions@^4.0.1: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-normalize-unicode@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" @@ -6472,6 +6666,14 @@ postcss-normalize-whitespace@^4.0.1: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-ordered-values@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz#2e3b432ef3e489b18333aeca1f1295eb89be9fc2" @@ -6481,6 +6683,15 @@ postcss-ordered-values@^4.1.1: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-reduce-initial@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz#bac8e325d67510ee01fa460676dc8ea9e3b40f15" @@ -6491,6 +6702,16 @@ postcss-reduce-initial@^4.0.2: has "^1.0.0" postcss "^7.0.0" +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-reduce-transforms@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz#8600d5553bdd3ad640f43bff81eb52f8760d4561" @@ -6501,6 +6722,16 @@ postcss-reduce-transforms@^4.0.1: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-selector-parser@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" @@ -6529,6 +6760,16 @@ postcss-svgo@^4.0.1: postcss-value-parser "^3.0.0" svgo "^1.0.0" +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== + dependencies: + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + postcss-unique-selectors@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" @@ -7271,6 +7512,11 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" +rustpython_wasm@^0.1.0-pre-alpha.1: + version "0.1.0-pre-alpha.1" + resolved "https://registry.yarnpkg.com/rustpython_wasm/-/rustpython_wasm-0.1.0-pre-alpha.1.tgz#981b65f56a240e25d6c1d3ac0d3f52cc2cb0a8b0" + integrity sha512-AliaQtmlH7OZsXT81KBOuZQgIxBdEWxDcjUVhkhFPr4Gc7xKF65lW9992xgSb3xtSyJM19bExvnzA51AgAbZwg== + rx-lite-aggregates@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" @@ -7588,11 +7834,6 @@ sockjs@0.3.19: faye-websocket "^0.10.0" uuid "^3.0.1" -sortablejs@^1.7.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.8.1.tgz#d19b66cf10aab9521a565b79766f2f3291c18278" - integrity sha512-r0bKxZYGUFgv/6DQSWW8TVJBBtupUn6TPnDABd4rlqNq+u94ct5+barZmYauPAQNCKwy56C1kg9Y9msAN7UPag== - source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -7609,7 +7850,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@~0.5.6: +source-map-support@~0.5.6, source-map-support@~0.5.9: version "0.5.10" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c" integrity sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ== @@ -7876,6 +8117,13 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f" + integrity sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow== + dependencies: + ansi-regex "^4.0.0" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -8023,7 +8271,7 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.2" -terser-webpack-plugin@^1.1.0, terser-webpack-plugin@^1.2.1: +terser-webpack-plugin@^1.1.0: version "1.2.1" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.2.1.tgz#7545da9ae5f4f9ae6a0ac961eb46f5e7c845cc26" integrity sha512-GGSt+gbT0oKcMDmPx4SRSfJPE1XaN3kQRWG4ghxKQw9cn5G9x6aCKSsgYdvyM0na9NJ4Drv0RG6jbBByZ5CMjw== @@ -8037,6 +8285,29 @@ terser-webpack-plugin@^1.1.0, terser-webpack-plugin@^1.2.1: webpack-sources "^1.1.0" worker-farm "^1.5.2" +terser-webpack-plugin@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz#3f98bc902fac3e5d0de730869f50668561262ec8" + integrity sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA== + dependencies: + cacache "^11.0.2" + find-cache-dir "^2.0.0" + schema-utils "^1.0.0" + serialize-javascript "^1.4.0" + source-map "^0.6.1" + terser "^3.16.1" + webpack-sources "^1.1.0" + worker-farm "^1.5.2" + +terser@^3.16.1: + version "3.16.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-3.16.1.tgz#5b0dd4fa1ffd0b0b43c2493b2c364fd179160493" + integrity sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow== + dependencies: + commander "~2.17.1" + source-map "~0.6.1" + source-map-support "~0.5.9" + terser@^3.8.1: version "3.14.1" resolved "https://registry.yarnpkg.com/terser/-/terser-3.14.1.tgz#cc4764014af570bc79c79742358bd46926018a32" @@ -8060,11 +8331,6 @@ thread-loader@^2.1.2: loader-utils "^1.1.0" neo-async "^2.6.0" -throttle-debounce@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.1.0.tgz#257e648f0a56bd9e54fe0f132c4ab8611df4e1d5" - integrity sha512-AOvyNahXQuU7NN+VVvOOX+uW6FPaWdAOdRP5HfwYxAfCzXTFKRMoIMk+n+po318+ktcChx+F1Dd91G3YHeMKyg== - through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -8481,14 +8747,6 @@ void-elements@^2.0.1: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= -vue-apollo@^3.0.0-beta.19: - version "3.0.0-beta.27" - resolved "https://registry.yarnpkg.com/vue-apollo/-/vue-apollo-3.0.0-beta.27.tgz#d071d7bbaf83c9689bdf992d9ef762c17af29623" - integrity sha512-0NcYSLReOI5vsZesX9rLVVKR8iZaJRAKsBG7eAUJ4RRIDzYBVpPET8C7v9oyhHymENN/FhImurq/krTk8z9ZYw== - dependencies: - chalk "^2.4.1" - throttle-debounce "^2.0.0" - vue-codemirror@^4.0.5: version "4.0.6" resolved "https://registry.yarnpkg.com/vue-codemirror/-/vue-codemirror-4.0.6.tgz#b786bb80d8d762a93aab8e46f79a81006f0437c4" @@ -8564,13 +8822,6 @@ vue@^2.5.17: resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.22.tgz#3bf88041af08b8539c37b268b70ca79245e9cc30" integrity sha512-pxY3ZHlXNJMFQbkjEgGVMaMMkSV1ONpz+4qB55kZuJzyJOhn6MSy/YZdzhdnumegNzVTL/Dn3Pp4UrVBYt1j/g== -vuedraggable@^2.16.0: - version "2.17.0" - resolved "https://registry.yarnpkg.com/vuedraggable/-/vuedraggable-2.17.0.tgz#489c16c9bcb9eb06f441944d3c52e5f2bb7060f9" - integrity sha512-TAC5tJTSbHSINQCSB59qHnuzT0Ad+E3IgvSWuA1e9UaebD8DxKaY1tCdvL3XvuLoaM3wc1dhpP/NbjpdxYsrng== - dependencies: - sortablejs "^1.7.0" - vuex-router-sync@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/vuex-router-sync/-/vuex-router-sync-5.0.0.tgz#1a225c17a1dd9e2f74af0a1b2c62072e9492b305" @@ -8604,12 +8855,13 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" -webpack-bundle-analyzer@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.0.3.tgz#dbc7fff8f52058b6714a20fddf309d0790e3e0a0" - integrity sha512-naLWiRfmtH4UJgtUktRTLw6FdoZJ2RvCR9ePbwM9aRMsS/KjFerkPZG9epEvXRAw5d5oPdrs9+3p+afNjxW8Xw== +webpack-bundle-analyzer@^3.0.4: + version "3.1.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.1.0.tgz#2f19cbb87bb6d4f3cb4e59cb67c837bd9436e89d" + integrity sha512-nyDyWEs7C6DZlgvu1pR1zzJfIWSiGPbtaByZr8q+Fd2xp70FuM/8ngCJzj3Er1TYRLSFmp1F1OInbEm4DZH8NA== dependencies: - acorn "^5.7.3" + acorn "^6.0.7" + acorn-walk "^6.1.1" bfj "^6.1.1" chalk "^2.4.1" commander "^2.18.0"