将 web-server 和 game-server 中的公共文件改为链接

This commit is contained in:
liangtongchuan
2020-09-10 17:20:27 +08:00
parent f8ac401c67
commit dbff02f5a6
32 changed files with 126 additions and 861 deletions

1
web-server/app/consts Symbolic link
View File

@@ -0,0 +1 @@
../../shared/consts

View File

@@ -1,12 +0,0 @@
// export const TURBO_CORE_URL = 'https://coresrv.tgamebox.cn';
// export const APP_ID = 'AXaXmIHPs9eONvzrBesD8aSKQNXYdALF';
// export const TURBO_PARM_SECRET = 'ipqw05du6ob4x130w89t31yrqd6xs005zzltcmg2zpqnvrjp1s';
// export const ENCRYPT_IV = 'f7182j5f04e377ux';
// export const ENCRYPT_KEY = 'fiqaxijabbantusmprc234fj';
// export const AUTH_SMS_CNT_PER_DAY = 8;
// export const COUNTER = {
// UID: 'uid',
// };

1
web-server/app/db Symbolic link
View File

@@ -0,0 +1 @@
../../shared/db

View File

@@ -1,24 +0,0 @@
import { prop, pre } from '@typegoose/typegoose';
/**
* BaseModel
*/
@pre<BaseModel>('save', function(next) {
if (!this.createdAt || this.isNew) {
this.createdAt = this.updatedAt = new Date();
} else {
this.updatedAt = new Date();
}
next();
})
export default class BaseModel {
_id?: string
@prop()
createdAt: Date
@prop()
updatedAt: Date
}

View File

@@ -1,23 +0,0 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop } from '@typegoose/typegoose';
/**
* 自增 ID
*/
@index({ name: 1 })
export default class Counter extends BaseModel {
@prop({ required: true })
name: string;
@prop({ required: true, default: 1 })
seq: number;
public static async getNewCounter(name: string, lean = true) {
const counter = await CounterModel.findOneAndUpdate({ name }, { $inc: { seq: 1 } }, { new: true, upsert: true }).lean(lean);
return counter?.seq;
}
}
export const CounterModel = getModelForClass(Counter);

View File

@@ -1,42 +0,0 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop } from '@typegoose/typegoose';
@index({ roleId: 1, hid: 1, eid: 1 })
@index({ seqId: 1 })
export default class Equip extends BaseModel {
@prop({ required: true })
roleId: number; // 角色 id
@prop({ required: true })
roleName: string; // 角色名称
@prop({ required: true })
eid: number; // 装备 id
@prop({ required: true })
type: number; // 装备类型
@prop({ required: true })
eName: string; // 装备名称
@prop({ required: true })
seqId: number; // 装备表自增 id
@prop({ required: true })
hid: number; // 装备此装备的武将 id
@prop({ required: true })
lv: number; // 强化等级
randSe: [{ // 强化随机属性
seType: number; // 属性类型
value: number; // 属性数值
}];
@prop({ required: true })
randRange: number; // 物攻策攻数值浮动上下限变化率,浮点数
@prop({ required: true })
initHoleCnt: number; // 初始珠宝孔位个数
@prop({ required: true })
holes: [{
id: number; // 宝石 id待定也可能是 type + lv
lv: number; // 宝石等级
}];
}
export const EquipModel = getModelForClass(Equip);

View File

