mirror of
https://github.com/Le-niao/Yunzai-Bot.git
synced 2025-01-07 08:16:40 +08:00
移除enka
This commit is contained in:
parent
4aa1c1121c
commit
28e522fea3
@ -18,7 +18,6 @@
|
||||
"art-template": "^4.13.2",
|
||||
"chalk": "^5.0.1",
|
||||
"chokidar": "^3.5.3",
|
||||
"enka-network-api": "^1.0.1",
|
||||
"https-proxy-agent": "5.0.1",
|
||||
"inquirer": "^8.2.4",
|
||||
"lodash": "^4.17.21",
|
||||
|
@ -1,52 +0,0 @@
|
||||
import plugin from '../../../lib/plugins/plugin.js'
|
||||
import fetch from 'node-fetch'
|
||||
import { segment } from "oicq";
|
||||
import EnkaNetWork from '../model/enkaNetwork.js';
|
||||
|
||||
|
||||
|
||||
export class enka extends plugin {
|
||||
constructor () {
|
||||
super({
|
||||
/** 功能名称 */
|
||||
name: 'enka',
|
||||
/** 功能描述 */
|
||||
dsc: '查询角色橱柜的详细资料',
|
||||
/** https://oicqjs.github.io/oicq/#events */
|
||||
event: 'message',
|
||||
/** 优先级,数字越小等级越高 */
|
||||
priority: 5000,
|
||||
rule: [
|
||||
{
|
||||
/** 命令正则匹配 */
|
||||
reg: '^#角色面板(([1-9]{1}\\d{8}([1-9])?)|(\\d))?$',
|
||||
/** 执行方法 */
|
||||
fnc: 'enka'
|
||||
},
|
||||
{
|
||||
/** 命令正则匹配 */
|
||||
reg: '^#更新角色面板?$',
|
||||
/** 执行方法 */
|
||||
fnc: 'updateEnka'
|
||||
}
|
||||
]
|
||||
})
|
||||
}
|
||||
async enka () {
|
||||
let enka = new EnkaNetWork(this.e);
|
||||
let {text,img} = await enka.getRoleDetail();
|
||||
if(text){
|
||||
this.e.reply(text)
|
||||
}
|
||||
if(img){
|
||||
this.e.reply(img)
|
||||
}
|
||||
|
||||
}
|
||||
async updateEnka(){
|
||||
let enka = new EnkaNetWork(this.e);
|
||||
let {text,img} = await enka.getRoleDetail(true);
|
||||
this.e.reply(text)
|
||||
this.e.reply(img)
|
||||
}
|
||||
}
|
@ -1,468 +0,0 @@
|
||||
import moment from 'moment'
|
||||
import lodash from 'lodash'
|
||||
import base from './base.js'
|
||||
import MysInfo from './mys/mysInfo.js'
|
||||
import gsCfg from './gsCfg.js'
|
||||
import { EnkaClient } from 'enka-network-api'
|
||||
import puppeteer from '../../../lib/puppeteer/puppeteer.js'
|
||||
import fs from 'node:fs'
|
||||
import common from '../../../lib/common/common.js'
|
||||
|
||||
if (!fs.existsSync('./data/enkaNetwork/')) {
|
||||
fs.mkdirSync('./data/enkaNetwork/')
|
||||
}
|
||||
|
||||
export default class EnkaNetWork extends base {
|
||||
constructor (e) {
|
||||
super(e)
|
||||
this.model = 'enkaNetwork'
|
||||
this.urlKey = `${this.prefix}url:`
|
||||
this.uidKey = `Yz:genshin:enka:qq-uid:${this.userId}`
|
||||
this.path = `./data/enkaNetwork/${this.e.user_id}/`
|
||||
this.uid
|
||||
this.cached = false
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param updateData 用于更新json数据的标记
|
||||
* @returns
|
||||
*/
|
||||
async getRoleDetail(updateData = false){
|
||||
let {uid, index} = await this.getParameter()
|
||||
if(index > 7 || index < 0){
|
||||
this.e.reply(`请别开玩笑!角色橱柜怎么可能会有第${index + 1}个角色`)
|
||||
return {}
|
||||
}
|
||||
this.uid = uid
|
||||
let user
|
||||
if(!updateData){
|
||||
user = await this.readJson()//读取本地json
|
||||
if (typeof(user)==='undefined'){
|
||||
//没有本地缓存的json
|
||||
try {
|
||||
user = await this.getEnkaUserData()
|
||||
} catch (error) {
|
||||
logger.error(error.message)
|
||||
this.replyException(error)
|
||||
return{}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
try {
|
||||
this.e.reply("更新角色面板中")
|
||||
user = await this.getEnkaUserData()
|
||||
} catch (error) {
|
||||
logger.error(error.message)
|
||||
this.replyException(error)
|
||||
return{}
|
||||
}
|
||||
}
|
||||
let {text, roleData} = await this.getRoleData(user,index);
|
||||
if(!text&&!roleData){
|
||||
return{}
|
||||
}
|
||||
let data ={
|
||||
saveId: this.uid,
|
||||
uid: this.uid,
|
||||
name: this.e.sender.card.replace(this.uid, '').trim(),
|
||||
user_id: this.e.user_id,
|
||||
roleData,
|
||||
updateTime: user.updateTime,
|
||||
bg: lodash.random(1, 3),
|
||||
...this.screenData
|
||||
}
|
||||
let img = await puppeteer.screenshot('enkaNetwork', data)
|
||||
return {text, img}
|
||||
}
|
||||
|
||||
async getParameter(){
|
||||
let uid = this.e.msg.substring(5, this.e.msg.length);
|
||||
let index = 1;//默认取角色橱柜的第一个角色
|
||||
if(typeof(uid) === 'undefined' || uid === ''){
|
||||
uid = await MysInfo.getUid(this.e)//如果用户没绑uid或者ck,由该模块自己抛出未绑定uid的信息
|
||||
}else {
|
||||
//有携带参数
|
||||
//判断取到的这个uid是否是正常uid还是指示要分析角色的序号数字
|
||||
let regex = /([1-9]{1}\d{8}([1-9])?)|(\d)/ //参数只能用1个数字(指定查询第几个角色)9个数字(指定uid并查询第一个角色)10个数字(同时指定uid和第几个角色)
|
||||
if(regex.test(uid)) {
|
||||
if(uid.length == 1){
|
||||
//使用该用户当前绑定的uid查询指定的第几个角色
|
||||
index = parseInt(uid);
|
||||
uid = await MysInfo.getUid(this.e)//取用户当前uid,如果用户没绑uid或者ck,由该模块自己抛出未绑定uid的信息
|
||||
}else if(uid.length == 10){
|
||||
//使用指定的uid查询第几个角色
|
||||
index = parseInt(uid.substring(9,10))
|
||||
uid = uid.substring(0,9)
|
||||
}else{
|
||||
this.e.reply("未输入角色序号,默认橱窗第一位!")
|
||||
}
|
||||
//上面的if都未命中则是uid
|
||||
}else {
|
||||
uid = await MysInfo.getUid(this.e)//非法参数,取用户当前uid,如果用户没绑uid或者ck,由该模块自己抛出未绑定uid的信息
|
||||
}
|
||||
|
||||
}
|
||||
index--
|
||||
return {uid, index}
|
||||
}
|
||||
async getRoleData(user,index){
|
||||
let text,roleData
|
||||
let data = user.data
|
||||
if(typeof(data.playerInfo) === 'undefined'){
|
||||
text = '该uid不存在'
|
||||
}else if (typeof(data.avatarInfoList) != 'undefined' && data.avatarInfoList.length > 0) {
|
||||
if(data.avatarInfoList.length - 1 < index){
|
||||
this.e.reply(`该uid的角色橱展示了${data.avatarInfoList.length}个角色,你输入的序号已超过当前展示数量`)
|
||||
return{}
|
||||
}
|
||||
text = '目前已获取的角色卡有:'
|
||||
for (const i in data.avatarInfoList) {
|
||||
if (Object.hasOwnProperty.call(data.avatarInfoList, i)) {
|
||||
const avatar = data.avatarInfoList[i];
|
||||
let avatarName = gsCfg.roleIdToName(avatar.avatarId)
|
||||
text += `[${parseInt(i)+1}${avatarName} ]`
|
||||
if(index == i){
|
||||
roleData = avatar
|
||||
roleData.uid = this.uid
|
||||
roleData.avatarName = avatarName
|
||||
roleData.playerName = data.playerInfo.nickname
|
||||
roleData.element = gsCfg.getElementByRoleName(avatarName)
|
||||
roleData.talents = []
|
||||
//处理角色各属性数据
|
||||
roleData.showProp = this.handleProp(roleData)
|
||||
//已激活的命座数量
|
||||
if(typeof(roleData.talentIdList) === "undefined"){
|
||||
roleData.talentSize = 0
|
||||
roleData.talents = [{},{},{},{},{},{}]
|
||||
}else{
|
||||
roleData.talentSize = roleData.talentIdList.length
|
||||
//处理命座
|
||||
for (var j=0; j<6; j++) {
|
||||
if (j < roleData.talentSize) {
|
||||
const talentId = roleData.talentIdList[j];
|
||||
let talent = gsCfg.getRoleTalentByTalentId(talentId)
|
||||
await this.cacheIcon(talent.icon)
|
||||
roleData.talents.push(talent)
|
||||
}else{
|
||||
roleData.talents.push({})
|
||||
}
|
||||
}
|
||||
}
|
||||
roleData.artifacts = []
|
||||
for (const j in avatar.equipList) {
|
||||
if (Object.hasOwnProperty.call(avatar.equipList, j)) {
|
||||
const equip = avatar.equipList[j];
|
||||
if(typeof(equip.weapon)!=='undefined'){
|
||||
//处理武器
|
||||
roleData.weaponData = await this.handleWeapon(equip)
|
||||
}else{
|
||||
//圣遗物
|
||||
roleData.artifacts.push(await this.handleArtifact(equip))
|
||||
}
|
||||
}
|
||||
}
|
||||
//技能
|
||||
let tmp ={}
|
||||
for(const key in avatar.skillLevelMap){
|
||||
let skillData = gsCfg.getSkillDataByskillId(key,avatarName)
|
||||
await this.cacheIcon(skillData.icon)
|
||||
let exLevel = 0
|
||||
if(skillData.name.includes('普通攻击')){
|
||||
tmp.a = {skillId: key, level: avatar.skillLevelMap[key], exLvl: exLevel, ...skillData}
|
||||
}else if(!tmp.e){
|
||||
if(typeof(avatar.proudSkillExtraLevelMap)!== 'undefined' && Object.keys(avatar.proudSkillExtraLevelMap).length>0){
|
||||
//命座加成的额外元素战技等级
|
||||
exLevel = 3
|
||||
}
|
||||
tmp.e = {skillId: key,level: avatar.skillLevelMap[key],exLvl: exLevel,...skillData}
|
||||
}else if(!tmp.q){
|
||||
if(typeof(avatar.proudSkillExtraLevelMap)!== 'undefined' && Object.keys(avatar.proudSkillExtraLevelMap).length>0){
|
||||
//命座加成的额外元素爆发等级
|
||||
exLevel = 3
|
||||
}
|
||||
tmp.q = {skillId: key, level: avatar.skillLevelMap[key], exLvl: exLevel, ...skillData}
|
||||
}
|
||||
}
|
||||
avatar.skillLevelMap = Object.assign(avatar.skillLevelMap,tmp)
|
||||
}
|
||||
}
|
||||
}
|
||||
for (const i in data.playerInfo.showAvatarInfoList) {
|
||||
if (Object.hasOwnProperty.call(data.playerInfo.showAvatarInfoList, i)) {
|
||||
const avatarInfo = data.playerInfo.showAvatarInfoList[i];
|
||||
if(avatarInfo.avatarId === roleData.avatarId){
|
||||
roleData.avatarLevel = avatarInfo.level
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
this.e.reply('该uid未开放角色详情')
|
||||
}
|
||||
return {text, roleData}
|
||||
}
|
||||
async getEnkaUserData(){
|
||||
let client = new EnkaClient(4000)
|
||||
let user = await client.fetchUser(parseInt(this.uid));
|
||||
user.updateTime = this.dateFormat(new Date(),"yyyy-MM-dd HH:mm:ss")
|
||||
this.writeJson(user)
|
||||
return user
|
||||
}
|
||||
creatFile () {
|
||||
if (!fs.existsSync(this.path)) {
|
||||
fs.mkdirSync(this.path)
|
||||
}
|
||||
if (!this.uid) return
|
||||
let file = `${this.path}${this.uid}/`
|
||||
if (!fs.existsSync(file)) {
|
||||
fs.mkdirSync(file)
|
||||
}
|
||||
}
|
||||
writeJson (data) {
|
||||
this.creatFile()
|
||||
|
||||
let file = `${this.path}${this.uid}/__data.json`
|
||||
|
||||
fs.writeFileSync(file, JSON.stringify(data, '', '\t'))
|
||||
}
|
||||
readJson () {
|
||||
let enkaJson
|
||||
let file = `${this.path}/${this.uid}/__data.json`
|
||||
if (fs.existsSync(file)) {
|
||||
// 获取本地数据 进行数据合并
|
||||
enkaJson = JSON.parse(fs.readFileSync(file, 'utf8'))
|
||||
}
|
||||
|
||||
return enkaJson
|
||||
}
|
||||
replyException(error){
|
||||
let uidNotFoundRegex = /User with uid \d+ was not found./
|
||||
let requestAbortedRegex = /The user aborted a request/
|
||||
if(uidNotFoundRegex.test(error.message)){
|
||||
this.e.reply(`找不到uid${this.uid}的任何信息`)
|
||||
}else if(requestAbortedRegex.test(error.message)){
|
||||
this.e.reply("请求过于频繁,请30分钟后再试")
|
||||
}else{
|
||||
this.e.reply(error.message)
|
||||
}
|
||||
}
|
||||
async cacheIcon(name){
|
||||
if(!fs.existsSync(`data/enkaNetwork/cache/icon/${name}.png`)){
|
||||
//如果图标没有缓存先缓存到本地
|
||||
if(!this.cached){
|
||||
this.cached = true
|
||||
this.e.reply('云崽正在缓存素材中,时间稍微有点长,请耐心等待')
|
||||
}
|
||||
let param = {
|
||||
method: 'get',
|
||||
headers: {
|
||||
referer: `https://enka.network/u/${this.uid}`,
|
||||
accept: "image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8",
|
||||
"sec-ch-ua": 'Microsoft Edge";v="105", "Not)A;Brand";v="8", "Chromium";v="105',
|
||||
"sec-ch-ua-mobile": "?0",
|
||||
"sec-ch-ua-platform": "Windows",
|
||||
"sec-fetch-dest": "image",
|
||||
"sec-fetch-mode": "no-cors",
|
||||
"sec-fetch-site": "same-origin",
|
||||
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.27"
|
||||
}
|
||||
}
|
||||
await common.downFile(`http://enka.network/ui/${name}.png`,`./data/enkaNetwork/cache/icon/${name}.png`,param)
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 1:HP白字
|
||||
2:HP绿字
|
||||
4:ATK白字
|
||||
5:ATK绿字-整数
|
||||
6:ATK绿字-百分比
|
||||
7:防御白字
|
||||
8:防御绿字
|
||||
20:暴击率
|
||||
21:未知,估计是暴击率绿字的占位符
|
||||
22:爆伤
|
||||
23:充能
|
||||
26:治疗加成
|
||||
27:未知
|
||||
28:未知
|
||||
29:未知
|
||||
30:物理伤害加成
|
||||
40:火伤加成百分比
|
||||
41:雷伤加成百分比
|
||||
42:水伤加成百分比
|
||||
43:草伤加成百分比
|
||||
44:风伤加成百分比
|
||||
45:岩伤加成百分比
|
||||
46:冰伤加成百分比
|
||||
50:火元素抗性
|
||||
51:雷元素抗性
|
||||
52:水元素抗性
|
||||
53:草元素抗性
|
||||
54:风元素抗性
|
||||
55:岩元素抗性
|
||||
56:冰元素抗性
|
||||
76:未知
|
||||
1006:总充能
|
||||
1010:总HP
|
||||
2000:总HP
|
||||
2001:总攻击
|
||||
2002:总防御
|
||||
2003:未知
|
||||
*/
|
||||
handleProp(roleData){
|
||||
let fightPropMap = roleData.fightPropMap
|
||||
let showProp = []
|
||||
showProp.push(this.getPropObj(roleData,"生命值上限","1010","1","2"))//HP
|
||||
showProp.push({
|
||||
name: "攻击力",
|
||||
sum: fightPropMap["2001"].toFixed(),
|
||||
white: fightPropMap["4"].toFixed(),
|
||||
green: (fightPropMap["5"] + fightPropMap["4"] * (fightPropMap["6"] ? fightPropMap["6"] : 0)).toFixed()}
|
||||
)//ATK
|
||||
showProp.push(this.getPropObj(roleData,"防御力","2002","7","8"))//防御力
|
||||
showProp.push(this.getPropObj(roleData,"元素精通","28"))//元素精通
|
||||
showProp.push({
|
||||
name: "暴击率",
|
||||
sum: (fightPropMap["20"]*100).toFixed(1) + "%"
|
||||
})
|
||||
showProp.push({
|
||||
name:"暴击伤害",
|
||||
sum: (fightPropMap["22"]*100).toFixed(1) + "%"
|
||||
})
|
||||
showProp.push({
|
||||
name:"元素充能效率",
|
||||
sum: (fightPropMap["23"]*100).toFixed(1) + "%"
|
||||
})
|
||||
if(fightPropMap["26"]){
|
||||
showProp.push({
|
||||
name:"治疗加成",
|
||||
sum: (fightPropMap["26"]*100).toFixed(1) + "%"
|
||||
})
|
||||
}
|
||||
if(fightPropMap["30"]){
|
||||
showProp.push({
|
||||
name:"物理伤害加成",
|
||||
sum: (fightPropMap["30"]*100).toFixed(1) + "%"
|
||||
})
|
||||
}
|
||||
if(roleData.element === '火' && fightPropMap["40"]){
|
||||
showProp.push({
|
||||
name:"火元素伤害加成",
|
||||
sum: (fightPropMap["40"]*100).toFixed(1) + "%"
|
||||
})
|
||||
}
|
||||
if(roleData.element === '雷' && fightPropMap["41"]){
|
||||
showProp.push({
|
||||
name:"雷元素伤害加成",
|
||||
sum: (fightPropMap["41"]*100).toFixed(1) + "%"
|
||||
})
|
||||
}
|
||||
if(roleData.element === '水' && fightPropMap["42"]){
|
||||
showProp.push({
|
||||
name:"水元素伤害加成",
|
||||
sum: (fightPropMap["42"]*100).toFixed(1) + "%"
|
||||
})
|
||||
}
|
||||
if(roleData.element === '草' && fightPropMap["43"]){
|
||||
showProp.push({
|
||||
name:"草元素伤害加成",
|
||||
sum: (fightPropMap["43"]*100).toFixed(1) + "%"
|
||||
})
|
||||
}
|
||||
if(roleData.element === '风' && fightPropMap["44"]){
|
||||
showProp.push({
|
||||
name:"风元素伤害加成",
|
||||
sum: (fightPropMap["44"]*100).toFixed(1) + "%"
|
||||
})
|
||||
}
|
||||
if(roleData.element === '岩' && fightPropMap["45"]){
|
||||
showProp.push({
|
||||
name:"岩元素伤害加成",
|
||||
sum: (fightPropMap["45"]*100).toFixed(1) + "%"
|
||||
})
|
||||
}
|
||||
if(roleData.element === '冰' && fightPropMap["46"]){
|
||||
showProp.push({
|
||||
name:"冰元素伤害加成",
|
||||
sum: (fightPropMap["46"]*100).toFixed(1) + "%"
|
||||
})
|
||||
}
|
||||
return showProp
|
||||
}
|
||||
getPropObj(roleData,name,sumKey,whiteKey,greenKey){
|
||||
let prop = {}
|
||||
prop.name = name
|
||||
prop.sum = roleData.fightPropMap[sumKey].toFixed()//银行家舍入法
|
||||
if(whiteKey){
|
||||
prop.white = roleData.fightPropMap[whiteKey].toFixed()
|
||||
}
|
||||
if(greenKey){
|
||||
if(roleData.fightPropMap[greenKey]){
|
||||
prop.green = roleData.fightPropMap[greenKey].toFixed()
|
||||
}else{
|
||||
prop.green = 0
|
||||
}
|
||||
}
|
||||
return prop
|
||||
}
|
||||
async handleArtifact(equip){
|
||||
let artifact = {}
|
||||
artifact.icon = equip.flat.icon
|
||||
await this.cacheIcon(artifact.icon)//缓存图标
|
||||
artifact.mainPropName = gsCfg.fightPropIdToName(equip.flat.reliquaryMainstat.mainPropId)
|
||||
artifact.mainPropVal = equip.flat.reliquaryMainstat.statValue
|
||||
artifact.level = equip.reliquary.level - 1//圣遗物等级
|
||||
artifact.starLevelArray = []//圣遗物星级,用于循环星星
|
||||
for(var i = 0;i < equip.flat.rankLevel;i++){
|
||||
artifact.starLevelArray.push(i)
|
||||
}
|
||||
artifact.subProps = []
|
||||
for (const key in equip.flat.reliquarySubstats) {
|
||||
if (Object.hasOwnProperty.call(equip.flat.reliquarySubstats, key)) {
|
||||
const substate = equip.flat.reliquarySubstats[key];
|
||||
artifact.subProps.push({
|
||||
name:gsCfg.fightPropIdToName(substate.appendPropId),
|
||||
val:substate.statValue
|
||||
})
|
||||
}
|
||||
}
|
||||
return artifact
|
||||
}
|
||||
async handleWeapon(equip){
|
||||
let weaponData = gsCfg.getWeaponDataByWeaponHash(equip.flat.nameTextMapHash)
|
||||
await this.cacheIcon(weaponData.icon)//缓存图标
|
||||
weaponData.rankLvlArray = []//星级,用于循环生成星星
|
||||
weaponData.level = equip.weapon.level//等级
|
||||
weaponData.affix = equip.weapon.affix//精炼
|
||||
for(var i = 0;i < equip.flat.rankLevel;i++){
|
||||
weaponData.rankLvlArray.push(i)
|
||||
}
|
||||
for(const key in equip.weapon.affixMap){
|
||||
weaponData.affix = equip.weapon.affixMap[key] + 1//精炼等级
|
||||
}
|
||||
for (const i in equip.flat.weaponStats) {
|
||||
if (Object.hasOwnProperty.call(equip.flat.weaponStats, i)) {
|
||||
const weaponState = equip.flat.weaponStats[i];
|
||||
weaponState.appendPropName = gsCfg.fightPropIdToName(weaponState.appendPropId)
|
||||
}
|
||||
}
|
||||
weaponData.weaponStats = equip.flat.weaponStats
|
||||
return weaponData
|
||||
}
|
||||
dateFormat (date,fmt) {
|
||||
var o = {
|
||||
"M+": date.getMonth() + 1, //月份
|
||||
"d+": date.getDate(), //日
|
||||
"H+": date.getHours(), //小时
|
||||
"m+": date.getMinutes(), //分
|
||||
"s+": date.getSeconds(), //秒
|
||||
"q+": Math.floor((date.getMonth() + 3) / 3), //季度
|
||||
"S": date.getMilliseconds() //毫秒
|
||||
};
|
||||
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
|
||||
for (var k in o)
|
||||
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
|
||||
return fmt;
|
||||
}
|
||||
}
|
||||
|
168
pnpm-lock.yaml
168
pnpm-lock.yaml
@ -1,5 +1,10 @@
|
||||
lockfileVersion: 5.4
|
||||
|
||||
patchedDependencies:
|
||||
oicq@2.3.1:
|
||||
hash: yxoebqbnnwotwbrdlrfgidvncy
|
||||
path: patches/oicq@2.3.1.patch
|
||||
|
||||
importers:
|
||||
|
||||
.:
|
||||
@ -7,7 +12,6 @@ importers:
|
||||
art-template: ^4.13.2
|
||||
chalk: ^5.0.1
|
||||
chokidar: ^3.5.3
|
||||
enka-network-api: git+https://github.com/yuko1101/enka-network-api.git
|
||||
eslint: ^8.18.0
|
||||
eslint-config-standard: ^17.0.0
|
||||
eslint-plugin-import: ^2.26.0
|
||||
@ -25,6 +29,7 @@ importers:
|
||||
node-schedule: ^2.1.0
|
||||
node-xlsx: ^0.21.0
|
||||
oicq: ^2.3.1
|
||||
patch-package: ^6.5.0
|
||||
pm2: ^5.2.0
|
||||
puppeteer: ^13.7.0
|
||||
redis: ^4.1.0
|
||||
@ -33,7 +38,6 @@ importers:
|
||||
art-template: 4.13.2
|
||||
chalk: 5.0.1
|
||||
chokidar: 3.5.3
|
||||
enka-network-api: github.com/yuko1101/enka-network-api/b253879ba9c7d7a548772937e515133c61a42ae4
|
||||
https-proxy-agent: 5.0.1
|
||||
inquirer: 8.2.4
|
||||
lodash: 4.17.21
|
||||
@ -43,7 +47,8 @@ importers:
|
||||
node-fetch: 3.2.6
|
||||
node-schedule: 2.1.0
|
||||
node-xlsx: 0.21.0
|
||||
oicq: 2.3.1
|
||||
oicq: 2.3.1_yxoebqbnnwotwbrdlrfgidvncy
|
||||
patch-package: 6.5.0
|
||||
pm2: 5.2.0
|
||||
puppeteer: 13.7.0
|
||||
redis: 4.1.0
|
||||
@ -255,6 +260,10 @@ packages:
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@yarnpkg/lockfile/1.1.0:
|
||||
resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==}
|
||||
dev: false
|
||||
|
||||
/accepts/1.3.8:
|
||||
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
|
||||
engines: {node: '>= 0.6'}
|
||||
@ -616,6 +625,10 @@ packages:
|
||||
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
|
||||
dev: false
|
||||
|
||||
/ci-info/2.0.0:
|
||||
resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
|
||||
dev: false
|
||||
|
||||
/clean-css/4.2.4:
|
||||
resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==}
|
||||
engines: {node: '>= 4.0'}
|
||||
@ -748,6 +761,17 @@ packages:
|
||||
- encoding
|
||||
dev: false
|
||||
|
||||
/cross-spawn/6.0.5:
|
||||
resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==}
|
||||
engines: {node: '>=4.8'}
|
||||
dependencies:
|
||||
nice-try: 1.0.5
|
||||
path-key: 2.0.1
|
||||
semver: 5.7.1
|
||||
shebang-command: 1.2.0
|
||||
which: 1.3.1
|
||||
dev: false
|
||||
|
||||
/cross-spawn/7.0.3:
|
||||
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
|
||||
engines: {node: '>= 8'}
|
||||
@ -1396,6 +1420,12 @@ packages:
|
||||
path-exists: 4.0.0
|
||||
dev: false
|
||||
|
||||
/find-yarn-workspace-root/2.0.0:
|
||||
resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==}
|
||||
dependencies:
|
||||
micromatch: 4.0.5
|
||||
dev: false
|
||||
|
||||
/flat-cache/3.0.4:
|
||||
resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
|
||||
engines: {node: ^10.12.0 || >=12.0.0}
|
||||
@ -1463,6 +1493,15 @@ packages:
|
||||
universalify: 2.0.0
|
||||
dev: false
|
||||
|
||||
/fs-extra/7.0.1:
|
||||
resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
|
||||
engines: {node: '>=6 <7 || >=8'}
|
||||
dependencies:
|
||||
graceful-fs: 4.2.10
|
||||
jsonfile: 4.0.0
|
||||
universalify: 0.1.2
|
||||
dev: false
|
||||
|
||||
/fs-extra/8.1.0:
|
||||
resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
|
||||
engines: {node: '>=6 <7 || >=8'}
|
||||
@ -1791,6 +1830,13 @@ packages:
|
||||
engines: {node: '>= 0.4'}
|
||||
dev: true
|
||||
|
||||
/is-ci/2.0.0:
|
||||
resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
ci-info: 2.0.0
|
||||
dev: false
|
||||
|
||||
/is-core-module/2.9.0:
|
||||
resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==}
|
||||
dependencies:
|
||||
@ -1803,6 +1849,12 @@ packages:
|
||||
has-tostringtag: 1.0.0
|
||||
dev: true
|
||||
|
||||
/is-docker/2.2.1:
|
||||
resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
|
||||
engines: {node: '>=8'}
|
||||
hasBin: true
|
||||
dev: false
|
||||
|
||||
/is-extglob/2.1.1:
|
||||
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
@ -1891,13 +1943,19 @@ packages:
|
||||
call-bind: 1.0.2
|
||||
dev: true
|
||||
|
||||
/is-wsl/2.2.0:
|
||||
resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
is-docker: 2.2.1
|
||||
dev: false
|
||||
|
||||
/isarray/0.0.1:
|
||||
resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
|
||||
dev: false
|
||||
|
||||
/isexe/2.0.0:
|
||||
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
|
||||
dev: true
|
||||
|
||||
/js-git/0.7.8:
|
||||
resolution: {integrity: sha512-+E5ZH/HeRnoc/LW0AmAyhU+mNcWBzAKE+30+IDMLSLbbK+Tdt02AdkOKq9u15rlJsDEGFqtgckc8ZM59LhhiUA==}
|
||||
@ -1952,6 +2010,12 @@ packages:
|
||||
graceful-fs: 4.2.10
|
||||
dev: false
|
||||
|
||||
/klaw-sync/6.0.0:
|
||||
resolution: {integrity: sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==}
|
||||
dependencies:
|
||||
graceful-fs: 4.2.10
|
||||
dev: false
|
||||
|
||||
/lazy/1.0.11:
|
||||
resolution: {integrity: sha512-Y+CjUfLmIpoUCCRl0ub4smrYtGGr5AOa2AKOaWelGHOGz33X/Y/KizefGqbkwfz44+cnq/+9habclf8vOmu2LA==}
|
||||
engines: {node: '>=0.2.0'}
|
||||
@ -2074,6 +2138,14 @@ packages:
|
||||
engines: {node: '>= 0.6'}
|
||||
dev: true
|
||||
|
||||
/micromatch/4.0.5:
|
||||
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
|
||||
engines: {node: '>=8.6'}
|
||||
dependencies:
|
||||
braces: 3.0.2
|
||||
picomatch: 2.3.1
|
||||
dev: false
|
||||
|
||||
/mime-db/1.52.0:
|
||||
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
|
||||
engines: {node: '>= 0.6'}
|
||||
@ -2102,7 +2174,6 @@ packages:
|
||||
|
||||
/minimist/1.2.6:
|
||||
resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==}
|
||||
dev: true
|
||||
|
||||
/mkdirp-classic/0.5.3:
|
||||
resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
|
||||
@ -2173,6 +2244,10 @@ packages:
|
||||
engines: {node: '>= 0.4.0'}
|
||||
dev: false
|
||||
|
||||
/nice-try/1.0.5:
|
||||
resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
|
||||
dev: false
|
||||
|
||||
/no-case/2.3.2:
|
||||
resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==}
|
||||
dependencies:
|
||||
@ -2261,7 +2336,7 @@ packages:
|
||||
es-abstract: 1.20.1
|
||||
dev: true
|
||||
|
||||
/oicq/2.3.1:
|
||||
/oicq/2.3.1_yxoebqbnnwotwbrdlrfgidvncy:
|
||||
resolution: {integrity: sha512-mRw/GgdRKFMylnrlnnywzCIwvad6fF5E4WZfIlval070wEc3w9yMV49i9epFltWkU/JGNMDS4t5wWdZEYzW0EQ==}
|
||||
engines: {node: '>= v14'}
|
||||
dependencies:
|
||||
@ -2274,6 +2349,7 @@ packages:
|
||||
- debug
|
||||
- supports-color
|
||||
dev: false
|
||||
patched: true
|
||||
|
||||
/on-finished/2.4.1:
|
||||
resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
|
||||
@ -2294,6 +2370,14 @@ packages:
|
||||
mimic-fn: 2.1.0
|
||||
dev: false
|
||||
|
||||
/open/7.4.2:
|
||||
resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
is-docker: 2.2.1
|
||||
is-wsl: 2.2.0
|
||||
dev: false
|
||||
|
||||
/optionator/0.8.3:
|
||||
resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
@ -2422,6 +2506,27 @@ packages:
|
||||
engines: {node: '>= 0.8'}
|
||||
dev: true
|
||||
|
||||
/patch-package/6.5.0:
|
||||
resolution: {integrity: sha512-tC3EqJmo74yKqfsMzELaFwxOAu6FH6t+FzFOsnWAuARm7/n2xB5AOeOueE221eM9gtMuIKMKpF9tBy/X2mNP0Q==}
|
||||
engines: {node: '>=10', npm: '>5'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
'@yarnpkg/lockfile': 1.1.0
|
||||
chalk: 4.1.2
|
||||
cross-spawn: 6.0.5
|
||||
find-yarn-workspace-root: 2.0.0
|
||||
fs-extra: 7.0.1
|
||||
is-ci: 2.0.0
|
||||
klaw-sync: 6.0.0
|
||||
minimist: 1.2.6
|
||||
open: 7.4.2
|
||||
rimraf: 2.7.1
|
||||
semver: 5.7.1
|
||||
slash: 2.0.0
|
||||
tmp: 0.0.33
|
||||
yaml: 1.10.2
|
||||
dev: false
|
||||
|
||||
/path-exists/3.0.0:
|
||||
resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
|
||||
engines: {node: '>=4'}
|
||||
@ -2436,6 +2541,11 @@ packages:
|
||||
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
/path-key/2.0.1:
|
||||
resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==}
|
||||
engines: {node: '>=4'}
|
||||
dev: false
|
||||
|
||||
/path-key/3.1.1:
|
||||
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
|
||||
engines: {node: '>=8'}
|
||||
@ -2792,6 +2902,13 @@ packages:
|
||||
resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==}
|
||||
dev: false
|
||||
|
||||
/rimraf/2.7.1:
|
||||
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
glob: 7.2.3
|
||||
dev: false
|
||||
|
||||
/rimraf/3.0.2:
|
||||
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
|
||||
hasBin: true
|
||||
@ -2882,6 +2999,13 @@ packages:
|
||||
/setprototypeof/1.2.0:
|
||||
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
|
||||
|
||||
/shebang-command/1.2.0:
|
||||
resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dependencies:
|
||||
shebang-regex: 1.0.0
|
||||
dev: false
|
||||
|
||||
/shebang-command/2.0.0:
|
||||
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
|
||||
engines: {node: '>=8'}
|
||||
@ -2889,6 +3013,11 @@ packages:
|
||||
shebang-regex: 3.0.0
|
||||
dev: true
|
||||
|
||||
/shebang-regex/1.0.0:
|
||||
resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
/shebang-regex/3.0.0:
|
||||
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
|
||||
engines: {node: '>=8'}
|
||||
@ -2910,6 +3039,11 @@ packages:
|
||||
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
|
||||
dev: false
|
||||
|
||||
/slash/2.0.0:
|
||||
resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==}
|
||||
engines: {node: '>=6'}
|
||||
dev: false
|
||||
|
||||
/smart-buffer/4.2.0:
|
||||
resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
|
||||
engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
|
||||
@ -3292,6 +3426,13 @@ packages:
|
||||
is-symbol: 1.0.4
|
||||
dev: true
|
||||
|
||||
/which/1.3.1:
|
||||
resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
isexe: 2.0.0
|
||||
dev: false
|
||||
|
||||
/which/2.0.2:
|
||||
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
|
||||
engines: {node: '>= 8'}
|
||||
@ -3390,6 +3531,11 @@ packages:
|
||||
/yallist/4.0.0:
|
||||
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
|
||||
|
||||
/yaml/1.10.2:
|
||||
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
|
||||
engines: {node: '>= 6'}
|
||||
dev: false
|
||||
|
||||
/yaml/2.1.1:
|
||||
resolution: {integrity: sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==}
|
||||
engines: {node: '>= 14'}
|
||||
@ -3409,13 +3555,3 @@ packages:
|
||||
buffer-crc32: 0.2.13
|
||||
fd-slicer: 1.1.0
|
||||
dev: false
|
||||
|
||||
github.com/yuko1101/enka-network-api/b253879ba9c7d7a548772937e515133c61a42ae4:
|
||||
resolution: {tarball: https://codeload.github.com/yuko1101/enka-network-api/tar.gz/b253879ba9c7d7a548772937e515133c61a42ae4}
|
||||
name: enka-network-api
|
||||
version: 1.0.0
|
||||
dependencies:
|
||||
node-fetch: 2.6.7
|
||||
transitivePeerDependencies:
|
||||
- encoding
|
||||
dev: false
|
||||
|
Loading…
Reference in New Issue
Block a user