From 26f1c0f372673800b3ee5958c4b8ff8684b74154 Mon Sep 17 00:00:00 2001 From: NGPixel Date: Fri, 2 Apr 2021 00:39:11 -0400 Subject: [PATCH 1/3] feat: convert page --- client/components/common/nav-header.vue | 14 ++- client/components/common/page-convert.vue | 122 ++++++++++++++++++++ client/store/page.js | 1 + client/themes/default/components/page.vue | 22 +++- package.json | 2 + server/graph/resolvers/page.js | 16 +++ server/graph/schemas/page.graphql | 5 + server/models/pages.js | 133 ++++++++++++++++++++++ server/views/page.pug | 1 + yarn.lock | 17 +++ 10 files changed, 331 insertions(+), 2 deletions(-) create mode 100644 client/components/common/page-convert.vue diff --git a/client/components/common/nav-header.vue b/client/components/common/nav-header.vue index f1b6e687..d8fc3c80 100644 --- a/client/components/common/nav-header.vue +++ b/client/components/common/nav-header.vue @@ -150,6 +150,9 @@ v-list-item.pl-4(@click='pageSource', v-if='mode !== `source` && hasReadSourcePermission') v-list-item-avatar(size='24', tile): v-icon(color='indigo') mdi-code-tags v-list-item-title.body-2 {{$t('common:header.viewSource')}} + v-list-item.pl-4(@click='pageConvert', v-if='hasWritePagesPermission') + v-list-item-avatar(size='24', tile): v-icon(color='indigo') mdi-lightning-bolt + v-list-item-title.body-2 {{$t('common:header.convert')}} v-list-item.pl-4(@click='pageDuplicate', v-if='hasWritePagesPermission') v-list-item-avatar(size='24', tile): v-icon(color='indigo') mdi-content-duplicate v-list-item-title.body-2 {{$t('common:header.duplicate')}} @@ -237,6 +240,7 @@ page-selector(mode='move', v-model='movePageModal', :open-handler='pageMoveRename', :path='path', :locale='locale') page-selector(mode='create', v-model='duplicateOpts.modal', :open-handler='pageDuplicateHandle', :path='duplicateOpts.path', :locale='duplicateOpts.locale') page-delete(v-model='deletePageModal', v-if='path && path.length') + page-convert(v-model='convertPageModal', v-if='path && path.length') .nav-header-dev(v-if='isDevMode') v-icon mdi-alert @@ -255,7 +259,8 @@ import movePageMutation from 'gql/common/common-pages-mutation-move.gql' export default { components: { - PageDelete: () => import('./page-delete.vue') + PageDelete: () => import('./page-delete.vue'), + PageConvert: () => import('./page-convert.vue') }, props: { dense: { @@ -274,6 +279,7 @@ export default { searchAdvMenuShown: false, newPageModal: false, movePageModal: false, + convertPageModal: false, deletePageModal: false, locales: siteLangs, isDevMode: false, @@ -354,6 +360,9 @@ export default { this.$root.$on('pageMove', () => { this.pageMove() }) + this.$root.$on('pageConvert', () => { + this.pageConvert() + }) this.$root.$on('pageDuplicate', () => { this.pageDuplicate() }) @@ -416,6 +425,9 @@ export default { pageDuplicateHandle ({ locale, path }) { window.location.assign(`/e/${locale}/${path}?from=${this.$store.get('page/id')}`) }, + pageConvert () { + this.convertPageModal = true + }, pageMove () { this.movePageModal = true }, diff --git a/client/components/common/page-convert.vue b/client/components/common/page-convert.vue new file mode 100644 index 00000000..94db317c --- /dev/null +++ b/client/components/common/page-convert.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/client/store/page.js b/client/store/page.js index e6b0992e..0a72798e 100644 --- a/client/store/page.js +++ b/client/store/page.js @@ -14,6 +14,7 @@ const state = { tags: [], title: '', updatedAt: '', + editor: '', mode: '', scriptJs: '', scriptCss: '', diff --git a/client/themes/default/components/page.vue b/client/themes/default/components/page.vue index 8d5b222d..b02c40e8 100644 --- a/client/themes/default/components/page.vue +++ b/client/themes/default/components/page.vue @@ -234,6 +234,18 @@ ) v-icon(size='20') mdi-code-tags span {{$t('common:header.viewSource')}} + v-tooltip(:right='$vuetify.rtl', :left='!$vuetify.rtl', v-if='hasWritePagesPermission') + template(v-slot:activator='{ on }') + v-btn( + fab + small + color='white' + light + v-on='on' + @click='pageConvert' + ) + v-icon(size='20') mdi-lightning-bolt + span {{$t('common:header.convert')}} v-tooltip(:right='$vuetify.rtl', :left='!$vuetify.rtl', v-if='hasWritePagesPermission') template(v-slot:activator='{ on }') v-btn( @@ -314,7 +326,7 @@ import _ from 'lodash' import ClipboardJS from 'clipboard' import Vue from 'vue' -Vue.component('tabset', Tabset) +Vue.component('Tabset', Tabset) Prism.plugins.autoloader.languages_path = '/_assets/js/prism/' Prism.plugins.NormalizeWhitespace.setDefaults({ @@ -397,6 +409,10 @@ export default { type: Number, default: 0 }, + editor: { + type: String, + default: '' + }, isPublished: { type: Boolean, default: false @@ -516,6 +532,7 @@ export default { this.$store.set('page/path', this.path) this.$store.set('page/tags', this.tags) this.$store.set('page/title', this.title) + this.$store.set('page/editor', this.editor) this.$store.set('page/updatedAt', this.updatedAt) if (this.effectivePermissions) { this.$store.set('page/effectivePermissions', JSON.parse(Buffer.from(this.effectivePermissions, 'base64').toString())) @@ -597,6 +614,9 @@ export default { pageSource () { this.$root.$emit('pageSource') }, + pageConvert () { + this.$root.$emit('pageConvert') + }, pageDuplicate () { this.$root.$emit('pageDuplicate') }, diff --git a/package.json b/package.json index add282ae..afa3bf1b 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "@aoberoi/passport-slack": "1.0.5", "@azure/storage-blob": "12.2.1", "@exlinc/keycloak-passport": "1.0.2", + "@joplin/turndown-plugin-gfm": "1.0.27", "@root/csr": "0.8.1", "@root/keypairs": "0.10.1", "@root/pem": "1.0.4", @@ -176,6 +177,7 @@ "striptags": "3.1.1", "subscriptions-transport-ws": "0.9.18", "tar-fs": "2.1.0", + "turndown": "7.0.0", "twemoji": "13.0.1", "uslug": "1.0.4", "uuid": "8.3.1", diff --git a/server/graph/resolvers/page.js b/server/graph/resolvers/page.js index d1e60121..e356ac0f 100644 --- a/server/graph/resolvers/page.js +++ b/server/graph/resolvers/page.js @@ -398,6 +398,22 @@ module.exports = { return graphHelper.generateError(err) } }, + /** + * CONVERT PAGE + */ + async convert(obj, args, context) { + try { + await WIKI.models.pages.convertPage({ + ...args, + user: context.req.user + }) + return { + responseResult: graphHelper.generateSuccess('Page has been converted.') + } + } catch (err) { + return graphHelper.generateError(err) + } + }, /** * MOVE PAGE */ diff --git a/server/graph/schemas/page.graphql b/server/graph/schemas/page.graphql index a230185c..10eebc85 100644 --- a/server/graph/schemas/page.graphql +++ b/server/graph/schemas/page.graphql @@ -112,6 +112,11 @@ type PageMutation { title: String ): PageResponse @auth(requires: ["write:pages", "manage:pages", "manage:system"]) + convert( + id: Int! + editor: String! + ): DefaultResponse @auth(requires: ["write:pages", "manage:pages", "manage:system"]) + move( id: Int! destinationPath: String! diff --git a/server/models/pages.js b/server/models/pages.js index 16f5b2f1..681bba08 100644 --- a/server/models/pages.js +++ b/server/models/pages.js @@ -9,6 +9,9 @@ const striptags = require('striptags') const emojiRegex = require('emoji-regex') const he = require('he') const CleanCSS = require('clean-css') +const TurndownService = require('turndown') +const turndownPluginGfm = require('@joplin/turndown-plugin-gfm').gfm +const cheerio = require('cheerio') /* global WIKI */ @@ -140,6 +143,7 @@ module.exports = class Page extends Model { creatorId: 'uint', creatorName: 'string', description: 'string', + editorKey: 'string', isPrivate: 'boolean', isPublished: 'boolean', publishEndDate: 'string', @@ -471,6 +475,134 @@ module.exports = class Page extends Model { return page } + /** + * Convert an Existing Page + * + * @param {Object} opts Page Properties + * @returns {Promise} Promise of the Page Model Instance + */ + static async convertPage(opts) { + // -> Fetch original page + const ogPage = await WIKI.models.pages.query().findById(opts.id) + if (!ogPage) { + throw new Error('Invalid Page Id') + } + + // -> Check for page access + if (!WIKI.auth.checkAccess(opts.user, ['write:pages'], { + locale: ogPage.localeCode, + path: ogPage.path + })) { + throw new WIKI.Error.PageUpdateForbidden() + } + + // -> Check content type + const sourceContentType = ogPage.contentType + const targetContentType = _.get(_.find(WIKI.data.editors, ['key', opts.editor]), `contentType`, 'text') + const shouldConvert = sourceContentType !== targetContentType + let convertedContent = null + + // -> Convert content + if (shouldConvert) { + // -> Markdown => HTML + if (sourceContentType === 'markdown' && targetContentType === 'html') { + if (!ogPage.render) { + throw new Error('Aborted conversion because rendered page content is empty!') + } + convertedContent = ogPage.render + + const $ = cheerio.load(convertedContent, { + decodeEntities: true + }) + + if ($.root().children().length > 0) { + $('.toc-anchor').remove() + + convertedContent = $.html('body').replace('', '').replace('', '').replace(/&#x([0-9a-f]{1,6});/ig, (entity, code) => { + code = parseInt(code, 16) + + // Don't unescape ASCII characters, assuming they're encoded for a good reason + if (code < 0x80) return entity + + return String.fromCodePoint(code) + }) + } + + // -> HTML => Markdown + } else if (sourceContentType === 'html' && targetContentType === 'markdown') { + const td = new TurndownService({ + bulletListMarker: '-', + codeBlockStyle: 'fenced', + emDelimiter: '*', + fence: '```', + headingStyle: 'atx', + hr: '---', + linkStyle: 'inlined', + preformattedCode: true, + strongDelimiter: '**' + }) + + td.use(turndownPluginGfm) + + td.keep(['kbd']) + + td.addRule('subscript', { + filter: ['sub'], + replacement: c => `~${c}~` + }) + + td.addRule('superscript', { + filter: ['sup'], + replacement: c => `^${c}^` + }) + + td.addRule('underline', { + filter: ['u'], + replacement: c => `_${c}_` + }) + + td.addRule('removeTocAnchors', { + filter: (n, o) => { + return n.nodeName === 'A' && n.classList.contains('toc-anchor') + }, + replacement: c => '' + }) + + convertedContent = td.turndown(ogPage.content) + // -> Unsupported + } else { + throw new Error('Unsupported source / destination content types combination.') + } + } + + // -> Create version snapshot + if (shouldConvert) { + await WIKI.models.pageHistory.addVersion({ + ...ogPage, + isPublished: ogPage.isPublished === true || ogPage.isPublished === 1, + action: 'updated', + versionDate: ogPage.updatedAt + }) + } + + // -> Update page + await WIKI.models.pages.query().patch({ + contentType: targetContentType, + editorKey: opts.editor, + ...(convertedContent ? { content: convertedContent } : {}) + }).where('id', ogPage.id) + const page = await WIKI.models.pages.getPageFromDb(ogPage.id) + + await WIKI.models.pages.deletePageFromCache(page.hash) + WIKI.events.outbound.emit('deletePageFromCache', page.hash) + + // -> Update on Storage + await WIKI.models.storage.pageEvent({ + event: 'updated', + page + }) + } + /** * Move a Page * @@ -872,6 +1004,7 @@ module.exports = class Page extends Model { creatorId: page.creatorId, creatorName: page.creatorName, description: page.description, + editorKey: page.editorKey, extra: { css: _.get(page, 'extra.css', ''), js: _.get(page, 'extra.js', '') diff --git a/server/views/page.pug b/server/views/page.pug index 2096a7c8..cc19fbae 100644 --- a/server/views/page.pug +++ b/server/views/page.pug @@ -20,6 +20,7 @@ block body updated-at=page.updatedAt author-name=page.authorName :author-id=page.authorId + editor=page.editorKey :is-published=page.isPublished.toString() toc=Buffer.from(page.toc).toString('base64') :page-id=page.id diff --git a/yarn.lock b/yarn.lock index 9f4edca1..5058d061 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3220,6 +3220,11 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@joplin/turndown-plugin-gfm@1.0.27": + version "1.0.27" + resolved "https://registry.yarnpkg.com/@joplin/turndown-plugin-gfm/-/turndown-plugin-gfm-1.0.27.tgz#15ae15c169b88a355647065e7502f6619f0ace46" + integrity sha512-4BPgTSkhvxPI3tbjG4BPiBq0VuNZji1Y77DRWHb09GnzsrgwBI+gpo3EI6obkyIeRuN/03wzf98W5u1iau2vpQ== + "@kwsites/file-exists@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz#ad1efcac13e1987d8dbaf235ef3be5b0d96faa99" @@ -8277,6 +8282,11 @@ domhandler@^2.3.0: dependencies: domelementtype "1" +domino@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/domino/-/domino-2.1.6.tgz#fe4ace4310526e5e7b9d12c7de01b7f485a57ffe" + integrity sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ== + dompurify@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.2.0.tgz#51d34e76faa38b5d6b4e83a0678530f27fe3965c" @@ -18405,6 +18415,13 @@ tunnel@0.0.6, tunnel@^0.0.6: resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== +turndown@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/turndown/-/turndown-7.0.0.tgz#19b2a6a2d1d700387a1e07665414e4af4fec5225" + integrity sha512-G1FfxfR0mUNMeGjszLYl3kxtopC4O9DRRiMlMDDVHvU1jaBkGFg4qxIyjIk2aiKLHyDyZvZyu4qBO2guuYBy3Q== + dependencies: + domino "^2.1.6" + tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" From 84b927915e30f91331c552bc3f2c12bc471213d5 Mon Sep 17 00:00:00 2001 From: NGPixel Date: Fri, 2 Apr 2021 15:15:35 -0400 Subject: [PATCH 2/3] fix: convert page - task list + UI fixes --- client/components/common/page-convert.vue | 4 +--- .../components/editor/editor-modal-editorselect.vue | 2 +- server/models/pages.js | 13 +++++++++++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/client/components/common/page-convert.vue b/client/components/common/page-convert.vue index 94db317c..51dc94b7 100644 --- a/client/components/common/page-convert.vue +++ b/client/components/common/page-convert.vue @@ -100,9 +100,7 @@ export default { }) if (_.get(resp, 'data.pages.convert.responseResult.succeeded', false)) { this.isShown = false - _.delay(() => { - window.location.assign(`/e/${this.pageLocale}/${this.pagePath}`) - }, 400) + window.location.assign(`/e/${this.pageLocale}/${this.pagePath}`) } else { throw new Error(_.get(resp, 'data.pages.convert.responseResult.message', this.$t('common:error.unexpected'))) } diff --git a/client/components/editor/editor-modal-editorselect.vue b/client/components/editor/editor-modal-editorselect.vue index edb2ab24..b5ce35f5 100644 --- a/client/components/editor/editor-modal-editorselect.vue +++ b/client/components/editor/editor-modal-editorselect.vue @@ -96,7 +96,7 @@ img(src='/_assets/svg/editor-icon-ckeditor.svg', alt='Visual Editor', style='width: 36px;') .body-2.mt-2.primary--text Visual Editor .caption.grey--text Rich-text WYSIWYG - .caption.blue--text.text--lighten-2 {{$t('editor:select.cannotChange')}} + //- .caption.blue--text.text--lighten-2 {{$t('editor:select.cannotChange')}} v-card.radius-7.mt-2(color='teal darken-3', dark) v-card-text.text-center.py-4 diff --git a/server/models/pages.js b/server/models/pages.js index 681bba08..084577a3 100644 --- a/server/models/pages.js +++ b/server/models/pages.js @@ -488,6 +488,10 @@ module.exports = class Page extends Model { throw new Error('Invalid Page Id') } + if (ogPage.editorKey === opts.editor) { + throw new Error('Page is already using this editor. Nothing to convert.') + } + // -> Check for page access if (!WIKI.auth.checkAccess(opts.user, ['write:pages'], { locale: ogPage.localeCode, @@ -561,6 +565,15 @@ module.exports = class Page extends Model { replacement: c => `_${c}_` }) + td.addRule('taskList', { + filter: (n, o) => { + return n.nodeName === 'INPUT' && n.getAttribute('type') === 'checkbox' + }, + replacement: (c, n) => { + return n.getAttribute('checked') ? '[x] ' : '[ ] ' + } + }) + td.addRule('removeTocAnchors', { filter: (n, o) => { return n.nodeName === 'A' && n.classList.contains('toc-anchor') From f55caab359ca7715012e3f9a3b9e31f16cccf399 Mon Sep 17 00:00:00 2001 From: NGPixel Date: Fri, 2 Apr 2021 17:30:04 -0400 Subject: [PATCH 3/3] fix: convert page - handle tabsets --- package.json | 40 ++--- server/models/pages.js | 27 +++ yarn.lock | 382 ++++++++++++++++++++++++++++------------- 3 files changed, 307 insertions(+), 142 deletions(-) diff --git a/package.json b/package.json index afa3bf1b..a3f26cc1 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "bluebird": "3.7.2", "body-parser": "1.19.0", "chalk": "4.1.0", - "cheerio": "1.0.0-rc.3", + "cheerio": "1.0.0-rc.5", "chokidar": "3.4.3", "chromium-pickle-js": "0.2.0", "clean-css": "4.2.3", @@ -70,12 +70,12 @@ "dependency-graph": "0.9.0", "diff": "4.0.2", "diff2html": "3.1.14", - "dompurify": "2.2.0", + "dompurify": "2.2.7", "dotize": "0.3.0", "elasticsearch6": "npm:@elastic/elasticsearch@6", "elasticsearch7": "npm:@elastic/elasticsearch@7", - "emoji-regex": "9.2.0", - "eventemitter2": "6.4.3", + "emoji-regex": "9.2.2", + "eventemitter2": "6.4.4", "express": "4.17.1", "express-brute": "1.0.1", "express-session": "1.17.1", @@ -102,7 +102,7 @@ "katex": "0.12.0", "klaw": "3.0.0", "knex": "0.21.7", - "lodash": "4.17.20", + "lodash": "4.17.21", "luxon": "1.25.0", "markdown-it": "11.0.1", "markdown-it-abbr": "1.0.4", @@ -112,22 +112,22 @@ "markdown-it-external-links": "0.0.6", "markdown-it-footnote": "3.0.2", "markdown-it-imsize": "2.0.1", - "markdown-it-mark": "3.0.0", + "markdown-it-mark": "3.0.1", "markdown-it-mathjax": "2.0.0", "markdown-it-multimd-table": "4.0.3", "markdown-it-sub": "1.0.0", "markdown-it-sup": "1.0.0", "markdown-it-task-lists": "2.1.1", "mathjax": "3.1.2", - "mime-types": "2.1.27", + "mime-types": "2.1.30", "moment": "2.29.1", "moment-timezone": "0.5.31", - "mongodb": "3.6.2", - "ms": "2.1.2", + "mongodb": "3.6.5", + "ms": "2.1.3", "mssql": "6.2.3", "multer": "1.4.2", "mysql2": "2.2.5", - "nanoid": "3.1.15", + "nanoid": "3.1.22", "node-2fa": "1.1.2", "node-cache": "5.1.2", "nodemailer": "6.4.14", @@ -157,7 +157,7 @@ "pg-pubsub": "0.5.0", "pg-query-stream": "3.3.1", "pg-tsquery": "8.1.0", - "pug": "3.0.0", + "pug": "3.0.2", "punycode": "2.1.1", "qr-image": "3.2.0", "raven": "2.6.4", @@ -167,20 +167,20 @@ "safe-regex": "2.1.1", "sanitize-filename": "1.6.3", "scim-query-filter-parser": "2.0.4", - "semver": "7.3.2", + "semver": "7.3.5", "serve-favicon": "2.5.0", "simple-git": "2.21.0", "solr-node": "1.2.1", - "sqlite3": "5.0.0", + "sqlite3": "5.0.2", "ssh2": "0.8.9", "ssh2-promise": "0.1.7", "striptags": "3.1.1", "subscriptions-transport-ws": "0.9.18", - "tar-fs": "2.1.0", + "tar-fs": "2.1.1", "turndown": "7.0.0", - "twemoji": "13.0.1", + "twemoji": "13.0.2", "uslug": "1.0.4", - "uuid": "8.3.1", + "uuid": "8.3.2", "validate.js": "0.13.1", "winston": "3.3.3", "xss": "1.0.8", @@ -228,7 +228,7 @@ "cash-dom": "8.1.0", "chart.js": "2.9.4", "clean-webpack-plugin": "3.0.0", - "clipboard": "2.0.6", + "clipboard": "2.0.8", "codemirror": "5.58.2", "copy-webpack-plugin": "6.2.1", "core-js": "3.6.5", @@ -262,7 +262,7 @@ "i18next-xhr-backend": "3.2.2", "ignore-loader": "0.1.2", "jest": "26.6.1", - "js-beautify": "1.13.0", + "js-beautify": "1.13.5", "js-cookie": "2.2.1", "mermaid": "8.8.2", "mini-css-extract-plugin": "0.11.3", @@ -301,7 +301,7 @@ "vue-clipboards": "1.3.0", "vue-filepond": "6.0.3", "vue-hot-reload-api": "2.3.4", - "vue-loader": "15.9.3", + "vue-loader": "15.9.6", "vue-moment": "4.1.0", "vue-router": "3.4.7", "vue-status-indicator": "1.2.1", @@ -312,7 +312,7 @@ "vuetify": "2.3.15", "vuetify-loader": "1.6.0", "vuex": "3.5.1", - "vuex-pathify": "1.4.1", + "vuex-pathify": "1.4.5", "vuex-persistedstate": "3.1.0", "webpack": "4.44.2", "webpack-bundle-analyzer": "3.9.0", diff --git a/server/models/pages.js b/server/models/pages.js index 084577a3..abe2bc6e 100644 --- a/server/models/pages.js +++ b/server/models/pages.js @@ -520,8 +520,35 @@ module.exports = class Page extends Model { }) if ($.root().children().length > 0) { + // Remove header anchors $('.toc-anchor').remove() + // Attempt to convert tabsets + $('tabset').each((tabI, tabElm) => { + const tabHeaders = [] + // -> Extract templates + $(tabElm).children('template').each((tmplI, tmplElm) => { + if ($(tmplElm).attr('v-slot:tabs') === '') { + $(tabElm).before('
    ' + $(tmplElm).html() + '
') + } else { + $(tabElm).after('
' + $(tmplElm).html() + '
') + } + }) + // -> Parse tab headers + $(tabElm).prev('.tabset-headers').children((i, elm) => { + tabHeaders.push($(elm).html()) + }) + $(tabElm).prev('.tabset-headers').remove() + // -> Inject tab headers + $(tabElm).next('.markdown-tabset').children((i, elm) => { + if (tabHeaders.length > i) { + $(elm).prepend(`

${tabHeaders[i]}

`) + } + }) + $(tabElm).next('.markdown-tabset').prepend('

Tabset

') + $(tabElm).remove() + }) + convertedContent = $.html('body').replace('', '').replace('', '').replace(/&#x([0-9a-f]{1,6});/ig, (entity, code) => { code = parseInt(code, 16) diff --git a/yarn.lock b/yarn.lock index 5058d061..858f674b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5544,6 +5544,11 @@ base64-js@^1.0.2: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + base64url@3.x.x, base64url@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" @@ -5627,6 +5632,15 @@ bl@^3.0.0: dependencies: readable-stream "^3.0.1" +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + blob-util@2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" @@ -5890,6 +5904,14 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + bufferutil@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.1.tgz#3a177e8e5819a1243fe16b63a199951a7ad8d4a7" @@ -6254,17 +6276,29 @@ check-types@^8.0.3: resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== -cheerio@1.0.0-rc.3: - version "1.0.0-rc.3" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6" - integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA== - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.1" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash "^4.15.0" - parse5 "^3.0.1" +cheerio-select-tmp@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz#55bbef02a4771710195ad736d5e346763ca4e646" + integrity sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ== + dependencies: + css-select "^3.1.2" + css-what "^4.0.0" + domelementtype "^2.1.0" + domhandler "^4.0.0" + domutils "^2.4.4" + +cheerio@1.0.0-rc.5: + version "1.0.0-rc.5" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.5.tgz#88907e1828674e8f9fee375188b27dadd4f0fa2f" + integrity sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw== + dependencies: + cheerio-select-tmp "^0.1.0" + dom-serializer "~1.2.0" + domhandler "^4.0.0" + entities "~2.1.0" + htmlparser2 "^6.0.0" + parse5 "^6.0.0" + parse5-htmlparser2-tree-adapter "^6.0.0" chokidar@2.1.8, chokidar@^2.1.8: version "2.1.8" @@ -6444,10 +6478,10 @@ cli-truncate@^0.2.1: slice-ansi "0.0.4" string-width "^1.0.1" -clipboard@2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.6.tgz#52921296eec0fdf77ead1749421b21c968647376" - integrity sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg== +clipboard@2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.8.tgz#ffc6c103dd2967a83005f3f61976aa4655a4cdba" + integrity sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ== dependencies: good-listener "^1.2.2" select "^1.1.2" @@ -7170,7 +7204,7 @@ css-select-base-adapter@^0.1.1: resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== -css-select@^1.1.0, css-select@~1.2.0: +css-select@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= @@ -7190,6 +7224,17 @@ css-select@^2.0.0: domutils "^1.7.0" nth-check "^1.0.2" +css-select@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-3.1.2.tgz#d52cbdc6fee379fba97fb0d3925abbd18af2d9d8" + integrity sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA== + dependencies: + boolbase "^1.0.0" + css-what "^4.0.0" + domhandler "^4.0.0" + domutils "^2.4.3" + nth-check "^2.0.0" + css-selector-parser@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.3.0.tgz#5f1ad43e2d8eefbfdc304fcd39a521664943e3eb" @@ -7221,6 +7266,11 @@ css-what@2.1, css-what@^2.1.2: resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== +css-what@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-4.0.0.tgz#35e73761cab2eeb3d3661126b23d7aa0e8432233" + integrity sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A== + css@^2.0.0: version "2.2.4" resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" @@ -8245,20 +8295,21 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" -dom-serializer@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== +dom-serializer@^1.0.1, dom-serializer@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.2.0.tgz#3433d9136aeb3c627981daa385fc7f32d27c48f1" + integrity sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA== dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" + domelementtype "^2.0.1" + domhandler "^4.0.0" + entities "^2.0.0" domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: +domelementtype@1, domelementtype@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== @@ -8268,6 +8319,11 @@ domelementtype@^2.0.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== +domelementtype@^2.1.0, domelementtype@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + domexception@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" @@ -8282,15 +8338,22 @@ domhandler@^2.3.0: dependencies: domelementtype "1" +domhandler@^4.0.0, domhandler@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.1.0.tgz#c1d8d494d5ec6db22de99e46a149c2a4d23ddd43" + integrity sha512-/6/kmsGlMY4Tup/nGVutdrK9yQi4YjWVcVeoQmixpzjOUK1U7pQkvAPHBJeUxOgxF0J8f8lwCJSlCfD0V4CMGQ== + dependencies: + domelementtype "^2.2.0" + domino@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/domino/-/domino-2.1.6.tgz#fe4ace4310526e5e7b9d12c7de01b7f485a57ffe" integrity sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ== -dompurify@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.2.0.tgz#51d34e76faa38b5d6b4e83a0678530f27fe3965c" - integrity sha512-bqFOQ7XRmmozp0VsKdIEe8UwZYxj0yttz7l80GBtBqdVRY48cOpXH2J/CVO7AEkV51qY0EBVXfilec18mdmQ/w== +dompurify@2.2.7: + version "2.2.7" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.2.7.tgz#a5f055a2a471638680e779bd08fc334962d11fd8" + integrity sha512-jdtDffdGNY+C76jvodNTu9jt5yYj59vuTUyx+wXdzcSwAGTYZDAQkQ7Iwx9zcGrA4ixC1syU4H3RZROqRxokxg== domutils@1.5.1: version "1.5.1" @@ -8308,6 +8371,15 @@ domutils@^1.5.1, domutils@^1.7.0: dom-serializer "0" domelementtype "1" +domutils@^2.4.3, domutils@^2.4.4: + version "2.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.5.1.tgz#9b8e84b5d9f788499ae77506ea832e9b4f9aa1c0" + integrity sha512-hO1XwHMGAthA/1KL7c83oip/6UWo3FlUNIuWiWKltoiQ5oCOiqths8KknvY2jpOohUoUgnwa/+Rm7UpwpSbY/Q== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.1.0" + dot-case@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa" @@ -8480,10 +8552,10 @@ emittery@^0.7.1: resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.1.tgz#c02375a927a40948c0345cc903072597f5270451" integrity sha512-d34LN4L6h18Bzz9xpoku2nPwKxCPlPMr3EEKTkoEBi+1/+b0lcRkRJ1UVyyZaKNeqGR3swcGl6s390DNO4YVgQ== -emoji-regex@9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.0.tgz#a26da8e832b16a9753309f25e35e3c0efb9a066a" - integrity sha512-DNc3KFPK18bPdElMJnf/Pkv5TXhxFU3YFDEuGLDRtPmV4rkmCjBkCSEp22u6rBHdSN9Vlp/GK7k98prmE1Jgug== +emoji-regex@9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== emoji-regex@^7.0.1: version "7.0.3" @@ -8561,7 +8633,7 @@ enquirer@^2.3.5: dependencies: ansi-colors "^3.2.1" -entities@^1.1.1, entities@~1.1.1: +entities@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== @@ -8571,6 +8643,11 @@ entities@^2.0.0, entities@~2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== +entities@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" + integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== + entity-decode@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/entity-decode/-/entity-decode-2.0.2.tgz#e4f807e52c3294246e9347d1f2b02b07fd5f92e7" @@ -9004,7 +9081,12 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -eventemitter2@6.4.3, eventemitter2@^6.4.2: +eventemitter2@6.4.4: + version "6.4.4" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.4.tgz#aa96e8275c4dbeb017a5d0e03780c65612a1202b" + integrity sha512-HLU3NDY6wARrLCEwyGKRBvuWYyvW6mHYv72SJJAH3iJN3a6eVUvkjFkcxah1bcTgGVBBrFdIopBJPhCQFMLyXw== + +eventemitter2@^6.4.2: version "6.4.3" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.3.tgz#35c563619b13f3681e7eb05cbdaf50f56ba58820" integrity sha512-t0A2msp6BzOf+QAcI6z9XMktLj52OjGQg+8SJH6v5+3uxNpWYRR3wQmfA+6xtMU9kOC59qk9licus5dYcrYkMQ== @@ -10415,7 +10497,7 @@ html-webpack-pug-plugin@2.0.0: pug-source-gen "0.0.2" pug-walk "^1.1.7" -htmlparser2@^3.3.0, htmlparser2@^3.9.1: +htmlparser2@^3.3.0: version "3.10.1" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== @@ -10427,6 +10509,16 @@ htmlparser2@^3.3.0, htmlparser2@^3.9.1: inherits "^2.0.1" readable-stream "^3.1.1" +htmlparser2@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.0.1.tgz#422521231ef6d42e56bd411da8ba40aa36e91446" + integrity sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.4.4" + entities "^2.0.0" + http-errors@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" @@ -10690,7 +10782,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -11661,10 +11753,10 @@ js-base64@3.5.2: resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.5.2.tgz#3cc800e4f10812b55fb5ec53e7cabaef35dc6d3c" integrity sha512-VG2qfvV5rEQIVxq9UmAVyWIaOdZGt9M16BLu8vFkyWyhv709Hyg4nKUb5T+Ru+HmAr9RHdF+kQDKAhbJlcdKeQ== -js-beautify@1.13.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.13.0.tgz#a056d5d3acfd4918549aae3ab039f9f3c51eebb2" - integrity sha512-/Tbp1OVzZjbwzwJQFIlYLm9eWQ+3aYbBXLSaqb1mEJzhcQAfrqMMQYtjb6io+U6KpD0ID4F+Id3/xcjH3l/sqA== +js-beautify@1.13.5: + version "1.13.5" + resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.13.5.tgz#a08a97890cae55daf1d758d3f6577bd4a64d7014" + integrity sha512-MsXlH6Z/BiRYSkSRW3clNDqDjSpiSNOiG8xYVUBXt4k0LnGvDhlTGOlHX1VFtAdoLmtwjxMG5qiWKy/g+Ipv5w== dependencies: config-chain "^1.1.12" editorconfig "^0.15.3" @@ -12367,7 +12459,12 @@ lodash@4.17.20, lodash@^4.17.20: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== -lodash@^4.11.2, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1: +lodash@4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lodash@^4.11.2, lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -12565,10 +12662,10 @@ markdown-it-imsize@2.0.1: resolved "https://registry.yarnpkg.com/markdown-it-imsize/-/markdown-it-imsize-2.0.1.tgz#cca0427905d05338a247cb9ca9d968c5cddd5170" integrity sha1-zKBCeQXQUziiR8ucqdloxc3dUXA= -markdown-it-mark@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/markdown-it-mark/-/markdown-it-mark-3.0.0.tgz#27c3e39ef3cc310b2dde5375082c9fa912983cda" - integrity sha512-HqMWeKfMMOu4zBO0emmxsoMWmbf2cPKZY1wP6FsTbKmicFfp5y4L3KXAsNeO1rM6NTJVOrNlLKMPjWzriBGspw== +markdown-it-mark@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/markdown-it-mark/-/markdown-it-mark-3.0.1.tgz#51257db58787d78aaf46dc13418d99a9f3f0ebd3" + integrity sha512-HyxjAu6BRsdt6Xcv6TKVQnkz/E70TdGXEFHRYBGLncRE9lBFwDNLVtFojKxjJWgJ+5XxUwLaHXy+2sGBbDn+4A== markdown-it-mathjax@2.0.0: version "2.0.0" @@ -12789,17 +12886,22 @@ mime-db@1.44.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== +mime-db@1.47.0: + version "1.47.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" + integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== + "mime-db@>= 1.40.0 < 2": version "1.41.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.41.0.tgz#9110408e1f6aa1b34aef51f2c9df3caddf46b6a0" integrity sha512-B5gxBI+2K431XW8C2rcc/lhppbuji67nf9v39eH8pkWoZDxnAL0PxdpH32KYRScniF8qDHBDlI+ipgg5WrCUYw== -mime-types@2.1.27, mime-types@^2.1.27: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== +mime-types@2.1.30: + version "2.1.30" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" + integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== dependencies: - mime-db "1.44.0" + mime-db "1.47.0" mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24: version "2.1.24" @@ -12808,6 +12910,13 @@ mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24: dependencies: mime-db "1.40.0" +mime-types@^2.1.27: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + mime@1.6.0, mime@^1.4.1: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -13050,10 +13159,10 @@ moment@^2.19.3, moment@^2.27.0: resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d" integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ== -mongodb@3.6.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.6.2.tgz#1154a4ac107bf1375112d83a29c5cf97704e96b6" - integrity sha512-sSZOb04w3HcnrrXC82NEh/YGCmBuRgR+C1hZgmmv4L6dBz4BkRse6Y8/q/neXer9i95fKUBbFi4KgeceXmbsOA== +mongodb@3.6.5: + version "3.6.5" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.6.5.tgz#c27d786fd4d3c83dc19302483707d12a9d2aee5f" + integrity sha512-mQlYKw1iGbvJJejcPuyTaytq0xxlYbIoVDm2FODR+OHxyEiMR021vc32bTvamgBjCswsD54XIRwhg3yBaWqJjg== dependencies: bl "^2.2.1" bson "^1.1.4" @@ -13090,6 +13199,11 @@ ms@2.1.2, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + mssql@6.2.3: version "6.2.3" resolved "https://registry.yarnpkg.com/mssql/-/mssql-6.2.3.tgz#1d15bbe8c3057e32ee6e98596b6c323b097a6cba" @@ -13148,10 +13262,10 @@ nan@^2.12.1, nan@^2.14.0: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== -nanoid@3.1.15: - version "3.1.15" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.15.tgz#28e7c4ce56aff2d0c2d37814c7aef9d6c5b3e6f3" - integrity sha512-n8rXUZ8UU3lV6+43atPrSizqzh25n1/f00Wx1sCiE7R1sSHytZLTTiQl8DjC4IDLOnEZDlgJhy0yO4VsIpMxow== +nanoid@3.1.22: + version "3.1.22" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" + integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ== nanomatch@^1.2.9: version "1.2.13" @@ -13250,10 +13364,10 @@ node-2fa@1.1.2: notp "^2.0.3" thirty-two "0.0.2" -node-addon-api@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.0.tgz#f9afb8d777a91525244b01775ea0ddbe1125483b" - integrity sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA== +node-addon-api@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.1.0.tgz#98b21931557466c6729e51cb77cd39c965f42239" + integrity sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw== node-cache@5.1.2: version "5.1.2" @@ -13547,6 +13661,13 @@ nth-check@^1.0.2, nth-check@~1.0.1: dependencies: boolbase "~1.0.0" +nth-check@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" + integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== + dependencies: + boolbase "^1.0.0" + nullthrows@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" @@ -14012,17 +14133,22 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + parse5@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== -parse5@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" - integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== - dependencies: - "@types/node" "*" +parse5@^6.0.0, parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== parseurl@^1.3.2, parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" @@ -15784,10 +15910,10 @@ pug-attrs@^3.0.0: js-stringify "^1.0.2" pug-runtime "^3.0.0" -pug-code-gen@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-3.0.1.tgz#ff3b337b100c494ea63ef766091d27f7d73acb7e" - integrity sha512-xJIGvmXTQlkJllq6hqxxjRWcay2F9CU69TuAuiVZgHK0afOhG5txrQOcZyaPHBvSWCU/QQOqEp5XCH94rRZpBQ== +pug-code-gen@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-3.0.2.tgz#ad190f4943133bf186b60b80de483100e132e2ce" + integrity sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg== dependencies: constantinople "^4.0.1" doctypes "^1.1.0" @@ -15828,10 +15954,10 @@ pug-lexer@^4.0.0: is-expression "^3.0.0" pug-error "^1.3.3" -pug-lexer@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-5.0.0.tgz#0b779e7d8cbf0f103803675be96351942fd9a727" - integrity sha512-52xMk8nNpuyQ/M2wjZBN5gXQLIylaGkAoTk5Y1pBhVqaopaoj8Z0iVzpbFZAqitL4RHNVDZRnJDsqEYe99Ti0A== +pug-lexer@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-5.0.1.tgz#ae44628c5bef9b190b665683b288ca9024b8b0d5" + integrity sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w== dependencies: character-parser "^2.2.0" is-expression "^4.0.0" @@ -15914,6 +16040,11 @@ pug-runtime@^3.0.0: resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-3.0.0.tgz#d523025fdc0a1efe70929d1fd3a2d24121ffffb6" integrity sha512-GoEPcmQNnaTsePEdVA05bDpY+Op5VLHKayg08AQiqJBWU/yIaywEYv7TetC5dEQS3fzBBoyb2InDcZEg3mPTIA== +pug-runtime@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-3.0.1.tgz#f636976204723f35a8c5f6fad6acda2a191b83d7" + integrity sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg== + pug-source-gen@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/pug-source-gen/-/pug-source-gen-0.0.2.tgz#76d7753d89693c6846578c80da1628b8c6fc6fdb" @@ -15946,18 +16077,18 @@ pug-walk@^2.0.0: resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-2.0.0.tgz#417aabc29232bb4499b5b5069a2b2d2a24d5f5fe" integrity sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ== -pug@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pug/-/pug-3.0.0.tgz#101eecd7a236cd9906e420e17799d4d57f2b7d93" - integrity sha512-inmsJyFBSHZaiGLaguoFgJGViX0If6AcfcElimvwj9perqjDpUpw79UIEDZbWFmoGVidh08aoE+e8tVkjVJPCw== +pug@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/pug/-/pug-3.0.2.tgz#f35c7107343454e43bc27ae0ff76c731b78ea535" + integrity sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw== dependencies: - pug-code-gen "^3.0.0" + pug-code-gen "^3.0.2" pug-filters "^4.0.0" - pug-lexer "^5.0.0" + pug-lexer "^5.0.1" pug-linker "^4.0.0" pug-load "^3.0.0" pug-parser "^6.0.0" - pug-runtime "^3.0.0" + pug-runtime "^3.0.1" pug-strip-comments "^2.0.0" pump@^2.0.0: @@ -17085,16 +17216,23 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@7.3.2, semver@^7.2.1, semver@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== +semver@7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" semver@^6.0.0, semver@^6.1.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@^7.2.1, semver@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -17472,12 +17610,12 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -sqlite3@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.0.0.tgz#1bfef2151c6bc48a3ab1a6c126088bb8dd233566" - integrity sha512-rjvqHFUaSGnzxDy2AHCwhHy6Zp6MNJzCPGYju4kD8yi6bze4d1/zMTg6C7JI49b7/EM7jKMTvyfN/4ylBKdwfw== +sqlite3@5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.0.2.tgz#00924adcc001c17686e0a6643b6cbbc2d3965083" + integrity sha512-1SdTNo+BVU211Xj1csWa8lV6KM0CtucDwRyA0VHl91wEH1Mgh7RxUpI4rVvG7OhHrzCSGaVyW5g8vKvlrk9DJA== dependencies: - node-addon-api "2.0.0" + node-addon-api "^3.0.0" node-pre-gyp "^0.11.0" optionalDependencies: node-gyp "3.x" @@ -17982,22 +18120,22 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar-fs@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.0.tgz#d1cdd121ab465ee0eb9ccde2d35049d3f3daf0d5" - integrity sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg== +tar-fs@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== dependencies: chownr "^1.1.1" mkdirp-classic "^0.5.2" pump "^3.0.0" - tar-stream "^2.0.0" + tar-stream "^2.1.4" -tar-stream@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.0.tgz#d1aaa3661f05b38b5acc9b7020efdca5179a2cc3" - integrity sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw== +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== dependencies: - bl "^3.0.0" + bl "^4.0.3" end-of-stream "^1.4.1" fs-constants "^1.0.0" inherits "^2.0.3" @@ -18437,10 +18575,10 @@ twemoji-parser@13.0.0: resolved "https://registry.yarnpkg.com/twemoji-parser/-/twemoji-parser-13.0.0.tgz#bd9d1b98474f1651dc174696b45cabefdfa405af" integrity sha512-zMaGdskpH8yKjT2RSE/HwE340R4Fm+fbie4AaqjDa4H/l07YUmAvxkSfNl6awVWNRRQ0zdzLQ8SAJZuY5MgstQ== -twemoji@13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/twemoji/-/twemoji-13.0.1.tgz#57ddc8bd86c8175c11376f5f9ab322a02e739c2d" - integrity sha512-mrTBq+XpCLM4zm76NJOjLHoQNV9mHdBt3Cba/T5lS1rxn8ArwpqE47mqTocupNlkvcLxoeZJjYSUW0DU5ZwqZg== +twemoji@13.0.2: + version "13.0.2" + resolved "https://registry.yarnpkg.com/twemoji/-/twemoji-13.0.2.tgz#e7ee8d26fd0ccc23a0afe68c7b7e61bd8d14ad24" + integrity sha512-R9tDS4pEVczjVYM5SvoAJ0AcZ4EgG1h3yw1oi1m/yrXOH17OOjaaRxZU4r5TIHEy3xYbuZQLB/tJZyC6rpQVmA== dependencies: fs-extra "^8.0.1" jsonfile "^5.0.0" @@ -18784,10 +18922,10 @@ uuid@3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== -uuid@8.3.1: - version "8.3.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" - integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== +uuid@8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== uuid@^3.1.0, uuid@^3.2.1, uuid@^3.3.2: version "3.3.3" @@ -18932,10 +19070,10 @@ vue-chartjs@3.5.1: dependencies: "@types/chart.js" "^2.7.55" -vue-class-component@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-7.1.0.tgz#b33efcb10e17236d684f70b1e96f1946ec793e87" - integrity sha512-G9152NzUkz0i0xTfhk0Afc8vzdXxDR1pfN4dTwE72cskkgJtdXfrKBkMfGvDuxUh35U500g5Ve4xL8PEGdWeHg== +vue-class-component@^7.2.6: + version "7.2.6" + resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-7.2.6.tgz#8471e037b8e4762f5a464686e19e5afc708502e4" + integrity sha512-+eaQXVrAm/LldalI272PpDe3+i4mPis0ORiMYxF6Ae4hyuCh15W8Idet7wPUEs4N4YptgFHGys4UrgNQOMyO6w== vue-clipboards@1.3.0: version "1.3.0" @@ -18971,10 +19109,10 @@ vue-hot-reload-api@^2.3.0: resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.3.tgz#2756f46cb3258054c5f4723de8ae7e87302a1ccf" integrity sha512-KmvZVtmM26BQOMK1rwUZsrqxEGeKiYSZGA7SNWE6uExx8UX/cj9hq2MRV/wWC3Cq6AoeDGk57rL9YMFRel/q+g== -vue-loader@15.9.3: - version "15.9.3" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.3.tgz#0de35d9e555d3ed53969516cac5ce25531299dda" - integrity sha512-Y67VnGGgVLH5Voostx8JBZgPQTlDQeOVBLOEsjc2cXbCYBKexSKEpOA56x0YZofoDOTszrLnIShyOX1p9uCEHA== +vue-loader@15.9.6: + version "15.9.6" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.6.tgz#f4bb9ae20c3a8370af3ecf09b8126d38ffdb6b8b" + integrity sha512-j0cqiLzwbeImIC6nVIby2o/ABAWhlppyL/m5oJ67R5MloP0hj/DtFgb0Zmq3J9CG7AJ+AXIvHVnJAPBvrLyuDg== dependencies: "@vue/component-compiler-utils" "^3.1.0" hash-sum "^1.0.2" @@ -19062,12 +19200,12 @@ vuetify@2.3.15: resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-2.3.15.tgz#ea148acce8f5bc272f64f03a0d2ace09e58e092c" integrity sha512-YVJN/ld60S2mmFCKxoVFkB8X2kmuLT0E28ql4kr8HQUeCYdK8axoca/N8ZIP1hFH4NIz392f0nVpZKS4ZFZBVA== -vuex-pathify@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/vuex-pathify/-/vuex-pathify-1.4.1.tgz#ae0bbe2eac548f5027f67494f73e273b061085b1" - integrity sha512-i4CsRrOW9r67su8YiVrthTvNfjACUMTjVne6Gxsa+tAxyNhGdKLOXhlDyi3e536gDrgHFU7Uon1TfaKoErfAuA== +vuex-pathify@1.4.5: + version "1.4.5" + resolved "https://registry.yarnpkg.com/vuex-pathify/-/vuex-pathify-1.4.5.tgz#9a98e84d4e41dc236495568f65dec7de721ff395" + integrity sha512-i21nW9cEt3Qx3ieTk9lLxDfBkOEEB1nL9tQDRsSOkOYWZuJ+KiX/1RL+/Yb85EODsuKS9tHWJ5EHI5MImThmgg== dependencies: - vue-class-component "^7.1.0" + vue-class-component "^7.2.6" vuex-persistedstate@3.1.0: version "3.1.0"