💻 | Working on API

This commit is contained in:
2021-04-05 17:14:57 +02:00
parent 4483e9139e
commit 933109aceb
29 changed files with 201 additions and 463 deletions

View File

@@ -26,3 +26,5 @@ SMTP_USERNAME=
SMTP_PASSWORD=
MAILGUN_API_KEY=
WAKATIME_API_KEY=
GITHUB_TOKEN=

1
.gitignore vendored
View File

@@ -7,3 +7,4 @@ coverage
tmp
database/seeders
.idea/
/database/migrations/

View File

@@ -13,13 +13,6 @@ export default class LocationsController {
})
}
public async history ({ response }: HttpContextContract) {
const locations = await Location.query().orderBy('since', 'desc')
return response.status(200).send({
locations
})
}
public async add ({ request, response }: HttpContextContract) {
const data = await request.validate(LocationValidator)
await Location.create(data)

View File

@@ -1,74 +0,0 @@
import {HttpContextContract} from '@ioc:Adonis/Core/HttpContext'
import Post from "App/Models/Post";
import Redis from "@ioc:Adonis/Addons/Redis";
export default class PostsController {
public async getLikes ({params}: HttpContextContract) {
let post = await Post.findBy('slug', params.slug)
if (!post) {
post = await Post.create({
slug: params.slug,
likes: 0
})
}
return post.likes
}
public async unlike ({request, params}: HttpContextContract) {
const post = await Post.findByOrFail('slug', params.slug)
const ip = await request.ip()
const getLikes = post.likes - 1
const isLiked = await Redis.exists(`artapi/posts/${post.slug}/${ip}`)
if (isLiked) {
await Redis.del(`artapi/posts/${post.slug}/${ip}`)
await post.merge({
likes: getLikes
}).save()
return {
code: 200,
post
}
}
}
public async isLiked ({params, request}: HttpContextContract) {
const post = await Post.findBy('slug', params.slug)
if (post) {
const ip = request.ip()
return Redis.exists(`artapi/posts/${post.slug}/${ip}`);
}
return false
}
public async like ({request, params}: HttpContextContract) {
let post = await Post.findBy('slug', params.slug)
const ip = await request.ip()
if (!post) {
post = await Post.create({
slug: params.slug,
likes: 0
})
}
const getLikes = post.likes + 1
const isLiked = await Redis.exists(`artapi/posts/${post.slug}/${ip}`)
if (!isLiked) {
await Redis.set(`artapi/posts/${post.slug}/${ip}`, Date.now())
await post.merge({
likes: getLikes
}).save()
return {
code: 200,
post
}
}
}
}

View File

@@ -1,6 +1,6 @@
import {HttpContextContract} from "@ioc:Adonis/Core/HttpContext";
export default class MeController {
export default class ProfileController {
public me ({ response }: HttpContextContract) {
return response.status(200).send({

View File

@@ -5,57 +5,54 @@ import {UpdateGitHubReadme} from "App/tasks/UpdateGithubReadme";
export default class StatesController {
public async get ({response}: HttpContextContract) {
const is_sleeping = await Redis.get('artapi/states/sleeping') || "false"
const is_learning = await Redis.get('artapi/states/learning') || "false"
const is_developing = await Redis.get('artapi/states/developing') || "false"
const is_listening_music = await Redis.get('artapi/states/listening') || "false"
const is_sleeping = await Redis.exists('artapi/states/sleeping')
const is_listening_music = await Redis.exists('artapi/states/listening')
const is_developing = await Redis.exists('artapi/states/developing')
const is_learning = await Redis.exists('artapi/states/learning')
return response.status(200).send({
is_sleeping: getStatus(is_sleeping),
is_learning: getStatus(is_learning),
is_developing: getStatus(is_developing),
is_listening_music: getStatus(is_listening_music)
is_learning: this.getStatus(is_learning),
is_sleeping: this.getStatus(is_sleeping),
is_developing: this.getStatus(is_developing),
is_listening_music: this.getStatus(is_listening_music)
})
}
public async setSleepingStatus ({request, response}: HttpContextContract) {
const sleeping = await request.input('sleeping')
await Redis.set('artapi/states/sleeping', sleeping)
await UpdateGitHubReadme()
return response.status(200).send({
message: 'State successfully updated !'
})
public async set ({request, response}: HttpContextContract) {
const state = await request.param('state')
const value = await request.input('value')
if (state && value) {
await Redis.set(`artapi/states/${state}`, value)
switch (state) {
case 'learning':
await Redis.set(`artapi/states/developing`, 'false')
await Redis.set(`artapi/states/sleeping`, 'false')
break
case 'developing':
await Redis.set(`artapi/states/learning`, 'false')
await Redis.set(`artapi/states/sleeping`, 'false')
break
case 'listening':
await Redis.set(`artapi/states/sleeping`, 'false')
break
case 'sleeping':
await Redis.set(`artapi/states/developing`, 'false')
await Redis.set(`artapi/states/listening`, 'false')
await Redis.set(`artapi/states/learning`, 'false')
break
}
await UpdateGitHubReadme()
return response.status(200).send({
message: 'State successfully updated !'
})
}
}
public async setDevelopingStatus ({request, response}: HttpContextContract) {
const developing = await request.input('developing')
await Redis.set('artapi/states/developing', developing)
await UpdateGitHubReadme()
return response.status(200).send({
message: 'State successfully updated !'
})
}
public async setLearningStatus ({request, response}: HttpContextContract) {
const learning = await request.input('learning')
await Redis.set('artapi/states/learning', learning)
await UpdateGitHubReadme()
return response.status(200).send({
message: 'State successfully updated !'
})
}
public async setListeningStatus ({request, response}: HttpContextContract) {
const listening = await request.input('listening')
await Redis.set('artapi/states/listening', listening)
await UpdateGitHubReadme()
return response.status(200).send({
message: 'State successfully updated !'
})
public getStatus(state: number): string {
return state === 1 ? "Yes" : "No"
}
}
function getStatus(state: string) {
return state === "true"
}

View File

@@ -1,54 +0,0 @@
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
import {getTotalStats, getWeeklyStats, getMonthlyStats, getDailyStats} from 'App/Helpers/StatsHelper'
import DockerBuild from "App/Models/DockerBuild"
import DockerCommand from "App/Models/DockerCommand"
import {UpdateGitHubReadme} from "App/tasks/UpdateGithubReadme";
export default class StatsController {
public async get ({response}: HttpContextContract) {
const daily = await getDailyStats()
const weekly = await getWeeklyStats()
const monthly = await getMonthlyStats()
const total = await getTotalStats()
return response.status(200).send({
daily: daily,
weekly: weekly,
monthly: monthly,
total: total,
})
}
public async incrementBuild () {
const date = new Date()
const last_entry = await DockerBuild.findBy('created_at', date)
if (last_entry) {
last_entry.builds = last_entry.builds ++
await last_entry.save()
} else {
await DockerBuild.create({
builds: BigInt(1)
})
}
await UpdateGitHubReadme()
}
public async incrementCommand () {
const date = new Date()
const last_entry = await DockerCommand.findBy('created_at', date)
if (last_entry) {
last_entry.commands = last_entry.commands ++
await last_entry.save()
} else {
await DockerCommand.create({
commands: BigInt(1)
})
}
await UpdateGitHubReadme()
}
}

View File

@@ -0,0 +1,15 @@
import axios from "axios";
import Env from "@ioc:Adonis/Core/Env";
export default function getActivity() {
let last_activity = ''
axios.get('https://wakatime.com/api/v1/users/current', {
headers: {
'Authorization': `Basic ${Env.get('WAKATIME_API_KEY')}`
}
})
.then((res) => {
last_activity = res.data.last_heartbeat_at
})
return last_activity
}

View File

@@ -1,45 +0,0 @@
import DockerCommand from "App/Models/DockerCommand";
import DockerBuild from "App/Models/DockerBuild";
async function getDailyStats() {
const commands = await DockerCommand.query().where('created_at', '>', new Date().getTime())
const builds = await DockerBuild.query().where('created_at', '>', new Date().getTime())
return {
docker_commands_run: commands.length,
docker_build_count: builds.length,
}
}
async function getWeeklyStats() {
const commands = await DockerCommand.query().where('created_at', '>', new Date().getTime() - 1000 * 60 * 60 * 24 * 7)
const builds = await DockerBuild.query().where('created_at', '>', new Date().getTime() - 1000 * 60 * 60 * 24 * 7)
return {
docker_commands_run: commands.length,
docker_build_count: builds.length,
}
}
async function getMonthlyStats() {
const commands = await DockerCommand.query().where('created_at', '>', new Date().getMonth() - 1)
const builds = await DockerBuild.query().where('created_at', '>', new Date().getMonth() - 1)
return {
docker_commands_run: commands.length,
docker_build_count: builds.length,
}
}
async function getTotalStats() {
const commands = await DockerCommand.query()
const builds = await DockerBuild.query()
return {
docker_commands_run: commands.length,
docker_build_count: builds.length
}
}
export {getMonthlyStats, getTotalStats, getWeeklyStats, getDailyStats}

View File

@@ -1,13 +0,0 @@
import { DateTime } from 'luxon'
import { BaseModel, column } from '@ioc:Adonis/Lucid/Orm'
export default class DockerBuild extends BaseModel {
@column({ isPrimary: true })
public id: number
@column()
public builds: bigint
@column.dateTime({ autoCreate: true })
public createdAt: DateTime
}

View File

@@ -1,13 +0,0 @@
import { DateTime } from 'luxon'
import { BaseModel, column } from '@ioc:Adonis/Lucid/Orm'
export default class DockerCommand extends BaseModel {
@column({ isPrimary: true })
public id: number
@column()
public commands: bigint
@column.dateTime({ autoCreate: true })
public createdAt: DateTime
}

View File

@@ -1,24 +1,13 @@
import {getDailyStats, getMonthlyStats, getTotalStats, getWeeklyStats} from "App/Helpers/StatsHelper";
import Redis from "@ioc:Adonis/Addons/Redis";
import axios from 'axios'
import Env from "@ioc:Adonis/Core/Env";
export async function UpdateGitHubReadme(): Promise<void> {
const daily_stats = await getDailyStats()
const weekly_stats = await getWeeklyStats()
const monthly = await getMonthlyStats()
const total_stats = await getTotalStats()
const sleeping = await Redis.get('artapi/states/sleeping')
const learning = await Redis.get('artapi/states/learning')
const developing = await Redis.get('artapi/states/developing')
const listening_music = await Redis.get('artapi/states/listening')
const stats_table = `| Statistics | Daily | Weekly | Monthly | Total |
| :------------------------------------------ | ----------: | ----------: | -----------: | -----------: |
| :computer: Commands | **${daily_stats.docker_commands_run}** | **${weekly_stats.docker_commands_run}** | **${monthly.docker_commands_run}** | **${total_stats.docker_commands_run}** |
| :hammer: Docker Builds | **${daily_stats.docker_build_count}** | **${weekly_stats.docker_build_count}** | **${monthly.docker_build_count}** | **${total_stats.docker_build_count}** |`
const infos_table = `| Informations | State |
| ---------------------------: | ------: |
| :musical_note: Music Playing | **${getStatus(listening_music)}** |
@@ -36,27 +25,17 @@ export async function UpdateGitHubReadme(): Promise<void> {
const content = Buffer.from(read_me.content, 'base64').toString()
const stats_table_check = '| Statistics' + content.split('| Statistics')[1]
if (!stats_table_check) change = true
const old_stats_table = stats_table_check.split('| Informations')[0]
if (!old_stats_table) change = true
const infos_table_check = '| Informations' + content.split('| Informations')[1]
if (!infos_table_check) change = true
const old_infos_table = infos_table_check.split('###### Curious')[0]
if (!old_infos_table) change = true
if (old_infos_table == infos_table && old_stats_table == stats_table) change = false
if (!change) return
let new_content = content.replace(old_stats_table, stats_table + '\n\n');
new_content = new_content.replace(old_infos_table, infos_table + '\n\n')
await axios.put('https://api.github.com/repos/ArthurDanjou/ArthurDanjou/contents/README.md',
{
message: 'Updating recent statistics & informations',
content: Buffer.from(new_content, 'utf8').toString('base64'),
content: Buffer.from(content.replace(old_infos_table, infos_table + '\n\n'), 'utf8').toString('base64'),
sha: read_me.sha,
author: {
name: 'api.arthurdanjou.fr - API Automation',

View File

@@ -0,0 +1,16 @@
import BaseSchema from '@ioc:Adonis/Lucid/Schema'
export default class Users extends BaseSchema {
protected tableName = 'users'
public async up () {
this.schema.createTable(this.tableName, (table) => {
table.increments('id')
table.timestamps(true)
})
}
public async down () {
this.schema.dropTable(this.tableName)
}
}

1
env.ts
View File

@@ -48,4 +48,5 @@ export default Env.rules({
//Mailgun
MAILGUN_API_KEY: Env.schema.string(),
WAKATIME_API_KEY: Env.schema.string(),
})

View File

@@ -9,8 +9,7 @@
|
*/
import Server from '@ioc:Adonis/Core/Server'
import Server from "@ioc:Adonis/Core/Server";
/*
|--------------------------------------------------------------------------
| Global middleware
@@ -20,8 +19,9 @@ import Server from '@ioc:Adonis/Core/Server'
| are defined for all HTTP requests.
|
*/
Server.middleware.register([
'Adonis/Core/BodyParserMiddleware',
//'Adonis/Core/BodyParserMiddleware',
'App/Middleware/SilentAuth',
])

View File

@@ -8,18 +8,16 @@ const BASE_URL = "https://api.arthurdanjou.fr"
Route.get('/', async ({response}: HttpContextContract) => {
return response.status(200).send({
domain: BASE_URL,
version: "1.0",
version: "2.0",
source: `${BASE_URL}/source`,
healthCheck: `${BASE_URL}/health`,
routes: {
arthur_data: `${BASE_URL}/me`,
stats_data: `${BASE_URL}/stats`,
states_data: `${BASE_URL}/states`,
locations_data: `${BASE_URL}/locations`,
locations_history: `${BASE_URL}/locations/history`,
profile: `${BASE_URL}/profile`,
stats: `${BASE_URL}/stats`,
states: `${BASE_URL}/states`,
locations: `${BASE_URL}/locations`,
projects: `${BASE_URL}/projects`
},
}
})
})
@@ -32,19 +30,15 @@ Route.get('health', async ({response}: HttpContextContract) => {
return report.healthy ? response.ok(report) : response.badRequest(report)
})
Route.get('/me', 'MeController.me')
// ArtAPI
Route.get('/profile', 'ProfileController.me')
Route.get('/locations', 'LocationsController.get')
Route.get('/locations/history', 'LocationsController.history')
Route.get('/stats', 'StatsController.get')
Route.get('/states', 'StatesController.get')
Route.get('/projects', 'ProjectsController.get')
Route.resource('users', 'UsersController').only(['index', 'show'])
Route.get('/posts/:slug', 'PostsController.getLikes')
Route.get('/posts/is/:slug', 'PostsController.isLiked')
Route.post('/posts/:slug/like', 'PostsController.like')
Route.post('/posts/:slug/unlike', 'PostsController.unlike')
Route.resource('subscribers', 'SubscribersController').only(['index', 'show', 'store'])
Route.resource('users', 'UsersController').only(['index', 'show'])
Route.resource('subscribers', 'SubscribersController').only(['index', 'show', 'store'])
Route.group(() => {
Route.get('/', 'FileController.index')
Route.get('/:filename', async ({ response, params }) => {
@@ -54,13 +48,9 @@ Route.group(() => {
Route.group(() => {
Route.resource('users', 'UsersController').only(['store', 'update', 'destroy'])
Route.resource('posts', 'PostsController').only(['store', 'update', 'destroy'])
Route.resource('subscribers', 'SubscribersController').only(['update', 'destroy'])
Route.resource('files', 'FileController').only(['store', 'destroy'])
Route.post('/states/sleeping', 'StatesController.setSleepingStatus')
Route.post('/states/learning', 'StatesController.setLearningStatus')
Route.post('/states/developing', 'StatesController.setDevelopingStatus')
Route.post('/states/music', 'StatesController.setListeningStatus')
Route.post('/states', 'StatesController.set')
Route.post('/stats/build', 'StatesController.incrementBuild')
Route.post('/stats/command', 'StatesController.incrementCommand')
Route.post('/locations', 'LocationsController.add')

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 396 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 KiB

275
yarn.lock
View File

@@ -307,6 +307,21 @@
resolved "https://registry.yarnpkg.com/@kdf/salt/-/salt-2.0.1.tgz#2d355a764524fa85217609addc376084b71de385"
integrity sha512-1RBY7HcGYuWBm0+4ygjdRerN+mhpuT5picGB6+azqUXsz/IZljegrKkeHRiV6wuxY8n4HrxOuw8ou7JuGxRWdQ==
"@mapbox/node-pre-gyp@^1.0.1":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.2.tgz#c5f9261ba86afcc7085a8250ee9fa222b0238be9"
integrity sha512-5FRuyoOeDBR7tR+zj+pH52j1uQ2Cyp01umBcvFOw+Q6zs6gqN7FWz/k6cbaxKAxsjBuGTyMMG8aKgt+B9PX4cQ==
dependencies:
detect-libc "^1.0.3"
https-proxy-agent "^5.0.0"
make-dir "^3.1.0"
node-fetch "^2.6.1"
nopt "^5.0.0"
npmlog "^4.1.2"
rimraf "^3.0.2"
semver "^7.3.4"
tar "^6.1.0"
"@mrmlnc/readdir-enhanced@^2.2.1":
version "2.2.1"
resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
@@ -479,9 +494,9 @@
integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==
"@types/faker@^5.1.6":
version "5.1.7"
resolved "https://registry.yarnpkg.com/@types/faker/-/faker-5.1.7.tgz#1c3f0655f6e912f5578ce40baa941ab8705fc0ef"
integrity sha512-ByseCEyhb+64fapaFR/yASUfAU+Ia4LpCnHhoNMQJFSIBvbtFoEZQB0elwrSF/idpKL5OZvmZhCCukGV8Zi22w==
version "5.5.0"
resolved "https://registry.yarnpkg.com/@types/faker/-/faker-5.5.0.tgz#c1d1d3015559e0f7ca3a7a2e3a2ee31066d5a0f9"
integrity sha512-WPBf6jgCsRrbPrgDuWHfbI+cd2CT33JUK+w8NM8jU7KmNr9PF+2eKhD0DKV32nMlyzdMnTHc5TSAG1jpkZbN5A==
"@types/glob@^7.1.1":
version "7.1.3"
@@ -637,6 +652,13 @@ adonis-preset-ts@^2.1.0:
resolved "https://registry.yarnpkg.com/adonis-preset-ts/-/adonis-preset-ts-2.1.0.tgz#3fccdee1c82c574114dc089d8c76dddf5a223054"
integrity sha512-cQH/NP250gOF9k3TTDhVsTOPSAvyH4MhKVZ4ryYiihA+vnP27sut1gVIrRas3Evl5d2wEgWVGI5DgdP/ZFSk0w==
agent-base@6:
version "6.0.2"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
dependencies:
debug "4"
aggregate-error@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
@@ -718,13 +740,13 @@ are-we-there-yet@~1.1.2:
readable-stream "^2.0.6"
argon2@^0.27.1:
version "0.27.1"
resolved "https://registry.yarnpkg.com/argon2/-/argon2-0.27.1.tgz#4ff1dda0de4f5a2089f373bba5c2c6962e0f0668"
integrity sha512-On68kSinTh4DOlLVCEYgQYpx0yuGRsqU9UwV7jUB26PWv+092r8Uz891KFVEqdsksiDXDhA7kXL4z3in/FBItg==
version "0.27.2"
resolved "https://registry.yarnpkg.com/argon2/-/argon2-0.27.2.tgz#f334ca15aee748739ac81f76b85d197841e8cdcc"
integrity sha512-evnzS/Q9rj6ahaaCJjLDoJo9ZuXHhVL2BrBz3wFHb5/i9zAJovBuIY+5t2En7tJjhFXs4O3rUZDeGZxBiDOLwQ==
dependencies:
"@mapbox/node-pre-gyp" "^1.0.1"
"@phc/format" "^1.0.0"
node-addon-api "^3.0.2"
node-pre-gyp "^0.17.0"
opencollective-postinstall "^2.0.3"
args@^5.0.1:
@@ -1049,10 +1071,10 @@ chokidar@^3.5.1:
optionalDependencies:
fsevents "~2.3.1"
chownr@^1.1.1:
version "1.1.4"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
chownr@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
class-utils@^0.3.5:
version "0.3.6"
@@ -1304,20 +1326,13 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
dependencies:
ms "2.0.0"
debug@4.3.1, debug@^4.3.1:
debug@4, debug@4.3.1, debug@^4.3.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
dependencies:
ms "2.1.2"
debug@^3.2.6:
version "3.2.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
dependencies:
ms "^2.1.1"
debug@^4.3.2:
version "4.3.2"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
@@ -1581,9 +1596,9 @@ extglob@^2.0.4:
to-regex "^3.0.1"
faker@^5.4.0:
version "5.5.1"
resolved "https://registry.yarnpkg.com/faker/-/faker-5.5.1.tgz#30e4e8ba15c8c08d0494ba935f247d8e2469675d"
integrity sha512-JCFXcVesClQ6RlSWmBMFQmGDAZq6hjbJAFgKALx31uPaQC6p3SWT2ojaJGD8bMQri+8VNqDOkI2F8QC+ABvZng==
version "5.5.2"
resolved "https://registry.yarnpkg.com/faker/-/faker-5.5.2.tgz#d6f99923fb757b26733a6d2396ddb448ac5bb446"
integrity sha512-6G3lzZXWjWfqTJDS9KhHFIislZMGdrzDqews3T14E/dsANVbs3YT4A3jSNDrbA/gbtmjLuKJx9DzcLucdXBqBw==
fast-deep-equal@^3.1.3:
version "3.1.3"
@@ -1719,12 +1734,12 @@ fs-extra@^9.1.0:
jsonfile "^6.0.1"
universalify "^2.0.0"
fs-minipass@^1.2.5:
version "1.2.7"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
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 "^2.6.0"
minipass "^3.0.0"
fs-readdir-recursive@^1.1.0:
version "1.1.0"
@@ -2004,12 +2019,20 @@ http2-wrapper@^1.0.0-beta.5.2:
quick-lru "^5.1.1"
resolve-alpn "^1.0.0"
https-proxy-agent@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==
dependencies:
agent-base "6"
debug "4"
human-signals@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
iconv-lite@0.4.24, iconv-lite@^0.4.4:
iconv-lite@0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -2026,13 +2049,6 @@ igniculus@^1.5.0:
resolved "https://registry.yarnpkg.com/igniculus/-/igniculus-1.5.0.tgz#f6d5e7784dbe948b4e6a8a22a54d365de90623d0"
integrity sha1-9tXneE2+lItOaooipU02XekGI9A=
ignore-walk@^3.0.1:
version "3.0.3"
resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37"
integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==
dependencies:
minimatch "^3.0.4"
ignore@^4.0.3:
version "4.0.6"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
@@ -2072,9 +2088,9 @@ interpret@^2.2.0:
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
ioredis@^4.24.3:
version "4.24.5"
resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.24.5.tgz#32f56ccb04d2e9ff00aa935caf348fd4e19867b0"
integrity sha512-a1uk8WXM4Xe9bfYUJH17Up9ODEASjYCWiD/BKojPHp5YDDMX/QBOWxgSmrtpRE+ARdLYUoXSLeyGZyegLdHcOg==
version "4.24.6"
resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.24.6.tgz#e46dd45257848510c40b0d50f7c2cc266026552e"
integrity sha512-HxZHYYSC7URouhGKI7l7PhVuSMk6VcdnBMjUcIkW4DhKVqzutF7eixZHKHf51X0SCnbI0eljMtToEydCMIrA2g==
dependencies:
cluster-key-slot "^1.1.0"
debug "^4.3.1"
@@ -2485,7 +2501,7 @@ macroable@^5.1.1:
resolved "https://registry.yarnpkg.com/macroable/-/macroable-5.1.1.tgz#0001338592467570f3d823c54fd94697e3a5f85b"
integrity sha512-az63yGhRPuJWAwJuDHxuWwvVF0+5S9m3u/mtuLcFtmESSFUxZxSZXQYp3SOiGnyqVScLn8b5nSDQXQCtMlP9LA==
make-dir@^3.0.0, make-dir@^3.0.2:
make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
@@ -2575,10 +2591,10 @@ micromatch@^3.1.10:
snapdragon "^0.8.1"
to-regex "^3.0.2"
mime-db@1.46.0:
version "1.46.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee"
integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==
mime-db@1.47.0:
version "1.47.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c"
integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==
mime-kind@^3.0.0:
version "3.0.0"
@@ -2589,11 +2605,11 @@ mime-kind@^3.0.0:
mime-types "^2.1.24"
mime-types@^2.1.24, mime-types@^2.1.29, mime-types@~2.1.24:
version "2.1.29"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.29.tgz#1d4ab77da64b91f5f72489df29236563754bb1b2"
integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==
version "2.1.30"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d"
integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==
dependencies:
mime-db "1.46.0"
mime-db "1.47.0"
mime@1.6.0:
version "1.6.0"
@@ -2627,25 +2643,25 @@ minimatch@^3.0.4:
dependencies:
brace-expansion "^1.1.7"
minimist@^1.2.0, minimist@^1.2.5:
minimist@^1.2.0:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:
version "2.9.0"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
minipass@^3.0.0:
version "3.1.3"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd"
integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==
dependencies:
safe-buffer "^5.1.2"
yallist "^3.0.0"
yallist "^4.0.0"
minizlib@^1.2.1:
version "1.3.3"
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
minizlib@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
dependencies:
minipass "^2.9.0"
minipass "^3.0.0"
yallist "^4.0.0"
mixin-deep@^1.2.0:
version "1.3.2"
@@ -2655,12 +2671,10 @@ mixin-deep@^1.2.0:
for-in "^1.0.2"
is-extendable "^1.0.1"
mkdirp@^0.5.0, mkdirp@^0.5.5:
version "0.5.5"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
dependencies:
minimist "^1.2.5"
mkdirp@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
mri@1.1.4:
version "1.1.4"
@@ -2708,7 +2722,7 @@ ms@2.1.2:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
ms@^2.1.1, ms@^2.1.3:
ms@^2.1.3:
version "2.1.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
@@ -2758,15 +2772,6 @@ nanomatch@^1.2.9:
snapdragon "^0.8.1"
to-regex "^3.0.1"
needle@^2.5.2:
version "2.6.0"
resolved "https://registry.yarnpkg.com/needle/-/needle-2.6.0.tgz#24dbb55f2509e2324b4a99d61f413982013ccdbe"
integrity sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==
dependencies:
debug "^3.2.6"
iconv-lite "^0.4.4"
sax "^1.2.4"
negotiator@0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
@@ -2797,27 +2802,16 @@ node-emoji@^1.10.0:
dependencies:
lodash.toarray "^4.4.0"
node-fetch@^2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
node-modules-regexp@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
node-pre-gyp@^0.17.0:
version "0.17.0"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.17.0.tgz#5af3f7b4c3848b5ed00edc3d298ff836daae5f1d"
integrity sha512-abzZt1hmOjkZez29ppg+5gGqdPLUuJeAEwVPtHYEJgx0qzttCbcKFpxrCQn2HYbwCv2c+7JwH4BgEzFkUGpn4A==
dependencies:
detect-libc "^1.0.3"
mkdirp "^0.5.5"
needle "^2.5.2"
nopt "^4.0.3"
npm-packlist "^1.4.8"
npmlog "^4.1.2"
rc "^1.2.8"
rimraf "^2.7.1"
semver "^5.7.1"
tar "^4.4.13"
node-repl-await@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/node-repl-await/-/node-repl-await-0.1.2.tgz#dff7fcdca39a7eaa88e596b5492b856d0800845d"
@@ -2834,13 +2828,12 @@ nodemailer@^6.5.0:
resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.5.0.tgz#d12c28d8d48778918e25f1999d97910231b175d9"
integrity sha512-Tm4RPrrIZbnqDKAvX+/4M+zovEReiKlEXWDzG4iwtpL9X34MJY+D5LnQPH/+eghe8DLlAVshHAJZAZWBGhkguw==
nopt@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
nopt@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88"
integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==
dependencies:
abbrev "1"
osenv "^0.1.4"
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
@@ -2857,27 +2850,6 @@ normalize-url@^5.3.0:
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-5.3.0.tgz#8959b3cdaa295b61592c1f245dded34b117618dd"
integrity sha512-9/nOVLYYe/dO/eJeQUNaGUF4m4Z5E7cb9oNTKabH+bNf19mqj60txTcveQxL0GlcWLXCxkOu2/LwL8oW0idIDA==
npm-bundled@^1.0.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b"
integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==
dependencies:
npm-normalize-package-bin "^1.0.1"
npm-normalize-package-bin@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2"
integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==
npm-packlist@^1.4.8:
version "1.4.8"
resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e"
integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==
dependencies:
ignore-walk "^3.0.1"
npm-bundled "^1.0.1"
npm-normalize-package-bin "^1.0.1"
npm-run-path@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
@@ -2968,24 +2940,6 @@ opencollective-postinstall@^2.0.3:
resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259"
integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==
os-homedir@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
os-tmpdir@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
osenv@^0.1.4:
version "0.1.5"
resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
dependencies:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
p-all@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/p-all/-/p-all-2.1.0.tgz#91419be56b7dee8fe4c5db875d55e0da084244a0"
@@ -3468,14 +3422,14 @@ rev-hash@^3.0.0:
resolved "https://registry.yarnpkg.com/rev-hash/-/rev-hash-3.0.0.tgz#951d73d02b9606ea4bbb7ee3d93c252cd8556ce5"
integrity sha512-s+87HfEKAu95TaTxnbCobn0/BkbzR23LHSwVdYvr8mn5+PPjzy+hTWyh92b5oaLgig9TKPe5d6ZcubsVBtUrZg==
rimraf@^2.7.1:
version "2.7.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
rimraf@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
dependencies:
glob "^7.1.3"
safe-buffer@*, safe-buffer@5.2.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
safe-buffer@*, safe-buffer@5.2.1, safe-buffer@^5.1.1, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
@@ -3497,12 +3451,7 @@ safe-regex@^1.1.0:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sax@^1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
semver@^5.6.0, semver@^5.7.1:
semver@^5.6.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
@@ -3512,7 +3461,7 @@ semver@^6.0.0, semver@^6.3.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
semver@^7.3.5:
semver@^7.3.4, semver@^7.3.5:
version "7.3.5"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
@@ -3688,9 +3637,9 @@ snapdragon@^0.8.1:
use "^3.1.0"
sonic-boom@^1.0.2:
version "1.4.0"
resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-1.4.0.tgz#d6d35196c32609b46193145afc1174a8c692d21e"
integrity sha512-1xUAszhQBOrjk7uisbStQZYkZxD3vkYlCUw5qzOblWQ1ILN5v0dVPAs+QPgszzoPmbdWx6jyT9XiLJ95JdlLiQ==
version "1.4.1"
resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-1.4.1.tgz#d35d6a74076624f12e6f917ade7b9d75e918f53e"
integrity sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==
dependencies:
atomic-sleep "^1.0.0"
flatstr "^1.0.12"
@@ -3900,18 +3849,17 @@ supports-hyperlinks@^2.1.0:
has-flag "^4.0.0"
supports-color "^7.0.0"
tar@^4.4.13:
version "4.4.13"
resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"
integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==
tar@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83"
integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==
dependencies:
chownr "^1.1.1"
fs-minipass "^1.2.5"
minipass "^2.8.6"
minizlib "^1.2.1"
mkdirp "^0.5.0"
safe-buffer "^5.1.2"
yallist "^3.0.3"
chownr "^2.0.0"
fs-minipass "^2.0.0"
minipass "^3.0.0"
minizlib "^2.1.1"
mkdirp "^1.0.3"
yallist "^4.0.0"
tarn@^3.0.1:
version "3.0.1"
@@ -4146,11 +4094,6 @@ yallist@^2.1.2:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
yallist@^3.0.0, yallist@^3.0.3:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"