From 376b75a936dddb2dc3e10ed9867f55723075bfc0 Mon Sep 17 00:00:00 2001
From: Richard Tibbles
Date: Tue, 6 Sep 2022 17:23:53 -0700
Subject: [PATCH 01/12] Create custom eslint rules for vue components to
enforce our vue SFC conventions.
---
.../lib/rules/vue-component-block-padding.js | 169 +++++++++
.../rules/vue-component-block-tag-newline.js | 165 +++++++++
.../rules/vue-component-block-padding.spec.js | 332 ++++++++++++++++++
.../vue-component-block-tag-newline.spec.js | 189 ++++++++++
4 files changed, 855 insertions(+)
create mode 100644 packages/eslint-plugin-kolibri/lib/rules/vue-component-block-padding.js
create mode 100644 packages/eslint-plugin-kolibri/lib/rules/vue-component-block-tag-newline.js
create mode 100644 packages/eslint-plugin-kolibri/tests/lib/rules/vue-component-block-padding.spec.js
create mode 100644 packages/eslint-plugin-kolibri/tests/lib/rules/vue-component-block-tag-newline.spec.js
diff --git a/packages/eslint-plugin-kolibri/lib/rules/vue-component-block-padding.js b/packages/eslint-plugin-kolibri/lib/rules/vue-component-block-padding.js
new file mode 100644
index 00000000000..239e1003fad
--- /dev/null
+++ b/packages/eslint-plugin-kolibri/lib/rules/vue-component-block-padding.js
@@ -0,0 +1,169 @@
+/**
+ * @fileoverview Require padding lines between blocks
+ * Vendored and modified from:
+ * https://github.com/vuejs/eslint-plugin-vue/blob/9b55f3c18403b0a77808ba758ec3a8e72a884036/lib/rules/padding-line-between-blocks.js
+ * Modified for two padded lines.
+ */
+'use strict';
+const utils = require('eslint-plugin-vue/lib/utils');
+
+/**
+ * Split the source code into multiple lines based on the line delimiters.
+ * @param {string} text Source code as a string.
+ * @returns {string[]} Array of source code lines.
+ */
+function splitLines(text) {
+ return text.split(/\r\n|[\r\n\u2028\u2029]/gu);
+}
+
+/**
+ * Check and report blocks.
+ * This autofix inserts two blank lines between the given 2 blocks.
+ * @param {RuleContext} context The rule context to report.
+ * @param {VElement} prevBlock The previous block to check.
+ * @param {VElement} nextBlock The next block to check.
+ * @param {Token[]} betweenTokens The array of tokens between blocks.
+ * @returns {void}
+ * @private
+ */
+function verifyForAlways(context, prevBlock, nextBlock, betweenTokens) {
+ const tokenOrNodes = [...betweenTokens, nextBlock];
+ /** @type {ASTNode | Token} */
+ let prev = prevBlock;
+ let linebreaks = 0;
+ /** @type {ASTNode | Token | undefined} */
+ let linebreak;
+ const paddingLines = [];
+ for (const tokenOrNode of tokenOrNodes) {
+ const numOfLineBreaks = tokenOrNode.loc.start.line - prev.loc.end.line;
+ if (numOfLineBreaks == 3) {
+ return;
+ }
+ if (numOfLineBreaks > 3) {
+ paddingLines.push([prev, tokenOrNode]);
+ } else {
+ if (!linebreak && numOfLineBreaks > 0) {
+ linebreak = prev;
+ }
+ linebreaks = Math.max(linebreaks, numOfLineBreaks);
+ }
+ prev = tokenOrNode;
+ }
+
+ context.report({
+ node: nextBlock,
+ messageId: 'always',
+ *fix(fixer) {
+ if (paddingLines.length) {
+ for (const [prevToken, nextToken] of paddingLines) {
+ const start = prevToken.range[1];
+ const end = nextToken.range[0];
+ const paddingText = context.getSourceCode().text.slice(start, end);
+ const lastSpaces = splitLines(paddingText).pop();
+ yield fixer.replaceTextRange([start, end], `\n\n\n${lastSpaces}`);
+ }
+ } else {
+ const lines = new Array(3 - linebreaks).fill('\n').join('');
+ yield fixer.insertTextAfter(linebreak ? linebreak : prevBlock, lines);
+ }
+ },
+ });
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+ meta: {
+ type: 'layout',
+ docs: {
+ description: 'require TWO padding lines between blocks',
+ categories: undefined,
+ },
+ fixable: 'whitespace',
+ messages: {
+ always: 'Expected two blank lines before this block.',
+ },
+ },
+ /** @param {RuleContext} context */
+ create(context) {
+ if (!context.parserServices.getDocumentFragment) {
+ return {};
+ }
+ const df = context.parserServices.getDocumentFragment();
+ if (!df) {
+ return {};
+ }
+ const documentFragment = df;
+
+ const paddingType = { verify: verifyForAlways };
+
+ /** @type {Token[]} */
+ let tokens;
+ /**
+ * @returns {VElement[]}
+ */
+ function getTopLevelHTMLElements() {
+ return documentFragment.children.filter(utils.isVElement);
+ }
+
+ /**
+ * @param {VElement} prev
+ * @param {VElement} next
+ */
+ function getTokenAndCommentsBetween(prev, next) {
+ // When there is no , tokenStore.getTokensBetween cannot be used.
+ if (!tokens) {
+ tokens = [
+ ...documentFragment.tokens.filter(token => token.type !== 'HTMLWhitespace'),
+ ...documentFragment.comments,
+ ].sort((a, b) => {
+ if (a.range[0] > b.range[0]) return 1;
+ return a.range[0] < b.range[0] ? -1 : 0;
+ });
+ }
+
+ let token = tokens.shift();
+
+ const results = [];
+ while (token) {
+ if (prev.range[1] <= token.range[0]) {
+ if (next.range[0] <= token.range[0]) {
+ tokens.unshift(token);
+ break;
+ } else {
+ results.push(token);
+ }
+ }
+ token = tokens.shift();
+ }
+
+ return results;
+ }
+
+ return utils.defineTemplateBodyVisitor(
+ context,
+ {},
+ {
+ /** @param {Program} node */
+ Program(node) {
+ if (utils.hasInvalidEOF(node)) {
+ return;
+ }
+ const elements = [...getTopLevelHTMLElements()];
+
+ let prev = elements.shift();
+ for (const element of elements) {
+ if (!prev) {
+ return;
+ }
+ const betweenTokens = getTokenAndCommentsBetween(prev, element);
+ paddingType.verify(context, prev, element, betweenTokens);
+ prev = element;
+ }
+ },
+ }
+ );
+ },
+};
diff --git a/packages/eslint-plugin-kolibri/lib/rules/vue-component-block-tag-newline.js b/packages/eslint-plugin-kolibri/lib/rules/vue-component-block-tag-newline.js
new file mode 100644
index 00000000000..76c781c8325
--- /dev/null
+++ b/packages/eslint-plugin-kolibri/lib/rules/vue-component-block-tag-newline.js
@@ -0,0 +1,165 @@
+/**
+ * @fileoverview Enforce line breaks style after opening and before closing block-level tags.
+ * Vendored and modified from:
+ * https://github.com/vuejs/eslint-plugin-vue/blob/9b55f3c18403b0a77808ba758ec3a8e72a884036/lib/rules/block-tag-newline.js
+ */
+'use strict';
+const utils = require('eslint-plugin-vue/lib/utils');
+
+/**
+ * @param {string} text Source code as a string.
+ * @returns {number}
+ */
+function getLinebreakCount(text) {
+ return text.split(/\r\n|[\r\n\u2028\u2029]/gu).length - 1;
+}
+
+// Use a more complex regex to avoid capturing whitespace that is
+// leading whitespace on a line that is not empty.
+const beforeTextRegex = /^(\s(\r\n|[\r\n\u2028\u2029])|(\r\n|[\r\n\u2028\u2029]))*/u;
+
+const emptyLines = 1;
+
+/**
+ * @param {number} lineBreaks
+ */
+function getPhrase(lineBreaks) {
+ switch (lineBreaks) {
+ case 1:
+ return '1 line break';
+ default:
+ return `${lineBreaks} line breaks`;
+ }
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+ meta: {
+ type: 'layout',
+ docs: {
+ description: 'enforce line breaks after opening and before closing block-level tags',
+ categories: undefined,
+ },
+ fixable: 'whitespace',
+ messages: {
+ expectedOpeningLinebreak: "Expected {{expected}} after '<{{tag}}>', but {{actual}} found.",
+ expectedClosingLinebreak: "Expected {{expected}} before '{{tag}}>', but {{actual}} found.",
+ },
+ },
+ /** @param {RuleContext} context */
+ create(context) {
+ const df =
+ context.parserServices.getDocumentFragment && context.parserServices.getDocumentFragment();
+ if (!df) {
+ return {};
+ }
+
+ const sourceCode = context.getSourceCode();
+
+ /**
+ * @param {VStartTag} startTag
+ * @param {string} beforeText
+ * @param {number} beforeLinebreakCount
+ * @returns {void}
+ */
+ function verifyBeforeSpaces(startTag, beforeText, beforeLinebreakCount) {
+ if (emptyLines !== beforeLinebreakCount - 1) {
+ context.report({
+ loc: {
+ start: startTag.loc.end,
+ end: sourceCode.getLocFromIndex(startTag.range[1] + beforeText.length),
+ },
+ messageId: 'expectedOpeningLinebreak',
+ data: {
+ tag: startTag.parent.name,
+ expected: getPhrase(emptyLines + 1),
+ actual: getPhrase(beforeLinebreakCount),
+ },
+ fix(fixer) {
+ return fixer.replaceTextRange(
+ [startTag.range[1], startTag.range[1] + beforeText.length],
+ '\n'.repeat(emptyLines + 1)
+ );
+ },
+ });
+ }
+ }
+ /**
+ * @param {VEndTag} endTag
+ * @param {string} afterText
+ * @param {number} afterLinebreakCount
+ * @returns {void}
+ */
+ function verifyAfterSpaces(endTag, afterText, afterLinebreakCount) {
+ if (emptyLines !== afterLinebreakCount - 1) {
+ context.report({
+ loc: {
+ start: sourceCode.getLocFromIndex(endTag.range[0] - afterText.length),
+ end: endTag.loc.start,
+ },
+ messageId: 'expectedClosingLinebreak',
+ data: {
+ tag: endTag.parent.name,
+ expected: getPhrase(emptyLines + 1),
+ actual: getPhrase(afterLinebreakCount),
+ },
+ fix(fixer) {
+ return fixer.replaceTextRange(
+ [endTag.range[0] - afterText.length, endTag.range[0]],
+ '\n'.repeat(emptyLines + 1)
+ );
+ },
+ });
+ }
+ }
+ /**
+ * @param {VElement} element
+ * @returns {void}
+ */
+ function verifyElement(element) {
+ const { startTag, endTag } = element;
+ if (startTag.selfClosing || endTag == null) {
+ return;
+ }
+ const text = sourceCode.text.slice(startTag.range[1], endTag.range[0]);
+
+ const trimText = text.trim();
+ if (!trimText) {
+ return;
+ }
+
+ const beforeText = /** @type {RegExpExecArray} */ (beforeTextRegex.exec(text))[0];
+ const afterText = /** @type {RegExpExecArray} */ (/\s*$/u.exec(text))[0];
+ const beforeLinebreakCount = getLinebreakCount(beforeText);
+ const afterLinebreakCount = getLinebreakCount(afterText);
+
+ verifyBeforeSpaces(startTag, beforeText, beforeLinebreakCount);
+
+ verifyAfterSpaces(endTag, afterText, afterLinebreakCount);
+ }
+
+ const documentFragment = df;
+
+ return utils.defineTemplateBodyVisitor(
+ context,
+ {},
+ {
+ /** @param {Program} node */
+ Program(node) {
+ if (utils.hasInvalidEOF(node)) {
+ return;
+ }
+
+ for (const element of documentFragment.children) {
+ if (utils.isVElement(element)) {
+ verifyElement(element);
+ }
+ }
+ },
+ }
+ );
+ },
+};
diff --git a/packages/eslint-plugin-kolibri/tests/lib/rules/vue-component-block-padding.spec.js b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-component-block-padding.spec.js
new file mode 100644
index 00000000000..d6e54567f61
--- /dev/null
+++ b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-component-block-padding.spec.js
@@ -0,0 +1,332 @@
+/**
+ * Vendored and modified from:
+ * https://github.com/vuejs/eslint-plugin-vue/blob/9b55f3c18403b0a77808ba758ec3a8e72a884036/tests/lib/rules/padding-line-between-blocks.js
+ */
+'use strict';
+
+const RuleTester = require('eslint').RuleTester;
+const rule = require('../../../lib/rules/vue-component-block-padding');
+
+const tester = new RuleTester({
+ parser: require.resolve('vue-eslint-parser'),
+ parserOptions: { ecmaVersion: 2020 },
+});
+
+tester.run('vue-component-block-padding', rule, {
+ valid: [
+ `
+
+
+
+
+
+
+
+ `,
+ `
+
+
+
+
+
+ `,
+ // comments
+ `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ `
+
+
+
+
+
+
+
+
+
+
+ `,
+ // no template
+ `
+
+
+
+
+ `,
+ `var a = 1`,
+ ],
+ invalid: [
+ {
+ code: `
+
+
+
+ `,
+ output: `
+
+
+
+
+
+
+
+ `,
+ errors: [
+ {
+ message: 'Expected two blank lines before this block.',
+ line: 3,
+ column: 8,
+ endLine: 3,
+ endColumn: 25,
+ },
+ {
+ message: 'Expected two blank lines before this block.',
+ line: 4,
+ column: 8,
+ endLine: 4,
+ endColumn: 23,
+ },
+ ],
+ },
+ {
+ code: `
+
+ `,
+ output: `
+
+
+
+
+
+
+
+ `,
+ errors: [
+ {
+ message: 'Expected two blank lines before this block.',
+ line: 2,
+ },
+ {
+ message: 'Expected two blank lines before this block.',
+ line: 2,
+ },
+ ],
+ },
+ {
+ code: `
+
+
+
+
+
+
+ `,
+ output: `
+
+
+
+
+
+
+
+
+
+
+ `,
+ errors: [
+ {
+ message: 'Expected two blank lines before this block.',
+ line: 4,
+ },
+ {
+ message: 'Expected two blank lines before this block.',
+ line: 7,
+ },
+ ],
+ },
+ {
+ code: `
+ TEXT
+
+ `,
+ output: `
+ TEXT
+
+
+
+
+
+
+ `,
+ errors: [
+ {
+ message: 'Expected two blank lines before this block.',
+ line: 3,
+ },
+ {
+ message: 'Expected two blank lines before this block.',
+ line: 4,
+ },
+ ],
+ },
+ {
+ code: `
+
+
+
+
+
+
+
+
+
+ `,
+ output: `
+
+
+
+
+
+
+
+ `,
+ errors: [
+ {
+ message: 'Expected two blank lines before this block.',
+ line: 6,
+ column: 7,
+ endLine: 6,
+ endColumn: 24,
+ },
+ {
+ message: 'Expected two blank lines before this block.',
+ line: 10,
+ column: 7,
+ endLine: 10,
+ endColumn: 22,
+ },
+ ],
+ },
+ {
+ code: `
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ output: `
+
+
+
+
+
+
+
+
+
+
+ `,
+ errors: [
+ {
+ message: 'Expected two blank lines before this block.',
+ line: 7,
+ },
+ {
+ message: 'Expected two blank lines before this block.',
+ line: 13,
+ },
+ ],
+ },
+ {
+ code: `
+ TEXT
+
+
+
+
+ `,
+ output: `
+ TEXT
+
+
+
+
+
+
+ `,
+ errors: [
+ {
+ message: 'Expected two blank lines before this block.',
+ line: 6,
+ },
+ {
+ message: 'Expected two blank lines before this block.',
+ line: 7,
+ },
+ ],
+ },
+ {
+ code: `
+
+
+
+
+
+
+ `,
+ output: `
+
+
+
+
+
+
+
+ `,
+ errors: [
+ {
+ message: 'Expected two blank lines before this block.',
+ line: 6,
+ column: 7,
+ endLine: 6,
+ endColumn: 24,
+ },
+ {
+ message: 'Expected two blank lines before this block.',
+ line: 7,
+ column: 7,
+ endLine: 7,
+ endColumn: 22,
+ },
+ ],
+ },
+ ],
+});
diff --git a/packages/eslint-plugin-kolibri/tests/lib/rules/vue-component-block-tag-newline.spec.js b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-component-block-tag-newline.spec.js
new file mode 100644
index 00000000000..a68d786196e
--- /dev/null
+++ b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-component-block-tag-newline.spec.js
@@ -0,0 +1,189 @@
+/**
+ * Vendored and modified from:
+ * https://github.com/vuejs/eslint-plugin-vue/blob/9b55f3c18403b0a77808ba758ec3a8e72a884036/tests/lib/rules/block-tag-newline.js
+ */
+'use strict';
+
+const RuleTester = require('eslint').RuleTester;
+const rule = require('../../../lib/rules/vue-component-block-tag-newline');
+
+const tester = new RuleTester({
+ parser: require.resolve('vue-eslint-parser'),
+ parserOptions: { ecmaVersion: 2015 },
+});
+
+tester.run('block-tag-newline', rule, {
+ valid: [
+ '\n\n\n\n\n',
+ '\n\n\n
\n\n\n',
+ '\n',
+ '\n\n\n',
+ '\n\n\n',
+ ],
+ invalid: [
+ {
+ code: '\n\n',
+ output: '\n\n\n\n\n',
+ errors: [
+ {
+ message: "Expected 2 line breaks after '', but 0 line breaks found.",
+ line: 1,
+ column: 11,
+ },
+ {
+ message: "Expected 2 line breaks before '', but 1 line break found.",
+ line: 1,
+ column: 18,
+ },
+ {
+ message: "Expected 2 line breaks after '', but 1 line break found.",
+ line: 3,
+ column: 14,
+ },
+ ],
+ },
+ {
+ code: '\n\n',
+ output: '\n\n\n\n\n',
+ errors: [
+ {
+ message: "Expected 2 line breaks after '', but 1 line break found.",
+ line: 1,
+ column: 11,
+ },
+ {
+ message: "Expected 2 line breaks before '', but 0 line breaks found.",
+ line: 2,
+ column: 8,
+ },
+ {
+ message: "Expected 2 line breaks after '', but 0 line breaks found.",
+ line: 4,
+ column: 6,
+ },
+ ],
+ },
+ {
+ code: '\n
\n',
+ output: '\n\n\n
\n\n\n',
+ errors: [
+ {
+ message: "Expected 2 line breaks after '', but 0 line breaks found.",
+ line: 1,
+ column: 11,
+ },
+ {
+ message: "Expected 2 line breaks before '', but 0 line breaks found.",
+ line: 2,
+ column: 7,
+ },
+ {
+ message: "Expected 2 line breaks after '', but 0 line breaks found.",
+ line: 4,
+ column: 6,
+ },
+ ],
+ },
+ {
+ code: '\n
\n',
+ output: '\n\n\n
\n\n\n',
+ errors: [
+ {
+ message: "Expected 2 line breaks after '', but 0 line breaks found.",
+ line: 1,
+ column: 11,
+ },
+ {
+ message: "Expected 2 line breaks before '', but 0 line breaks found.",
+ line: 2,
+ column: 7,
+ },
+ {
+ message: "Expected 2 line breaks after '', but 0 line breaks found.",
+ line: 3,
+ column: 14,
+ },
+ ],
+ },
+ {
+ code: '\n\n\n\n\n\n',
+ output: '\n\n\n\n\n',
+ errors: [
+ {
+ message: "Expected 2 line breaks after '', but 3 line breaks found.",
+ line: 1,
+ column: 11,
+ },
+ {
+ message: "Expected 2 line breaks before '', but 3 line breaks found.",
+ line: 10,
+ column: 6,
+ },
+ ],
+ },
+ {
+ code: '',
+ output: '',
+ errors: [
+ {
+ message: "Expected 2 line breaks after '',
+ output: '',
+ errors: [
+ {
+ message: "Expected 2 line breaks before '', but 1 line break found.",
+ line: 3,
+ column: 12,
+ },
+ ],
+ },
+ {
+ code: '',
+ output: '',
+ errors: [
+ {
+ message: "Expected 2 line breaks after '',
+ output: '',
+ errors: [
+ {
+ message: "Expected 2 line breaks before '', but 0 line breaks found.",
+ line: 3,
+ column: 8,
+ },
+ ],
+ },
+ ],
+});
From bea8cf96321c67fc37a230ff08d0ea9b82a43adf Mon Sep 17 00:00:00 2001
From: Richard Tibbles
Date: Thu, 20 Jun 2024 13:27:59 -0700
Subject: [PATCH 02/12] Upgrade all linting packages and config. Remove
HTMLHint. Add jest linting to eslint.
---
.eslintrc.js | 1 +
.htmlhintrc.js | 1 -
docs/frontend_architecture/conventions.rst | 2 +-
.../rules/vue-component-class-name-casing.js | 135 ++
.../rules/vue-component-no-duplicate-ids.js | 50 +
.../rules/vue-component-require-img-src.js | 52 +
packages/eslint-plugin-kolibri/package.json | 2 +-
.../vue-component-class-name-casing.spec.js | 96 +
.../vue-component-no-duplicate-ids.spec.js | 37 +
.../vue-component-require-img-src.spec.js | 77 +
packages/kolibri-tools/.eslintrc.js | 29 +-
packages/kolibri-tools/.htmlhintrc.js | 13 -
packages/kolibri-tools/.prettierrc.js | 6 +-
packages/kolibri-tools/.stylelintrc.js | 11 +
packages/kolibri-tools/lib/htmlhint_custom.js | 97 -
packages/kolibri-tools/lib/lint.js | 362 ++--
packages/kolibri-tools/package.json | 22 +-
.../test/test_htmlhint_custom.spec.js | 130 --
yarn.lock | 1652 +++++++++--------
19 files changed, 1535 insertions(+), 1240 deletions(-)
delete mode 100644 .htmlhintrc.js
create mode 100644 packages/eslint-plugin-kolibri/lib/rules/vue-component-class-name-casing.js
create mode 100644 packages/eslint-plugin-kolibri/lib/rules/vue-component-no-duplicate-ids.js
create mode 100644 packages/eslint-plugin-kolibri/lib/rules/vue-component-require-img-src.js
create mode 100644 packages/eslint-plugin-kolibri/tests/lib/rules/vue-component-class-name-casing.spec.js
create mode 100644 packages/eslint-plugin-kolibri/tests/lib/rules/vue-component-no-duplicate-ids.spec.js
create mode 100644 packages/eslint-plugin-kolibri/tests/lib/rules/vue-component-require-img-src.spec.js
delete mode 100644 packages/kolibri-tools/.htmlhintrc.js
delete mode 100644 packages/kolibri-tools/lib/htmlhint_custom.js
delete mode 100644 packages/kolibri-tools/test/test_htmlhint_custom.spec.js
diff --git a/.eslintrc.js b/.eslintrc.js
index 36889035daf..4fef0e87008 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1 +1,2 @@
+require("@rushstack/eslint-patch/modern-module-resolution");
module.exports = require('kolibri-tools/.eslintrc');
diff --git a/.htmlhintrc.js b/.htmlhintrc.js
deleted file mode 100644
index 5748ea4fce3..00000000000
--- a/.htmlhintrc.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('kolibri-tools/.htmlhintrc');
diff --git a/docs/frontend_architecture/conventions.rst b/docs/frontend_architecture/conventions.rst
index 4de26fb3c97..e892779e212 100644
--- a/docs/frontend_architecture/conventions.rst
+++ b/docs/frontend_architecture/conventions.rst
@@ -8,7 +8,7 @@ For design conventions, see the `Kolibri Design System `__, `ESLint Vue plugin `__, `stylelint `__, and `HTMLHint `__. The enforced rules are located in the ``.eslintrc.js``, ``.stylelintrc.js``, and ``.htmlhintrc`` files located at the root of the project.
+Many of our conventions are enforced through various linters including `ESLint `__, `ESLint Vue plugin `__, `stylelint `__, and `HTMLHint `__. The enforced rules are located in the ``eslint.config.js``, ``.stylelintrc.js``, and files located at the root of the project.
Also available are options and tools that enable auto-formatting of ``.vue``, ``.js``, ``.scss``, and ``.py`` files to conform to code conventions. To facilitate this, we use `Black `__ to auto-format ``.py`` files, and `Prettier `__ to auto-format the others. Auto-formatting runs by default while running the dev server, otherwise be sure to run the dev server with ``-warn`` as described in :doc:`/getting_started` to prevent it from auto-formatting.
diff --git a/packages/eslint-plugin-kolibri/lib/rules/vue-component-class-name-casing.js b/packages/eslint-plugin-kolibri/lib/rules/vue-component-class-name-casing.js
new file mode 100644
index 00000000000..68bd45c8ba3
--- /dev/null
+++ b/packages/eslint-plugin-kolibri/lib/rules/vue-component-class-name-casing.js
@@ -0,0 +1,135 @@
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('eslint-plugin-vue/lib//utils');
+const casing = require('eslint-plugin-vue/lib//utils/casing');
+
+// -----------------------------------------------------------------------------
+// Helpers
+// -----------------------------------------------------------------------------
+
+/**
+ * Report a forbidden class casing
+ * @param {string} className
+ * @param {*} node
+ * @param {RuleContext} context
+ * @param {Set} forbiddenClasses
+ */
+const reportForbiddenClassCasing = (className, node, context, caseType) => {
+ if (!casing.getChecker(caseType)(className)) {
+ const loc = node.value ? node.value.loc : node.loc;
+ context.report({
+ node,
+ loc,
+ message: 'Class name "{{class}}" is not {{caseType}}.',
+ data: {
+ class: className,
+ caseType,
+ },
+ });
+ }
+};
+
+/**
+ * @param {Expression} node
+ * @param {boolean} [textOnly]
+ * @returns {IterableIterator<{ className:string, reportNode: ESNode }>}
+ */
+function* extractClassNames(node, textOnly) {
+ if (node.type === 'Literal') {
+ yield* `${node.value}`.split(/\s+/).map(className => ({ className, reportNode: node }));
+ return;
+ }
+ if (node.type === 'TemplateLiteral') {
+ for (const templateElement of node.quasis) {
+ yield* templateElement.value.cooked
+ .split(/\s+/)
+ .map(className => ({ className, reportNode: templateElement }));
+ }
+ for (const expr of node.expressions) {
+ yield* extractClassNames(expr, true);
+ }
+ return;
+ }
+ if (node.type === 'BinaryExpression') {
+ if (node.operator !== '+') {
+ return;
+ }
+ yield* extractClassNames(node.left, true);
+ yield* extractClassNames(node.right, true);
+ return;
+ }
+ if (textOnly) {
+ return;
+ }
+ if (node.type === 'ObjectExpression') {
+ for (const prop of node.properties) {
+ if (prop.type !== 'Property') {
+ continue;
+ }
+ const classNames = utils.getStaticPropertyName(prop);
+ if (!classNames) {
+ continue;
+ }
+ yield* classNames.split(/\s+/).map(className => ({ className, reportNode: prop.key }));
+ }
+ return;
+ }
+ if (node.type === 'ArrayExpression') {
+ for (const element of node.elements) {
+ if (element == null) {
+ continue;
+ }
+ if (element.type === 'SpreadElement') {
+ continue;
+ }
+ yield* extractClassNames(element);
+ }
+ return;
+ }
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+ meta: {
+ type: 'suggestion',
+ docs: {
+ description: 'enforce specific casing for the class naming style in template',
+ categories: undefined,
+ },
+ fixable: null,
+ },
+ /** @param {RuleContext} context */
+ create(context) {
+ const caseType = 'kebab-case';
+ return utils.defineTemplateBodyVisitor(context, {
+ /**
+ * @param {VAttribute & { value: VLiteral } } node
+ */
+ 'VAttribute[directive=false][key.name="class"]'(node) {
+ node.value.value
+ .split(/\s+/)
+ .forEach(className => reportForbiddenClassCasing(className, node, context, caseType));
+ },
+
+ /** @param {VExpressionContainer} node */
+ "VAttribute[directive=true][key.name.name='bind'][key.argument.name='class'] > VExpressionContainer.value"(
+ node,
+ ) {
+ if (!node.expression) {
+ return;
+ }
+
+ for (const { className, reportNode } of extractClassNames(
+ /** @type {Expression} */ (node.expression),
+ )) {
+ reportForbiddenClassCasing(className, reportNode, context, caseType);
+ }
+ },
+ });
+ },
+};
diff --git a/packages/eslint-plugin-kolibri/lib/rules/vue-component-no-duplicate-ids.js b/packages/eslint-plugin-kolibri/lib/rules/vue-component-no-duplicate-ids.js
new file mode 100644
index 00000000000..c74d6816473
--- /dev/null
+++ b/packages/eslint-plugin-kolibri/lib/rules/vue-component-no-duplicate-ids.js
@@ -0,0 +1,50 @@
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('eslint-plugin-vue/lib//utils');
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+ meta: {
+ type: 'suggestion',
+ docs: {
+ description: 'detect duplicate ids in Vue components',
+ categories: undefined,
+ },
+ fixable: null,
+ },
+ /** @param {RuleContext} context */
+ create(context) {
+ const IdAttrsMap = new Map();
+ return utils.defineTemplateBodyVisitor(context, {
+ /**
+ * @param {VAttribute & { value: VLiteral } } node
+ */
+ 'VAttribute[directive=false][key.name="id"]'(node) {
+ const idAttr = node.value;
+ if (!IdAttrsMap.has(idAttr.value)) {
+ IdAttrsMap.set(idAttr.value, []);
+ }
+ const nodes = IdAttrsMap.get(idAttr.value);
+ nodes.push(idAttr);
+ },
+ "VElement[parent.type!='VElement']:exit"() {
+ IdAttrsMap.forEach(attrs => {
+ if (Array.isArray(attrs) && attrs.length > 1) {
+ attrs.forEach(attr => {
+ context.report({
+ node: attr,
+ data: { id: attr.value },
+ message: "The id '{{id}}' is duplicated.",
+ });
+ });
+ }
+ });
+ },
+ });
+ },
+};
diff --git a/packages/eslint-plugin-kolibri/lib/rules/vue-component-require-img-src.js b/packages/eslint-plugin-kolibri/lib/rules/vue-component-require-img-src.js
new file mode 100644
index 00000000000..98939d739de
--- /dev/null
+++ b/packages/eslint-plugin-kolibri/lib/rules/vue-component-require-img-src.js
@@ -0,0 +1,52 @@
+const utils = require('eslint-plugin-vue/lib/utils');
+
+module.exports = {
+ meta: {
+ type: 'code',
+
+ docs: {
+ description: 'Require `src` attribute of `` tag',
+ category: undefined,
+ },
+
+ fixable: null,
+ messages: {
+ missingSrcAttribute: 'Missing `src` attribute of `` tag',
+ },
+ },
+
+ create(context) {
+ function report(node) {
+ context.report({
+ node,
+ messageId: 'missingSrcAttribute',
+ });
+ }
+
+ return utils.defineTemplateBodyVisitor(context, {
+ /**
+ * @param {VElement} node
+ */
+ "VElement[rawName='img']"(node) {
+ const srcAttr = utils.getAttribute(node, 'src');
+ if (srcAttr) {
+ const value = srcAttr.value;
+ if (!value || !value.value) {
+ report(value || srcAttr);
+ }
+ return;
+ }
+ const srcDir = utils.getDirective(node, 'bind', 'src');
+ if (srcDir) {
+ const value = srcDir.value;
+ if (!value || !value.expression) {
+ report(value || srcDir);
+ }
+ return;
+ }
+
+ report(node.startTag);
+ },
+ });
+ },
+};
diff --git a/packages/eslint-plugin-kolibri/package.json b/packages/eslint-plugin-kolibri/package.json
index 66a53df2367..20d060ba562 100644
--- a/packages/eslint-plugin-kolibri/package.json
+++ b/packages/eslint-plugin-kolibri/package.json
@@ -8,7 +8,7 @@
"requireindex": "^1.1.0"
},
"devDependencies": {
- "eslint": "^5.16.0"
+ "eslint": "^8.23.0"
},
"engines": {
"node": ">=0.10.0"
diff --git a/packages/eslint-plugin-kolibri/tests/lib/rules/vue-component-class-name-casing.spec.js b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-component-class-name-casing.spec.js
new file mode 100644
index 00000000000..8f78f955b7b
--- /dev/null
+++ b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-component-class-name-casing.spec.js
@@ -0,0 +1,96 @@
+'use strict';
+
+const RuleTester = require('eslint').RuleTester;
+const rule = require('../../../lib/rules/vue-component-class-name-casing');
+
+const ruleTester = new RuleTester({
+ parser: require.resolve('vue-eslint-parser'),
+ parserOptions: { ecmaVersion: 2020, sourceType: 'module' },
+});
+
+ruleTester.run('class-name-casing', rule, {
+ valid: [
+ { code: `Content
` },
+ {
+ code: `Content
`,
+ },
+ {
+ code: `Content
`,
+ },
+ ],
+
+ invalid: [
+ {
+ code: ``,
+ errors: [
+ {
+ message: 'Class name "forBidden" is not kebab-case.',
+ type: 'VAttribute',
+ },
+ ],
+ },
+ {
+ code: ``,
+ errors: [
+ {
+ message: 'Class name "forBidden" is not kebab-case.',
+ type: 'Literal',
+ },
+ ],
+ },
+ {
+ code: ``,
+ errors: [
+ {
+ message: 'Class name "forBidden" is not kebab-case.',
+ type: 'Literal',
+ },
+ ],
+ },
+ {
+ code: ``,
+ errors: [
+ {
+ message: 'Class name "forBidden" is not kebab-case.',
+ type: 'Identifier',
+ },
+ ],
+ },
+ {
+ code: '',
+ errors: [
+ {
+ message: 'Class name "forBidden" is not kebab-case.',
+ type: 'TemplateElement',
+ },
+ ],
+ },
+ {
+ code: ``,
+ errors: [
+ {
+ message: 'Class name "forBidden" is not kebab-case.',
+ type: 'Literal',
+ },
+ ],
+ },
+ {
+ code: ``,
+ errors: [
+ {
+ message: 'Class name "forBidden" is not kebab-case.',
+ type: 'Literal',
+ },
+ ],
+ },
+ {
+ code: ``,
+ errors: [
+ {
+ message: 'Class name "forBidden" is not kebab-case.',
+ type: 'Literal',
+ },
+ ],
+ },
+ ],
+});
diff --git a/packages/eslint-plugin-kolibri/tests/lib/rules/vue-component-no-duplicate-ids.spec.js b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-component-no-duplicate-ids.spec.js
new file mode 100644
index 00000000000..fe906809484
--- /dev/null
+++ b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-component-no-duplicate-ids.spec.js
@@ -0,0 +1,37 @@
+'use strict';
+
+const RuleTester = require('eslint').RuleTester;
+const rule = require('../../../lib/rules/vue-component-no-duplicate-ids');
+
+const ruleTester = new RuleTester({
+ parser: require.resolve('vue-eslint-parser'),
+ parserOptions: { ecmaVersion: 2020, sourceType: 'module' },
+});
+
+ruleTester.run('no-duplicate-ids', rule, {
+ valid: [
+ { code: `Content
` },
+ {
+ code: `Content
Here
`,
+ },
+ {
+ code: `Content
Here
`,
+ },
+ ],
+
+ invalid: [
+ {
+ code: `Content
Here
`,
+ errors: [
+ {
+ message: "The id 'allowed' is duplicated.",
+ type: 'VLiteral',
+ },
+ {
+ message: "The id 'allowed' is duplicated.",
+ type: 'VLiteral',
+ },
+ ],
+ },
+ ],
+});
diff --git a/packages/eslint-plugin-kolibri/tests/lib/rules/vue-component-require-img-src.spec.js b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-component-require-img-src.spec.js
new file mode 100644
index 00000000000..3f02f13c112
--- /dev/null
+++ b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-component-require-img-src.spec.js
@@ -0,0 +1,77 @@
+const RuleTester = require('eslint').RuleTester;
+const rule = require('../../../lib/rules/vue-component-require-img-src');
+
+const tester = new RuleTester({
+ parser: require.resolve('vue-eslint-parser'),
+ parserOptions: { ecmaVersion: 2020 },
+});
+
+tester.run('require-img-src', rule, {
+ valid: [
+ {
+ code: `
+
+
+
+`,
+ },
+ ],
+ invalid: [
+ {
+ code: `
+
+
+
+`,
+
+ errors: [
+ {
+ messageId: 'missingSrcAttribute',
+ },
+ ],
+ },
+ {
+ code: `
+
+
+
+`,
+
+ errors: [
+ {
+ messageId: 'missingSrcAttribute',
+ },
+ ],
+ },
+ {
+ code: `
+
+
+
+`,
+
+ errors: [
+ {
+ messageId: 'missingSrcAttribute',
+ },
+ ],
+ },
+ {
+ code: `
+
+
+
+`,
+
+ errors: [
+ {
+ messageId: 'missingSrcAttribute',
+ line: 3,
+ column: 5,
+ endColumn: 10,
+ endLine: 3,
+ },
+ ],
+ },
+ ],
+});
diff --git a/packages/kolibri-tools/.eslintrc.js b/packages/kolibri-tools/.eslintrc.js
index 0bb5bd5b9e2..e39d1bdcd18 100644
--- a/packages/kolibri-tools/.eslintrc.js
+++ b/packages/kolibri-tools/.eslintrc.js
@@ -1,4 +1,5 @@
var path = require('path');
+
var OFF = 0;
var ERROR = 2;
@@ -36,6 +37,14 @@ module.exports = {
jestPuppeteer: true,
},
},
+ // Recommended by https://eslint.vuejs.org/rules/script-indent.html
+ // When using the script indent.
+ {
+ files: ['*.vue'],
+ rules: {
+ indent: 'off',
+ },
+ },
],
parserOptions: {
sourceType: 'module',
@@ -59,7 +68,7 @@ module.exports = {
'plugin:jest-dom/recommended',
'prettier',
],
- plugins: ['import', 'vue', 'kolibri', 'jest-dom'],
+ plugins: ['import', 'vue', 'kolibri', 'jest-dom', 'jest'],
settings: {
'import/resolver': {
[path.resolve(path.join(path.dirname(__filename), './lib/alias_import_resolver.js'))]: {
@@ -110,10 +119,11 @@ module.exports = {
'vue/max-attributes-per-line': [
ERROR,
{
- singleline: 5,
+ singleline: {
+ max: 1,
+ },
multiline: {
max: 1,
- allowFirstLine: false,
},
},
],
@@ -139,6 +149,7 @@ module.exports = {
],
},
],
+ 'vue/multi-word-component-names': 'off',
'vue/no-spaces-around-equal-signs-in-attribute': ERROR,
'vue/multiline-html-element-content-newline': [
ERROR,
@@ -189,6 +200,13 @@ module.exports = {
alignAttributesVertically: true,
},
],
+ // Turn this rule off explicitly so that it doesn't interfere
+ // with our vendored version that implements our Kolibri
+ // specific component formatting specifications.
+ 'vue/block-tag-newline': 'off',
+ // By default this rule doesn't indent switch cases, so set this to indent them
+ // by our base indent amount.
+ 'vue/script-indent': [ERROR, 2, { baseIndent: 1, switchCase: 1 }],
'vue/static-class-names-order': ERROR,
'vue/no-deprecated-scope-attribute': ERROR,
'vue/valid-v-bind-sync': ERROR,
@@ -221,6 +239,11 @@ module.exports = {
'kolibri/vue-no-unused-translations': ERROR,
'kolibri/vue-no-undefined-string-uses': ERROR,
'kolibri/vue-string-objects-formatting': ERROR,
+ 'kolibri/vue-component-block-padding': ERROR,
+ 'kolibri/vue-component-block-tag-newline': ERROR,
+ 'kolibri/vue-component-require-img-src': ERROR,
+ 'kolibri/vue-component-class-name-casing': ERROR,
+ 'kolibri/vue-component-no-duplicate-ids': ERROR,
'prefer-const': [
ERROR,
diff --git a/packages/kolibri-tools/.htmlhintrc.js b/packages/kolibri-tools/.htmlhintrc.js
deleted file mode 100644
index ed90a4ebc15..00000000000
--- a/packages/kolibri-tools/.htmlhintrc.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = {
- 'tagname-lowercase': false,
- 'tag-pair': true,
- 'spec-char-escape': true,
- 'id-unique': true,
- 'src-not-empty': true,
- 'id-class-value': 'dash',
- 'inline-script-disabled': true,
- 'space-tab-mixed-disabled': 'space2',
- 'attr-value-double-quotes': true,
- '--no-self-close-common-html5-tags': true,
- '--vue-component-conventions': true,
-};
diff --git a/packages/kolibri-tools/.prettierrc.js b/packages/kolibri-tools/.prettierrc.js
index be105a2878c..7aee78031d3 100644
--- a/packages/kolibri-tools/.prettierrc.js
+++ b/packages/kolibri-tools/.prettierrc.js
@@ -5,7 +5,7 @@
module.exports = {
printWidth: 100,
singleQuote: true,
- trailingComma: 'es5',
- parser: 'babel',
- endOfLine: 'lf',
+ arrowParens: 'avoid',
+ vueIndentScriptAndStyle: true,
+ singleAttributePerLine: true,
};
diff --git a/packages/kolibri-tools/.stylelintrc.js b/packages/kolibri-tools/.stylelintrc.js
index 48456ee236d..21a2f1d0433 100644
--- a/packages/kolibri-tools/.stylelintrc.js
+++ b/packages/kolibri-tools/.stylelintrc.js
@@ -6,6 +6,7 @@ module.exports = {
'stylelint-config-sass-guidelines',
'stylelint-config-recess-order',
'stylelint-config-prettier',
+ 'stylelint-config-html/vue',
],
rules: {
'color-hex-length': 'long',
@@ -34,6 +35,12 @@ module.exports = {
'order/properties-alphabetical-order': null,
'scss/percent-placeholder-pattern': null,
'scss/no-global-function-names': null, // Does not distinguish between SCSS functions and CSS functions
+
+ // Custom rules
+ 'import-notation': 'string', // Enforce string imports rather than 'url' as 'url' doesn't work with sass-loader
+ 'media-feature-range-notation': 'prefix', // Enforce use of min-width and max-width as sass-loader breaks otherwise
+ // Enforce indentation of 2 spaces and to be indented within style blocks in Vue SFC
+ 'indentation': [ 2, { baseIndentLevel: 1 } ],
},
"overrides": [
{
@@ -48,5 +55,9 @@ module.exports = {
"files": ["**/*.sass"],
"customSyntax": "postcss-sass",
},
+ {
+ "files": ["*.html", "**/*.html", "*.vue", "**/*.vue"],
+ "customSyntax": "postcss-html",
+ },
]
};
diff --git a/packages/kolibri-tools/lib/htmlhint_custom.js b/packages/kolibri-tools/lib/htmlhint_custom.js
deleted file mode 100644
index fc79fedd3bf..00000000000
--- a/packages/kolibri-tools/lib/htmlhint_custom.js
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- Custom rules for the HTML linter.
- Custom rule IDs are prefixed with a double dash ('--')
-*/
-var HTMLHint = require('htmlhint').HTMLHint;
-
-/* helper to convert alternate-style newlines to unix-style */
-function clean(val) {
- return val.replace(/\r\n?/g, '\n');
-}
-
-/*
- Vue whitespace conventions.
- Based on the existing `tag-pair` rule
-
- This code attempts to enforce:
- - two blank lines between top-level tags
- - one blank line of padding within a top-level tag
- - one level of indent for the contents of all top-level tags
-
-*/
-HTMLHint.addRule({
- id: '--vue-component-conventions',
- description: 'Internal vue file conventions.',
- init: function(parser, reporter) {
- var self = this;
- var stack = [];
- var mapEmptyTags = parser.makeMap(
- 'area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed,track,command,source,keygen,wbr'
- ); //HTML 4.01 + HTML 5
- // handle script and style tags
- parser.addListener('cdata', function(event) {
- var eventData = clean(event.raw);
- if (stack.length === 1) {
- if (eventData && !eventData.trim()) {
- reporter.error(
- 'Empty top-level tags should be deleted.',
- event.line,
- event.col,
- self,
- event.raw
- );
- }
- }
- });
- parser.addListener('tagstart', function(event) {
- var eventData = clean(event.raw);
- if (!stack.length && event.lastEvent) {
- if (event.lastEvent.type === 'start') {
- if (event.line !== 1) {
- reporter.error(
- 'Content should start on the first line of the file.',
- event.line,
- event.col,
- self,
- event.raw
- );
- }
- } else if (event.lastEvent.raw && clean(event.lastEvent.raw) !== '\n\n\n') {
- reporter.error(
- 'Need two endlines between top-level tags.',
- event.line,
- event.col,
- self,
- event.raw
- );
- }
- }
- var tagName = event.tagName.toLowerCase();
- if (mapEmptyTags[tagName] === undefined && !event.close) {
- stack.push({
- tagName: tagName,
- line: event.line,
- raw: eventData,
- });
- }
- });
- parser.addListener('tagend', function(event) {
- var tagName = event.tagName.toLowerCase();
- for (var pos = stack.length - 1; pos >= 0; pos--) {
- if (stack[pos].tagName === tagName) {
- break;
- }
- }
- var arrTags = [];
- for (var i = stack.length - 1; i > pos; i--) {
- arrTags.push('' + stack[i].tagName + '>');
- }
- try {
- stack.length = pos;
- } catch (e) {
- // if this fails, it's because `pos < 0`, i.e. more tags are closed than were ever opened
- // this should get caught by the standard linting rules, so we'll let it slide here.
- }
- });
- },
-});
diff --git a/packages/kolibri-tools/lib/lint.js b/packages/kolibri-tools/lib/lint.js
index e0b24cb21c7..4f80d4f5041 100755
--- a/packages/kolibri-tools/lib/lint.js
+++ b/packages/kolibri-tools/lib/lint.js
@@ -1,16 +1,12 @@
+const { readFile } = require('node:fs/promises');
+
const fs = require('node:fs');
const path = require('node:path');
const prettier = require('prettier');
-const compiler = require('vue-template-compiler');
-const ESLintCLIEngine = require('eslint').CLIEngine;
-const HTMLHint = require('htmlhint').HTMLHint;
-const esLintFormatter = require('eslint/lib/cli-engine/formatters/stylish');
+const { ESLint } = require('eslint');
const stylelint = require('stylelint');
const chalk = require('chalk');
const stylelintFormatter = require('stylelint').formatters.string;
-const { insertContent } = require('./vueTools');
-
-require('./htmlhint_custom');
// check for host project's linting configs, otherwise use defaults
const hostProjectDir = process.cwd();
@@ -29,13 +25,6 @@ try {
stylelintConfig = require('../.stylelintrc.js');
}
-let htmlHintConfig;
-try {
- htmlHintConfig = require(`${hostProjectDir}/.htmlhintrc.js`);
-} catch (e) {
- htmlHintConfig = require('../.htmlhintrc.js');
-}
-
let prettierConfig;
try {
prettierConfig = require(`${hostProjectDir}/.prettierrc.js`);
@@ -47,255 +36,130 @@ const logger = require('./logging');
const logging = logger.getLogger('Kolibri Linter');
-const esLinter = new ESLintCLIEngine({
+const esLinter = new ESLint({
baseConfig: esLintConfig,
fix: true,
});
+let esLintFormatter;
+
// Initialize a stylelint linter for each style file type that we support
// Create them here so that we can reuse, rather than creating many many objects.
-const styleLangs = ['scss', 'css', 'less'];
-const styleLinters = {};
-styleLangs.forEach(lang => {
- styleLinters[lang] = stylelint.createLinter({
- config: stylelintConfig,
- fix: true,
- configBasedir: path.resolve(__dirname, '..'),
- });
-});
+const styleLangs = ['scss', 'css', 'less', 'vue', 'html'];
const errorOrChange = 1;
const noChange = 0;
-function lint({ file, write, encoding = 'utf-8', silent = false } = {}) {
- return new Promise((resolve, reject) => {
- fs.readFile(file, { encoding }, (err, buffer) => {
- if (err) {
- reject({ error: err.message, code: errorOrChange });
- return;
- }
- const source = buffer.toString();
- let formatted = source;
- let messages = [];
- // Array of promises that we need to let resolve before finishing up.
- const promises = [];
- // Array of callbacks to call to apply changes to style blocks.
- // Store for application after linting has completed to prevent race conditions.
- const styleCodeUpdates = [];
- let notSoPretty = false;
- let lineOffset;
- function eslint(code) {
- const esLintOutput = esLinter.executeOnText(code, file);
- const result = esLintOutput.results[0];
- if (result && result.messages.length) {
- result.filePath = file;
- messages.push(esLintFormatter([result]));
- }
- return (result && result.output) || code;
- }
- function prettierFormat(code, parser, vue = false) {
- const options = Object.assign(
- {
- filepath: file,
- },
- prettierConfig,
- {
- parser,
- }
- );
- if (vue) {
- // Prettier strips the 2 space indentation that we enforce within script tags for vue
- // components. So here we account for those 2 spaces that will be added.
- options.printWidth -= 2;
- }
- let linted = code;
- try {
- linted = prettier.format(code, options);
- } catch (e) {
- messages.push(
- `${chalk.underline(file)}\n${chalk.red('Parsing error during prettier formatting:')}\n${
- e.message
- }`
- );
- }
- return linted;
- }
- function lintStyle(code, style, callback, { lineOffset = 0, vue = false } = {}) {
- // Stylelint's `lint` method requires an absolute path for the codeFilename arg
- const codeFilename = !path.isAbsolute(file) ? path.join(process.cwd(), file) : file;
- promises.push(
- stylelint
- .lint({
- code,
- codeFilename,
- config: stylelintConfig,
- fix: true,
- configBasedir: path.resolve(__dirname, '..'),
- })
- .then(output => {
- let stylinted;
- if (output.results && output.results.length) {
- messages.push(
- stylelintFormatter(
- output.results.map(result => {
- result.warnings = result.warnings.map(message => {
- message.line += lineOffset;
- // Column offset for Vue template files is always 2 as we indent.
- message.column += vue ? 2 : 0;
- return message;
- });
- return result;
- })
- )
- );
- // There should only be one result, because we have only
- // passed it a single file, this seems to be the only way
- // to check if the `output` property of the output object has been set
- // to valid style code, as opposed to a serialized copy of the formatted
- // errors.
- // We are doing a parallel of the check being done here:
- // https://github.com/stylelint/stylelint/blob/master/lib/standalone.js#L159
- if (
- output.results[0]._postcssResult &&
- !output.results[0]._postcssResult.stylelint.ignored
- ) {
- stylinted = output.output;
- }
- }
- const linted = prettierFormat(stylinted || code, style, vue);
-
- if (linted.trim() !== (stylinted || code).trim()) {
- notSoPretty = true;
- }
-
- styleCodeUpdates.push(() => callback(linted));
- })
- .catch(err => {
- messages.push(err.toString());
- })
- );
- }
- try {
- let extension = path.extname(file);
- if (extension.startsWith('.')) {
- extension = extension.slice(1);
- }
- // Raw JS
- if (extension === 'js') {
- formatted = prettierFormat(source, 'babel');
- if (formatted !== source) {
- notSoPretty = true;
- }
- formatted = eslint(formatted);
- // Recognized style file
- } else if (styleLangs.some(lang => lang === extension)) {
- lintStyle(source, extension, updatedCode => {
- formatted = updatedCode;
- });
- } else if (extension === 'vue') {
- let block;
- // First lint the whole vue component with eslint
- formatted = eslint(source);
-
- let vueComponent = compiler.parseComponent(formatted);
-
- // Format template block
- if (vueComponent.template && vueComponent.template.content) {
- formatted = insertContent(
- formatted,
- vueComponent.template,
- vueComponent.template.content
- );
- vueComponent = compiler.parseComponent(formatted);
- }
-
- // Now run htmlhint on the whole vue component
- const htmlMessages = HTMLHint.verify(formatted, htmlHintConfig);
- if (htmlMessages.length) {
- messages.push(...HTMLHint.format(htmlMessages, { colors: true }));
- }
-
- // Format script block
- if (vueComponent.script) {
- block = vueComponent.script;
+async function eslint(code, file, messages) {
+ const esLintOutput = await esLinter.lintText(code, { filePath: file });
+ const result = esLintOutput[0];
+ if (result && result.messages.length) {
+ if (!esLintFormatter) {
+ esLintFormatter = await esLinter.loadFormatter('stylish');
+ }
+ messages.push(esLintFormatter.format([result]));
+ }
+ return (result && result.output) || code;
+}
- const js = block.content;
- const formattedJs = prettierFormat(js, 'babel', true);
- formatted = insertContent(formatted, block, formattedJs);
- if (formattedJs.trim() !== js.trim()) {
- notSoPretty = true;
- }
- }
+async function prettierFormat(code, file, messages) {
+ const options = Object.assign(
+ {
+ filepath: file,
+ },
+ prettierConfig,
+ );
+ try {
+ return prettier.format(code, options);
+ } catch (e) {
+ messages.push(
+ `${chalk.underline(file)}\n${chalk.red('Parsing error during prettier formatting:')}\n${
+ e.message
+ }`,
+ );
+ }
+ return code;
+}
- // Format style blocks
- for (let i = 0; i < vueComponent.styles.length; i++) {
- // Reparse to get updated line numbers
- block = compiler.parseComponent(formatted).styles[i];
+async function lintStyle(code, file, messages) {
+ // Stylelint's `lint` method requires an absolute path for the codeFilename arg
+ const codeFilename = !path.isAbsolute(file) ? path.join(hostProjectDir, file) : file;
+ const output = await stylelint.lint({
+ code,
+ codeFilename,
+ config: stylelintConfig,
+ fix: true,
+ configBasedir: hostProjectDir,
+ quietDeprecationWarnings: true,
+ });
+ let stylinted = code;
+ if (output.results && output.results.length) {
+ messages.push(stylelintFormatter(output.results));
+ // There should only be one result, because we have only
+ // passed it a single file, this seems to be the only way
+ // to check if the `output` property of the output object has been set
+ // to valid style code, as opposed to a serialized copy of the formatted
+ // errors.
+ // We are doing a parallel of the check being done here:
+ // https://github.com/stylelint/stylelint/blob/master/lib/standalone.js#L159
+ if (output.results[0]._postcssResult && !output.results[0]._postcssResult.stylelint.ignored) {
+ stylinted = output.output;
+ }
+ }
+ return stylinted;
+}
- // Is a scss style block
- if (block && styleLangs.some(lang => lang === block.lang)) {
- // Is not an empty single line style block
- if (block.content.trim().length > 0) {
- const start = block.start;
- lineOffset = formatted.slice(0, start).match(/\n/g || []).length;
- const index = i;
- const callback = updatedCode => {
- const block = compiler.parseComponent(formatted).styles[index];
- formatted = insertContent(formatted, block, updatedCode);
- };
- lintStyle(block.content, block.lang, callback, { lineOffset, vue: true });
- }
- }
- }
- }
- if (notSoPretty) {
- messages.push(chalk.yellow(`${file} did not conform to prettier standards`));
- }
- } catch (e) {
- // Something went wrong, return the source to be safe.
- reject({ error: e.message, code: errorOrChange });
- return;
- }
- Promise.all(promises)
- .then(() => {
- // Get rid of any empty messages
- messages = messages.filter(msg => msg.trim());
- // Wait until any asynchronous tasks have finished
- styleCodeUpdates.forEach(update => update());
- if ((!formatted || formatted === source) && !messages.length) {
- // Nothing to lint, return the source to be safe.
- resolve({ code: noChange });
- return;
- }
- const code = errorOrChange;
- if (messages.length && !silent) {
- logging.log('');
- logging.info(`Linting errors for ${file}`);
- messages.forEach(msg => {
- logging.log(msg);
- });
- }
- // Only write if the formatted file is different to the source file.
- if (write && formatted !== source) {
- try {
- fs.writeFileSync(file, formatted, { encoding });
- if (!silent) {
- logging.info(`Rewriting a prettier version of ${file}`);
- }
- } catch (error) {
- reject({ error: error.message, code: errorOrChange });
- return;
- }
- }
- resolve({ code });
- })
- .catch(err => {
- // Something went wrong, return the source to be safe.
- reject({ error: err, code: errorOrChange });
- return;
- });
+async function lint({ file, write, encoding = 'utf-8', silent = false } = {}) {
+ const source = await readFile(file, { encoding });
+ let formatted = source;
+ let messages = [];
+
+ let extension = path.extname(file);
+ if (extension.startsWith('.')) {
+ extension = extension.slice(1);
+ }
+
+ // Run prettier on everything first.
+ formatted = await prettierFormat(formatted, file, messages);
+
+ // Run eslint on JS files and vue files.
+ if (extension === 'js' || extension === 'vue') {
+ formatted = await eslint(formatted, file, messages);
+ }
+
+ // Run stylelint on any file that can contain styles
+ if (styleLangs.some(lang => lang === extension)) {
+ formatted = await lintStyle(formatted, file, messages);
+ }
+
+ if (formatted !== source) {
+ messages.push(chalk.yellow(`${file} did not conform to formatting standards`));
+ }
+
+ // Get rid of any empty messages
+ messages = messages.filter(msg => msg.trim());
+ if (!messages.length) {
+ // Nothing to lint, return noChange.
+ return noChange;
+ }
+ if (messages.length && !silent) {
+ logging.info(`Linting errors for ${file}`);
+ messages.forEach(msg => {
+ logging.log(msg);
});
- });
+ }
+ // Only write if the formatted file is different to the source file.
+ if (write && formatted !== source) {
+ try {
+ fs.writeFileSync(file, formatted, { encoding });
+ if (!silent) {
+ logging.info(`Rewriting a reformatted version of ${file}`);
+ }
+ } catch (error) {
+ logging.error(error);
+ }
+ }
+ return errorOrChange;
}
module.exports = {
diff --git a/packages/kolibri-tools/package.json b/packages/kolibri-tools/package.json
index 878a576c812..052a7ba2e77 100644
--- a/packages/kolibri-tools/package.json
+++ b/packages/kolibri-tools/package.json
@@ -18,6 +18,7 @@
"@babel/plugin-syntax-import-assertions": "^7.24.7",
"@babel/plugin-transform-runtime": "^7.24.7",
"@babel/preset-env": "^7.24.7",
+ "@rushstack/eslint-patch": "^1.10.2",
"@testing-library/jest-dom": "^6.4.6",
"@testing-library/user-event": "^14.5.2",
"@testing-library/vue": "^5",
@@ -40,14 +41,13 @@
"csv-writer": "^1.3.0",
"del": "^6.1.1",
"escodegen": "^2.1.0",
- "eslint": "^6.8.0",
- "eslint-config-prettier": "^6.15.0",
- "eslint-config-vue": "^2.0.2",
+ "eslint": "^8.57.0",
+ "eslint-config-prettier": "^9.1.0",
"eslint-plugin-import": "^2.29.1",
- "eslint-plugin-jest": "^23.3.0",
+ "eslint-plugin-jest": "^28.6.0",
"eslint-plugin-jest-dom": "^5.4.0",
"eslint-plugin-kolibri": "0.16.1-dev.1",
- "eslint-plugin-vue": "^7.3.0",
+ "eslint-plugin-vue": "^9.26.0",
"espree": "10.1.0",
"esquery": "^1.5.0",
"express": "^4.19.2",
@@ -61,11 +61,12 @@
"lodash": "^4.17.21",
"mini-css-extract-plugin": "^2.9.0",
"node-sass": "9.0.0",
+ "postcss-html": "^1.5.0",
"postcss-less": "^6.0.0",
"postcss-loader": "^8.1.1",
"postcss-sass": "^0.5.0",
"postcss-scss": "^4.0.9",
- "prettier": "^1.18.2",
+ "prettier": "^3.3.2",
"process": "^0.11.10",
"query-ast": "^1.0.5",
"readline-sync": "^1.4.9",
@@ -77,12 +78,13 @@
"semver": "^7.6.2",
"strip-ansi": "6.0.1",
"style-loader": "^4.0.0",
- "stylelint": "14.16.1",
+ "stylelint": "^15.11.0",
+ "stylelint-config-html": "^1.1.0",
"stylelint-config-prettier": "9.0.5",
"stylelint-config-recess-order": "4.6.0",
- "stylelint-config-recommended-scss": "9.0.1",
- "stylelint-config-sass-guidelines": "10.0.0",
- "stylelint-config-standard": "24.0.0",
+ "stylelint-config-recommended-scss": "14.0.0",
+ "stylelint-config-sass-guidelines": "11.1.0",
+ "stylelint-config-standard": "34.0.0",
"stylelint-csstree-validator": "3.0.0",
"stylelint-scss": "5.3.2",
"temp": "^0.8.3",
diff --git a/packages/kolibri-tools/test/test_htmlhint_custom.spec.js b/packages/kolibri-tools/test/test_htmlhint_custom.spec.js
deleted file mode 100644
index e6fc72d0b45..00000000000
--- a/packages/kolibri-tools/test/test_htmlhint_custom.spec.js
+++ /dev/null
@@ -1,130 +0,0 @@
-const path = require('path');
-const fs = require('fs');
-const HTMLHint = require('htmlhint').HTMLHint;
-
-// add base rules
-function getConfig() {
- const configPath = path.join(__dirname, '..', '.htmlhintrc.js');
- if (fs.existsSync(configPath)) {
- const config = require(configPath);
- return config;
- }
-}
-const ruleset = getConfig();
-
-// add custom rules
-require('../lib/htmlhint_custom');
-
-//rule is currently disabled
-/*
-describe('--attr-value-single-quotes', function() {
- describe('input is valid', function() {
- it('should have no errors', function (done) {
- const input = '';
- const output = HTMLHint.verify(input, ruleset);
- expect(output).toHaveLength(0);
- done();
- });
- });
- describe('input is invalid', function() {
- it('should have one error with rule id: --attr-value-single-quotes', function (done) {
- const input = '';
- const output = HTMLHint.verify(input, ruleset);
- expect(output).toHaveLength(1 &&
- expectRuleName(output, '--attr-value-single-quotes');
- done();
- });
- });
-});
-*/
-
-function expectRuleName(output, ruleName) {
- expect(output[0].rule.id).toEqual(ruleName);
-}
-
-describe('--vue-component-conventions', function() {
- describe('input is valid', function() {
- it('should have no errors', function() {
- const input =
- '\n\n html\n\n\n\n\n\n\n\n';
- const output = HTMLHint.verify(input, ruleset);
- expect(output).toHaveLength(0);
- });
- });
- // single quotes in lang attr
- describe('input is invalid', function() {
- it('should have one error', function() {
- const input =
- "\n\n html\n\n\n\n\n\n\n\n";
- const output = HTMLHint.verify(input, ruleset);
- expect(output).toHaveLength(1);
- });
- });
- // first block isn't on the first line
- describe('input is invalid', function() {
- it('should have one error with rule id: --vue-component-conventions', function() {
- const input =
- '\n\n\n html\n\n\n\n\n\n\n\n';
- const output = HTMLHint.verify(input, ruleset);
- expect(output).toHaveLength(1);
- expectRuleName(output, '--vue-component-conventions');
- });
- });
- // missing space between template and script block
- describe('input is invalid', function() {
- it('should have one error with rule id: --vue-component-conventions', function() {
- const input =
- '\n\n html\n\n\n\n\n\n\n';
- const output = HTMLHint.verify(input, ruleset);
- expect(output).toHaveLength(1);
- expectRuleName(output, '--vue-component-conventions');
- });
- });
- // extra space between script and style block
- describe('input is invalid', function() {
- it('should have one error with rule id: --vue-component-conventions', function() {
- const input =
- '\n\n html\n\n\n\n\n\n\n\n\n';
- const output = HTMLHint.verify(input, ruleset);
- expect(output).toHaveLength(1);
- expectRuleName(output, '--vue-component-conventions');
- });
- });
- // script block with whitespace characters only
- describe('input is invalid', function() {
- it('should have one error with rule id: --vue-component-conventions', function() {
- const input =
- '\n\n html\n\n\n\n\n\n\n\n';
- const output = HTMLHint.verify(input, ruleset);
- expect(output).toHaveLength(1);
- expectRuleName(output, '--vue-component-conventions');
- });
- });
- // script block with whitespace characters only
- describe('input is invalid', function() {
- it('should have one error with rule id: --vue-component-conventions', function() {
- const input =
- '\n\n html\n\n\n\n\n\n\n\n';
- const output = HTMLHint.verify(input, ruleset);
- expect(output).toHaveLength(1);
- expectRuleName(output, '--vue-component-conventions');
- });
- });
- describe('input is valid', function() {
- it('should have one error with rule id: --vue-component-conventions', function() {
- const input =
- '\n\n html\n\n\n\n\n\n\n\n';
- const output = HTMLHint.verify(input, ruleset);
- expect(output).toHaveLength(0);
- });
- });
- describe('defer unpaired tags', function() {
- it('should not check for, or fail on, unpaired tags', function() {
- const input =
- '\n\n \n\n\n\n\n\n\n\n';
- const output = HTMLHint.verify(input, ruleset);
- expect(output).toHaveLength(1);
- expectRuleName(output, 'tag-pair');
- });
- });
-});
diff --git a/yarn.lock b/yarn.lock
index 21fb81d7d71..33d1d369999 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1104,16 +1104,43 @@
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
-"@csstools/selector-specificity@^2.0.2":
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz#1bfafe4b7ed0f3e4105837e056e0a89b108ebe36"
- integrity sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==
+"@csstools/css-parser-algorithms@^2.3.1":
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz#c45440d1efa2954006748a01697072dae5881bcd"
+ integrity sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==
+
+"@csstools/css-tokenizer@^2.2.0":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.4.tgz#a4b8718ed7fcd2dcd555de16b31ca59ad4b96a06"
+ integrity sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==
+
+"@csstools/media-query-list-parser@^2.1.4":
+ version "2.1.9"
+ resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.9.tgz#feb4b7268f998956eb3ded69507869e73d005dda"
+ integrity sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==
+
+"@csstools/selector-specificity@^3.0.0":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz#208a3929ee614967a1fc8cd6cb758d9fcbf0caae"
+ integrity sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==
"@discoveryjs/json-ext@^0.5.0":
version "0.5.2"
resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752"
integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==
+"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
+ integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
+ dependencies:
+ eslint-visitor-keys "^3.3.0"
+
+"@eslint-community/regexpp@^4.6.1":
+ version "4.10.0"
+ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63"
+ integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==
+
"@eslint/eslintrc@^0.4.3":
version "0.4.3"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c"
@@ -1129,6 +1156,41 @@
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
+"@eslint/eslintrc@^1.3.1":
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.1.tgz#de0807bfeffc37b964a7d0400e0c348ce5a2543d"
+ integrity sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.3.2"
+ espree "^9.4.0"
+ globals "^13.15.0"
+ ignore "^5.2.0"
+ import-fresh "^3.2.1"
+ js-yaml "^4.1.0"
+ minimatch "^3.1.2"
+ strip-json-comments "^3.1.1"
+
+"@eslint/eslintrc@^2.1.4":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad"
+ integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.3.2"
+ espree "^9.6.0"
+ globals "^13.19.0"
+ ignore "^5.2.0"
+ import-fresh "^3.2.1"
+ js-yaml "^4.1.0"
+ minimatch "^3.1.2"
+ strip-json-comments "^3.1.1"
+
+"@eslint/js@8.57.0":
+ version "8.57.0"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f"
+ integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==
+
"@gar/promisify@^1.0.1":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210"
@@ -1139,6 +1201,24 @@
resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"
integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==
+"@humanwhocodes/config-array@^0.10.4":
+ version "0.10.4"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c"
+ integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==
+ dependencies:
+ "@humanwhocodes/object-schema" "^1.2.1"
+ debug "^4.1.1"
+ minimatch "^3.0.4"
+
+"@humanwhocodes/config-array@^0.11.14":
+ version "0.11.14"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b"
+ integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==
+ dependencies:
+ "@humanwhocodes/object-schema" "^2.0.2"
+ debug "^4.3.1"
+ minimatch "^3.0.5"
+
"@humanwhocodes/config-array@^0.5.0":
version "0.5.0"
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9"
@@ -1148,11 +1228,26 @@
debug "^4.1.1"
minimatch "^3.0.4"
-"@humanwhocodes/object-schema@^1.2.0":
+"@humanwhocodes/gitignore-to-minimatch@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d"
+ integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==
+
+"@humanwhocodes/module-importer@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
+ integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
+
+"@humanwhocodes/object-schema@^1.2.0", "@humanwhocodes/object-schema@^1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
+"@humanwhocodes/object-schema@^2.0.2":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
+ integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
+
"@isaacs/cliui@^8.0.2":
version "8.0.2"
resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
@@ -1868,11 +1963,24 @@
"@nodelib/fs.stat" "2.0.3"
run-parallel "^1.1.9"
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2":
version "2.0.3"
resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3"
integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==
+"@nodelib/fs.stat@2.0.5":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
"@nodelib/fs.walk@^1.2.3":
version "1.2.4"
resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976"
@@ -1881,6 +1989,14 @@
"@nodelib/fs.scandir" "2.1.3"
fastq "^1.6.0"
+"@nodelib/fs.walk@^1.2.8":
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
"@npmcli/fs@^1.0.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.0.tgz#bec1d1b89c170d40e1b73ad6c943b0b75e7d2951"
@@ -1928,6 +2044,11 @@
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f"
integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==
+"@rushstack/eslint-patch@^1.10.2":
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.10.2.tgz#053f1540703faa81dea2966b768ee5581c66aeda"
+ integrity sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==
+
"@shopify/draggable@^1.0.0-beta.8":
version "1.0.0-beta.8"
resolved "https://registry.yarnpkg.com/@shopify/draggable/-/draggable-1.0.0-beta.8.tgz#2eb3c2f72298ce3e53fe16f34ab124cc495cd4fc"
@@ -2202,10 +2323,10 @@
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
-"@types/json-schema@^7.0.3":
- version "7.0.4"
- resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339"
- integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==
+"@types/json-schema@^7.0.15":
+ version "7.0.15"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
+ integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
"@types/json-schema@^7.0.8":
version "7.0.11"
@@ -2251,6 +2372,11 @@
resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c"
integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==
+"@types/minimist@^1.2.2":
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e"
+ integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==
+
"@types/node-forge@^1.3.0":
version "1.3.11"
resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da"
@@ -2268,11 +2394,6 @@
resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301"
integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==
-"@types/parse-json@^4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
- integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
-
"@types/qs@*":
version "6.9.7"
resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb"
@@ -2288,6 +2409,11 @@
resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a"
integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==
+"@types/semver@^7.5.8":
+ version "7.5.8"
+ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e"
+ integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==
+
"@types/send@*":
version "0.17.4"
resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a"
@@ -2363,28 +2489,58 @@
dependencies:
"@types/yargs-parser" "*"
-"@typescript-eslint/experimental-utils@^2.5.0":
- version "2.34.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f"
- integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==
+"@typescript-eslint/scope-manager@7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz#bb19096d11ec6b87fb6640d921df19b813e02047"
+ integrity sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==
+ dependencies:
+ "@typescript-eslint/types" "7.8.0"
+ "@typescript-eslint/visitor-keys" "7.8.0"
+
+"@typescript-eslint/types@7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.8.0.tgz#1fd2577b3ad883b769546e2d1ef379f929a7091d"
+ integrity sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==
+
+"@typescript-eslint/typescript-estree@7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz#b028a9226860b66e623c1ee55cc2464b95d2987c"
+ integrity sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==
dependencies:
- "@types/json-schema" "^7.0.3"
- "@typescript-eslint/typescript-estree" "2.34.0"
- eslint-scope "^5.0.0"
- eslint-utils "^2.0.0"
+ "@typescript-eslint/types" "7.8.0"
+ "@typescript-eslint/visitor-keys" "7.8.0"
+ debug "^4.3.4"
+ globby "^11.1.0"
+ is-glob "^4.0.3"
+ minimatch "^9.0.4"
+ semver "^7.6.0"
+ ts-api-utils "^1.3.0"
+
+"@typescript-eslint/utils@^6.0.0 || ^7.0.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.8.0.tgz#57a79f9c0c0740ead2f622e444cfaeeb9fd047cd"
+ integrity sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.4.0"
+ "@types/json-schema" "^7.0.15"
+ "@types/semver" "^7.5.8"
+ "@typescript-eslint/scope-manager" "7.8.0"
+ "@typescript-eslint/types" "7.8.0"
+ "@typescript-eslint/typescript-estree" "7.8.0"
+ semver "^7.6.0"
-"@typescript-eslint/typescript-estree@2.34.0":
- version "2.34.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5"
- integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==
+"@typescript-eslint/visitor-keys@7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz#7285aab991da8bee411a42edbd5db760d22fdd91"
+ integrity sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==
dependencies:
- debug "^4.1.1"
- eslint-visitor-keys "^1.1.0"
- glob "^7.1.6"
- is-glob "^4.0.1"
- lodash "^4.17.15"
- semver "^7.3.2"
- tsutils "^3.17.1"
+ "@typescript-eslint/types" "7.8.0"
+ eslint-visitor-keys "^3.4.3"
+
+"@ungap/structured-clone@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
+ integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
"@use-gesture/core@10.3.0":
version "10.3.0"
@@ -2664,7 +2820,7 @@ acorn-import-attributes@^1.9.5:
resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef"
integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==
-acorn-jsx@^5.0.0, acorn-jsx@^5.2.0, acorn-jsx@^5.3.1, acorn-jsx@^5.3.2:
+acorn-jsx@^5.3.1, acorn-jsx@^5.3.2:
version "5.3.2"
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
@@ -2674,21 +2830,31 @@ acorn-walk@^7.1.1:
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
-acorn@^6.0.7:
- version "6.4.2"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
- integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
-
acorn@^7.1.1, acorn@^7.4.0:
version "7.4.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
-acorn@^8.12.0, acorn@^8.7.1, acorn@^8.8.2:
+acorn@^8.12.0:
version "8.12.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.0.tgz#1627bfa2e058148036133b8d9b51a700663c294c"
integrity sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==
+acorn@^8.7.1, acorn@^8.8.0:
+ version "8.8.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8"
+ integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==
+
+acorn@^8.8.2:
+ version "8.8.2"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
+ integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
+
+acorn@^8.9.0:
+ version "8.11.3"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
+ integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
+
aes-decrypter@3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/aes-decrypter/-/aes-decrypter-3.1.3.tgz#65ff5f2175324d80c41083b0e135d1464b12ac35"
@@ -2751,7 +2917,7 @@ ajv-keywords@^5.1.0:
dependencies:
fast-deep-equal "^3.1.3"
-ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1:
+ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5:
version "6.12.6"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
@@ -2786,11 +2952,6 @@ ansi-colors@^4.1.1:
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b"
integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==
-ansi-escapes@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
- integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
-
ansi-escapes@^4.2.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61"
@@ -2808,16 +2969,6 @@ ansi-regex@^2.0.0:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
-ansi-regex@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
- integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
-
-ansi-regex@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
- integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
-
ansi-regex@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
@@ -2833,7 +2984,7 @@ ansi-styles@^2.2.1:
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
-ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
@@ -3008,11 +3159,6 @@ ast-types@^0.16.1:
dependencies:
tslib "^2.0.1"
-astral-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
- integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
-
astral-regex@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
@@ -3509,12 +3655,22 @@ camelcase-keys@^6.2.2:
map-obj "^4.0.0"
quick-lru "^4.0.1"
+camelcase-keys@^7.0.0:
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-7.0.2.tgz#d048d8c69448745bb0de6fc4c1c52a30dfbe7252"
+ integrity sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==
+ dependencies:
+ camelcase "^6.3.0"
+ map-obj "^4.1.0"
+ quick-lru "^5.1.1"
+ type-fest "^1.2.1"
+
camelcase@^5.3.1:
version "5.3.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
-camelcase@^6.2.0:
+camelcase@^6.2.0, camelcase@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
@@ -3575,11 +3731,6 @@ char-regex@^1.0.2:
resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
-chardet@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
- integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
-
check-node-version@^4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/check-node-version/-/check-node-version-4.2.1.tgz#42f7e3c6e2427327b5c9080dae593d8997fe9a06"
@@ -3646,20 +3797,6 @@ clean-stack@^2.0.0:
resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
-cli-cursor@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
- integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
- dependencies:
- restore-cursor "^2.0.0"
-
-cli-cursor@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
- integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
- dependencies:
- restore-cursor "^3.1.0"
-
cli-table@^0.3.11:
version "0.3.11"
resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.11.tgz#ac69cdecbe81dccdba4889b9a18b7da312a9d3ee"
@@ -3667,11 +3804,6 @@ cli-table@^0.3.11:
dependencies:
colors "1.0.3"
-cli-width@^2.0.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
- integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
-
clipboard@^2.0.11:
version "2.0.11"
resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.11.tgz#62180360b97dd668b6b3a84ec226975762a70be5"
@@ -3945,16 +4077,15 @@ core-util-is@~1.0.0:
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-cosmiconfig@^7.1.0:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6"
- integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==
+cosmiconfig@^8.2.0:
+ version "8.3.6"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3"
+ integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==
dependencies:
- "@types/parse-json" "^4.0.0"
- import-fresh "^3.2.1"
- parse-json "^5.0.0"
+ import-fresh "^3.3.0"
+ js-yaml "^4.1.0"
+ parse-json "^5.2.0"
path-type "^4.0.0"
- yaml "^1.10.0"
cosmiconfig@^9.0.0:
version "9.0.0"
@@ -3987,17 +4118,6 @@ create-react-class@^15.6.3:
loose-envify "^1.3.1"
object-assign "^4.1.1"
-cross-spawn@^6.0.5:
- version "6.0.5"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
- integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
- dependencies:
- nice-try "^1.0.4"
- path-key "^2.0.1"
- semver "^5.5.0"
- shebang-command "^1.2.0"
- which "^1.2.9"
-
cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
@@ -4017,10 +4137,10 @@ css-element-queries@1.2.0:
resolved "https://registry.yarnpkg.com/css-element-queries/-/css-element-queries-1.2.0.tgz#081373d7f30302adad46b7c29b83b85f8ef8f62c"
integrity sha512-4gaxpioSFueMcp9yj1TJFCLjfooGv38y6ZdwFUS3GuS+9NIVijdeiExXKwSIHoQDADfpgnaYSTzmJs+bV+Hehg==
-css-functions-list@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.1.0.tgz#cf5b09f835ad91a00e5959bcfc627cd498e1321b"
- integrity sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==
+css-functions-list@^3.2.1:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.2.tgz#9a54c6dd8416ed25c1079cd88234e927526c1922"
+ integrity sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==
css-in-js-utils@^2.0.0:
version "2.0.1"
@@ -4279,7 +4399,7 @@ debug@2.6.9, debug@^2.6.8:
dependencies:
ms "2.0.0"
-debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4:
+debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@@ -4306,6 +4426,11 @@ decamelize@^1.1.0, decamelize@^1.2.0:
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+decamelize@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-5.0.1.tgz#db11a92e58c741ef339fb0a2868d8a06a9a7b1e9"
+ integrity sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==
+
decimal.js@^10.3.1:
version "10.4.0"
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.0.tgz#97a7448873b01e92e5ff9117d89a7bca8e63e0fe"
@@ -4350,11 +4475,6 @@ deep-is@^0.1.3:
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
-deep-is@~0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
- integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
-
deep-object-diff@^1.1.9:
version "1.1.9"
resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.9.tgz#6df7ef035ad6a0caa44479c536ed7b02570f4595"
@@ -4488,11 +4608,6 @@ dir-glob@^3.0.1:
dependencies:
path-type "^4.0.0"
-dlv@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
- integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
-
dns-packet@^5.2.2:
version "5.4.0"
resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b"
@@ -4671,11 +4786,6 @@ emittery@^0.13.1:
resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad"
integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==
-emoji-regex@^7.0.1:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
- integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
-
emoji-regex@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
@@ -4723,7 +4833,12 @@ entities@^2.0.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.2.tgz#ac74db0bba8d33808bbf36809c3a5c3683531436"
integrity sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw==
-entities@^4.2.0, entities@^4.3.0, entities@^4.4.0:
+entities@^4.2.0, entities@^4.3.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174"
+ integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==
+
+entities@^4.4.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
@@ -4920,17 +5035,10 @@ escodegen@^2.0.0, escodegen@^2.1.0:
optionalDependencies:
source-map "~0.6.1"
-eslint-config-prettier@^6.15.0:
- version "6.15.0"
- resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9"
- integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==
- dependencies:
- get-stdin "^6.0.0"
-
-eslint-config-vue@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/eslint-config-vue/-/eslint-config-vue-2.0.2.tgz#a3ab1004899e49327a94c63e24d47a396b2f4848"
- integrity sha1-o6sQBImeSTJ6lMY+JNR6OWsvSEg=
+eslint-config-prettier@^9.1.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f"
+ integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==
eslint-import-resolver-node@^0.3.9:
version "0.3.9"
@@ -4993,24 +5101,28 @@ eslint-plugin-jest-dom@^5.4.0:
"@babel/runtime" "^7.16.3"
requireindex "^1.2.0"
-eslint-plugin-jest@^23.3.0:
- version "23.13.2"
- resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.13.2.tgz#7b7993b4e09be708c696b02555083ddefd7e4cc7"
- integrity sha512-qZit+moTXTyZFNDqSIR88/L3rdBlTU7CuW6XmyErD2FfHEkdoLgThkRbiQjzgYnX6rfgLx3Ci4eJmF4Ui5v1Cw==
+eslint-plugin-jest@^28.6.0:
+ version "28.6.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-28.6.0.tgz#8410588d60bcafa68a91b6ec272e4a415502302a"
+ integrity sha512-YG28E1/MIKwnz+e2H7VwYPzHUYU4aMa19w0yGcwXnnmJH6EfgHahTJ2un3IyraUxNfnz/KUhJAFXNNwWPo12tg==
dependencies:
- "@typescript-eslint/experimental-utils" "^2.5.0"
+ "@typescript-eslint/utils" "^6.0.0 || ^7.0.0"
-eslint-plugin-vue@^7.3.0:
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.3.0.tgz#0faf0fcf0e1b1052bf800d4dee42d64f50679cb0"
- integrity sha512-4rc9xrZgwT4aLz3XE6lrHu+FZtDLWennYvtzVvvS81kW9c65U4DUzQQWAFjDCgCFvN6HYWxi7ueEtxZVSB+f0g==
+eslint-plugin-vue@^9.26.0:
+ version "9.26.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.26.0.tgz#bf7f5cce62c8f878059b91edae44d22974133af5"
+ integrity sha512-eTvlxXgd4ijE1cdur850G6KalZqk65k1JKoOI2d1kT3hr8sPD07j1q98FRFdNnpxBELGPWxZmInxeHGF/GxtqQ==
dependencies:
- eslint-utils "^2.1.0"
+ "@eslint-community/eslint-utils" "^4.4.0"
+ globals "^13.24.0"
natural-compare "^1.4.0"
- semver "^7.3.2"
- vue-eslint-parser "^7.3.0"
+ nth-check "^2.1.1"
+ postcss-selector-parser "^6.0.15"
+ semver "^7.6.0"
+ vue-eslint-parser "^9.4.2"
+ xml-name-validator "^4.0.0"
-eslint-scope@5.1.1, eslint-scope@^5.0.0, eslint-scope@^5.1.1:
+eslint-scope@5.1.1, eslint-scope@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
@@ -5018,27 +5130,21 @@ eslint-scope@5.1.1, eslint-scope@^5.0.0, eslint-scope@^5.1.1:
esrecurse "^4.3.0"
estraverse "^4.1.1"
-eslint-scope@^4.0.3:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
- integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
- dependencies:
- esrecurse "^4.1.0"
- estraverse "^4.1.1"
-
-eslint-utils@^1.3.1, eslint-utils@^1.4.3:
- version "1.4.3"
- resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
- integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
+eslint-scope@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642"
+ integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==
dependencies:
- eslint-visitor-keys "^1.1.0"
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
-eslint-utils@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd"
- integrity sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==
+eslint-scope@^7.2.2:
+ version "7.2.2"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f"
+ integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
dependencies:
- eslint-visitor-keys "^1.1.0"
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
eslint-utils@^2.1.0:
version "2.1.0"
@@ -5047,7 +5153,14 @@ eslint-utils@^2.1.0:
dependencies:
eslint-visitor-keys "^1.1.0"
-eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
+eslint-utils@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
+ integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
+ dependencies:
+ eslint-visitor-keys "^2.0.0"
+
+eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
@@ -5057,96 +5170,21 @@ eslint-visitor-keys@^2.0.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
+eslint-visitor-keys@^3.3.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc"
+ integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==
+
+eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
+ integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
+
eslint-visitor-keys@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz#e3adc021aa038a2a8e0b2f8b0ce8f66b9483b1fb"
integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==
-eslint@^5.16.0:
- version "5.16.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea"
- integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==
- dependencies:
- "@babel/code-frame" "^7.0.0"
- ajv "^6.9.1"
- chalk "^2.1.0"
- cross-spawn "^6.0.5"
- debug "^4.0.1"
- doctrine "^3.0.0"
- eslint-scope "^4.0.3"
- eslint-utils "^1.3.1"
- eslint-visitor-keys "^1.0.0"
- espree "^5.0.1"
- esquery "^1.0.1"
- esutils "^2.0.2"
- file-entry-cache "^5.0.1"
- functional-red-black-tree "^1.0.1"
- glob "^7.1.2"
- globals "^11.7.0"
- ignore "^4.0.6"
- import-fresh "^3.0.0"
- imurmurhash "^0.1.4"
- inquirer "^6.2.2"
- js-yaml "^3.13.0"
- json-stable-stringify-without-jsonify "^1.0.1"
- levn "^0.3.0"
- lodash "^4.17.11"
- minimatch "^3.0.4"
- mkdirp "^0.5.1"
- natural-compare "^1.4.0"
- optionator "^0.8.2"
- path-is-inside "^1.0.2"
- progress "^2.0.0"
- regexpp "^2.0.1"
- semver "^5.5.1"
- strip-ansi "^4.0.0"
- strip-json-comments "^2.0.1"
- table "^5.2.3"
- text-table "^0.2.0"
-
-eslint@^6.8.0:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb"
- integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==
- dependencies:
- "@babel/code-frame" "^7.0.0"
- ajv "^6.10.0"
- chalk "^2.1.0"
- cross-spawn "^6.0.5"
- debug "^4.0.1"
- doctrine "^3.0.0"
- eslint-scope "^5.0.0"
- eslint-utils "^1.4.3"
- eslint-visitor-keys "^1.1.0"
- espree "^6.1.2"
- esquery "^1.0.1"
- esutils "^2.0.2"
- file-entry-cache "^5.0.1"
- functional-red-black-tree "^1.0.1"
- glob-parent "^5.0.0"
- globals "^12.1.0"
- ignore "^4.0.6"
- import-fresh "^3.0.0"
- imurmurhash "^0.1.4"
- inquirer "^7.0.0"
- is-glob "^4.0.0"
- js-yaml "^3.13.1"
- json-stable-stringify-without-jsonify "^1.0.1"
- levn "^0.3.0"
- lodash "^4.17.14"
- minimatch "^3.0.4"
- mkdirp "^0.5.1"
- natural-compare "^1.4.0"
- optionator "^0.8.3"
- progress "^2.0.0"
- regexpp "^2.0.1"
- semver "^6.1.2"
- strip-ansi "^5.2.0"
- strip-json-comments "^3.0.1"
- table "^5.2.3"
- text-table "^0.2.0"
- v8-compile-cache "^2.0.3"
-
eslint@^7.32.0:
version "7.32.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d"
@@ -5193,6 +5231,95 @@ eslint@^7.32.0:
text-table "^0.2.0"
v8-compile-cache "^2.0.3"
+eslint@^8.23.0:
+ version "8.23.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.23.0.tgz#a184918d288820179c6041bb3ddcc99ce6eea040"
+ integrity sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA==
+ dependencies:
+ "@eslint/eslintrc" "^1.3.1"
+ "@humanwhocodes/config-array" "^0.10.4"
+ "@humanwhocodes/gitignore-to-minimatch" "^1.0.2"
+ "@humanwhocodes/module-importer" "^1.0.1"
+ ajv "^6.10.0"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.3.2"
+ doctrine "^3.0.0"
+ escape-string-regexp "^4.0.0"
+ eslint-scope "^7.1.1"
+ eslint-utils "^3.0.0"
+ eslint-visitor-keys "^3.3.0"
+ espree "^9.4.0"
+ esquery "^1.4.0"
+ esutils "^2.0.2"
+ fast-deep-equal "^3.1.3"
+ file-entry-cache "^6.0.1"
+ find-up "^5.0.0"
+ functional-red-black-tree "^1.0.1"
+ glob-parent "^6.0.1"
+ globals "^13.15.0"
+ globby "^11.1.0"
+ grapheme-splitter "^1.0.4"
+ ignore "^5.2.0"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ js-yaml "^4.1.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash.merge "^4.6.2"
+ minimatch "^3.1.2"
+ natural-compare "^1.4.0"
+ optionator "^0.9.1"
+ regexpp "^3.2.0"
+ strip-ansi "^6.0.1"
+ strip-json-comments "^3.1.0"
+ text-table "^0.2.0"
+
+eslint@^8.57.0:
+ version "8.57.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668"
+ integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.2.0"
+ "@eslint-community/regexpp" "^4.6.1"
+ "@eslint/eslintrc" "^2.1.4"
+ "@eslint/js" "8.57.0"
+ "@humanwhocodes/config-array" "^0.11.14"
+ "@humanwhocodes/module-importer" "^1.0.1"
+ "@nodelib/fs.walk" "^1.2.8"
+ "@ungap/structured-clone" "^1.2.0"
+ ajv "^6.12.4"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.3.2"
+ doctrine "^3.0.0"
+ escape-string-regexp "^4.0.0"
+ eslint-scope "^7.2.2"
+ eslint-visitor-keys "^3.4.3"
+ espree "^9.6.1"
+ esquery "^1.4.2"
+ esutils "^2.0.2"
+ fast-deep-equal "^3.1.3"
+ file-entry-cache "^6.0.1"
+ find-up "^5.0.0"
+ glob-parent "^6.0.2"
+ globals "^13.19.0"
+ graphemer "^1.4.0"
+ ignore "^5.2.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ is-path-inside "^3.0.3"
+ js-yaml "^4.1.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash.merge "^4.6.2"
+ minimatch "^3.1.2"
+ natural-compare "^1.4.0"
+ optionator "^0.9.3"
+ strip-ansi "^6.0.1"
+ text-table "^0.2.0"
+
esm@^3.2.25:
version "3.2.25"
resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10"
@@ -5217,24 +5344,6 @@ espree@10.1.0:
acorn-jsx "^5.3.2"
eslint-visitor-keys "^4.0.0"
-espree@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a"
- integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==
- dependencies:
- acorn "^6.0.7"
- acorn-jsx "^5.0.0"
- eslint-visitor-keys "^1.0.0"
-
-espree@^6.1.2, espree@^6.2.1:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a"
- integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==
- dependencies:
- acorn "^7.1.1"
- acorn-jsx "^5.2.0"
- eslint-visitor-keys "^1.1.0"
-
espree@^7.3.0, espree@^7.3.1:
version "7.3.1"
resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6"
@@ -5244,25 +5353,43 @@ espree@^7.3.0, espree@^7.3.1:
acorn-jsx "^5.3.1"
eslint-visitor-keys "^1.3.0"
+espree@^9.3.1, espree@^9.4.0:
+ version "9.4.0"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.0.tgz#cd4bc3d6e9336c433265fc0aa016fc1aaf182f8a"
+ integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==
+ dependencies:
+ acorn "^8.8.0"
+ acorn-jsx "^5.3.2"
+ eslint-visitor-keys "^3.3.0"
+
+espree@^9.6.0, espree@^9.6.1:
+ version "9.6.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f"
+ integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
+ dependencies:
+ acorn "^8.9.0"
+ acorn-jsx "^5.3.2"
+ eslint-visitor-keys "^3.4.1"
+
esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-esquery@^1.0.1, esquery@^1.4.0, esquery@^1.5.0:
+esquery@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
+ integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
+ dependencies:
+ estraverse "^5.1.0"
+
+esquery@^1.4.2, esquery@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b"
integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
dependencies:
estraverse "^5.1.0"
-esrecurse@^4.1.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
- integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
- dependencies:
- estraverse "^4.1.0"
-
esrecurse@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
@@ -5270,7 +5397,7 @@ esrecurse@^4.3.0:
dependencies:
estraverse "^5.2.0"
-estraverse@^4.1.0, estraverse@^4.1.1:
+estraverse@^4.1.1:
version "4.3.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
@@ -5427,15 +5554,6 @@ extend-shallow@^2.0.1:
dependencies:
is-extendable "^0.1.0"
-external-editor@^3.0.3:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
- integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
- dependencies:
- chardet "^0.7.0"
- iconv-lite "^0.4.24"
- tmp "^0.0.33"
-
extract-from-css@^0.4.4:
version "0.4.4"
resolved "https://registry.yarnpkg.com/extract-from-css/-/extract-from-css-0.4.4.tgz#1ea7df2e7c7c6eb9922fa08e8adaea486f6f8f92"
@@ -5448,7 +5566,18 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
-fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.2:
+fast-glob@^3.2.9:
+ version "3.2.11"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
+ integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
+fast-glob@^3.3.1, fast-glob@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
@@ -5464,7 +5593,7 @@ fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0:
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
+fast-levenshtein@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
@@ -5500,27 +5629,6 @@ fflate@^0.8.2:
resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea"
integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==
-figures@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
- integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
- dependencies:
- escape-string-regexp "^1.0.5"
-
-figures@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
- integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
- dependencies:
- escape-string-regexp "^1.0.5"
-
-file-entry-cache@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
- integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
- dependencies:
- flat-cache "^2.0.1"
-
file-entry-cache@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
@@ -5528,6 +5636,13 @@ file-entry-cache@^6.0.1:
dependencies:
flat-cache "^3.0.4"
+file-entry-cache@^7.0.0:
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-7.0.2.tgz#2d61bb70ba89b9548e3035b7c9173fe91deafff0"
+ integrity sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==
+ dependencies:
+ flat-cache "^3.2.0"
+
file-uri-to-path@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
@@ -5593,15 +5708,6 @@ find-up@^6.3.0:
locate-path "^7.1.0"
path-exists "^5.0.0"
-flat-cache@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
- integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
- dependencies:
- flatted "^2.0.0"
- rimraf "2.6.3"
- write "1.0.3"
-
flat-cache@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
@@ -5610,21 +5716,30 @@ flat-cache@^3.0.4:
flatted "^3.1.0"
rimraf "^3.0.2"
+flat-cache@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee"
+ integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==
+ dependencies:
+ flatted "^3.2.9"
+ keyv "^4.5.3"
+ rimraf "^3.0.2"
+
flat@^5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
-flatted@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
- integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
-
flatted@^3.1.0:
version "3.2.4"
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2"
integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==
+flatted@^3.2.9:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a"
+ integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==
+
flush-promises@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/flush-promises/-/flush-promises-1.0.2.tgz#4948fd58f15281fed79cbafc86293d5bb09b2ced"
@@ -5801,7 +5916,16 @@ get-intrinsic@^1.1.3:
has "^1.0.3"
has-symbols "^1.0.3"
-get-intrinsic@^1.2.0, get-intrinsic@^1.2.1:
+get-intrinsic@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f"
+ integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==
+ dependencies:
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.3"
+
+get-intrinsic@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82"
integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==
@@ -5831,11 +5955,6 @@ get-stdin@^4.0.1:
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
-get-stdin@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
- integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
-
get-stream@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718"
@@ -5849,13 +5968,20 @@ get-symbol-description@^1.0.0:
call-bind "^1.0.2"
get-intrinsic "^1.1.1"
-glob-parent@^5.0.0, glob-parent@^5.1.2, glob-parent@~5.1.2:
+glob-parent@^5.1.2, glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
dependencies:
is-glob "^4.0.1"
+glob-parent@^6.0.1, glob-parent@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+ dependencies:
+ is-glob "^4.0.3"
+
glob-to-regexp@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
@@ -5872,7 +5998,7 @@ glob@^10.3.10, glob@^10.3.7:
minipass "^7.0.4"
path-scurry "^1.10.2"
-glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0:
+glob@^7.0.0, glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0:
version "7.2.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
@@ -5931,19 +6057,19 @@ global@^4.3.0, global@^4.3.1, global@^4.4.0, global@~4.4.0:
min-document "^2.19.0"
process "^0.11.10"
-globals@^11.1.0, globals@^11.7.0:
+globals@^11.1.0:
version "11.12.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
-globals@^12.1.0:
- version "12.4.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8"
- integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==
+globals@^13.15.0, globals@^13.6.0, globals@^13.9.0:
+ version "13.17.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4"
+ integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==
dependencies:
- type-fest "^0.8.1"
+ type-fest "^0.20.2"
-globals@^13.24.0, globals@^13.6.0, globals@^13.9.0:
+globals@^13.19.0, globals@^13.24.0:
version "13.24.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
@@ -6014,6 +6140,16 @@ graceful-fs@^4.1.2, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6,
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+grapheme-splitter@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e"
+ integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==
+
+graphemer@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
+ integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
+
hammerjs@^2.0.8:
version "2.0.8"
resolved "https://registry.yarnpkg.com/hammerjs/-/hammerjs-2.0.8.tgz#04ef77862cff2bb79d30f7692095930222bf60f1"
@@ -6185,10 +6321,10 @@ html-minifier-terser@^6.0.2:
relateurl "^0.2.7"
terser "^5.10.0"
-html-tags@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961"
- integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==
+html-tags@^3.3.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce"
+ integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==
html-webpack-plugin@5.6.0:
version "5.6.0"
@@ -6225,6 +6361,16 @@ htmlparser2@^6.1.0:
domutils "^2.5.2"
entities "^2.0.0"
+htmlparser2@^8.0.0:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010"
+ integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==
+ dependencies:
+ domelementtype "^2.3.0"
+ domhandler "^5.0.2"
+ domutils "^3.0.1"
+ entities "^4.3.0"
+
http-cache-semantics@^4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
@@ -6332,7 +6478,7 @@ hyphenate-style-name@^1.0.2:
resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d"
integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==
-iconv-lite@0.4.24, iconv-lite@^0.4.24:
+iconv-lite@0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -6356,7 +6502,7 @@ ignore@^4.0.6:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
-ignore@^5.2.0, ignore@^5.2.1:
+ignore@^5.2.0, ignore@^5.2.4:
version "5.3.1"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==
@@ -6366,15 +6512,7 @@ immediate@~3.0.5:
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=
-import-fresh@^3.0.0:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
- integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
- dependencies:
- parent-module "^1.0.0"
- resolve-from "^4.0.0"
-
-import-fresh@^3.2.1, import-fresh@^3.3.0:
+import-fresh@^3.0.0, import-fresh@^3.2.1, import-fresh@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
@@ -6405,6 +6543,11 @@ indent-string@^4.0.0:
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+indent-string@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5"
+ integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==
+
individual@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/individual/-/individual-2.0.0.tgz#833b097dad23294e76117a98fb38e0d9ad61bb97"
@@ -6451,44 +6594,6 @@ inline-style-prefixer@^4.0.2:
bowser "^1.7.3"
css-in-js-utils "^2.0.0"
-inquirer@^6.2.2:
- version "6.5.2"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca"
- integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==
- dependencies:
- ansi-escapes "^3.2.0"
- chalk "^2.4.2"
- cli-cursor "^2.1.0"
- cli-width "^2.0.0"
- external-editor "^3.0.3"
- figures "^2.0.0"
- lodash "^4.17.12"
- mute-stream "0.0.7"
- run-async "^2.2.0"
- rxjs "^6.4.0"
- string-width "^2.1.0"
- strip-ansi "^5.1.0"
- through "^2.3.6"
-
-inquirer@^7.0.0:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29"
- integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==
- dependencies:
- ansi-escapes "^4.2.1"
- chalk "^3.0.0"
- cli-cursor "^3.1.0"
- cli-width "^2.0.0"
- external-editor "^3.0.3"
- figures "^3.0.0"
- lodash "^4.17.15"
- mute-stream "0.0.8"
- run-async "^2.4.0"
- rxjs "^6.5.3"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
- through "^2.3.6"
-
internal-slot@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930"
@@ -6586,7 +6691,16 @@ is-arguments@^1.1.1:
call-bind "^1.0.2"
has-tostringtag "^1.0.0"
-is-array-buffer@^3.0.1, is-array-buffer@^3.0.2:
+is-array-buffer@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a"
+ integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.3"
+ is-typed-array "^1.1.10"
+
+is-array-buffer@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe"
integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==
@@ -6637,13 +6751,34 @@ is-callable@^1.1.4:
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab"
integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==
-is-core-module@^2.12.0, is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.5.0:
+is-core-module@^2.13.0:
+ version "2.13.0"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db"
+ integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==
+ dependencies:
+ has "^1.0.3"
+
+is-core-module@^2.13.1:
version "2.13.1"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
dependencies:
hasown "^2.0.0"
+is-core-module@^2.5.0:
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed"
+ integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==
+ dependencies:
+ has "^1.0.3"
+
+is-core-module@^2.9.0:
+ version "2.12.1"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd"
+ integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==
+ dependencies:
+ has "^1.0.3"
+
is-date-object@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
@@ -6671,11 +6806,6 @@ is-extglob@^2.1.1:
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
-is-fullwidth-code-point@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
- integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
-
is-fullwidth-code-point@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
@@ -6754,6 +6884,11 @@ is-path-inside@^3.0.2:
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017"
integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==
+is-path-inside@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
+ integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
is-plain-obj@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
@@ -7413,7 +7548,12 @@ js-tokens@^3.0.2:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
-js-yaml@^3.13.0, js-yaml@^3.13.1:
+js-tokens@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-8.0.0.tgz#5dbe2cdfa9afc93251d3a77bf18c3ad6fa8a4de4"
+ integrity sha512-PC7MzqInq9OqKyTXfIvQNcjMkODJYC8A17kAaQgeW79yfhqTWSOfjHYQ2mDDcwJ96Iibtwkfh0C7R/OvqPlgVA==
+
+js-yaml@^3.13.1:
version "3.14.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482"
integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==
@@ -7471,6 +7611,11 @@ jsesc@~0.5.0:
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+json-buffer@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+ integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
json-parse-better-errors@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
@@ -7542,6 +7687,13 @@ keycode@^2.2.0:
resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.0.tgz#3d0af56dc7b8b8e5cba8d0a97f107204eec22b04"
integrity sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ=
+keyv@^4.5.3:
+ version "4.5.4"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
+ integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+ dependencies:
+ json-buffer "3.0.1"
+
kind-of@^3.0.2:
version "3.2.2"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
@@ -7559,11 +7711,6 @@ kleur@^3.0.3:
resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
-known-css-properties@^0.26.0:
- version "0.26.0"
- resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.26.0.tgz#008295115abddc045a9f4ed7e2a84dc8b3a77649"
- integrity sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==
-
known-css-properties@^0.29.0:
version "0.29.0"
resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.29.0.tgz#e8ba024fb03886f23cb882e806929f32d814158f"
@@ -7620,14 +7767,6 @@ leven@^3.1.0:
resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
-levn@^0.3.0, levn@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
- integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
- dependencies:
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
-
levn@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
@@ -7748,7 +7887,7 @@ lodash.uniq@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
-lodash@4.17.21, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@~4.17.12:
+lodash@4.17.21, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@~4.17.12:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -7892,7 +8031,7 @@ map-obj@^1.0.0:
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
-map-obj@^4.0.0:
+map-obj@^4.0.0, map-obj@^4.1.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a"
integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==
@@ -7975,6 +8114,24 @@ memfs@^4.6.0:
resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e"
integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==
+meow@^10.1.5:
+ version "10.1.5"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-10.1.5.tgz#be52a1d87b5f5698602b0f32875ee5940904aa7f"
+ integrity sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==
+ dependencies:
+ "@types/minimist" "^1.2.2"
+ camelcase-keys "^7.0.0"
+ decamelize "^5.0.0"
+ decamelize-keys "^1.1.0"
+ hard-rejection "^2.1.0"
+ minimist-options "4.1.0"
+ normalize-package-data "^3.0.2"
+ read-pkg-up "^8.0.0"
+ redent "^4.0.0"
+ trim-newlines "^4.0.2"
+ type-fest "^1.2.2"
+ yargs-parser "^20.2.9"
+
meow@^9.0.0:
version "9.0.0"
resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364"
@@ -8050,11 +8207,6 @@ mime@1.6.0:
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
-mimic-fn@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
- integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
-
mimic-fn@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
@@ -8067,7 +8219,7 @@ min-document@^2.19.0:
dependencies:
dom-walk "^0.1.0"
-min-indent@^1.0.0:
+min-indent@^1.0.0, min-indent@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
@@ -8093,7 +8245,7 @@ minimalistic-assert@^1.0.0:
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
-minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
+minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
@@ -8114,6 +8266,13 @@ minimatch@^9.0.1:
dependencies:
brace-expansion "^2.0.1"
+minimatch@^9.0.4:
+ version "9.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51"
+ integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==
+ dependencies:
+ brace-expansion "^2.0.1"
+
minimatch@~3.0.2:
version "3.0.8"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1"
@@ -8215,13 +8374,6 @@ mj-context-menu@^0.6.1:
resolved "https://registry.yarnpkg.com/mj-context-menu/-/mj-context-menu-0.6.1.tgz#a043c5282bf7e1cf3821de07b13525ca6f85aa69"
integrity sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==
-mkdirp@^0.5.1:
- version "0.5.5"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
- integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
- dependencies:
- minimist "^1.2.5"
-
mkdirp@^1.0.3, mkdirp@^1.0.4, mkdirp@~1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
@@ -8270,16 +8422,6 @@ mutationobserver-shim@^0.3.7:
resolved "https://registry.yarnpkg.com/mutationobserver-shim/-/mutationobserver-shim-0.3.7.tgz#8bf633b0c0b0291a1107255ed32c13088a8c5bf3"
integrity sha512-oRIDTyZQU96nAiz2AQyngwx1e89iApl2hN5AOYwyxLUB47UYsU3Wv9lJWqH5y/QdiYkc5HQLi23ZNB3fELdHcQ==
-mute-stream@0.0.7:
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
- integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
-
-mute-stream@0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
- integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
-
mux.js@6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/mux.js/-/mux.js-6.0.1.tgz#65ce0f7a961d56c006829d024d772902d28c7755"
@@ -8293,6 +8435,11 @@ nan@^2.17.0:
resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb"
integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==
+nanoid@^3.3.4:
+ version "3.3.6"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
+ integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
+
nanoid@^3.3.7:
version "3.3.7"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
@@ -8323,11 +8470,6 @@ next-tick@^1.1.0:
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb"
integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
-nice-try@^1.0.4:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
- integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
-
no-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
@@ -8350,9 +8492,9 @@ node-cache@^4.1.1:
lodash "^4.17.15"
node-fetch@^2.6.2:
- version "2.6.7"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
- integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6"
+ integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==
dependencies:
whatwg-url "^5.0.0"
@@ -8432,7 +8574,7 @@ normalize-package-data@^2.5.0:
semver "2 || 3 || 4 || 5"
validate-npm-package-license "^3.0.1"
-normalize-package-data@^3.0.0:
+normalize-package-data@^3.0.0, normalize-package-data@^3.0.2:
version "3.0.3"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e"
integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==
@@ -8476,6 +8618,13 @@ nth-check@^2.0.1:
dependencies:
boolbase "^1.0.0"
+nth-check@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
+ integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
+ dependencies:
+ boolbase "^1.0.0"
+
nwsapi@^2.2.0:
version "2.2.1"
resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.1.tgz#10a9f268fbf4c461249ebcfe38e359aa36e2577c"
@@ -8581,20 +8730,6 @@ once@^1.3.0:
dependencies:
wrappy "1"
-onetime@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
- integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
- dependencies:
- mimic-fn "^1.0.0"
-
-onetime@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
- integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
- dependencies:
- mimic-fn "^2.1.0"
-
onetime@^5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
@@ -8612,18 +8747,6 @@ open@^10.0.3:
is-inside-container "^1.0.0"
is-wsl "^3.1.0"
-optionator@^0.8.2, optionator@^0.8.3:
- version "0.8.3"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
- integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
- dependencies:
- deep-is "~0.1.3"
- fast-levenshtein "~2.0.6"
- levn "~0.3.0"
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
- word-wrap "~1.2.3"
-
optionator@^0.9.1:
version "0.9.1"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
@@ -8636,12 +8759,24 @@ optionator@^0.9.1:
type-check "^0.4.0"
word-wrap "^1.2.3"
+optionator@^0.9.3:
+ version "0.9.4"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734"
+ integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==
+ dependencies:
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+ word-wrap "^1.2.5"
+
os-homedir@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
-os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
+os-tmpdir@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
@@ -8797,16 +8932,6 @@ path-is-absolute@^1.0.0:
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-path-is-inside@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
- integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
-
-path-key@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
- integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
-
path-key@^3.0.0, path-key@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
@@ -8957,6 +9082,16 @@ postcss-discard-overridden@^7.0.0:
resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz#b123ea51e3d4e1d0a254cf71eaff1201926d319c"
integrity sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==
+postcss-html@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-1.5.0.tgz#57a43bc9e336f516ecc448a37d2e8c2290170a6f"
+ integrity sha512-kCMRWJRHKicpA166kc2lAVUGxDZL324bkj/pVOb6RhjB0Z5Krl7mN0AsVkBhVIRZZirY0lyQXG38HCVaoKVNoA==
+ dependencies:
+ htmlparser2 "^8.0.0"
+ js-tokens "^8.0.0"
+ postcss "^8.4.0"
+ postcss-safe-parser "^6.0.0"
+
postcss-less@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-6.0.0.tgz#463b34c60f53b648c237f569aeb2e09149d85af4"
@@ -9157,12 +9292,20 @@ postcss-sass@^0.5.0:
gonzales-pe "^4.3.0"
postcss "^8.2.14"
-postcss-scss@^4.0.2, postcss-scss@^4.0.6, postcss-scss@^4.0.9:
+postcss-scss@^4.0.9:
version "4.0.9"
resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.9.tgz#a03c773cd4c9623cb04ce142a52afcec74806685"
integrity sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==
-postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.7:
+postcss-selector-parser@^6.0.13:
+ version "6.0.13"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b"
+ integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
+postcss-selector-parser@^6.0.15:
version "6.0.15"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535"
integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==
@@ -9178,6 +9321,22 @@ postcss-selector-parser@^6.0.16:
cssesc "^3.0.0"
util-deprecate "^1.0.2"
+postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4:
+ version "6.0.10"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d"
+ integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
+postcss-selector-parser@^6.0.7:
+ version "6.0.11"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc"
+ integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
postcss-sorting@^8.0.2:
version "8.0.2"
resolved "https://registry.yarnpkg.com/postcss-sorting/-/postcss-sorting-8.0.2.tgz#6393385ece272baf74bee9820fb1b58098e4eeca"
@@ -9211,7 +9370,25 @@ postcss@^7.0.36:
picocolors "^0.2.1"
source-map "^0.6.1"
-postcss@^8.2.14, postcss@^8.4.19, postcss@^8.4.21, postcss@^8.4.33, postcss@^8.4.38, postcss@^8.4.4:
+postcss@^8.2.14, postcss@^8.4.0:
+ version "8.4.16"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.16.tgz#33a1d675fac39941f5f445db0de4db2b6e01d43c"
+ integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==
+ dependencies:
+ nanoid "^3.3.4"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
+postcss@^8.4.21, postcss@^8.4.4:
+ version "8.4.21"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4"
+ integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==
+ dependencies:
+ nanoid "^3.3.4"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
+postcss@^8.4.28, postcss@^8.4.38:
version "8.4.38"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e"
integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==
@@ -9220,26 +9397,30 @@ postcss@^8.2.14, postcss@^8.4.19, postcss@^8.4.21, postcss@^8.4.33, postcss@^8.4
picocolors "^1.0.0"
source-map-js "^1.2.0"
+postcss@^8.4.33:
+ version "8.4.33"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742"
+ integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==
+ dependencies:
+ nanoid "^3.3.7"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
prelude-ls@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
-prelude-ls@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
- integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
-
-prettier@^1.18.2:
- version "1.19.1"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
- integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
-
"prettier@^1.18.2 || ^2.0.0":
version "2.5.1"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a"
integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==
+prettier@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a"
+ integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==
+
pretty-error@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6"
@@ -9420,6 +9601,11 @@ quick-lru@^4.0.1:
resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
+quick-lru@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
+ integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
+
randombytes@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
@@ -9562,6 +9748,15 @@ read-pkg-up@^7.0.1:
read-pkg "^5.2.0"
type-fest "^0.8.1"
+read-pkg-up@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-8.0.0.tgz#72f595b65e66110f43b052dd9af4de6b10534670"
+ integrity sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==
+ dependencies:
+ find-up "^5.0.0"
+ read-pkg "^6.0.0"
+ type-fest "^1.0.1"
+
read-pkg@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
@@ -9572,6 +9767,16 @@ read-pkg@^5.2.0:
parse-json "^5.0.0"
type-fest "^0.6.0"
+read-pkg@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-6.0.0.tgz#a67a7d6a1c2b0c3cd6aa2ea521f40c458a4a504c"
+ integrity sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==
+ dependencies:
+ "@types/normalize-package-data" "^2.4.0"
+ normalize-package-data "^3.0.2"
+ parse-json "^5.2.0"
+ type-fest "^1.0.1"
+
readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@~2.3.6:
version "2.3.7"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
@@ -9632,6 +9837,14 @@ redent@^3.0.0:
indent-string "^4.0.0"
strip-indent "^3.0.0"
+redent@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-4.0.0.tgz#0c0ba7caabb24257ab3bb7a4fd95dd1d5c5681f9"
+ integrity sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==
+ dependencies:
+ indent-string "^5.0.0"
+ strip-indent "^4.0.0"
+
regenerate-unicode-properties@^10.0.1:
version "10.0.1"
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56"
@@ -9687,12 +9900,7 @@ regexp.prototype.flags@^1.5.1:
define-properties "^1.2.0"
set-function-name "^2.0.0"
-regexpp@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
- integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
-
-regexpp@^3.1.0:
+regexpp@^3.1.0, regexpp@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
@@ -9809,11 +10017,11 @@ resolve.exports@^2.0.0:
integrity sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==
resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0:
- version "1.22.3"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.3.tgz#4b4055349ffb962600972da1fdc33c46a4eb3283"
- integrity sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==
+ version "1.22.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
+ integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
dependencies:
- is-core-module "^2.12.0"
+ is-core-module "^2.9.0"
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
@@ -9826,22 +10034,6 @@ resolve@^1.22.4:
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
-restore-cursor@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
- integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
- dependencies:
- onetime "^2.0.0"
- signal-exit "^3.0.2"
-
-restore-cursor@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
- integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
- dependencies:
- onetime "^5.1.0"
- signal-exit "^3.0.2"
-
retry@^0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
@@ -9864,13 +10056,6 @@ rewire@^6.0.0:
dependencies:
eslint "^7.32.0"
-rimraf@2.6.3, rimraf@~2.6.2:
- version "2.6.3"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
- integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
- dependencies:
- glob "^7.1.3"
-
rimraf@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
@@ -9885,6 +10070,13 @@ rimraf@^5.0.5:
dependencies:
glob "^10.3.7"
+rimraf@~2.6.2:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+ integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+ dependencies:
+ glob "^7.1.3"
+
rtlcss@4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-4.1.1.tgz#f20409fcc197e47d1925996372be196fee900c0c"
@@ -9900,12 +10092,12 @@ run-applescript@^7.0.0:
resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb"
integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==
-run-async@^2.2.0, run-async@^2.4.0:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
- integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
+run-parallel@^1.1.4:
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679"
+ integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==
-run-parallel@^1.1.4, run-parallel@^1.1.9:
+run-parallel@^1.1.9:
version "1.1.10"
resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef"
integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==
@@ -9917,13 +10109,6 @@ rust-result@^1.0.0:
dependencies:
individual "^2.0.0"
-rxjs@^6.4.0, rxjs@^6.5.3:
- version "6.5.5"
- resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec"
- integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==
- dependencies:
- tslib "^1.9.0"
-
rxjs@^7.8.0:
version "7.8.1"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543"
@@ -10081,17 +10266,50 @@ selfsigned@^2.4.1:
"@types/node-forge" "^1.3.0"
node-forge "^1"
-"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
+"semver@2 || 3 || 4 || 5", semver@^5.6.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-semver@^6.0.0, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1:
+semver@^6.0.0, semver@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+semver@^6.3.1:
version "6.3.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.2:
+semver@^7.2.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6:
+ version "7.3.7"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
+ integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
+ dependencies:
+ lru-cache "^6.0.0"
+
+semver@^7.5.3:
+ version "7.5.3"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e"
+ integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==
+ dependencies:
+ lru-cache "^6.0.0"
+
+semver@^7.5.4:
+ version "7.5.4"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
+ integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
+ dependencies:
+ lru-cache "^6.0.0"
+
+semver@^7.6.0:
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
+ integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
+ dependencies:
+ lru-cache "^6.0.0"
+
+semver@^7.6.2:
version "7.6.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13"
integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==
@@ -10191,13 +10409,6 @@ shallow-clone@^3.0.0:
dependencies:
kind-of "^6.0.2"
-shebang-command@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
- integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
- dependencies:
- shebang-regex "^1.0.0"
-
shebang-command@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
@@ -10205,11 +10416,6 @@ shebang-command@^2.0.0:
dependencies:
shebang-regex "^3.0.0"
-shebang-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
- integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
-
shebang-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
@@ -10234,7 +10440,7 @@ sigmund@^1.0.1:
resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=
-signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3:
+signal-exit@^3.0.0, signal-exit@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
@@ -10259,15 +10465,6 @@ slash@^3.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
-slice-ansi@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
- integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
- dependencies:
- ansi-styles "^3.2.0"
- astral-regex "^1.0.0"
- is-fullwidth-code-point "^2.0.0"
-
slice-ansi@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
@@ -10330,7 +10527,7 @@ source-map-js@^1.0.1:
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
-source-map-js@^1.2.0:
+source-map-js@^1.0.2, source-map-js@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
@@ -10525,23 +10722,6 @@ string-length@^4.0.1:
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"
-string-width@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
- integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
- dependencies:
- is-fullwidth-code-point "^2.0.0"
- strip-ansi "^4.0.0"
-
-string-width@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
- integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
- dependencies:
- emoji-regex "^7.0.1"
- is-fullwidth-code-point "^2.0.0"
- strip-ansi "^5.1.0"
-
string-width@^5.0.1, string-width@^5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
@@ -10606,20 +10786,6 @@ strip-ansi@^3.0.0:
dependencies:
ansi-regex "^2.0.0"
-strip-ansi@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
- integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
- dependencies:
- ansi-regex "^3.0.0"
-
-strip-ansi@^5.1.0, strip-ansi@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
- integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
- dependencies:
- ansi-regex "^4.1.0"
-
strip-ansi@^7.0.1:
version "7.1.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
@@ -10649,17 +10815,24 @@ strip-indent@^3.0.0:
dependencies:
min-indent "^1.0.0"
+strip-indent@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-4.0.0.tgz#b41379433dd06f5eae805e21d631e07ee670d853"
+ integrity sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==
+ dependencies:
+ min-indent "^1.0.1"
+
strip-json-comments@3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180"
integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==
-strip-json-comments@^2.0.0, strip-json-comments@^2.0.1:
+strip-json-comments@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
-strip-json-comments@^3.0.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
+strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
@@ -10672,7 +10845,7 @@ style-loader@^4.0.0:
style-search@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902"
- integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=
+ integrity sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==
stylehacks@^7.0.0:
version "7.0.0"
@@ -10682,6 +10855,11 @@ stylehacks@^7.0.0:
browserslist "^4.23.0"
postcss-selector-parser "^6.0.16"
+stylelint-config-html@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/stylelint-config-html/-/stylelint-config-html-1.1.0.tgz#999db19aea713b7ff6dde92ada76e4c1bd812b66"
+ integrity sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==
+
stylelint-config-prettier@9.0.5:
version "9.0.5"
resolved "https://registry.yarnpkg.com/stylelint-config-prettier/-/stylelint-config-prettier-9.0.5.tgz#9f78bbf31c7307ca2df2dd60f42c7014ee9da56e"
@@ -10694,39 +10872,39 @@ stylelint-config-recess-order@4.6.0:
dependencies:
stylelint-order "6.x"
-stylelint-config-recommended-scss@9.0.1:
- version "9.0.1"
- resolved "https://registry.yarnpkg.com/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-9.0.1.tgz#7ea233ea637ac2d8f0b50d8aad236257e44e2cbb"
- integrity sha512-qAmz/TdrqslwiMTuLM3QXeISUkfEDUXGMfRBCHm/xrkCJNnQefv+mzG2mWTsWkqcVk8HAyUkug10dwAcYp2fCQ==
+stylelint-config-recommended-scss@14.0.0:
+ version "14.0.0"
+ resolved "https://registry.yarnpkg.com/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.0.0.tgz#d3482c9817dada80b5ec01685b38fc8af8f7263f"
+ integrity sha512-HDvpoOAQ1RpF+sPbDOT2Q2/YrBDEJDnUymmVmZ7mMCeNiFSdhRdyGEimBkz06wsN+HaFwUh249gDR+I9JR7Onw==
dependencies:
- postcss-scss "^4.0.2"
- stylelint-config-recommended "^10.0.1"
- stylelint-scss "^4.4.0"
+ postcss-scss "^4.0.9"
+ stylelint-config-recommended "^14.0.0"
+ stylelint-scss "^6.0.0"
-stylelint-config-recommended@^10.0.1:
- version "10.0.1"
- resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-10.0.1.tgz#25a8828acf6cde87dac6db2950c8c4ed82a69ae1"
- integrity sha512-TQ4xQ48tW4QSlODcti7pgSRqBZcUaBzuh0jPpfiMhwJKBPkqzTIAU+IrSWL/7BgXlOM90DjB7YaNgFpx8QWhuA==
+stylelint-config-recommended@^13.0.0:
+ version "13.0.0"
+ resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz#c48a358cc46b629ea01f22db60b351f703e00597"
+ integrity sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==
-stylelint-config-recommended@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-6.0.0.tgz#fd2523a322836005ad9bf473d3e5534719c09f9d"
- integrity sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw==
+stylelint-config-recommended@^14.0.0:
+ version "14.0.0"
+ resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-14.0.0.tgz#b395c7014838d2aaca1755eebd914d0bb5274994"
+ integrity sha512-jSkx290CglS8StmrLp2TxAppIajzIBZKYm3IxT89Kg6fGlxbPiTiyH9PS5YUuVAFwaJLl1ikiXX0QWjI0jmgZQ==
-stylelint-config-sass-guidelines@10.0.0:
- version "10.0.0"
- resolved "https://registry.yarnpkg.com/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-10.0.0.tgz#ace99689eb6769534c9b40d62e2a8562b1ddc9f2"
- integrity sha512-+Rr2Dd4b72CWA4qoj1Kk+y449nP/WJsrD0nzQAWkmPPIuyVcy2GMIcfNr0Z8JJOLjRvtlkKxa49FCNXMePBikQ==
+stylelint-config-sass-guidelines@11.1.0:
+ version "11.1.0"
+ resolved "https://registry.yarnpkg.com/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-11.1.0.tgz#0106f3ec4991a598823b55841bf45fce63268c8c"
+ integrity sha512-mVE3UmN8MlshK4Gb3eYk6f8tw9DkQ9yjMF4W9krlmpaNZpSXOdh13AL0sU7l/9l4Pnpt4KMobNNIRI0tJl56Cw==
dependencies:
- postcss-scss "^4.0.6"
- stylelint-scss "^4.4.0"
+ postcss-scss "^4.0.9"
+ stylelint-scss "^6.2.1"
-stylelint-config-standard@24.0.0:
- version "24.0.0"
- resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-24.0.0.tgz#6823f207ab997ae0b641f9a636d007cc44d77541"
- integrity sha512-+RtU7fbNT+VlNbdXJvnjc3USNPZRiRVp/d2DxOF/vBDDTi0kH5RX2Ny6errdtZJH3boO+bmqIYEllEmok4jiuw==
+stylelint-config-standard@34.0.0:
+ version "34.0.0"
+ resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz#309f3c48118a02aae262230c174282e40e766cf4"
+ integrity sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==
dependencies:
- stylelint-config-recommended "^6.0.0"
+ stylelint-config-recommended "^13.0.0"
stylelint-csstree-validator@3.0.0:
version "3.0.0"
@@ -10754,60 +10932,73 @@ stylelint-scss@5.3.2:
postcss-selector-parser "^6.0.13"
postcss-value-parser "^4.2.0"
-stylelint-scss@^4.4.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-4.6.0.tgz#f7602d6d562bb256802e38e3fd5e49c46d2e31b6"
- integrity sha512-M+E0BQim6G4XEkaceEhfVjP/41C9Klg5/tTPTCQVlgw/jm2tvB+OXJGaU0TDP5rnTCB62aX6w+rT+gqJW/uwjA==
+stylelint-scss@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-6.0.0.tgz#bf6be6798d71c898484b7e97007d5ed69a89308d"
+ integrity sha512-N1xV/Ef5PNRQQt9E45unzGvBUN1KZxCI8B4FgN/pMfmyRYbZGVN4y9qWlvOMdScU17c8VVCnjIHTVn38Bb6qSA==
+ dependencies:
+ known-css-properties "^0.29.0"
+ postcss-media-query-parser "^0.2.3"
+ postcss-resolve-nested-selector "^0.1.1"
+ postcss-selector-parser "^6.0.13"
+ postcss-value-parser "^4.2.0"
+
+stylelint-scss@^6.2.1:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-6.2.1.tgz#7675f3f5034a3b1d7d064d480e0d834ef9353244"
+ integrity sha512-ZoGLbVb1keZYRVGQlhB8G6sZOoNqw61whzzzGFWp05N12ErqLFfBv3JPrXiMLZaW98sBS7K/vUQhRnvUj4vwdw==
dependencies:
- dlv "^1.1.3"
+ known-css-properties "^0.29.0"
postcss-media-query-parser "^0.2.3"
postcss-resolve-nested-selector "^0.1.1"
- postcss-selector-parser "^6.0.11"
+ postcss-selector-parser "^6.0.15"
postcss-value-parser "^4.2.0"
-stylelint@14.16.1:
- version "14.16.1"
- resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.16.1.tgz#b911063530619a1bbe44c2b875fd8181ebdc742d"
- integrity sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==
+stylelint@^15.11.0:
+ version "15.11.0"
+ resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.11.0.tgz#3ff8466f5f5c47362bc7c8c9d382741c58bc3292"
+ integrity sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==
dependencies:
- "@csstools/selector-specificity" "^2.0.2"
+ "@csstools/css-parser-algorithms" "^2.3.1"
+ "@csstools/css-tokenizer" "^2.2.0"
+ "@csstools/media-query-list-parser" "^2.1.4"
+ "@csstools/selector-specificity" "^3.0.0"
balanced-match "^2.0.0"
colord "^2.9.3"
- cosmiconfig "^7.1.0"
- css-functions-list "^3.1.0"
+ cosmiconfig "^8.2.0"
+ css-functions-list "^3.2.1"
+ css-tree "^2.3.1"
debug "^4.3.4"
- fast-glob "^3.2.12"
+ fast-glob "^3.3.1"
fastest-levenshtein "^1.0.16"
- file-entry-cache "^6.0.1"
+ file-entry-cache "^7.0.0"
global-modules "^2.0.0"
globby "^11.1.0"
globjoin "^0.1.4"
- html-tags "^3.2.0"
- ignore "^5.2.1"
+ html-tags "^3.3.1"
+ ignore "^5.2.4"
import-lazy "^4.0.0"
imurmurhash "^0.1.4"
is-plain-object "^5.0.0"
- known-css-properties "^0.26.0"
+ known-css-properties "^0.29.0"
mathml-tag-names "^2.1.3"
- meow "^9.0.0"
+ meow "^10.1.5"
micromatch "^4.0.5"
normalize-path "^3.0.0"
picocolors "^1.0.0"
- postcss "^8.4.19"
- postcss-media-query-parser "^0.2.3"
+ postcss "^8.4.28"
postcss-resolve-nested-selector "^0.1.1"
postcss-safe-parser "^6.0.0"
- postcss-selector-parser "^6.0.11"
+ postcss-selector-parser "^6.0.13"
postcss-value-parser "^4.2.0"
resolve-from "^5.0.0"
string-width "^4.2.3"
strip-ansi "^6.0.1"
style-search "^0.1.0"
- supports-hyperlinks "^2.3.0"
+ supports-hyperlinks "^3.0.0"
svg-tags "^1.0.0"
table "^6.8.1"
- v8-compile-cache "^2.3.0"
- write-file-atomic "^4.0.2"
+ write-file-atomic "^5.0.1"
supports-color@^2.0.0:
version "2.0.0"
@@ -10835,10 +11026,10 @@ supports-color@^8.0.0, supports-color@^8.1.1:
dependencies:
has-flag "^4.0.0"
-supports-hyperlinks@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624"
- integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==
+supports-hyperlinks@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz#c711352a5c89070779b4dad54c05a2f14b15c94b"
+ integrity sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==
dependencies:
has-flag "^4.0.0"
supports-color "^7.0.0"
@@ -10871,20 +11062,21 @@ symbol-tree@^3.2.4:
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
-table@^5.2.3:
- version "5.4.6"
- resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
- integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
+table@^6.0.9:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca"
+ integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==
dependencies:
- ajv "^6.10.2"
- lodash "^4.17.14"
- slice-ansi "^2.1.0"
- string-width "^3.0.0"
+ ajv "^8.0.1"
+ lodash.truncate "^4.4.2"
+ slice-ansi "^4.0.0"
+ string-width "^4.2.3"
+ strip-ansi "^6.0.1"
-table@^6.0.9, table@^6.8.1:
- version "6.8.1"
- resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf"
- integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==
+table@^6.8.1:
+ version "6.8.2"
+ resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58"
+ integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==
dependencies:
ajv "^8.0.1"
lodash.truncate "^4.4.2"
@@ -10951,11 +11143,6 @@ text-table@^0.2.0:
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
-through@^2.3.6:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
- integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
-
thunky@^1.0.2:
version "1.1.0"
resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
@@ -10988,13 +11175,6 @@ tippy.js@4.2.1:
dependencies:
popper.js "^1.14.7"
-tmp@^0.0.33:
- version "0.0.33"
- resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
- integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
- dependencies:
- os-tmpdir "~1.0.2"
-
tmpl@1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
@@ -11064,6 +11244,11 @@ trim-newlines@^3.0.0:
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144"
integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==
+trim-newlines@^4.0.2:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-4.1.1.tgz#28c88deb50ed10c7ba6dc2474421904a00139125"
+ integrity sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==
+
"true-case-path@^2.2.1":
version "2.2.1"
resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf"
@@ -11076,6 +11261,11 @@ truncate-utf8-bytes@^1.0.2:
dependencies:
utf8-byte-length "^1.0.1"
+ts-api-utils@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1"
+ integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==
+
tsconfig-paths@^3.15.0:
version "3.15.0"
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4"
@@ -11096,7 +11286,7 @@ tsconfig@^7.0.0:
strip-bom "^3.0.0"
strip-json-comments "^2.0.0"
-tslib@^1.8.1, tslib@^1.9.0:
+tslib@^1.9.0:
version "1.13.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
@@ -11106,13 +11296,6 @@ tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
-tsutils@^3.17.1:
- version "3.17.1"
- resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759"
- integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==
- dependencies:
- tslib "^1.8.1"
-
type-check@^0.4.0, type-check@~0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
@@ -11120,13 +11303,6 @@ type-check@^0.4.0, type-check@~0.4.0:
dependencies:
prelude-ls "^1.2.1"
-type-check@~0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
- integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
- dependencies:
- prelude-ls "~1.1.2"
-
type-detect@4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
@@ -11157,6 +11333,11 @@ type-fest@^0.8.1:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+type-fest@^1.0.1, type-fest@^1.2.1, type-fest@^1.2.2:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1"
+ integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==
+
type-is@~1.6.18:
version "1.6.18"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
@@ -11402,7 +11583,7 @@ uuid@^8.3.2:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
-v8-compile-cache@^2.0.3, v8-compile-cache@^2.3.0:
+v8-compile-cache@^2.0.3:
version "2.3.0"
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
@@ -11470,17 +11651,18 @@ vue-demi@*:
resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.9.0.tgz#b30da61450079d60a132d7aaf9e86d1949e8445e"
integrity sha512-f8vVUpC726YXv99fF/3zHaw5CUYbP5H/DVWBN+pncXM8P2Uz88kkffwj9yD7MukuVzPICDHNrgS3VC2ursaP7g==
-vue-eslint-parser@^7.3.0:
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.3.0.tgz#894085839d99d81296fa081d19643733f23d7559"
- integrity sha512-n5PJKZbyspD0+8LnaZgpEvNCrjQx1DyDHw8JdWwoxhhC+yRip4TAvSDpXGf9SWX6b0umeB5aR61gwUo6NVvFxw==
+vue-eslint-parser@^9.4.2:
+ version "9.4.2"
+ resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz#02ffcce82042b082292f2d1672514615f0d95b6d"
+ integrity sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==
dependencies:
- debug "^4.1.1"
- eslint-scope "^5.0.0"
- eslint-visitor-keys "^1.1.0"
- espree "^6.2.1"
- esquery "^1.0.1"
- lodash "^4.17.15"
+ debug "^4.3.4"
+ eslint-scope "^7.1.1"
+ eslint-visitor-keys "^3.3.0"
+ espree "^9.3.1"
+ esquery "^1.4.0"
+ lodash "^4.17.21"
+ semver "^7.3.6"
vue-focus-lock@^1.4.1:
version "1.4.1"
@@ -11863,7 +12045,7 @@ which-typed-array@^1.1.13:
gopd "^1.0.1"
has-tostringtag "^1.0.0"
-which@^1.2.9, which@^1.3.1:
+which@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
@@ -11894,10 +12076,15 @@ wildcard@^2.0.0:
resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec"
integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==
-word-wrap@^1.2.3, word-wrap@~1.2.3:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f"
- integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==
+word-wrap@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+ integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+word-wrap@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
+ integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
version "7.0.0"
@@ -11930,17 +12117,23 @@ write-file-atomic@^4.0.2:
imurmurhash "^0.1.4"
signal-exit "^3.0.7"
-write@1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
- integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
+write-file-atomic@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7"
+ integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==
dependencies:
- mkdirp "^0.5.1"
+ imurmurhash "^0.1.4"
+ signal-exit "^4.0.1"
+
+ws@^8.16.0:
+ version "8.16.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4"
+ integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==
-ws@^8.16.0, ws@^8.8.0:
- version "8.17.1"
- resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b"
- integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==
+ws@^8.8.0:
+ version "8.8.1"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0"
+ integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==
xhr-mock@^2.5.1:
version "2.5.1"
@@ -12000,12 +12193,7 @@ yallist@^4.0.0:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
-yaml@^1.10.0:
- version "1.10.2"
- resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
- integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
-
-yargs-parser@^20.2.3:
+yargs-parser@^20.2.3, yargs-parser@^20.2.9:
version "20.2.9"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
From b6e4f3786e73d45c2ed7f7511fed8f099ce962a9 Mon Sep 17 00:00:00 2001
From: Richard Tibbles
Date: Sat, 16 Mar 2024 18:09:17 -0700
Subject: [PATCH 03/12] Fix bug with ignore pattern that prevented selective
linting.
---
packages/kolibri-tools/lib/cli.js | 16 ++--------------
1 file changed, 2 insertions(+), 14 deletions(-)
diff --git a/packages/kolibri-tools/lib/cli.js b/packages/kolibri-tools/lib/cli.js
index befd7a332c7..51907cce497 100755
--- a/packages/kolibri-tools/lib/cli.js
+++ b/packages/kolibri-tools/lib/cli.js
@@ -345,21 +345,9 @@ program
.option('-w, --write', 'Write autofixes to file', false)
.option('-e, --encoding ', 'Text encoding of file', 'utf-8')
.option('-m, --monitor', 'Monitor files and check on change', false)
- .option(
- '-i, --ignore ',
- 'Ignore these comma separated patterns',
- list,
- ignoreDefaults
- )
+ .option('-i, --ignore ', 'Ignore these comma separated patterns', list, ignoreDefaults)
.option('-p, --pattern ', 'Lint only files that match this comma separated pattern', null)
- .action(function(args, options) {
- const files = [];
- if (!(args instanceof Command)) {
- files.push(...args);
- } else {
- options = args;
- }
-
+ .action(function (files, options) {
let patternCheck;
if (!files.length && !options.pattern) {
cliLogging.error('Must specify files or glob patterns to lint!');
From b1db72c88d0bea4078b5800ccbed7b8c2aa31227 Mon Sep 17 00:00:00 2001
From: Richard Tibbles
Date: Wed, 7 Sep 2022 16:38:42 -0700
Subject: [PATCH 04/12] Update parser resolution in tests.
---
.../tests/lib/rules/vue-no-undefined-string-uses.spec.js | 2 +-
.../tests/lib/rules/vue-no-unused-methods.spec.js | 2 +-
.../tests/lib/rules/vue-no-unused-properties.spec.js | 2 +-
.../tests/lib/rules/vue-no-unused-translations.spec.js | 2 +-
.../tests/lib/rules/vue-no-unused-vuex-methods.spec.js | 2 +-
.../tests/lib/rules/vue-no-unused-vuex-properties.spec.js | 2 +-
.../tests/lib/rules/vue-watch-no-string.spec.js | 2 +-
7 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-undefined-string-uses.spec.js b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-undefined-string-uses.spec.js
index 8dcff408848..cbd03e9a6ea 100644
--- a/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-undefined-string-uses.spec.js
+++ b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-undefined-string-uses.spec.js
@@ -4,7 +4,7 @@ const RuleTester = require('eslint').RuleTester;
const rule = require('../../../lib/rules/vue-no-undefined-string-uses');
const tester = new RuleTester({
- parser: 'vue-eslint-parser',
+ parser: require.resolve('vue-eslint-parser'),
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
diff --git a/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-unused-methods.spec.js b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-unused-methods.spec.js
index d5b8a30b8a3..21a3e073d13 100644
--- a/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-unused-methods.spec.js
+++ b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-unused-methods.spec.js
@@ -4,7 +4,7 @@ const RuleTester = require('eslint').RuleTester;
const rule = require('../../../lib/rules/vue-no-unused-methods');
const tester = new RuleTester({
- parser: 'vue-eslint-parser',
+ parser: require.resolve('vue-eslint-parser'),
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
diff --git a/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-unused-properties.spec.js b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-unused-properties.spec.js
index 9feda4680f7..56da0417e47 100644
--- a/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-unused-properties.spec.js
+++ b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-unused-properties.spec.js
@@ -4,7 +4,7 @@ const RuleTester = require('eslint').RuleTester;
const rule = require('../../../lib/rules/vue-no-unused-properties');
const tester = new RuleTester({
- parser: 'vue-eslint-parser',
+ parser: require.resolve('vue-eslint-parser'),
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
diff --git a/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-unused-translations.spec.js b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-unused-translations.spec.js
index 8cac06e1e9c..2fe7610c1e1 100644
--- a/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-unused-translations.spec.js
+++ b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-unused-translations.spec.js
@@ -4,7 +4,7 @@ const RuleTester = require('eslint').RuleTester;
const rule = require('../../../lib/rules/vue-no-unused-translations');
const tester = new RuleTester({
- parser: 'vue-eslint-parser',
+ parser: require.resolve('vue-eslint-parser'),
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
diff --git a/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-unused-vuex-methods.spec.js b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-unused-vuex-methods.spec.js
index aae177fd9fa..33cdda92e14 100644
--- a/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-unused-vuex-methods.spec.js
+++ b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-unused-vuex-methods.spec.js
@@ -4,7 +4,7 @@ const RuleTester = require('eslint').RuleTester;
const rule = require('../../../lib/rules/vue-no-unused-vuex-methods');
const tester = new RuleTester({
- parser: 'vue-eslint-parser',
+ parser: require.resolve('vue-eslint-parser'),
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
diff --git a/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-unused-vuex-properties.spec.js b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-unused-vuex-properties.spec.js
index 15ebb06dcde..d155923619e 100644
--- a/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-unused-vuex-properties.spec.js
+++ b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-no-unused-vuex-properties.spec.js
@@ -4,7 +4,7 @@ const RuleTester = require('eslint').RuleTester;
const rule = require('../../../lib/rules/vue-no-unused-vuex-properties');
const tester = new RuleTester({
- parser: 'vue-eslint-parser',
+ parser: require.resolve('vue-eslint-parser'),
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
diff --git a/packages/eslint-plugin-kolibri/tests/lib/rules/vue-watch-no-string.spec.js b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-watch-no-string.spec.js
index b84cb49cfc5..88df5e5f0cd 100644
--- a/packages/eslint-plugin-kolibri/tests/lib/rules/vue-watch-no-string.spec.js
+++ b/packages/eslint-plugin-kolibri/tests/lib/rules/vue-watch-no-string.spec.js
@@ -4,7 +4,7 @@ const RuleTester = require('eslint').RuleTester;
const rule = require('../../../lib/rules/vue-watch-no-string');
const tester = new RuleTester({
- parser: 'vue-eslint-parser',
+ parser: require.resolve('vue-eslint-parser'),
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
From f3282181c812bf89a9ee852023467c397e095fdf Mon Sep 17 00:00:00 2001
From: Richard Tibbles
Date: Fri, 29 Mar 2024 09:10:54 -0700
Subject: [PATCH 05/12] Move markdown-it to package it is used in. Mark as
nohoist to prevent entities dependency collisions.
---
kolibri/core/package.json | 1 -
kolibri/plugins/coach/package.json | 4 ++++
packages/kolibri-core-for-export/package.json | 1 -
3 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/kolibri/core/package.json b/kolibri/core/package.json
index 08bbe320e8a..f5fb7ff977f 100644
--- a/kolibri/core/package.json
+++ b/kolibri/core/package.json
@@ -25,7 +25,6 @@
"lockr": "0.8.5",
"lodash": "^4.17.21",
"loglevel": "^1.9.1",
- "markdown-it": "14.1.0",
"path-to-regexp": "1.8.0",
"screenfull": "^5.2.0",
"tinycolor2": "^1.6.0",
diff --git a/kolibri/plugins/coach/package.json b/kolibri/plugins/coach/package.json
index 8f92c01e070..6cbf2ca6851 100644
--- a/kolibri/plugins/coach/package.json
+++ b/kolibri/plugins/coach/package.json
@@ -3,7 +3,11 @@
"description": "Coach Plugin for Kolibri",
"private": true,
"version": "0.0.1",
+ "workspaces": {
+ "nohoist": ["markdown-it", "markdown-it/**"]
+ },
"dependencies": {
+ "markdown-it": "14.1.0",
"truncate-utf8-bytes": "^1.0.2"
}
}
diff --git a/packages/kolibri-core-for-export/package.json b/packages/kolibri-core-for-export/package.json
index 439b0f41bce..eae3f506fdc 100644
--- a/packages/kolibri-core-for-export/package.json
+++ b/packages/kolibri-core-for-export/package.json
@@ -28,7 +28,6 @@
"lockr": "0.8.5",
"lodash": "^4.17.21",
"loglevel": "^1.9.1",
- "markdown-it": "14.1.0",
"path-to-regexp": "1.8.0",
"screenfull": "^5.2.0",
"tinycolor2": "^1.6.0",
From df9bf9390c872435a87a3ebb78c8eb7a14c9255b Mon Sep 17 00:00:00 2001
From: Richard Tibbles
Date: Fri, 29 Sep 2023 14:14:24 -0700
Subject: [PATCH 06/12] Move writeSourceToFile to its own file to avoid
importing ESM module prettier in jest test.
---
packages/kolibri-tools/lib/i18n/SyncContext.js | 3 ++-
packages/kolibri-tools/lib/i18n/intl_code_gen.js | 2 +-
packages/kolibri-tools/lib/i18n/utils.js | 12 ------------
.../kolibri-tools/lib/i18n/writeSourceToFile.js | 14 ++++++++++++++
4 files changed, 17 insertions(+), 14 deletions(-)
create mode 100644 packages/kolibri-tools/lib/i18n/writeSourceToFile.js
diff --git a/packages/kolibri-tools/lib/i18n/SyncContext.js b/packages/kolibri-tools/lib/i18n/SyncContext.js
index 87014e84e9d..262ae64d28b 100644
--- a/packages/kolibri-tools/lib/i18n/SyncContext.js
+++ b/packages/kolibri-tools/lib/i18n/SyncContext.js
@@ -15,7 +15,8 @@ const {
extractContext,
printAST,
} = require('./astUtils');
-const { forEachPathInfo, parseCSVDefinitions, writeSourceToFile } = require('./utils');
+const { forEachPathInfo, parseCSVDefinitions } = require('./utils');
+const writeSourceToFile = require('./writeSourceToFile');
// Glob path patterns
// All JS files
diff --git a/packages/kolibri-tools/lib/i18n/intl_code_gen.js b/packages/kolibri-tools/lib/i18n/intl_code_gen.js
index f260b463952..f51424a509c 100644
--- a/packages/kolibri-tools/lib/i18n/intl_code_gen.js
+++ b/packages/kolibri-tools/lib/i18n/intl_code_gen.js
@@ -1,6 +1,6 @@
const path = require('path');
const logger = require('../logging');
-const { writeSourceToFile } = require('./utils');
+const writeSourceToFile = require('./writeSourceToFile');
const logging = logger.getLogger('Kolibri Intl Data');
diff --git a/packages/kolibri-tools/lib/i18n/utils.js b/packages/kolibri-tools/lib/i18n/utils.js
index 912aea9c7e4..c20f9e99732 100644
--- a/packages/kolibri-tools/lib/i18n/utils.js
+++ b/packages/kolibri-tools/lib/i18n/utils.js
@@ -2,7 +2,6 @@ const fs = require('fs');
const path = require('path');
const intersection = require('lodash/intersection');
const { parse } = require('csv-parse/sync');
-const { lint } = require('kolibri-tools/lib/lint');
const { addAliases, resetAliases } = require('kolibri-tools/lib/alias_import_resolver');
const glob = require('../glob');
const logging = require('../logging');
@@ -27,16 +26,6 @@ function checkForDuplicateIds(obj1, obj2) {
return Boolean(actualDuplicates.length);
}
-function writeSourceToFile(filePath, fileSource) {
- fs.writeFileSync(filePath, fileSource, { encoding: 'utf-8' });
-
- lint({
- file: filePath,
- write: true,
- silent: true,
- });
-}
-
// Compile all of the defined strings & context from the CSVs that have been downloaded
// from Crowdin.
function parseCSVDefinitions(dir, intlLangCode = null) {
@@ -91,7 +80,6 @@ function forEachPathInfo(pathInfo, callback) {
module.exports = {
parseCSVDefinitions,
toLocale,
- writeSourceToFile,
forEachPathInfo,
checkForDuplicateIds,
};
diff --git a/packages/kolibri-tools/lib/i18n/writeSourceToFile.js b/packages/kolibri-tools/lib/i18n/writeSourceToFile.js
new file mode 100644
index 00000000000..901d5d7156a
--- /dev/null
+++ b/packages/kolibri-tools/lib/i18n/writeSourceToFile.js
@@ -0,0 +1,14 @@
+const fs = require('fs');
+const { lint } = require('kolibri-tools/lib/lint');
+
+function writeSourceToFile(filePath, fileSource) {
+ fs.writeFileSync(filePath, fileSource, { encoding: 'utf-8' });
+
+ lint({
+ file: filePath,
+ write: true,
+ silent: true,
+ });
+}
+
+module.exports = writeSourceToFile;
From ecfaa347d3317bad8253dff66c37d2cdf82dad87 Mon Sep 17 00:00:00 2001
From: Richard Tibbles
Date: Wed, 24 Apr 2024 12:32:29 -0700
Subject: [PATCH 07/12] Don't nest li in a p tag.
---
.../assets/src/views/ProfilePage/index.vue | 20 +++++++++----------
1 file changed, 9 insertions(+), 11 deletions(-)
diff --git a/kolibri/plugins/user_profile/assets/src/views/ProfilePage/index.vue b/kolibri/plugins/user_profile/assets/src/views/ProfilePage/index.vue
index 357b56c2ba8..815bf19e596 100644
--- a/kolibri/plugins/user_profile/assets/src/views/ProfilePage/index.vue
+++ b/kolibri/plugins/user_profile/assets/src/views/ProfilePage/index.vue
@@ -72,17 +72,15 @@
{{ permissionTypeText }}
-
- {{ $tr('youCan') }}
-
- -
- {{ $tr('manageDevicePermissions') }}
-
- -
- {{ getPermissionString(key) }}
-
-
-
+ {{ $tr('youCan') }}
+
+ -
+ {{ $tr('manageDevicePermissions') }}
+
+ -
+ {{ getPermissionString(key) }}
+
+
From 4b3b6b2e08229d37c47d1cd628bff36e24a18509 Mon Sep 17 00:00:00 2001
From: Richard Tibbles
Date: Wed, 24 Apr 2024 16:05:07 -0700
Subject: [PATCH 08/12] Properly mock validator.
---
.../views/ExamReport/__tests__/TriesOverview.spec.js | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/kolibri/core/assets/src/views/ExamReport/__tests__/TriesOverview.spec.js b/kolibri/core/assets/src/views/ExamReport/__tests__/TriesOverview.spec.js
index 56133ab690f..295eb5531fe 100644
--- a/kolibri/core/assets/src/views/ExamReport/__tests__/TriesOverview.spec.js
+++ b/kolibri/core/assets/src/views/ExamReport/__tests__/TriesOverview.spec.js
@@ -1,11 +1,15 @@
import { render, screen } from '@testing-library/vue';
import '@testing-library/jest-dom';
import TriesOverview from '../TriesOverview.vue';
-import * as tryValidatorModule from '../utils';
// Mock the tryValidator namespace as the same is used in the component
-// eslint-disable-next-line import/namespace
-tryValidatorModule.tryValidator = jest.fn(() => true);
+jest.mock('../utils', () => {
+ const original = jest.requireActual('../utils');
+ return {
+ ...original,
+ tryValidator: jest.fn(() => true),
+ };
+});
// Helper function to render the component with some default props
const renderComponent = props => {
From d051caf2e7dd83ab6eb8b559650398d4fc3a9166 Mon Sep 17 00:00:00 2001
From: Richard Tibbles
Date: Wed, 24 Apr 2024 16:13:54 -0700
Subject: [PATCH 09/12] Fix kebab-case for css class names.
---
.../learn/assets/src/views/QuizRenderer/index.vue | 4 ++--
.../assets/src/views/OnboardingStepBase.vue | 12 ++++++------
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/kolibri/plugins/learn/assets/src/views/QuizRenderer/index.vue b/kolibri/plugins/learn/assets/src/views/QuizRenderer/index.vue
index 78139c27030..8a53ff0b5d9 100644
--- a/kolibri/plugins/learn/assets/src/views/QuizRenderer/index.vue
+++ b/kolibri/plugins/learn/assets/src/views/QuizRenderer/index.vue
@@ -115,7 +115,7 @@
{{ answeredText }}
@@ -532,7 +532,7 @@
margin-top: 8px;
}
- .bottom-block.windowIsSmall {
+ .bottom-block.window-is-small {
text-align: center;
}
diff --git a/kolibri/plugins/setup_wizard/assets/src/views/OnboardingStepBase.vue b/kolibri/plugins/setup_wizard/assets/src/views/OnboardingStepBase.vue
index 3363749ad13..34521809ad3 100644
--- a/kolibri/plugins/setup_wizard/assets/src/views/OnboardingStepBase.vue
+++ b/kolibri/plugins/setup_wizard/assets/src/views/OnboardingStepBase.vue
@@ -2,7 +2,7 @@
@@ -283,7 +283,7 @@
padding-bottom: 5em;
margin: 5em auto 0;
- &.windowIsSmall {
+ &.window-is-small {
width: 100vw;
height: 100vh;
margin: 0;
@@ -305,7 +305,7 @@
font-size: 0.875em;
}
- .windowIsSmall .logo-lang-container {
+ .window-is-small .logo-lang-container {
padding: 16px;
}
@@ -340,7 +340,7 @@
font-weight: bold;
}
- .windowIsSmall .languages-button {
+ .window-is-small .languages-button {
top: 16px;
right: 16px;
}
@@ -351,7 +351,7 @@
padding: 16px 32px 32px;
}
- .windowIsSmall .content {
+ .window-is-small .content {
padding: 32px;
}
@@ -371,7 +371,7 @@
}
}
- .windowIsSmall .footer-section {
+ .window-is-small .footer-section {
width: 100%;
max-width: 100%;
}
From 42efde27bac137734f05057278c4827168d119f2 Mon Sep 17 00:00:00 2001
From: Richard Tibbles
Date: Thu, 20 Jun 2024 13:36:09 -0700
Subject: [PATCH 10/12] Apply automatic formatting fixes.
---
kolibri/core/assets/src/api-resource.js | 32 +-
.../assets/src/api-resources/contentNode.js | 2 +-
.../composables/useMinimumKolibriVersion.js | 2 +-
.../src/composables/useUserSyncStatus.js | 2 +-
.../core-app/__tests__/pluginMediator.spec.js | 288 ++---
.../core/assets/src/core-app/baseClient.js | 6 +-
kolibri/core/assets/src/core-app/client.js | 12 +-
kolibri/core/assets/src/core-app/index.js | 2 +-
.../assets/src/core-app/pluginMediator.js | 10 +-
kolibri/core/assets/src/exams/utils.js | 10 +-
kolibri/core/assets/src/heartbeat.js | 8 +-
kolibri/core/assets/src/kolibri_app.js | 4 +-
kolibri/core/assets/src/logging.js | 6 +-
.../__test__/notificationStrings.spec.js | 2 +-
.../assets/src/mixins/commonCoreStrings.js | 4 +-
kolibri/core/assets/src/router.js | 2 +-
.../assets/src/state/modules/core/actions.js | 6 +-
.../utils/__test__/generateNavRoutes.spec.js | 12 +-
kolibri/core/assets/src/utils/i18n.js | 6 +-
.../core/assets/src/utils/intl-locale-data.js | 134 +--
.../assets/src/utils/licenseTranslations.js | 4 +-
.../assets/src/utils/setupAndLoadFonts.js | 4 +-
kolibri/core/assets/src/utils/shuffled.js | 2 +-
.../core/assets/src/utils/syncTaskUtils.js | 4 +-
.../assets/src/utils/vue-intl-locale-data.js | 2 +-
kolibri/core/assets/src/views/AppBar.vue | 7 +-
.../core/assets/src/views/AttemptLogItem.vue | 15 +-
.../core/assets/src/views/AttemptLogList.vue | 44 +-
kolibri/core/assets/src/views/Backdrop.vue | 5 +-
kolibri/core/assets/src/views/BaseToolbar.vue | 6 +-
.../assets/src/views/BottomNavigationBar.vue | 27 +-
.../assets/src/views/CoachContentLabel.vue | 5 +-
kolibri/core/assets/src/views/ContentIcon.vue | 26 +-
.../ContentRenderer/ContentRendererError.vue | 16 +-
.../ContentRendererLoading.vue | 4 +-
.../views/ContentRenderer/DownloadButton.vue | 2 +-
.../__tests__/DownloadButton.spec.js | 2 +-
.../assets/src/views/ContentRenderer/index.js | 6 +-
.../assets/src/views/ContentRenderer/utils.js | 2 +-
kolibri/core/assets/src/views/CoreBanner.vue | 5 +-
.../assets/src/views/CoreInfoIcon/index.vue | 7 +-
.../core/assets/src/views/CoreLogo/index.vue | 7 +-
.../src/views/CoreMenu/CoreMenuOption.vue | 35 +-
.../CoreMenu/__tests__/CoreMenuOption.spec.js | 10 +-
.../assets/src/views/CorePage/AppBarPage.vue | 21 +-
.../src/views/CorePage/ImmersivePage.vue | 23 +-
.../assets/src/views/CoreSnackbar/index.vue | 16 +-
kolibri/core/assets/src/views/CoreTable.vue | 2 +-
kolibri/core/assets/src/views/ElapsedTime.vue | 4 +-
.../src/views/ExamReport/AttemptTextDiff.vue | 5 +-
.../views/ExamReport/CurrentTryOverview.vue | 52 +-
.../src/views/ExamReport/TriesOverview.vue | 11 +-
.../assets/src/views/ExamReport/index.vue | 64 +-
.../views/InteractionList/InteractionItem.vue | 8 +-
.../src/views/InteractionList/index.vue | 2 -
.../src/views/KolibriLoadingSnippet.vue | 9 +-
.../core/assets/src/views/MultiPaneLayout.vue | 5 +-
.../core/assets/src/views/Navbar/index.vue | 4 +-
.../assets/src/views/NotificationsRoot.vue | 6 +-
.../src/views/PaginatedListContainer.vue | 7 +-
kolibri/core/assets/src/views/ProgressBar.vue | 15 +-
kolibri/core/assets/src/views/SideNav.vue | 54 +-
.../core/assets/src/views/SlotTruncator.vue | 13 +-
.../assets/src/views/SyncStatusDisplay.vue | 7 +-
.../core/assets/src/views/TimeDuration.vue | 4 +-
kolibri/core/assets/src/views/TotalPoints.vue | 11 +-
.../views/UserTable/__tests__/index.spec.js | 29 +-
.../core/assets/src/views/UserTable/index.vue | 63 +-
.../LanguageSwitcherModal.vue | 3 -
.../language-switcher/SelectedLanguage.vue | 5 +-
.../assets/src/views/sortable/DragHandle.vue | 6 +-
.../views/sortable/DragSortWidget/index.vue | 8 +-
.../views/sync/ConfirmationRegisterModal.vue | 1 -
.../sync/FacilityAdminCredentialsForm.vue | 10 +-
.../__tests__/index.spec.js | 6 +-
.../sync/FacilityNameAndSyncStatus/index.vue | 2 +-
.../views/sync/FacilityTaskPanelDetails.vue | 41 +-
.../src/views/sync/RegisterFacilityModal.vue | 5 +-
.../DeviceConnectingModal.vue | 6 +-
.../SelectDeviceForm.vue | 19 +-
.../__test__/AddDeviceForm.spec.js | 4 +-
.../__test__/SelectDeviceForm.spec.js | 5 +-
.../useConnectionChecker.js | 4 +-
.../sync/SelectDeviceModalGroup/useDevices.js | 4 +-
.../ConfirmationRegisterModal.spec.js | 4 +-
.../userAccounts/BirthYearDisplayText.vue | 5 +-
.../views/userAccounts/BirthYearSelect.vue | 1 -
.../views/userAccounts/GenderDisplayText.vue | 5 +-
.../userAccounts/PrivacyLinkAndModal.vue | 1 -
kolibri/core/assets/test/api-resource.spec.js | 516 ++++----
.../core/assets/test/download-button.spec.js | 8 +-
.../test/exams/current-try-overview.spec.js | 18 +-
kolibri/core/assets/test/exams/utils.spec.js | 8 +-
kolibri/core/assets/test/heartbeat.spec.js | 120 +-
kolibri/core/assets/test/kolibri_app.spec.js | 8 +-
.../core/assets/test/progress-icon.spec.js | 7 +-
.../assets/test/utils/syncTaskUtils.spec.js | 6 +-
.../assets/test/views/KTooltipExample.vue | 4 +-
.../test/views/NotificationsRoot.spec.js | 4 +-
.../test/views/attempt-log-item.spec.js | 2 +-
.../assets/test/views/auth-message.spec.js | 6 +-
.../assets/test/views/elapsed-time.spec.js | 2 +-
.../core/assets/test/views/side-nav.spec.js | 8 +-
kolibri/plugins/coach/assets/src/app.js | 4 +-
.../assets/src/composables/useCoreCoach.js | 2 +-
.../coach/assets/src/composables/useGroups.js | 6 +-
.../assets/src/composables/useLessons.js | 2 +-
.../assets/src/composables/useQuizCreation.js | 14 +-
.../src/composables/useQuizResources.js | 8 +-
.../classSummary/__test__/dataHelpers.spec.js | 6 +-
.../src/modules/classSummary/dataHelpers.js | 38 +-
.../assets/src/modules/classSummary/index.js | 12 +-
.../src/modules/coachNotifications/getters.js | 6 +-
.../src/modules/exerciseDetail/handlers.js | 2 +-
.../assets/src/modules/groups/actions.js | 12 +-
.../src/modules/lessonResources/handlers.js | 8 +-
.../src/modules/lessonResources/index.js | 6 +-
.../src/modules/lessonSummary/actions.js | 2 +-
.../assets/src/modules/lessonSummary/index.js | 2 +-
.../src/modules/questionDetail/handlers.js | 2 +-
.../src/modules/questionList/actions.js | 4 +-
.../src/modules/resourceDetail/handlers.js | 2 +-
.../plugins/coach/assets/src/routes/index.js | 2 +-
.../coach/assets/src/routes/reportRoutes.js | 14 +-
.../plugins/coach/assets/src/safeFilename.js | 2 +-
.../coach/assets/src/utils/selectQuestions.js | 2 +-
.../assets/src/views/AllFacilitiesPage.vue | 2 +-
.../src/views/ClassLearnersListPage.vue | 4 +-
.../assets/src/views/CoachAppBarPage.vue | 5 +-
.../assets/src/views/CoachClassListPage.vue | 10 +-
.../assets/src/views/CoachImmersivePage.vue | 6 +-
.../assets/src/views/CoachPrompts/index.vue | 1043 +++++------------
.../src/views/StorageNotificationBanner.vue | 41 +-
.../plugins/coach/assets/src/views/common.js | 4 +-
.../assets/src/views/common/BackLink.vue | 11 +-
.../src/views/common/HeaderTabs/HeaderTab.vue | 5 +-
.../views/common/LearnerExerciseReport.vue | 17 +-
.../assets/src/views/common/LessonStatus.vue | 35 +-
.../assets/src/views/common/Placeholder.vue | 6 +-
.../common/QuestionDetailLearnerList.vue | 9 +-
.../views/common/QuestionLearnersReport.vue | 10 +-
.../views/common/QuizLessonDetailsHeader.vue | 11 +-
.../assets/src/views/common/QuizStatus.vue | 52 +-
.../coach/assets/src/views/common/Score.vue | 10 +-
.../src/views/common/StatusElapsedTime.vue | 2 +-
.../src/views/common/TruncatedItemList.vue | 5 +-
.../common/notifications/ActivityList.vue | 2 +-
.../common/notifications/NotificationCard.vue | 11 +-
.../__test__/NotificationCard.spec.js | 6 +-
.../views/common/status/CoachStatusIcon.vue | 5 +-
.../common/status/LearnerProgressCount.vue | 5 +-
.../common/status/LearnerProgressLabel.vue | 5 +-
.../common/status/LearnerProgressRatio.vue | 5 +-
.../common/status/ProgressSummaryBar.vue | 15 +-
.../views/common/status/StatusTestPage.vue | 65 +-
.../src/views/home/HomeActivityPage.vue | 1 -
.../src/views/home/HomePage/ActivityBlock.vue | 1 -
.../home/HomePage/ItemProgressDisplay.vue | 19 +-
.../src/views/home/HomePage/LessonsBlock.vue | 5 +-
.../src/views/home/HomePage/OverviewBlock.vue | 7 +-
.../src/views/home/HomePage/QuizzesBlock.vue | 5 +-
.../assets/src/views/home/HomePage/index.vue | 1 -
.../src/views/plan/CoachExamsPage/index.vue | 30 +-
.../AssessmentQuestionListItem.vue | 10 +-
.../plan/CreateExamPage/CreateQuizSection.vue | 54 +-
.../CreateExamPage/QuestionListPreview.vue | 28 +-
.../plan/CreateExamPage/ReplaceQuestions.vue | 45 +-
.../plan/CreateExamPage/ResourceSelection.vue | 70 +-
.../plan/CreateExamPage/SectionEditor.vue | 50 +-
.../plan/CreateExamPage/TabsWithOverflow.vue | 26 +-
.../src/views/plan/CreateExamPage/index.vue | 16 +-
.../src/views/plan/GroupEnrollPage/index.vue | 14 +-
.../plan/GroupsPage/CreateGroupModal.vue | 2 +-
.../src/views/plan/GroupsPage/GroupRow.vue | 2 +-
.../plan/GroupsPage/RenameGroupModal.vue | 2 +-
.../LessonContentPreviewPage/ContentArea.vue | 10 +-
.../LessonContentPreviewPage/QuestionList.vue | 4 +-
.../plan/LessonContentPreviewPage/index.vue | 19 +-
.../EditDetailsResourceListTable.vue | 34 +-
.../plan/LessonEditDetailsPage/index.vue | 5 +-
.../ContentCardList.vue | 7 +-
.../LessonContentCard/BookmarkIcon.vue | 2 +-
.../LessonContentCard/CardThumbnail.vue | 1 -
.../LessonContentCard/index.vue | 19 +-
.../SearchTools/LessonsSearchBox.vue | 6 +-
.../SearchTools/LessonsSearchFilters.vue | 15 +-
.../LessonResourceSelectionPage/index.vue | 17 +-
.../LessonSummaryPage/ManageLessonModals.vue | 6 +-
.../LessonSummaryPage/ResourceListTable.vue | 32 +-
.../views/plan/LessonSummaryPage/index.vue | 3 -
.../src/views/plan/LessonsRootPage/index.vue | 19 +-
.../assets/src/views/plan/PlanHeader.vue | 2 +-
.../PlanLessonSelectionContentPreview.vue | 3 +-
.../src/views/plan/QuizSummaryPage/index.vue | 17 +-
.../plan/assignments/AssignmentCopyModal.vue | 14 +-
.../assignments/AssignmentDetailsModal.vue | 6 +-
.../assignments/IndividualLearnerSelector.vue | 17 +-
.../reports/ExerciseQuestionListPageBase.vue | 12 +-
.../reports/QuizQuestionListPageBase.vue | 21 +-
.../src/views/reports/ReportsControls.vue | 5 +-
.../reports/ReportsGroupActivityPage.vue | 3 -
.../src/views/reports/ReportsGroupHeader.vue | 5 +-
.../reports/ReportsGroupLearnerListPage.vue | 9 +-
.../views/reports/ReportsGroupListPage.vue | 9 +-
...oupReportLessonExerciseLearnerListPage.vue | 13 +-
...oupReportLessonResourceLearnerListPage.vue | 8 +-
.../views/reports/ReportsGroupReportPage.vue | 6 +-
.../reports/ReportsGroupReportQuizHeader.vue | 7 +-
.../ReportsGroupReportQuizLearnerListPage.vue | 10 +-
.../src/views/reports/ReportsHeader.vue | 2 +-
.../reports/ReportsLearnerActivityPage.vue | 7 +-
.../views/reports/ReportsLearnerHeader.vue | 11 +-
.../views/reports/ReportsLearnerListPage.vue | 11 +-
.../ReportsLearnerReportLessonPage.vue | 11 +-
.../reports/ReportsLearnerReportPage.vue | 11 +-
.../views/reports/ReportsLearnersTable.vue | 34 +-
.../src/views/reports/ReportsLessonBase.vue | 18 +-
.../ReportsLessonExerciseLearnerListPage.vue | 14 +-
.../reports/ReportsLessonLearnerBase.vue | 20 +-
.../reports/ReportsLessonLearnerListPage.vue | 10 +-
.../reports/ReportsLessonLearnersList.vue | 10 +-
.../views/reports/ReportsLessonListPage.vue | 9 +-
.../reports/ReportsLessonManagerPage.vue | 5 +-
.../views/reports/ReportsLessonReportPage.vue | 10 +-
.../ReportsLessonResourceLearnerListPage.vue | 23 +-
.../reports/ReportsLessonResourcesList.vue | 15 +-
.../views/reports/ReportsQuizBaseListPage.vue | 11 +-
.../reports/ReportsQuizLearnerListPage.vue | 10 +-
.../src/views/reports/ReportsQuizListPage.vue | 19 +-
.../views/reports/ReportsQuizPreviewPage.vue | 6 +-
.../views/reports/ReportsResourceHeader.vue | 57 +-
.../test/selectRandomExamQuestions.spec.js | 2 +-
.../coach/assets/test/useFetchTree.spec.js | 2 +-
.../coach/assets/test/useQuizCreation.spec.js | 14 +-
.../assets/src/DemoServerBannerContent.vue | 4 +-
kolibri/plugins/device/assets/src/app.js | 2 +-
.../assets/src/composables/usePlugins.js | 2 +-
.../manageContent/actions/taskActions.js | 2 +-
.../assets/src/modules/manageContent/index.js | 9 +-
.../src/modules/managePermissions/handlers.js | 12 +-
.../src/modules/userPermissions/actions.js | 2 +-
.../actions/availableChannelsActions.js | 6 +-
.../actions/contentTreeViewerActions.js | 10 +-
.../wizard/actions/contentWizardActions.js | 2 +-
.../assets/src/modules/wizard/getters.js | 2 +-
.../assets/src/modules/wizard/handlers.js | 8 +-
.../plugins/device/assets/src/routes/index.js | 2 +-
.../src/views/AvailableChannelsPage/index.vue | 12 +-
.../src/views/DeprecationWarningBanner.vue | 42 +-
.../assets/src/views/DeviceAppBarPage.vue | 2 -
.../device/assets/src/views/DeviceIndex.vue | 2 -
.../assets/src/views/DeviceInfoPage.vue | 6 +-
.../DeviceSettingsPage/ServerRestartModal.vue | 5 +-
.../__test__/DeviceSettingsPage.spec.js | 13 +-
.../src/views/DeviceSettingsPage/index.vue | 87 +-
.../FacilitiesPage/FacilitiesTasksPage.vue | 4 +-
.../FacilitiesPage/RemoveFacilityModal.vue | 1 -
.../FacilitiesPage/SyncAllFacilitiesModal.vue | 2 +-
.../FacilitiesPage/facilityTasksQueue.js | 6 +-
.../assets/src/views/FacilitiesPage/index.vue | 11 +-
.../ChannelPanel/ChannelDetails.vue | 20 +-
.../ChannelPanel/WithCheckbox.vue | 6 +-
.../ChannelPanel/WithImportDetails.vue | 35 +-
.../ChannelPanel/WithSizeAndOptions.vue | 7 +-
.../DeleteExportChannelsPage.vue | 9 +-
.../FilteredChannelListContainer.vue | 21 +-
.../ManageChannelContentsPage/index.vue | 1 -
.../NewChannelVersionBanner.vue | 5 +-
.../NewChannelVersionPage.vue | 14 +-
.../SelectNetworkDeviceModal/index.vue | 2 +-
.../SelectDriveModal.vue | 2 +-
.../SelectTransferSourceModal/index.vue | 1 -
.../views/ManageContentPage/TaskProgress.vue | 1 -
.../src/views/ManageContentPage/TasksBar.vue | 1 -
.../ManageContentPage/UpdateChannelModal.vue | 9 +-
.../src/views/ManageContentPage/index.vue | 6 +-
.../views/ManagePermissionsPage/UserGrid.vue | 24 +-
.../src/views/ManagePermissionsPage/index.vue | 10 +-
.../src/views/ManageTasksPage/TaskPanel.vue | 48 +-
.../src/views/ManageTasksPage/index.vue | 27 +-
.../src/views/PinAuthenticationModal.vue | 2 +-
.../src/views/RearrangeChannelsPage.vue | 1 -
.../ChannelContentsSummary.vue | 6 +-
.../SelectContentPage/ContentNodeRow.vue | 6 +-
.../SelectContentPage/ContentTreeViewer.vue | 17 +-
.../src/views/UserPermissionsPage/index.vue | 13 +-
.../__test__/RearrangeChannelsPage.spec.js | 4 +-
.../test/views/AvailableChannelsPage.spec.js | 2 +-
.../test/views/ContentTreeViewer.spec.js | 4 +-
.../test/views/SelectContentPage.spec.js | 12 +-
.../assets/src/views/BottomBar.vue | 5 +-
.../assets/src/views/EpubRendererIndex.vue | 31 +-
.../assets/src/views/LoadingScreen.vue | 5 +-
.../assets/src/views/SearchSideBar.vue | 17 +-
.../assets/src/views/SettingsSideBar.vue | 25 +-
.../epub_viewer/assets/src/views/SideBar.vue | 5 +-
.../src/views/TableOfContentsSection.vue | 1 -
.../src/views/TableOfContentsSideBar.vue | 4 +-
.../epub_viewer/assets/src/views/TopBar.vue | 5 +-
.../assets/tests/EpubRendererIndex.spec.js | 4 +-
.../tests/TableOfContentsSection.spec.js | 6 +-
.../TableOfContentsSectionSideBar.spec.js | 2 +-
.../modules/classAssignMembers/handlers.js | 4 +-
.../modules/classEditManagement/actions.js | 6 +-
.../src/modules/classManagement/actions.js | 2 +-
.../src/modules/facilityConfig/actions.js | 2 +-
.../assets/src/modules/importCSV/actions.js | 6 +-
.../assets/src/modules/manageCSV/actions.js | 12 +-
.../src/modules/userManagement/actions.js | 2 +-
.../src/modules/userManagement/utils.js | 2 +-
kolibri/plugins/facility/assets/src/routes.js | 2 +-
.../assets/src/views/AllFacilitiesPage.vue | 16 +-
.../views/ClassEditPage/ClassRenameModal.vue | 2 +-
.../assets/src/views/ClassEditPage/index.vue | 12 +-
.../assets/src/views/ClassEnrollForm.vue | 7 +-
.../assets/src/views/CsvInfoModal.vue | 71 +-
.../views/DataPage/ImportInterface/index.vue | 17 +-
.../DataPage/SyncInterface/PrivacyModal.vue | 1 -
.../views/DataPage/SyncInterface/index.vue | 12 +-
.../assets/src/views/DataPage/index.vue | 35 +-
.../assets/src/views/FacilityAppBarPage.vue | 8 +-
.../FacilityConfigPage/ChangePinModal.vue | 2 +-
.../CreateManagementPinModal.vue | 2 +-
.../EditFacilityNameModal.vue | 2 +-
.../src/views/FacilityConfigPage/index.vue | 23 +-
.../assets/src/views/ImportCsvPage/Init.vue | 9 +-
.../src/views/ImportCsvPage/Preview.vue | 20 +-
.../assets/src/views/ImportCsvPage/index.vue | 9 +-
.../ManageClassPage/ClassCreateModal.vue | 2 +-
.../src/views/ManageClassPage/index.vue | 19 +-
.../views/ManageClassPage/useDeleteClass.js | 2 +-
.../assets/src/views/UserCreatePage.vue | 26 +-
.../assets/src/views/UserEditPage.vue | 25 +-
.../views/UserPage/ResetUserPasswordModal.vue | 4 +-
.../assets/src/views/UserPage/index.vue | 7 +-
.../assets/test/state/facilityConfig.spec.js | 8 +-
.../test/views/facility-app-bar-page.spec.js | 2 +-
.../src/views/Html5AppRendererIndex.vue | 12 +-
.../src/composables/__mocks__/useDevices.js | 2 +-
.../__tests__/useContentLink.spec.js | 5 +-
.../__tests__/useLearnerResources.spec.js | 6 +-
.../__tests__/useProgressTracking.spec.js | 50 +-
.../composables/__tests__/useSearch.spec.js | 8 +-
.../assets/src/composables/useDevices.js | 5 +-
.../src/composables/useLearnerResources.js | 4 +-
.../src/composables/useLearningActivities.js | 2 +-
.../src/composables/useProgressTracking.js | 24 +-
.../learn/assets/src/composables/useSearch.js | 2 +-
.../src/modules/examReportViewer/handlers.js | 4 +-
.../assets/src/modules/examViewer/handlers.js | 8 +-
.../assets/src/modules/examViewer/index.js | 4 +-
.../views/DownloadsList/index.vue | 22 +-
.../views/Filters/ActivityFilter.vue | 2 +-
.../src/my_downloads/views/MyDownloads.vue | 20 +-
.../assets/src/utils/__test__/themes.spec.js | 6 +-
.../assets/src/utils/validateChannelTheme.js | 2 +-
.../learn/assets/src/views/AlsoInThis.vue | 46 +-
.../ExerciseAttempts/AnswerIcon.vue | 6 +-
.../ExerciseAttempts/index.vue | 3 +-
.../AssessmentWrapper/LessonMasteryBar.vue | 7 +-
.../src/views/AssessmentWrapper/index.vue | 34 +-
.../learn/assets/src/views/BookmarkPage.vue | 20 +-
.../src/views/BrowseResourceMetadata.vue | 131 ++-
.../learn/assets/src/views/CardList.vue | 50 +-
.../learn/assets/src/views/ChannelCard.vue | 4 +-
.../assets/src/views/ChannelCardGroupGrid.vue | 1 -
.../src/views/ChannelRenderer/ContentItem.vue | 1 -
.../views/ChannelRenderer/ContentModal.vue | 5 +-
.../ChannelRenderer/CustomContentRenderer.vue | 4 +-
.../assets/src/views/ChannelThumbnail.vue | 2 -
.../ResourceItem/ResourceLabel.vue | 7 +-
.../src/views/CompletionModal/index.vue | 26 +-
.../src/views/ContentCardGroupHeader.vue | 20 +-
.../learn/assets/src/views/ContentPage.vue | 3 +-
.../src/views/ContentUnavailablePage.vue | 10 +-
.../learn/assets/src/views/CopiesModal.vue | 2 +-
.../views/CurrentlyViewedResourceMetadata.vue | 74 +-
.../src/views/DeviceConnectionStatus.vue | 4 +-
.../src/views/ExamPage/AnswerHistory.vue | 18 +-
.../learn/assets/src/views/ExamPage/index.vue | 89 +-
.../ExploreLibrariesPage/LibraryItem.vue | 2 +-
.../src/views/ExploreLibrariesPage/index.vue | 5 +-
.../src/views/FadeInTransitionGroup.vue | 15 +-
.../src/views/HomePage/ContinueLearning.vue | 2 +-
.../__tests__/ExploreChannels.spec.js | 11 +-
.../views/HomePage/ExploreChannels/index.vue | 5 +-
.../views/HomePage/__tests__/HomePage.spec.js | 30 +-
.../learn/assets/src/views/HomePage/index.vue | 38 +-
.../CardThumbnail.vue | 4 +-
.../HybridLearningFooter.vue | 9 +-
.../views/HybridLearningContentCard/index.vue | 19 +-
.../src/views/HybridLearningLessonCard.vue | 5 +-
.../assets/src/views/LearnAppBarPage.vue | 1 -
.../src/views/LearnExamReportViewer.vue | 6 +-
.../assets/src/views/LearningActivityBar.vue | 20 +-
.../assets/src/views/LearningActivityChip.vue | 5 +-
.../views/LearningActivityDuration/index.vue | 9 +-
.../assets/src/views/LearningActivityIcon.vue | 5 +-
.../__tests__/index.spec.js | 2 +-
.../src/views/LearningActivityLabel/index.vue | 6 +-
.../LibraryAndChannelBrowserMainContent.vue | 6 +-
.../src/views/LibraryPage/OtherLibraries.vue | 20 +-
.../LibraryPage/ResumableContentGrid.vue | 11 +-
.../src/views/LibraryPage/UnPinnedDevices.vue | 3 +-
.../assets/src/views/LibraryPage/index.vue | 42 +-
.../learn/assets/src/views/PageHeader.vue | 10 +-
.../learn/assets/src/views/ProgressBar.vue | 11 +-
.../src/views/QuizRenderer/QuizReport.vue | 12 +-
.../assets/src/views/QuizRenderer/index.vue | 47 +-
.../src/views/ResourceSyncingUiAlert.vue | 9 +-
.../learn/assets/src/views/SearchBox.vue | 5 +-
.../ActivityButtonsGroup.vue | 19 +-
.../CategorySearchOptions.vue | 1 -
.../CategorySearchModal/index.vue | 7 +-
.../src/views/SearchFiltersPanel/index.vue | 40 +-
.../assets/src/views/SearchResultsGrid.vue | 16 +-
.../assets/src/views/SidePanelModal/index.vue | 10 +-
.../assets/src/views/StorageNotification.vue | 11 +-
.../assets/src/views/TopicsContentPage.vue | 32 +-
.../src/views/TopicsPage/ToggleHeaderTabs.vue | 14 +-
.../src/views/TopicsPage/TopicSubsection.vue | 13 +-
.../src/views/TopicsPage/TopicsHeader.vue | 5 +-
.../views/TopicsPage/TopicsMobileHeader.vue | 13 +-
.../src/views/TopicsPage/TopicsPanelModal.vue | 16 +-
.../assets/src/views/TopicsPage/index.vue | 60 +-
.../YourClasses/__tests__/YourClasses.spec.js | 4 +-
.../assets/src/views/YourClasses/index.vue | 5 +-
.../learn/assets/src/views/cards/BaseCard.vue | 5 +-
.../learn/assets/src/views/cards/CardGrid.vue | 5 +-
.../learn/assets/src/views/cards/CardLink.vue | 6 +-
.../assets/src/views/cards/ResourceCard.vue | 5 +-
.../src/views/classes/AllClassesPage.vue | 14 +-
.../views/classes/AssignedQuizzesCards.vue | 1 -
.../views/classes/ClassAssignmentsPage.vue | 33 +-
.../src/views/classes/LessonPlaylistPage.vue | 68 +-
.../test/views/assessment-wrapper.spec.js | 13 +-
.../views/browse-resource-metadata.spec.js | 2 +-
...currently-viewed-resource-metadata.spec.js | 4 +-
...-channel-browser-main-content-grid.spec.js | 2 +-
.../assets/test/views/library-page.spec.js | 34 +-
.../test/views/resumable-content-grid.spec.js | 14 +-
.../test/views/search-results-grid.spec.js | 4 +-
.../assets/test/views/topic-content.spec.js | 20 +-
.../assets/test/views/topics-page.spec.js | 14 +-
.../assets/src/modules/captions/index.js | 4 +-
.../TranscriptMenuItem.vue | 5 +-
.../src/views/MediaPlayerFullscreen/index.vue | 5 +-
.../assets/src/views/MediaPlayerIndex.vue | 50 +-
.../MediaPlayerLanguages/LanguagesIcon.vue | 2 +-
.../MediaPlayerLanguages/LanguagesMenu.vue | 5 +-
.../MediaPlayerLanguages/languagesMenuItem.js | 4 +-
.../assets/src/views/MediaPlayerMenu.vue | 7 +-
.../MediaPlayerTranscript/TranscriptCue.vue | 12 +-
.../src/views/MediaPlayerTranscript/index.vue | 11 +-
.../src/views/videojs-style/video-js.min.css | 189 ++-
.../videojs-font/css/videojs-icons.css | 7 +-
.../assets/src/utils/domPolyfills.js | 4 +-
.../assets/src/utils/text_layer_builder.js | 2 +-
.../pdf_viewer/assets/src/views/PdfPage.vue | 13 +-
.../assets/src/views/PdfRendererIndex.vue | 17 +-
.../assets/src/views/RecyclableScroller.vue | 72 +-
.../views/SideBar/Bookmarks/BookmarkItem.vue | 7 +-
.../assets/src/views/SideBar/index.vue | 16 +-
.../assets/tests/PdfRendererIndex.spec.js | 4 +-
.../assets/tests/SideBar/Bookmarks.spec.js | 12 +-
.../assets/src/translationUtils.js | 2 +-
.../assets/src/views/PerseusRendererIndex.vue | 40 +-
.../perseus_viewer/assets/src/views/Tex.js | 26 +-
.../assets/src/widgetSolver/categorizer.js | 2 +-
.../assets/src/widgetSolver/dropdown.js | 2 +-
.../assets/src/widgetSolver/grapher.js | 2 +-
.../assets/src/widgetSolver/inputNumber.js | 2 +-
.../src/widgetSolver/interactiveGraph.js | 2 +-
.../assets/src/widgetSolver/lightsPuzzle.js | 2 +-
.../assets/src/widgetSolver/matrix.js | 4 +-
.../assets/src/widgetSolver/numberLine.js | 2 +-
.../assets/src/widgetSolver/numericInput.js | 2 +-
.../assets/src/widgetSolver/plotter.js | 2 +-
.../assets/src/widgetSolver/radio.js | 2 +-
.../assets/src/widgetSolver/table.js | 2 +-
.../assets/src/widgetSolver/unit.js | 2 +-
.../assets/src/views/CookiePolicy.vue | 13 +-
.../assets/src/machines/wizardMachine.js | 2 +-
.../src/views/ImportIndividualUserForm.vue | 21 +-
.../assets/src/views/ImportMultipleUsers.vue | 9 +-
.../assets/src/views/OnboardingStepBase.vue | 43 +-
.../assets/src/views/SelectFacilityForm.vue | 5 +-
.../src/views/SelectSuperAdminAccountForm.vue | 10 +-
.../assets/src/views/SetupWizardIndex.vue | 2 -
.../CreateLearnerAccountForm.vue | 2 -
.../FacilityPermissionsForm.vue | 1 -
.../GettingStartedFormAlt.vue | 4 +-
.../onboarding-forms/GuestAccessForm.vue | 2 -
.../views/onboarding-forms/OnboardingForm.vue | 10 +-
.../PersonalDataConsentForm.vue | 1 -
.../RequirePasswordForLearnersForm.vue | 1 -
.../onboarding-forms/SettingUpKolibri.vue | 7 +-
.../onboarding-forms/UserCredentialsForm.vue | 1 -
.../src/views/submission-states/ErrorPage.vue | 8 +-
.../views/submission-states/LoadingPage.vue | 2 -
.../submission-states/SubmissionStatePage.vue | 6 +-
.../src/views/SlideshowRendererComponent.vue | 29 +-
.../tests/SlideshowRendererComponent.spec.js | 4 +-
.../user_auth/assets/src/views/AuthBase.vue | 47 +-
.../user_auth/assets/src/views/AuthSelect.vue | 6 +-
.../assets/src/views/FacilitySelect.vue | 18 +-
.../src/views/LanguageSwitcherFooter.vue | 5 +-
.../src/views/SignInPage/NewPasswordPage.vue | 6 +-
.../src/views/SignInPage/SignInHeading.vue | 12 +-
.../assets/src/views/SignInPage/index.vue | 19 +-
.../user_auth/assets/src/views/SignUpPage.vue | 7 +-
.../assets/src/views/UserAuthLayout.vue | 2 -
.../user_auth/assets/src/views/UsersList.vue | 9 +-
.../assets/src/composables/useCurrentUser.js | 2 +-
.../src/composables/useRemoteFacility.js | 2 +-
.../src/machines/changeFacilityMachine.js | 2 +-
.../ConfirmAccountUsername/index.vue | 1 -
.../ChangeFacility/ConfirmChangeFacility.vue | 1 -
.../src/views/ChangeFacility/ConfirmMerge.vue | 1 -
.../CreateAccount/__tests__/index.spec.js | 18 +-
.../ChangeFacility/CreateAccount/index.vue | 2 +-
.../views/ChangeFacility/CreatePassword.vue | 2 +-
.../ConfirmAccountDetails.vue | 16 +-
.../__tests__/ConfirmAccountDetails.spec.js | 2 +-
.../__tests__/index.spec.js | 14 +-
.../MergeAccountDialog/index.vue | 16 +-
.../__tests__/index.spec.js | 6 +-
.../MergeDifferentAccounts/index.vue | 14 +-
.../views/ChangeFacility/MergeFacility.vue | 37 +-
.../views/ChangeFacility/SelectFacility.vue | 33 +-
.../views/ChangeFacility/UsernameExists.vue | 1 -
.../assets/src/views/ChangeFacility/index.vue | 6 +-
.../assets/src/views/ProfileEditPage.vue | 18 +-
.../assets/src/views/ProfilePage/index.vue | 19 +-
.../ChangeFacility/UsernameExists.spec.js | 4 +-
.../lib/rules/vue-component-block-padding.js | 2 +-
.../rules/vue-component-block-tag-newline.js | 6 +-
.../vue-component-registration-casing.js | 2 +-
.../vue-filename-and-component-name-match.js | 2 +-
.../lib/rules/vue-no-undefined-string-uses.js | 6 +-
.../lib/rules/vue-no-unused-methods.js | 8 +-
.../lib/rules/vue-no-unused-properties.js | 10 +-
.../lib/rules/vue-no-unused-translations.js | 8 +-
.../lib/rules/vue-no-unused-vuex-methods.js | 10 +-
.../rules/vue-no-unused-vuex-properties.js | 6 +-
.../rules/vue-string-objects-formatting.js | 10 +-
.../lib/rules/vue-watch-no-string.js | 4 +-
packages/eslint-plugin-kolibri/lib/utils.js | 4 +-
packages/hashi/downloadH5PVendor.js | 16 +-
packages/hashi/src/H5P/H5PRunner.js | 32 +-
packages/hashi/src/baseStorage.js | 2 +-
packages/hashi/src/cookie.js | 2 +-
packages/hashi/src/h5pBundle.js | 4 +-
packages/hashi/src/patchIndexedDB.js | 2 +-
packages/hashi/src/xAPI/xAPIInterface.js | 10 +-
packages/hashi/test/SCORM.spec.js | 6 +-
packages/hashi/test/kolibri.spec.js | 10 +-
packages/hashi/test/xAPI.spec.js | 16 +-
packages/hashi/webpack.config.h5p.js | 4 +-
packages/hashi/webpack.config.js | 6 +-
.../components/AccordionContainer.vue | 2 +-
.../components/AccordionItem.vue | 8 +-
.../components/AppError/ReportErrorModal.vue | 2 -
.../AppError/TechnicalTextBlock.vue | 16 +-
.../components/AppError/index.vue | 15 +-
.../__tests__/ExtraDemographics.spec.js | 2 +-
.../components/MissingResourceAlert.vue | 15 +-
.../PaginatedListContainerWithBackend.vue | 8 +-
.../components/SidePanelModal/index.vue | 10 +-
.../SyncSchedule/EditDeviceSyncSchedule.vue | 61 +-
.../SyncSchedule/ManageSyncSchedule.vue | 49 +-
.../__tests__/EditDeviceSyncSchedule.spec.js | 2 +-
.../strings/enhancedQuizManagementStrings.js | 2 +-
packages/kolibri-tools/build_kolibri_tools.js | 2 +-
packages/kolibri-tools/jest.conf/index.js | 6 +-
packages/kolibri-tools/jest.conf/setup.js | 4 +-
.../lib/alias_import_resolver.js | 8 +-
.../kolibri-tools/lib/apiSpecExportTools.js | 34 +-
packages/kolibri-tools/lib/clean.js | 6 +-
packages/kolibri-tools/lib/cli.js | 86 +-
.../kolibri-tools/lib/i18n/ExtractMessages.js | 8 +-
.../kolibri-tools/lib/i18n/ProfileStrings.js | 16 +-
.../kolibri-tools/lib/i18n/SyncContext.js | 8 +-
packages/kolibri-tools/lib/i18n/astUtils.js | 32 +-
.../kolibri-tools/lib/i18n/auditMessages.js | 6 +-
packages/kolibri-tools/lib/i18n/csvToJSON.js | 8 +-
.../kolibri-tools/lib/i18n/intl_code_gen.js | 6 +-
.../lib/i18n/locale-data/vue-intl/ht.js | 46 +-
.../lib/i18n/untranslatedMessages.js | 6 +-
packages/kolibri-tools/lib/i18n/utils.js | 2 +-
.../kolibri-tools/lib/read_webpack_json.js | 2 +-
.../lib/webpack.config.plugin.js | 4 +-
.../kolibri-tools/lib/webpackBundleTracker.js | 7 +-
packages/kolibri-tools/lib/webpackMessages.js | 5 +-
.../kolibri-tools/lib/webpackRtlPlugin.js | 4 +-
.../test/fixtures/TestComponent.vue | 13 +-
.../test/test_apiSpecExportTools.spec.js | 48 +-
.../test/test_i18nSyncContext.spec.js | 40 +-
.../test/test_webpack.config.plugin.spec.js | 64 +-
packages/kolibri-zip/src/fileUtils.js | 6 +-
packages/kolibri-zip/src/index.js | 4 +-
packages/kolibri-zip/src/loadBinary.js | 4 +-
packages/kolibri-zip/test/fileUtils.spec.js | 28 +-
packages/publish.js | 14 +-
604 files changed, 5103 insertions(+), 4337 deletions(-)
diff --git a/kolibri/core/assets/src/api-resource.js b/kolibri/core/assets/src/api-resource.js
index b091d5e8fd2..802e69078ec 100644
--- a/kolibri/core/assets/src/api-resource.js
+++ b/kolibri/core/assets/src/api-resource.js
@@ -86,13 +86,13 @@ export class Model {
reject(response);
// Clean up the reference to this promise
this.promises.splice(this.promises.indexOf(promise), 1);
- }
+ },
);
}
},
reason => {
reject(reason);
- }
+ },
);
});
this.promises.push(promise);
@@ -164,13 +164,13 @@ export class Model {
reject(response);
// Clean up the reference to this promise
this.promises.splice(this.promises.indexOf(promise), 1);
- }
+ },
);
}
},
reason => {
reject(reason);
- }
+ },
);
});
this.promises.push(promise);
@@ -214,13 +214,13 @@ export class Model {
reject(response);
// Clean up the reference to this promise
this.promises.splice(this.promises.indexOf(promise), 1);
- }
+ },
);
}
},
reason => {
reject(reason);
- }
+ },
);
});
this.promises.push(promise);
@@ -340,13 +340,13 @@ export class Collection {
reject(response);
// Clean up the reference to this promise
this.promises.splice(this.promises.indexOf(promise), 1);
- }
+ },
);
}
},
reason => {
reject(reason);
- }
+ },
);
});
this.promises.push(promise);
@@ -399,12 +399,12 @@ export class Collection {
reject(response);
// Clean up the reference to this promise
this.promises.splice(this.promises.indexOf(promise), 1);
- }
+ },
);
},
reason => {
reject(reason);
- }
+ },
);
});
this.promises.push(promise);
@@ -450,13 +450,13 @@ export class Collection {
reject(response);
// Clean up the reference to this promise
this.promises.splice(this.promises.indexOf(promise), 1);
- }
+ },
);
}
},
reason => {
reject(reason);
- }
+ },
);
});
this.promises.push(promise);
@@ -602,8 +602,8 @@ export class Resource {
.sort()
.map(paramKey => ({
[paramKey]: paramKey === this.idKey ? String(allParams[paramKey]) : allParams[paramKey],
- }))
- )
+ })),
+ ),
);
}
@@ -926,7 +926,7 @@ export class Resource {
create(params = {}, multipart = false) {
return this.accessListEndpoint('post', 'list', params, multipart).then(
- response => response.data
+ response => response.data,
);
}
@@ -1038,7 +1038,7 @@ export class Resource {
`%cRequest error: ${err.response.statusText}, ${
err.response.status
} for ${err.config.method.toUpperCase()} to ${err.config.url} - open for more info`,
- 'color: red'
+ 'color: red',
);
console.log(`Error occured for ${this.name} resource on page ${window.location.href}`);
if (store?.state?.route) {
diff --git a/kolibri/core/assets/src/api-resources/contentNode.js b/kolibri/core/assets/src/api-resources/contentNode.js
index 11690ae3dc7..67e52fa43b0 100644
--- a/kolibri/core/assets/src/api-resources/contentNode.js
+++ b/kolibri/core/assets/src/api-resources/contentNode.js
@@ -139,7 +139,7 @@ export default new Resource({
if (data[this.idKey]) {
this.cache[data[this.idKey]] = Object.assign(
this.cache[data[this.idKey]] || {},
- cloneDeep(data)
+ cloneDeep(data),
);
if (data.children) {
this.cacheData(data.children);
diff --git a/kolibri/core/assets/src/composables/useMinimumKolibriVersion.js b/kolibri/core/assets/src/composables/useMinimumKolibriVersion.js
index bb9c22064f8..daea571ad88 100644
--- a/kolibri/core/assets/src/composables/useMinimumKolibriVersion.js
+++ b/kolibri/core/assets/src/composables/useMinimumKolibriVersion.js
@@ -19,7 +19,7 @@ const logging = logger.getLogger(__filename);
export default function useMinimumKolibriVersion(
majorVersion = 0,
minorVersion = 15,
- revisionVersion = null
+ revisionVersion = null,
) {
const isMinimumKolibriVersion = useMemoize(version => {
if (!version) {
diff --git a/kolibri/core/assets/src/composables/useUserSyncStatus.js b/kolibri/core/assets/src/composables/useUserSyncStatus.js
index 503ad479c07..b30f0beabf3 100644
--- a/kolibri/core/assets/src/composables/useUserSyncStatus.js
+++ b/kolibri/core/assets/src/composables/useUserSyncStatus.js
@@ -33,7 +33,7 @@ export function fetchUserSyncStatus(params) {
error => {
store.dispatch('handleApiError', { error });
return error;
- }
+ },
);
}
diff --git a/kolibri/core/assets/src/core-app/__tests__/pluginMediator.spec.js b/kolibri/core/assets/src/core-app/__tests__/pluginMediator.spec.js
index 9367ad9a8d8..0e5ad8f4ecf 100644
--- a/kolibri/core/assets/src/core-app/__tests__/pluginMediator.spec.js
+++ b/kolibri/core/assets/src/core-app/__tests__/pluginMediator.spec.js
@@ -6,66 +6,66 @@ if (!Object.prototype.hasOwnProperty.call(global, 'Intl')) {
require('intl/locale-data/jsonp/en.js');
}
-describe('Mediator', function() {
+describe('Mediator', function () {
let mediator, kolibriModule, facade;
const kolibriModuleName = 'test';
- beforeEach(function() {
+ beforeEach(function () {
facade = {};
mediator = mediatorFactory({ Vue, facade });
});
- afterEach(function() {
+ afterEach(function () {
mediator = undefined;
facade = undefined;
});
- describe('kolibriModule registry', function() {
- it('should be empty', function() {
+ describe('kolibriModule registry', function () {
+ it('should be empty', function () {
expect(mediator._kolibriModuleRegistry).toEqual({});
});
});
- describe('callback buffer', function() {
- it('should be empty', function() {
+ describe('callback buffer', function () {
+ it('should be empty', function () {
expect(mediator._callbackBuffer).toEqual({});
});
});
- describe('callback registry', function() {
- it('should be empty', function() {
+ describe('callback registry', function () {
+ it('should be empty', function () {
expect(mediator._callbackRegistry).toEqual({});
});
});
- describe('async callback registry', function() {
- it('should be empty', function() {
+ describe('async callback registry', function () {
+ it('should be empty', function () {
expect(mediator._asyncCallbackRegistry).toEqual({});
});
});
- describe('event dispatcher', function() {
- it('should be a Vue object', function() {
+ describe('event dispatcher', function () {
+ it('should be a Vue object', function () {
expect(mediator._eventDispatcher.$on).toBeInstanceOf(Function);
expect(mediator._eventDispatcher.$emit).toBeInstanceOf(Function);
expect(mediator._eventDispatcher.$once).toBeInstanceOf(Function);
expect(mediator._eventDispatcher.$off).toBeInstanceOf(Function);
});
});
- describe('language asset registry', function() {
- it('should be empty', function() {
+ describe('language asset registry', function () {
+ it('should be empty', function () {
expect(mediator._languageAssetRegistry).toEqual({});
});
});
- describe('registerKolibriModuleSync method', function() {
+ describe('registerKolibriModuleSync method', function () {
let _registerMultipleEvents, _registerOneTimeEvents, emit, _executeCallbackBuffer;
- beforeEach(function() {
+ beforeEach(function () {
_registerMultipleEvents = jest.spyOn(mediator, '_registerMultipleEvents');
_registerOneTimeEvents = jest.spyOn(mediator, '_registerOneTimeEvents');
emit = jest.spyOn(mediator, 'emit');
_executeCallbackBuffer = jest.spyOn(mediator, '_executeCallbackBuffer');
});
- afterEach(function() {
+ afterEach(function () {
mediator._kolibriModuleRegistry = {};
_registerMultipleEvents.mockRestore();
_registerOneTimeEvents.mockRestore();
emit.mockRestore();
_executeCallbackBuffer.mockRestore();
});
- describe('called with valid input', function() {
+ describe('called with valid input', function () {
let consoleMock;
beforeAll(() => {
consoleMock = jest.spyOn(console, 'info').mockImplementation();
@@ -73,77 +73,77 @@ describe('Mediator', function() {
afterAll(() => {
consoleMock.mockRestore();
});
- beforeEach(function() {
+ beforeEach(function () {
kolibriModule = { name: 'test', ready: () => {} };
mediator.registerKolibriModuleSync(kolibriModule);
});
- it('should call the _registerMultipleEvents method', function() {
+ it('should call the _registerMultipleEvents method', function () {
expect(_registerMultipleEvents).toHaveBeenCalled();
});
- it('should pass the kolibriModule to the _registerMultipleEvents method', function() {
+ it('should pass the kolibriModule to the _registerMultipleEvents method', function () {
expect(_registerMultipleEvents).toHaveBeenCalledWith(kolibriModule);
});
- it('should call the _registerOneTimeEvents method', function() {
+ it('should call the _registerOneTimeEvents method', function () {
expect(_registerOneTimeEvents).toHaveBeenCalled();
});
- it('should pass the kolibriModule to the _registerOneTimeEvents method', function() {
+ it('should pass the kolibriModule to the _registerOneTimeEvents method', function () {
expect(_registerOneTimeEvents).toHaveBeenCalledWith(kolibriModule);
});
- it('should call the emit method', function() {
+ it('should call the emit method', function () {
expect(emit).toHaveBeenCalled();
});
- it('should pass the kolibriModule to the emit method', function() {
+ it('should pass the kolibriModule to the emit method', function () {
expect(emit).toHaveBeenCalledWith('kolibri_register', kolibriModule);
});
- it('should call the _executeCallbackBuffer method', function() {
+ it('should call the _executeCallbackBuffer method', function () {
expect(_executeCallbackBuffer).toHaveBeenCalled();
});
- it('should call pass the kolibriModule to the _executeCallbackBuffer method', function() {
+ it('should call pass the kolibriModule to the _executeCallbackBuffer method', function () {
expect(_executeCallbackBuffer).toHaveBeenCalledWith(kolibriModule);
});
- it('should put the kolibriModule into the kolibriModule registry', function() {
+ it('should put the kolibriModule into the kolibriModule registry', function () {
expect(mediator._kolibriModuleRegistry[kolibriModule.name]).toEqual(kolibriModule);
});
});
- describe('called with invalid input', function() {
- beforeEach(function() {
+ describe('called with invalid input', function () {
+ beforeEach(function () {
kolibriModule = undefined;
try {
mediator.registerKolibriModuleSync(kolibriModule);
} catch (e) {} // eslint-disable-line no-empty
});
- it('should raise an error', function() {
+ it('should raise an error', function () {
function testCall() {
mediator.registerKolibriModuleSync(kolibriModule);
}
expect(testCall).toThrow(TypeError);
});
- it('should call the _registerMultipleEvents method', function() {
+ it('should call the _registerMultipleEvents method', function () {
expect(_registerMultipleEvents).toHaveBeenCalled();
});
- it('should pass the kolibriModule to the _registerMultipleEvents method', function() {
+ it('should pass the kolibriModule to the _registerMultipleEvents method', function () {
expect(_registerMultipleEvents).toHaveBeenCalledWith(kolibriModule);
});
// _registerOneTimeEvents is not being called
- xit('should call the _registerOneTimeEvents method', function() {
+ xit('should call the _registerOneTimeEvents method', function () {
expect(_registerOneTimeEvents).toHaveBeenCalled();
});
- xit('should pass the kolibriModule to the _registerOneTimeEvents method', function() {
+ xit('should pass the kolibriModule to the _registerOneTimeEvents method', function () {
expect(_registerOneTimeEvents).toHaveBeenCalledWith(kolibriModule);
});
- it('should not call the trigger method', function() {
+ it('should not call the trigger method', function () {
expect(emit).not.toHaveBeenCalled();
});
- it('should not call the _executeCallbackBuffer method', function() {
+ it('should not call the _executeCallbackBuffer method', function () {
expect(_executeCallbackBuffer).not.toHaveBeenCalled();
});
- it('should leave the kolibriModule registry empty', function() {
+ it('should leave the kolibriModule registry empty', function () {
expect(mediator._kolibriModuleRegistry).toEqual({});
});
});
});
- describe('_registerEvents method', function() {
- it('should not throw a TypeError due to incorrect assignment of this when the eventListenerMethod is called', function() {
+ describe('_registerEvents method', function () {
+ it('should not throw a TypeError due to incorrect assignment of this when the eventListenerMethod is called', function () {
function testCall() {
mediator._registerEvents(
{
@@ -153,33 +153,33 @@ describe('Mediator', function() {
},
},
'events',
- mediator._registerRepeatedEventListener
+ mediator._registerRepeatedEventListener,
);
}
expect(testCall).not.toThrow();
});
});
- describe('_registerMultipleEvents method', function() {
+ describe('_registerMultipleEvents method', function () {
let _registerRepeatedEventListener;
- beforeEach(function() {
+ beforeEach(function () {
_registerRepeatedEventListener = jest.spyOn(mediator, '_registerRepeatedEventListener');
});
- afterEach(function() {
+ afterEach(function () {
_registerRepeatedEventListener.mockRestore();
});
- describe('called with valid but empty input', function() {
- beforeEach(function() {
+ describe('called with valid but empty input', function () {
+ beforeEach(function () {
kolibriModule = {
name: 'test',
};
mediator._registerMultipleEvents(kolibriModule);
});
- it('should not call listener registration', function() {
+ it('should not call listener registration', function () {
expect(_registerRepeatedEventListener).not.toHaveBeenCalled();
});
});
- describe('called with valid input with event object', function() {
- beforeEach(function() {
+ describe('called with valid input with event object', function () {
+ beforeEach(function () {
kolibriModule = {
name: 'test',
events: {
@@ -188,44 +188,44 @@ describe('Mediator', function() {
};
mediator._registerMultipleEvents(kolibriModule);
});
- afterEach(function() {
+ afterEach(function () {
kolibriModule = undefined;
});
- it('should call listener registration', function() {
+ it('should call listener registration', function () {
expect(_registerRepeatedEventListener).toHaveBeenCalled();
});
- it('should pass event, kolibriModule, and method to listener registration', function() {
+ it('should pass event, kolibriModule, and method to listener registration', function () {
expect(_registerRepeatedEventListener).toHaveBeenCalledWith(
'event',
kolibriModule,
- 'method'
+ 'method',
);
});
});
- describe('called with valid input with event ', function() {
- beforeEach(function() {
+ describe('called with valid input with event ', function () {
+ beforeEach(function () {
kolibriModule = {
name: 'test',
events: () => ({ event: 'method' }),
};
mediator._registerMultipleEvents(kolibriModule);
});
- afterEach(function() {
+ afterEach(function () {
kolibriModule = undefined;
});
- it('should call listener registration', function() {
+ it('should call listener registration', function () {
expect(_registerRepeatedEventListener).toHaveBeenCalled();
});
- it('should pass event, kolibriModule, and method to listener registration', function() {
+ it('should pass event, kolibriModule, and method to listener registration', function () {
expect(_registerRepeatedEventListener).toHaveBeenCalledWith(
'event',
kolibriModule,
- 'method'
+ 'method',
);
});
});
- describe('called with invalid input', function() {
- it('should throw a TypeError', function() {
+ describe('called with invalid input', function () {
+ it('should throw a TypeError', function () {
function testCall() {
mediator._registerMultipleEvents(undefined);
}
@@ -233,49 +233,49 @@ describe('Mediator', function() {
});
});
});
- describe('_registerOneTimeEvents method', function() {
+ describe('_registerOneTimeEvents method', function () {
let _registerOneTimeEventListener;
- beforeEach(function() {
+ beforeEach(function () {
_registerOneTimeEventListener = jest.spyOn(mediator, '_registerOneTimeEventListener');
});
- afterEach(function() {
+ afterEach(function () {
_registerOneTimeEventListener.mockRestore();
});
- describe('called with valid but empty input', function() {
- beforeEach(function() {
+ describe('called with valid but empty input', function () {
+ beforeEach(function () {
kolibriModule = {
name: 'test',
};
mediator._registerOneTimeEvents(kolibriModule);
});
- it('should not call listener registration', function() {
+ it('should not call listener registration', function () {
expect(_registerOneTimeEventListener).not.toHaveBeenCalled();
});
});
- describe('called with valid input with event object', function() {
- beforeEach(function() {
+ describe('called with valid input with event object', function () {
+ beforeEach(function () {
kolibriModule = {
name: 'test',
once: () => ({ event: 'method' }),
};
mediator._registerOneTimeEvents(kolibriModule);
});
- afterEach(function() {
+ afterEach(function () {
kolibriModule = undefined;
});
- it('should call listener registration', function() {
+ it('should call listener registration', function () {
expect(_registerOneTimeEventListener).toHaveBeenCalled();
});
- it('should pass event, kolibriModule, and method to listener registration', function() {
+ it('should pass event, kolibriModule, and method to listener registration', function () {
expect(_registerOneTimeEventListener).toHaveBeenCalledWith(
'event',
kolibriModule,
- 'method'
+ 'method',
);
});
});
- describe('called with valid input with event ', function() {
- beforeEach(function() {
+ describe('called with valid input with event ', function () {
+ beforeEach(function () {
kolibriModule = {
name: 'test',
once: {
@@ -284,22 +284,22 @@ describe('Mediator', function() {
};
mediator._registerOneTimeEvents(kolibriModule);
});
- afterEach(function() {
+ afterEach(function () {
kolibriModule = undefined;
});
- it('should call listener registration', function() {
+ it('should call listener registration', function () {
expect(_registerOneTimeEventListener).toHaveBeenCalled();
});
- it('should pass event, kolibriModule, and method to listener registration', function() {
+ it('should pass event, kolibriModule, and method to listener registration', function () {
expect(_registerOneTimeEventListener).toHaveBeenCalledWith(
'event',
kolibriModule,
- 'method'
+ 'method',
);
});
});
- describe('called with invalid input', function() {
- it('should throw a TypeError', function() {
+ describe('called with invalid input', function () {
+ it('should throw a TypeError', function () {
function testCall() {
mediator._registerOneTimeEvents(undefined);
}
@@ -307,114 +307,114 @@ describe('Mediator', function() {
});
});
});
- describe('_registerRepeatedEventListener method', function() {
+ describe('_registerRepeatedEventListener method', function () {
let stub, event, method;
- beforeEach(function() {
+ beforeEach(function () {
stub = jest.spyOn(mediator, '_registerEventListener');
event = 'event';
kolibriModule = { name: 'test' };
method = 'method';
mediator._registerRepeatedEventListener(event, kolibriModule, method);
});
- afterEach(function() {
+ afterEach(function () {
stub.mockRestore();
});
- it('should call _registerEventListener method', function() {
+ it('should call _registerEventListener method', function () {
expect(stub).toHaveBeenCalled();
});
- it('should pass three args to _registerEventListener method', function() {
+ it('should pass three args to _registerEventListener method', function () {
expect(stub).toHaveBeenCalledWith(event, kolibriModule, method, expect.any(Function));
});
});
- describe('_registerOneTimeEventListener method', function() {
+ describe('_registerOneTimeEventListener method', function () {
let stub, event, method;
- beforeEach(function() {
+ beforeEach(function () {
event = 'event';
kolibriModule = { name: 'test' };
method = 'method';
});
- afterEach(function() {
+ afterEach(function () {
stub.mockRestore();
});
- it('should call _registerEventListener method', function() {
+ it('should call _registerEventListener method', function () {
stub = jest.spyOn(mediator, '_registerEventListener');
mediator._registerOneTimeEventListener(event, kolibriModule, method);
expect(stub).toHaveBeenCalled();
});
- it('should pass three args to _registerEventListener method', function() {
+ it('should pass three args to _registerEventListener method', function () {
stub = jest.spyOn(mediator, '_registerEventListener');
mediator._registerOneTimeEventListener(event, kolibriModule, method);
expect(stub).toHaveBeenCalledWith(event, kolibriModule, method, expect.any(Function));
});
- it('should properly invoke the listenToOnce with this set to the Mediator event object', function() {
+ it('should properly invoke the listenToOnce with this set to the Mediator event object', function () {
function testCall() {
mediator._registerOneTimeEventListener(event, kolibriModule, method);
}
expect(testCall).not.toThrow();
});
});
- describe('_registerEventListener method', function() {
+ describe('_registerEventListener method', function () {
let spy, event, method;
- beforeEach(function() {
+ beforeEach(function () {
spy = jest.fn();
event = 'event';
kolibriModule = { name: 'test' };
method = 'method';
mediator._registerEventListener(event, kolibriModule, method, spy);
});
- it('should put a callback in the callback registry', function() {
+ it('should put a callback in the callback registry', function () {
expect(mediator._callbackRegistry.test.event.method).toBeInstanceOf(Function);
});
- it('should call listen method', function() {
+ it('should call listen method', function () {
expect(spy).toHaveBeenCalled();
});
- it('should pass at least one arg to listen method', function() {
+ it('should pass at least one arg to listen method', function () {
expect(spy).toHaveBeenCalledWith(event, expect.any(Function));
});
});
- describe('stopListening method', function() {
+ describe('stopListening method', function () {
let stub, event, method;
- beforeEach(function() {
+ beforeEach(function () {
stub = jest.spyOn(mediator._eventDispatcher, '$off');
event = 'event';
kolibriModule = { name: 'test' };
method = 'method';
});
- afterEach(function() {
+ afterEach(function () {
stub.mockRestore();
});
- describe('when no callback registered', function() {
- it('should not call stopListening when no callback registered', function() {
+ describe('when no callback registered', function () {
+ it('should not call stopListening when no callback registered', function () {
mediator.stopListening(event, kolibriModule, method);
expect(stub).not.toHaveBeenCalled();
});
});
- describe('when callback is registered', function() {
+ describe('when callback is registered', function () {
let callback;
- beforeEach(function() {
- callback = function() {};
+ beforeEach(function () {
+ callback = function () {};
const obj = {};
mediator._callbackRegistry[kolibriModule.name] = obj;
obj[event] = {};
obj[event][method] = callback;
mediator.stopListening(event, kolibriModule, method);
});
- it('should call $off', function() {
+ it('should call $off', function () {
expect(stub).toHaveBeenCalled();
});
- it('should pass two args to $off method', function() {
+ it('should pass two args to $off method', function () {
expect(stub).toHaveBeenCalledWith(event, callback);
});
- it('should remove the callback from the registry', function() {
+ it('should remove the callback from the registry', function () {
const registry = mediator._callbackRegistry;
const callback = registry[kolibriModule.name][event][method];
expect(typeof callback === 'undefined').toEqual(true);
});
});
});
- describe('_executeCallbackBuffer method', function() {
+ describe('_executeCallbackBuffer method', function () {
let spy, args;
- beforeEach(function() {
+ beforeEach(function () {
spy = jest.fn();
kolibriModule = {
name: 'test',
@@ -429,19 +429,19 @@ describe('Mediator', function() {
];
mediator._executeCallbackBuffer(kolibriModule);
});
- it('should call the callback ', function() {
+ it('should call the callback ', function () {
expect(spy).toHaveBeenCalled();
});
- it('should pass the args to the callback ', function() {
+ it('should pass the args to the callback ', function () {
expect(spy).toHaveBeenLastCalledWith(...args);
});
- it('should remove the entry from callback registry', function() {
+ it('should remove the entry from callback registry', function () {
expect(typeof mediator._callbackBuffer.test === 'undefined').toEqual(true);
});
});
- describe('registerKolibriModuleAsync method', function() {
+ describe('registerKolibriModuleAsync method', function () {
let stub;
- beforeEach(function() {
+ beforeEach(function () {
const kolibriModuleUrls = ['test.js', 'test1.js'];
const events = {
event: 'method',
@@ -452,49 +452,49 @@ describe('Mediator', function() {
stub = jest.spyOn(mediator._eventDispatcher, '$on');
mediator.registerKolibriModuleAsync(kolibriModuleName, kolibriModuleUrls, events, once);
});
- afterEach(function() {
+ afterEach(function () {
stub.mockRestore();
});
- it('should add create a callback buffer for the kolibriModule', function() {
+ it('should add create a callback buffer for the kolibriModule', function () {
expect(typeof mediator._callbackBuffer[kolibriModuleName] !== 'undefined').toEqual(true);
});
- it('should put two entries in the async callback registry', function() {
+ it('should put two entries in the async callback registry', function () {
expect(mediator._asyncCallbackRegistry[kolibriModuleName].length).toEqual(2);
});
- it('should put a callback in each entry in the async callback registry', function() {
+ it('should put a callback in each entry in the async callback registry', function () {
const registry = mediator._asyncCallbackRegistry;
expect(registry[kolibriModuleName][0].callback).toBeInstanceOf(Function);
expect(registry[kolibriModuleName][1].callback).toBeInstanceOf(Function);
});
- it('should call $on twice', function() {
+ it('should call $on twice', function () {
expect(stub).toHaveBeenCalledTimes(2);
});
- it('should pass both events to $on', function() {
+ it('should pass both events to $on', function () {
expect(stub).toHaveBeenCalledWith('event', expect.any(Function));
expect(stub).toHaveBeenCalledWith('once', expect.any(Function));
});
- describe('async callbacks', function() {
+ describe('async callbacks', function () {
let args;
- beforeEach(function() {
+ beforeEach(function () {
args = ['this', 'that'];
mediator._asyncCallbackRegistry[kolibriModuleName][0].callback(...args);
});
- it('should add an entry to the callback buffer when called', function() {
+ it('should add an entry to the callback buffer when called', function () {
expect(mediator._callbackBuffer[kolibriModuleName].length).toEqual(1);
});
- it('should add args in the callback buffer when called', function() {
+ it('should add args in the callback buffer when called', function () {
expect(mediator._callbackBuffer[kolibriModuleName][0].args).toEqual(args);
});
});
});
- describe('_clearAsyncCallbacks method', function() {
+ describe('_clearAsyncCallbacks method', function () {
let event, stub, callback;
- beforeEach(function() {
+ beforeEach(function () {
kolibriModule = {
name: 'test',
};
event = 'event';
- callback = function() {};
+ callback = function () {};
mediator._asyncCallbackRegistry[kolibriModule.name] = [
{
event: event,
@@ -504,34 +504,34 @@ describe('Mediator', function() {
stub = jest.spyOn(mediator._eventDispatcher, '$off');
mediator._clearAsyncCallbacks(kolibriModule);
});
- afterEach(function() {
+ afterEach(function () {
stub.mockRestore();
});
- it('should clear the callbacks', function() {
+ it('should clear the callbacks', function () {
expect(typeof mediator._asyncCallbackRegistry[kolibriModule.name] === 'undefined').toEqual(
- true
+ true,
);
});
- it('should call $off once', function() {
+ it('should call $off once', function () {
expect(stub).toHaveBeenCalledTimes(1);
});
- it('should call $off with two args', function() {
+ it('should call $off with two args', function () {
expect(stub).toHaveBeenCalledWith(event, callback);
});
});
- describe('emit method', function() {
+ describe('emit method', function () {
let stub;
- beforeEach(function() {
+ beforeEach(function () {
stub = jest.spyOn(mediator._eventDispatcher, '$emit');
});
- afterEach(function() {
+ afterEach(function () {
mediator._eventDispatcher.$emit.mockRestore();
});
- it('should call the event dispatcher $emit', function() {
+ it('should call the event dispatcher $emit', function () {
mediator.emit('yo');
expect(stub).toHaveBeenCalled();
});
- it('should proxy all arguments to the event dispatcher $emit', function() {
+ it('should proxy all arguments to the event dispatcher $emit', function () {
const arg1 = 'this';
const arg2 = 'that';
const arg3 = ['four'];
@@ -539,25 +539,25 @@ describe('Mediator', function() {
expect(stub).toHaveBeenCalledWith(arg1, arg2, arg3);
});
});
- describe('registerLanguageAssets method', function() {
+ describe('registerLanguageAssets method', function () {
const moduleName = 'test';
const language = 'test_lang';
const messageMap = {
test: 'test message',
};
let spy;
- beforeEach(function() {
+ beforeEach(function () {
Vue.registerMessages = jest.fn();
spy = Vue.registerMessages;
});
- afterEach(function() {
+ afterEach(function () {
spy.mockRestore();
});
- it('should call Vue.registerMessages once', function() {
+ it('should call Vue.registerMessages once', function () {
mediator.registerLanguageAssets(moduleName, language, messageMap);
expect(spy).toHaveBeenCalledTimes(1);
});
- it('should call Vue.registerMessages with arguments language and messageMap', function() {
+ it('should call Vue.registerMessages with arguments language and messageMap', function () {
mediator.registerLanguageAssets(moduleName, language, messageMap);
expect(spy).toHaveBeenCalledWith(language, messageMap);
});
diff --git a/kolibri/core/assets/src/core-app/baseClient.js b/kolibri/core/assets/src/core-app/baseClient.js
index 27b92c6a940..cd654951481 100644
--- a/kolibri/core/assets/src/core-app/baseClient.js
+++ b/kolibri/core/assets/src/core-app/baseClient.js
@@ -11,7 +11,7 @@ export default function clientFactory(options) {
xsrfCookieName: 'kolibri_csrftoken',
xsrfHeaderName: 'X-CSRFToken',
paramsSerializer: {
- serialize: function(params) {
+ serialize: function (params) {
// Do custom querystring stingifying to comma separate array params
return qs.stringify(params, { arrayFormat: 'comma' });
},
@@ -20,7 +20,7 @@ export default function clientFactory(options) {
});
client.interceptors.response.use(
response => response,
- function(error) {
+ function (error) {
if (!error) {
error = {};
}
@@ -30,7 +30,7 @@ export default function clientFactory(options) {
};
}
return Promise.reject(error);
- }
+ },
);
return client;
}
diff --git a/kolibri/core/assets/src/core-app/client.js b/kolibri/core/assets/src/core-app/client.js
index 7515e6b8ca1..3355258c4f5 100644
--- a/kolibri/core/assets/src/core-app/client.js
+++ b/kolibri/core/assets/src/core-app/client.js
@@ -15,7 +15,7 @@ export const logging = logger.getLogger(__filename);
const baseClient = clientFactory();
// Disconnection handler interceptor
-baseClient.interceptors.request.use(function(config) {
+baseClient.interceptors.request.use(function (config) {
if (!store.getters.connected) {
// If the vuex state records that we are not currently connected then cancel all
// outgoing requests.
@@ -29,7 +29,7 @@ baseClient.interceptors.request.use(function(config) {
// Login timeout detection interceptor and disconnection monitoring
baseClient.interceptors.response.use(
response => response,
- function(error) {
+ function (error) {
// If we receive a 403 response from the server, it is possible that the user
// is attempting to access information they are not allowed to see.
// However, more likely, it is because their login has timed out, but the frontend
@@ -55,7 +55,7 @@ baseClient.interceptors.response.use(
}
}
return Promise.reject(error);
- }
+ },
);
const client = options => {
@@ -80,14 +80,14 @@ const client = options => {
if (typeof options === 'string') {
options = { url: options };
logging.warn(
- 'passing the URL as the only argument is deprecated, please use url option instead'
+ 'passing the URL as the only argument is deprecated, please use url option instead',
);
}
const headers = { ...(options.headers || {}), 'X-Requested-With': 'XMLHttpRequest' };
if (options.multipart) {
headers['Content-Type'] = 'multipart/form-data';
- options.transformRequest = function(data) {
+ options.transformRequest = function (data) {
const fd = new FormData();
Object.keys(data).forEach(item => {
fd.append(item, data[item]);
@@ -104,7 +104,7 @@ const client = options => {
Object.defineProperty(response, 'entity', {
get() {
logging.warn(
- 'entity is deprecated for accessing response data, please use the data key instead'
+ 'entity is deprecated for accessing response data, please use the data key instead',
);
return response.data;
},
diff --git a/kolibri/core/assets/src/core-app/index.js b/kolibri/core/assets/src/core-app/index.js
index 10e451939c4..c3f76a9d965 100644
--- a/kolibri/core/assets/src/core-app/index.js
+++ b/kolibri/core/assets/src/core-app/index.js
@@ -49,7 +49,7 @@ setupPluginMediator(coreApp);
initializeTheme();
// monitor page visibility
-document.addEventListener('visibilitychange', function() {
+document.addEventListener('visibilitychange', function () {
store.dispatch('setPageVisibility');
});
diff --git a/kolibri/core/assets/src/core-app/pluginMediator.js b/kolibri/core/assets/src/core-app/pluginMediator.js
index 7dbfa0fdbc6..abba184b664 100644
--- a/kolibri/core/assets/src/core-app/pluginMediator.js
+++ b/kolibri/core/assets/src/core-app/pluginMediator.js
@@ -464,7 +464,7 @@ export default function pluginMediatorFactory(facade) {
url.includes(languageDirections.RTL)) ||
(languageDirection === languageDirections.LTR &&
!url.includes(languageDirections.RTL)) ||
- !url.endsWith('css')
+ !url.endsWith('css'),
);
Promise.all(urls.map(scriptLoader))
// Load all the urls that we just filtered (all the javascript
@@ -486,7 +486,7 @@ export default function pluginMediatorFactory(facade) {
if (this._kolibriModuleRegistry[kolibriModuleName]) {
storeTags(this._kolibriModuleRegistry[kolibriModuleName]);
resolve(
- mergeMixin(this._kolibriModuleRegistry[kolibriModuleName].rendererComponent)
+ mergeMixin(this._kolibriModuleRegistry[kolibriModuleName].rendererComponent),
);
} else {
// Or wait until the module has been registered
@@ -494,7 +494,7 @@ export default function pluginMediatorFactory(facade) {
if (moduleName === kolibriModuleName) {
storeTags(this._kolibriModuleRegistry[kolibriModuleName]);
resolve(
- mergeMixin(this._kolibriModuleRegistry[kolibriModuleName].rendererComponent)
+ mergeMixin(this._kolibriModuleRegistry[kolibriModuleName].rendererComponent),
);
}
});
@@ -528,7 +528,7 @@ export default function pluginMediatorFactory(facade) {
(direction === languageDirections.RTL && url.includes(languageDirections.RTL)) ||
(direction === languageDirections.LTR &&
!url.includes(languageDirections.RTL) &&
- url.endsWith('css'))
+ url.endsWith('css')),
);
// Find the URL for the direction not specified
const otherCssUrl = urls.find(
@@ -536,7 +536,7 @@ export default function pluginMediatorFactory(facade) {
(direction !== languageDirections.RTL && url.includes(languageDirections.RTL)) ||
(direction !== languageDirections.LTR &&
!url.includes(languageDirections.RTL) &&
- url.endsWith('css'))
+ url.endsWith('css')),
);
if (!cssUrl || contentRendererModule.urlTags[cssUrl]) {
// There is no css file to try to load or
diff --git a/kolibri/core/assets/src/exams/utils.js b/kolibri/core/assets/src/exams/utils.js
index 0a164939e04..3ce86f6da7f 100644
--- a/kolibri/core/assets/src/exams/utils.js
+++ b/kolibri/core/assets/src/exams/utils.js
@@ -41,9 +41,9 @@ function convertExamQuestionSourcesV0V2(questionSources, seed, questionIds) {
exercise_id: val.exercise_id,
title: val.title,
questionNumber,
- }))
+ })),
),
- []
+ [],
);
const shuffledExamQuestions = seededShuffle(examQuestions, seed);
const shuffledExerciseQuestions = {};
@@ -56,7 +56,7 @@ function convertExamQuestionSourcesV0V2(questionSources, seed, questionIds) {
title: question.title,
counter_in_exercise:
questionIds[question.exercise_id].findIndex(
- id => id === shuffledExerciseQuestions[question.exercise_id][question.questionNumber]
+ id => id === shuffledExerciseQuestions[question.exercise_id][question.questionNumber],
) + 1,
}));
}
@@ -151,7 +151,7 @@ export async function convertExamQuestionSources(exam) {
exam.question_sources = convertExamQuestionSourcesV0V2(
exam.question_sources,
exam.seed,
- questionIds
+ questionIds,
);
// v1 -> v2 only updates the `counter_in_exercise` field if it's in camelCase
// so we can set the data_model_version to 2 here to skip that code
@@ -187,7 +187,7 @@ export async function fetchExamWithContent(exam) {
exam.question_sources.reduce((acc, section) => {
acc = [...acc, ...section.questions.map(item => item.exercise_id)];
return acc;
- }, [])
+ }, []),
);
return ContentNodeResource.fetchCollection({
diff --git a/kolibri/core/assets/src/heartbeat.js b/kolibri/core/assets/src/heartbeat.js
index 7f1171df6be..9c78fe954c8 100644
--- a/kolibri/core/assets/src/heartbeat.js
+++ b/kolibri/core/assets/src/heartbeat.js
@@ -55,7 +55,7 @@ export class HeartBeat {
this._client = clientFactory();
// Define an interceptor to monitor the response that gets returned.
this._client.interceptors.response.use(
- function(response) {
+ function (response) {
// If the response does not have one of the disconnect error codes
// then we have reconnected.
if (!store.getters.connected && !errorCodes.includes(response.status)) {
@@ -65,7 +65,7 @@ export class HeartBeat {
}
return response;
},
- function(error) {
+ function (error) {
const { connected, reconnectTime } = store.getters;
if (!connected) {
// If the response does not have one of the disconnect error codes
@@ -84,12 +84,12 @@ export class HeartBeat {
store.commit(
'CORE_SET_RECONNECT_TIME',
// Multiply the previous interval by our multiplier, but max out at a high interval.
- Math.min(RECONNECT_MULTIPLIER * reconnect, MAX_RECONNECT_TIME)
+ Math.min(RECONNECT_MULTIPLIER * reconnect, MAX_RECONNECT_TIME),
);
createDisconnectedSnackbar(store, heartbeat.pollSessionEndPoint);
}
return Promise.reject(error);
- }
+ },
);
}
startPolling() {
diff --git a/kolibri/core/assets/src/kolibri_app.js b/kolibri/core/assets/src/kolibri_app.js
index 44f60b9bd9f..70ec3c7eb17 100644
--- a/kolibri/core/assets/src/kolibri_app.js
+++ b/kolibri/core/assets/src/kolibri_app.js
@@ -96,8 +96,8 @@ export default class KolibriApp extends KolibriModule {
store: store,
router: router.initRoutes(this.routes),
},
- this.RootVue
- )
+ this.RootVue,
+ ),
);
}
diff --git a/kolibri/core/assets/src/logging.js b/kolibri/core/assets/src/logging.js
index 801a1bdc4f4..902174e19d1 100644
--- a/kolibri/core/assets/src/logging.js
+++ b/kolibri/core/assets/src/logging.js
@@ -23,9 +23,9 @@ class Logger {
setMessagePrefix() {
var originalFactory = this.logger.methodFactory;
- this.logger.methodFactory = function(methodName, logLevel, loggerName) {
+ this.logger.methodFactory = function (methodName, logLevel, loggerName) {
var rawMethod = originalFactory(methodName, logLevel, loggerName);
- return function(message) {
+ return function (message) {
rawMethod(`[${methodName.toUpperCase()}: ${loggerName}] ` + message);
};
};
@@ -75,7 +75,7 @@ class Logging {
if (!loggerName) {
loglevel[methodName](...args);
Object.keys(this.registeredLoggers).forEach(name =>
- this.registeredLoggers[name][methodName](...args)
+ this.registeredLoggers[name][methodName](...args),
);
} else {
this.registeredLoggers[loggerName][methodName](...args);
diff --git a/kolibri/core/assets/src/mixins/__test__/notificationStrings.spec.js b/kolibri/core/assets/src/mixins/__test__/notificationStrings.spec.js
index 48b0c57e661..f0db1b66c67 100644
--- a/kolibri/core/assets/src/mixins/__test__/notificationStrings.spec.js
+++ b/kolibri/core/assets/src/mixins/__test__/notificationStrings.spec.js
@@ -19,7 +19,7 @@ describe('Coach Notification Strings', () => {
(key, expectedPlural, expectedSingular) => {
expect(NotificationStrings.$tr(key, { count: 10 })).toEqual(expectedPlural);
expect(NotificationStrings.$tr(key, { count: 1 })).toEqual(expectedSingular);
- }
+ },
);
// Test that the rest of the messages don't need paramaters
diff --git a/kolibri/core/assets/src/mixins/commonCoreStrings.js b/kolibri/core/assets/src/mixins/commonCoreStrings.js
index a13fff1b6e7..a05091a5154 100644
--- a/kolibri/core/assets/src/mixins/commonCoreStrings.js
+++ b/kolibri/core/assets/src/mixins/commonCoreStrings.js
@@ -1567,8 +1567,8 @@ const MetadataLookup = invert(
METADATA.ContentLevels,
METADATA.ContentNodeResourceType,
METADATA.LearningActivities,
- METADATA.ResourcesNeededTypes
- )
+ METADATA.ResourcesNeededTypes,
+ ),
);
/**
diff --git a/kolibri/core/assets/src/router.js b/kolibri/core/assets/src/router.js
index 62c6df4010d..4c1a1c5d281 100644
--- a/kolibri/core/assets/src/router.js
+++ b/kolibri/core/assets/src/router.js
@@ -27,7 +27,7 @@ class Router {
nextCalled = true;
} else {
logging.warn(
- 'next() called multiple times - this may happen if you are invoking next() in an asynchronous handler'
+ 'next() called multiple times - this may happen if you are invoking next() in an asynchronous handler',
);
}
};
diff --git a/kolibri/core/assets/src/state/modules/core/actions.js b/kolibri/core/assets/src/state/modules/core/actions.js
index 3eaf813ae48..c7a07b3fb02 100644
--- a/kolibri/core/assets/src/state/modules/core/actions.js
+++ b/kolibri/core/assets/src/state/modules/core/actions.js
@@ -261,7 +261,7 @@ export function setChannelInfo(store) {
error => {
store.dispatch('handleApiError', { error });
return error;
- }
+ },
);
}
@@ -314,7 +314,7 @@ export function fetchUserSyncStatus(store, params) {
error => {
store.dispatch('handleApiError', { error });
return error;
- }
+ },
);
}
// for fetching an individual user
@@ -329,7 +329,7 @@ export function fetchUserSyncStatus(store, params) {
error => {
store.dispatch('handleApiError', { error });
return error;
- }
+ },
);
}
}
diff --git a/kolibri/core/assets/src/utils/__test__/generateNavRoutes.spec.js b/kolibri/core/assets/src/utils/__test__/generateNavRoutes.spec.js
index 0b7a04a7e77..5a82c483ea9 100644
--- a/kolibri/core/assets/src/utils/__test__/generateNavRoutes.spec.js
+++ b/kolibri/core/assets/src/utils/__test__/generateNavRoutes.spec.js
@@ -3,37 +3,37 @@ import { generateNavRoute } from '../generateNavRoutes';
describe('generateNavRoutes utility', () => {
it('formats correctly for path with 1 required param', () => {
expect(
- generateNavRoute('/en/facility/', '/:facility_id/classes', { facility_id: 109000000 })
+ generateNavRoute('/en/facility/', '/:facility_id/classes', { facility_id: 109000000 }),
).toEqual('/en/facility/#/109000000/classes');
});
it('formats correctly for path with required param not provided', () => {
expect(
- generateNavRoute('/en/facility/', '/:facility_id/classes', { facility_id: undefined })
+ generateNavRoute('/en/facility/', '/:facility_id/classes', { facility_id: undefined }),
).toEqual('/en/facility/');
});
it('formats correctly for path with 1 optional param', () => {
expect(
- generateNavRoute('/en/facility/', '/:facility_id?/classes', { facility_id: 109099999 })
+ generateNavRoute('/en/facility/', '/:facility_id?/classes', { facility_id: 109099999 }),
).toEqual('/en/facility/#/109099999/classes');
});
it('formats correctly for path with optional param not provided', () => {
expect(
- generateNavRoute('/en/facility/', '/:facility_id?/classes', { facility_id: undefined })
+ generateNavRoute('/en/facility/', '/:facility_id?/classes', { facility_id: undefined }),
).toEqual('/en/facility/#/classes');
});
it('formats correctly for path with required param when wrong param provided', () => {
expect(
- generateNavRoute('/en/facility/', '/:facility_id/classes', { device_id: 900034 })
+ generateNavRoute('/en/facility/', '/:facility_id/classes', { device_id: 900034 }),
).toEqual('/en/facility/');
});
it('formats correctly for path with optional param when wrong param provided', () => {
expect(
- generateNavRoute('/en/facility/', '/:facility_id?/classes', { device_id: 900034 })
+ generateNavRoute('/en/facility/', '/:facility_id?/classes', { device_id: 900034 }),
).toEqual('/en/facility/#/classes');
});
});
diff --git a/kolibri/core/assets/src/utils/i18n.js b/kolibri/core/assets/src/utils/i18n.js
index 0e577f14546..d6a227eac09 100644
--- a/kolibri/core/assets/src/utils/i18n.js
+++ b/kolibri/core/assets/src/utils/i18n.js
@@ -165,7 +165,7 @@ class Translator {
this._defaultMessages,
Vue.prototype.$formatMessage,
messageId,
- args
+ args,
);
}
// For convenience, also proxy all vue intl translation methods on this object
@@ -255,7 +255,7 @@ export function i18nSetup(skipPolyfill = false) {
require => {
res(() => require('intl'));
},
- 'intl'
+ 'intl',
);
}),
importIntlLocale(currentLanguage),
@@ -271,7 +271,7 @@ export function i18nSetup(skipPolyfill = false) {
logging.error(error);
logging.error('An error occurred trying to setup Internationalization', error);
reject();
- }
+ },
);
}
});
diff --git a/kolibri/core/assets/src/utils/intl-locale-data.js b/kolibri/core/assets/src/utils/intl-locale-data.js
index acc96761de5..48252e82924 100644
--- a/kolibri/core/assets/src/utils/intl-locale-data.js
+++ b/kolibri/core/assets/src/utils/intl-locale-data.js
@@ -8,203 +8,203 @@
*
* vue-intl and intl npm packages must both be installed for this module to function.
*/
-module.exports = function(locale) {
+module.exports = function (locale) {
switch (locale) {
case 'ar':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/ar.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/ar.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/ar.js'));
});
});
case 'bg-bg':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/bg-BG.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/bg-BG.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/bg-BG.js'));
});
});
case 'bn-bd':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/bn-BD.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/bn-BD.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/bn-BD.js'));
});
});
case 'de':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/de.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/de.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/de.js'));
});
});
case 'el':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/el.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/el.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/el.js'));
});
});
case 'en':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/en.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/en.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/en.js'));
});
});
case 'es-es':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/es-ES.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/es-ES.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/es-ES.js'));
});
});
case 'es-419':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/es-419.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/es-419.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/es-419.js'));
});
});
case 'fa':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/fa.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/fa.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/fa.js'));
});
});
case 'fr-fr':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/fr-FR.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/fr-FR.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/fr-FR.js'));
});
});
case 'ff-cm':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/ff-CM.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/ff-CM.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/ff-CM.js'));
});
});
case 'gu-in':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/gu-IN.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/gu-IN.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/gu-IN.js'));
});
});
case 'ha':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/ha.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/ha.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/ha.js'));
});
});
case 'hi-in':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/hi-IN.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/hi-IN.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/hi-IN.js'));
});
});
case 'ht':
- return new Promise(function(resolve) {
- require.ensure(['kolibri-tools/lib/i18n/locale-data/intl/ht.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['kolibri-tools/lib/i18n/locale-data/intl/ht.js'], function (require) {
resolve(() => require('kolibri-tools/lib/i18n/locale-data/intl/ht.js'));
});
});
case 'id':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/id.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/id.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/id.js'));
});
});
case 'it':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/it.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/it.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/it.js'));
});
});
case 'ka':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/ka.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/ka.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/ka.js'));
});
});
case 'km':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/km.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/km.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/km.js'));
});
});
case 'ko':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/ko.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/ko.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/ko.js'));
});
});
case 'mr':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/mr.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/mr.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/mr.js'));
});
});
case 'my':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/my.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/my.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/my.js'));
});
});
case 'ny':
- return new Promise(function(resolve) {
- require.ensure(['kolibri-tools/lib/i18n/locale-data/intl/ny.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['kolibri-tools/lib/i18n/locale-data/intl/ny.js'], function (require) {
resolve(() => require('kolibri-tools/lib/i18n/locale-data/intl/ny.js'));
});
});
case 'pt-br':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/pt-BR.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/pt-BR.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/pt-BR.js'));
});
});
case 'pt-mz':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/pt-MZ.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/pt-MZ.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/pt-MZ.js'));
});
});
case 'sw-tz':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/sw-TZ.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/sw-TZ.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/sw-TZ.js'));
});
});
case 'te':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/te.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/te.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/te.js'));
});
});
case 'uk':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/uk.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/uk.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/uk.js'));
});
});
case 'ur-pk':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/ur-PK.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/ur-PK.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/ur-PK.js'));
});
});
case 'vi':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/vi.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/vi.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/vi.js'));
});
});
case 'yo':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/yo.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/yo.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/yo.js'));
});
});
case 'zh-hans':
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/zh-Hans.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/zh-Hans.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/zh-Hans.js'));
});
});
default:
- return new Promise(function(resolve) {
- require.ensure(['intl/locale-data/jsonp/en.js'], function(require) {
+ return new Promise(function (resolve) {
+ require.ensure(['intl/locale-data/jsonp/en.js'], function (require) {
resolve(() => require('intl/locale-data/jsonp/en.js'));
});
});
diff --git a/kolibri/core/assets/src/utils/licenseTranslations.js b/kolibri/core/assets/src/utils/licenseTranslations.js
index 5f3af8a1cf1..d6114b875fe 100644
--- a/kolibri/core/assets/src/utils/licenseTranslations.js
+++ b/kolibri/core/assets/src/utils/licenseTranslations.js
@@ -211,11 +211,11 @@ const shortNameTranslator = createTranslator('ShortLicenseNames', licenseShortNa
const longNameTranslator = createTranslator('LongLicenseNames', licenseLongNameStrings);
const creatorDescriptionTranslator = createTranslator(
'LicenseDescriptionsForCreators',
- licenseDescriptionCreatorStrings
+ licenseDescriptionCreatorStrings,
);
const consumerDescriptionTranslator = createTranslator(
'LicenseDescriptionsForConsumers',
- licenseDescriptionConsumerStrings
+ licenseDescriptionConsumerStrings,
);
// Translated short-form license names
diff --git a/kolibri/core/assets/src/utils/setupAndLoadFonts.js b/kolibri/core/assets/src/utils/setupAndLoadFonts.js
index 1380acd28cc..25702caa65e 100644
--- a/kolibri/core/assets/src/utils/setupAndLoadFonts.js
+++ b/kolibri/core/assets/src/utils/setupAndLoadFonts.js
@@ -61,12 +61,12 @@ function loadFullFontsProgressively() {
// passing the language name to 'load' for its glyphs, not its value per se
const string = availableLanguages[currentLanguage].lang_name;
Promise.all([uiNormal.load(string, 20000), uiBold.load(string, 20000)])
- .then(function() {
+ .then(function () {
htmlEl.classList.remove(PARTIAL_FONTS);
htmlEl.classList.add(FULL_FONTS);
logging.debug(`Loaded full font for '${currentLanguage}'`);
})
- .catch(function() {
+ .catch(function () {
logging.warn(`Could not load full font for '${currentLanguage}'`);
});
}
diff --git a/kolibri/core/assets/src/utils/shuffled.js b/kolibri/core/assets/src/utils/shuffled.js
index 4df5ec8e1a1..c1aa4812ade 100644
--- a/kolibri/core/assets/src/utils/shuffled.js
+++ b/kolibri/core/assets/src/utils/shuffled.js
@@ -2,7 +2,7 @@ import shuffle from 'knuth-shuffle-seeded';
// Returns a shuffled copy of the array.
// If no seed is given, chooses one randomly.
-export default function(arr, seed = undefined) {
+export default function (arr, seed = undefined) {
if (seed === undefined) {
return shuffle(arr.slice(0), Math.random());
}
diff --git a/kolibri/core/assets/src/utils/syncTaskUtils.js b/kolibri/core/assets/src/utils/syncTaskUtils.js
index 3cf3dea0748..048484db604 100644
--- a/kolibri/core/assets/src/utils/syncTaskUtils.js
+++ b/kolibri/core/assets/src/utils/syncTaskUtils.js
@@ -121,7 +121,7 @@ export function syncFacilityTaskDisplayInfo(task) {
} else if (task.extra_metadata.device_name) {
deviceNameMsg = formatNameWithId(
task.extra_metadata.device_name,
- task.extra_metadata.device_id
+ task.extra_metadata.device_id,
);
}
const syncStep = syncTaskStatusToStepMap[task.extra_metadata.sync_state];
@@ -177,7 +177,7 @@ export const removeStatusToDescriptionMap = {
export function removeFacilityTaskDisplayInfo(task) {
const facilityName = formatNameWithId(
task.extra_metadata.facility_name,
- task.extra_metadata.facility
+ task.extra_metadata.facility,
);
const statusDescription =
removeStatusToDescriptionMap[task.status]() || getTaskString('taskUnknownStatus');
diff --git a/kolibri/core/assets/src/utils/vue-intl-locale-data.js b/kolibri/core/assets/src/utils/vue-intl-locale-data.js
index 52af39d846e..3293ca18506 100644
--- a/kolibri/core/assets/src/utils/vue-intl-locale-data.js
+++ b/kolibri/core/assets/src/utils/vue-intl-locale-data.js
@@ -8,7 +8,7 @@
*
* vue-intl and intl npm packages must both be installed for this module to function.
*/
-module.exports = function() {
+module.exports = function () {
const data = [];
data.push(require('vue-intl/locale-data/ar.js'));
data.push(require('vue-intl/locale-data/bg.js'));
diff --git a/kolibri/core/assets/src/views/AppBar.vue b/kolibri/core/assets/src/views/AppBar.vue
index d6dc1cc6a72..d379b5c5903 100644
--- a/kolibri/core/assets/src/views/AppBar.vue
+++ b/kolibri/core/assets/src/views/AppBar.vue
@@ -4,7 +4,6 @@
v-show="!$isPrint"
:style="{ backgroundColor: $themeTokens.appBar }"
>
-