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"