From fe92ecf0e47d579478123bb777ba07785c184fd0 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Wed, 3 Feb 2021 21:09:20 +0100 Subject: [PATCH] feat: use ipx@0.5.x --- package.json | 2 +- playground/nuxt.config.ts | 19 +++-- playground/pages/index.vue | 4 +- src/ipx.ts | 28 +------ src/module.ts | 27 +++---- src/runtime/image.ts | 6 +- src/runtime/providers/ipx.ts | 36 ++++----- src/runtime/utils/static-map.ts | 1 - src/types/image.d.ts | 4 - src/types/module.d.ts | 35 ++++----- yarn.lock | 132 +++++++++++++++++++++++--------- 11 files changed, 158 insertions(+), 136 deletions(-) diff --git a/package.json b/package.json index 7a71d600d..b92944f80 100755 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "fs-extra": "^9.0.1", "hasha": "^5.2.2", "image-meta": "^0.0.1", - "ipx": "^0.4.8", + "ipx": "^0.5.2", "is-https": "^3.0.2", "node-fetch": "^2.6.1", "requrl": "^3.0.2", diff --git a/playground/nuxt.config.ts b/playground/nuxt.config.ts index 0d940da43..37db0e1c2 100644 --- a/playground/nuxt.config.ts +++ b/playground/nuxt.config.ts @@ -11,9 +11,10 @@ export default { '@nuxt/typescript-build' ], image: { - accept: [ - 'nuxtjs.org', - 'unsplash.com' + domains: [ + 'https://nuxtjs.org', + 'https://unsplash.com', + 'https://upload.wikimedia.org' ], twicpics: { baseURL: 'https://nuxt-demo.twic.pics' @@ -30,24 +31,22 @@ export default { imagekit: { baseURL: 'https://ik.imagekit.io/demo' }, - providers: { custom: { - provider: "~/providers/custom", + provider: '~/providers/custom', options: { - baseURL: "https://site.my" + baseURL: 'https://site.my' } } }, - presets: [ - { - name: 's50', + presets: { + s50: { modifiers: { width: 50, height: 50 } } - ], + }, intersectOptions: { rootMargin: '50px' } diff --git a/playground/pages/index.vue b/playground/pages/index.vue index faef6e969..ce7b110f8 100644 --- a/playground/pages/index.vue +++ b/playground/pages/index.vue @@ -25,8 +25,8 @@ />
{{ nuxtImgCode }}
-

SVG image from remote url

- +

SVG image from remote url

+

JPEG image inside project

diff --git a/src/ipx.ts b/src/ipx.ts index 543a82733..ff3a25286 100644 --- a/src/ipx.ts +++ b/src/ipx.ts @@ -1,25 +1,5 @@ -export function createIPXMiddleware (options) { - const { IPX, IPXMiddleware } = require('ipx') - - const ipx = new IPX({ - inputs: [ - { - name: 'remote', - adapter: 'remote', - accept: [/.*/] - }, - { - name: 'static', - adapter: 'fs', - dir: options.dir - } - ], - cache: { - dir: options.cacheDir, - cleanCron: options.clearCache - }, - sharp: options.sharp - }) - - return IPXMiddleware(ipx) +export function createIPXMiddleware (ipxOptions) { + const { createIPX, createIPXMiddleware } = require('ipx') + const ipx = createIPX(ipxOptions) + return createIPXMiddleware(ipx) } diff --git a/src/module.ts b/src/module.ts index 3e9e8d1c4..5dbdc13f5 100644 --- a/src/module.ts +++ b/src/module.ts @@ -12,17 +12,13 @@ async function imageModule (moduleOptions: ModuleOptions) { const defaults: ModuleOptions = { provider: 'static', presets: {}, - static: { - baseURL: '/_img', - dir: resolve(nuxt.options.srcDir, nuxt.options.dir.static), - clearCache: false, - cacheDir: 'node_modules/.cache/nuxt-image', /* TODO */ - accept: [], - sharp: {} - }, + dir: resolve(nuxt.options.srcDir, nuxt.options.dir.static), + domains: [], + sharp: {}, + sizes: undefined, internalUrl: '', providers: {}, - accept: [], + static: {}, intersectOptions: {} } @@ -39,10 +35,11 @@ async function imageModule (moduleOptions: ModuleOptions) { 'sizes', 'presets', 'provider', - 'intersectOptions', - 'accept' + 'intersectOptions' ]) + options.static.domains = options.domains + const providers = await resolveProviders(nuxt, options) // Transpile and alias runtime @@ -61,8 +58,12 @@ async function imageModule (moduleOptions: ModuleOptions) { }) addServerMiddleware({ - path: options.static.baseURL, - handle: createIPXMiddleware(options.static) + path: '/_ipx', + handle: createIPXMiddleware({ + dir: options.dir, + domains: options.domains, + sharp: options.sharp + }) }) nuxt.options.build.loaders = defu({ diff --git a/src/runtime/image.ts b/src/runtime/image.ts index 933b0a22a..56e12cdc3 100644 --- a/src/runtime/image.ts +++ b/src/runtime/image.ts @@ -1,6 +1,5 @@ -import { allowList } from 'allowlist' import defu from 'defu' -import { hasProtocol, joinURL } from 'ufo' +import { joinURL } from 'ufo' import type { ImageOptions, CreateImageOptions, ResolvedImage, MapToStatic, ImageCTX, $Img } from '../types/image' import { imageMeta } from './utils/meta' import { parseSize } from './utils' @@ -11,7 +10,6 @@ export function createImage (globalOptions: CreateImageOptions, nuxtContext) { const ctx: ImageCTX = { options: globalOptions, - accept: allowList(globalOptions.accept), nuxtContext } @@ -95,7 +93,7 @@ function resolveImage (ctx: ImageCTX, input: string, options: ImageOptions): Res throw new TypeError(`input must be a string (received ${typeof input}: ${JSON.stringify(input)})`) } - if (input.startsWith('data:') || (hasProtocol(input) && !ctx.accept(input))) { + if (input.startsWith('data:')) { return { url: input } diff --git a/src/runtime/providers/ipx.ts b/src/runtime/providers/ipx.ts index 91b6c463a..d462ba839 100644 --- a/src/runtime/providers/ipx.ts +++ b/src/runtime/providers/ipx.ts @@ -1,43 +1,39 @@ import { ProviderGetImage } from 'src' -import { hasProtocol, joinURL } from 'ufo' +import { joinURL, encodeQueryItem, encodePath, hasProtocol } from 'ufo' import { createOperationsGenerator } from '~image' const operationsGenerator = createOperationsGenerator({ keyMap: { - fit: 'f', + format: 'f', + fit: 'fit', width: 'w', height: 'h', resize: 's', quality: 'q', - background: 'b' + background: 'bg' }, - valueMap: { - background (value = '') { - if (value.startsWith('#')) { - return value.replace('#', 'hex_') - } - return value - } - }, - joinWith: ',', - formatter: (key, value) => `${key}_${value}` + joinWith: '&', + formatter: (key, val) => encodeQueryItem(key, val) }) -export const getImage: ProviderGetImage = (src, { modifiers = {}, baseURL = '/' } = {}) => { - const format = modifiers.format || '_' - delete modifiers.format - +export const getImage: ProviderGetImage = (src, { modifiers = {}, baseURL = '/_ipx', domains = [] } = {}) => { if (modifiers.width && modifiers.height) { modifiers.resize = `${modifiers.width}_${modifiers.height}` delete modifiers.width delete modifiers.height } - const operationsString = operationsGenerator(modifiers) || '_' + const params = operationsGenerator(modifiers) - const type = hasProtocol(src) ? 'remote' : 'static' + if (hasProtocol(src)) { + if (!domains.find(d => src.startsWith(d))) { + return { + url: src + } + } + } return { - url: joinURL(baseURL, type, format, operationsString, src) + url: joinURL(baseURL, encodePath(src) + (params ? '?' + params : '')) } } diff --git a/src/runtime/utils/static-map.ts b/src/runtime/utils/static-map.ts index 44c281a9d..4bac085fa 100644 --- a/src/runtime/utils/static-map.ts +++ b/src/runtime/utils/static-map.ts @@ -4,7 +4,6 @@ function updateImageMap () { if (typeof window.$nuxt !== 'undefined') { const pageImages = (window.$nuxt as any)._pagePayload?.data?.[0]?._img || {} Object.assign(staticImageMap, pageImages) - console.log(staticImageMap) } } diff --git a/src/types/image.d.ts b/src/types/image.d.ts index 534c1b5b3..85293e74b 100644 --- a/src/types/image.d.ts +++ b/src/types/image.d.ts @@ -1,5 +1,3 @@ -import type { AllowlistOptions, Matcher } from 'allowlist' - export interface ImageModifiers { width: number height: number @@ -34,7 +32,6 @@ export interface CreateImageOptions { provider: string intersectOptions: object sizes?: (number | string)[] - accept: AllowlistOptions } export interface ImageInfo { @@ -61,7 +58,6 @@ export interface $Img { export interface ImageCTX { options: CreateImageOptions, - accept: Matcher nuxtContext: { ssrContext: any cache?: any diff --git a/src/types/module.d.ts b/src/types/module.d.ts index 700bc4313..bb314038d 100644 --- a/src/types/module.d.ts +++ b/src/types/module.d.ts @@ -1,35 +1,30 @@ +import type { IPXOptions } from 'ipx' import type { ImageOptions } from './image' -export interface InputProvider { +export interface InputProvider { name?: string provider?: string - options?: any - baseURL?: string + options?: T } export interface ImageProviders { - cloudinary?: InputProvider, - fastly?: InputProvider, - imagekit?: InputProvider, - imgix?: InputProvider, - twicpics?: InputProvider, + cloudinary?: any + fastly?: any + imagekit?: any + imgix?: any + twicpics?: any + ipx?: Partial + static?: Partial } export interface ModuleOptions extends ImageProviders { provider: string presets: { [name: string]: ImageOptions } - static: { - baseURL: string - dir: string - clearCache: boolean | string - cacheDir: string - accept: string[] - sharp: { [key: string]: any } - } - sizes?: (number|string)[], - internalUrl?: string - accept: any + dir: string + domains: string[] + sharp: {} + sizes: (number|string)[], + internalUrl: string intersectOptions: object - providers: { [name: string]: InputProvider | any } & ImageProviders } diff --git a/yarn.lock b/yarn.lock index bac48b091..87782280e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1406,6 +1406,11 @@ ts-node "^9.0.0" typescript "~4.0" +"@nuxt/ufo@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nuxt/ufo/-/ufo-0.0.3.tgz#7673a54b81c020e7aea3a9e01e09a58c494a1eca" + integrity sha512-LQkuVafVNB9+ggRF7443AX1V1rEWRs32Frk7F2qnRLf8j/SzRzxEZ99jiZqxVho72zU7NcWQ6Jy62m4fkZC6Wg== + "@nuxt/utils-edge@2.15.0-26856070.08350560": version "2.15.0-26856070.8350560" resolved "https://registry.yarnpkg.com/@nuxt/utils-edge/-/utils-edge-2.15.0-26856070.8350560.tgz#7a28873de4e5f28760e06daab0494cb1a74d114b" @@ -2581,6 +2586,11 @@ aproba@^1.0.3, aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +arch@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" + integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== + are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -3515,6 +3525,15 @@ cli-width@^3.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== +clipboardy@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.3.0.tgz#3c2903650c68e46a91b388985bc2774287dba290" + integrity sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ== + dependencies: + arch "^2.1.1" + execa "^1.0.0" + is-wsl "^2.1.1" + cliui@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" @@ -3615,7 +3634,7 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.19.0, commander@^2.20.0: +commander@^2.19.0, commander@^2.20.0, commander@^2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -4046,13 +4065,6 @@ create-require@^1.1.0, create-require@^1.1.1: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cron@^1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/cron/-/cron-1.8.2.tgz#4ac5e3c55ba8c163d84f3407bde94632da8370ce" - integrity sha512-Gk2c4y6xKEO8FSAUTklqtfSr7oTq0CiPQeLBG5Fl0qoXpZyMcj1SG59YL+hqq04bu6/IuEA7lMkYDAplQNKkyg== - dependencies: - moment-timezone "^0.5.x" - cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -4209,6 +4221,11 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== +cssfilter@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" + integrity sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4= + cssnano-preset-default@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" @@ -5742,6 +5759,13 @@ get-port-please@^1.0.0: dependencies: fs-memo "^1.2.0" +get-port-please@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/get-port-please/-/get-port-please-2.1.0.tgz#e9dd92ddee6f383a0d61c40965a2cd396b3ed6b6" + integrity sha512-Ltp8WKR9D1ddNQ0iFOxhPXTXrIqpbLhQ54jChAyd67c+u08UAdOI/nTLPorsAbh0S/979Pwfof7O8Vu435ibag== + dependencies: + fs-memo "^1.2.0" + get-port@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" @@ -6249,6 +6273,11 @@ http-errors@~1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" +http-shutdown@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/http-shutdown/-/http-shutdown-1.2.2.tgz#41bc78fc767637c4c95179bc492f312c0ae64c5f" + integrity sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw== + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -6472,22 +6501,23 @@ ip@^1.1.5: resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= -ipx@^0.4.8: - version "0.4.8" - resolved "https://registry.yarnpkg.com/ipx/-/ipx-0.4.8.tgz#b7d09b984e59549ff00255ef123b393b473f062f" - integrity sha512-O4ZQm1tKgQsfbFjZHo+gM1JAvpFhb0QPcYmqX4WmDAASEZe8tIT2j53HMspRIllH327A3VzX/2/QIORq6/bP9g== +ipx@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/ipx/-/ipx-0.5.2.tgz#0adbed0327e905dcfefdb738d1a0748f53fa55de" + integrity sha512-W76/1MTkzLWf8PP6oYfUMnu+VdHEwC3j7mFir+CXrbKQ/aRpfU9U+4btNE4u2iPj9Pb5Rb3SBFeW2Qq9BBSPPg== dependencies: - allowlist "^0.1.1" - connect "^3.7.0" consola "^2.15.0" - cron "^1.8.2" defu "^3.2.2" + destr "^1.1.0" etag "^1.8.1" fs-extra "^9.0.1" + image-meta "^0.0.1" is-valid-path "^0.1.1" + listhen "^0.1.2" node-fetch "^2.6.1" - recursive-readdir "^2.2.2" sharp "^0.27.0" + ufo "^0.6.1" + xss "^1.0.8" is-absolute-url@^2.0.0: version "2.1.0" @@ -6840,7 +6870,7 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -is-wsl@^2.2.0: +is-wsl@^2.1.1, is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== @@ -7554,6 +7584,20 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= +listhen@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/listhen/-/listhen-0.1.2.tgz#b5b3b74049d29491fb350285588ead19a9bbd0fe" + integrity sha512-4g0fUXZXdWIppOyY1ExrMJto2A+bTu1TOUmlOyxhf4y4ar2RplL4+UvDS1QO3rQVIYSCSA8/ZcfxcruM27krPQ== + dependencies: + "@nuxt/ufo" "^0.0.3" + chalk "^4.1.0" + clipboardy "^2.3.0" + defu "^3.2.2" + get-port-please "^2.1.0" + http-shutdown "^1.2.2" + open "^7.3.0" + selfsigned "^1.10.8" + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -8081,7 +8125,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@3.0.4, minimatch@^3.0.4: +minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -8206,18 +8250,6 @@ modify-values@^1.0.0: resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== -moment-timezone@^0.5.x: - version "0.5.32" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.32.tgz#db7677cc3cc680fd30303ebd90b0da1ca0dfecc2" - integrity sha512-Z8QNyuQHQAmWucp8Knmgei8YNo28aLjJq6Ma+jy1ZSpSk5nyfRT8xgUbSQvD2+2UajISfenndwvFuH3NGS+nvA== - dependencies: - moment ">= 2.9.0" - -"moment@>= 2.9.0": - version "2.29.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" - integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== - move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -8349,6 +8381,11 @@ node-fetch@^2.6.1: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + node-html-parser@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-2.0.2.tgz#168c9cfb77ae58fe4038d84862a0fc8f2ad8e3fd" @@ -8672,6 +8709,14 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" +open@^7.3.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.0.tgz#ad95b98f871d9acb0ec8fecc557082cc9986626b" + integrity sha512-PGoBCX/lclIWlpS/R2PQuIR4NJoXh6X5AwVzE7WXnWRGvHg7+4TBCgsujUgiPpm0K1y4qvQeWnCWVTpTKZBtvA== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + opener@1.5.2, opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" @@ -10184,13 +10229,6 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" -recursive-readdir@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" - integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== - dependencies: - minimatch "3.0.4" - redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -10629,6 +10667,13 @@ schema-utils@^3.0.0: ajv "^6.12.5" ajv-keywords "^3.5.2" +selfsigned@^1.10.8: + version "1.10.8" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" + integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== + dependencies: + node-forge "^0.10.0" + "semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -11878,6 +11923,11 @@ ufo@^0.5.4: resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.5.4.tgz#a9b469fdc56fe27169f6f474ed590cc7b0fd4ebe" integrity sha512-JxWFr31rhXXufMQKpV2CxFNrc1p9//aqHguWR32M0jPQnw2TNK9sERd7Bic+ZSprlmDPRPR4yuSueLNT8hsdQA== +ufo@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.6.1.tgz#a604175fb68d2f13740391a28af0c5e901124122" + integrity sha512-5fILNEcWgmB+8jEOZAS5h/KfK+BFNN84rQgfUacaQze+L5y3TIvIsBS88lG9nEKU8NRoA0/jGCw8+Jdudzqj3A== + uglify-js@^3.1.4, uglify-js@^3.5.1: version "3.12.3" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.12.3.tgz#bb26c4abe0e68c55e9776bca9bed99a4df73facf" @@ -12530,6 +12580,14 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== +xss@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.8.tgz#32feb87feb74b3dcd3d404b7a68ababf10700535" + integrity sha512-3MgPdaXV8rfQ/pNn16Eio6VXYPTkqwa0vc7GkiymmY/DqR1SE/7VPAAVZz1GJsJFrllMYO3RHfEaiUGjab6TNw== + dependencies: + commander "^2.20.3" + cssfilter "0.0.10" + xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"