@@ -1,74 +0,0 @@
import { APP_ID } from './../../../shared/consts/consts';
import BaseModel from './BaseModel';
import { index, getModelForClass, prop } from '@typegoose/typegoose';
class ServerInfo {
@prop({ required: true })
name: string;
@prop({ required: true })
host: string;
@prop({ required: false })
port: number;
@prop({ required: true })
status: number;
@prop({ required: true })
createTime: Date;
@prop({ required: true })
serverType: string;
}
/**
* 游戏字段接口
*/
@index({ id: 1 })
export default class Game extends BaseModel {
@prop({ required: true })
id: number;
@prop({ required: true })
name: string;
@prop({ required: true })
nameEn: string;
@prop({ required: true })
des: string;
@prop({ required: true })
serverList: Array<ServerInfo>;
@prop({ required: true })
iconUrl: string;
@prop({ required: true })
version: string;
@prop({ required: true })
versionCode: number;
public static async getServerListByType(serverType: string) {
let game = await GameModel.findOne().lean();
if (!game) {
const serverInfo: ServerInfo = { name: '常山少年', host: 'pinus_test.trgame.cn', port: 3014, status: 1, createTime: new Date(), serverType: 'official' };
const iconUrl = `https://download.tgamebox.cn/avatar/${APP_ID}/1.png`;
game = await GameModel.findOneAndUpdate(
{},
{ id: 1, name: '赵云传', nameEn: 'zyz', des: '牛逼的战棋', iconUrl, version: '0.0.1', versionCode: 1, $push: { serverList: serverInfo } },
{ upsert: true, new: true },
).lean();
}
console.log(serverType, game);
let serverList: Array<ServerInfo> = game ? game.serverList : [];
serverList = serverList.filter(item => { return item.serverType === serverType; });
console.log(serverType, serverList);
return serverList;
}
}
export const GameModel = getModelForClass(Game);

View File

@@ -1,54 +0,0 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, Ref } from '@typegoose/typegoose';
import Equip from './Equip';
/**
* 英雄表
*/
@index({ roleId: 1, hid: 1 })
export default class Hero extends BaseModel {
@prop({ required: true })
roleId: number; // 角色 id
@prop({ required: true })
roleName: string; // 角色名称
@prop({ required: true })
hid: number; // 武将 id
@prop({ required: true })
hName: string; // 武将名
@prop({ required: true })
seqId: number; // 武将表自增 id
@prop({ required: true })
exp: number; // 经验值
@prop({ required: true })
lv: number; // 武将等级
@prop({ required: true })
ce: number; // 武将战力
@prop({ required: true })
star: number; // 星级
@prop({ required: true })
rank: number; // 阶数
@prop({ required: true })
favour: number; // 好感度
@prop({ required: true })
favourLv: number; // 好感等级
@prop({ required: true })
conections: [{ // 羁绊
id: number; // 羁绊编号
name: string; // 羁绊名称
valid: boolean; // 是否开启
}];
@prop({ required: true })
skins: [{ // 皮肤
id: number; // id
enable: boolean; // 是否装备
}];
@prop({ ref: Equip })
equips: Ref<Equip>[]; // 武将装备引用数组
}
export const HeroModel = getModelForClass(Hero);

View File

