mirror of
https://github.com/MrMasrozYTLIVE/MCServer.git
synced 2024-11-21 20:38:23 -05:00
Initialized Git repository with project.
This commit is contained in:
commit
9b888ac71d
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
build
|
||||||
|
build/*
|
||||||
|
node_modules/
|
||||||
|
node_modules/*
|
||||||
|
.idea/
|
||||||
|
.idea/*
|
5
nodemon.json
Normal file
5
nodemon.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"watch": ["src"],
|
||||||
|
"ext": "*.ts, *.js",
|
||||||
|
"exec": "ts-node ./src/index.ts"
|
||||||
|
}
|
22
package.json
Normal file
22
package.json
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"name": "MCServer",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "index.js",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/glob": "^8.1.0",
|
||||||
|
"@types/node": "^20.10.4",
|
||||||
|
"bufferstuff": "^1.4.2",
|
||||||
|
"chalk": "4.1.1",
|
||||||
|
"glob": "7.1.6",
|
||||||
|
"nodemon": "^3.0.2",
|
||||||
|
"rimraf": "^5.0.5",
|
||||||
|
"ts-node": "^10.9.2",
|
||||||
|
"typescript": "^5.3.3"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"dev": "nodemon",
|
||||||
|
"build": "rimraf ./build && tsc",
|
||||||
|
"start": "npm run build && node build/index.js"
|
||||||
|
}
|
||||||
|
}
|
3
src/IEntity.ts
Normal file
3
src/IEntity.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
export interface IEntity {
|
||||||
|
entityID: Number
|
||||||
|
}
|
30
src/MinecraftServer.ts
Normal file
30
src/MinecraftServer.ts
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import { PacketManager } from "./utils/PacketManager";
|
||||||
|
import {PlayerManager} from "./utils/PlayerManager";
|
||||||
|
import {Server} from "node:net";
|
||||||
|
import {PacketDisconnectKick} from "./packet/impl/player/PacketDisconnectKick";
|
||||||
|
|
||||||
|
export class MinecraftServer {
|
||||||
|
public server: Server = new Server();
|
||||||
|
public static debug: boolean = true;
|
||||||
|
|
||||||
|
// EntityMap = new Map<Number, IEntity>();
|
||||||
|
|
||||||
|
public async start() {
|
||||||
|
this.server.listen(25565, async () => {
|
||||||
|
await PacketManager.loadPackets();
|
||||||
|
console.log('Listening!');
|
||||||
|
});
|
||||||
|
|
||||||
|
this.server.on('connection', socket => {
|
||||||
|
if(MinecraftServer.debug) console.log('New connection!');
|
||||||
|
|
||||||
|
PlayerManager.handleConnection(socket);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public stop() {
|
||||||
|
PlayerManager.sendPacketToAll(new PacketDisconnectKick(`Server closed`))
|
||||||
|
this.server.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
21
src/Player.ts
Normal file
21
src/Player.ts
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import {Socket} from "node:net";
|
||||||
|
import {IEntity} from "./IEntity";
|
||||||
|
|
||||||
|
export class Player implements IEntity {
|
||||||
|
public entityID: Number;
|
||||||
|
|
||||||
|
public xPosition: number = 0;
|
||||||
|
public yPosition: number = 100;
|
||||||
|
public stance: number = 102;
|
||||||
|
public zPosition: number = 0;
|
||||||
|
public yaw: number = 0;
|
||||||
|
public pitch: number = 0;
|
||||||
|
public onGround: boolean = false;
|
||||||
|
|
||||||
|
constructor(public options: IPlayerOption) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IPlayerOption {
|
||||||
|
client: Socket,
|
||||||
|
username: String
|
||||||
|
}
|
3
src/index.ts
Normal file
3
src/index.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import {MinecraftServer} from "./MinecraftServer";
|
||||||
|
|
||||||
|
new MinecraftServer().start();
|
22
src/packet/Packet.ts
Normal file
22
src/packet/Packet.ts
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import {PacketEnum} from "../utils/PacketEnum";
|
||||||
|
import {createWriter, Endian, IReader} from "bufferstuff";
|
||||||
|
import {Player} from "../Player";
|
||||||
|
import {Socket} from "node:net";
|
||||||
|
|
||||||
|
export class Packet {
|
||||||
|
constructor(public options: IPacketOption) {
|
||||||
|
options.name = PacketEnum[options.packetID].toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
readData(reader: IReader, player: Player) {}
|
||||||
|
writeData() {
|
||||||
|
return createWriter(Endian.BE).toBuffer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IPacketOption {
|
||||||
|
player?: Player,
|
||||||
|
packetID: PacketEnum,
|
||||||
|
name?: string,
|
||||||
|
kickReason?: string
|
||||||
|
}
|
22
src/packet/impl/PacketKeepAlive.ts
Normal file
22
src/packet/impl/PacketKeepAlive.ts
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import {Packet} from "../Packet";
|
||||||
|
import {PacketEnum} from "../../utils/PacketEnum";
|
||||||
|
import {createWriter, Endian, IReader} from "bufferstuff";
|
||||||
|
import {Player} from "../../Player";
|
||||||
|
import {PlayerManager} from "../../utils/PlayerManager";
|
||||||
|
|
||||||
|
export class PacketKeepAlive extends Packet {
|
||||||
|
constructor() {
|
||||||
|
super({
|
||||||
|
packetID: PacketEnum.KeepAlive
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
readData(reader: IReader, player: Player) {
|
||||||
|
PlayerManager.sendPacket(player, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
writeData() {
|
||||||
|
return createWriter(Endian.BE).writeUByte(this.options.packetID)
|
||||||
|
.toBuffer();
|
||||||
|
}
|
||||||
|
}
|
40
src/packet/impl/login/PacketHandshake.ts
Normal file
40
src/packet/impl/login/PacketHandshake.ts
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
import {Packet} from "../../Packet";
|
||||||
|
import {PacketEnum} from "../../../utils/PacketEnum";
|
||||||
|
import {createWriter, Endian, IReader} from "bufferstuff";
|
||||||
|
import {Player} from "../../../Player";
|
||||||
|
import {randomInt} from "node:crypto";
|
||||||
|
import {PlayerManager} from "../../../utils/PlayerManager";
|
||||||
|
|
||||||
|
export class PacketHandshake extends Packet {
|
||||||
|
constructor() {
|
||||||
|
super({
|
||||||
|
packetID: PacketEnum.Handshake
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
readData(reader: IReader, player: Player) {
|
||||||
|
const username = reader.readString16();
|
||||||
|
if(PlayerManager.getPlayer(username)) {
|
||||||
|
PlayerManager.kickPlayer(player, `Player with same username is already on the server.`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(username.length > 16) {
|
||||||
|
PlayerManager.kickPlayer(player, `Your username is too long!`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.options.username = username;
|
||||||
|
player.entityID = randomInt(0, 100);
|
||||||
|
|
||||||
|
PlayerManager.SocketMap.set(username, player.options.client);
|
||||||
|
|
||||||
|
PlayerManager.sendPacket(player, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
writeData() {
|
||||||
|
return createWriter(Endian.BE).writeUByte(this.options.packetID)
|
||||||
|
.writeString16("-")
|
||||||
|
.toBuffer();
|
||||||
|
}
|
||||||
|
}
|
42
src/packet/impl/login/PacketLogin.ts
Normal file
42
src/packet/impl/login/PacketLogin.ts
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import {Packet} from "../../Packet";
|
||||||
|
import {PacketEnum} from "../../../utils/PacketEnum";
|
||||||
|
import {createWriter, Endian, IReader} from "bufferstuff";
|
||||||
|
import {Player} from "../../../Player";
|
||||||
|
import {PacketManager} from "../../../utils/PacketManager";
|
||||||
|
import {PacketChat} from "../player/PacketChat";
|
||||||
|
import {PlayerManager} from "../../../utils/PlayerManager";
|
||||||
|
import {PacketPreChunk} from "../world/PacketPreChunk";
|
||||||
|
import {PacketMapChunk} from "../world/PacketMapChunk";
|
||||||
|
|
||||||
|
export class PacketHandshake extends Packet {
|
||||||
|
constructor() {
|
||||||
|
super({
|
||||||
|
packetID: PacketEnum.Login
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
readData(reader: IReader, player: Player) {
|
||||||
|
const protocol = reader.readInt();
|
||||||
|
if(protocol > 14) PlayerManager.kickPlayer(player, `Server is outdated!`);
|
||||||
|
else if (protocol < 14) PlayerManager.kickPlayer(player, `Client is outdated!`);
|
||||||
|
|
||||||
|
const username = reader.readString16();
|
||||||
|
const seed = reader.readLong();
|
||||||
|
const dimension = reader.readByte();
|
||||||
|
PlayerManager.sendPacket(player, this);
|
||||||
|
PlayerManager.sendPacket(player, PacketManager.getPacket(PacketEnum.PositionLook));
|
||||||
|
PlayerManager.sendPacketToAll(new PacketChat(`§e<${username}> has joined the game.`));
|
||||||
|
|
||||||
|
PlayerManager.sendPacket(player, new PacketPreChunk());
|
||||||
|
PlayerManager.sendPacket(player, new PacketMapChunk());
|
||||||
|
}
|
||||||
|
|
||||||
|
writeData() {
|
||||||
|
return createWriter(Endian.BE).writeUByte(this.options.packetID)
|
||||||
|
.writeInt(1)
|
||||||
|
.writeString16("-")
|
||||||
|
.writeLong(0)
|
||||||
|
.writeByte(0)
|
||||||
|
.toBuffer();
|
||||||
|
}
|
||||||
|
}
|
22
src/packet/impl/login/PacketServerList.ts
Normal file
22
src/packet/impl/login/PacketServerList.ts
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import {Packet} from "../../Packet";
|
||||||
|
import {PacketEnum} from "../../../utils/PacketEnum";
|
||||||
|
import {createWriter, Endian, IReader} from "bufferstuff";
|
||||||
|
import {Player} from "../../../Player";
|
||||||
|
import {PlayerManager} from "../../../utils/PlayerManager";
|
||||||
|
|
||||||
|
export class PacketServerList extends Packet {
|
||||||
|
constructor() {
|
||||||
|
super({
|
||||||
|
packetID: PacketEnum.ServerList
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
readData(reader: IReader, player: Player) {
|
||||||
|
PlayerManager.kickPlayer(player, `Beta 1.7.3 Server§0§0`);
|
||||||
|
}
|
||||||
|
|
||||||
|
writeData() {
|
||||||
|
return createWriter(Endian.BE).writeUByte(this.options.packetID)
|
||||||
|
.toBuffer();
|
||||||
|
}
|
||||||
|
}
|
26
src/packet/impl/player/PacketChat.ts
Normal file
26
src/packet/impl/player/PacketChat.ts
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import {Packet} from "../../Packet";
|
||||||
|
import {PacketEnum} from "../../../utils/PacketEnum";
|
||||||
|
import {createWriter, Endian, IReader} from "bufferstuff";
|
||||||
|
import {Player} from "../../../Player";
|
||||||
|
import {PlayerManager} from "../../../utils/PlayerManager";
|
||||||
|
import {PacketPreChunk} from "../world/PacketPreChunk";
|
||||||
|
|
||||||
|
export class PacketChat extends Packet {
|
||||||
|
constructor(public message: string) {
|
||||||
|
super({
|
||||||
|
packetID: PacketEnum.Chat
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
readData(reader: IReader, player: Player) {
|
||||||
|
this.message = `<${player.options.username}> ${reader.readString16()}`
|
||||||
|
|
||||||
|
PlayerManager.sendPacketToAll(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
writeData() {
|
||||||
|
return createWriter(Endian.BE).writeUByte(this.options.packetID)
|
||||||
|
.writeString16(this.message)
|
||||||
|
.toBuffer();
|
||||||
|
}
|
||||||
|
}
|
23
src/packet/impl/player/PacketDisconnectKick.ts
Normal file
23
src/packet/impl/player/PacketDisconnectKick.ts
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import {Packet} from "../../Packet";
|
||||||
|
import {PacketEnum} from "../../../utils/PacketEnum";
|
||||||
|
import {createWriter, Endian, IReader} from "bufferstuff";
|
||||||
|
import {Player} from "../../../Player";
|
||||||
|
import { PlayerManager } from "../../../utils/PlayerManager";
|
||||||
|
|
||||||
|
export class PacketDisconnectKick extends Packet {
|
||||||
|
constructor(public reason: string) {
|
||||||
|
super({
|
||||||
|
packetID: PacketEnum.DisconnectKick
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
readData(reader: IReader, player: Player) {
|
||||||
|
PlayerManager.playerDisconnected(player.options.client);
|
||||||
|
}
|
||||||
|
|
||||||
|
writeData() {
|
||||||
|
return createWriter(Endian.BE).writeUByte(this.options.packetID)
|
||||||
|
.writeString16(this.reason)
|
||||||
|
.toBuffer();
|
||||||
|
}
|
||||||
|
}
|
25
src/packet/impl/player/PacketPosition.ts
Normal file
25
src/packet/impl/player/PacketPosition.ts
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import {Packet} from "../../Packet";
|
||||||
|
import {PacketEnum} from "../../../utils/PacketEnum";
|
||||||
|
import {createWriter, Endian, IReader} from "bufferstuff";
|
||||||
|
import {Player} from "../../../Player";
|
||||||
|
|
||||||
|
export class PacketPosition extends Packet {
|
||||||
|
constructor() {
|
||||||
|
super({
|
||||||
|
packetID: PacketEnum.Position
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
readData(reader: IReader, player: Player) {
|
||||||
|
player.xPosition = reader.readDouble();
|
||||||
|
player.yPosition = reader.readDouble();
|
||||||
|
player.stance = reader.readDouble();
|
||||||
|
player.zPosition = reader.readDouble();
|
||||||
|
player.onGround = reader.readBool();
|
||||||
|
}
|
||||||
|
|
||||||
|
writeData() {
|
||||||
|
return createWriter(Endian.BE).writeUByte(this.options.packetID)
|
||||||
|
.toBuffer();
|
||||||
|
}
|
||||||
|
}
|
36
src/packet/impl/player/PacketPositionLook.ts
Normal file
36
src/packet/impl/player/PacketPositionLook.ts
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import {Packet} from "../../Packet";
|
||||||
|
import {PacketEnum} from "../../../utils/PacketEnum";
|
||||||
|
import {createWriter, Endian, IReader} from "bufferstuff";
|
||||||
|
import {Player} from "../../../Player";
|
||||||
|
|
||||||
|
export class PacketKick extends Packet {
|
||||||
|
constructor() {
|
||||||
|
super({
|
||||||
|
packetID: PacketEnum.PositionLook
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
readData(reader: IReader, player: Player) {
|
||||||
|
player.xPosition = reader.readDouble();
|
||||||
|
player.yPosition = reader.readDouble();
|
||||||
|
player.stance = reader.readDouble();
|
||||||
|
player.zPosition = reader.readDouble();
|
||||||
|
player.yaw = reader.readFloat();
|
||||||
|
player.pitch = reader.readFloat();
|
||||||
|
player.onGround = reader.readBool();
|
||||||
|
}
|
||||||
|
|
||||||
|
writeData() {
|
||||||
|
const player: Player = this.options.player;
|
||||||
|
|
||||||
|
return createWriter(Endian.BE).writeUByte(this.options.packetID)
|
||||||
|
.writeDouble(player.xPosition)
|
||||||
|
.writeDouble(player.stance)
|
||||||
|
.writeDouble(player.yPosition)
|
||||||
|
.writeDouble(player.zPosition)
|
||||||
|
.writeLong(player.yaw)
|
||||||
|
.writeLong(player.pitch)
|
||||||
|
.writeBool(player.onGround)
|
||||||
|
.toBuffer();
|
||||||
|
}
|
||||||
|
}
|
44
src/packet/impl/world/PacketMapChunk.ts
Normal file
44
src/packet/impl/world/PacketMapChunk.ts
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import {Packet} from "../../Packet";
|
||||||
|
import {PacketEnum} from "../../../utils/PacketEnum";
|
||||||
|
import {createWriter, Endian, IReader} from "bufferstuff";
|
||||||
|
import {Player} from "../../../Player";
|
||||||
|
import {deflate} from "node:zlib";
|
||||||
|
import * as zlib from "zlib";
|
||||||
|
|
||||||
|
export class PacketMapChunk extends Packet {
|
||||||
|
constructor() {
|
||||||
|
super({
|
||||||
|
packetID: PacketEnum.MapChunk
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
readData(reader: IReader, player: Player) {
|
||||||
|
}
|
||||||
|
|
||||||
|
writeData() {
|
||||||
|
const world = createWriter(Endian.BE);
|
||||||
|
|
||||||
|
for(let x = 0; x < 256; x++) {
|
||||||
|
for(let i = 0; i < 10; i++) {
|
||||||
|
world.writeByte(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(let i = 0; i < 118; i++) {
|
||||||
|
world.writeByte(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const buf = zlib.deflateSync(world.toBuffer());
|
||||||
|
|
||||||
|
return createWriter(Endian.BE).writeUByte(this.options.packetID)
|
||||||
|
.writeInt(0)
|
||||||
|
.writeShort(0)
|
||||||
|
.writeInt(0)
|
||||||
|
.writeByte(15)
|
||||||
|
.writeByte(127)
|
||||||
|
.writeByte(15)
|
||||||
|
.writeInt(buf.length)
|
||||||
|
.writeBuffer(buf)
|
||||||
|
.toBuffer();
|
||||||
|
}
|
||||||
|
}
|
25
src/packet/impl/world/PacketPreChunk.ts
Normal file
25
src/packet/impl/world/PacketPreChunk.ts
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import {Packet} from "../../Packet";
|
||||||
|
import {PacketEnum} from "../../../utils/PacketEnum";
|
||||||
|
import {createWriter, Endian, IReader} from "bufferstuff";
|
||||||
|
import {Player} from "../../../Player";
|
||||||
|
import {PlayerManager} from "../../../utils/PlayerManager";
|
||||||
|
|
||||||
|
export class PacketPreChunk extends Packet {
|
||||||
|
constructor() {
|
||||||
|
super({
|
||||||
|
packetID: PacketEnum.PreChunk
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
readData(reader: IReader, player: Player) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
writeData() {
|
||||||
|
return createWriter(Endian.BE).writeUByte(this.options.packetID)
|
||||||
|
.writeInt(0)
|
||||||
|
.writeInt(0)
|
||||||
|
.writeBool(true)
|
||||||
|
.toBuffer();
|
||||||
|
}
|
||||||
|
}
|
20
src/utils/PacketEnum.ts
Normal file
20
src/utils/PacketEnum.ts
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
export enum PacketEnum {
|
||||||
|
KeepAlive = 0x00,
|
||||||
|
Login = 0x01,
|
||||||
|
Handshake = 0x02,
|
||||||
|
Chat = 0x03,
|
||||||
|
SetTime = 0x04,
|
||||||
|
Flying = 0x0A,
|
||||||
|
Position = 0x0B,
|
||||||
|
Look = 0x0C,
|
||||||
|
PositionLook = 0x0D,
|
||||||
|
Animation = 0x12,
|
||||||
|
PreChunk = 0x32,
|
||||||
|
MapChunk = 0x33,
|
||||||
|
MultiBlockChange = 0x34,
|
||||||
|
BlockChange = 0x35,
|
||||||
|
PlaySound = 0x3D,
|
||||||
|
IncrementStatistic = 0xC8,
|
||||||
|
ServerList = 0xFE,
|
||||||
|
DisconnectKick = 0xFF
|
||||||
|
}
|
48
src/utils/PacketManager.ts
Normal file
48
src/utils/PacketManager.ts
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
import {Packet} from "../packet/Packet";
|
||||||
|
import {PacketEnum} from "./PacketEnum";
|
||||||
|
import { glob } from "glob";
|
||||||
|
import { normalize } from "path";
|
||||||
|
import { promisify } from "util";
|
||||||
|
import chalk from "chalk";
|
||||||
|
|
||||||
|
export class PacketManager {
|
||||||
|
private static PacketMap = new Map<PacketEnum, Packet>();
|
||||||
|
|
||||||
|
public static async loadPackets() {
|
||||||
|
const packets = await promisify(glob)(normalize(__dirname + "/../packet/impl/**/*.{ts,js}"));
|
||||||
|
for (const packetPath of packets) {
|
||||||
|
let packet: MaybePacket = await import(packetPath);
|
||||||
|
if ('default' in packet) packet = packet.default;
|
||||||
|
if (packet.constructor.name === 'Object') packet = Object.values(packet)[0];
|
||||||
|
|
||||||
|
const instance = new (packet as Constructor<Packet>)();
|
||||||
|
|
||||||
|
const packetID = instance.options.packetID;
|
||||||
|
const packetFromMap: Packet | undefined = this.PacketMap.get(packetID);
|
||||||
|
|
||||||
|
if(packetFromMap == undefined) {
|
||||||
|
this.PacketMap.set(packetID, instance);
|
||||||
|
this.debug(`Loaded packet ${instance.options.name} with id ${packetID}!`, true)
|
||||||
|
} else {
|
||||||
|
this.debug(`Packet ${instance.options.name} (${packetPath}) with id ${packetID} is already loaded. Skipping!`, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static debug(message: string, success: boolean) {
|
||||||
|
console.log(
|
||||||
|
chalk.bold(
|
||||||
|
chalk.white("[") + chalk.magentaBright("PacketManager") + chalk.white("] ")
|
||||||
|
) + (
|
||||||
|
success ? chalk.greenBright(message) : chalk.redBright(message)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
public static getPacket(packetID: PacketEnum): any {
|
||||||
|
return this.PacketMap.get(packetID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export type Constructor<T extends {} = {}> = new (...args: any[]) => T;
|
||||||
|
export type MaybePacket = Constructor<Packet> | {default: Constructor<Packet>} | {[k: string]: Constructor<Packet>};
|
85
src/utils/PlayerManager.ts
Normal file
85
src/utils/PlayerManager.ts
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
import {Player} from "../Player";
|
||||||
|
import {Packet} from "../packet/Packet";
|
||||||
|
import {PacketDisconnectKick} from "../packet/impl/player/PacketDisconnectKick";
|
||||||
|
import {PacketChat} from "../packet/impl/player/PacketChat";
|
||||||
|
import {Socket} from "node:net";
|
||||||
|
import {createReader, Endian} from "bufferstuff";
|
||||||
|
import {PacketManager} from "./PacketManager";
|
||||||
|
import {MinecraftServer} from "../MinecraftServer";
|
||||||
|
|
||||||
|
export class PlayerManager {
|
||||||
|
static PlayerMap = new Map<Socket, Player>();
|
||||||
|
static SocketMap = new Map<String, Socket>();
|
||||||
|
|
||||||
|
public static handleConnection(socket: Socket) {
|
||||||
|
if(!PlayerManager.PlayerMap.has(socket)) PlayerManager.PlayerMap.set(socket, new Player({
|
||||||
|
client: socket,
|
||||||
|
username: "Unknown"
|
||||||
|
}));
|
||||||
|
|
||||||
|
socket.on('data', data => {
|
||||||
|
const reader = createReader(Endian.BE, data);
|
||||||
|
|
||||||
|
const packetID = reader.readUByte();
|
||||||
|
let packet: Packet;
|
||||||
|
packet = PacketManager.getPacket(packetID);
|
||||||
|
|
||||||
|
if(packet === undefined) {
|
||||||
|
if(MinecraftServer.debug) console.log(`Received Unknown packet: ${packetID}. Kicking the player.`);
|
||||||
|
PlayerManager.kickPlayer(PlayerManager.PlayerMap.get(socket), `Sent unknown packet ${packetID}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(MinecraftServer.debug) console.log(`Received Packet: ${packet.options.name} (${packetID})`);
|
||||||
|
|
||||||
|
packet.readData(reader, PlayerManager.PlayerMap.get(socket));
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('close', PlayerManager.playerDisconnected);
|
||||||
|
socket.on('timeout', PlayerManager.playerDisconnected);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static sendPacket(player: Player, packet: Packet) {
|
||||||
|
if(!packet || !player) {
|
||||||
|
console.log(`Tried to sent packet to player where either player or packet is null!`)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(MinecraftServer.debug) console.log(`Sending Packet: ${packet.options.name} (${packet.options.packetID}) to ${player.options.username}`);
|
||||||
|
packet.options.player = player;
|
||||||
|
|
||||||
|
player.options.client.write(packet.writeData());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static sendPacketToAll(packet: Packet) {
|
||||||
|
PlayerManager.PlayerMap.forEach(player => {
|
||||||
|
PlayerManager.sendPacket(player, packet);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
public static kickPlayer(player: Player, reason: string) {
|
||||||
|
if(!player) {
|
||||||
|
console.log(`Tried to kick null player!`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerManager.sendPacket(player, new PacketDisconnectKick(reason));
|
||||||
|
this.playerDisconnected(player.options.client);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static playerDisconnected(socket: Socket) {
|
||||||
|
const player = PlayerManager.PlayerMap.get(socket);
|
||||||
|
if(!player) return;
|
||||||
|
|
||||||
|
const username = player.options.username;
|
||||||
|
if(MinecraftServer.debug) console.log(`Player ${username} left. Deleting from the map!`);
|
||||||
|
PlayerManager.SocketMap.delete(username);
|
||||||
|
PlayerManager.PlayerMap.delete(socket);
|
||||||
|
|
||||||
|
PlayerManager.sendPacketToAll(new PacketChat(`§e<${username}> left the game.`));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static getPlayer(username: String) {
|
||||||
|
return PlayerManager.PlayerMap.get(PlayerManager.SocketMap.get(username));
|
||||||
|
}
|
||||||
|
}
|
16
tsconfig.json
Normal file
16
tsconfig.json
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"lib": [
|
||||||
|
"esnext",
|
||||||
|
"es6"
|
||||||
|
],
|
||||||
|
"target": "esnext",
|
||||||
|
"module": "commonjs",
|
||||||
|
"outDir": "./build",
|
||||||
|
"rootDir": "./src",
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"sourceMap": true,
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"emitDecoratorMetadata": true
|
||||||
|
}
|
||||||
|
}
|
669
yarn.lock
Normal file
669
yarn.lock
Normal file
@ -0,0 +1,669 @@
|
|||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
"@cspotcode/source-map-support@^0.8.0":
|
||||||
|
version "0.8.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
|
||||||
|
integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
|
||||||
|
dependencies:
|
||||||
|
"@jridgewell/trace-mapping" "0.3.9"
|
||||||
|
|
||||||
|
"@isaacs/cliui@^8.0.2":
|
||||||
|
version "8.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
|
||||||
|
integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
|
||||||
|
dependencies:
|
||||||
|
string-width "^5.1.2"
|
||||||
|
string-width-cjs "npm:string-width@^4.2.0"
|
||||||
|
strip-ansi "^7.0.1"
|
||||||
|
strip-ansi-cjs "npm:strip-ansi@^6.0.1"
|
||||||
|
wrap-ansi "^8.1.0"
|
||||||
|
wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
|
||||||
|
|
||||||
|
"@jridgewell/resolve-uri@^3.0.3":
|
||||||
|
version "3.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721"
|
||||||
|
integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
|
||||||
|
|
||||||
|
"@jridgewell/sourcemap-codec@^1.4.10":
|
||||||
|
version "1.4.15"
|
||||||
|
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
|
||||||
|
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
|
||||||
|
|
||||||
|
"@jridgewell/trace-mapping@0.3.9":
|
||||||
|
version "0.3.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
|
||||||
|
integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
|
||||||
|
dependencies:
|
||||||
|
"@jridgewell/resolve-uri" "^3.0.3"
|
||||||
|
"@jridgewell/sourcemap-codec" "^1.4.10"
|
||||||
|
|
||||||
|
"@pkgjs/parseargs@^0.11.0":
|
||||||
|
version "0.11.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
|
||||||
|
integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
|
||||||
|
|
||||||
|
"@tsconfig/node10@^1.0.7":
|
||||||
|
version "1.0.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2"
|
||||||
|
integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==
|
||||||
|
|
||||||
|
"@tsconfig/node12@^1.0.7":
|
||||||
|
version "1.0.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d"
|
||||||
|
integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
|
||||||
|
|
||||||
|
"@tsconfig/node14@^1.0.0":
|
||||||
|
version "1.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1"
|
||||||
|
integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
|
||||||
|
|
||||||
|
"@tsconfig/node16@^1.0.2":
|
||||||
|
version "1.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9"
|
||||||
|
integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==
|
||||||
|
|
||||||
|
"@types/glob@^8.1.0":
|
||||||
|
version "8.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/glob/-/glob-8.1.0.tgz#b63e70155391b0584dce44e7ea25190bbc38f2fc"
|
||||||
|
integrity sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==
|
||||||
|
dependencies:
|
||||||
|
"@types/minimatch" "^5.1.2"
|
||||||
|
"@types/node" "*"
|
||||||
|
|
||||||
|
"@types/minimatch@^5.1.2":
|
||||||
|
version "5.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca"
|
||||||
|
integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==
|
||||||
|
|
||||||
|
"@types/node@*", "@types/node@^20.10.4":
|
||||||
|
version "20.10.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.4.tgz#b246fd84d55d5b1b71bf51f964bd514409347198"
|
||||||
|
integrity sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==
|
||||||
|
dependencies:
|
||||||
|
undici-types "~5.26.4"
|
||||||
|
|
||||||
|
abbrev@1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
|
||||||
|
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
|
||||||
|
|
||||||
|
acorn-walk@^8.1.1:
|
||||||
|
version "8.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.1.tgz#2f10f5b69329d90ae18c58bf1fa8fccd8b959a43"
|
||||||
|
integrity sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==
|
||||||
|
|
||||||
|
acorn@^8.4.1:
|
||||||
|
version "8.11.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b"
|
||||||
|
integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==
|
||||||
|
|
||||||
|
ansi-regex@^5.0.1:
|
||||||
|
version "5.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
|
||||||
|
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
|
||||||
|
|
||||||
|
ansi-regex@^6.0.1:
|
||||||
|
version "6.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
|
||||||
|
integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
|
||||||
|
|
||||||
|
ansi-styles@^4.0.0, ansi-styles@^4.1.0:
|
||||||
|
version "4.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
|
||||||
|
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
|
||||||
|
dependencies:
|
||||||
|
color-convert "^2.0.1"
|
||||||
|
|
||||||
|
ansi-styles@^6.1.0:
|
||||||
|
version "6.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
|
||||||
|
integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
|
||||||
|
|
||||||
|
anymatch@~3.1.2:
|
||||||
|
version "3.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
|
||||||
|
integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
|
||||||
|
dependencies:
|
||||||
|
normalize-path "^3.0.0"
|
||||||
|
picomatch "^2.0.4"
|
||||||
|
|
||||||
|
arg@^4.1.0:
|
||||||
|
version "4.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
|
||||||
|
integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
|
||||||
|
|
||||||
|
balanced-match@^1.0.0:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
|
||||||
|
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
|
||||||
|
|
||||||
|
binary-extensions@^2.0.0:
|
||||||
|
version "2.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
|
||||||
|
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
|
||||||
|
|
||||||
|
brace-expansion@^1.1.7:
|
||||||
|
version "1.1.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||||
|
integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
|
||||||
|
dependencies:
|
||||||
|
balanced-match "^1.0.0"
|
||||||
|
concat-map "0.0.1"
|
||||||
|
|
||||||
|
brace-expansion@^2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
|
||||||
|
integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
|
||||||
|
dependencies:
|
||||||
|
balanced-match "^1.0.0"
|
||||||
|
|
||||||
|
braces@~3.0.2:
|
||||||
|
version "3.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
|
||||||
|
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
|
||||||
|
dependencies:
|
||||||
|
fill-range "^7.0.1"
|
||||||
|
|
||||||
|
bufferstuff@^1.4.2:
|
||||||
|
version "1.4.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/bufferstuff/-/bufferstuff-1.4.2.tgz#aa188593b494ce3e5556d81b031288c30e0a8545"
|
||||||
|
integrity sha512-iCULTXTrD9O4C06u+gjgQ3RtVNXAfxoBmQbAh1nMRO7QENVNuC/UvbFk25x/PDMA9yhdkJtfLo2dwxSJvEjlSg==
|
||||||
|
|
||||||
|
chalk@4.1.1:
|
||||||
|
version "4.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad"
|
||||||
|
integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==
|
||||||
|
dependencies:
|
||||||
|
ansi-styles "^4.1.0"
|
||||||
|
supports-color "^7.1.0"
|
||||||
|
|
||||||
|
chokidar@^3.5.2:
|
||||||
|
version "3.5.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
|
||||||
|
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
|
||||||
|
dependencies:
|
||||||
|
anymatch "~3.1.2"
|
||||||
|
braces "~3.0.2"
|
||||||
|
glob-parent "~5.1.2"
|
||||||
|
is-binary-path "~2.1.0"
|
||||||
|
is-glob "~4.0.1"
|
||||||
|
normalize-path "~3.0.0"
|
||||||
|
readdirp "~3.6.0"
|
||||||
|
optionalDependencies:
|
||||||
|
fsevents "~2.3.2"
|
||||||
|
|
||||||
|
color-convert@^2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
|
||||||
|
integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
|
||||||
|
dependencies:
|
||||||
|
color-name "~1.1.4"
|
||||||
|
|
||||||
|
color-name@~1.1.4:
|
||||||
|
version "1.1.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
|
||||||
|
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
||||||
|
|
||||||
|
concat-map@0.0.1:
|
||||||
|
version "0.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||||
|
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
|
||||||
|
|
||||||
|
create-require@^1.1.0:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
|
||||||
|
integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
|
||||||
|
|
||||||
|
cross-spawn@^7.0.0:
|
||||||
|
version "7.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
|
||||||
|
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
|
||||||
|
dependencies:
|
||||||
|
path-key "^3.1.0"
|
||||||
|
shebang-command "^2.0.0"
|
||||||
|
which "^2.0.1"
|
||||||
|
|
||||||
|
debug@^4:
|
||||||
|
version "4.3.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
|
||||||
|
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
||||||
|
dependencies:
|
||||||
|
ms "2.1.2"
|
||||||
|
|
||||||
|
diff@^4.0.1:
|
||||||
|
version "4.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
|
||||||
|
integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
|
||||||
|
|
||||||
|
eastasianwidth@^0.2.0:
|
||||||
|
version "0.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
|
||||||
|
integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
|
||||||
|
|
||||||
|
emoji-regex@^8.0.0:
|
||||||
|
version "8.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
|
||||||
|
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
|
||||||
|
|
||||||
|
emoji-regex@^9.2.2:
|
||||||
|
version "9.2.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
|
||||||
|
integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
|
||||||
|
|
||||||
|
fill-range@^7.0.1:
|
||||||
|
version "7.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
|
||||||
|
integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
|
||||||
|
dependencies:
|
||||||
|
to-regex-range "^5.0.1"
|
||||||
|
|
||||||
|
foreground-child@^3.1.0:
|
||||||
|
version "3.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
|
||||||
|
integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==
|
||||||
|
dependencies:
|
||||||
|
cross-spawn "^7.0.0"
|
||||||
|
signal-exit "^4.0.1"
|
||||||
|
|
||||||
|
fs.realpath@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||||
|
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
|
||||||
|
|
||||||
|
fsevents@~2.3.2:
|
||||||
|
version "2.3.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
|
||||||
|
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
|
||||||
|
|
||||||
|
glob-parent@~5.1.2:
|
||||||
|
version "5.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
|
||||||
|
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
|
||||||
|
dependencies:
|
||||||
|
is-glob "^4.0.1"
|
||||||
|
|
||||||
|
glob@7.1.6:
|
||||||
|
version "7.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
|
||||||
|
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
|
||||||
|
dependencies:
|
||||||
|
fs.realpath "^1.0.0"
|
||||||
|
inflight "^1.0.4"
|
||||||
|
inherits "2"
|
||||||
|
minimatch "^3.0.4"
|
||||||
|
once "^1.3.0"
|
||||||
|
path-is-absolute "^1.0.0"
|
||||||
|
|
||||||
|
glob@^10.3.7:
|
||||||
|
version "10.3.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b"
|
||||||
|
integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==
|
||||||
|
dependencies:
|
||||||
|
foreground-child "^3.1.0"
|
||||||
|
jackspeak "^2.3.5"
|
||||||
|
minimatch "^9.0.1"
|
||||||
|
minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
|
||||||
|
path-scurry "^1.10.1"
|
||||||
|
|
||||||
|
has-flag@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
||||||
|
integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
|
||||||
|
|
||||||
|
has-flag@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
|
||||||
|
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
|
||||||
|
|
||||||
|
ignore-by-default@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
|
||||||
|
integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==
|
||||||
|
|
||||||
|
inflight@^1.0.4:
|
||||||
|
version "1.0.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
|
||||||
|
integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
|
||||||
|
dependencies:
|
||||||
|
once "^1.3.0"
|
||||||
|
wrappy "1"
|
||||||
|
|
||||||
|
inherits@2:
|
||||||
|
version "2.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||||
|
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||||
|
|
||||||
|
is-binary-path@~2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
|
||||||
|
integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
|
||||||
|
dependencies:
|
||||||
|
binary-extensions "^2.0.0"
|
||||||
|
|
||||||
|
is-extglob@^2.1.1:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
||||||
|
integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
|
||||||
|
|
||||||
|
is-fullwidth-code-point@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
|
||||||
|
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
|
||||||
|
|
||||||
|
is-glob@^4.0.1, is-glob@~4.0.1:
|
||||||
|
version "4.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
|
||||||
|
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
|
||||||
|
dependencies:
|
||||||
|
is-extglob "^2.1.1"
|
||||||
|
|
||||||
|
is-number@^7.0.0:
|
||||||
|
version "7.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
|
||||||
|
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
|
||||||
|
|
||||||
|
isexe@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||||
|
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
|
||||||
|
|
||||||
|
jackspeak@^2.3.5:
|
||||||
|
version "2.3.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8"
|
||||||
|
integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==
|
||||||
|
dependencies:
|
||||||
|
"@isaacs/cliui" "^8.0.2"
|
||||||
|
optionalDependencies:
|
||||||
|
"@pkgjs/parseargs" "^0.11.0"
|
||||||
|
|
||||||
|
lru-cache@^6.0.0:
|
||||||
|
version "6.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
|
||||||
|
integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
|
||||||
|
dependencies:
|
||||||
|
yallist "^4.0.0"
|
||||||
|
|
||||||
|
"lru-cache@^9.1.1 || ^10.0.0":
|
||||||
|
version "10.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484"
|
||||||
|
integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==
|
||||||
|
|
||||||
|
make-error@^1.1.1:
|
||||||
|
version "1.3.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
|
||||||
|
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
|
||||||
|
|
||||||
|
minimatch@^3.0.4, minimatch@^3.1.2:
|
||||||
|
version "3.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
|
||||||
|
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
|
||||||
|
dependencies:
|
||||||
|
brace-expansion "^1.1.7"
|
||||||
|
|
||||||
|
minimatch@^9.0.1:
|
||||||
|
version "9.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
|
||||||
|
integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
|
||||||
|
dependencies:
|
||||||
|
brace-expansion "^2.0.1"
|
||||||
|
|
||||||
|
"minipass@^5.0.0 || ^6.0.2 || ^7.0.0":
|
||||||
|
version "7.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c"
|
||||||
|
integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==
|
||||||
|
|
||||||
|
ms@2.1.2:
|
||||||
|
version "2.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
|
||||||
|
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
|
||||||
|
|
||||||
|
nodemon@^3.0.2:
|
||||||
|
version "3.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.0.2.tgz#222dd0de79fc7b7b3eedba422d2b9e5fc678621e"
|
||||||
|
integrity sha512-9qIN2LNTrEzpOPBaWHTm4Asy1LxXLSickZStAQ4IZe7zsoIpD/A7LWxhZV3t4Zu352uBcqVnRsDXSMR2Sc3lTA==
|
||||||
|
dependencies:
|
||||||
|
chokidar "^3.5.2"
|
||||||
|
debug "^4"
|
||||||
|
ignore-by-default "^1.0.1"
|
||||||
|
minimatch "^3.1.2"
|
||||||
|
pstree.remy "^1.1.8"
|
||||||
|
semver "^7.5.3"
|
||||||
|
simple-update-notifier "^2.0.0"
|
||||||
|
supports-color "^5.5.0"
|
||||||
|
touch "^3.1.0"
|
||||||
|
undefsafe "^2.0.5"
|
||||||
|
|
||||||
|
nopt@~1.0.10:
|
||||||
|
version "1.0.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
|
||||||
|
integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==
|
||||||
|
dependencies:
|
||||||
|
abbrev "1"
|
||||||
|
|
||||||
|
normalize-path@^3.0.0, normalize-path@~3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
|
||||||
|
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
|
||||||
|
|
||||||
|
once@^1.3.0:
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||||
|
integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
|
||||||
|
dependencies:
|
||||||
|
wrappy "1"
|
||||||
|
|
||||||
|
path-is-absolute@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
||||||
|
integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
|
||||||
|
|
||||||
|
path-key@^3.1.0:
|
||||||
|
version "3.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
|
||||||
|
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
|
||||||
|
|
||||||
|
path-scurry@^1.10.1:
|
||||||
|
version "1.10.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698"
|
||||||
|
integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==
|
||||||
|
dependencies:
|
||||||
|
lru-cache "^9.1.1 || ^10.0.0"
|
||||||
|
minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
|
||||||
|
|
||||||
|
picomatch@^2.0.4, picomatch@^2.2.1:
|
||||||
|
version "2.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
|
||||||
|
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
||||||
|
|
||||||
|
pstree.remy@^1.1.8:
|
||||||
|
version "1.1.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a"
|
||||||
|
integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==
|
||||||
|
|
||||||
|
readdirp@~3.6.0:
|
||||||
|
version "3.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
|
||||||
|
integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
|
||||||
|
dependencies:
|
||||||
|
picomatch "^2.2.1"
|
||||||
|
|
||||||
|
rimraf@^5.0.5:
|
||||||
|
version "5.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.5.tgz#9be65d2d6e683447d2e9013da2bf451139a61ccf"
|
||||||
|
integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==
|
||||||
|
dependencies:
|
||||||
|
glob "^10.3.7"
|
||||||
|
|
||||||
|
semver@^7.5.3:
|
||||||
|
version "7.5.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
|
||||||
|
integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
|
||||||
|
dependencies:
|
||||||
|
lru-cache "^6.0.0"
|
||||||
|
|
||||||
|
shebang-command@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
|
||||||
|
integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
|
||||||
|
dependencies:
|
||||||
|
shebang-regex "^3.0.0"
|
||||||
|
|
||||||
|
shebang-regex@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
|
||||||
|
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
|
||||||
|
|
||||||
|
signal-exit@^4.0.1:
|
||||||
|
version "4.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
|
||||||
|
integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
|
||||||
|
|
||||||
|
simple-update-notifier@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb"
|
||||||
|
integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==
|
||||||
|
dependencies:
|
||||||
|
semver "^7.5.3"
|
||||||
|
|
||||||
|
"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0:
|
||||||
|
name string-width-cjs
|
||||||
|
version "4.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||||
|
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||||
|
dependencies:
|
||||||
|
emoji-regex "^8.0.0"
|
||||||
|
is-fullwidth-code-point "^3.0.0"
|
||||||
|
strip-ansi "^6.0.1"
|
||||||
|
|
||||||
|
string-width@^5.0.1, string-width@^5.1.2:
|
||||||
|
version "5.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
|
||||||
|
integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
|
||||||
|
dependencies:
|
||||||
|
eastasianwidth "^0.2.0"
|
||||||
|
emoji-regex "^9.2.2"
|
||||||
|
strip-ansi "^7.0.1"
|
||||||
|
|
||||||
|
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
||||||
|
name strip-ansi-cjs
|
||||||
|
version "6.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||||
|
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||||
|
dependencies:
|
||||||
|
ansi-regex "^5.0.1"
|
||||||
|
|
||||||
|
strip-ansi@^7.0.1:
|
||||||
|
version "7.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
|
||||||
|
integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
|
||||||
|
dependencies:
|
||||||
|
ansi-regex "^6.0.1"
|
||||||
|
|
||||||
|
supports-color@^5.5.0:
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
||||||
|
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
|
||||||
|
dependencies:
|
||||||
|
has-flag "^3.0.0"
|
||||||
|
|
||||||
|
supports-color@^7.1.0:
|
||||||
|
version "7.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
|
||||||
|
integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
|
||||||
|
dependencies:
|
||||||
|
has-flag "^4.0.0"
|
||||||
|
|
||||||
|
to-regex-range@^5.0.1:
|
||||||
|
version "5.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
|
||||||
|
integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
|
||||||
|
dependencies:
|
||||||
|
is-number "^7.0.0"
|
||||||
|
|
||||||
|
touch@^3.1.0:
|
||||||
|
version "3.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b"
|
||||||
|
integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==
|
||||||
|
dependencies:
|
||||||
|
nopt "~1.0.10"
|
||||||
|
|
||||||
|
ts-node@^10.9.2:
|
||||||
|
version "10.9.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f"
|
||||||
|
integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==
|
||||||
|
dependencies:
|
||||||
|
"@cspotcode/source-map-support" "^0.8.0"
|
||||||
|
"@tsconfig/node10" "^1.0.7"
|
||||||
|
"@tsconfig/node12" "^1.0.7"
|
||||||
|
"@tsconfig/node14" "^1.0.0"
|
||||||
|
"@tsconfig/node16" "^1.0.2"
|
||||||
|
acorn "^8.4.1"
|
||||||
|
acorn-walk "^8.1.1"
|
||||||
|
arg "^4.1.0"
|
||||||
|
create-require "^1.1.0"
|
||||||
|
diff "^4.0.1"
|
||||||
|
make-error "^1.1.1"
|
||||||
|
v8-compile-cache-lib "^3.0.1"
|
||||||
|
yn "3.1.1"
|
||||||
|
|
||||||
|
typescript@^5.3.3:
|
||||||
|
version "5.3.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37"
|
||||||
|
integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==
|
||||||
|
|
||||||
|
undefsafe@^2.0.5:
|
||||||
|
version "2.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c"
|
||||||
|
integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==
|
||||||
|
|
||||||
|
undici-types@~5.26.4:
|
||||||
|
version "5.26.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
|
||||||
|
integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
|
||||||
|
|
||||||
|
v8-compile-cache-lib@^3.0.1:
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
|
||||||
|
integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
|
||||||
|
|
||||||
|
which@^2.0.1:
|
||||||
|
version "2.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
|
||||||
|
integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
|
||||||
|
dependencies:
|
||||||
|
isexe "^2.0.0"
|
||||||
|
|
||||||
|
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
|
||||||
|
version "7.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||||
|
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||||
|
dependencies:
|
||||||
|
ansi-styles "^4.0.0"
|
||||||
|
string-width "^4.1.0"
|
||||||
|
strip-ansi "^6.0.0"
|
||||||
|
|
||||||
|
wrap-ansi@^8.1.0:
|
||||||
|
version "8.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
|
||||||
|
integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
|
||||||
|
dependencies:
|
||||||
|
ansi-styles "^6.1.0"
|
||||||
|
string-width "^5.0.1"
|
||||||
|
strip-ansi "^7.0.1"
|
||||||
|
|
||||||
|
wrappy@1:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||||
|
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
|
||||||
|
|
||||||
|
yallist@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
|
||||||
|
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
|
||||||
|
|
||||||
|
yn@3.1.1:
|
||||||
|
version "3.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
|
||||||
|
integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
|
Loading…
Reference in New Issue
Block a user