mirror of
https://github.com/MedzikUser/gatsby-pingbot
synced 2024-08-15 03:20:27 +00:00
perf: update to pingbot v3
This commit is contained in:
parent
a5d1c07a78
commit
0663c3975d
8 changed files with 259 additions and 154 deletions
106
api/index.js
106
api/index.js
|
@ -1,106 +0,0 @@
|
|||
import axios from 'axios'
|
||||
|
||||
import connectToDatabase from '../lib/dbConnect'
|
||||
|
||||
export default async (req, res) => {
|
||||
const { method } = req
|
||||
const db = await connectToDatabase()
|
||||
|
||||
switch (method) {
|
||||
case 'POST':
|
||||
if (!req.body || !req.body.url || !req.body.cluster) {
|
||||
return res.status(400).json(
|
||||
{
|
||||
success: false,
|
||||
message: 'Invalid body'
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
try {
|
||||
await axios.get(req.body.url)
|
||||
} catch {
|
||||
return res.status(400).json(
|
||||
{
|
||||
success: false,
|
||||
message: 'Invalid URL'
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
try {
|
||||
await db.coll.insertOne(
|
||||
{
|
||||
_id: req.body.url,
|
||||
cluster: req.body.cluster
|
||||
}
|
||||
)
|
||||
} catch {
|
||||
return res.status(400).json(
|
||||
{
|
||||
success: false,
|
||||
message: 'Error Inserting to DB'
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
res.status(200).json(
|
||||
{
|
||||
success: true,
|
||||
url: req.body.url
|
||||
}
|
||||
)
|
||||
|
||||
break
|
||||
case 'DELETE':
|
||||
if (!req.query.url) {
|
||||
return res.status(400).json(
|
||||
{
|
||||
success: false,
|
||||
message: 'Invalid body'
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
try {
|
||||
const { deletedCount } = await db.coll.deleteOne(
|
||||
{
|
||||
_id: req.query.url
|
||||
}
|
||||
)
|
||||
|
||||
if (deletedCount == 0) {
|
||||
return res.status(400).json(
|
||||
{
|
||||
success: false,
|
||||
message: 'Not Found'
|
||||
}
|
||||
)
|
||||
}
|
||||
} catch {
|
||||
return res.status(400).json(
|
||||
{
|
||||
success: false,
|
||||
message: 'Error Deleting from DB'
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
res.status(200).json(
|
||||
{
|
||||
success: true, url:
|
||||
req.query.url
|
||||
}
|
||||
)
|
||||
|
||||
break
|
||||
default:
|
||||
res.status(404).json(
|
||||
{
|
||||
success: false
|
||||
}
|
||||
)
|
||||
|
||||
break
|
||||
}
|
||||
}
|
111
api/index.ts
Normal file
111
api/index.ts
Normal file
|
@ -0,0 +1,111 @@
|
|||
import { VercelRequest, VercelResponse } from '@vercel/node'
|
||||
import axios from 'axios'
|
||||
import dbConnect from '../lib/dbConnect'
|
||||
import URLModel from '../lib/schema'
|
||||
|
||||
export default async (request: VercelRequest, response: VercelResponse) => {
|
||||
const { method } = request
|
||||
const db = await dbConnect()
|
||||
|
||||
switch (method) {
|
||||
case 'POST':
|
||||
if (!request.body || !request.body.url) {
|
||||
return response.status(400).json(
|
||||
{
|
||||
success: false,
|
||||
message: 'Invalid body'
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
try {
|
||||
await axios.get(request.body.url)
|
||||
} catch (err) {
|
||||
return response.status(400).json(
|
||||
{
|
||||
success: false,
|
||||
message: 'Invalid URL'
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
try {
|
||||
const url = new URLModel({
|
||||
url: request.body.url
|
||||
})
|
||||
|
||||
await url.save()
|
||||
|
||||
return response.status(200).json(
|
||||
{
|
||||
success: true,
|
||||
url: request.body.url
|
||||
}
|
||||
)
|
||||
} catch (err) {
|
||||
console.log(err)
|
||||
return response.status(400).json(
|
||||
{
|
||||
success: false,
|
||||
message: 'Error Inserting to DB'
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
break
|
||||
case 'DELETE':
|
||||
if (!request.query.url) {
|
||||
return response.status(400).json(
|
||||
{
|
||||
success: false,
|
||||
message: 'Invalid body'
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
try {
|
||||
const url = request.query.url
|
||||
|
||||
if (typeof url != "string") {
|
||||
return response.status(400).json(
|
||||
{
|
||||
success: false,
|
||||
message: 'Query URL isn\'t string'
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
await URLModel.deleteOne({
|
||||
url
|
||||
})
|
||||
|
||||
return response.status(200).json(
|
||||
{
|
||||
success: true,
|
||||
message: 'Deleted!',
|
||||
url
|
||||
}
|
||||
)
|
||||
} catch (err) {
|
||||
console.log(err)
|
||||
return response.status(400).json(
|
||||
{
|
||||
success: false,
|
||||
message: 'Error Deleting from DB'
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
break
|
||||
default:
|
||||
const urls = await URLModel.find()
|
||||
|
||||
response.status(200).json(
|
||||
{
|
||||
db: urls
|
||||
}
|
||||
)
|
||||
|
||||
break
|
||||
}
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
import { MongoClient } from 'mongodb'
|
||||
|
||||
const { MONGODB_URI, MONGODB_DB, MONGODB_COLLECTION } = process.env
|
||||
|
||||
let cached = global.mongo
|
||||
|
||||
if (!cached) {
|
||||
cached = global.mongo = {
|
||||
conn: null,
|
||||
promise: null
|
||||
}
|
||||
}
|
||||
|
||||
export default async function connectToDatabase() {
|
||||
if (cached.conn)
|
||||
return cached.conn
|
||||
|
||||
if (!cached.promise) {
|
||||
const opts = {
|
||||
useNewUrlParser: true,
|
||||
useUnifiedTopology: true,
|
||||
}
|
||||
|
||||
cached.promise = await MongoClient.connect(MONGODB_URI, opts).then(client => {
|
||||
return {
|
||||
client,
|
||||
coll: client.db(MONGODB_DB).collection(MONGODB_COLLECTION),
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
cached.conn = await cached.promise
|
||||
|
||||
return cached.conn
|
||||
}
|
29
lib/dbConnect.ts
Normal file
29
lib/dbConnect.ts
Normal file
|
@ -0,0 +1,29 @@
|
|||
import { connect } from "mongoose"
|
||||
|
||||
interface CachedMongo {
|
||||
conn: typeof import("mongoose")
|
||||
promise: Promise<typeof import("mongoose")>
|
||||
}
|
||||
|
||||
const { MONGODB_URI, MONGODB_DB, MONGODB_COLLECTION } = process.env
|
||||
|
||||
let cached: CachedMongo = global.mongo
|
||||
|
||||
if (!cached) {
|
||||
cached = global.mongo = {
|
||||
conn: null,
|
||||
promise: null
|
||||
}
|
||||
}
|
||||
|
||||
export default async function dbConnect() {
|
||||
if (cached.conn)
|
||||
return cached.conn
|
||||
|
||||
if (!cached.promise)
|
||||
cached.promise = connect(MONGODB_URI)
|
||||
|
||||
cached.conn = await cached.promise
|
||||
|
||||
return cached.conn
|
||||
}
|
23
lib/schema.ts
Normal file
23
lib/schema.ts
Normal file
|
@ -0,0 +1,23 @@
|
|||
import { model, models, Schema } from "mongoose"
|
||||
|
||||
interface URL {
|
||||
url: string
|
||||
}
|
||||
|
||||
const schema = new Schema<URL>({
|
||||
url: {
|
||||
type: String,
|
||||
required: true,
|
||||
unique: true
|
||||
}
|
||||
})
|
||||
|
||||
schema.path('url').validate(async function(value) {
|
||||
const count = await models.URL.countDocuments({ url: value })
|
||||
|
||||
return !count
|
||||
}, 'URL already exists')
|
||||
|
||||
const URLModel = model<URL>('URL', schema)
|
||||
|
||||
export = URLModel
|
|
@ -24,7 +24,7 @@
|
|||
"gatsby-plugin-sass": "4.13.0",
|
||||
"gatsby-plugin-transition-link": "1.20.5",
|
||||
"gsap": "3.7.1",
|
||||
"mongodb": "4.1.1",
|
||||
"mongoose": "^6.0.5",
|
||||
"prop-types": "15.7.2",
|
||||
"react": "17.0.2",
|
||||
"react-dom": "17.0.2",
|
||||
|
@ -33,6 +33,8 @@
|
|||
"sass": "1.39.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/mongoose": "^5.11.97",
|
||||
"@vercel/node": "^1.12.1",
|
||||
"eslint": "7.32.0",
|
||||
"eslint-plugin-react": "7.25.1"
|
||||
}
|
||||
|
|
|
@ -36,7 +36,7 @@ const DeleteURLPage = () => {
|
|||
success: {
|
||||
delay: 500,
|
||||
render({ data: { data } }) {
|
||||
return `Deleted ${data.url}!`
|
||||
return `If URL: ${data.url} existed, it has been deleted!`
|
||||
}
|
||||
},
|
||||
error: {
|
||||
|
|
103
yarn.lock
103
yarn.lock
|
@ -1598,6 +1598,13 @@
|
|||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/mongoose@^5.11.97":
|
||||
version "5.11.97"
|
||||
resolved "https://registry.yarnpkg.com/@types/mongoose/-/mongoose-5.11.97.tgz#80b0357f3de6807eb597262f52e49c3e13ee14d8"
|
||||
integrity sha512-cqwOVYT3qXyLiGw7ueU2kX9noE8DPGRY6z8eUxudhXY8NZ7DMKYAxyZkLSevGfhCX3dO/AoX5/SO9lAzfjon0Q==
|
||||
dependencies:
|
||||
mongoose "*"
|
||||
|
||||
"@types/node-fetch@2":
|
||||
version "2.5.12"
|
||||
resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.12.tgz#8a6f779b1d4e60b7a57fb6fd48d84fb545b9cc66"
|
||||
|
@ -1776,6 +1783,15 @@
|
|||
"@typescript-eslint/types" "4.30.0"
|
||||
eslint-visitor-keys "^2.0.0"
|
||||
|
||||
"@vercel/node@^1.12.1":
|
||||
version "1.12.1"
|
||||
resolved "https://registry.yarnpkg.com/@vercel/node/-/node-1.12.1.tgz#15f42f64690f904f8a52a387123ce0958657060f"
|
||||
integrity sha512-NcawIY05BvVkWlsowaxF2hl/hJg475U8JvT2FnGykFPMx31q1/FtqyTw/awSrKfOSRXR0InrbEIDIelmS9NzPA==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
ts-node "8.9.1"
|
||||
typescript "4.3.4"
|
||||
|
||||
"@webassemblyjs/ast@1.11.1":
|
||||
version "1.11.1"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7"
|
||||
|
@ -2571,7 +2587,7 @@ browserslist@^4.0.0, browserslist@^4.12.2, browserslist@^4.14.5, browserslist@^4
|
|||
escalade "^3.1.1"
|
||||
node-releases "^1.1.73"
|
||||
|
||||
bson@^4.5.1:
|
||||
bson@^4.2.2, bson@^4.5.1:
|
||||
version "4.5.1"
|
||||
resolved "https://registry.yarnpkg.com/bson/-/bson-4.5.1.tgz#02e9d649ce017ab14ed258737756c11809963d6c"
|
||||
integrity sha512-XqFP74pbTVLyLy5KFxVfTUyRrC1mgOlmu/iXHfXqfCKT59jyP9lwbotGfbN59cHBRbJSamZNkrSopjv+N0SqAA==
|
||||
|
@ -3403,6 +3419,13 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9:
|
|||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@4.x, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@~4.3.1:
|
||||
version "4.3.2"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
|
||||
integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
|
||||
dependencies:
|
||||
ms "2.1.2"
|
||||
|
||||
debug@^3.0.0, debug@^3.1.0, debug@^3.2.7:
|
||||
version "3.2.7"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
|
||||
|
@ -3410,13 +3433,6 @@ debug@^3.0.0, debug@^3.1.0, debug@^3.2.7:
|
|||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@~4.3.1:
|
||||
version "4.3.2"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
|
||||
integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
|
||||
dependencies:
|
||||
ms "2.1.2"
|
||||
|
||||
decamelize@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
|
||||
|
@ -3510,9 +3526,9 @@ delegates@^1.0.0:
|
|||
integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
|
||||
|
||||
denque@^1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.0.tgz#773de0686ff2d8ec2ff92914316a47b73b1c73de"
|
||||
integrity sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf"
|
||||
integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==
|
||||
|
||||
depd@~1.1.2:
|
||||
version "1.1.2"
|
||||
|
@ -6351,6 +6367,11 @@ jsonfile@^4.0.0:
|
|||
array-includes "^3.1.2"
|
||||
object.assign "^4.1.2"
|
||||
|
||||
kareem@2.3.2:
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.3.2.tgz#78c4508894985b8d38a0dc15e1a8e11078f2ca93"
|
||||
integrity sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==
|
||||
|
||||
keyv@3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373"
|
||||
|
@ -7047,6 +7068,35 @@ mongodb@4.1.1:
|
|||
optionalDependencies:
|
||||
saslprep "^1.0.0"
|
||||
|
||||
mongoose@*, mongoose@^6.0.5:
|
||||
version "6.0.5"
|
||||
resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-6.0.5.tgz#42648005d13b49261c757607d1f23761b59a610d"
|
||||
integrity sha512-1MoG52oosjEK8z45DHQVbakP6DJG1sbQI/ZASBW8sZRV+rCaG/pC3L3wWjrsiped/2+uhvanWM9C89F2n6bQ3w==
|
||||
dependencies:
|
||||
bson "^4.2.2"
|
||||
kareem "2.3.2"
|
||||
mongodb "4.1.1"
|
||||
mpath "0.8.4"
|
||||
mquery "4.0.0"
|
||||
ms "2.1.2"
|
||||
regexp-clone "1.0.0"
|
||||
sift "13.5.2"
|
||||
sliced "1.0.1"
|
||||
|
||||
mpath@0.8.4:
|
||||
version "0.8.4"
|
||||
resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.8.4.tgz#6b566d9581621d9e931dd3b142ed3618e7599313"
|
||||
integrity sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==
|
||||
|
||||
mquery@4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/mquery/-/mquery-4.0.0.tgz#6c62160ad25289e99e0840907757cdfd62bde775"
|
||||
integrity sha512-nGjm89lHja+T/b8cybAby6H0YgA4qYC/lx6UlwvHGqvTq8bDaNeCwl1sY8uRELrNbVWJzIihxVd+vphGGn1vBw==
|
||||
dependencies:
|
||||
debug "4.x"
|
||||
regexp-clone "^1.0.0"
|
||||
sliced "1.0.1"
|
||||
|
||||
ms@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||
|
@ -8491,6 +8541,11 @@ regex-parser@^2.2.11:
|
|||
resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58"
|
||||
integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==
|
||||
|
||||
regexp-clone@1.0.0, regexp-clone@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-1.0.0.tgz#222db967623277056260b992626354a04ce9bf63"
|
||||
integrity sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==
|
||||
|
||||
regexp.prototype.flags@^1.3.1:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26"
|
||||
|
@ -9035,6 +9090,11 @@ side-channel@^1.0.4:
|
|||
get-intrinsic "^1.0.2"
|
||||
object-inspect "^1.9.0"
|
||||
|
||||
sift@13.5.2:
|
||||
version "13.5.2"
|
||||
resolved "https://registry.yarnpkg.com/sift/-/sift-13.5.2.tgz#24a715e13c617b086166cd04917d204a591c9da6"
|
||||
integrity sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==
|
||||
|
||||
signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
|
||||
|
@ -9087,6 +9147,11 @@ slice-ansi@^4.0.0:
|
|||
astral-regex "^2.0.0"
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
|
||||
sliced@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41"
|
||||
integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=
|
||||
|
||||
slugify@^1.4.4:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.0.tgz#6bdf8ed01dabfdc46425b67e3320b698832ff893"
|
||||
|
@ -9799,6 +9864,17 @@ trough@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf"
|
||||
integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==
|
||||
|
||||
ts-node@8.9.1:
|
||||
version "8.9.1"
|
||||
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.9.1.tgz#2f857f46c47e91dcd28a14e052482eb14cfd65a5"
|
||||
integrity sha512-yrq6ODsxEFTLz0R3BX2myf0WBCSQh9A+py8PBo1dCzWIOcvisbyH6akNKqDHMgXePF2kir5mm5JXJTH3OUJYOQ==
|
||||
dependencies:
|
||||
arg "^4.1.0"
|
||||
diff "^4.0.1"
|
||||
make-error "^1.1.1"
|
||||
source-map-support "^0.5.17"
|
||||
yn "3.1.1"
|
||||
|
||||
ts-node@^9:
|
||||
version "9.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d"
|
||||
|
@ -9916,6 +9992,11 @@ typedarray@^0.0.6:
|
|||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
|
||||
|
||||
typescript@4.3.4:
|
||||
version "4.3.4"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc"
|
||||
integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==
|
||||
|
||||
unbox-primitive@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
|
||||
|
|
Loading…
Reference in a new issue