@@ -1,108 +0,0 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop } from '@typegoose/typegoose';
import User from './User';
/**
* 角色字段接口
*/
@index({ roleId: 1 })
// @index({ userInfo.uid: 1, serverId: 1 })
export default class Role extends BaseModel {
@prop({ required: true })
userInfo: User;
@prop({ required: true })
seqId: number;
@prop({ required: true })
roleId: string; // 角色 id生成编码
@prop({ required: true })
roleName: string; // 角色名
@prop({ required: true })
serverType: string; // 服务器类型
@prop({ required: true })
serverId: number; // 区服 id
@prop({ required: true, default: false })
blocked: boolean; // 是否屏蔽
@prop({ required: true })
code: string; // 邀请码
@prop({ required: true, default: 0 })
exp: number; // 经验值
@prop({ required: true, default: 1 })
lv: number; // 主公等级
@prop({ required: true, default: 0 })
ce: number; // 总战力
@prop({ required: true, default: 100 })
tili: number; // 体力值
@prop({ required: true, default: 0 })
vLv: number; // VIP 等级
@prop({ required: true, default: 100 })
gold: number; // 总金币
@prop({ required: true, default: 0 })
paidGold: number; // 支付所得金币
@prop({ required: true, default: 100 })
giftGold: number; // 赠送所得金币
@prop({ required: true, default: 0 })
totalPay: number; // 总支付金额
@prop({ required: true, default: 0 })
totalBuy: number; // 总金币购买
@prop({ required: true, default: 0 })
totalCost: number; // 金币总花费
@prop({ required: true, default: [] })
payRecord: [{ // 支付记录
id: string; // 购买项 product id
cnt: number; // 购买次数
}];
@prop({ required: true, default: [] })
consumeGoods: [{ // 消耗品
id: number; // id
cnt: number; // 数量
}];
@prop({ required: true, default: [] })
souls: [{ // 将魂
id: number; // 武将 id
cnt: number; // 数量
}];
@prop({ required: true, default: [] })
pieces: [{ // 装备碎片
id: number; // 装备 id
cnt: number; // 数量
}];
@prop({ required: true, default: [] })
jewels: [{ // 珠宝
id: number; // 待定,也可能是 type + lv
cnt: number; // 数量
}];
@prop({ required: true, default: [] })
warStar: [{ // 关卡星级
id: number; // 关卡 id
star: number; // 星级
}];
@prop({ required: true, default: 1 })
loginCnt: number; // 登录次数
@prop({ required: true })
createTime: Date; // 创建时间
@prop({ required: true })
loginTime: Date; // 更新 / 登录时间
public static async findByUid(uid: number, serverId: number, lean = true) {
const role = await RoleModel.findOne({ 'userInfo.uid': uid, serverId }).lean(lean);
return role;
}
public static async createRole(uid: number, serverId: number, roleInfo: {roleId: string; roleName: string; seqId: number; code: string}, lean = true) {
const user = await User.findUserByUid(uid);
if (!user) return null;
const info = Object.assign(roleInfo, { userInfo: user, serverType: user.serverType, serverId });
const role = await RoleModel.findOneAndUpdate({ 'userInfo.uid': uid, serverId }, info, { upsert: true, new: true }).lean(lean);
return role;
}
}
export const RoleModel = getModelForClass(Role);

View File

@@ -1,64 +0,0 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop } from '@typegoose/typegoose';
const moment = require('moment');
/**
* 短信字段接口
*/
@index({ tel: 1 })
export default class Sms extends BaseModel {
@prop({ required: true })
tel: string;
@prop({ required: true })
telHash: string;
@prop({ required: true })
code: string;
@prop({ required: true })
used: boolean;
@prop({ required: true })
updateTime: Date;
@prop({ required: true })
countToday: number;
public static async findByTel(tel: string, lean = true) {
const sms = await smsModel.findOne({ tel }).lean(lean);
return sms;
}
public static async updateByTel(tel: string, code: string, used: boolean, updateTime: Date, countToday: number, lean = true) {
await smsModel.findOneAndUpdate({ tel }, { code, used, updateTime, countToday }, { upsert: true }).lean(lean);
}
public static async validateSms(tel: string, code: string, lean = true) {
const record = await smsModel.findOneAndUpdate({ tel, code, used: false }, { used: true }).lean(lean);
return !!record;
}
public async timeLimit(interval: number) {
if (Date.now() > this.updateTime.getTime() + interval) {
return false;
}
return true;
}
public async cntLimit(cnt: number) {
console.log('hasSendToday:', this.hasSendToday());
if (await this.hasSendToday() && this.countToday >= cnt) {
return true;
}
return false;
}
public async hasSendToday() {
console.log(moment(this.updateTime).format('YYYY-MM-DD'), moment(Date.now()).format('YYYY-MM-DD'));
return moment(this.updateTime).format('YYYY-MM-DD') === moment(Date.now()).format('YYYY-MM-DD');
}
}
export const smsModel = getModelForClass(Sms);

View File

