[4.0] Update npm dependencies (#36295)

This commit is contained in:
Dimitris Grammatikogiannis 2021-12-21 00:06:31 +01:00 committed by GitHub
parent d35e3e8553
commit 3b16615a3f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
34 changed files with 7941 additions and 5949 deletions

View File

@ -3,27 +3,22 @@ import * as types from './mutation-types.es6';
import translate from '../plugins/translate.es6';
import { notifications } from '../app/Notifications.es6';
// Actions are similar to mutations, the difference being that:
// - Instead of mutating the state, actions commit mutations.
// - Actions can contain arbitrary asynchronous operations.
const updateUrlPath = (path) => {
const currentPath = path === null ? '' : path;
const url = new URL(window.location.href);
// TODO move to utils
function updateUrlPath(path) {
if (path == null) {
// eslint-disable-next-line no-param-reassign
path = '';
}
const url = window.location.href;
const pattern = new RegExp('\\b(path=).*?(&|$)');
if (url.search(pattern) >= 0) {
// eslint-disable-next-line no-restricted-globals
history.pushState(null, '', url.replace(pattern, `$1${path}$2`));
if (url.searchParams.has('path')) {
window.history.pushState(null, '', url.href.replace(/\b(path=).*?(&|$)/, `$1${currentPath}$2`));
} else {
// eslint-disable-next-line no-restricted-globals
history.pushState(null, '', `${url + (url.indexOf('?') > 0 ? '&' : '?')}path=${path}`);
window.history.pushState(null, '', `${url.href + (url.href.indexOf('?') > 0 ? '&' : '?')}path=${currentPath}`);
}
}
};
/**
* Actions are similar to mutations, the difference being that:
* Instead of mutating the state, actions commit mutations.
* Actions can contain arbitrary asynchronous operations.
*/
/**
* Get contents of a directory from the api

View File

@ -92,9 +92,14 @@ export default {
// Update the relation to the parent directory
if (parentDirectoryIndex !== -1) {
state.directories
.splice(parentDirectoryIndex,
.splice(
parentDirectoryIndex,
1,
{ ...parentDirectory, directories: [...parentDirectory.directories, directory.path] });
{
...parentDirectory,
directories: [...parentDirectory.directories, directory.path],
},
);
}
}
@ -119,9 +124,14 @@ export default {
// Update the relation to the parent directory
if (parentDirectoryIndex !== -1) {
state.directories
.splice(parentDirectoryIndex,
.splice(
parentDirectoryIndex,
1,
{ ...parentDirectory, files: [...parentDirectory.files, file.path] });
{
...parentDirectory,
files: [...parentDirectory.files, file.path],
},
);
}
}
@ -158,9 +168,14 @@ export default {
state.files.push(file);
// Update the relation to the parent directory
state.directories.splice(parentDirectoryIndex,
state.directories.splice(
parentDirectoryIndex,
1,
{ ...parentDirectory, files: [...parentDirectory.files, file.path] });
{
...parentDirectory,
files: [...parentDirectory.files, file.path],
},
);
}
},
@ -182,9 +197,14 @@ export default {
state.directories.push(directory);
// Update the relation to the parent directory
state.directories.splice(parentDirectoryIndex,
state.directories.splice(
parentDirectoryIndex,
1,
{ ...parentDirectory, directories: [...parentDirectory.directories, directory.path] });
{
...parentDirectory,
directories: [...parentDirectory.directories, directory.path],
},
);
}
},

View File

@ -5,7 +5,6 @@
// Vue
"plugin:vue/vue3-recommended"
],
"parser": "vue-eslint-parser",
"parserOptions": {
"sourceType": "module"
},

View File

@ -3,6 +3,7 @@
"stylelint-scss",
"stylelint-order"
],
"customSyntax": "postcss-scss",
"rules": {
"declaration-bang-space-before": "always",
"declaration-bang-space-after": "never",

View File

@ -14,6 +14,11 @@ const RootPath = process.cwd();
*/
module.exports.copyAllFiles = async (dirName, name, type) => {
const folderName = dirName === '/' ? '/' : `/${dirName}`;
await copy(join(RootPath, `node_modules/${name}/${folderName}`),
join(RootPath, `media/vendor/${name.replace(/.+\//, '')}/${type}`), { preserveTimestamps: true });
await copy(
join(RootPath, `node_modules/${name}/${folderName}`),
join(RootPath, `media/vendor/${name.replace(/.+\//, '')}/${type}`),
{
preserveTimestamps: true,
},
);
};

View File

@ -54,13 +54,15 @@ module.exports.codeMirror = async (packageName, version) => {
'media/vendor/codemirror/lib/addons.js',
);
await concatFiles([
'media/vendor/codemirror/addon/display/fullscreen.css',
'media/vendor/codemirror/addon/fold/foldgutter.css',
'media/vendor/codemirror/addon/search/matchesonscrollbar.css',
'media/vendor/codemirror/addon/scroll/simplescrollbars.css',
],
'media/vendor/codemirror/lib/addons.css');
await concatFiles(
[
'media/vendor/codemirror/addon/display/fullscreen.css',
'media/vendor/codemirror/addon/fold/foldgutter.css',
'media/vendor/codemirror/addon/search/matchesonscrollbar.css',
'media/vendor/codemirror/addon/scroll/simplescrollbars.css',
],
'media/vendor/codemirror/lib/addons.css',
);
// Update the XML file for Codemirror
let codemirrorXml = await readFile(`${RootPath}/plugins/editors/codemirror/codemirror.xml`, { encoding: 'utf8' });

View File

@ -289,8 +289,7 @@
"diff": {
"name": "diff",
"js": {
"dist/diff.js": "js/diff.js",
"dist/diff.min.js": "js/diff.min.js"
"dist/diff.js": "js/diff.js"
},
"provideAssets": [
{
@ -526,7 +525,6 @@
"build/mediaelement-flash-video-hls.swf": "js/mediaelement-flash-video-hls.swf",
"build/mediaelement-flash-video-mdash.swf": "js/mediaelement-flash-video-mdash.swf",
"build/mediaelement-flash-video.swf": "js/mediaelement-flash-video.swf",
"build/mejs-controls.png": "css/mejs-controls.png",
"build/mejs-controls.svg": "css/mejs-controls.svg"
},
"dependencies": [],

View File

@ -6,5 +6,5 @@
* @param { int } time The time to wait before firing the callback
* @param { int } interval The interval
*/
// eslint-disable-next-line no-param-reassign, no-return-assign
// eslint-disable-next-line no-param-reassign, no-return-assign, default-param-last
module.exports.debounce = (callback, time = 250, interval) => (...args) => clearTimeout(interval, interval = setTimeout(callback, time, ...args));

View File

@ -17,7 +17,7 @@
* node build.js --versioning will update all the joomla.assets.json files providing accurate versions for stylesheets and scripts.
*/
const Program = require('commander');
const { Command } = require('commander');
const semver = require('semver');
// Joomla Build modules
@ -40,6 +40,9 @@ const { Timer } = require('./build-modules-js/utils/timer.es6.js');
const options = require('../package.json');
const settings = require('./build-modules-js/settings.json');
// The command line
const Program = new Command();
// Merge Joomla's specific settings to the main package.json object
if ('settings' in settings) {
options.settings = settings.settings;
@ -59,6 +62,7 @@ const allowedVersion = () => {
// Initialize the CLI
Program
.allowUnknownOption()
.version(options.version)
.option('--copy-assets', 'Moving files from node_modules to media folder')
.option('--build-pages', 'Creates the error pages for unsupported PHP version & incomplete environment')
@ -72,21 +76,16 @@ Program
.option('--prepare', 'Run all the needed tasks to initialise the repo')
.option('--versioning', 'Update all the .js/.css versions on their relative joomla.assets.json')
.on('--help', () => {
// eslint-disable-next-line no-console
console.log(`Version: ${options.version}`);
process.exit(0);
})
.parse(process.argv);
.addHelpText('after', `
Version: ${options.version}
`);
// Show help by default
if (!process.argv.slice(2).length) {
Program.outputHelp();
handleError('', 1);
}
Program.parse(process.argv);
const cliOptions = Program.opts();
// Update the vendor folder
if (Program.copyAssets) {
if (cliOptions.copyAssets) {
allowedVersion();
recreateMediaFolder(options)
.then(() => cleanVendors())
@ -100,57 +99,57 @@ if (Program.copyAssets) {
}
// Creates the error pages for unsupported PHP version & incomplete environment
if (Program.buildPages) {
if (cliOptions.buildPages) {
createErrorPages(options)
.catch((err) => handleError(err, 1));
}
// Convert scss to css
if (Program.compileCss) {
if (cliOptions.compileCss) {
stylesheets(options, Program.args[0])
.catch((err) => handleError(err, 1));
}
// Compress/transpile the javascript files
if (Program.compileJs) {
if (cliOptions.compileJs) {
scripts(options, Program.args[0])
.catch((err) => handleError(err, 1));
}
// Compress/transpile the javascript files
if (Program.watch) {
if (cliOptions.watch) {
watching(Program.args[0]);
}
// Gzip js/css files
if (Program.compileBs) {
if (cliOptions.compileBs) {
bootstrapJs();
}
// Gzip js/css files
if (Program.gzip) {
if (cliOptions.gzip) {
compressFiles();
}
// Compile the media manager
if (Program.comMedia) {
if (cliOptions.comMedia) {
// false indicates "no watch"
mediaManager(false);
}
// Watch & Compile the media manager
if (Program.watchComMedia) {
if (cliOptions.watchComMedia) {
watchMediaManager(true);
}
// Update the .js/.css versions
if (Program.versioning) {
if (cliOptions.versioning) {
versioning()
.catch((err) => handleError(err, 1));
}
// Prepare the repo for dev work
if (Program.prepare) {
if (cliOptions.prepare) {
const bench = new Timer('Build');
allowedVersion();
recreateMediaFolder(options)

View File

@ -17,7 +17,7 @@ Joomla = window.Joomla || {};
if (el) {
const attribute = el.getAttribute('for');
if (attribute.replace(new RegExp('_name$'), '') === `${formControl}_associations_${languageCode.replace('-', '_')}`) {
if (attribute.replace(/_name$/, '') === `${formControl}_associations_${languageCode.replace('-', '_')}`) {
element.classList.add('hidden');
}
}

View File

@ -11,7 +11,7 @@
* @param { int } time The time to wait before firing the callback
* @param { int } interval The interval
*/
// eslint-disable-next-line no-param-reassign, no-return-assign
// eslint-disable-next-line no-param-reassign, no-return-assign, default-param-last
const debounce = (callback, time = 250, interval) => (...args) => clearTimeout(interval, interval = setTimeout(callback, time, ...args));
((window, document, Joomla) => {

View File

@ -1,7 +1,7 @@
Joomla.fieldsChangeContext = (context) => {
'use strict';
const regex = new RegExp('([?;&])context[^&;]*[;&]?');
const regex = /([?;&])context[^&;]*[;&]?/;
const url = window.location.href;
const query = url.replace(regex, '$1').replace(/&$/, '');
// eslint-disable-next-line

View File

@ -26,6 +26,7 @@ class Edit {
extension: this.extension,
contents: `data:image/${this.fileType};base64,${this.options.contents}`,
};
// eslint-disable-next-line no-promise-executor-return
this.previousPluginDeactivated = new Promise((resolve) => resolve);
this.history = {};
this.current = this.original;
@ -56,6 +57,7 @@ class Edit {
link.addEventListener('joomla.tab.hidden', ({ target }) => {
if (!target) {
// eslint-disable-next-line no-promise-executor-return
this.previousPluginDeactivated = new Promise((resolve) => resolve);
return;
}

View File

@ -57,8 +57,9 @@ class WebInstaller {
return false;
}
// eslint-disable-next-line prefer-regex-literals
const pattern1 = new RegExp(webInstallerOptions.options.base_url);
const pattern2 = new RegExp('^index.php');
const pattern2 = /^index\.php/;
if (!(pattern1.test(url) || pattern2.test(url))) {
window.open(url, '_blank');
@ -290,7 +291,7 @@ class WebInstaller {
processLinkClick(url) {
const pattern1 = new RegExp(webInstallerOptions.options.base_url);
const pattern2 = new RegExp('^index.php');
const pattern2 = /^index\.php/;
if (pattern1.test(url) || pattern2.test(url)) {
webInstallerOptions.view = url.replace(/^.+[&?]view=(\w+).*$/, '$1');

View File

@ -146,9 +146,7 @@ window.Joomla = window.Joomla || {};
return;
}
publicKey.challenge = Uint8Array.from(
window.atob(base64url2base64(publicKey.challenge)), (c) => c.charCodeAt(0),
);
publicKey.challenge = Uint8Array.from(window.atob(base64url2base64(publicKey.challenge)), (c) => c.charCodeAt(0));
if (publicKey.allowCredentials) {
publicKey.allowCredentials = publicKey.allowCredentials.map((data) => {

View File

@ -103,9 +103,7 @@ window.Joomla = window.Joomla || {};
};
// Convert the public key information to a format usable by the browser's credentials manager
publicKey.challenge = Uint8Array.from(
window.atob(base64url2base64(publicKey.challenge)), (c) => c.charCodeAt(0),
);
publicKey.challenge = Uint8Array.from(window.atob(base64url2base64(publicKey.challenge)), (c) => c.charCodeAt(0));
publicKey.user.id = Uint8Array.from(window.atob(publicKey.user.id), (c) => c.charCodeAt(0));

View File

@ -12,31 +12,31 @@
* Regex for hex values e.g. #FF3929
* @type {RegExp}
*/
const hexRegex = new RegExp(/^#([a-z0-9]{1,2})([a-z0-9]{1,2})([a-z0-9]{1,2})$/i);
const hexRegex = /^#([a-z0-9]{1,2})([a-z0-9]{1,2})([a-z0-9]{1,2})$/i;
/**
* Regex for rgb values e.g. rgba(255, 0, 24, 0.5);
* @type {RegExp}
*/
const rgbRegex = new RegExp(/^rgba?\(([0-9]+)[\D]+([0-9]+)[\D]+([0-9]+)(?:[\D]+([0-9](?:.\d+)?))?\)$/i);
const rgbRegex = /^rgba?\(([0-9]+)[\D]+([0-9]+)[\D]+([0-9]+)(?:[\D]+([0-9](?:.\d+)?))?\)$/i;
/**
* Regex for hsl values e.g. hsl(255,0,24);
* @type {RegExp}
*/
const hslRegex = new RegExp(/^hsla?\(([0-9]+)[\D]+([0-9]+)[\D]+([0-9]+)[\D]+([0-9](?:.\d+)?)?\)$/i);
const hslRegex = /^hsla?\(([0-9]+)[\D]+([0-9]+)[\D]+([0-9]+)[\D]+([0-9](?:.\d+)?)?\)$/i;
/**
* Regex for saturation and lightness of hsl - only accepts 1 or 0 or 0.4 or 40
* @type {RegExp}
*/
const hslNumberRegex = new RegExp(/^(([0-1])|(0\\.[0-9]+)|([0-9]{1,2})|(100))$/);
const hslNumberRegex = /^(([0-1])|(0\\.[0-9]+)|([0-9]{1,2})|(100))$/;
/**
* Regex for hue values - one to three numbers
* @type {RegExp}
*/
const hueRegex = new RegExp(/^[0-9]{1,3}$/);
const hueRegex = /^[0-9]{1,3}$/;
/**
* Creates a slider for the color values hue, saturation and light.

View File

@ -121,14 +121,16 @@ customElements.define('joomla-field-module-order', class extends HTMLElement {
orders[i] = response.data[i].split(',');
}
that.writeDynaList({
name,
id,
itemClass: attr,
},
orders,
that.originalPosition,
originalOrder);
that.writeDynaList(
{
name,
id,
itemClass: attr,
},
orders,
that.originalPosition,
originalOrder,
);
}
}

View File

@ -44,7 +44,7 @@
// Update the template
this.template = this.template.replace(new RegExp(` name="${this.name.replace(/[[\]]/g, '\\$&')}`, 'g'), ` name="${value}`);
return this.setAttribute('name', value);
this.setAttribute('name', value);
}
constructor() {

View File

@ -48,8 +48,12 @@ class PasswordStrength {
score += this.constructor.calc(value, /[A-Z]/g, this.uppercase, mods);
score += this.constructor.calc(value, /[0-9]/g, this.numbers, mods);
// eslint-disable-next-line no-useless-escape
score += this.constructor.calc(value, /[\$\!\#\?\=\;\:\*\-\_\€\%\&\(\)\`\´]/g,
this.special, mods);
score += this.constructor.calc(
value,
/[$!#?=;:*\-_€%&()`´]/g,
this.special,
mods,
);
if (mods === 1) {
score += value.length > this.length

View File

@ -19,7 +19,7 @@ class JFormValidator {
// Default handlers
this.setHandler('username', (value) => {
const regex = new RegExp('[<|>|"|\'|%|;|(|)|&]', 'i');
const regex = /[<|>|"|'|%|;|(|)|&]/i;
return !regex.test(value);
});
this.setHandler('password', (value) => {

View File

@ -1,4 +1,4 @@
import Alert from '../../../../../node_modules/bootstrap/js/src/alert';
import Alert from 'bootstrap/js/src/alert';
window.bootstrap = window.bootstrap || {};
window.bootstrap.Alert = Alert;

View File

@ -1,4 +1,4 @@
import Button from '../../../../../node_modules/bootstrap/js/src/button';
import Button from 'bootstrap/js/src/button';
window.bootstrap = window.bootstrap || {};
window.bootstrap.Button = Button;

View File

@ -1,4 +1,4 @@
import Carousel from '../../../../../node_modules/bootstrap/js/src/carousel';
import Carousel from 'bootstrap/js/src/carousel';
window.bootstrap = window.bootstrap || {};
window.bootstrap.Carousel = Carousel;

View File

@ -1,4 +1,4 @@
import Collapse from '../../../../../node_modules/bootstrap/js/src/collapse';
import Collapse from 'bootstrap/js/src/collapse';
window.bootstrap = window.bootstrap || {};
window.bootstrap.Collapse = Collapse;

View File

@ -1,4 +1,4 @@
import Dropdown from '../../../../../node_modules/bootstrap/js/src/dropdown';
import Dropdown from 'bootstrap/js/src/dropdown';
window.bootstrap = window.bootstrap || {};
window.bootstrap.Dropdown = Dropdown;

View File

@ -1,4 +1,4 @@
import Modal from '../../../../../node_modules/bootstrap/js/src/modal';
import Modal from 'bootstrap/js/src/modal';
Joomla = Joomla || {};
Joomla.Modal = Joomla.Modal || {};

View File

@ -1,4 +1,4 @@
import Offcanvas from '../../../../../node_modules/bootstrap/js/src/offcanvas';
import Offcanvas from 'bootstrap/js/src/offcanvas';
window.bootstrap = window.bootstrap || {};
window.bootstrap.Offcanvas = Offcanvas;

View File

@ -1,5 +1,5 @@
import Popover from '../../../../../node_modules/bootstrap/js/src/popover';
import Tooltip from '../../../../../node_modules/bootstrap/js/src/tooltip';
import Popover from 'bootstrap/js/src/popover';
import Tooltip from 'bootstrap/js/src/tooltip';
window.bootstrap = window.bootstrap || {};
window.bootstrap.Popover = Popover;

View File

@ -1,4 +1,4 @@
import Scrollspy from '../../../../../node_modules/bootstrap/js/src/scrollspy';
import Scrollspy from 'bootstrap/js/src/scrollspy';
window.bootstrap = window.bootstrap || {};
window.bootstrap.Scrollspy = Scrollspy;

View File

@ -1,4 +1,4 @@
import Tab from '../../../../../node_modules/bootstrap/js/src/tab';
import Tab from 'bootstrap/js/src/tab';
window.Joomla = window.Joomla || {};
window.bootstrap = window.bootstrap || {};

View File

@ -1,4 +1,4 @@
import Toast from '../../../../../node_modules/bootstrap/js/src/toast';
import Toast from 'bootstrap/js/src/toast';
window.bootstrap = window.bootstrap || {};
window.bootstrap.Toast = Toast;

13571
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -19,7 +19,7 @@
"watch": "node build/build.js --watch",
"watch:com_media": "node build/build.js --watch-com-media",
"lint:js": "eslint --config build/.eslintrc --ignore-pattern '/media/' --ext .es6.js,.es6,.vue .",
"lint:css": "stylelint --config build/.stylelintrc.json -s scss \"administrator/components/com_media/resources/**/*.scss\" \"administrator/templates/**/*.scss\" \"build/media_source/**/*.scss\" \"templates/**/*.scss\" \"installation/template/**/*.scss\"",
"lint:css": "stylelint --config build/.stylelintrc.json \"administrator/components/com_media/resources/**/*.scss\" \"administrator/templates/**/*.scss\" \"build/media_source/**/*.scss\" \"templates/**/*.scss\" \"installation/template/**/*.scss\"",
"test": "karma start tests/javascript/karma.conf.js --single-run",
"install": "node build/build.js --prepare",
"update": "node build/build.js --copy-assets && node build/build.js --build-pages && node build/build.js --compile-js && node build/build.js --compile-css && node build/build.js --compile-bs && node build/build.js --com-media",
@ -31,77 +31,78 @@
"not ie < 11"
],
"dependencies": {
"@claviska/jquery-minicolors": "^2.3.5",
"@fortawesome/fontawesome-free": "^5.15.3",
"@popperjs/core": "^2.9.2",
"@webcomponents/webcomponentsjs": "^2.5.0",
"accessibility": "^3.0.10",
"awesomplete": "1.1.5",
"@claviska/jquery-minicolors": "^2.3.6",
"@fortawesome/fontawesome-free": "^5.15.4",
"@popperjs/core": "^2.11.0",
"@webcomponents/webcomponentsjs": "^2.6.0",
"accessibility": "^3.0.14",
"awesomplete": "^1.1.5",
"bootstrap": "^5.1.2",
"choices.js": "^9.0.1",
"chosen-js": "^1.8.7",
"codemirror": "^5.64.0",
"cropperjs": "^1.5.11",
"diff": "^4.0.2",
"dragula": "3.7.2",
"cropperjs": "^1.5.12",
"diff": "^5.0.0",
"dragula": "^3.7.3",
"focus-visible": "^5.2.0",
"joomla-ui-custom-elements": "0.2.0",
"joomla-ui-custom-elements": "^0.2.0",
"jquery": "^3.6.0",
"jquery-migrate": "^3.3.2",
"mark.js": "^8.11.1",
"mediaelement": "^4.2.16",
"metismenujs": "^1.2.1",
"mediaelement": "^5.0.4",
"metismenujs": "^1.3.1",
"punycode": "^2.1.1",
"qrcode-generator": "^1.4.4",
"roboto-fontface": "^0.10.0",
"short-and-sweet": "^1.0.4",
"skipto": "^4.1.0",
"skipto": "^4.1.3",
"tinymce": "^5.10.2",
"vue": "^3.1.2",
"vue": "3.2.26",
"vuex": "^4.0.2",
"vuex-persistedstate": "^4.0.0-beta.3"
"vuex-persistedstate": "^4.1.0"
},
"devDependencies": {
"@babel/core": "^7.14.0",
"@babel/preset-env": "^7.14.1",
"@babel/core": "^7.16.0",
"@babel/preset-env": "^7.16.4",
"@dgrammatiko/compress": "^1.0.4",
"@rollup/plugin-babel": "^5.3.0",
"@rollup/plugin-commonjs": "^17.1.0",
"@rollup/plugin-node-resolve": "^11.2.0",
"@rollup/plugin-replace": "^2.4.1",
"@vue/compiler-sfc": "^3.1.2",
"autoprefixer": "^9.8.6",
"@rollup/plugin-commonjs": "^21.0.1",
"@rollup/plugin-node-resolve": "^13.0.6",
"@rollup/plugin-replace": "^3.0.0",
"@vue/compiler-sfc": "^3.2.26",
"autoprefixer": "^10.4.0",
"chokidar": "^3.5.2",
"commander": "^5.1.0",
"core-js": "^3.12.0",
"cssnano": "^5.0.0",
"eslint": "^7.25.0",
"eslint-config-airbnb-base": "^14.2.1",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-vue": "^7.9.0",
"fs-extra": "^9.1.0",
"ini": "^1.3.8",
"jasmine-core": "^3.7.1",
"karma": "^6.3.4",
"karma-coverage": "^2.0.3",
"karma-firefox-launcher": "^2.1.1",
"commander": "^8.3.0",
"core-js": "^3.19.3",
"cssnano": "^5.0.12",
"eslint": "^8.4.1",
"eslint-config-airbnb-base": "^15.0.0",
"eslint-plugin-import": "^2.25.3",
"eslint-plugin-vue": "^8.2.0",
"fs-extra": "^10.0.0",
"ini": "^2.0.0",
"jasmine-core": "^3.10.1",
"karma": "^6.3.9",
"karma-coverage": "^2.1.0",
"karma-firefox-launcher": "^2.1.2",
"karma-fixture": "^0.2.6",
"karma-html2js-preprocessor": "^1.1.0",
"karma-jasmine": "^4.0.1",
"karma-jasmine-ajax": "^0.1.13",
"karma-json-fixtures-preprocessor": "0.0.6",
"karma-verbose-reporter": "^0.0.6",
"postcss": "^8.0.0",
"postcss": "^8.4.4",
"postcss-scss": "^4.0.2",
"recursive-readdir": "^2.2.2",
"rimraf": "^3.0.2",
"rollup": "^2.52.3",
"rollup": "^2.61.1",
"rollup-plugin-vue": "^6.0.0",
"sass": "^1.42.0",
"selenium-standalone": "6.23.0",
"stylelint": "^13.13.1",
"stylelint-config-standard": "^20.0.0",
"stylelint-order": "^4.1.0",
"stylelint-scss": "^3.19.0",
"sass": "^1.45.0",
"selenium-standalone": "^8.0.8",
"stylelint": "^14.1.0",
"stylelint-config-standard": "^24.0.0",
"stylelint-order": "^5.0.0",
"stylelint-scss": "^4.0.1",
"terser": "^5.7.0"
}
}