feat: revamped insomnia importer

This commit is contained in:
Andrew Bastin
2022-01-14 04:40:27 +05:30
parent aeb848399a
commit bcadb142fd
3 changed files with 393 additions and 58 deletions

View File

@@ -1,13 +1,212 @@
import { convert, ImportRequest } from "insomnia-importers"
import { pipe, flow } from "fp-ts/function"
import {
HoppRESTAuth,
HoppRESTHeader,
HoppRESTParam,
HoppRESTReqBody,
HoppRESTRequest,
knownContentTypes,
makeRESTRequest,
} from "@hoppscotch/data"
import * as A from "fp-ts/Array"
import * as S from "fp-ts/string"
import * as TO from "fp-ts/TaskOption"
import * as TE from "fp-ts/TaskEither"
import { HoppRESTRequest } from "@hoppscotch/data"
import { step } from "../steps"
import { getHoppCollection } from "./postman"
import { defineImporter, IMPORTER_INVALID_FILE_FORMAT } from "."
import { parseInsomniaCollection } from "~/helpers/utils/parseInsomniaCollection"
import { Collection } from "~/newstore/collections"
import { Collection, makeCollection } from "~/newstore/collections"
// This Importer definition is less than ideal,
// would love an attempt at refactoring this
// TODO: Insomnia allows custom prefixes for Bearer token auth, Hoppscotch doesn't. We just ignore the prefix for now
type UnwrapPromise<T extends Promise<any>> = T extends Promise<infer Y>
? Y
: never
type InsomniaDoc = UnwrapPromise<ReturnType<typeof convert>>
type InsomniaResource = ImportRequest
type InsomniaFolderResource = ImportRequest & { _type: "request_group" }
type InsomniaRequestResource = ImportRequest & { _type: "request" }
const parseInsomniaDoc = (content: string) =>
TO.tryCatch(() => convert(content))
const replaceVarTemplating = flow(
S.replace(/{{\s+/g, "<<"),
S.replace(/\s+}}/g, ">>")
)
const getFoldersIn = (
folder: InsomniaFolderResource | null,
resources: InsomniaResource[]
) =>
pipe(
resources,
A.filter(
(x): x is InsomniaFolderResource =>
(x._type === "request_group" || x._type === "workspace") &&
x.parentId === (folder?._id ?? null)
)
)
const getRequestsIn = (
folder: InsomniaFolderResource | null,
resources: InsomniaResource[]
) =>
pipe(
resources,
A.filter(
(x): x is InsomniaRequestResource =>
x._type === "request" && x.parentId === (folder?._id ?? null)
)
)
/**
* The provided type by insomnia-importers, this type corrects it
*/
type InsoReqAuth =
| { type: "basic"; disabled?: boolean; username?: string; password?: string }
| {
type: "oauth2"
disabled?: boolean
accessTokenUrl?: string
authorizationUrl?: string
clientId?: string
scope?: string
}
| {
type: "bearer"
disabled?: boolean
token?: string
}
const getHoppReqAuth = (req: InsomniaRequestResource): HoppRESTAuth => {
if (!req.authentication) return { authType: "none", authActive: true }
const auth = req.authentication as InsoReqAuth
if (auth.type === "basic")
return {
authType: "basic",
authActive: true,
username: replaceVarTemplating(auth.username ?? ""),
password: replaceVarTemplating(auth.password ?? ""),
}
else if (auth.type === "oauth2")
return {
authType: "oauth-2",
authActive: !(auth.disabled ?? false),
accessTokenURL: replaceVarTemplating(auth.accessTokenUrl ?? ""),
authURL: replaceVarTemplating(auth.authorizationUrl ?? ""),
clientID: replaceVarTemplating(auth.clientId ?? ""),
oidcDiscoveryURL: "",
scope: replaceVarTemplating(auth.scope ?? ""),
token: "",
}
else if (auth.type === "bearer")
return {
authType: "bearer",
authActive: true,
token: replaceVarTemplating(auth.token ?? ""),
}
return { authType: "none", authActive: true }
}
const getHoppReqBody = (req: InsomniaRequestResource): HoppRESTReqBody => {
if (!req.body) return { contentType: null, body: null }
if (typeof req.body === "string") {
const contentType =
req.headers?.find(
(header) => header.name.toLowerCase() === "content-type"
)?.value ?? "text/plain"
return { contentType, body: replaceVarTemplating(req.body) }
}
if (req.body.mimeType === "multipart/form-data") {
return {
contentType: "multipart/form-data",
body:
req.body.params?.map((param) => ({
key: replaceVarTemplating(param.name),
value: replaceVarTemplating(param.value ?? ""),
active: !(param.disabled ?? false),
isFile: false,
})) ?? [],
}
} else if (req.body.mimeType === "application/x-www-form-urlencoded") {
return {
contentType: "application/x-www-form-urlencoded",
body:
req.body.params
?.filter((param) => !(param.disabled ?? false))
.map(
(param) =>
`${replaceVarTemplating(param.name)}: ${replaceVarTemplating(
param.value ?? ""
)}`
)
.join("\n") ?? "",
}
} else if (
Object.keys(knownContentTypes).includes(req.body.mimeType ?? "text/plain")
) {
return {
contentType: (req.body.mimeType ?? "text/plain") as any,
body: replaceVarTemplating(req.body.text ?? "") as any,
}
}
return { contentType: null, body: null }
}
const getHoppReqHeaders = (req: InsomniaRequestResource): HoppRESTHeader[] =>
req.headers?.map((header) => ({
key: replaceVarTemplating(header.name),
value: replaceVarTemplating(header.value),
active: !header.disabled,
})) ?? []
const getHoppReqParams = (req: InsomniaRequestResource): HoppRESTParam[] =>
req.parameters?.map((param) => ({
key: replaceVarTemplating(param.name),
value: replaceVarTemplating(param.value ?? ""),
active: !(param.disabled ?? false),
})) ?? []
const getHoppRequest = (req: InsomniaRequestResource): HoppRESTRequest =>
makeRESTRequest({
name: req.name ?? "Untitled Request",
method: req.method ?? "GET",
endpoint: replaceVarTemplating(req.url ?? ""),
auth: getHoppReqAuth(req),
body: getHoppReqBody(req),
headers: getHoppReqHeaders(req),
params: getHoppReqParams(req),
preRequestScript: "",
testScript: "",
})
const getHoppFolder = (
folderRes: InsomniaFolderResource,
resources: InsomniaResource[]
): Collection<HoppRESTRequest> =>
makeCollection({
name: folderRes.name ?? "",
folders: getFoldersIn(folderRes, resources).map((f) =>
getHoppFolder(f, resources)
),
requests: getRequestsIn(folderRes, resources).map(getHoppRequest),
})
const getHoppCollections = (doc: InsomniaDoc) =>
getFoldersIn(null, doc.data.resources).map((f) =>
getHoppFolder(f, doc.data.resources)
)
export default defineImporter({
name: "Insomnia Collection",
@@ -16,40 +215,17 @@ export default defineImporter({
step({
stepName: "FILE_IMPORT",
metadata: {
acceptedFileTypes: ".json",
acceptedFileTypes: ".json, .yaml",
},
}),
] as const,
importer: ([fileContent]) => {
try {
let collections = parseInsomniaCollection(fileContent)
const content = JSON.stringify(collections)
importer: ([fileContent]) =>
pipe(
fileContent,
parseInsomniaDoc,
if (collections[0]) {
const [name, folders, requests] = Object.keys(collections[0])
if (
name === "name" &&
folders === "folders" &&
requests === "requests"
) {
return TE.right(collections as Collection<HoppRESTRequest>[])
}
TO.map(getHoppCollections),
return TE.left(IMPORTER_INVALID_FILE_FORMAT)
} else if (
collections.info &&
collections.info.schema.includes("v2.1.0")
) {
// replace the variables, postman uses {{var}}, Hoppscotch uses <<var>>
collections = JSON.parse(content.replaceAll(/{{([a-z]+)}}/gi, "<<$1>>"))
collections = [getHoppCollection(collections)]
return TE.right(collections as Collection<HoppRESTRequest>[])
} else {
return TE.left(IMPORTER_INVALID_FILE_FORMAT)
}
} catch (_e) {
return TE.left(IMPORTER_INVALID_FILE_FORMAT)
}
},
TE.fromTaskOption(() => IMPORTER_INVALID_FILE_FORMAT)
),
})

View File

@@ -83,6 +83,7 @@
"graphql-language-service-parser": "^1.10.4",
"graphql-tag": "^2.12.6",
"httpsnippet": "^2.0.0",
"insomnia-importers": "^2.4.1",
"io-ts": "^2.2.16",
"js-yaml": "^4.1.0",
"json-loader": "^0.5.7",

200
pnpm-lock.yaml generated
View File

@@ -136,6 +136,7 @@ importers:
graphql-language-service-parser: ^1.10.4
graphql-tag: ^2.12.6
httpsnippet: ^2.0.0
insomnia-importers: ^2.4.1
io-ts: ^2.2.16
jest: ^27.4.5
jest-serializer-vue: ^2.0.2
@@ -232,6 +233,7 @@ importers:
graphql-language-service-parser: 1.10.4_6fc3d2884cf7cc5ceaa63c063181dac6
graphql-tag: 2.12.6_graphql@15.7.2
httpsnippet: 2.0.0
insomnia-importers: 2.4.1_openapi-types@10.0.0
io-ts: 2.2.16_fp-ts@2.11.5
js-yaml: 4.1.0
json-loader: 0.5.7
@@ -400,6 +402,20 @@ packages:
resolution: {integrity: sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==}
dev: false
/@apidevtools/swagger-parser/10.0.2_openapi-types@10.0.0:
resolution: {integrity: sha512-JFxcEyp8RlNHgBCE98nwuTkZT6eNFPc1aosWV6wPcQph72TSEEu1k3baJD4/x1qznU+JiDdz8F5pTwabZh+Dhg==}
peerDependencies:
openapi-types: '>=7'
dependencies:
'@apidevtools/json-schema-ref-parser': 9.0.9
'@apidevtools/openapi-schemas': 2.1.0
'@apidevtools/swagger-methods': 3.0.2
'@jsdevtools/ono': 7.1.3
call-me-maybe: 1.0.1
openapi-types: 10.0.0
z-schema: 4.2.4
dev: false
/@apidevtools/swagger-parser/10.0.3_openapi-types@10.0.0:
resolution: {integrity: sha512-sNiLY51vZOmSPFZA5TF35KZ2HbgYklQnTSDnkghamzLb3EkNtcQnrBQEj5AOCxHpTtXpqMCRM1CrmV2rG6nw4g==}
peerDependencies:
@@ -3708,19 +3724,19 @@ packages:
ufo: 0.7.9
dev: false
/@nuxt/kit-edge/3.0.0-27356801.e9128f3:
resolution: {integrity: sha512-hGiqZydtMiK+UhHBsdD0WC+fHeI3xyJixhY2rNPGwFrzdeTrbUy8YH451SbRPOJ8TS0RYQ+cUT6JfMr0YTpnfg==}
/@nuxt/kit-edge/3.0.0-27366343.1d741cb:
resolution: {integrity: sha512-7R9f5xoH+8gLiGSeVyKVpEPwqdbptoJ1X852gbGSMEATLb7Wc0eDVUj4/PTBMSjvYuNm54a0bGO0OG02nXZViw==}
engines: {node: ^14.16.0 || ^16.11.0 || ^17.0.0}
dependencies:
'@nuxt/schema': /@nuxt/schema-edge/3.0.0-27356801.e9128f3
'@nuxt/schema': /@nuxt/schema-edge/3.0.0-27366343.1d741cb
consola: 2.15.3
defu: 5.0.0
dotenv: 10.0.0
globby: 11.0.4
dotenv: 11.0.0
globby: 11.1.0
hash-sum: 2.0.0
jiti: 1.12.9
lodash.template: 4.5.0
mlly: 0.3.16
mlly: 0.3.17
pathe: 0.2.0
pkg-types: 0.3.2
rc9: 1.2.0
@@ -3750,8 +3766,8 @@ packages:
node-fetch: 2.6.6
dev: false
/@nuxt/schema-edge/3.0.0-27356801.e9128f3:
resolution: {integrity: sha512-LOi5OLFzxrHL7t/a7sn2+fnkNN8y9ipnLG6l6McI+vEuzXi11YeHCYt7PmoqqySXx411hd6lISmYd/aZzBgYkg==}
/@nuxt/schema-edge/3.0.0-27366343.1d741cb:
resolution: {integrity: sha512-u3EFLXiisctQlKFLEsuVYxdZroO7FnrMZV1uAOHUbgyX4/0oakhCeFbKko754HaD4wgawFHIPZ2YDJGi1eTO5g==}
engines: {node: ^14.16.0 || ^16.11.0 || ^17.0.0}
dependencies:
create-require: 1.1.1
@@ -5857,6 +5873,21 @@ packages:
normalize-path: 3.0.0
picomatch: 2.3.1
/apiconnect-wsdl/1.8.31:
resolution: {integrity: sha512-kNs26If9xCJnGolVTAt0VWIA8KrqwodQLqDRTrfc7txD54LJ+hFx638sPYEdG9jw78eifWyy+FBlS5befYSa8Q==}
engines: {node: '>=8'}
dependencies:
iconv-lite: 0.4.24
js-yaml: 3.14.1
jszip: 3.7.1
lodash: 4.17.21
q: 1.5.1
swagger-parser: 8.0.3
xml2js: 0.4.23
xmldom: 0.1.31
yauzl: 2.10.0
dev: false
/aproba/1.2.0:
resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==}
dev: false
@@ -6578,6 +6609,10 @@ packages:
node-int64: 0.4.0
dev: true
/buffer-crc32/0.2.13:
resolution: {integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=}
dev: false
/buffer-equal-constant-time/1.0.1:
resolution: {integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=}
dev: true
@@ -6828,7 +6863,6 @@ packages:
no-case: 3.0.4
tslib: 2.3.1
upper-case-first: 2.0.2
dev: true
/chalk/1.1.3:
resolution: {integrity: sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=}
@@ -6893,7 +6927,6 @@ packages:
sentence-case: 3.0.4
snake-case: 3.0.4
tslib: 2.3.1
dev: true
/char-regex/1.0.2:
resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
@@ -7345,7 +7378,6 @@ packages:
no-case: 3.0.4
tslib: 2.3.1
upper-case: 2.0.2
dev: true
/constants-browserify/1.0.0:
resolution: {integrity: sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=}
@@ -8269,6 +8301,11 @@ packages:
engines: {node: '>=10'}
dev: true
/dotenv/11.0.0:
resolution: {integrity: sha512-Fp/b504Y5W+e+FpCxTFMUZ7ZEQkQYF0rx+KZtmwixJxGQbLHrhCwo3FjZgNC8vIfrSi29PABNbMoCGD9YoiXbQ==}
engines: {node: '>=12'}
dev: true
/dotenv/8.6.0:
resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==}
engines: {node: '>=10'}
@@ -9326,6 +9363,17 @@ packages:
resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==}
dev: true
/fast-glob/3.2.10:
resolution: {integrity: sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A==}
engines: {node: '>=8.6.0'}
dependencies:
'@nodelib/fs.stat': 2.0.5
'@nodelib/fs.walk': 1.2.8
glob-parent: 5.1.2
merge2: 1.4.1
micromatch: 4.0.4
dev: true
/fast-glob/3.2.7:
resolution: {integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==}
engines: {node: '>=8'}
@@ -9381,6 +9429,12 @@ packages:
ua-parser-js: 0.7.31
dev: true
/fd-slicer/1.1.0:
resolution: {integrity: sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=}
dependencies:
pend: 1.2.0
dev: false
/figgy-pudding/3.5.2:
resolution: {integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==}
dev: false
@@ -10010,6 +10064,18 @@ packages:
merge2: 1.4.1
slash: 3.0.0
/globby/11.1.0:
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
engines: {node: '>=10'}
dependencies:
array-union: 2.1.0
dir-glob: 3.0.1
fast-glob: 3.2.10
ignore: 5.2.0
merge2: 1.4.1
slash: 3.0.0
dev: true
/globjoin/0.1.4:
resolution: {integrity: sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=}
dev: true
@@ -10368,7 +10434,6 @@ packages:
dependencies:
capital-case: 1.0.4
tslib: 2.3.1
dev: true
/helpertypes/0.0.17:
resolution: {integrity: sha512-muWKRSBsqN3MzqLdh82QfV7vWWwAYvHh3On87z898X+xZ5H2tPRQ5Y6hHA3BXSE+TueztA07iw5bInjwAT3x8A==}
@@ -10838,6 +10903,21 @@ packages:
through: 2.3.8
dev: true
/insomnia-importers/2.4.1_openapi-types@10.0.0:
resolution: {integrity: sha512-KufwGydt6WUlf7Oukqem0ra40ZPWImEBK1gqICarEMydVuzeaoPvyXDCP1r9RLHoJpV1sKUDSv14LZ6CE2j6Qg==}
hasBin: true
dependencies:
'@apidevtools/swagger-parser': 10.0.2_openapi-types@10.0.0
apiconnect-wsdl: 1.8.31
change-case: 4.1.2
commander: 7.2.0
lodash: 4.17.21
shell-quote: 1.7.3
yaml: 1.10.2
transitivePeerDependencies:
- openapi-types
dev: false
/internal-slot/1.0.3:
resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==}
engines: {node: '>= 0.4'}
@@ -12016,6 +12096,14 @@ packages:
/json-parse-even-better-errors/2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
/json-schema-ref-parser/7.1.4:
resolution: {integrity: sha512-AD7bvav0vak1/63w3jH8F7eHId/4E4EPdMAEZhGxtjktteUv9dnNB/cJy6nVnMyoTPBJnLwFK6tiQPSTeleCtQ==}
dependencies:
call-me-maybe: 1.0.1
js-yaml: 3.14.1
ono: 6.0.1
dev: false
/json-schema-traverse/0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
@@ -13020,8 +13108,8 @@ packages:
engines: {node: '>=10'}
hasBin: true
/mlly/0.3.16:
resolution: {integrity: sha512-DVydmuR8fmiMetH39kp8VXYslN0XDh+OxULuU/ov8TMwVIxDGQ8PsJIrNi6cZZaHiIYL6wtO6+sjGpVc7msKUg==}
/mlly/0.3.17:
resolution: {integrity: sha512-C3v8eHB9KqmS1ewOB5DUgljX13C3xuoaXZd5bOLtwpxk9pBZhA+wyVgYXPuP4aukQ9bKYWjy+YQVC+DmniIsgA==}
dev: true
/mocha/9.1.3:
@@ -13405,7 +13493,7 @@ packages:
/nuxt-windicss/2.2.2:
resolution: {integrity: sha512-4tvzk9d2TUFxloty187D+wmO8ZNAvpSmRJ5HQO3/AvZdMMhAl4gomXR9fCgFKQe7Fxcj9nIKNInOx8TWowjiqA==}
dependencies:
'@nuxt/kit': /@nuxt/kit-edge/3.0.0-27356801.e9128f3
'@nuxt/kit': /@nuxt/kit-edge/3.0.0-27366343.1d741cb
'@windicss/plugin-utils': 1.6.1
consola: 2.15.3
defu: 5.0.0
@@ -13551,6 +13639,14 @@ packages:
dependencies:
mimic-fn: 2.1.0
/ono/5.1.0:
resolution: {integrity: sha512-GgqRIUWErLX4l9Up0khRtbrlH8Fyj59A0nKv8V6pWEto38aUgnOGOOF7UmgFFLzFnDSc8REzaTXOc0hqEe7yIw==}
dev: false
/ono/6.0.1:
resolution: {integrity: sha512-5rdYW/106kHqLeG22GE2MHKq+FlsxMERZev9DCzQX1zwkxnFwBivSn5i17a5O/rDmOJOdf4Wyt80UZljzx9+DA==}
dev: false
/open/8.4.0:
resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==}
engines: {node: '>=12'}
@@ -13560,6 +13656,15 @@ packages:
is-wsl: 2.2.0
dev: true
/openapi-schemas/1.0.3:
resolution: {integrity: sha512-KtMWcK2VtOS+nD8RKSIyScJsj8JrmVWcIX7Kjx4xEHijFYuvMTDON8WfeKOgeSb4uNG6UsqLj5Na7nKbSav9RQ==}
engines: {node: '>=8'}
dev: false
/openapi-types/1.3.5:
resolution: {integrity: sha512-11oi4zYorsgvg5yBarZplAqbpev5HkuVNPlZaPTknPDzAynq+lnJdXAmruGWP0s+dNYZS7bjM+xrTpJw7184Fg==}
dev: false
/openapi-types/10.0.0:
resolution: {integrity: sha512-Y8xOCT2eiKGYDzMW9R4x5cmfc3vGaaI4EL2pwhDmodWw1HlK18YcZ4uJxc7Rdp7/gGzAygzH9SXr6GKYIXbRcQ==}
dev: false
@@ -13866,7 +13971,6 @@ packages:
dependencies:
dot-case: 3.0.4
tslib: 2.3.1
dev: true
/path-dirname/1.0.2:
resolution: {integrity: sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=}
@@ -13941,6 +14045,10 @@ packages:
sha.js: 2.4.11
dev: false
/pend/1.2.0:
resolution: {integrity: sha1-elfrVQpng/kRUzH89GY9XI4AelA=}
dev: false
/picocolors/0.2.1:
resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==}
@@ -14021,7 +14129,7 @@ packages:
resolution: {integrity: sha512-eBYzX/7NYsQEOR2alWY4rnQB49G62oHzFpoi9Som56aUr8vB8UGcmcIia9v8fpBeuhH3Ltentuk2OGpp4IQV3Q==}
dependencies:
jsonc-parser: 3.0.0
mlly: 0.3.16
mlly: 0.3.17
pathe: 0.2.0
dev: true
@@ -15801,7 +15909,6 @@ packages:
no-case: 3.0.4
tslib: 2.3.1
upper-case-first: 2.0.2
dev: true
/serialize-javascript/3.1.0:
resolution: {integrity: sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==}
@@ -16004,7 +16111,6 @@ packages:
dependencies:
dot-case: 3.0.4
tslib: 2.3.1
dev: true
/snapdragon-node/2.1.1:
resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==}
@@ -16807,6 +16913,22 @@ packages:
unquote: 1.1.1
util.promisify: 1.0.1
/swagger-methods/2.0.2:
resolution: {integrity: sha512-/RNqvBZkH8+3S/FqBPejHxJxZenaYq3MrpeXnzi06aDIS39Mqf5YCUNb/ZBjsvFFt8h9FxfKs8EXPtcYdfLiRg==}
dev: false
/swagger-parser/8.0.3:
resolution: {integrity: sha512-y2gw+rTjn7Z9J+J1qwbBm0UL93k/VREDCveKBK6iGjf7KXC6QGshbnpEmeHL0ZkCgmIghsXzpNzPSbBH91BAEQ==}
dependencies:
call-me-maybe: 1.0.1
json-schema-ref-parser: 7.1.4
ono: 5.1.0
openapi-schemas: 1.0.3
openapi-types: 1.3.5
swagger-methods: 2.0.2
z-schema: 4.2.4
dev: false
/swap-case/2.0.2:
resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==}
dependencies:
@@ -17635,7 +17757,6 @@ packages:
resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==}
dependencies:
tslib: 2.3.1
dev: true
/upper-case/1.1.3:
resolution: {integrity: sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=}
@@ -17645,7 +17766,6 @@ packages:
resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==}
dependencies:
tslib: 2.3.1
dev: true
/uri-js/4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
@@ -18480,6 +18600,19 @@ packages:
resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==}
dev: true
/xml2js/0.4.23:
resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==}
engines: {node: '>=4.0.0'}
dependencies:
sax: 1.2.4
xmlbuilder: 11.0.1
dev: false
/xmlbuilder/11.0.1:
resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==}
engines: {node: '>=4.0'}
dev: false
/xmlbuilder/13.0.2:
resolution: {integrity: sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==}
engines: {node: '>=6.0'}
@@ -18489,6 +18622,12 @@ packages:
resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
dev: true
/xmldom/0.1.31:
resolution: {integrity: sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==}
engines: {node: '>=0.1'}
deprecated: Deprecated due to CVE-2021-21366 resolved in 0.5.0
dev: false
/xmlhttprequest-ssl/1.6.3:
resolution: {integrity: sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==}
engines: {node: '>=0.4.0'}
@@ -18608,6 +18747,13 @@ packages:
yargs-parser: 21.0.0
dev: true
/yauzl/2.10.0:
resolution: {integrity: sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=}
dependencies:
buffer-crc32: 0.2.13
fd-slicer: 1.1.0
dev: false
/yeast/0.1.2:
resolution: {integrity: sha1-AI4G2AlDIMNy28L47XagymyKxBk=}
dev: false
@@ -18620,6 +18766,18 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
/z-schema/4.2.4:
resolution: {integrity: sha512-YvBeW5RGNeNzKOUJs3rTL4+9rpcvHXt5I051FJbOcitV8bl40pEfcG0Q+dWSwS0/BIYrMZ/9HHoqLllMkFhD0w==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
lodash.get: 4.4.2
lodash.isequal: 4.5.0
validator: 13.7.0
optionalDependencies:
commander: 2.20.3
dev: false
/z-schema/5.0.2:
resolution: {integrity: sha512-40TH47ukMHq5HrzkeVE40Ad7eIDKaRV2b+Qpi2prLc9X9eFJFzV7tMe5aH12e6avaSS/u5l653EQOv+J9PirPw==}
engines: {node: '>=8.0.0'}