@@ -1,91 +0,0 @@
import { COUNTER } from './../../../shared/consts/consts';
import { CounterModel } from './Counter';
import BaseModel from './BaseModel';
import { index, getModelForClass, prop } from '@typegoose/typegoose';
/**
* 用户字段接口
*/
@index({ tel: 1 })
@index({ uid: 1 })
export default class User extends BaseModel {
@prop({ required: true })
uid: number;
@prop({ required: true })
username: string;
@prop({ required: true })
token: string;
@prop({ required: true })
tel: string;
@prop({ required: true })
telHash: string;
@prop({ required: true })
channelId: string;
@prop({ required: true })
guestId: string;
// 最后登录 IP
@prop({ required: true })
ip: string;
@prop({ required: true })
lastLoginTime: Date;
@prop({ required: true })
createTime: Date;
platform: string;
@prop({ required: true })
platforms: [{
platform: string; // 平台ios, android, web, pc
unionId: string; // 用户标识
}];
@prop({ required: true })
pkgName: string;
// 服务器类型official, channel, ios, oversea
@prop({ required: true })
serverType: string;
// 账号是否被屏蔽
@prop({ required: true })
blocked: boolean;
public static async updateToken(tel: string, token: string, platform: string, pkgName: string, serverType: string, lean = true) {
let user = await UserModel.findOne({ tel }).lean();
const curTime: Date = new Date();
let update = {};
if (!user) {
const uid = await CounterModel.getNewCounter(COUNTER.UID);
update = Object.assign(update, { platform, pkgName, serverType, createTime: curTime, uid, username: `用户${uid}` });
}
update = Object.assign(update, { token, lastLoginTime: curTime });
user = await UserModel.findOneAndUpdate({ tel }, update, { upsert: true, new: true }).lean(lean);
return user;
}
public static async findUserByToken(token: string, lean = true) {
const user = await UserModel.findOne({ token }).select('uid token').lean(lean);
return user;
}
public static async findUserByTel(tel: string, lean = true) {
const user = await UserModel.findOne({ tel }).select('uid tel').lean(lean);
return user;
}
public static async findUserByUid(uid: number, lean = true) {
const user = await UserModel.findOne({ uid }).select('uid tel').lean(lean);
return user;
}
}
export const UserModel = getModelForClass(User);

View File

