From e1382771cf6bd1f66a09522e6d8d6cacbd364f4f Mon Sep 17 00:00:00 2001 From: NGPixel Date: Mon, 18 May 2020 00:45:51 -0400 Subject: [PATCH] feat: extensions check + resolver --- client/components/admin/admin-extensions.vue | 175 +++++++------------ client/store/page.js | 3 +- client/themes/default/components/page.vue | 5 +- package.json | 2 +- server/core/extensions.js | 21 +++ server/core/kernel.js | 3 + server/graph/resolvers/system.js | 9 +- server/graph/schemas/system.graphql | 9 + server/models/commentProviders.js | 4 +- server/modules/extensions/git/ext.js | 20 +++ server/modules/extensions/pandoc/ext.js | 21 +++ server/modules/extensions/puppeteer/ext.js | 21 +++ server/modules/extensions/sharp/ext.js | 19 ++ yarn.lock | 146 ++-------------- 14 files changed, 200 insertions(+), 258 deletions(-) create mode 100644 server/core/extensions.js create mode 100644 server/modules/extensions/git/ext.js create mode 100644 server/modules/extensions/pandoc/ext.js create mode 100644 server/modules/extensions/puppeteer/ext.js create mode 100644 server/modules/extensions/sharp/ext.js diff --git a/client/components/admin/admin-extensions.vue b/client/components/admin/admin-extensions.vue index 19378b98..76fc0198 100644 --- a/client/components/admin/admin-extensions.vue +++ b/client/components/admin/admin-extensions.vue @@ -17,7 +17,7 @@ v-expansion-panel-header(disable-icon-rotate) span {{ext.title}} template(v-slot:actions) - v-chip(label, color='success', small, v-if='ext.installed') Installed + v-chip(label, color='success', small, v-if='ext.isInstalled') Installed v-chip(label, color='warning', small, v-else) Not Installed v-expansion-panel-content.pa-0 v-card(flat, :class='$vuetify.theme.dark ? `grey darken-3` : `grey lighten-5`', tile) @@ -25,18 +25,15 @@ .body-2 {{ext.description}} v-divider.my-4 .body-2 - strong.mr-3 Supported Platforms: - v-chip.mr-1(label, small, :color='ext.platforms[`linux-amd64`] ? `success` : `error`') Linux (x64) - v-chip.mr-1(label, small, :color='ext.platforms[`linux-arm64`] ? `success` : `error`') Linux (arm64) - v-chip.mr-1(label, small, :color='ext.platforms[`linux-armv7`] ? `success` : `error`') Linux (armv7) - v-chip.mr-1(label, small, :color='ext.platforms.macos ? `success` : `error`') MacOS - v-chip.mr-1(label, small, :color='ext.platforms.windows ? `success` : `error`') Windows + strong.mr-2 This extensions is + v-chip.mr-2(v-if='ext.isCompatible', label, outlined, small, color='success') compatible + v-chip.mr-2(v-else, label, small, color='error') not compatible + strong with your host. v-card-chin v-spacer v-btn(disabled) v-icon(left) mdi-plus span Install - diff --git a/client/store/page.js b/client/store/page.js index e1a46a01..ac8960e5 100644 --- a/client/store/page.js +++ b/client/store/page.js @@ -19,7 +19,8 @@ const state = { view: false, post: false, manage: false - } + }, + commentsCount: 0 } export default { diff --git a/client/themes/default/components/page.vue b/client/themes/default/components/page.vue index a8ee1754..bdcc2836 100644 --- a/client/themes/default/components/page.vue +++ b/client/themes/default/components/page.vue @@ -103,10 +103,10 @@ dark style='min-width: 50px; justify-content: center;' ) - span 334 + span {{commentsCount}} .d-flex v-btn.text-none( - @click='goToComments' + @click='goToComments()' :color='$vuetify.theme.dark ? `pink` : `pink darken-3`' outlined style='flex: 1 1 100%;' @@ -441,6 +441,7 @@ export default { }, computed: { isAuthenticated: get('user/authenticated'), + commentsCount: get('page/commentsCount'), rating: { get () { return 3.5 diff --git a/package.json b/package.json index c4f432db..951656e5 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "cheerio": "1.0.0-rc.3", "chokidar": "3.4.0", "clean-css": "4.2.3", + "command-exists": "1.2.9", "compression": "1.7.4", "connect-session-knex": "1.6.0", "cookie-parser": "1.4.5", @@ -162,7 +163,6 @@ "scim-query-filter-parser": "2.0.4", "semver": "7.3.2", "serve-favicon": "2.5.0", - "sharp": "0.25.2", "simple-git": "2.4.0", "solr-node": "1.2.1", "sqlite3": "4.2.0", diff --git a/server/core/extensions.js b/server/core/extensions.js new file mode 100644 index 00000000..6eeaa010 --- /dev/null +++ b/server/core/extensions.js @@ -0,0 +1,21 @@ +const fs = require('fs-extra') +const path = require('path') + +/* global WIKI */ + +module.exports = { + ext: {}, + async init () { + const extDirs = await fs.readdir(path.join(WIKI.SERVERPATH, 'modules/extensions')) + WIKI.logger.info(`Checking for installed optional extensions...`) + for (let dir of extDirs) { + WIKI.extensions.ext[dir] = require(path.join(WIKI.SERVERPATH, 'modules/extensions', dir, 'ext.js')) + const isInstalled = await WIKI.extensions.ext[dir].check() + if (isInstalled) { + WIKI.logger.info(`Optional extension ${dir} is installed. [ OK ]`) + } else { + WIKI.logger.info(`Optional extension ${dir} was not found on this system. [ SKIPPED ]`) + } + } + } +} diff --git a/server/core/kernel.js b/server/core/kernel.js index adce5d6a..5e17e48d 100644 --- a/server/core/kernel.js +++ b/server/core/kernel.js @@ -40,6 +40,7 @@ module.exports = { inbound: new EventEmitter(), outbound: new EventEmitter() } + WIKI.extensions = require('./extensions') } catch (err) { WIKI.logger.error(err) process.exit(1) @@ -76,6 +77,8 @@ module.exports = { await WIKI.models.searchEngines.refreshSearchEnginesFromDisk() await WIKI.models.storage.refreshTargetsFromDisk() + await WIKI.extensions.init() + await WIKI.auth.activateStrategies() await WIKI.models.commentProviders.initProvider() await WIKI.models.searchEngines.initEngine() diff --git a/server/graph/resolvers/system.js b/server/graph/resolvers/system.js index af6befbc..a57eb728 100644 --- a/server/graph/resolvers/system.js +++ b/server/graph/resolvers/system.js @@ -34,7 +34,14 @@ module.exports = { result.push({ key, value }) }, []) }, - async info() { return {} } + async info () { return {} }, + async extensions () { + const exts = Object.values(WIKI.extensions.ext).map(ext => _.pick(ext, ['key', 'title', 'description', 'isInstalled'])) + for (let ext of exts) { + ext.isCompatible = await WIKI.extensions.ext[ext.key].isCompatible() + } + return exts + } }, SystemMutation: { async updateFlags (obj, args, context) { diff --git a/server/graph/schemas/system.graphql b/server/graph/schemas/system.graphql index 9af61074..88bb6e35 100644 --- a/server/graph/schemas/system.graphql +++ b/server/graph/schemas/system.graphql @@ -17,6 +17,7 @@ extend type Mutation { type SystemQuery { flags: [SystemFlag] @auth(requires: ["manage:system"]) info: SystemInfo + extensions: [SystemExtension]! @auth(requires: ["manage:system"]) } # ----------------------------------------------- @@ -112,3 +113,11 @@ type SystemImportUsersResponseFailed { email: String error: String } + +type SystemExtension { + key: String! + title: String! + description: String! + isInstalled: Boolean! + isCompatible: Boolean! +} diff --git a/server/models/commentProviders.js b/server/models/commentProviders.js index e5338d47..2a7e7282 100644 --- a/server/models/commentProviders.js +++ b/server/models/commentProviders.js @@ -45,9 +45,9 @@ module.exports = class CommentProvider extends Model { const dbProviders = await WIKI.models.commentProviders.query() // -> Fetch definitions from disk - const authDirs = await fs.readdir(path.join(WIKI.SERVERPATH, 'modules/comments')) + const commentDirs = await fs.readdir(path.join(WIKI.SERVERPATH, 'modules/comments')) let diskProviders = [] - for (let dir of authDirs) { + for (let dir of commentDirs) { const def = await fs.readFile(path.join(WIKI.SERVERPATH, 'modules/comments', dir, 'definition.yml'), 'utf8') diskProviders.push(yaml.safeLoad(def)) } diff --git a/server/modules/extensions/git/ext.js b/server/modules/extensions/git/ext.js new file mode 100644 index 00000000..63484263 --- /dev/null +++ b/server/modules/extensions/git/ext.js @@ -0,0 +1,20 @@ +const cmdExists = require('command-exists') + +module.exports = { + key: 'git', + title: 'Git', + description: 'Distributed version control system. Required for the Git storage module.', + isInstalled: false, + async isCompatible () { + return true + }, + async check () { + try { + await cmdExists('git') + this.isInstalled = true + } catch (err) { + this.isInstalled = false + } + return this.isInstalled + } +} diff --git a/server/modules/extensions/pandoc/ext.js b/server/modules/extensions/pandoc/ext.js new file mode 100644 index 00000000..6efa93c6 --- /dev/null +++ b/server/modules/extensions/pandoc/ext.js @@ -0,0 +1,21 @@ +const cmdExists = require('command-exists') +const os = require('os') + +module.exports = { + key: 'pandoc', + title: 'Pandoc', + description: 'Convert between markup formats. Required for converting from other formats such as MediaWiki, AsciiDoc, Textile and other wikis.', + async isCompatible () { + return os.arch() === 'x64' + }, + isInstalled: false, + async check () { + try { + await cmdExists('pandoc') + this.isInstalled = true + } catch (err) { + this.isInstalled = false + } + return this.isInstalled + } +} diff --git a/server/modules/extensions/puppeteer/ext.js b/server/modules/extensions/puppeteer/ext.js new file mode 100644 index 00000000..aa80110a --- /dev/null +++ b/server/modules/extensions/puppeteer/ext.js @@ -0,0 +1,21 @@ +const cmdExists = require('command-exists') +const os = require('os') + +module.exports = { + key: 'puppeteer', + title: 'Puppeteer', + description: 'Headless chromium browser for server-side rendering. Required for generating PDF versions of pages and render content elements on the server (e.g. Mermaid diagrams)', + async isCompatible () { + return os.arch() === 'x64' + }, + isInstalled: false, + async check () { + try { + await cmdExists('pandoc') + this.isInstalled = true + } catch (err) { + this.isInstalled = false + } + return this.isInstalled + } +} diff --git a/server/modules/extensions/sharp/ext.js b/server/modules/extensions/sharp/ext.js new file mode 100644 index 00000000..af45a819 --- /dev/null +++ b/server/modules/extensions/sharp/ext.js @@ -0,0 +1,19 @@ +const fs = require('fs-extra') +const os = require('os') +const path = require('path') + +/* global WIKI */ + +module.exports = { + key: 'sharp', + title: 'Sharp', + description: 'Process and transform images. Required to generate thumbnails of uploaded images and perform transformations.', + async isCompatible () { + return os.arch() === 'x64' + }, + isInstalled: false, + async check () { + this.isInstalled = await fs.pathExists(path.join(WIKI.ROOTPATH, 'node_modules/sharp')) + return this.isInstalled + } +} diff --git a/yarn.lock b/yarn.lock index 65af45d7..84bc778c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4874,11 +4874,6 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" @@ -5151,7 +5146,7 @@ color@^2.0.1: color-convert "^1.9.1" color-string "^1.5.2" -color@^3.0.0, color@^3.1.2: +color@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== @@ -5189,6 +5184,11 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +command-exists@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + commander@2: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -7193,11 +7193,6 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" @@ -7704,13 +7699,6 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.2.1" -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - fs-readdir-recursive@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" @@ -7833,11 +7821,6 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= - glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -10581,13 +10564,6 @@ minipass@^2.2.1, minipass@^2.3.5: safe-buffer "^5.1.2" yallist "^3.0.0" -minipass@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5" - integrity sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w== - dependencies: - yallist "^4.0.0" - minizlib@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" @@ -10595,14 +10571,6 @@ minizlib@^1.2.1: dependencies: minipass "^2.2.1" -minizlib@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.0.tgz#fd52c645301ef09a63a2c209697c294c6ce02cf3" - integrity sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -10651,7 +10619,7 @@ mkdirp@^0.5.3: dependencies: minimist "^1.2.5" -mkdirp@^1.0.3, mkdirp@^1.0.4, 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" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -10817,11 +10785,6 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - native-duplexpair@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/native-duplexpair/-/native-duplexpair-1.0.0.tgz#7899078e64bf3c8a3d732601b3d40ff05db58fa0" @@ -10897,18 +10860,6 @@ node-2fa@1.1.2: notp "^2.0.3" thirty-two "0.0.2" -node-abi@^2.7.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.16.0.tgz#7df94e9c0a7a189f4197ab84bac8089ef5894992" - integrity sha512-+sa0XNlWDA6T+bDLmkCUYn6W5k5W6BPRL6mqzSCs6H/xUgtl4D5x2fORKDzopKiU6wsyn/+wXlRXwXeSp+mtoA== - dependencies: - semver "^5.4.1" - -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-cache@5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/node-cache/-/node-cache-5.1.0.tgz#266786c28dcec0fd34385ee29c383e6d6f1aa5de" @@ -11060,11 +11011,6 @@ nodemailer@6.4.6: resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.4.6.tgz#d37f504f6560b36616f646a606894fe18819107f" integrity sha512-/kJ+FYVEm2HuUlw87hjSqTss+GU35D4giOpdSfGp7DO+5h6RlJj7R94YaYHOkoxu1CSaM0d3WRBtCzwXrY6MKA== -noop-logger@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" - integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= - nopt@1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" @@ -11162,7 +11108,7 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" -npmlog@^4.0.1, npmlog@^4.0.2, npmlog@^4.1.2: +npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -13207,27 +13153,6 @@ postgres-interval@^1.1.0: dependencies: xtend "^4.0.0" -prebuild-install@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.3.tgz#ef4052baac60d465f5ba6bf003c9c1de79b9da8e" - integrity sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g== - dependencies: - detect-libc "^1.0.3" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.0" - mkdirp "^0.5.1" - napi-build-utils "^1.0.1" - node-abi "^2.7.0" - noop-logger "^0.1.1" - npmlog "^4.0.1" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^3.0.3" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - which-pm-runs "^1.0.0" - precond@0.2: version "0.2.3" resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" @@ -14553,7 +14478,7 @@ 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.1.3, semver@^7.2.1, semver@^7.3.2: +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== @@ -14658,21 +14583,6 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -sharp@0.25.2: - version "0.25.2" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.25.2.tgz#f9003d73be50e9265e98f79f04fe53d8c66a3967" - integrity sha512-l1GN0kFNtJr3U9i9pt7a+vo2Ij0xv4tTKDIPx8W6G9WELhPwrMyZZJKAAQNBSI785XB4uZfS5Wpz8C9jWV4AFQ== - dependencies: - color "^3.1.2" - detect-libc "^1.0.3" - node-addon-api "^2.0.0" - npmlog "^4.1.2" - prebuild-install "^5.3.3" - semver "^7.1.3" - simple-get "^3.1.0" - tar "^6.0.1" - tunnel-agent "^0.6.0" - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -14717,20 +14627,6 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= -simple-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" - integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= - -simple-get@^3.0.3, simple-get@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3" - integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== - dependencies: - decompress-response "^4.2.0" - once "^1.3.1" - simple-concat "^1.0.0" - simple-git@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-2.4.0.tgz#b7fe438ed9b818dd6f5f3ec240f2611a499d60d4" @@ -15397,7 +15293,7 @@ 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, tar-fs@^2.0.0: +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== @@ -15431,18 +15327,6 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" -tar@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.2.tgz#5df17813468a6264ff14f766886c622b84ae2f39" - integrity sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.0" - mkdirp "^1.0.3" - yallist "^4.0.0" - tarn@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/tarn/-/tarn-1.1.5.tgz#7be88622e951738b9fa3fb77477309242cdddc2d" @@ -16630,11 +16514,6 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which-pm-runs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" - integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= - which@^1.2.14, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -16948,11 +16827,6 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - yargs-parser@^13.1.0: version "13.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"