@@ -48,7 +48,6 @@ export default class Auth extends Service {
if (telVerify.status !== 0) {
return telVerify;
}
const sms = await smsModel.findByTel(tel, false);
if (sms) {
if (await sms.timeLimit(10000)) {

View File

@@ -21,7 +21,7 @@ export default (appInfo: EggAppInfo) => {
config.mongoose = {
url: 'mongodb://root:zyz_2020@dds-8vbdb47c6fb58a541.mongodb.zhangbei.rds.aliyuncs.com:3717,dds-8vbdb47c6fb58a542.mongodb.zhangbei.rds.aliyuncs.com:3717/admin?replicaSet=mgset-500808098', // 内网
options: {},
options: { useNewUrlParser: true, useUnifiedTopology: true },
};
config.alinode = {

View File

@@ -254,30 +254,6 @@
"resolved": "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz",
"integrity": "sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs="
},
"@typegoose/typegoose": {
"version": "7.3.4",
"resolved": "https://registry.npm.taobao.org/@typegoose/typegoose/download/@typegoose/typegoose-7.3.4.tgz",
"integrity": "sha1-HO0W0Z+cSTirrsSwNRwL+1YtQSE=",
"requires": {
"lodash": "^4.17.19",
"loglevel": "^1.6.8",
"reflect-metadata": "^0.1.13",
"semver": "^7.3.2",
"tslib": "^2.0.0"
},
"dependencies": {
"semver": {
"version": "7.3.2",
"resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz",
"integrity": "sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg="
},
"tslib": {
"version": "2.0.1",
"resolved": "https://registry.npm.taobao.org/tslib/download/tslib-2.0.1.tgz?cache=0&sync_timestamp=1596751904317&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-2.0.1.tgz",
"integrity": "sha1-QQ6w0RPltjVkkO7HSWA3JbAhtD4="
}
}
},
"@types/accepts": {
"version": "1.3.5",
"resolved": "https://registry.npm.taobao.org/@types/accepts/download/@types/accepts-1.3.5.tgz",
@@ -309,15 +285,6 @@
}
}
},
"@types/bson": {
"version": "4.0.2",
"resolved": "https://registry.npm.taobao.org/@types/bson/download/@types/bson-4.0.2.tgz",
"integrity": "sha1-esy4WUL8ObvbdRXU3kN8BPaYEV8=",
"dev": true,
"requires": {
"@types/node": "*"
}
},
"@types/color-name": {
"version": "1.1.1",
"resolved": "https://registry.npm.taobao.org/@types/color-name/download/@types/color-name-1.1.1.tgz?cache=0&sync_timestamp=1596837707987&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fcolor-name%2Fdownload%2F%40types%2Fcolor-name-1.1.1.tgz",
@@ -539,26 +506,6 @@
"integrity": "sha1-NSOxJqCwSUguHDwRh3Rg92Yi/6s=",
"dev": true
},
"@types/mongodb": {
"version": "3.5.26",
"resolved": "https://registry.npm.taobao.org/@types/mongodb/download/@types/mongodb-3.5.26.tgz?cache=0&sync_timestamp=1598396385471&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fmongodb%2Fdownload%2F%40types%2Fmongodb-3.5.26.tgz",
"integrity": "sha1-qhAxWSW6EM3Hkx7ygMD/b1T9N/M=",
"dev": true,
"requires": {
"@types/bson": "*",
"@types/node": "*"
}
},
"@types/mongoose": {
"version": "5.7.36",
"resolved": "https://registry.npm.taobao.org/@types/mongoose/download/@types/mongoose-5.7.36.tgz",
"integrity": "sha1-La4oxjBBxq+6ioPqApafRjs/ECE=",
"dev": true,
"requires": {
"@types/mongodb": "*",
"@types/node": "*"
}
},
"@types/node": {
"version": "7.10.11",
"resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-7.10.11.tgz?cache=0&sync_timestamp=1596839227404&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-7.10.11.tgz",
@@ -2333,54 +2280,11 @@
"file-uri-to-path": "1.0.0"
}
},
"bl": {
"version": "2.2.1",
"resolved": "https://registry.npm.taobao.org/bl/download/bl-2.2.1.tgz?cache=0&sync_timestamp=1598428657095&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbl%2Fdownload%2Fbl-2.2.1.tgz",
"integrity": "sha1-jBGntzBlXF1WiYzchxIk9A/ZAdU=",
"requires": {
"readable-stream": "^2.3.5",
"safe-buffer": "^5.1.1"
},
"dependencies": {
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz",
"integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz",
"integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
"requires": {
"safe-buffer": "~5.1.0"
}
}
}
},
"black-hole-stream": {
"version": "0.0.1",
"resolved": "https://registry.npm.taobao.org/black-hole-stream/download/black-hole-stream-0.0.1.tgz",
"integrity": "sha1-M7ega58edFPWBBuCl0SB0hUq6kI="
},
"bluebird": {
"version": "3.5.1",
"resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.5.1.tgz",
"integrity": "sha1-2VUfnemPH82h5oPRfukaBgLuLrk="
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz",
@@ -2423,11 +2327,6 @@
"electron-to-chromium": "^1.3.47"
}
},
"bson": {
"version": "1.1.5",
"resolved": "https://registry.npm.taobao.org/bson/download/bson-1.1.5.tgz?cache=0&sync_timestamp=1597069108497&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbson%2Fdownload%2Fbson-1.1.5.tgz",
"integrity": "sha1-Kqrpj832dQwISLDLod3sPHMGCjQ="
},
"buffer": {
"version": "5.6.0",
"resolved": "https://registry.npm.taobao.org/buffer/download/buffer-5.6.0.tgz",
@@ -3141,11 +3040,6 @@
"resolved": "https://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz",
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
},
"denque": {
"version": "1.4.1",
"resolved": "https://registry.npm.taobao.org/denque/download/denque-1.4.1.tgz",
"integrity": "sha1-Z0T/dkHBSMP4ppwwflEjXB9KN88="
},
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz",
@@ -6294,11 +6188,6 @@
"object.assign": "^4.1.0"
}
},
"kareem": {
"version": "2.3.1",
"resolved": "https://registry.npm.taobao.org/kareem/download/kareem-2.3.1.tgz",
"integrity": "sha1-3vEtnJQQF/q/sA+HOvlenJnhvoc="
},
"keygrip": {
"version": "1.1.0",
"resolved": "https://registry.npm.taobao.org/keygrip/download/keygrip-1.1.0.tgz",
@@ -6551,7 +6440,8 @@
"lodash": {
"version": "4.17.20",
"resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.20.tgz?cache=0&sync_timestamp=1597336097104&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.20.tgz",
"integrity": "sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI="
"integrity": "sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI=",
"dev": true
},
"log-symbols": {
"version": "2.2.0",
@@ -6562,11 +6452,6 @@
"chalk": "^2.0.1"
}
},
"loglevel": {
"version": "1.7.0",
"resolved": "https://registry.npm.taobao.org/loglevel/download/loglevel-1.7.0.tgz?cache=0&sync_timestamp=1598447642950&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floglevel%2Fdownload%2Floglevel-1.7.0.tgz",
"integrity": "sha1-coFmhVp0DVnTjbAc9G8ELKoEG7A="
},
"long": {
"version": "4.0.0",
"resolved": "https://registry.npm.taobao.org/long/download/long-4.0.0.tgz",
@@ -6657,12 +6542,6 @@
"p-is-promise": "^2.0.0"
}
},
"memory-pager": {
"version": "1.5.0",
"resolved": "https://registry.npm.taobao.org/memory-pager/download/memory-pager-1.5.0.tgz",
"integrity": "sha1-2HUWVdItOEaCdByXLyw9bfo+ZrU=",
"optional": true
},
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz",
@@ -6815,81 +6694,6 @@
"moment": ">= 2.9.0"
}
},
"mongodb": {
"version": "3.6.0",
"resolved": "https://registry.npm.taobao.org/mongodb/download/mongodb-3.6.0.tgz",
"integrity": "sha1-ur1xcuxxfi7T+F4Hmz8aop3ORyQ=",
"requires": {
"bl": "^2.2.0",
"bson": "^1.1.4",
"denque": "^1.4.1",
"require_optional": "^1.0.1",
"safe-buffer": "^5.1.2",
"saslprep": "^1.0.0"
}
},
"mongoose": {
"version": "5.10.1",
"resolved": "https://registry.npm.taobao.org/mongoose/download/mongoose-5.10.1.tgz",
"integrity": "sha1-zdCD1y4ZpcT/E0Fx19Gpl2vwH+k=",
"requires": {
"bson": "^1.1.4",
"kareem": "2.3.1",
"mongodb": "3.6.0",
"mongoose-legacy-pluralize": "1.0.2",
"mpath": "0.7.0",
"mquery": "3.2.2",
"ms": "2.1.2",
"regexp-clone": "1.0.0",
"safe-buffer": "5.2.1",
"sift": "7.0.1",
"sliced": "1.0.1"
},
"dependencies": {
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz?cache=0&sync_timestamp=1589129010497&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.2.1.tgz",
"integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY="
}
}
},
"mongoose-legacy-pluralize": {
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/mongoose-legacy-pluralize/download/mongoose-legacy-pluralize-1.0.2.tgz",
"integrity": "sha1-O6n5H6UHtRhtOZ+0CFS/8Y+1Y+Q="
},
"mpath": {
"version": "0.7.0",
"resolved": "https://registry.npm.taobao.org/mpath/download/mpath-0.7.0.tgz",
"integrity": "sha1-IOgQLidrcXCdbgfp+NTQ9kGvv7g="
},
"mquery": {
"version": "3.2.2",
"resolved": "https://registry.npm.taobao.org/mquery/download/mquery-3.2.2.tgz",
"integrity": "sha1-4Tg6OVGFLOI+N/YZqbNQ8fs2ZOc=",
"requires": {
"bluebird": "3.5.1",
"debug": "3.1.0",
"regexp-clone": "^1.0.0",
"safe-buffer": "5.1.2",
"sliced": "1.0.1"
},
"dependencies": {
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz",
"integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
"requires": {
"ms": "2.0.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1575472461218&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1575472461218&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
@@ -8643,8 +8447,7 @@
"version": "2.2.2",
"resolved": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz",
"integrity": "sha1-IfMz6ba46v8CRo9RRupAbTRfTa0=",
"dev": true,
"optional": true
"dev": true
},
"pify": {
"version": "3.0.0",
@@ -9161,11 +8964,6 @@
}
}
},
"regexp-clone": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/regexp-clone/download/regexp-clone-1.0.0.tgz",
"integrity": "sha1-Ii25Z2IydwViYLmSYmNUoEzpv2M="
},
"regexp.prototype.flags": {
"version": "1.3.0",
"resolved": "https://registry.npm.taobao.org/regexp.prototype.flags/download/regexp.prototype.flags-1.3.0.tgz",
@@ -9251,22 +9049,6 @@
"resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz",
"integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="
},
"require_optional": {
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/require_optional/download/require_optional-1.0.1.tgz",
"integrity": "sha1-TPNaQkf2TKPfjC7yCMxJSxyo/C4=",
"requires": {
"resolve-from": "^2.0.0",
"semver": "^5.1.0"
},
"dependencies": {
"resolve-from": {
"version": "2.0.0",
"resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-2.0.0.tgz",
"integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
}
}
},
"resolve": {
"version": "1.17.0",
"resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.17.0.tgz",
@@ -9404,15 +9186,6 @@
"resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz",
"integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo="
},
"saslprep": {
"version": "1.0.3",
"resolved": "https://registry.npm.taobao.org/saslprep/download/saslprep-1.0.3.tgz",
"integrity": "sha1-TAL5RrVs9UKX40e6EJPnrKxM8iY=",
"optional": true,
"requires": {
"sparse-bitfield": "^3.0.3"
}
},
"scmp": {
"version": "2.1.0",
"resolved": "https://registry.npm.taobao.org/scmp/download/scmp-2.1.0.tgz",
@@ -9522,11 +9295,6 @@
"object-inspect": "^1.7.0"
}
},
"sift": {
"version": "7.0.1",
"resolved": "https://registry.npm.taobao.org/sift/download/sift-7.0.1.tgz?cache=0&sync_timestamp=1597975540611&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsift%2Fdownload%2Fsift-7.0.1.tgz",
"integrity": "sha1-R9YsULFZ0xbxNy+LU/nBDNIaSwg="
},
"signal-exit": {
"version": "3.0.3",
"resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz?cache=0&sync_timestamp=1585253373618&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsignal-exit%2Fdownload%2Fsignal-exit-3.0.3.tgz",
@@ -9548,11 +9316,6 @@
"is-fullwidth-code-point": "^2.0.0"
}
},
"sliced": {
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/sliced/download/sliced-1.0.1.tgz",
"integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
},
"smart-buffer": {
"version": "4.1.0",
"resolved": "https://registry.npm.taobao.org/smart-buffer/download/smart-buffer-4.1.0.tgz",
@@ -9734,15 +9497,6 @@
"resolved": "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz",
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
},
"sparse-bitfield": {
"version": "3.0.3",
"resolved": "https://registry.npm.taobao.org/sparse-bitfield/download/sparse-bitfield-3.0.3.tgz",
"integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
"optional": true,
"requires": {
"memory-pager": "^1.0.2"
}
},
"spdx-correct": {
"version": "3.1.1",
"resolved": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz?cache=0&sync_timestamp=1590161967473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-correct%2Fdownload%2Fspdx-correct-3.1.1.tgz",

View File

@@ -22,19 +22,16 @@
"clean": "ets clean"
},
"dependencies": {
"@typegoose/typegoose": "^7.3.4",
"csprng": "^0.1.2",
"egg": "^2.6.1",
"egg-alinode": "^2.0.1",
"egg-cors": "^2.2.3",
"egg-scripts": "^2.6.0",
"mongoose": "^5.10.1",
"reflect-metadata": "^0.1.13",
"underscore": "^1.10.2"
},
"devDependencies": {
"@types/mocha": "^2.2.40",
"@types/mongoose": "^5.7.36",
"@types/node": "^7.0.12",
"@types/supertest": "^2.0.0",
"autod": "^3.0.1",