diff --git a/changelog.md b/changelog.md index d289568b..f31da69f 100644 --- a/changelog.md +++ b/changelog.md @@ -3,6 +3,8 @@ 当前更新内容 模组安装与管理(2024.6) +- [ ] https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-5.html#the-configdir-template-variable-for-configuration-files +- [ ] 升级sdk的ts版本 - [ ] 验证第五和魂印判断的正确性 - [ ] sdk 中 core 版本兼容性检测, 添加 core 版本字段(必填), 并规范 launcher 的 core 实例和 sdk 使用的 api 之间的关系 - [ ] 需要一次性提供 Launcher Api 版本,Core 版本和自身版本 diff --git a/eslint.config.mjs b/eslint.config.mjs index 363d4f0e..fd66974e 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -21,7 +21,6 @@ export default tsEslint.config( '**/\\.*rc', '**/*.config.*', 'packages/core/types/', - 'packages/launcher/core-e2e-test/', 'packages/launcher/build-plugins/', 'packages/server/entry/', 'packages/server/mods/', diff --git a/package.json b/package.json index a9468edb..b832b68b 100644 --- a/package.json +++ b/package.json @@ -15,28 +15,28 @@ "server:run": "pnpm -C ./packages/server run start", "launcher:dev": "pnpm -C ./packages/launcher run dev", "core:build": "pnpm --filter \"@sea/core\" run build", + "tsc:build": "tsc --build --verbose", "workspace:build": "node ./scripts/build-server.js", "workspace:sync": "node ./scripts/sync.js", "release": "node ./scripts/release.js", "prepare": "husky" }, "devDependencies": { - "@eslint/js": "^9.5.0", + "@eslint/js": "^9.6.0", "@types/eslint__js": "^8.42.3", - "@types/node": "^20.14.7", "@vitest/coverage-v8": "2.0.0-beta.12", "concurrently": "^8.2.2", - "eslint": "^9.5.0", + "eslint": "^9.6.0", "eslint-plugin-react-hooks": "5.1.0-rc-8971381549-20240625", "eslint-plugin-react-refresh": "^0.4.7", - "globals": "^15.6.0", + "globals": "^15.8.0", "husky": "^9.0.11", "lint-staged": "^15.2.7", "prettier": "^3.3.2", "rimraf": "^5.0.7", - "typescript": "^5.5.2", + "typescript": "^5.5.3", "typescript-eslint": "8.0.0-alpha.34", - "vite": "^5.3.1", + "vite": "^5.3.2", "vitest": "2.0.0-beta.12" }, "engines": { diff --git a/packages/core/battle/index.ts b/packages/core/battle/index.ts index 6eb5fdd2..108233cb 100644 --- a/packages/core/battle/index.ts +++ b/packages/core/battle/index.ts @@ -1,4 +1,4 @@ -export type { ILevelBattle, ILevelRunner } from './level/types.js'; +export type { LevelBattle, LevelRunner } from './level/types.js'; export type { Trigger } from './manager.js'; export type { RoundData } from './provider.js'; export type { Matcher, MoveHandler, MoveStrategy } from './strategy.js'; diff --git a/packages/core/battle/level/index.ts b/packages/core/battle/level/index.ts index ecc92f9d..f6fe8b6d 100644 --- a/packages/core/battle/level/index.ts +++ b/packages/core/battle/level/index.ts @@ -2,7 +2,7 @@ import { delay } from '../../common/utils.js'; import { engine } from '../../internal/index.js'; import { spet } from '../../pet-helper/index.js'; import { manager } from '../manager.js'; -import type { ILevelRunner } from './types.js'; +import type { LevelRunner } from './types.js'; export const LevelAction = { BATTLE: 'battle' as const, @@ -11,7 +11,7 @@ export const LevelAction = { }; class LevelManager { - private runner: ILevelRunner | null = null; + private runner: LevelRunner | null = null; lock: Promise | null = null; get running() { @@ -19,7 +19,7 @@ class LevelManager { } /** 获取当前正在运行的Runner */ - getRunner(): ILevelRunner | null { + getRunner(): LevelRunner | null { return this.runner; } @@ -36,7 +36,7 @@ class LevelManager { } } - run(runner: ILevelRunner) { + run(runner: LevelRunner) { if (this.running) throw new Error('你必须先停止当前Runner的运行!'); this.runner = runner; @@ -68,10 +68,10 @@ class LevelManager { logger('进入对战'); try { if (!this.runner) throw new Error('关卡已停止运行'); - if (!runner.actions.battle) throw new Error('未找指定battle动作'); await manager.takeover(() => { - void runner.actions.battle!.call(runner); + if (!runner.actions['battle']) throw new Error('未指定战斗动作'); + void runner.actions['battle'].call(runner); }, strategy); logger('对战完成'); diff --git a/packages/core/battle/level/types.ts b/packages/core/battle/level/types.ts index 49db5e00..4f0fcc0f 100644 --- a/packages/core/battle/level/types.ts +++ b/packages/core/battle/level/types.ts @@ -1,14 +1,8 @@ -import type { AnyFunction } from 'index.js'; +import type { AnyFunction } from '../../common/utils.js'; import type { MoveStrategy } from '../strategy.js'; /** 关卡状态机, 由LevelManager来运行 */ -export interface ILevelRunner { - /** 关卡的动态数据 */ - data: TData; - - /** 关卡能做出的动作 */ - actions: Record>(this: R) => Promise) | undefined>; - +export interface LevelRunner { /** 更新关卡动态数据 */ update(): Promise; @@ -16,13 +10,16 @@ export interface ILevelRunner { next(): string; /** 选择对战模型 */ - selectLevelBattle?(): ILevelBattle; + selectLevelBattle?(): LevelBattle; logger: AnyFunction; + + /** 关卡能做出的动作 */ + actions: Record Promise | void) | undefined> & ThisType; } /** 对战模型 */ -export interface ILevelBattle { +export interface LevelBattle { /** 行动策略 */ strategy: MoveStrategy; /** 精灵列表 */ diff --git a/packages/core/pet-helper/index.ts b/packages/core/pet-helper/index.ts index 58935caf..32ef008c 100644 --- a/packages/core/pet-helper/index.ts +++ b/packages/core/pet-helper/index.ts @@ -1,3 +1,3 @@ +export { CaughtPet, spet } from './pet.js'; export { PetLocation } from './PetLocation.js'; export { SEAPetStore } from './PetStore.js'; -export { CaughtPet, spet } from './pet.js'; diff --git a/packages/core/test/tsconfig.json b/packages/core/test/tsconfig.json index a9dd5391..957b212c 100644 --- a/packages/core/test/tsconfig.json +++ b/packages/core/test/tsconfig.json @@ -6,5 +6,10 @@ "baseUrl": ".", "noEmit": true }, - "include": ["./**/*.ts", "../types"] + "include": ["./**/*.ts", "../types"], + "references": [ + { + "path": "../" + } + ] } diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 04c3025c..bec818b5 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -1,8 +1,7 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.common.json", "compilerOptions": { - "module": "NodeNext", - "target": "es2022", + "module": "nodenext", "outDir": "dist", "rootDir": ".", "baseUrl": ".", @@ -10,10 +9,8 @@ "declaration": true, "inlineSourceMap": true, "declarationMap": true, - "incremental": true, - "composite": true, + "lib": ["ESNext", "DOM"] // "skipLibCheck": false, - "types": [] }, "include": [ "./types", diff --git a/packages/launcher/core-e2e-test/tsconfig.json b/packages/launcher/core-e2e-test/tsconfig.json deleted file mode 100644 index 6f64e339..00000000 --- a/packages/launcher/core-e2e-test/tsconfig.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "compilerOptions": { - "module": "es2022", - "target": "esnext", - "moduleResolution": "bundler", - "lib": [ - "esnext", - "dom" - ], - "allowUmdGlobalAccess": true, - "resolveJsonModule": true, - "checkJs": true, - "noEmit": true, - "typeRoots": [ - "../node_modules/@types", - "../types" - ] - }, - "include": [ - "suites/**/*", - "env/**/*", - ], - "references": [ - { - "path": "./tsconfig.node.json" - } - ] -} \ No newline at end of file diff --git a/packages/launcher/core-e2e-test/tsconfig.node.json b/packages/launcher/core-e2e-test/tsconfig.node.json deleted file mode 100644 index 2f268039..00000000 --- a/packages/launcher/core-e2e-test/tsconfig.node.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "module": "nodenext", - "lib": [ - "es2022" - ], - "moduleResolution": "nodenext", - "allowSyntheticDefaultImports": true - }, - "include": [ - "vite.config.ts" - ] -} \ No newline at end of file diff --git a/packages/launcher/src/builtin/petFragment/types.ts b/packages/launcher/src/builtin/petFragment/types.ts index b7661af5..326dd33d 100644 --- a/packages/launcher/src/builtin/petFragment/types.ts +++ b/packages/launcher/src/builtin/petFragment/types.ts @@ -1,10 +1,10 @@ -import type { PetFragmentLevelDifficulty as Difficulty, ILevelBattle, PetFragmentLevel } from '@sea/core'; +import type { PetFragmentLevelDifficulty as Difficulty, LevelBattle, PetFragmentLevel } from '@sea/core'; export interface PetFragmentOption { id: number; difficulty: Difficulty; sweep: boolean; - battle: ILevelBattle[]; + battle: LevelBattle[]; } export type PetFragmentOptionRaw = Omit & { battle: string[] }; diff --git a/packages/launcher/src/builtin/realm/LevelCourageTower.ts b/packages/launcher/src/builtin/realm/LevelCourageTower.ts index 926bddf9..d3e9ef9c 100644 --- a/packages/launcher/src/builtin/realm/LevelCourageTower.ts +++ b/packages/launcher/src/builtin/realm/LevelCourageTower.ts @@ -1,79 +1,73 @@ -import type { AnyFunction, ILevelBattle } from '@sea/core'; +import type { AnyFunction, LevelBattle } from '@sea/core'; +import type { LevelData } from '@sea/mod-type'; + import { LevelAction, socket } from '@sea/core'; -import type { LevelMeta, LevelData as SEALevelData, TaskRunner } from '@sea/mod-type'; +import { task } from '@sea/mod-type'; -export interface LevelData extends SEALevelData { +export interface Data extends LevelData { stimulation: boolean; rewardReceived: boolean; } -export interface LevelOption { - stimulation: boolean; - sweep: boolean; -} - -export default (logger: AnyFunction, battle: (name: string) => ILevelBattle) => { - class LevelCourageTower implements TaskRunner { - data: LevelData = { - remainingTimes: 0, - progress: 0, - rewardReceived: false, - stimulation: false - }; - - static readonly meta: LevelMeta = { +export default (logger: AnyFunction, battle: (name: string) => LevelBattle) => + task({ + meta: { name: '勇者之塔', maxTimes: 5, id: 'LevelCourageTower' - }; - - get meta() { - return LevelCourageTower.meta; - } - - get name() { - return LevelCourageTower.meta.name; - } - - logger = logger; - - constructor(public option: LevelOption) {} - - async update() { - const bits = (await socket.bitSet(636, 1000577)).map(Boolean); - const buf = await socket.sendByQueue(42397, [117]); - const realmInfo = new DataView(buf!); - - this.data.stimulation = bits[0]; - this.data.rewardReceived = bits[1]; - this.data.remainingTimes = this.meta.maxTimes - realmInfo.getUint32(8); - } - - next(): string { - if (!this.data.rewardReceived) { - if (this.data.remainingTimes > 0) { - return LevelAction.BATTLE; - } else { - return LevelAction.AWARD; - } + }, + configSchema: { + stimulation: { + name: '勇者之塔双倍', + type: 'checkbox', + default: false + }, + sweep: { + name: '勇者之塔扫荡', + type: 'checkbox', + default: false } - return LevelAction.STOP; - } + }, + runner: (meta, options) => ({ + logger, + data: { + remainingTimes: 0, + progress: 0, + rewardReceived: false, + stimulation: false + } as Data, + async update() { + const bits = (await socket.bitSet(636, 1000577)).map(Boolean); + const buf = await socket.sendByQueue(42397, [117]); + const realmInfo = new DataView(buf!); - selectLevelBattle() { - return battle('LevelCourageTower'); - } - - readonly actions: Record Promise> = { - battle: async () => { - await socket.sendByQueue(CommandID.FIGHT_H5_PVE_BOSS, [117, 30, 1]); + this.data.stimulation = bits[0]; + this.data.rewardReceived = bits[1]; + this.data.remainingTimes = meta.maxTimes - realmInfo.getUint32(8); }, - - award: async () => { - await socket.sendByQueue(42395, [117, 4, 0, 0]); + next() { + if (!this.data.rewardReceived) { + if (this.data.remainingTimes > 0) { + return options.sweep ? 'sweep' : LevelAction.BATTLE; + } else { + return LevelAction.AWARD; + } + } + return LevelAction.STOP; + }, + selectLevelBattle() { + return battle('LevelCourageTower'); + }, + actions: { + async battle() { + await socket.sendByQueue(CommandID.FIGHT_H5_PVE_BOSS, [117, 30, 1]); + }, + async award() { + await socket.sendByQueue(42395, [117, 4, 0, 0]); + }, + async sweep() { + // TODO + } } - }; - } - - return LevelCourageTower; -}; + }) + }); diff --git a/packages/launcher/src/builtin/realm/LevelElfKingsTrial.ts b/packages/launcher/src/builtin/realm/LevelElfKingsTrial.ts index ce049903..0c53dddc 100644 --- a/packages/launcher/src/builtin/realm/LevelElfKingsTrial.ts +++ b/packages/launcher/src/builtin/realm/LevelElfKingsTrial.ts @@ -1,92 +1,110 @@ -import { LevelAction, socket } from '@sea/core'; -import type { LevelMeta, LevelData as SEALevelData, TaskRunner } from '@sea/mod-type'; +import type { AnyFunction, LevelBattle } from '@sea/core'; +import type { LevelData, LevelMeta, SEAConfigSchema } from '@sea/mod-type'; -import type { AnyFunction, ILevelBattle } from '@sea/core'; +import { LevelAction, socket } from '@sea/core'; +import { task } from '@sea/mod-type'; -export interface LevelData extends SEALevelData { +export interface Data extends LevelData { stimulation: boolean; unlockHard: boolean; canReceiveReward: boolean; weeklyChallengeCount: number; } -export interface LevelOption { - stimulation: boolean; - sweep: boolean; - elfId: number; -} - -export default (logger: AnyFunction, battle: (name: string) => ILevelBattle) => { - return class LevelElfKingsTrial implements TaskRunner { - data: LevelData = { - progress: 0, - remainingTimes: 0, - stimulation: false, - unlockHard: false, - canReceiveReward: false, - weeklyChallengeCount: 0 - }; - - static readonly meta: LevelMeta = { - name: '精灵王的试炼', - maxTimes: 6, - id: 'LevelElfKingsTrial' - }; - - get meta() { - return LevelElfKingsTrial.meta; - } - - get name() { - return LevelElfKingsTrial.meta.name; - } - - logger = logger; - - constructor(public option: LevelOption) {} - - async update() { - const bits = (await socket.bitSet(8832, 2000037)).map(Boolean); - const values = await socket.multiValue(108105, 108106, 18745, 20134); - - this.data.stimulation = bits[0]; - this.data.canReceiveReward = !bits[1]; +const ELF_KINGS_LIST = { + 光王斯嘉丽: '2', + 水王沧岚: '8', + 自然王莫妮卡: '17', + 龙妈乔特鲁德: '6', + 草王茉蕊儿: '15', + 海瑟薇: '12', + 邪灵王摩哥斯: '14', + 格劳瑞: '9', + 战王: '13', + 秘王: '7' +}; - const { elfId } = this.option; - const levelStage = elfId <= 10 ? values[0] : values[1]; - const stageElfId = ((elfId - 1) % 9) * 3; +export default (logger: AnyFunction, battle: (name: string) => LevelBattle) => { + const meta: LevelMeta = { + name: '精灵王的试炼', + maxTimes: 6, + id: 'LevelElfKingsTrial' + }; - this.data.unlockHard = Boolean(levelStage & (1 << (stageElfId + 2))); - this.data.remainingTimes = this.meta.maxTimes - values[2]; - this.data.weeklyChallengeCount = values[3]; + const configSchema = { + elfKingId: { + name: '精灵王', + type: 'select', + description: '自动日任要挑战的精灵王', + default: '15', + list: ELF_KINGS_LIST + }, + stimulation: { + name: '精灵王双倍', + type: 'checkbox', + default: false + }, + sweep: { + name: '精灵王扫荡', + type: 'checkbox', + default: false } - - next(): string { - if (!this.data.unlockHard) { - this.logger(`${this.meta.name}: 未解锁困难难度`); - return LevelAction.STOP; - } else if (this.data.remainingTimes > 0) { - return LevelAction.BATTLE; - } else { - if (this.data.weeklyChallengeCount >= 30 && this.data.canReceiveReward) { - return LevelAction.AWARD; + } satisfies SEAConfigSchema; + + return task({ + meta, + configSchema, + runner: (meta, options) => { + const elfKingId = Number(options.elfKingId); + return { + logger, + data: { + progress: 0, + remainingTimes: 0, + stimulation: false, + unlockHard: false, + canReceiveReward: false, + weeklyChallengeCount: 0 + } as Data, + async update() { + const bits = (await socket.bitSet(8832, 2000037)).map(Boolean); + const values = await socket.multiValue(108105, 108106, 18745, 20134); + + this.data.stimulation = bits[0]; + this.data.canReceiveReward = !bits[1]; + + const levelStage = elfKingId <= 10 ? values[0] : values[1]; + const stageElfId = ((elfKingId - 1) % 9) * 3; + + this.data.unlockHard = Boolean(levelStage & (1 << (stageElfId + 2))); + this.data.remainingTimes = meta.maxTimes - values[2]; + this.data.weeklyChallengeCount = values[3]; + }, + next() { + if (!this.data.unlockHard) { + this.logger(`${meta.name}: 未解锁困难难度`); + return LevelAction.STOP; + } else if (this.data.remainingTimes > 0) { + return LevelAction.BATTLE; + } else { + if (this.data.weeklyChallengeCount >= 30 && this.data.canReceiveReward) { + return LevelAction.AWARD; + } + return LevelAction.STOP; + } + }, + selectLevelBattle() { + return battle('LevelElfKingsTrial'); + }, + actions: { + async battle() { + await socket.sendByQueue(42396, [106, elfKingId, 2]); + }, + async award() { + await socket.sendByQueue(42395, [106, 3, 0, 0]); + } } - return LevelAction.STOP; - } + }; } - - selectLevelBattle() { - return battle('LevelElfKingsTrial'); - } - - readonly actions: Record Promise> = { - battle: async () => { - socket.sendByQueue(42396, [106, this.option.elfId, 2]); - }, - - award: async () => { - await socket.sendByQueue(42395, [106, 3, 0, 0]); - } - }; - }; + }); }; diff --git a/packages/launcher/src/builtin/realm/LevelExpTraining.ts b/packages/launcher/src/builtin/realm/LevelExpTraining.ts index c6cdc584..6cb60a07 100644 --- a/packages/launcher/src/builtin/realm/LevelExpTraining.ts +++ b/packages/launcher/src/builtin/realm/LevelExpTraining.ts @@ -1,79 +1,73 @@ -import { LevelAction, socket } from '@sea/core'; -import type { LevelMeta, LevelData as SEALevelData, TaskRunner } from '@sea/mod-type'; +import type { AnyFunction, LevelBattle } from '@sea/core'; +import type { LevelData } from '@sea/mod-type'; -import type { AnyFunction, ILevelBattle } from '@sea/core'; +import { LevelAction, socket } from '@sea/core'; +import { task } from '@sea/mod-type'; -export interface LevelData extends SEALevelData { +export interface Data extends LevelData { stimulation: boolean; rewardReceived: boolean; } -export interface LevelOption { - stimulation: boolean; - sweep: boolean; -} - -export default (logger: AnyFunction, battle: (name: string) => ILevelBattle) => { - return class LevelExpTraining implements TaskRunner { - data: LevelData = { - remainingTimes: 0, - progress: 0, - rewardReceived: false, - stimulation: false - }; - - static readonly meta: LevelMeta = { +export default (logger: AnyFunction, battle: (name: string) => LevelBattle) => + task({ + meta: { name: '经验训练场', maxTimes: 6, id: 'LevelExpTraining' - }; - - get meta() { - return LevelExpTraining.meta; - } - - get name() { - return LevelExpTraining.meta.name; - } - - logger = logger; - - constructor(public option: LevelOption) {} - - async update() { - const bits = (await socket.bitSet(639, 1000571)).map(Boolean); - const buf = await socket.sendByQueue(42397, [116]); - const realmInfo = new DataView(buf!); - - this.data.stimulation = bits[0]; - this.data.rewardReceived = bits[1]; - this.data.remainingTimes = this.meta.maxTimes - realmInfo.getUint32(8); - } - - next(): string { - if (!this.data.rewardReceived) { - if (this.data.remainingTimes > 0) { - return LevelAction.BATTLE; - } else { - return LevelAction.AWARD; - } + }, + configSchema: { + stimulation: { + name: '经验双倍', + type: 'checkbox', + default: false + }, + sweep: { + name: '经验扫荡', + type: 'checkbox', + default: false } - - return LevelAction.STOP; - } - - selectLevelBattle() { - return battle('LevelExpTraining'); - } - - readonly actions: Record Promise> = { - battle: async () => { - socket.sendByQueue(CommandID.FIGHT_H5_PVE_BOSS, [116, 6, 1]); + }, + runner: (meta, options) => ({ + logger, + data: { + remainingTimes: 0, + progress: 0, + rewardReceived: false, + stimulation: false + } as Data, + async update() { + const bits = (await socket.bitSet(639, 1000571)).map(Boolean); + const buf = await socket.sendByQueue(42397, [116]); + const realmInfo = new DataView(buf!); + + this.data.stimulation = bits[0]; + this.data.rewardReceived = bits[1]; + this.data.remainingTimes = meta.maxTimes - realmInfo.getUint32(8); }, - - award: async () => { - await socket.sendByQueue(42395, [116, 3, 0, 0]); + next() { + if (!this.data.rewardReceived) { + if (this.data.remainingTimes > 0) { + return options.sweep ? 'sweep' : LevelAction.BATTLE; + } else { + return LevelAction.AWARD; + } + } + return LevelAction.STOP; + }, + selectLevelBattle() { + return battle('LevelExpTraining'); + }, + actions: { + async battle() { + await socket.sendByQueue(CommandID.FIGHT_H5_PVE_BOSS, [116, 6, 1]); + }, + async award() { + await socket.sendByQueue(42395, [116, 3, 0, 0]); + }, + async sweep() { + // TODO + } } - }; - }; -}; + }) + }); diff --git a/packages/launcher/src/builtin/realm/LevelStudyTraining.ts b/packages/launcher/src/builtin/realm/LevelStudyTraining.ts index fde3b8d4..99a19e80 100644 --- a/packages/launcher/src/builtin/realm/LevelStudyTraining.ts +++ b/packages/launcher/src/builtin/realm/LevelStudyTraining.ts @@ -1,78 +1,73 @@ -import { LevelAction, socket } from '@sea/core'; -import type { LevelMeta, LevelData as SEALevelData, TaskRunner } from '@sea/mod-type'; +import type { AnyFunction, LevelBattle } from '@sea/core'; +import type { LevelData } from '@sea/mod-type'; -import type { AnyFunction, ILevelBattle } from '@sea/core'; +import { LevelAction, socket } from '@sea/core'; +import { task } from '@sea/mod-type'; -export interface LevelData extends SEALevelData { +export interface Data extends LevelData { stimulation: boolean; rewardReceived: boolean; } -export interface LevelOption { - stimulation: boolean; - sweep: boolean; -} - -export default (logger: AnyFunction, battle: (name: string) => ILevelBattle) => { - return class LevelStudyTraining implements TaskRunner { - data: LevelData = { - remainingTimes: 0, - progress: 0, - rewardReceived: false, - stimulation: false - }; - - static readonly meta: LevelMeta = { +export default (logger: AnyFunction, battle: (name: string) => LevelBattle) => + task({ + meta: { name: '学习力训练场', maxTimes: 6, id: 'LevelStudyTraining' - }; - - get meta() { - return LevelStudyTraining.meta; - } - - get name() { - return LevelStudyTraining.meta.name; - } - - logger = logger; - - constructor(public option: LevelOption) {} - - async update() { - const bits = (await socket.bitSet(637, 1000572)).map(Boolean); - const buf = await socket.sendByQueue(42397, [115]); - const realmInfo = new DataView(buf!); - - this.data.stimulation = bits[0]; - this.data.rewardReceived = bits[1]; - this.data.remainingTimes = this.meta.maxTimes - realmInfo.getUint32(8); - } - - next(): string { - if (!this.data.rewardReceived) { - if (this.data.remainingTimes > 0) { - return LevelAction.BATTLE; - } else { - return LevelAction.AWARD; - } + }, + configSchema: { + stimulation: { + name: '学习力双倍', + type: 'checkbox', + default: false + }, + sweep: { + name: '学习力扫荡', + type: 'checkbox', + default: false } - return LevelAction.STOP; - } - - selectLevelBattle() { - return battle('LevelStudyTraining'); - } - - readonly actions: Record Promise> = { - battle: async () => { - socket.sendByQueue(CommandID.FIGHT_H5_PVE_BOSS, [115, 6, 1]); + }, + runner: (meta, options) => ({ + logger, + data: { + remainingTimes: 0, + progress: 0, + rewardReceived: false, + stimulation: false + } as Data, + next() { + if (!this.data.rewardReceived) { + if (this.data.remainingTimes > 0) { + return options.sweep ? 'sweep' : LevelAction.BATTLE; + } else { + return LevelAction.AWARD; + } + } + return LevelAction.STOP; }, + async update() { + const bits = (await socket.bitSet(637, 1000572)).map(Boolean); + const buf = await socket.sendByQueue(42397, [115]); + const realmInfo = new DataView(buf!); - award: async () => { - await socket.sendByQueue(42395, [115, 3, 0, 0]); + this.data.stimulation = bits[0]; + this.data.rewardReceived = bits[1]; + this.data.remainingTimes = meta.maxTimes - realmInfo.getUint32(8); + }, + selectLevelBattle() { + return battle('LevelStudyTraining'); + }, + actions: { + battle: async () => { + await socket.sendByQueue(CommandID.FIGHT_H5_PVE_BOSS, [115, 6, 1]); + }, + award: async () => { + await socket.sendByQueue(42395, [115, 3, 0, 0]); + }, + async sweep() { + // TODO + } } - }; - }; -}; + }) + }); diff --git a/packages/launcher/src/builtin/realm/LevelTitanHole.ts b/packages/launcher/src/builtin/realm/LevelTitanHole.ts index 6f0086a4..8a9e56d0 100644 --- a/packages/launcher/src/builtin/realm/LevelTitanHole.ts +++ b/packages/launcher/src/builtin/realm/LevelTitanHole.ts @@ -1,13 +1,9 @@ -import type { AnyFunction, ILevelBattle } from '@sea/core'; +import type { AnyFunction, LevelBattle } from '@sea/core'; import { LevelAction, delay, socket } from '@sea/core'; -import type { LevelData as SEALevelData, LevelMeta as SEALevelMeta, TaskRunner } from '@sea/mod-type'; +import type { LevelData, LevelMeta } from '@sea/mod-type'; +import { task } from '@sea/mod-type'; -export interface LevelOption { - stimulation: boolean; - sweep: boolean; -} - -export interface LevelData extends SEALevelData { +export interface Data extends LevelData { stimulation: boolean; levelOpen: boolean; levelOpenCount: number; @@ -16,105 +12,105 @@ export interface LevelData extends SEALevelData { step3Count: number; } -export interface LevelMeta extends SEALevelMeta { +export interface Meta extends LevelMeta { step2MaxCount: number; step3MaxCount: number; } -export default (logger: AnyFunction, battle: (name: string) => ILevelBattle) => { - return class LevelTitanHole implements TaskRunner { - data: LevelData = { - remainingTimes: 0, - progress: 0, - stimulation: false, - levelOpen: false, - levelOpenCount: 0, - step: 0, - step2Count: 0, - step3Count: 0 - }; - static readonly meta: LevelMeta = { +export default (logger: AnyFunction, battle: (name: string) => LevelBattle) => + task({ + meta: { id: 'LevelTitanHole', name: '泰坦矿洞', maxTimes: 2, step2MaxCount: 6, step3MaxCount: 48 - }; - logger = logger; - - get meta() { - return LevelTitanHole.meta; - } - - get name() { - return LevelTitanHole.meta.name; - } - - constructor(public option: LevelOption) {} - - async update() { - const bits = await socket.bitSet(640); - const values = await socket.multiValue(18724, 18725, 18726, 18727); - - this.data.stimulation = bits[0]; - - this.data.levelOpenCount = values[0]; - this.data.step = (values[1] >> 8) & 255; - this.data.levelOpen = this.data.step > 0; - this.data.step2Count = (values[2] >> 8) & 255; - this.data.step3Count = values[3] & 255; - } - - next(): string { - if (this.data.levelOpenCount < this.meta.maxTimes || this.data.levelOpen) { - if (!this.data.levelOpen) { - return 'open_level'; - } else if (this.data.step === 3) { - return 'mine_ores'; - } - return LevelAction.BATTLE; - } else if (this.data.levelOpenCount === this.meta.maxTimes && !this.data.levelOpen) { - return LevelAction.STOP; - } else { - return LevelAction.AWARD; + } as Meta, + configSchema: { + stimulation: { + name: '泰坦矿洞双倍', + type: 'checkbox', + default: false + }, + sweep: { + name: '泰坦矿洞扫荡', + type: 'checkbox', + default: false } - } + }, + runner: (meta, options) => ({ + data: { + stimulation: false, + levelOpen: false, + levelOpenCount: 0, + step: 0, + step2Count: 0, + step3Count: 0 + } as Data, + logger, + async update() { + const bits = await socket.bitSet(640); + const values = await socket.multiValue(18724, 18725, 18726, 18727); - selectLevelBattle() { - if (this.data.step === 2) { - return battle('LevelTitanHole_1'); - } else { - return battle('LevelTitanHole'); - } - } + this.data.stimulation = bits[0]; - readonly actions: Record Promise> = { - mine_ores: async () => { - if (this.data.step3Count < 48) { - const i = this.data.step3Count + 1; - // eslint-disable-next-line prefer-const - let [row, col] = [Math.trunc(i / 11), (i % 11) + 1]; - if (row % 2 === 1) { - col = 11 - col + 1; + this.data.levelOpenCount = values[0]; + this.data.step = (values[1] >> 8) & 255; + this.data.levelOpen = this.data.step > 0; + this.data.step2Count = (values[2] >> 8) & 255; + this.data.step3Count = values[3] & 255; + }, + next() { + if (this.data.levelOpenCount < meta.maxTimes || this.data.levelOpen) { + if (!this.data.levelOpen) { + return options.sweep ? 'sweep' : 'open_level'; + } else if (this.data.step === 3) { + return 'mine_ores'; } - this.logger('dig', row, col, row * 11 + col); - - // may throw error - await socket.sendByQueue(42395, [104, 2, row * 11 + col, 0]); - - await delay(Math.random() * 100 + 200); + return LevelAction.BATTLE; + } else if (this.data.levelOpenCount === meta.maxTimes) { + return LevelAction.STOP; + } else { + return LevelAction.AWARD; } }, - battle: async () => { - socket.sendByQueue(42396, [104, 3, this.data.step]); - }, - award: async () => { - await socket.sendByQueue(42395, [104, 5, 0, 0]); + selectLevelBattle() { + if (this.data.step === 2) { + return battle('LevelTitanHole_1'); + } else { + return battle('LevelTitanHole'); + } }, - open_level: async () => { - this.logger('开启泰坦矿洞'); - await socket.sendByQueue(42395, [104, 1, 3, 0]); + actions: { + async mine_ores() { + if (this.data.step3Count < 48) { + const i = this.data.step3Count + 1; + // eslint-disable-next-line prefer-const + let [row, col] = [Math.trunc(i / 11), (i % 11) + 1]; + if (row % 2 === 1) { + col = 11 - col + 1; + } + this.logger('dig', row, col, row * 11 + col); + + // may throw error + await socket.sendByQueue(42395, [104, 2, row * 11 + col, 0]); + + await delay(Math.random() * 100 + 200); + } + }, + async battle() { + await socket.sendByQueue(42396, [104, 3, this.data.step]); + }, + async award() { + await socket.sendByQueue(42395, [104, 5, 0, 0]); + }, + async open_level() { + this.logger('开启泰坦矿洞'); + await socket.sendByQueue(42395, [104, 1, 3, 0]); + }, + async sweep() { + // TODO + } } - }; - }; -}; + }) + }); diff --git a/packages/launcher/src/builtin/realm/LevelXTeamRoom.ts b/packages/launcher/src/builtin/realm/LevelXTeamRoom.ts index f623dcc6..c596139b 100644 --- a/packages/launcher/src/builtin/realm/LevelXTeamRoom.ts +++ b/packages/launcher/src/builtin/realm/LevelXTeamRoom.ts @@ -1,9 +1,10 @@ -import { LevelAction, socket } from '@sea/core'; -import type { LevelMeta, LevelData as SEALevelData, TaskRunner } from '@sea/mod-type'; +import type { AnyFunction, LevelBattle } from '@sea/core'; +import type { LevelData } from '@sea/mod-type'; -import type { AnyFunction, ILevelBattle } from '@sea/core'; +import { LevelAction, socket } from '@sea/core'; +import { task } from '@sea/mod-type'; -export interface LevelData extends SEALevelData { +export interface Data extends LevelData { open: boolean; dailyMinRound: number; dailyRewardReceived: boolean; @@ -11,102 +12,77 @@ export interface LevelData extends SEALevelData { weeklyCompletedCount: number; } -export interface LevelOption { - sweep: boolean; -} - -export default (logger: AnyFunction, battle: (name: string) => ILevelBattle) => { - return class LevelXTeamRoom implements TaskRunner { - data: LevelData = { - remainingTimes: 0, - progress: 0, - open: false, - dailyMinRound: 0, - dailyRewardReceived: false, - weeklyRewardReceived: false, - weeklyCompletedCount: 0 - }; - - static readonly meta: LevelMeta = { +export default (logger: AnyFunction, battle: (name: string) => LevelBattle) => + task({ + meta: { id: 'LevelXTeamRoom', name: 'X战队密室', maxTimes: 3 - }; - - get meta() { - return LevelXTeamRoom.meta; - } - - get name() { - return LevelXTeamRoom.meta.name; - } - logger = logger; - - constructor(public option: LevelOption) {} - - async update() { - const bits = await socket.bitSet(1000585, 2000036); - const values = await socket.multiValue(12769, 12774, 20133); - const pInfos = await socket.playerInfo(1197); - - this.data.dailyRewardReceived = bits[0]; - this.data.weeklyRewardReceived = bits[1]; - - this.data.open = Boolean(pInfos[0]); - this.data.remainingTimes = this.meta.maxTimes - values[0]; - this.data.dailyMinRound = values[1]; - this.data.weeklyCompletedCount = values[2]; - } - - next(): string { - if (this.data.weeklyRewardReceived) { - return LevelAction.STOP; - } - - if (!this.data.weeklyRewardReceived && this.data.weeklyCompletedCount >= 5) { - return 'award_weekly'; - } - - if (this.data.dailyRewardReceived) { - return LevelAction.STOP; - } - - if (!this.data.dailyRewardReceived && this.data.dailyMinRound > 0) { - return LevelAction.AWARD; - } - - if (this.data.dailyMinRound === 0 && (this.data.remainingTimes > 0 || this.data.open)) { - if (this.data.open) { - return LevelAction.BATTLE; - } else { - return 'open_level'; + }, + runner: (meta) => ({ + logger, + data: { + remainingTimes: 0, + progress: 0, + open: false, + dailyMinRound: 0, + dailyRewardReceived: false, + weeklyRewardReceived: false, + weeklyCompletedCount: 0 + } as Data, + next() { + if (this.data.weeklyRewardReceived) { + return LevelAction.STOP; + } else if (this.data.weeklyCompletedCount >= 5) { + return 'award_weekly'; } - } - this.logger(`${this.meta.name}: 日任失败`); - return LevelAction.STOP; - } + if (this.data.dailyRewardReceived) { + return LevelAction.STOP; + } else if (this.data.dailyMinRound > 0) { + return LevelAction.AWARD; + } - selectLevelBattle() { - return battle('LevelXTeamRoom'); - } + if (this.data.dailyMinRound === 0 && (this.data.remainingTimes > 0 || this.data.open)) { + if (this.data.open) { + return LevelAction.BATTLE; + } else { + return 'open_level'; + } + } - readonly actions: Record Promise> = { - open_level: async () => { - await socket.sendByQueue(42395, [105, 1, 1, 0]); + this.logger(`${meta.name}: 日任失败`); + return LevelAction.STOP; }, - - battle: async () => { - socket.sendByQueue(CommandID.FIGHT_H5_PVE_BOSS, [105, 7, 0]); + async update() { + const bits = await socket.bitSet(1000585, 2000036); + const values = await socket.multiValue(12769, 12774, 20133); + const pInfos = await socket.playerInfo(1197); + + this.data.dailyRewardReceived = bits[0]; + this.data.weeklyRewardReceived = bits[1]; + + this.data.open = Boolean(pInfos[0]); + this.data.remainingTimes = meta.maxTimes - values[0]; + this.data.dailyMinRound = values[1]; + this.data.weeklyCompletedCount = values[2]; }, - - award: async () => { - await socket.sendByQueue(42395, [105, 2, 0, 0]); + selectLevelBattle() { + return battle('LevelXTeamRoom'); }, - - award_weekly: async () => { - await socket.sendByQueue(42395, [105, 3, 0, 0]); + actions: { + open_level: async () => { + await socket.sendByQueue(42395, [105, 1, 1, 0]); + }, + battle: async () => { + await socket.sendByQueue(CommandID.FIGHT_H5_PVE_BOSS, [105, 7, 0]); + }, + award: async () => { + await socket.sendByQueue(42395, [105, 2, 0, 0]); + }, + award_weekly: async () => { + await socket.sendByQueue(42395, [105, 3, 0, 0]); + } } - }; - }; -}; + }) + }); diff --git a/packages/launcher/src/builtin/realm/index.ts b/packages/launcher/src/builtin/realm/index.ts index e33531bd..e932c015 100644 --- a/packages/launcher/src/builtin/realm/index.ts +++ b/packages/launcher/src/builtin/realm/index.ts @@ -1,6 +1,7 @@ import { MOD_SCOPE_BUILTIN, VERSION } from '@/constants'; -import { NOOP, delay, type ILevelBattle, type ILevelRunner } from '@sea/core'; -import type { LevelData, LevelMeta, SEAModContext, SEAModExport, SEAModMetadata, TaskRunner } from '@sea/mod-type'; +import { delay, NOOP } from '@sea/core'; +import type { SEAModContext, SEAModExport, SEAModMetadata } from '@sea/mod-type'; +import { task } from '@sea/mod-type'; import LevelCourageTower from './LevelCourageTower'; import LevelElfKingsTrial from './LevelElfKingsTrial'; import LevelExpTraining from './LevelExpTraining'; @@ -13,126 +14,49 @@ export const metadata = { scope: MOD_SCOPE_BUILTIN, version: VERSION, description: '日常关卡', - configSchema: { - 'LevelElfKingsTrial.elfKing': { - name: '精灵王', - type: 'select', - description: '自动日任要挑战的精灵王', - default: '15', - list: { - 光王斯嘉丽: '2', - 水王沧岚: '8', - 自然王莫妮卡: '17', - 龙妈乔特鲁德: '6', - 草王茉蕊儿: '15', - 海瑟薇: '12', - 邪灵王摩哥斯: '14', - 格劳瑞: '9', - 战王: '13', - 秘王: '7' - } - }, - 'LevelElfKingsTrial.elfKingStimulation': { - name: '精灵王双倍', - type: 'checkbox', - default: false - }, - 'LevelElfKingsTrial.sweep': { - name: '精灵王扫荡', - type: 'checkbox', - default: false - }, - 'LevelCourageTower.stimulation': { - name: '勇者之塔双倍', - type: 'checkbox', - default: false - }, - 'LevelCourageTower.sweep': { - name: '勇者之塔扫荡', - type: 'checkbox', - default: false - }, - 'LevelExpTraining.stimulation': { - name: '经验双倍', - type: 'checkbox', - default: false - }, - 'LevelExpTraining.sweep': { - name: '经验扫荡', - type: 'checkbox', - default: false - }, - 'LevelStudyTraining.stimulation': { - name: '学习力双倍', - type: 'checkbox', - default: false - }, - 'LevelStudyTraining.sweep': { - name: '学习力扫荡', - type: 'checkbox', - default: false - }, - 'LevelTitanHole.stimulation': { - name: '泰坦矿洞双倍', - type: 'checkbox', - default: false - }, - 'LevelTitanHole.sweep': { - name: '泰坦矿洞扫荡', - type: 'checkbox', - default: false - }, - 'LevelXTeamRoom.sweep': { - name: 'X战队扫荡', - type: 'checkbox', - default: false - } - } + configSchema: {} } satisfies SEAModMetadata; export default function realm({ logger, battle }: SEAModContext) { return { tasks: [ - LevelCourageTower(logger, battle), LevelElfKingsTrial(logger, battle), + LevelCourageTower(logger, battle), LevelExpTraining(logger, battle), LevelStudyTraining(logger, battle), LevelTitanHole(logger, battle), LevelXTeamRoom(logger, battle), - class Test implements TaskRunner { - async update() { - // empty - } - static readonly meta: LevelMeta = { - id: 'Test', - name: '测试', - maxTimes: 1 - }; - get meta(): LevelMeta { - return Test.meta; - } - get name(): string { - return Test.meta.name; - } - data: LevelData = { remainingTimes: 0, progress: 0 }; - actions: Record>(this: R) => Promise> = { - run: async () => { - this.data.progress++; - await delay(3000); - } - }; - - next(): string { - if (this.data.progress === 3) { - return 'stop'; - } - return 'run'; - } - selectLevelBattle?(): ILevelBattle { - return battle(''); + task({ + meta: { id: 'Test', name: '测试', maxTimes: 1 }, + runner() { + return { + data: { + progress: 0, + remainingTimes: 0, + customField: 'string' + }, + selectLevelBattle() { + return battle(''); + }, + async update() { + await Promise.resolve(this.data.customField + '1'); + }, + logger: NOOP, + next() { + if (this.data.progress === 3) { + return 'stop'; + } + return 'run'; + }, + actions: { + async run() { + this.data.customField = 'custom'; + await delay(3000); + } + } + }; } - logger = NOOP; - } + }) ] as const } satisfies SEAModExport; } diff --git a/packages/launcher/src/services/mod/handler.ts b/packages/launcher/src/services/mod/handler.ts index 0cc7d717..14678e00 100644 --- a/packages/launcher/src/services/mod/handler.ts +++ b/packages/launcher/src/services/mod/handler.ts @@ -4,7 +4,7 @@ import { store as battleStore } from '@/services/store/battle'; import type { SEAModContext, SEAModExport, SEAModMetadata } from '@sea/mod-type'; import type { ModState } from '@sea/server'; import { ModInstance, store } from '../store/mod'; -import { buildMetadata, getNamespace } from './metadata'; +import { buildMetadata, getNamespace, type DefinedModMetadata } from './metadata'; import { getLogger, getModConfig, getModData } from './utils'; type ModFactory = (context: SEAModContext) => Promise | SEAModExport; @@ -41,14 +41,9 @@ class ModDeploymentHandler { public state: ModState ) {} - metadata: - | (SEAModMetadata & { - version: string; - scope: string; - preload: boolean; - }) - | undefined; - factory: ModFactory | undefined; + metadata?: DefinedModMetadata; + + factory?: ModFactory; async fetch() { if (this.state.builtin) { diff --git a/packages/launcher/src/services/mod/metadata.ts b/packages/launcher/src/services/mod/metadata.ts index 1d84abf2..1ad48534 100644 --- a/packages/launcher/src/services/mod/metadata.ts +++ b/packages/launcher/src/services/mod/metadata.ts @@ -1,5 +1,8 @@ import { MOD_SCOPE_DEFAULT } from '@/constants'; -import type { SEAConfigItemSchema, SEAModMetadata } from '@sea/mod-type'; +import type { SEAFormItemSchema, SEAModMetadata } from '@sea/mod-type'; + +export type DefinedModMetadata = Required> & + Pick; export function getNamespace(meta: SEAModMetadata) { const { scope, id } = meta; @@ -7,20 +10,17 @@ export function getNamespace(meta: SEAModMetadata) { } export function buildMetadata(metadata: SEAModMetadata) { - let { scope, version, preload } = metadata; + let { scope, version, preload, description } = metadata; scope = scope ?? MOD_SCOPE_DEFAULT; version = version ?? '0.0.0'; preload = preload ?? false; + description = description ?? ''; - return { ...metadata, scope, version, preload } as SEAModMetadata & { - version: string; - scope: string; - preload: boolean; - }; + return { ...metadata, scope, version, preload, description } as DefinedModMetadata; } -export function buildDefaultConfig(configSchema: Record) { +export function buildDefaultConfig(configSchema: Record) { const keys = Object.keys(configSchema); const defaultConfig: Record = {}; keys.forEach((key) => { diff --git a/packages/launcher/src/services/store/battle.ts b/packages/launcher/src/services/store/battle.ts index bdbe8651..fb562aa1 100644 --- a/packages/launcher/src/services/store/battle.ts +++ b/packages/launcher/src/services/store/battle.ts @@ -1,4 +1,4 @@ -import type { ILevelBattle } from '@sea/core'; +import type { LevelBattle } from '@sea/core'; import type { Battle } from '@sea/mod-type'; import { ctByName } from './CatchTimeBinding'; @@ -6,7 +6,7 @@ import { store as strategyStore } from './strategy'; export interface BattleInstance { name: string; - battle: () => ILevelBattle; + battle: () => LevelBattle; ownerMod: string; pets: string[]; strategy: string; diff --git a/packages/launcher/src/services/store/mod.ts b/packages/launcher/src/services/store/mod.ts index 3b767c0c..ba82a19d 100644 --- a/packages/launcher/src/services/store/mod.ts +++ b/packages/launcher/src/services/store/mod.ts @@ -1,28 +1,26 @@ -import type { Battle, Command, SEAModExport, SEAModMetadata, Strategy, Task } from '@sea/mod-type'; +import type { Battle, Command, SEAModExport, Strategy, Task } from '@sea/mod-type'; import { type AnyFunction } from '@sea/core'; -import { getNamespace } from '../mod/metadata'; +import { getNamespace, type DefinedModMetadata } from '../mod/metadata'; import * as battleStore from './battle'; import * as commandStore from './command'; import * as strategyStore from './strategy'; import * as taskStore from './task'; export class ModInstance { - meta: SEAModMetadata & { - namespace: string; - }; - finalizers: AnyFunction[] = []; - strategy: string[] = []; - battle: string[] = []; - level: string[] = []; - command: string[] = []; + strategies: string[] = []; + battles: string[] = []; + tasks: string[] = []; + commands: string[] = []; - constructor(meta: SEAModMetadata, { battles, commands, install, strategies, tasks, uninstall }: SEAModExport) { - this.meta = { ...meta, namespace: getNamespace(meta) }; + constructor( + public meta: DefinedModMetadata, + { battles, commands, install, strategies, tasks, uninstall }: SEAModExport + ) { // 加载导出的内容 - this.tryRegisterStrategy(strategies); + this.tryRegisterStrategies(strategies); this.tryRegisterBattle(battles); this.tryRegisterTask(tasks); this.tryRegisterCommand(commands); @@ -33,64 +31,78 @@ export class ModInstance { uninstall && this.addFinalizer(uninstall); } + get namespace() { + return getNamespace(this.meta); + } + addFinalizer(finalizer: AnyFunction) { this.finalizers.push(finalizer); } - private tryRegisterStrategy(strategy?: Strategy[]) { - if (!strategy) return; + private tryRegisterStrategies(strategies?: Strategy[]) { + if (!strategies) return; - strategy.forEach((strategy) => { - strategyStore.add(this.meta.namespace, strategy); - this.strategy.push(strategy.name); + strategies.forEach((strategy) => { + strategyStore.add(this.namespace, strategy); + this.strategies.push(strategy.name); }); this.finalizers.push(() => { - this.strategy.forEach((name) => strategyStore.tryRemove(name)); + this.strategies.forEach((name) => { + strategyStore.tryRemove(name); + }); }); } - private tryRegisterBattle(battle?: Battle[]) { - if (!battle) return; + private tryRegisterBattle(battles?: Battle[]) { + if (!battles) return; - battle.forEach((battle) => { - battleStore.add(this.meta.namespace, battle); - this.battle.push(battle.name); + battles.forEach((battle) => { + battleStore.add(this.namespace, battle); + this.battles.push(battle.name); }); this.finalizers.push(() => { - this.battle.forEach((name) => battleStore.tryRemove(name)); + this.battles.forEach((name) => { + battleStore.tryRemove(name); + }); }); } - private tryRegisterTask(level?: Task[]) { - if (!level) return; + private tryRegisterTask(tasks?: Task[]) { + if (!tasks) return; - level.forEach((level) => { - taskStore.add(this.meta.namespace, level); - this.level.push(level.meta.name); + tasks.forEach((task) => { + taskStore.add(this.namespace, task); + this.tasks.push(task.meta.name); }); this.finalizers.push(() => { - this.level.forEach((name) => taskStore.tryRemove(name)); + this.tasks.forEach((name) => { + taskStore.tryRemove(name); + }); }); } - private tryRegisterCommand(command?: Command[]) { - if (!command) return; + private tryRegisterCommand(commands?: Command[]) { + if (!commands) return; - command.forEach((command) => { - commandStore.add(this.meta.namespace, command); - this.command.push(command.name); + commands.forEach((command) => { + commandStore.add(this.namespace, command); + this.commands.push(command.name); }); this.finalizers.push(() => { - this.command.forEach((name) => commandStore.tryRemove(name)); + this.commands.forEach((name) => { + commandStore.tryRemove(name); + }); }); } dispose() { - this.finalizers.forEach((finalizer) => finalizer()); + this.finalizers.forEach((finalizer) => { + finalizer(); + }); } } @@ -103,11 +115,11 @@ export function teardown() { return; } try { - store.delete(mod.meta.namespace); + store.delete(mod.namespace); mod.dispose(); - console.log(`卸载模组: ${mod.meta.namespace}`); + console.log(`卸载模组: ${mod.namespace}`); } catch (error) { - console.error(`模组卸载失败: ${mod.meta.namespace}`, error); + console.error(`模组卸载失败: ${mod.namespace}`, error); } }); } diff --git a/packages/launcher/src/views/AutomationView/TaskStateView/TaskStateList.tsx b/packages/launcher/src/views/AutomationView/TaskStateView/TaskStateList.tsx index 8fe0782c..4e5343e9 100644 --- a/packages/launcher/src/views/AutomationView/TaskStateView/TaskStateList.tsx +++ b/packages/launcher/src/views/AutomationView/TaskStateView/TaskStateList.tsx @@ -32,7 +32,6 @@ import Pending from '@mui/icons-material/PendingOutlined'; import PlayArrow from '@mui/icons-material/PlayArrowRounded'; import RestartAlt from '@mui/icons-material/RestartAltRounded'; import Stop from '@mui/icons-material/StopOutlined'; -import type { TaskRunner } from '@sea/mod-type'; const StatusIconMap = { pending: , diff --git a/packages/launcher/src/views/ModView/ManagementView/ModList.tsx b/packages/launcher/src/views/ModView/ManagementView/ModList.tsx index ac4811d8..da7a210e 100644 --- a/packages/launcher/src/views/ModView/ManagementView/ModList.tsx +++ b/packages/launcher/src/views/ModView/ManagementView/ModList.tsx @@ -59,16 +59,16 @@ export function ModListItem({ mod }: ModListItemProps) { )} - {mod.strategy.length ? `策略: ${mod.strategy.length}` : ''} + {mod.strategies.length ? `策略: ${mod.strategies.length}` : ''} - {mod.battle.length ? `战斗: ${mod.battle.length}` : ''} + {mod.battles.length ? `战斗: ${mod.battles.length}` : ''} - {mod.level.length ? `关卡: ${mod.level.length}` : ''} + {mod.tasks.length ? `关卡: ${mod.tasks.length}` : ''} - {mod.command.length ? `命令: ${mod.command.length}` : ''} + {mod.commands.length ? `命令: ${mod.commands.length}` : ''} ); diff --git a/packages/launcher/core-e2e-test/entry.js b/packages/launcher/test/entry.js similarity index 100% rename from packages/launcher/core-e2e-test/entry.js rename to packages/launcher/test/entry.js diff --git a/packages/launcher/core-e2e-test/index.html b/packages/launcher/test/index.html similarity index 100% rename from packages/launcher/core-e2e-test/index.html rename to packages/launcher/test/index.html diff --git a/packages/launcher/core-e2e-test/style.css b/packages/launcher/test/style.css similarity index 100% rename from packages/launcher/core-e2e-test/style.css rename to packages/launcher/test/style.css diff --git a/packages/launcher/core-e2e-test/suites/battle.spec.js b/packages/launcher/test/suites/battle.spec.js similarity index 100% rename from packages/launcher/core-e2e-test/suites/battle.spec.js rename to packages/launcher/test/suites/battle.spec.js diff --git a/packages/launcher/core-e2e-test/suites/pet.spec.js b/packages/launcher/test/suites/pet.spec.js similarity index 100% rename from packages/launcher/core-e2e-test/suites/pet.spec.js rename to packages/launcher/test/suites/pet.spec.js diff --git a/packages/launcher/test/tsconfig.json b/packages/launcher/test/tsconfig.json new file mode 100644 index 00000000..3e7c8506 --- /dev/null +++ b/packages/launcher/test/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "module": "es2022", + "target": "esnext", + "moduleResolution": "bundler", + "lib": ["esnext", "dom"], + "allowUmdGlobalAccess": true, + "resolveJsonModule": true, + "checkJs": true, + "noEmit": true, + "typeRoots": ["../node_modules/@types", "../types"] + }, + "include": ["suites/**/*", "env/**/*"], + "references": [ + { + "path": "./tsconfig.node.json" + } + ] +} diff --git a/packages/launcher/test/tsconfig.node.json b/packages/launcher/test/tsconfig.node.json new file mode 100644 index 00000000..f6b8db30 --- /dev/null +++ b/packages/launcher/test/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "module": "nodenext", + "lib": ["es2022"], + "moduleResolution": "nodenext", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/packages/launcher/core-e2e-test/vite.config.ts b/packages/launcher/test/vite.config.ts similarity index 85% rename from packages/launcher/core-e2e-test/vite.config.ts rename to packages/launcher/test/vite.config.ts index bb7cd0fb..63805b4d 100644 --- a/packages/launcher/core-e2e-test/vite.config.ts +++ b/packages/launcher/test/vite.config.ts @@ -17,13 +17,13 @@ export default defineConfig(({ command, mode }) => { injectTo: 'body', attrs: { src: '/api/js/seerh5.61.com/app.js', - defer: true, - }, - }, + defer: true + } + } ]; return { html, tags }; - }, - }, + } + } }; return { @@ -33,9 +33,9 @@ export default defineConfig(({ command, mode }) => { proxy: { '/api': `http://localhost:${env['VITE_BACKEND_PORT']}`, '/seerh5.61.com': `http://localhost:${env['VITE_BACKEND_PORT']}`, - '/account-co.61.com': `http://localhost:${env['VITE_BACKEND_PORT']}`, - }, + '/account-co.61.com': `http://localhost:${env['VITE_BACKEND_PORT']}` + } }, - plugins: [loadAppJs], + plugins: [loadAppJs] }; }); diff --git a/packages/launcher/tsconfig.json b/packages/launcher/tsconfig.json index de5709dc..f3a9c575 100644 --- a/packages/launcher/tsconfig.json +++ b/packages/launcher/tsconfig.json @@ -10,10 +10,10 @@ "allowArbitraryExtensions": true, "allowImportingTsExtensions": true, "resolveJsonModule": true, + "lib": ["ESNext", "DOM"], // "skipLibCheck": false, "jsx": "react", "noEmit": true, - "composite": true, "paths": { "@/*": ["./src/*"] }, diff --git a/packages/mod-type/index.d.ts b/packages/mod-type/index.d.ts deleted file mode 100644 index 7d8c914a..00000000 --- a/packages/mod-type/index.d.ts +++ /dev/null @@ -1,161 +0,0 @@ -import type { ILevelBattle, ILevelRunner, MoveStrategy } from '@sea/core'; - -export type DataObject = Record | NonNullable; - -export type SEAConfigItemSchema = ( - | { - type: 'textInput'; - default: string; - } - | { - type: 'numberInput'; - default: number; - } - | { - type: 'select'; - list: Record; - default: string; - } - | { - type: 'checkbox'; - default: boolean; - } -) & { - name: string; - description?: string; -}; - -export interface SEAModMetadata { - id: string; - scope?: string; - version?: string; - description?: string; - preload?: boolean; - data?: DataObject; - configSchema?: Record; -} - -export type SEAModContext = InnerModContext< - TMetadata, - TMetadata['configSchema'] extends Record ? TMetadata['configSchema'] : undefined, - TMetadata['data'] extends DataObject ? TMetadata['data'] : undefined ->; - -export interface InnerModContext< - TMetadata extends SEAModMetadata, - TConfigSchema extends Record | undefined = undefined, - TData extends DataObject | undefined = undefined -> { - meta: TMetadata; - - logger: typeof console.log; - - config: TConfigSchema extends Record - ? { - [item in keyof TConfigSchema]: TConfigSchema[item]['type'] extends 'textInput' | 'select' - ? string - : TConfigSchema[item]['type'] extends 'numberInput' - ? number - : TConfigSchema[item]['type'] extends 'checkbox' - ? boolean - : never; - } - : undefined; - configSchemas?: TConfigSchema; - - data: TData; - mutate: TData extends undefined ? undefined : (recipe: (draft: TData) => void) => void; - - ct(...pets: string[]): number[]; - battle(name: string): ILevelBattle; -} - -export interface SEAModExport { - strategies?: Strategy[]; - battles?: Battle[]; - tasks?: Task[]; - commands?: Command[]; - install?(): void; - uninstall?(): void; -} - -export interface TaskRunner extends ILevelRunner { - get meta(): LevelMeta; - get name(): string; -} - -export type Strategy = MoveStrategy & { name: string }; - -export interface Battle { - name: string; - strategy: string; - pets: string[]; - beforeBattle?: () => Promise; -} - -export interface Task { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - new (option?: any): TaskRunner; - readonly meta: LevelMeta; -} - -export interface Command { - name: string; - icon?: string; - description?: string | (() => string); - handler: (...args: string[]) => unknown; -} - -/** 关卡的静态数据, 实现时可以使用getter来方便获取 */ -export interface LevelMeta { - id: string; - name: string; - maxTimes: number; -} - -export interface LevelData { - /** 剩余的每日次数 */ - remainingTimes: number; - /** 当前次数下的进度 */ - progress: number; -} - -declare global { - class NatureXMLInfo { - static _dataMap: seerh5.Dict; - } -} - -declare module '@sea/core' { - export interface SEAEngine { - updateBattleFireInfo(): Promise<{ - type: number; - valid: boolean; - timeLeft: number; - }>; - - /** - * @param type 装备类型, 代表装备的位置(目镜, 头部, 腰部等) - * @param itemId 装备的**物品**id - */ - changeEquipment(type: Parameters[0], itemId: number): Promise; - } - - export interface GameConfigMap { - nature: seerh5.NatureObj; - } -} - -declare global { - namespace seerh5 { - interface NatureObj extends seerh5.BaseObj { - id: number; - name: string; - } - } - - interface SEA { - /** 正则过滤列表 */ - logRegexFilter: { log: RegExp[]; warn: RegExp[] }; - } -} diff --git a/packages/mod-type/index.ts b/packages/mod-type/index.ts new file mode 100644 index 00000000..9a83897f --- /dev/null +++ b/packages/mod-type/index.ts @@ -0,0 +1,186 @@ +/* eslint-disable @typescript-eslint/no-extraneous-class */ +/* eslint-disable @typescript-eslint/no-namespace */ +import type { LevelBattle, LevelRunner, MoveStrategy } from '@sea/core'; + +export type DataObject = NonNullable; + +export type SEAFormItem = + | { + type: 'textInput'; + default: string; + } + | { + type: 'numberInput'; + default: number; + } + | { + type: 'select'; + list: Record; + default: string; + } + | { + type: 'checkbox'; + default: boolean; + } + | { + type: 'battle'; + default: string; + }; + +export type SEAFormItemSchema = SEAFormItem & { + name: string; + description?: string; +}; + +export type SEAConfigSchema = Record; + +export type GetFormItemType = TFormItem['type'] extends 'textInput' | 'select' | 'battle' + ? string + : TFormItem['type'] extends 'numberInput' + ? number + : TFormItem['type'] extends 'checkbox' + ? boolean + : never; + +export type GetConfigObjectTypeFromSchema = { + [item in keyof TConfigSchema]: GetFormItemType; +}; + +export interface SEAModMetadata { + id: string; + scope?: string; + version?: string; + description?: string; + preload?: boolean; + data?: DataObject; + configSchema?: SEAConfigSchema; +} + +export interface SEAModContext { + meta: TMetadata; + + logger: typeof console.log; + + config: TMetadata['configSchema'] extends undefined + ? undefined + : GetConfigObjectTypeFromSchema>; + configSchemas?: TMetadata['configSchema']; + + data: TMetadata['data']; + mutate: TMetadata['data'] extends undefined + ? undefined + : (recipe: (draft: NonNullable) => void) => void; + + ct(...pets: string[]): number[]; + battle(name: string): LevelBattle; +} + +export interface SEAModExport { + strategies?: Strategy[]; + battles?: Battle[]; + tasks?: Task[]; + commands?: Command[]; + install?(): void; + uninstall?(): void; +} + +export type Strategy = MoveStrategy & { name: string }; + +export interface Battle { + name: string; + strategy: string; + pets: string[]; + beforeBattle?: () => Promise; +} + +/** 关卡元数据 */ +export interface LevelMeta { + id: string; + name: string; + maxTimes: number; +} + +/** 关卡的动态数据, 实现时可以使用getter来方便获取 */ +export interface LevelData { + /** 剩余的每日次数 */ + remainingTimes: number; + /** 当前次数下的进度 */ + progress: number; +} + +type VoidFunction = () => Promise | void; + +export interface Task< + TMeta extends LevelMeta = LevelMeta, + TSchema extends SEAConfigSchema | undefined = undefined, + TData extends LevelData = LevelData, + TActions extends string = string +> { + readonly meta: TMeta; + readonly configSchema?: TSchema; + runner( + metadata: TMeta, + options: TSchema extends SEAConfigSchema ? GetConfigObjectTypeFromSchema> : undefined + ): Omit & { + next: () => TActions; + data: TData; + actions: Partial, VoidFunction>> & + ThisType<{ data: TData } & Pick>; + }; +} + +export function task< + TMeta extends LevelMeta, + TData extends LevelData, + TActions extends string, + TSchema extends SEAConfigSchema | undefined = undefined +>(taskDefinition: Task): Task { + return taskDefinition as Task; +} + +export interface Command { + name: string; + icon?: string; + description?: string | (() => string); + handler: (...args: string[]) => unknown; +} + +declare global { + class NatureXMLInfo { + static _dataMap: seerh5.Dict; + } +} + +declare module '@sea/core' { + export interface SEAEngine { + updateBattleFireInfo(): Promise<{ + type: number; + valid: boolean; + timeLeft: number; + }>; + + /** + * @param type 装备类型, 代表装备的位置(目镜, 头部, 腰部等) + * @param itemId 装备的**物品**id + */ + changeEquipment(type: Parameters[0], itemId: number): Promise; + } + + export interface GameConfigMap { + nature: seerh5.NatureObj; + } +} + +declare global { + namespace seerh5 { + interface NatureObj extends seerh5.BaseObj { + id: number; + name: string; + } + } + + interface SEA { + /** 正则过滤列表 */ + logRegexFilter: { log: RegExp[]; warn: RegExp[] }; + } +} diff --git a/packages/mod-type/package.json b/packages/mod-type/package.json index f7ab3c56..5253d218 100644 --- a/packages/mod-type/package.json +++ b/packages/mod-type/package.json @@ -2,14 +2,12 @@ "name": "@sea/mod-type", "private": true, "type": "module", - "version": "0.7.0", + "version": "0.8.0", "exports": { - ".": { - "types": "./index.d.ts" - } + ".": "./index.ts" }, "files": [ - "index.d.ts" + "index.ts" ], "scripts": {}, "devDependencies": { diff --git a/packages/mod-type/tsconfig.json b/packages/mod-type/tsconfig.json index 052d31b1..fd57ff6e 100644 --- a/packages/mod-type/tsconfig.json +++ b/packages/mod-type/tsconfig.json @@ -1,14 +1,16 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.common.json", "compilerOptions": { "module": "nodenext", "moduleResolution": "nodenext", "target": "es2022", "noEmit": true, + "strict": true, "skipLibCheck": false, + "tsBuildInfoFile": "../../.tsbuildinfo/mod-type.tsbuildinfo", "types": ["@sea/core/types/seerh5", "@sea/core/types/egret"] }, - "include": ["./index.d.ts"], + "include": ["index.ts"], "references": [ { "path": "../core" diff --git a/packages/server/package.json b/packages/server/package.json index 3e4b00c8..4817bb34 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -19,7 +19,7 @@ }, "dependencies": { "@fastify/cors": "^9.0.1", - "@fastify/env": "^4.3.0", + "@fastify/env": "^4.4.0", "@fastify/middie": "^8.3.1", "@fastify/multipart": "^8.3.0", "@fastify/one-line-logger": "^1.4.0", @@ -27,7 +27,7 @@ "@fastify/websocket": "^10.0.1", "@trpc/server": "11.0.0-rc.417", "close-with-grace": "^1.3.0", - "fastify": "^4.28.0", + "fastify": "^4.28.1", "fastify-type-provider-zod": "^2.0.0", "http-proxy-middleware": "3.0.0", "rotating-file-stream": "^3.2.3", @@ -35,8 +35,8 @@ "zod": "^3.23.8" }, "devDependencies": { - "@sea/mod-type": "workspace:*", - "@swc/core": "^1.6.3", + "@swc/core": "^1.6.6", + "@types/node": "^20.14.9", "@yao-pkg/pkg": "^5.12.0", "esbuild": "0.21.5", "form-data": "^4.0.0", diff --git a/packages/server/src/client-types.ts b/packages/server/src/client-types.ts index b45abb83..46435be3 100644 --- a/packages/server/src/client-types.ts +++ b/packages/server/src/client-types.ts @@ -2,4 +2,4 @@ import type { apiRouter } from './router/index.ts'; export type ApiRouter = typeof apiRouter; export type { ModState } from './data/ModIndexes.ts'; -export type { ModInstallOptions } from './router/mod/manager.ts'; +export type { ModInstallOptions } from './router/mod/schemas.ts'; diff --git a/packages/server/src/data/ModIndexes.ts b/packages/server/src/data/ModIndexes.ts index 74f11e58..efd73b95 100644 --- a/packages/server/src/data/ModIndexes.ts +++ b/packages/server/src/data/ModIndexes.ts @@ -1,5 +1,5 @@ -import { getNamespace, praseNamespace } from '../utils.ts'; import { SEASConfigData } from '../utils/SEASConfigData.ts'; +import { getNamespace, praseNamespace } from '../utils/index.ts'; export interface ModState { enable: boolean; diff --git a/packages/server/src/middlewares/appJsProxy.ts b/packages/server/src/middlewares/appJsProxy.ts index 721cb544..ecfb61f0 100644 --- a/packages/server/src/middlewares/appJsProxy.ts +++ b/packages/server/src/middlewares/appJsProxy.ts @@ -17,7 +17,7 @@ export const createAppJsProxy: FastifyPluginCallback = (fastify, _opts, done) => async function fetcher(url: URL, modifier: (script: string) => string) { // console.log(`[Proxy]: --> ${url}`); return fetch(url, { - headers: request.headers as HeadersInit, + headers: request.headers as RequestInit['headers'], referrer: 'http://seerh5.61.com/' }) .then(async (r) => { diff --git a/packages/server/src/router/mod/manager.ts b/packages/server/src/router/mod/manager.ts index 4a884add..7f3e8b33 100644 --- a/packages/server/src/router/mod/manager.ts +++ b/packages/server/src/router/mod/manager.ts @@ -1,18 +1,10 @@ import path from 'path'; -import type { DataObject } from '@sea/mod-type'; import { modIndexes, type ModState } from '../../data/ModIndexes.ts'; import { configsRoot, modsRoot } from '../../paths.ts'; -import { getNamespace } from '../../utils.ts'; import { SEASConfigData } from '../../utils/SEASConfigData.ts'; - -export interface ModInstallOptions { - builtin?: boolean; - preload?: boolean; - update?: boolean; - config?: DataObject; - data?: DataObject; -} +import { getNamespace } from '../../utils/index.ts'; +import type { ModInstallOptions } from './schemas.ts'; export const ModManager = { root: '.', diff --git a/packages/server/src/router/mod/schemas.ts b/packages/server/src/router/mod/schemas.ts index 06580e5e..f6741a0d 100644 --- a/packages/server/src/router/mod/schemas.ts +++ b/packages/server/src/router/mod/schemas.ts @@ -1,4 +1,3 @@ -import type { DataObject } from '@sea/mod-type'; import { z } from 'zod'; export const ModIdentifierSchema = z.object({ @@ -15,3 +14,13 @@ export const ModInstallOptionsSchema = z.object({ config: NonNullObjectSchema.optional(), data: NonNullObjectSchema.optional() }); + +export type DataObject = object & {}; + +export interface ModInstallOptions { + builtin?: boolean; + preload?: boolean; + update?: boolean; + config?: DataObject; + data?: DataObject; +} diff --git a/packages/server/src/router/mod/uploadAndInstall.ts b/packages/server/src/router/mod/uploadAndInstall.ts index 339269ba..b58da6e0 100644 --- a/packages/server/src/router/mod/uploadAndInstall.ts +++ b/packages/server/src/router/mod/uploadAndInstall.ts @@ -1,5 +1,5 @@ import fastifyMultipart from '@fastify/multipart'; -import type { DataObject } from '@sea/mod-type'; +import type { DataObject } from './schemas.ts'; import type { FastifyPluginAsync } from 'fastify'; import { serializerCompiler, validatorCompiler, type ZodTypeProvider } from 'fastify-type-provider-zod'; import { createWriteStream } from 'node:fs'; diff --git a/packages/server/src/utils.ts b/packages/server/src/utils/index.ts similarity index 100% rename from packages/server/src/utils.ts rename to packages/server/src/utils/index.ts diff --git a/packages/server/tsconfig.json b/packages/server/tsconfig.json index 529d9d53..ca96151c 100644 --- a/packages/server/tsconfig.json +++ b/packages/server/tsconfig.json @@ -1,15 +1,13 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.common.json", "compilerOptions": { "module": "nodenext", "moduleResolution": "nodenext", - "target": "es2022", "resolveJsonModule": true, "allowImportingTsExtensions": true, "noEmit": true, - "incremental": true, "tsBuildInfoFile": "../../.tsbuildinfo/server.tsbuildinfo", - "composite": true + "lib": ["ESNext"] }, "include": ["src"], "ts-node": { @@ -20,6 +18,7 @@ "swc": true, "esm": true, "compilerOptions": { + "target": "ESNext", "esModuleInterop": true, "importsNotUsedAsValues": "error" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9c90fb93..51e95a38 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,37 +4,38 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + braces@<3.0.3: '>=3.0.3' + ws@>=8.0.0 <8.17.1: '>=8.17.1' + importers: .: devDependencies: '@eslint/js': - specifier: ^9.5.0 - version: 9.5.0 + specifier: ^9.6.0 + version: 9.6.0 '@types/eslint__js': specifier: ^8.42.3 version: 8.42.3 - '@types/node': - specifier: ^20.14.7 - version: 20.14.7 '@vitest/coverage-v8': specifier: 2.0.0-beta.12 - version: 2.0.0-beta.12(vitest@2.0.0-beta.12(@types/node@20.14.7)(happy-dom@14.12.3)(terser@5.31.1)) + version: 2.0.0-beta.12(vitest@2.0.0-beta.12(@types/node@20.14.9)(happy-dom@14.12.3)(terser@5.31.1)) concurrently: specifier: ^8.2.2 version: 8.2.2 eslint: - specifier: ^9.5.0 - version: 9.5.0 + specifier: ^9.6.0 + version: 9.6.0 eslint-plugin-react-hooks: specifier: 5.1.0-rc-8971381549-20240625 - version: 5.1.0-rc-8971381549-20240625(eslint@9.5.0) + version: 5.1.0-rc-8971381549-20240625(eslint@9.6.0) eslint-plugin-react-refresh: specifier: ^0.4.7 - version: 0.4.7(eslint@9.5.0) + version: 0.4.7(eslint@9.6.0) globals: - specifier: ^15.6.0 - version: 15.6.0 + specifier: ^15.8.0 + version: 15.8.0 husky: specifier: ^9.0.11 version: 9.0.11 @@ -48,17 +49,17 @@ importers: specifier: ^5.0.7 version: 5.0.7 typescript: - specifier: ^5.5.2 - version: 5.5.2 + specifier: ^5.5.3 + version: 5.5.3 typescript-eslint: specifier: 8.0.0-alpha.34 - version: 8.0.0-alpha.34(eslint@9.5.0)(typescript@5.5.2) + version: 8.0.0-alpha.34(eslint@9.6.0)(typescript@5.5.3) vite: - specifier: ^5.3.1 - version: 5.3.1(@types/node@20.14.7)(terser@5.31.1) + specifier: ^5.3.2 + version: 5.3.2(@types/node@20.14.9)(terser@5.31.1) vitest: specifier: 2.0.0-beta.12 - version: 2.0.0-beta.12(@types/node@20.14.7)(happy-dom@14.12.3)(terser@5.31.1) + version: 2.0.0-beta.12(@types/node@20.14.9)(happy-dom@14.12.3)(terser@5.31.1) packages/core: dependencies: @@ -147,13 +148,13 @@ importers: version: 4.4.10 '@vitejs/plugin-react-swc': specifier: ^3.7.0 - version: 3.7.0(vite@5.3.1(@types/node@20.14.7)(terser@5.31.1)) + version: 3.7.0(vite@5.3.2(@types/node@20.14.9)(terser@5.31.1)) vite-plugin-inspect: specifier: ^0.8.4 - version: 0.8.4(rollup@2.79.1)(vite@5.3.1(@types/node@20.14.7)(terser@5.31.1)) + version: 0.8.4(rollup@2.79.1)(vite@5.3.2(@types/node@20.14.9)(terser@5.31.1)) vite-plugin-pwa: specifier: ^0.20.0 - version: 0.20.0(vite@5.3.1(@types/node@20.14.7)(terser@5.31.1))(workbox-build@7.1.1)(workbox-window@7.1.0) + version: 0.20.0(vite@5.3.2(@types/node@20.14.9)(terser@5.31.1))(workbox-build@7.1.1)(workbox-window@7.1.0) packages/mod-type: devDependencies: @@ -167,8 +168,8 @@ importers: specifier: ^9.0.1 version: 9.0.1 '@fastify/env': - specifier: ^4.3.0 - version: 4.3.0 + specifier: ^4.4.0 + version: 4.4.0 '@fastify/middie': specifier: ^8.3.1 version: 8.3.1 @@ -191,11 +192,11 @@ importers: specifier: ^1.3.0 version: 1.3.0 fastify: - specifier: ^4.28.0 - version: 4.28.0 + specifier: ^4.28.1 + version: 4.28.1 fastify-type-provider-zod: specifier: ^2.0.0 - version: 2.0.0(fastify@4.28.0)(zod@3.23.8) + version: 2.0.0(fastify@4.28.1)(zod@3.23.8) http-proxy-middleware: specifier: 3.0.0 version: 3.0.0 @@ -209,12 +210,12 @@ importers: specifier: ^3.23.8 version: 3.23.8 devDependencies: - '@sea/mod-type': - specifier: workspace:* - version: link:../mod-type '@swc/core': - specifier: ^1.6.3 - version: 1.6.3 + specifier: ^1.6.6 + version: 1.6.6 + '@types/node': + specifier: ^20.14.9 + version: 20.14.9 '@yao-pkg/pkg': specifier: ^5.12.0 version: 5.12.0 @@ -232,32 +233,7 @@ importers: version: 11.2.1 ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.6.3)(@types/node@20.14.7)(typescript@5.5.2) - - sdk: - dependencies: - '@types/node': - specifier: ^20.11.0 - version: 20.14.7 - dayjs: - specifier: ^1.11.10 - version: 1.11.11 - devDependencies: - '@sea/core': - specifier: file:lib/sea-core-1.0.0-rc.5.tgz - version: file:sdk/lib/sea-core-1.0.0-rc.5.tgz - '@sea/mod-type': - specifier: file:lib/sea-mod-type-0.7.0.tgz - version: file:sdk/lib/sea-mod-type-0.7.0.tgz(@sea/core@file:sdk/lib/sea-core-1.0.0-rc.5.tgz) - superjson: - specifier: ^2.2.1 - version: 2.2.1 - typescript: - specifier: ^5.4.5 - version: 5.5.2 - vite: - specifier: ^5.2.10 - version: 5.3.1(@types/node@20.14.7)(terser@5.31.1) + version: 10.9.2(@swc/core@1.6.6)(@types/node@20.14.9)(typescript@5.5.3) packages: @@ -389,18 +365,10 @@ packages: resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.1': - resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.7': resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.22.20': - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} @@ -883,10 +851,6 @@ packages: resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.0': - resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} - engines: {node: '>=6.9.0'} - '@babel/types@7.24.7': resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} engines: {node: '>=6.9.0'} @@ -1099,20 +1063,20 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.10.1': - resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} + '@eslint-community/regexpp@4.11.0': + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.16.0': - resolution: {integrity: sha512-/jmuSd74i4Czf1XXn7wGRWZCuyaUZ330NH1Bek0Pplatt4Sy1S5haN21SCLLdbeKslQ+S0wEJ+++v5YibSi+Lg==} + '@eslint/config-array@0.17.0': + resolution: {integrity: sha512-A68TBu6/1mHHuc5YJL0U0VVeGNiklLAL6rRmhTCP2B5XjWLMnrX+HkO+IAXyHvks5cyyY1jjK5ITPQ1HGS2EVA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.1.0': resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.5.0': - resolution: {integrity: sha512-A7+AOT2ICkodvtsWnxZP4Xxk3NbZ3VMHd8oihydLRGrJgqqdEz1qSeEgXYyT/Cu8h1TWWsQRejIx48mtjZ5y1w==} + '@eslint/js@9.6.0': + resolution: {integrity: sha512-D9B0/3vNg44ZeWbYMpBoXqNP4j6eQD5vNwIlGAuFRRzK/WtT/jvDQW3Bi9kkf3PMDMlM7Yi+73VLUsn5bJcl8A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.4': @@ -1123,8 +1087,8 @@ packages: resolution: {integrity: sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==} engines: {node: '>=14'} - '@fastify/ajv-compiler@3.5.0': - resolution: {integrity: sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==} + '@fastify/ajv-compiler@3.6.0': + resolution: {integrity: sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==} '@fastify/busboy@2.1.1': resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} @@ -1136,8 +1100,8 @@ packages: '@fastify/deepmerge@1.3.0': resolution: {integrity: sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A==} - '@fastify/env@4.3.0': - resolution: {integrity: sha512-WSredffWvaYjiwHGK5wvY33LFi39gAasBMWelglA6Jk+d7uj/ZWp7icaPoM0kSR5g9M8OOALEvk+8SXiNhK1YA==} + '@fastify/env@4.4.0': + resolution: {integrity: sha512-JEg6wo05KOhmRJ1lBTjJ8zQVUJmxInaavsMkfO1cfYWXOfdQXO48k01LneOmM5Y8dwwQ6ff7WUEi/dHl8YidIQ==} '@fastify/error@3.4.1': resolution: {integrity: sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==} @@ -1479,84 +1443,74 @@ packages: cpu: [x64] os: [win32] - '@sea/core@file:sdk/lib/sea-core-1.0.0-rc.5.tgz': - resolution: {integrity: sha512-+4qav14t8xsieIOvim+BQZ3HC2hkjv0OrYtb81JyGWGVnKsrcPqM8I6TzAvnVVdbEbC4Nz7JZMAquB5e/frMEw==, tarball: file:sdk/lib/sea-core-1.0.0-rc.5.tgz} - version: 1.0.0-rc.5 - - '@sea/mod-type@file:sdk/lib/sea-mod-type-0.7.0.tgz': - resolution: {integrity: sha512-jip2llkfcIx/IP9pvt91XTYd7OduVhxN4wTpoNxlkvRyTGmiGTVYWRW6JpLOiKEoHQ+xgGTa7g8zmHGgFilKvg==, tarball: file:sdk/lib/sea-mod-type-0.7.0.tgz} - version: 0.7.0 - peerDependencies: - '@sea/core': ^1.0.0-rc - '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} '@surma/rollup-plugin-off-main-thread@2.2.3': resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} - '@swc/core-darwin-arm64@1.6.3': - resolution: {integrity: sha512-3r7cJf1BcE30iyF1rnOSKrEzIR+cqnyYSZvivrm62TZdXVsIjfXe1xulsKGxZgNeLY5erIu7ukvMvBvPhnQvqA==} + '@swc/core-darwin-arm64@1.6.6': + resolution: {integrity: sha512-5DA8NUGECcbcK1YLKJwNDKqdtTYDVnkfDU1WvQSXq/rU+bjYCLtn5gCe8/yzL7ISXA6rwqPU1RDejhbNt4ARLQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.6.3': - resolution: {integrity: sha512-8GLZ23IgVpF5xh2SbS5ZW/12/EEBuRU1hFOLB5rKERJU0y1RJ6YhDMf/FuOWhfHQcFM7TeedBwHIzaF+tdKKlw==} + '@swc/core-darwin-x64@1.6.6': + resolution: {integrity: sha512-2nbh/RHpweNRsJiYDFk1KcX7UtaKgzzTNUjwtvK5cp0wWrpbXmPvdlWOx3yzwoiSASDFx78242JHHXCIOlEdsw==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.6.3': - resolution: {integrity: sha512-VQ/bduX7WhLOlGbJLMG7UH0LBehjjx43R4yuk55rjjJLqpvX5fQzMsWhQdIZ5vsc+4ORzdgtEAlpumTv6bsD1A==} + '@swc/core-linux-arm-gnueabihf@1.6.6': + resolution: {integrity: sha512-YgytuyUfR7b0z0SRHKV+ylr83HmgnROgeT7xryEkth6JGpAEHooCspQ4RrWTU8+WKJ7aXiZlGXPgybQ4TiS+TA==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.6.3': - resolution: {integrity: sha512-jHIQ/PCwtdDBIF/BiC5DochswuCAIW/T5skJ+eDMbta7+QtEnZCXTZWpT5ORoEY/gtsE2fjpOA4TS6fBBvXqUw==} + '@swc/core-linux-arm64-gnu@1.6.6': + resolution: {integrity: sha512-yGwx9fddzEE0iURqRVwKBQ4IwRHE6hNhl15WliHpi/PcYhzmYkUIpcbRXjr0dssubXAVPVnx6+jZVDSbutvnfg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.6.3': - resolution: {integrity: sha512-gA6velEUD27Dwu0BlR9hCcFzkWq2YL2pDAU5qbgeuGhaMiUCBssfqTQB+2ctEnV+AZx+hSMJOHvtA+uFZjfRrw==} + '@swc/core-linux-arm64-musl@1.6.6': + resolution: {integrity: sha512-a6fMbqzSAsS5KCxFJyg1mD5kwN3ZFO8qQLyJ75R/htZP/eCt05jrhmOI7h2n+1HjiG332jLnZ9S8lkVE5O8Nqw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.6.3': - resolution: {integrity: sha512-fy4qoBDr5I8r+ZNCZxs/oZcmu4j/8mtSud6Ka102DaSxEjNg0vfIdo9ITsVIPsofhUTmDKjQsPB2O7YUlJAioQ==} + '@swc/core-linux-x64-gnu@1.6.6': + resolution: {integrity: sha512-hRGsUKNzzZle28YF0dYIpN0bt9PceR9LaVBq7x8+l9TAaDLFbgksSxcnU/ubTtsy+WsYSYGn+A83w3xWC0O8CQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.6.3': - resolution: {integrity: sha512-c/twcMbq/Gpq47G+b3kWgoaCujpXO11aRgJx6am+CprvP4uNeBHEpQkxD+DQmdWFHisZd0i9GB8NG3e7L9Rz9Q==} + '@swc/core-linux-x64-musl@1.6.6': + resolution: {integrity: sha512-NokIUtFxJDVv3LzGeEtYMTV3j2dnGKLac59luTeq36DQLZdJQawQIdTbzzWl2jE7lxxTZme+dhsVOH9LxE3ceg==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.6.3': - resolution: {integrity: sha512-y6RxMtX45acReQmzkxcEfJscfBXce6QjuNgWQHHs9exA592BZzmolDUwgmAyjyvopz1lWX+KdymdZFKvuDSx4w==} + '@swc/core-win32-arm64-msvc@1.6.6': + resolution: {integrity: sha512-lzYdI4qb4k1dFG26yv+9Jaq/bUMAhgs/2JsrLncGjLof86+uj74wKYCQnbzKAsq2hDtS5DqnHnl+//J+miZfGA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.6.3': - resolution: {integrity: sha512-41h7z3xgukl1HDDwhquaeOPSP1OWeHl+mWKnJVmmwd3ui/oowUDCO856qa6JagBgPSnAGfyXwv6vthuXwyCcWA==} + '@swc/core-win32-ia32-msvc@1.6.6': + resolution: {integrity: sha512-bvl7FMaXIJQ76WZU0ER4+RyfKIMGb6S2MgRkBhJOOp0i7VFx4WLOnrmMzaeoPJaJSkityVKAftfNh7NBzTIydQ==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.6.3': - resolution: {integrity: sha512-//bnwo9b8Vp1ED06eXCHyGZ5xIpdkQgg2fuFDdtd1FITl7r5bdQh2ryRzPiKiGwgXZwZQitUshI4JeEX9IuW+Q==} + '@swc/core-win32-x64-msvc@1.6.6': + resolution: {integrity: sha512-WAP0JoCTfgeYKgOeYJoJV4ZS0sQUmU3OwvXa2dYYtMLF7zsNqOiW4niU7QlThBHgUv/qNZm2p6ITEgh3w1cltw==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.6.3': - resolution: {integrity: sha512-mZpei+LqE+AL+nwgERMQey9EJA9/yhHTN6nwbobH5GnSij/lhfTdGfAb1iumOrroqEcXbHUaK//7wOw7DjBGdA==} + '@swc/core@1.6.6': + resolution: {integrity: sha512-sHfmIUPUXNrQTwFMVCY5V5Ena2GTOeaWjS2GFUpjLhAgVfP90OP67DWow7+cYrfFtqBdILHuWnjkTcd0+uPKlg==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -1567,8 +1521,8 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/types@0.1.8': - resolution: {integrity: sha512-RNFA3+7OJFNYY78x0FYwi1Ow+iF1eF5WvmfY1nXPOEH4R2p/D4Cr1vzje7dNAI2aLFqpv8Wyz4oKSWqIZArpQA==} + '@swc/types@0.1.9': + resolution: {integrity: sha512-qKnCno++jzcJ4lM4NTfYifm1EFSCeIfKiAHAfkENZAV5Kl9PjJIyd2yeeVv6c/2CckuLyv2NmRC5pv6pm2WQBg==} '@trpc/client@11.0.0-rc.417': resolution: {integrity: sha512-uXztohI5ygT76jpMoGjh8zlJKR51k5vRt+3EFdFdnyAkyvoWiJgWyzujMZBUoO9VVoMI+6iAUdugyUdoAUTjcg==} @@ -1608,8 +1562,8 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@20.14.7': - resolution: {integrity: sha512-uTr2m2IbJJucF3KUxgnGOZvYbN0QgkGyWxG6973HCpMYFy2KfcgYuIwkJQMQkt1VbBMlvWRbpshFTLxnxCZjKQ==} + '@types/node@20.14.9': + resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -1722,9 +1676,6 @@ packages: resolution: {integrity: sha512-KZVpiDKRi2gtrVtKwhz/ZUKBOicVNggxaYQzPBjULuOLJ/UypTmAz5a2g+utLMn+WogbLE3vLfmC+TWp8v3+aQ==} hasBin: true - abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -1737,15 +1688,10 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + acorn-walk@8.3.3: + resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} engines: {node: '>=0.4.0'} - acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.12.0: resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} engines: {node: '>=0.4.0'} @@ -1774,9 +1720,6 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - ajv@8.16.0: resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} @@ -1812,9 +1755,6 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - archy@1.0.0: - resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} - arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} @@ -1855,8 +1795,8 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - avvio@8.3.0: - resolution: {integrity: sha512-VBVH0jubFr9LdFASy/vNtm5giTrnbVquWBhT0fyizuNK2rQ7e7ONU2plZQWUNqtE1EmxFEb+kbSkFRkstiaS9Q==} + avvio@8.3.2: + resolution: {integrity: sha512-st8e519GWHa/azv8S87mcJvZs4WsgTBjOw/Ih1CP6u+8SZvcOeAYNG6JbsIrAUUJJ7JfmrnOkR8ipDS+u9SIRQ==} babel-plugin-macros@3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} @@ -1934,8 +1874,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001636: - resolution: {integrity: sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==} + caniuse-lite@1.0.30001639: + resolution: {integrity: sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==} chai@5.1.1: resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} @@ -2093,9 +2033,6 @@ packages: dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} - dayjs@1.11.11: - resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} - debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -2199,8 +2136,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.4.807: - resolution: {integrity: sha512-kSmJl2ZwhNf/bcIuCH/imtNOKlpkLDn2jqT5FJ+/0CXjhnFaOa9cOe9gHKKy71eM49izwuQjZhKk+lWQ1JxB7A==} + electron-to-chromium@1.4.816: + resolution: {integrity: sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==} emoji-regex@10.3.0: resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} @@ -2218,8 +2155,8 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - env-schema@5.2.1: - resolution: {integrity: sha512-gWMNrQ3dVHAZcCx7epiFwgXcyfBh4heD/6+OK3bEbke3uL+KqwYA9nUOwzJyRZh1cJOFcwdPuY1n0GKSFlSWAg==} + env-schema@6.0.0: + resolution: {integrity: sha512-/IHp1EmrfubUOfF1wfe8koDWM5/dxUDylHANPNrPyrsYWJ7KRiB8gXbjtqQBujmOhpSpXXOhhnaL+meb+MaGtA==} error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -2294,8 +2231,8 @@ packages: resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.5.0: - resolution: {integrity: sha512-+NAOZFrW/jFTS3dASCGBxX1pkFD0/fsO+hfAkJ4TyYKwgsXZbqzrw+seCYFCcPCYXvnD67tAnglU7GQTz6kcVw==} + eslint@9.6.0: + resolution: {integrity: sha512-ElQkdLMEEqQNM9Njff+2Y4q2afHk7JpkPvrd7Xh7xefwgQynqPxwf55J7di9+MEibWUGdNjFF9ITG9Pck5M84w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true @@ -2369,8 +2306,8 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - fast-json-stringify@5.14.1: - resolution: {integrity: sha512-J1Grbf0oSXV3lKsBf3itz1AvRk43qVrx3Ac10sNvi3LZaz1by4oDdYKFrJycPhS8+Gb7y8rgV/Jqw1UZVjyNvw==} + fast-json-stringify@5.16.1: + resolution: {integrity: sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==} fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} @@ -2385,8 +2322,8 @@ packages: fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - fast-uri@2.3.0: - resolution: {integrity: sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==} + fast-uri@2.4.0: + resolution: {integrity: sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==} fastify-plugin@4.5.1: resolution: {integrity: sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==} @@ -2397,8 +2334,8 @@ packages: fastify: ^4.0.0 zod: ^3.14.2 - fastify@4.28.0: - resolution: {integrity: sha512-HhW7UHW07YlqH5qpS0af8d2Gl/o98DhJ8ZDQWHRNDnzeOhZvtreWsX8xanjGgXmkYerGbo8ax/n40Dpwqkot8Q==} + fastify@4.28.1: + resolution: {integrity: sha512-kFWUtpNr4i7t5vY2EJPCN2KgMVpuqfU4NjnJNCgiNB900oiDeYqaNDRcAfeBbOF5hGixixxcKnOU4KN9z6QncQ==} fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -2414,8 +2351,8 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - find-my-way@8.1.0: - resolution: {integrity: sha512-41QwjCGcVTODUmLLqTMeoHeiozbMXYMAE1CKFiDyi9zVZ2Vjh0yz3MF0WQZoIb+cmzP/XlbFjlF2NtJmvZHznA==} + find-my-way@8.2.0: + resolution: {integrity: sha512-HdWXgFYc6b1BJcOBDBwjqWuHJj1WYiqrxSh25qtU4DabpMFdj/gSunNBQb83t+8Zt67D7CXEzJWTkxaShMTMOA==} engines: {node: '>=14'} find-root@1.1.0: @@ -2444,10 +2381,6 @@ packages: for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} - foreground-child@3.2.1: resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} engines: {node: '>=14'} @@ -2533,11 +2466,6 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.3.12: - resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - glob@10.4.2: resolution: {integrity: sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==} engines: {node: '>=16 || 14 >=14.18'} @@ -2555,8 +2483,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@15.6.0: - resolution: {integrity: sha512-UzcJi88Hw//CurUIRa9Jxb0vgOCcuD/MNjwmXp633cyaRKkCWACkoqHCtfZv43b1kqXGg/fpOa8bwgacCeXsVg==} + globals@15.8.0: + resolution: {integrity: sha512-VZAJ4cewHTExBWDHR6yptdIBlx9YSSZuwojj9Nt5mBRXQzrKakDsVKQ1J63sklLvzAJm0X5+RpO4i3Y2hcOnFw==} engines: {node: '>=18'} globalthis@1.0.4: @@ -2725,8 +2653,9 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-core-module@2.14.0: + resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} + engines: {node: '>= 0.4'} is-core-module@2.9.0: resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} @@ -2856,18 +2785,14 @@ packages: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} - istanbul-lib-source-maps@5.0.4: - resolution: {integrity: sha512-wHOoEsNJTVltaJp8eVkm8w+GVkVNHT2YDYo53YdzQEL2gWm1hBX5cGFR9hQJtuGLebidVX7et3+dmDZrmclduw==} + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} engines: {node: '>=10'} istanbul-reports@3.1.7: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} - jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} - jackspeak@3.4.0: resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} engines: {node: '>=14'} @@ -2959,8 +2884,8 @@ packages: engines: {node: '>=18.12.0'} hasBin: true - listr2@8.2.2: - resolution: {integrity: sha512-sy0dq+JPS+RAFiFk2K8Nbub7khNmeeoFALNUJ4Wzk34wZKAzaOhEXqGWs4RA5aui0RaM6Hgn7VEKhCj0mlKNLA==} + listr2@8.2.3: + resolution: {integrity: sha512-Lllokma2mtoniUOS94CcOErHWAug5iu7HOmDrvWgpw8jyQH2fomgB+7lZS4HWZxytUuQwkGOwe49FvwVaA85Xw==} engines: {node: '>=18.0.0'} locate-path@6.0.0: @@ -2990,21 +2915,13 @@ packages: loupe@3.1.1: resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} - lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} - engines: {node: 14 || >=16.14} - - lru-cache@10.2.2: - resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} + lru-cache@10.3.0: + resolution: {integrity: sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==} engines: {node: 14 || >=16.14} lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} @@ -3028,10 +2945,6 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - micromatch@4.0.7: resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} @@ -3072,13 +2985,13 @@ packages: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} - engines: {node: '>=16 || 14 >=14.17'} - minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} @@ -3116,8 +3029,8 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - node-abi@3.59.0: - resolution: {integrity: sha512-HyyfzvTLCE8b1SX2nWimlra8cibEsypcSu/Az4SXMhWhtuctkwAX7qsEYNjUOIoYtPV884oN3wtYTN+iZKBtvw==} + node-abi@3.65.0: + resolution: {integrity: sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==} engines: {node: '>=10'} node-fetch@2.7.0: @@ -3137,10 +3050,6 @@ packages: engines: {node: '>=10'} hasBin: true - nopt@1.0.10: - resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==} - hasBin: true - normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -3160,8 +3069,9 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} @@ -3243,10 +3153,6 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.10.2: - resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} - engines: {node: '>=16 || 14 >=14.17'} - path-scurry@1.11.1: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} @@ -3283,9 +3189,6 @@ packages: engines: {node: '>=0.10'} hasBin: true - pino-abstract-transport@1.1.0: - resolution: {integrity: sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==} - pino-abstract-transport@1.2.0: resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} @@ -3304,8 +3207,8 @@ packages: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} - postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + postcss@8.4.39: + resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} engines: {node: ^10 || ^12 || >=14} prebuild-install@7.1.1: @@ -3466,17 +3369,14 @@ packages: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - ret@0.2.2: - resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} - engines: {node: '>=4'} + ret@0.4.3: + resolution: {integrity: sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==} + engines: {node: '>=10'} reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rfdc@1.3.1: - resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} - rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} @@ -3523,8 +3423,8 @@ packages: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} - safe-regex2@2.0.0: - resolution: {integrity: sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==} + safe-regex2@3.1.0: + resolution: {integrity: sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==} safe-stable-stringify@2.4.3: resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} @@ -3540,11 +3440,6 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} - engines: {node: '>=10'} - hasBin: true - semver@7.6.2: resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} @@ -3686,8 +3581,8 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string-width@7.1.0: - resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} string.prototype.matchall@4.0.11: @@ -3831,8 +3726,8 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} - touch@3.1.0: - resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} + touch@3.1.1: + resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} hasBin: true tr46@0.0.3: @@ -3904,8 +3799,8 @@ packages: typescript: optional: true - typescript@5.5.2: - resolution: {integrity: sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==} + typescript@5.5.3: + resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==} engines: {node: '>=14.17'} hasBin: true @@ -3946,8 +3841,8 @@ packages: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} - update-browserslist-db@1.0.16: - resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + update-browserslist-db@1.1.0: + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -3993,8 +3888,8 @@ packages: '@vite-pwa/assets-generator': optional: true - vite@5.3.1: - resolution: {integrity: sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==} + vite@5.3.2: + resolution: {integrity: sha512-6lA7OBHBlXUxiJxbO5aAY2fsHHzDr1q7DvXYnyZycRs2Dz+dXBWuhpWHvmljTRTpQC2uvGmUFFkSHF2vGo90MA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -4170,9 +4065,6 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} @@ -4206,8 +4098,8 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} engines: {node: '>=12.20'} zod-to-json-schema@3.23.1: @@ -4259,7 +4151,7 @@ snapshots: '@babel/traverse': 7.24.7 '@babel/types': 7.24.7 convert-source-map: 2.0.0 - debug: 4.3.5 + debug: 4.3.5(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -4268,7 +4160,7 @@ snapshots: '@babel/generator@7.23.0': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.23.0 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 @@ -4326,7 +4218,7 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-compilation-targets': 7.24.7 '@babel/helper-plugin-utils': 7.24.7 - debug: 4.3.5 + debug: 4.3.5(supports-color@5.5.0) lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -4354,7 +4246,7 @@ snapshots: '@babel/helper-module-imports@7.24.3': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.7 '@babel/helper-module-imports@7.24.7': dependencies: @@ -4416,12 +4308,8 @@ snapshots: dependencies: '@babel/types': 7.24.7 - '@babel/helper-string-parser@7.24.1': {} - '@babel/helper-string-parser@7.24.7': {} - '@babel/helper-validator-identifier@7.22.20': {} - '@babel/helper-validator-identifier@7.24.7': {} '@babel/helper-validator-option@7.24.7': {} @@ -4442,7 +4330,7 @@ snapshots: '@babel/highlight@7.24.2': dependencies: - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.1 @@ -4456,7 +4344,7 @@ snapshots: '@babel/parser@7.23.0': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.23.0 '@babel/parser@7.24.7': dependencies: @@ -5026,21 +4914,15 @@ snapshots: '@babel/helper-split-export-declaration': 7.24.7 '@babel/parser': 7.24.7 '@babel/types': 7.24.7 - debug: 4.3.5 + debug: 4.3.5(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color '@babel/types@7.23.0': dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - - '@babel/types@7.24.0': - dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-string-parser': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 '@babel/types@7.24.7': @@ -5209,17 +5091,17 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@9.5.0)': + '@eslint-community/eslint-utils@4.4.0(eslint@9.6.0)': dependencies: - eslint: 9.5.0 + eslint: 9.6.0 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.10.1': {} + '@eslint-community/regexpp@4.11.0': {} - '@eslint/config-array@0.16.0': + '@eslint/config-array@0.17.0': dependencies: '@eslint/object-schema': 2.1.4 - debug: 4.3.5 + debug: 4.3.5(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -5227,7 +5109,7 @@ snapshots: '@eslint/eslintrc@3.1.0': dependencies: ajv: 6.12.6 - debug: 4.3.5 + debug: 4.3.5(supports-color@5.5.0) espree: 10.1.0 globals: 14.0.0 ignore: 5.3.1 @@ -5238,17 +5120,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.5.0': {} + '@eslint/js@9.6.0': {} '@eslint/object-schema@2.1.4': {} '@fastify/accept-negotiator@1.1.0': {} - '@fastify/ajv-compiler@3.5.0': + '@fastify/ajv-compiler@3.6.0': dependencies: - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - fast-uri: 2.3.0 + ajv: 8.16.0 + ajv-formats: 2.1.1(ajv@8.16.0) + fast-uri: 2.4.0 '@fastify/busboy@2.1.1': {} @@ -5259,16 +5141,16 @@ snapshots: '@fastify/deepmerge@1.3.0': {} - '@fastify/env@4.3.0': + '@fastify/env@4.4.0': dependencies: - env-schema: 5.2.1 + env-schema: 6.0.0 fastify-plugin: 4.5.1 '@fastify/error@3.4.1': {} '@fastify/fast-json-stringify-compiler@4.3.0': dependencies: - fast-json-stringify: 5.14.1 + fast-json-stringify: 5.16.1 '@fastify/merge-json-schemas@0.1.1': dependencies: @@ -5309,7 +5191,7 @@ snapshots: content-disposition: 0.5.4 fastify-plugin: 4.5.1 fastq: 1.17.1 - glob: 10.3.12 + glob: 10.4.2 '@fastify/websocket@10.0.1': dependencies: @@ -5596,14 +5478,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.18.0': optional: true - '@sea/core@file:sdk/lib/sea-core-1.0.0-rc.5.tgz': - dependencies: - rxjs: 7.8.1 - - '@sea/mod-type@file:sdk/lib/sea-mod-type-0.7.0.tgz(@sea/core@file:sdk/lib/sea-core-1.0.0-rc.5.tgz)': - dependencies: - '@sea/core': file:sdk/lib/sea-core-1.0.0-rc.5.tgz - '@sinclair/typebox@0.27.8': {} '@surma/rollup-plugin-off-main-thread@2.2.3': @@ -5613,55 +5487,55 @@ snapshots: magic-string: 0.25.9 string.prototype.matchall: 4.0.11 - '@swc/core-darwin-arm64@1.6.3': + '@swc/core-darwin-arm64@1.6.6': optional: true - '@swc/core-darwin-x64@1.6.3': + '@swc/core-darwin-x64@1.6.6': optional: true - '@swc/core-linux-arm-gnueabihf@1.6.3': + '@swc/core-linux-arm-gnueabihf@1.6.6': optional: true - '@swc/core-linux-arm64-gnu@1.6.3': + '@swc/core-linux-arm64-gnu@1.6.6': optional: true - '@swc/core-linux-arm64-musl@1.6.3': + '@swc/core-linux-arm64-musl@1.6.6': optional: true - '@swc/core-linux-x64-gnu@1.6.3': + '@swc/core-linux-x64-gnu@1.6.6': optional: true - '@swc/core-linux-x64-musl@1.6.3': + '@swc/core-linux-x64-musl@1.6.6': optional: true - '@swc/core-win32-arm64-msvc@1.6.3': + '@swc/core-win32-arm64-msvc@1.6.6': optional: true - '@swc/core-win32-ia32-msvc@1.6.3': + '@swc/core-win32-ia32-msvc@1.6.6': optional: true - '@swc/core-win32-x64-msvc@1.6.3': + '@swc/core-win32-x64-msvc@1.6.6': optional: true - '@swc/core@1.6.3': + '@swc/core@1.6.6': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.8 + '@swc/types': 0.1.9 optionalDependencies: - '@swc/core-darwin-arm64': 1.6.3 - '@swc/core-darwin-x64': 1.6.3 - '@swc/core-linux-arm-gnueabihf': 1.6.3 - '@swc/core-linux-arm64-gnu': 1.6.3 - '@swc/core-linux-arm64-musl': 1.6.3 - '@swc/core-linux-x64-gnu': 1.6.3 - '@swc/core-linux-x64-musl': 1.6.3 - '@swc/core-win32-arm64-msvc': 1.6.3 - '@swc/core-win32-ia32-msvc': 1.6.3 - '@swc/core-win32-x64-msvc': 1.6.3 + '@swc/core-darwin-arm64': 1.6.6 + '@swc/core-darwin-x64': 1.6.6 + '@swc/core-linux-arm-gnueabihf': 1.6.6 + '@swc/core-linux-arm64-gnu': 1.6.6 + '@swc/core-linux-arm64-musl': 1.6.6 + '@swc/core-linux-x64-gnu': 1.6.6 + '@swc/core-linux-x64-musl': 1.6.6 + '@swc/core-win32-arm64-msvc': 1.6.6 + '@swc/core-win32-ia32-msvc': 1.6.6 + '@swc/core-win32-x64-msvc': 1.6.6 '@swc/counter@0.1.3': {} - '@swc/types@0.1.8': + '@swc/types@0.1.9': dependencies: '@swc/counter': 0.1.3 @@ -5694,11 +5568,11 @@ snapshots: '@types/http-proxy@1.17.14': dependencies: - '@types/node': 20.14.7 + '@types/node': 20.14.9 '@types/json-schema@7.0.15': {} - '@types/node@20.14.7': + '@types/node@20.14.9': dependencies: undici-types: 5.26.5 @@ -5723,34 +5597,34 @@ snapshots: '@types/trusted-types@2.0.7': {} - '@typescript-eslint/eslint-plugin@8.0.0-alpha.34(@typescript-eslint/parser@8.0.0-alpha.34(eslint@9.5.0)(typescript@5.5.2))(eslint@9.5.0)(typescript@5.5.2)': + '@typescript-eslint/eslint-plugin@8.0.0-alpha.34(@typescript-eslint/parser@8.0.0-alpha.34(eslint@9.6.0)(typescript@5.5.3))(eslint@9.6.0)(typescript@5.5.3)': dependencies: - '@eslint-community/regexpp': 4.10.1 - '@typescript-eslint/parser': 8.0.0-alpha.34(eslint@9.5.0)(typescript@5.5.2) + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 8.0.0-alpha.34(eslint@9.6.0)(typescript@5.5.3) '@typescript-eslint/scope-manager': 8.0.0-alpha.34 - '@typescript-eslint/type-utils': 8.0.0-alpha.34(eslint@9.5.0)(typescript@5.5.2) - '@typescript-eslint/utils': 8.0.0-alpha.34(eslint@9.5.0)(typescript@5.5.2) + '@typescript-eslint/type-utils': 8.0.0-alpha.34(eslint@9.6.0)(typescript@5.5.3) + '@typescript-eslint/utils': 8.0.0-alpha.34(eslint@9.6.0)(typescript@5.5.3) '@typescript-eslint/visitor-keys': 8.0.0-alpha.34 - eslint: 9.5.0 + eslint: 9.6.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.5.2) + ts-api-utils: 1.3.0(typescript@5.5.3) optionalDependencies: - typescript: 5.5.2 + typescript: 5.5.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.0.0-alpha.34(eslint@9.5.0)(typescript@5.5.2)': + '@typescript-eslint/parser@8.0.0-alpha.34(eslint@9.6.0)(typescript@5.5.3)': dependencies: '@typescript-eslint/scope-manager': 8.0.0-alpha.34 '@typescript-eslint/types': 8.0.0-alpha.34 - '@typescript-eslint/typescript-estree': 8.0.0-alpha.34(typescript@5.5.2) + '@typescript-eslint/typescript-estree': 8.0.0-alpha.34(typescript@5.5.3) '@typescript-eslint/visitor-keys': 8.0.0-alpha.34 - debug: 4.3.5 - eslint: 9.5.0 + debug: 4.3.5(supports-color@5.5.0) + eslint: 9.6.0 optionalDependencies: - typescript: 5.5.2 + typescript: 5.5.3 transitivePeerDependencies: - supports-color @@ -5759,42 +5633,42 @@ snapshots: '@typescript-eslint/types': 8.0.0-alpha.34 '@typescript-eslint/visitor-keys': 8.0.0-alpha.34 - '@typescript-eslint/type-utils@8.0.0-alpha.34(eslint@9.5.0)(typescript@5.5.2)': + '@typescript-eslint/type-utils@8.0.0-alpha.34(eslint@9.6.0)(typescript@5.5.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.0.0-alpha.34(typescript@5.5.2) - '@typescript-eslint/utils': 8.0.0-alpha.34(eslint@9.5.0)(typescript@5.5.2) - debug: 4.3.5 - ts-api-utils: 1.3.0(typescript@5.5.2) + '@typescript-eslint/typescript-estree': 8.0.0-alpha.34(typescript@5.5.3) + '@typescript-eslint/utils': 8.0.0-alpha.34(eslint@9.6.0)(typescript@5.5.3) + debug: 4.3.5(supports-color@5.5.0) + ts-api-utils: 1.3.0(typescript@5.5.3) optionalDependencies: - typescript: 5.5.2 + typescript: 5.5.3 transitivePeerDependencies: - eslint - supports-color '@typescript-eslint/types@8.0.0-alpha.34': {} - '@typescript-eslint/typescript-estree@8.0.0-alpha.34(typescript@5.5.2)': + '@typescript-eslint/typescript-estree@8.0.0-alpha.34(typescript@5.5.3)': dependencies: '@typescript-eslint/types': 8.0.0-alpha.34 '@typescript-eslint/visitor-keys': 8.0.0-alpha.34 - debug: 4.3.5 + debug: 4.3.5(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 - minimatch: 9.0.4 + minimatch: 9.0.5 semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.5.2) + ts-api-utils: 1.3.0(typescript@5.5.3) optionalDependencies: - typescript: 5.5.2 + typescript: 5.5.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.0.0-alpha.34(eslint@9.5.0)(typescript@5.5.2)': + '@typescript-eslint/utils@8.0.0-alpha.34(eslint@9.6.0)(typescript@5.5.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.5.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.6.0) '@typescript-eslint/scope-manager': 8.0.0-alpha.34 '@typescript-eslint/types': 8.0.0-alpha.34 - '@typescript-eslint/typescript-estree': 8.0.0-alpha.34(typescript@5.5.2) - eslint: 9.5.0 + '@typescript-eslint/typescript-estree': 8.0.0-alpha.34(typescript@5.5.3) + eslint: 9.6.0 transitivePeerDependencies: - supports-color - typescript @@ -5804,21 +5678,21 @@ snapshots: '@typescript-eslint/types': 8.0.0-alpha.34 eslint-visitor-keys: 3.4.3 - '@vitejs/plugin-react-swc@3.7.0(vite@5.3.1(@types/node@20.14.7)(terser@5.31.1))': + '@vitejs/plugin-react-swc@3.7.0(vite@5.3.2(@types/node@20.14.9)(terser@5.31.1))': dependencies: - '@swc/core': 1.6.3 - vite: 5.3.1(@types/node@20.14.7)(terser@5.31.1) + '@swc/core': 1.6.6 + vite: 5.3.2(@types/node@20.14.9)(terser@5.31.1) transitivePeerDependencies: - '@swc/helpers' - '@vitest/coverage-v8@2.0.0-beta.12(vitest@2.0.0-beta.12(@types/node@20.14.7)(happy-dom@14.12.3)(terser@5.31.1))': + '@vitest/coverage-v8@2.0.0-beta.12(vitest@2.0.0-beta.12(@types/node@20.14.9)(happy-dom@14.12.3)(terser@5.31.1))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.5 + debug: 4.3.5(supports-color@5.5.0) istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.4 + istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.1.7 magic-string: 0.30.10 magicast: 0.3.4 @@ -5826,7 +5700,7 @@ snapshots: std-env: 3.7.0 strip-literal: 2.1.0 test-exclude: 7.0.1 - vitest: 2.0.0-beta.12(@types/node@20.14.7)(happy-dom@14.12.3)(terser@5.31.1) + vitest: 2.0.0-beta.12(@types/node@20.14.9)(happy-dom@14.12.3)(terser@5.31.1) transitivePeerDependencies: - supports-color @@ -5866,7 +5740,7 @@ snapshots: https-proxy-agent: 5.0.1 node-fetch: 2.7.0 progress: 2.0.3 - semver: 7.6.0 + semver: 7.6.2 tar-fs: 2.1.1 yargs: 16.2.0 transitivePeerDependencies: @@ -5894,8 +5768,6 @@ snapshots: - encoding - supports-color - abbrev@1.1.1: {} - abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -5906,25 +5778,25 @@ snapshots: dependencies: acorn: 8.12.0 - acorn-walk@8.3.2: {} - - acorn@8.11.3: {} + acorn-walk@8.3.3: + dependencies: + acorn: 8.12.0 acorn@8.12.0: {} agent-base@6.0.2: dependencies: - debug: 4.3.5 + debug: 4.3.5(supports-color@5.5.0) transitivePeerDependencies: - supports-color - ajv-formats@2.1.1(ajv@8.12.0): + ajv-formats@2.1.1(ajv@8.16.0): optionalDependencies: - ajv: 8.12.0 + ajv: 8.16.0 - ajv-formats@3.0.1(ajv@8.12.0): + ajv-formats@3.0.1(ajv@8.16.0): optionalDependencies: - ajv: 8.12.0 + ajv: 8.16.0 ajv@6.12.6: dependencies: @@ -5933,13 +5805,6 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.12.0: - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - ajv@8.16.0: dependencies: fast-deep-equal: 3.1.3 @@ -5970,8 +5835,6 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 - archy@1.0.0: {} - arg@4.1.3: {} argparse@2.0.1: {} @@ -6008,14 +5871,10 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 - avvio@8.3.0: + avvio@8.3.2: dependencies: '@fastify/error': 3.4.1 - archy: 1.0.0 - debug: 4.3.5 fastq: 1.17.1 - transitivePeerDependencies: - - supports-color babel-plugin-macros@3.1.0: dependencies: @@ -6074,10 +5933,10 @@ snapshots: browserslist@4.23.1: dependencies: - caniuse-lite: 1.0.30001636 - electron-to-chromium: 1.4.807 + caniuse-lite: 1.0.30001639 + electron-to-chromium: 1.4.816 node-releases: 2.0.14 - update-browserslist-db: 1.0.16(browserslist@4.23.1) + update-browserslist-db: 1.1.0(browserslist@4.23.1) buffer-from@1.1.2: {} @@ -6109,7 +5968,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001636: {} + caniuse-lite@1.0.30001639: {} chai@5.1.1: dependencies: @@ -6155,7 +6014,7 @@ snapshots: cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 - string-width: 7.1.0 + string-width: 7.2.0 client-only@0.0.1: {} @@ -6279,17 +6138,15 @@ snapshots: dateformat@4.6.3: {} - dayjs@1.11.11: {} - - debug@4.3.4(supports-color@5.5.0): + debug@4.3.4: dependencies: ms: 2.1.2 - optionalDependencies: - supports-color: 5.5.0 - debug@4.3.5: + debug@4.3.5(supports-color@5.5.0): dependencies: ms: 2.1.2 + optionalDependencies: + supports-color: 5.5.0 decompress-response@6.0.0: dependencies: @@ -6360,7 +6217,7 @@ snapshots: dependencies: jake: 10.9.1 - electron-to-chromium@1.4.807: {} + electron-to-chromium@1.4.816: {} emoji-regex@10.3.0: {} @@ -6374,9 +6231,9 @@ snapshots: entities@4.5.0: {} - env-schema@5.2.1: + env-schema@6.0.0: dependencies: - ajv: 8.12.0 + ajv: 8.16.0 dotenv: 16.4.5 dotenv-expand: 10.0.0 @@ -6419,7 +6276,7 @@ snapshots: is-string: 1.0.7 is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.13.1 + object-inspect: 1.13.2 object-keys: 1.1.1 object.assign: 4.1.5 regexp.prototype.flags: 1.5.2 @@ -6491,13 +6348,13 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-plugin-react-hooks@5.1.0-rc-8971381549-20240625(eslint@9.5.0): + eslint-plugin-react-hooks@5.1.0-rc-8971381549-20240625(eslint@9.6.0): dependencies: - eslint: 9.5.0 + eslint: 9.6.0 - eslint-plugin-react-refresh@0.4.7(eslint@9.5.0): + eslint-plugin-react-refresh@0.4.7(eslint@9.6.0): dependencies: - eslint: 9.5.0 + eslint: 9.6.0 eslint-scope@8.0.1: dependencies: @@ -6508,20 +6365,20 @@ snapshots: eslint-visitor-keys@4.0.0: {} - eslint@9.5.0: + eslint@9.6.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.5.0) - '@eslint-community/regexpp': 4.10.1 - '@eslint/config-array': 0.16.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.6.0) + '@eslint-community/regexpp': 4.11.0 + '@eslint/config-array': 0.17.0 '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.5.0 + '@eslint/js': 9.6.0 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.3.0 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.5 + debug: 4.3.5(supports-color@5.5.0) escape-string-regexp: 4.0.0 eslint-scope: 8.0.1 eslint-visitor-keys: 4.0.0 @@ -6613,15 +6470,15 @@ snapshots: fast-json-stable-stringify@2.1.0: {} - fast-json-stringify@5.14.1: + fast-json-stringify@5.16.1: dependencies: '@fastify/merge-json-schemas': 0.1.1 - ajv: 8.12.0 - ajv-formats: 3.0.1(ajv@8.12.0) + ajv: 8.16.0 + ajv-formats: 3.0.1(ajv@8.16.0) fast-deep-equal: 3.1.3 - fast-uri: 2.3.0 + fast-uri: 2.4.0 json-schema-ref-resolver: 1.0.1 - rfdc: 1.3.1 + rfdc: 1.4.1 fast-levenshtein@2.0.6: {} @@ -6633,36 +6490,34 @@ snapshots: fast-safe-stringify@2.1.1: {} - fast-uri@2.3.0: {} + fast-uri@2.4.0: {} fastify-plugin@4.5.1: {} - fastify-type-provider-zod@2.0.0(fastify@4.28.0)(zod@3.23.8): + fastify-type-provider-zod@2.0.0(fastify@4.28.1)(zod@3.23.8): dependencies: - fastify: 4.28.0 + fastify: 4.28.1 zod: 3.23.8 zod-to-json-schema: 3.23.1(zod@3.23.8) - fastify@4.28.0: + fastify@4.28.1: dependencies: - '@fastify/ajv-compiler': 3.5.0 + '@fastify/ajv-compiler': 3.6.0 '@fastify/error': 3.4.1 '@fastify/fast-json-stringify-compiler': 4.3.0 abstract-logging: 2.0.1 - avvio: 8.3.0 + avvio: 8.3.2 fast-content-type-parse: 1.1.0 - fast-json-stringify: 5.14.1 - find-my-way: 8.1.0 + fast-json-stringify: 5.16.1 + find-my-way: 8.2.0 light-my-request: 5.13.0 pino: 9.2.0 process-warning: 3.0.0 proxy-addr: 2.0.7 - rfdc: 1.3.1 + rfdc: 1.4.1 secure-json-parse: 2.7.0 - semver: 7.6.0 + semver: 7.6.2 toad-cache: 3.7.0 - transitivePeerDependencies: - - supports-color fastq@1.17.1: dependencies: @@ -6680,11 +6535,11 @@ snapshots: dependencies: to-regex-range: 5.0.1 - find-my-way@8.1.0: + find-my-way@8.2.0: dependencies: fast-deep-equal: 3.1.3 fast-querystring: 1.1.2 - safe-regex2: 2.0.0 + safe-regex2: 3.1.0 find-root@1.1.0: {} @@ -6700,19 +6555,14 @@ snapshots: flatted@3.3.1: {} - follow-redirects@1.15.6(debug@4.3.4): + follow-redirects@1.15.6(debug@4.3.5): optionalDependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.5(supports-color@5.5.0) for-each@0.3.3: dependencies: is-callable: 1.2.7 - foreground-child@3.1.1: - dependencies: - cross-spawn: 7.0.3 - signal-exit: 4.1.0 - foreground-child@3.2.1: dependencies: cross-spawn: 7.0.3 @@ -6798,19 +6648,11 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.3.12: - dependencies: - foreground-child: 3.1.1 - jackspeak: 2.3.6 - minimatch: 9.0.4 - minipass: 7.0.4 - path-scurry: 1.10.2 - glob@10.4.2: dependencies: foreground-child: 3.2.1 jackspeak: 3.4.0 - minimatch: 9.0.4 + minimatch: 9.0.5 minipass: 7.1.2 package-json-from-dist: 1.0.0 path-scurry: 1.11.1 @@ -6828,7 +6670,7 @@ snapshots: globals@14.0.0: {} - globals@15.6.0: {} + globals@15.8.0: {} globalthis@1.0.4: dependencies: @@ -6905,18 +6747,18 @@ snapshots: http-proxy-middleware@3.0.0: dependencies: '@types/http-proxy': 1.17.14 - debug: 4.3.4(supports-color@5.5.0) - http-proxy: 1.18.1(debug@4.3.4) + debug: 4.3.5(supports-color@5.5.0) + http-proxy: 1.18.1(debug@4.3.5) is-glob: 4.0.3 is-plain-obj: 3.0.0 - micromatch: 4.0.5 + micromatch: 4.0.7 transitivePeerDependencies: - supports-color - http-proxy@1.18.1(debug@4.3.4): + http-proxy@1.18.1(debug@4.3.5): dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.6(debug@4.3.4) + follow-redirects: 1.15.6(debug@4.3.5) requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -6924,7 +6766,7 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.5 + debug: 4.3.5(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -6997,7 +6839,7 @@ snapshots: is-callable@1.2.7: {} - is-core-module@2.13.1: + is-core-module@2.14.0: dependencies: hasown: 2.0.2 @@ -7100,10 +6942,10 @@ snapshots: make-dir: 4.0.0 supports-color: 7.2.0 - istanbul-lib-source-maps@5.0.4: + istanbul-lib-source-maps@5.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.25 - debug: 4.3.5 + debug: 4.3.5(supports-color@5.5.0) istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color @@ -7113,12 +6955,6 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - jackspeak@2.3.6: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - jackspeak@3.4.0: dependencies: '@isaacs/cliui': 8.0.2 @@ -7197,10 +7033,10 @@ snapshots: dependencies: chalk: 5.3.0 commander: 12.1.0 - debug: 4.3.5 + debug: 4.3.5(supports-color@5.5.0) execa: 8.0.1 lilconfig: 3.1.2 - listr2: 8.2.2 + listr2: 8.2.3 micromatch: 4.0.7 pidtree: 0.6.0 string-argv: 0.3.2 @@ -7208,7 +7044,7 @@ snapshots: transitivePeerDependencies: - supports-color - listr2@8.2.2: + listr2@8.2.3: dependencies: cli-truncate: 4.0.0 colorette: 2.0.20 @@ -7245,18 +7081,12 @@ snapshots: dependencies: get-func-name: 2.0.2 - lru-cache@10.2.0: {} - - lru-cache@10.2.2: {} + lru-cache@10.3.0: {} lru-cache@5.1.1: dependencies: yallist: 3.1.1 - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - magic-string@0.25.9: dependencies: sourcemap-codec: 1.4.8 @@ -7281,11 +7111,6 @@ snapshots: merge2@1.4.1: {} - micromatch@4.0.5: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - micromatch@4.0.7: dependencies: braces: 3.0.3 @@ -7317,9 +7142,11 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimist@1.2.8: {} + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 - minipass@7.0.4: {} + minimist@1.2.8: {} minipass@7.1.2: {} @@ -7348,7 +7175,7 @@ snapshots: natural-compare@1.4.0: {} - node-abi@3.59.0: + node-abi@3.65.0: dependencies: semver: 7.6.2 @@ -7361,20 +7188,16 @@ snapshots: nodemon@3.1.4: dependencies: chokidar: 3.6.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.5(supports-color@5.5.0) ignore-by-default: 1.0.1 minimatch: 3.1.2 pstree.remy: 1.1.8 - semver: 7.6.0 + semver: 7.6.2 simple-update-notifier: 2.0.0 supports-color: 5.5.0 - touch: 3.1.0 + touch: 3.1.1 undefsafe: 2.0.5 - nopt@1.0.10: - dependencies: - abbrev: 1.1.1 - normalize-path@3.0.0: {} notistack@3.0.1(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): @@ -7392,7 +7215,7 @@ snapshots: object-assign@4.1.1: {} - object-inspect@1.13.1: {} + object-inspect@1.13.2: {} object-keys@1.1.1: {} @@ -7443,7 +7266,7 @@ snapshots: p-limit@5.0.0: dependencies: - yocto-queue: 1.0.0 + yocto-queue: 1.1.1 p-locate@5.0.0: dependencies: @@ -7472,14 +7295,9 @@ snapshots: path-parse@1.0.7: {} - path-scurry@1.10.2: - dependencies: - lru-cache: 10.2.0 - minipass: 7.0.4 - path-scurry@1.11.1: dependencies: - lru-cache: 10.2.2 + lru-cache: 10.3.0 minipass: 7.1.2 path-to-regexp@6.2.2: {} @@ -7500,11 +7318,6 @@ snapshots: pidtree@0.6.0: {} - pino-abstract-transport@1.1.0: - dependencies: - readable-stream: 4.5.2 - split2: 4.2.0 - pino-abstract-transport@1.2.0: dependencies: readable-stream: 4.5.2 @@ -7520,7 +7333,7 @@ snapshots: joycon: 3.1.1 minimist: 1.2.8 on-exit-leak-free: 2.1.2 - pino-abstract-transport: 1.1.0 + pino-abstract-transport: 1.2.0 pump: 3.0.0 readable-stream: 4.5.2 secure-json-parse: 2.7.0 @@ -7545,7 +7358,7 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss@8.4.38: + postcss@8.4.39: dependencies: nanoid: 3.3.7 picocolors: 1.0.1 @@ -7559,7 +7372,7 @@ snapshots: minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 1.0.2 - node-abi: 3.59.0 + node-abi: 3.65.0 pump: 3.0.0 rc: 1.2.8 simple-get: 4.0.1 @@ -7718,7 +7531,7 @@ snapshots: resolve@1.22.8: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.14.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -7727,12 +7540,10 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 - ret@0.2.2: {} + ret@0.4.3: {} reusify@1.0.4: {} - rfdc@1.3.1: {} - rfdc@1.4.1: {} rimraf@5.0.7: @@ -7794,9 +7605,9 @@ snapshots: es-errors: 1.3.0 is-regex: 1.1.4 - safe-regex2@2.0.0: + safe-regex2@3.1.0: dependencies: - ret: 0.2.2 + ret: 0.4.3 safe-stable-stringify@2.4.3: {} @@ -7808,10 +7619,6 @@ snapshots: semver@6.3.1: {} - semver@7.6.0: - dependencies: - lru-cache: 6.0.0 - semver@7.6.2: {} serialize-javascript@6.0.2: @@ -7851,7 +7658,7 @@ snapshots: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + object-inspect: 1.13.2 siginfo@2.0.0: {} @@ -7869,7 +7676,7 @@ snapshots: simple-update-notifier@2.0.0: dependencies: - semver: 7.6.0 + semver: 7.6.2 sirv@2.0.4: dependencies: @@ -7944,7 +7751,7 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string-width@7.1.0: + string-width@7.2.0: dependencies: emoji-regex: 10.3.0 get-east-asian-width: 1.2.0 @@ -8079,7 +7886,7 @@ snapshots: dependencies: '@istanbuljs/schema': 0.1.3 glob: 10.4.2 - minimatch: 9.0.4 + minimatch: 9.0.5 text-table@0.2.0: {} @@ -8105,9 +7912,7 @@ snapshots: totalist@3.0.1: {} - touch@3.1.0: - dependencies: - nopt: 1.0.10 + touch@3.1.1: {} tr46@0.0.3: {} @@ -8117,29 +7922,29 @@ snapshots: tree-kill@1.2.2: {} - ts-api-utils@1.3.0(typescript@5.5.2): + ts-api-utils@1.3.0(typescript@5.5.3): dependencies: - typescript: 5.5.2 + typescript: 5.5.3 - ts-node@10.9.2(@swc/core@1.6.3)(@types/node@20.14.7)(typescript@5.5.2): + ts-node@10.9.2(@swc/core@1.6.6)(@types/node@20.14.9)(typescript@5.5.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.14.7 - acorn: 8.11.3 - acorn-walk: 8.3.2 + '@types/node': 20.14.9 + acorn: 8.12.0 + acorn-walk: 8.3.3 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.5.2 + typescript: 5.5.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.6.3 + '@swc/core': 1.6.6 tslib@2.6.2: {} @@ -8185,18 +7990,18 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - typescript-eslint@8.0.0-alpha.34(eslint@9.5.0)(typescript@5.5.2): + typescript-eslint@8.0.0-alpha.34(eslint@9.6.0)(typescript@5.5.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.0.0-alpha.34(@typescript-eslint/parser@8.0.0-alpha.34(eslint@9.5.0)(typescript@5.5.2))(eslint@9.5.0)(typescript@5.5.2) - '@typescript-eslint/parser': 8.0.0-alpha.34(eslint@9.5.0)(typescript@5.5.2) - '@typescript-eslint/utils': 8.0.0-alpha.34(eslint@9.5.0)(typescript@5.5.2) + '@typescript-eslint/eslint-plugin': 8.0.0-alpha.34(@typescript-eslint/parser@8.0.0-alpha.34(eslint@9.6.0)(typescript@5.5.3))(eslint@9.6.0)(typescript@5.5.3) + '@typescript-eslint/parser': 8.0.0-alpha.34(eslint@9.6.0)(typescript@5.5.3) + '@typescript-eslint/utils': 8.0.0-alpha.34(eslint@9.6.0)(typescript@5.5.3) optionalDependencies: - typescript: 5.5.2 + typescript: 5.5.3 transitivePeerDependencies: - eslint - supports-color - typescript@5.5.2: {} + typescript@5.5.3: {} unbox-primitive@1.0.2: dependencies: @@ -8228,7 +8033,7 @@ snapshots: upath@1.2.0: {} - update-browserslist-db@1.0.16(browserslist@4.23.1): + update-browserslist-db@1.1.0(browserslist@4.23.1): dependencies: browserslist: 4.23.1 escalade: 3.1.2 @@ -8246,13 +8051,13 @@ snapshots: v8-compile-cache-lib@3.0.1: {} - vite-node@2.0.0-beta.12(@types/node@20.14.7)(terser@5.31.1): + vite-node@2.0.0-beta.12(@types/node@20.14.9)(terser@5.31.1): dependencies: cac: 6.7.14 - debug: 4.3.5 + debug: 4.3.5(supports-color@5.5.0) pathe: 1.1.2 picocolors: 1.0.1 - vite: 5.3.1(@types/node@20.14.7)(terser@5.31.1) + vite: 5.3.2(@types/node@20.14.9)(terser@5.31.1) transitivePeerDependencies: - '@types/node' - less @@ -8263,44 +8068,44 @@ snapshots: - supports-color - terser - vite-plugin-inspect@0.8.4(rollup@2.79.1)(vite@5.3.1(@types/node@20.14.7)(terser@5.31.1)): + vite-plugin-inspect@0.8.4(rollup@2.79.1)(vite@5.3.2(@types/node@20.14.9)(terser@5.31.1)): dependencies: '@antfu/utils': 0.7.7 '@rollup/pluginutils': 5.1.0(rollup@2.79.1) - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 error-stack-parser-es: 0.1.1 fs-extra: 11.2.0 open: 10.1.0 perfect-debounce: 1.0.0 picocolors: 1.0.0 sirv: 2.0.4 - vite: 5.3.1(@types/node@20.14.7)(terser@5.31.1) + vite: 5.3.2(@types/node@20.14.9)(terser@5.31.1) transitivePeerDependencies: - rollup - supports-color - vite-plugin-pwa@0.20.0(vite@5.3.1(@types/node@20.14.7)(terser@5.31.1))(workbox-build@7.1.1)(workbox-window@7.1.0): + vite-plugin-pwa@0.20.0(vite@5.3.2(@types/node@20.14.9)(terser@5.31.1))(workbox-build@7.1.1)(workbox-window@7.1.0): dependencies: - debug: 4.3.5 + debug: 4.3.5(supports-color@5.5.0) fast-glob: 3.3.2 pretty-bytes: 6.1.1 - vite: 5.3.1(@types/node@20.14.7)(terser@5.31.1) + vite: 5.3.2(@types/node@20.14.9)(terser@5.31.1) workbox-build: 7.1.1 workbox-window: 7.1.0 transitivePeerDependencies: - supports-color - vite@5.3.1(@types/node@20.14.7)(terser@5.31.1): + vite@5.3.2(@types/node@20.14.9)(terser@5.31.1): dependencies: esbuild: 0.21.5 - postcss: 8.4.38 + postcss: 8.4.39 rollup: 4.18.0 optionalDependencies: - '@types/node': 20.14.7 + '@types/node': 20.14.9 fsevents: 2.3.3 terser: 5.31.1 - vitest@2.0.0-beta.12(@types/node@20.14.7)(happy-dom@14.12.3)(terser@5.31.1): + vitest@2.0.0-beta.12(@types/node@20.14.9)(happy-dom@14.12.3)(terser@5.31.1): dependencies: '@ampproject/remapping': 2.3.0 '@vitest/expect': 2.0.0-beta.12 @@ -8309,7 +8114,7 @@ snapshots: '@vitest/spy': 2.0.0-beta.12 '@vitest/utils': 2.0.0-beta.12 chai: 5.1.1 - debug: 4.3.5 + debug: 4.3.5(supports-color@5.5.0) execa: 8.0.1 magic-string: 0.30.10 pathe: 1.1.2 @@ -8317,11 +8122,11 @@ snapshots: std-env: 3.7.0 tinybench: 2.8.0 tinypool: 1.0.0 - vite: 5.3.1(@types/node@20.14.7)(terser@5.31.1) - vite-node: 2.0.0-beta.12(@types/node@20.14.7)(terser@5.31.1) + vite: 5.3.2(@types/node@20.14.9)(terser@5.31.1) + vite-node: 2.0.0-beta.12(@types/node@20.14.9)(terser@5.31.1) why-is-node-running: 2.2.2 optionalDependencies: - '@types/node': 20.14.7 + '@types/node': 20.14.9 happy-dom: 14.12.3 transitivePeerDependencies: - less @@ -8506,7 +8311,7 @@ snapshots: wrap-ansi@9.0.0: dependencies: ansi-styles: 6.2.1 - string-width: 7.1.0 + string-width: 7.2.0 strip-ansi: 7.1.0 wrappy@1.0.2: {} @@ -8517,8 +8322,6 @@ snapshots: yallist@3.1.1: {} - yallist@4.0.0: {} - yaml@1.10.2: {} yaml@2.4.5: {} @@ -8551,7 +8354,7 @@ snapshots: yocto-queue@0.1.0: {} - yocto-queue@1.0.0: {} + yocto-queue@1.1.1: {} zod-to-json-schema@3.23.1(zod@3.23.8): dependencies: diff --git a/sdk/mods/median/commands/FightPuni.ts b/sdk/mods/median/commands/FightPuni.ts index f8785fa7..9df479aa 100644 --- a/sdk/mods/median/commands/FightPuni.ts +++ b/sdk/mods/median/commands/FightPuni.ts @@ -1,7 +1,6 @@ +import { scope } from '@/common/constants.json'; import { engine } from '@sea/core'; import type { Command, SEAModContext, SEAModExport, SEAModMetadata } from '@sea/mod-type'; - -import { scope } from '@/common/constants.json'; import Icon from './all_inclusive.svg?raw'; export const metadata = { diff --git a/sdk/mods/median/sign/SignBase.ts b/sdk/mods/median/sign/SignBase.ts index f35d47c5..7530f33a 100644 --- a/sdk/mods/median/sign/SignBase.ts +++ b/sdk/mods/median/sign/SignBase.ts @@ -1,22 +1,12 @@ import { LevelAction, NOOP } from '@sea/core'; -import type { LevelData, LevelMeta } from '@sea/mod-type'; +import type { LevelData } from '@sea/mod-type'; -export class SignBase { - get meta() { - return {} as LevelMeta; - } +export const signBase = { + next: () => LevelAction.AWARD, + logger: NOOP +}; - get name() { - return this.meta.name; - } - - data: LevelData = { - progress: 0, - remainingTimes: 0 - }; - - next() { - return LevelAction.AWARD; - } - logger = NOOP; -} +export const data: LevelData = { + remainingTimes: 0, + progress: 0 +}; diff --git a/sdk/mods/median/sign/daily.ts b/sdk/mods/median/sign/daily.ts index 09de4312..ff976b80 100644 --- a/sdk/mods/median/sign/daily.ts +++ b/sdk/mods/median/sign/daily.ts @@ -1,7 +1,6 @@ -import type { ILevelRunner } from '@sea/core'; import { LevelAction, socket } from '@sea/core'; -import type { LevelData, LevelMeta, Task, TaskRunner } from '@sea/mod-type'; -import { SignBase } from './SignBase'; +import { task } from '@sea/mod-type'; +import { data, signBase } from './SignBase'; const MULTI_QUERY = { 刻印抽奖次数: 16577, @@ -11,102 +10,83 @@ const MULTI_QUERY = { 许愿签到: 201345 } as const; -export const daily: Task[] = [ - class MarkDraw extends SignBase implements TaskRunner { - static readonly meta: LevelMeta = { - maxTimes: 1, - id: 'MarkDraw', - name: '刻印抽奖' - }; - - get meta(): LevelMeta { - return MarkDraw.meta; - } - - actions: Record) => Promise> = { - [LevelAction.AWARD]: async () => { - socket.sendByQueue(46301, [1, 0]); - } - }; - - async update(): Promise { - this.data.remainingTimes = this.meta.maxTimes - (await socket.multiValue(MULTI_QUERY.刻印抽奖次数))[0]; - } - }, - class WishBottle extends SignBase implements TaskRunner { - static readonly meta: LevelMeta = { - id: 'WishBottle', - maxTimes: 10, - name: '许愿' - }; - - maxTimes = 10; - - get meta(): LevelMeta { - return { ...WishBottle.meta, maxTimes: this.maxTimes }; - } - - actions: Record) => Promise> = { - [LevelAction.AWARD]: async () => { - await socket.sendByQueue(45801, [2, 1]); - } - }; - - async update(): Promise { - let times = (await socket.multiValue(MULTI_QUERY.登录时长))[0]; - times = - times + - Math.floor(SystemTimerManager.sysBJDate.getTime() / 1e3) - - MainManager.actorInfo.logintimeThisTime; - times = Math.floor(times / 60); - - let 可许愿次数 = 0; - const timesMap = new Map([ - [120, 10], - [90, 7], - [60, 5], - [30, 3], - [15, 2], - [5, 1], - [0, 0] - ]); - - for (const [time, count] of timesMap) { - if (times >= time) { - 可许愿次数 = count; - break; +export const daily = [ + task({ + meta: { maxTimes: 1, id: 'MarkDraw', name: '刻印抽奖' }, + runner(meta) { + return { + ...signBase, + data: { ...data }, + async update() { + this.data.remainingTimes = meta.maxTimes - (await socket.multiValue(MULTI_QUERY.刻印抽奖次数))[0]; + }, + actions: { + [LevelAction.AWARD]: async () => { + await socket.sendByQueue(46301, [1, 0]); + } } - } - - this.maxTimes = 可许愿次数; - this.data.remainingTimes = 可许愿次数 - (await socket.multiValue(MULTI_QUERY.已许愿次数))[0]; + }; } - }, - class WishSign extends SignBase implements TaskRunner { - static readonly meta: LevelMeta = { - id: 'WishSign', - maxTimes: 1, - name: '许愿签到' - }; - - get meta(): LevelMeta { - return WishSign.meta; + }), + task({ + meta: { id: 'WishBottle', maxTimes: 10, name: '许愿' }, + runner(meta) { + return { + ...signBase, + data: { ...data }, + async update() { + let times = (await socket.multiValue(MULTI_QUERY.登录时长))[0]; + times = + times + + Math.floor(SystemTimerManager.sysBJDate.getTime() / 1e3) - + MainManager.actorInfo.logintimeThisTime; + times = Math.floor(times / 60); + + let 可许愿次数 = 0; + const timesMap = new Map([ + [120, 10], + [90, 7], + [60, 5], + [30, 3], + [15, 2], + [5, 1], + [0, 0] + ]); + + for (const [time, count] of timesMap) { + if (times >= time) { + 可许愿次数 = count; + break; + } + } + + meta.maxTimes = 可许愿次数; + this.data.remainingTimes = 可许愿次数 - (await socket.multiValue(MULTI_QUERY.已许愿次数))[0]; + }, + actions: { + [LevelAction.AWARD]: async () => { + await socket.sendByQueue(45801, [2, 1]); + } + } + }; } - - data: LevelData = { - progress: 0, - remainingTimes: 0 - }; - - actions: Record) => Promise> = { - [LevelAction.AWARD]: async () => { - const day = (await socket.multiValue(MULTI_QUERY.许愿签到天数))[0]; - socket.sendByQueue(45801, [1, day + 1]); - } - }; - - async update(): Promise { - this.data.remainingTimes = this.meta.maxTimes - (await socket.multiValue(MULTI_QUERY.许愿签到))[0]; + }), + task({ + meta: { id: 'WishSign', maxTimes: 1, name: '许愿签到' }, + runner(meta) { + return { + ...signBase, + data: { ...data }, + async update() { + this.data.remainingTimes = meta.maxTimes - (await socket.multiValue(MULTI_QUERY.许愿签到))[0]; + }, + actions: { + [LevelAction.AWARD]: async () => { + const day = (await socket.multiValue(MULTI_QUERY.许愿签到天数))[0]; + await socket.sendByQueue(45801, [1, day + 1]); + } + } + }; } - } + }) ]; diff --git a/sdk/mods/median/sign/sign.ts b/sdk/mods/median/sign/sign.ts index 6a58cc0e..75fdea84 100644 --- a/sdk/mods/median/sign/sign.ts +++ b/sdk/mods/median/sign/sign.ts @@ -6,49 +6,15 @@ import { teamSign } from './team'; import { teamDispatch } from './team-dispatch'; import { vip } from './vip'; -const EXCHANGE_LIST = { - 不灭能量珠: '10', - 愤怒珠子: '9', - 战队加成遗忘药: '8', - 特防珠: '6', - 防御珠: '5', - 特攻珠: '4', - 攻击珠: '3' -}; - export const metadata = { id: 'sign', scope, version: '1.0.0', - - description: '日常签到', - configSchema: { - 'teamDispatch.ignorePets': { - name: '忽略精灵列表', - type: 'textInput', - description: '战队派遣将忽略列表中的精灵名称, 以逗号分隔', - default: '' - }, - 'teamSign.exchangeId': { - name: '战队兑换', - type: 'select', - description: '在战队商店中兑换的物品', - default: '10', - list: EXCHANGE_LIST - } - } + description: '日常签到' } satisfies SEAModMetadata; -export default async function Sign({ config, logger }: SEAModContext) { +export default async function Sign({ logger }: SEAModContext) { return { - tasks: [ - ...daily, - teamDispatch( - config['teamDispatch.ignorePets'].split(',').map((s) => s.trim()), - logger - ), - ...teamSign(Number(config['teamSign.exchangeId'])), - ...vip() - ] + tasks: [...daily, teamDispatch(logger), ...teamSign, ...vip] } satisfies SEAModExport; } diff --git a/sdk/mods/median/sign/team-dispatch.ts b/sdk/mods/median/sign/team-dispatch.ts index 6f0da752..d48feb50 100644 --- a/sdk/mods/median/sign/team-dispatch.ts +++ b/sdk/mods/median/sign/team-dispatch.ts @@ -5,10 +5,10 @@ import { SEAPetStore, socket, spet, - type ILevelRunner + type AnyFunction } from '@sea/core'; -import type { LevelData, LevelMeta, Task, TaskRunner } from '@sea/mod-type'; -import { SignBase } from './SignBase'; +import { task } from '@sea/mod-type'; +import { data, signBase } from './SignBase'; declare class MainManager { static actorInfo: { @@ -18,101 +18,108 @@ declare class MainManager { }; } -export const teamDispatch = (ignorePets: string[], logger: any) => { - return class TeamDispatch extends SignBase implements TaskRunner { - static readonly meta: LevelMeta = { +export const teamDispatch = (logger: AnyFunction) => + task({ + meta: { id: 'TeamDispatch', name: '战队派遣', maxTimes: 1 - }; + }, + configSchema: { + ignorePets: { + name: '忽略精灵列表', + type: 'textInput', + description: '战队派遣将忽略列表中的精灵名称, 以逗号分隔', + default: '' + } + }, + runner(meta, { ignorePets }) { + return { + next: signBase.next, + logger, + data: { ...data }, + actions: { + [LevelAction.AWARD]: async () => { + const hasDispatched: number[] = []; - maxTimes = 1; + await socket.sendByQueue(45809, [0]).catch(() => logger('没有可收取的派遣')); + await socket.sendByQueue(45807).then((r) => { + const bytes = new DataView(r!); + let offset = 12; + for (let i = 0; i < bytes.getUint32(8); i++) { + const id = bytes.getUint32(offset); + const timestamp = bytes.getUint32(offset + 24); + if (timestamp > 0) hasDispatched.push(id); + offset += 40; + } + }); - get meta(): LevelMeta { - return { ...TeamDispatch.meta, maxTimes: this.maxTimes }; - } + const ignorePetNames = new Set(ignorePets); + let reSelect = false; + for (let tid = 16; tid > 0; tid--) { + if (tid === 5) tid = 1; + if (hasDispatched.includes(tid)) continue; + const pets = await SEAPetStore.getBagPets(PetLocation.Bag); + if (!reSelect) { + // 清空背包 + for (const p of pets) { + await p.popFromBag(); + } + } + const data = await socket + .sendByQueue(45810, [tid]) + .then((v) => new DataView(v!)) + .catch((_) => undefined); + if (!data) continue; - actions: Record) => Promise> = { - [LevelAction.AWARD]: async () => { - const hasDispatched: number[] = []; + const a = data.getUint32(4); + const e: { + petIds: number[]; + cts: number[]; + levels: number[]; + } = { + petIds: [], + cts: [], + levels: [] + }; + for (let r = 0; r < a; r++) { + e.cts.push(data.getUint32(8 + r * 12)); + e.petIds.push(data.getUint32(12 + r * 12)); + e.levels.push(data.getUint32(16 + r * 12)); + } - await socket.sendByQueue(45809, [0]).catch(() => logger('没有可收取的派遣')); - await socket.sendByQueue(45807).then((r) => { - const bytes = new DataView(r!); - let offset = 12; - for (let i = 0; i < bytes.getUint32(8); i++) { - const id = bytes.getUint32(offset); - const timestamp = bytes.getUint32(offset + 24); - if (timestamp > 0) hasDispatched.push(id); - offset += 40; - } - }); + logger(`正在处理派遣任务: ${tid}`); + reSelect = e.petIds.some((v) => ignorePetNames.has(PetXMLInfo.getName(v))); - const ignorePetNames = new Set(ignorePets); - let reSelect = false; - for (let tid = 16; tid > 0; tid--) { - if (tid === 5) tid = 1; - if (hasDispatched.includes(tid)) continue; - const pets = await SEAPetStore.getBagPets(PetLocation.Bag); - if (!reSelect) { - // 清空背包 - for (const p of pets) { - await p.popFromBag(); - } - } - const data = await socket - .sendByQueue(45810, [tid]) - .then((v) => new DataView(v!)) - .catch((_) => undefined); - if (!data) continue; + let index = 0; + for (const pid of e.petIds) { + const petName = PetXMLInfo.getName(pid); + if (ignorePetNames.has(petName)) { + await spet(e.cts[index]).setLocation(SEAPetLocation.Bag); + logger(`取出非派遣精灵: ${petName}`); + } + index++; + } - const a = data.getUint32(4); - const e: { - petIds: number[]; - cts: number[]; - levels: number[]; - } = { - petIds: [], - cts: [], - levels: [] - }; - for (let r = 0; r < a; r++) { - e.cts.push(data.getUint32(8 + r * 12)); - e.petIds.push(data.getUint32(12 + r * 12)); - e.levels.push(data.getUint32(16 + r * 12)); - } - - logger(`正在处理派遣任务: ${tid}`); - reSelect = e.petIds.some((v) => ignorePetNames.has(PetXMLInfo.getName(v))); - - let index = 0; - for (const pid of e.petIds) { - const petName = PetXMLInfo.getName(pid); - if (ignorePetNames.has(petName)) { - await spet(e.cts[index]).setLocation(SEAPetLocation.Bag); - logger(`取出非派遣精灵: ${petName}`); + if (reSelect) { + tid++; + } else { + console.table(e.petIds.map((v) => PetXMLInfo.getName(v))); + socket.sendByQueue(45808, [tid, e.cts[0], e.cts[1], e.cts[2], e.cts[3], e.cts[4]]); + } } - index++; } + }, - if (reSelect) { - tid++; + async update() { + const { teamInfo } = MainManager.actorInfo; + if (teamInfo && teamInfo.id > 0) { + const times = await socket.sendByQueue(45807).then((r) => new DataView(r!).getUint32(0)); + this.data.remainingTimes = Number(12 - times === 0); } else { - console.table(e.petIds.map((v) => PetXMLInfo.getName(v))); - socket.sendByQueue(45808, [tid, e.cts[0], e.cts[1], e.cts[2], e.cts[3], e.cts[4]]); + this.data.remainingTimes = meta.maxTimes = 0; } } - } - }; - - async update(): Promise { - const { teamInfo } = MainManager.actorInfo; - if (teamInfo && teamInfo.id > 0) { - const times = await socket.sendByQueue(45807).then((r) => new DataView(r!).getUint32(0)); - this.data.remainingTimes = Number(12 - times === 0); - } else { - this.data.remainingTimes = this.maxTimes = 0; - } + }; } - } satisfies Task; -}; + }); diff --git a/sdk/mods/median/sign/team.ts b/sdk/mods/median/sign/team.ts index a4378a0e..a71dd1d2 100644 --- a/sdk/mods/median/sign/team.ts +++ b/sdk/mods/median/sign/team.ts @@ -1,6 +1,6 @@ -import { LevelAction, socket, type ILevelRunner } from '@sea/core'; -import type { LevelData, LevelMeta, Task, TaskRunner } from '@sea/mod-type'; -import { SignBase } from './SignBase'; +import { LevelAction, socket } from '@sea/core'; +import { task } from '@sea/mod-type'; +import { data, signBase } from './SignBase'; const MULTI_QUERY = { 资源生产次数: 12470, @@ -15,56 +15,61 @@ declare class MainManager { }; } -export const teamSign = (exchangeId: number) => - [ - class ProductResource extends SignBase implements TaskRunner { - static readonly meta: LevelMeta = { - id: 'ProductResource', - name: '生产资源', - maxTimes: 5 - }; +const EXCHANGE_LIST = { + 不灭能量珠: '10', + 愤怒珠子: '9', + 战队加成遗忘药: '8', + 特防珠: '6', + 防御珠: '5', + 特攻珠: '4', + 攻击珠: '3' +}; - maxTimes = 5; - - get meta(): LevelMeta { - return { ...ProductResource.meta, maxTimes: this.maxTimes }; - } - - actions: Record) => Promise> = { - [LevelAction.AWARD]: async () => { - await socket.sendByQueue(CommandID.RES_PRODUCTORBUY, [2, 0]); - } - }; - - async update(): Promise { +export const teamSign = [ + task({ + meta: { + id: 'ProductResource', + name: '生产资源', + maxTimes: 5 + }, + runner: (meta) => ({ + ...signBase, + data: { ...data }, + async update() { if (MainManager.actorInfo.teamInfo && MainManager.actorInfo.teamInfo.id > 0) { const times = (await socket.multiValue(MULTI_QUERY.资源生产次数))[0]; - this.data.remainingTimes = this.maxTimes - times; + this.data.remainingTimes = meta.maxTimes - times; } else { - this.data.remainingTimes = this.maxTimes = 0; + this.data.remainingTimes = meta.maxTimes = 0; } - } - }, - class ExchangeItem extends SignBase implements TaskRunner { - static readonly meta: LevelMeta = { - id: 'ExchangeItem', - name: '兑换道具', - maxTimes: 3 - }; - - maxTimes = 3; - - get meta(): LevelMeta { - return { ...ExchangeItem.meta, maxTimes: this.maxTimes }; - } - - actions: Record) => Promise> = { + }, + actions: { [LevelAction.AWARD]: async () => { - await socket.sendByQueue(CommandID.NEW_TEAM_EXCHANGE_ITEMS, [1, exchangeId]); + await socket.sendByQueue(CommandID.RES_PRODUCTORBUY, [2, 0]); } - }; + } + }) + }), - async update(): Promise { + task({ + meta: { + id: 'ExchangeItem', + name: '兑换道具', + maxTimes: 3 + }, + configSchema: { + exchangeId: { + name: '战队兑换', + type: 'select', + description: '在战队商店中兑换的物品', + default: '10', + list: EXCHANGE_LIST + } + }, + runner: (meta, options) => ({ + ...signBase, + data: { ...data }, + async update() { if (MainManager.actorInfo.teamInfo && MainManager.actorInfo.teamInfo.id > 0) { const times = (await socket.multiValue(MULTI_QUERY.道具兑换次数))[0]; const open = await socket.sendByQueue(CommandID.GET_TEAM_DEVICE_STATUS, [1, 2]).then((buf) => { @@ -73,8 +78,14 @@ export const teamSign = (exchangeId: number) => }); this.data.remainingTimes = open ? 3 - times : 0; } else { - this.data.remainingTimes = this.maxTimes = 0; + this.data.remainingTimes = meta.maxTimes = 0; + } + }, + actions: { + [LevelAction.AWARD]: async () => { + await socket.sendByQueue(CommandID.NEW_TEAM_EXCHANGE_ITEMS, [1, Number(options.exchangeId)]); } } - } - ] satisfies Task[]; + }) + }) +]; diff --git a/sdk/mods/median/sign/vip.ts b/sdk/mods/median/sign/vip.ts index 5d4287f1..c032a821 100644 --- a/sdk/mods/median/sign/vip.ts +++ b/sdk/mods/median/sign/vip.ts @@ -1,72 +1,68 @@ -import { LevelAction, socket, type ILevelRunner } from '@sea/core'; -import type { LevelData, LevelMeta, Task, TaskRunner } from '@sea/mod-type'; -import { SignBase } from './SignBase'; +import { LevelAction, socket } from '@sea/core'; +import { task } from '@sea/mod-type'; +import { data, signBase } from './SignBase'; -export const vip = () => - [ - class VipDailyBox extends SignBase implements TaskRunner { - static readonly meta: LevelMeta = { - id: 'VipDailyBox', - name: '领取vip每日箱子', - maxTimes: 1 - }; - - get meta(): LevelMeta { - return VipDailyBox.meta; - } - - actions: Record) => Promise> = { +export const vip = [ + task({ + meta: { + id: 'VipDailyBox', + name: '领取vip每日箱子', + maxTimes: 1 + }, + runner: () => ({ + ...signBase, + data: { ...data }, + async update() { + const times = (await socket.multiValue(11516))[0]; + this.data.remainingTimes = Number(!times); + }, + actions: { [LevelAction.AWARD]: async () => { await socket.sendByQueue(CommandID.VIP_BONUS_201409, [1]); } - }; - - async update(): Promise { - const times = (await socket.multiValue(11516))[0]; - this.data.remainingTimes = Number(!times); - } - }, - class VipWeeklyBox extends SignBase implements TaskRunner { - static readonly meta: LevelMeta = { - id: 'VipWeeklyBox', - name: '领取vip每周箱子', - maxTimes: 1 - }; - - get meta(): LevelMeta { - return VipWeeklyBox.meta; } + }) + }), - actions: Record) => Promise> = { + task({ + meta: { + id: 'VipWeeklyBox', + name: '领取vip每周箱子', + maxTimes: 1 + }, + runner: () => ({ + ...signBase, + data: { ...data }, + async update() { + const times = (await socket.multiValue(20021))[0]; + this.data.remainingTimes = Number(!times); + }, + actions: { [LevelAction.AWARD]: async () => { await socket.sendByQueue(CommandID.VIP_BONUS_201409, [2]); } - }; - - async update(): Promise { - const times = (await socket.multiValue(20021))[0]; - this.data.remainingTimes = Number(!times); - } - }, - class VipMonthlyBox extends SignBase implements TaskRunner { - static readonly meta: LevelMeta = { - id: 'VipMonthlyBox', - name: '领取vip每月箱子', - maxTimes: 1 - }; - get meta(): LevelMeta { - return VipMonthlyBox.meta; } + }) + }), - actions: Record) => Promise> = { + task({ + meta: { + id: 'VipMonthlyBox', + name: '领取vip每月箱子', + maxTimes: 1 + }, + runner: () => ({ + ...signBase, + data: { ...data }, + async update() { + const times = (await socket.multiValue(30005))[0]; + this.data.remainingTimes = Number(!times); + }, + actions: { [LevelAction.AWARD]: async () => { await socket.sendByQueue(CommandID.VIP_BONUS_201409, [3]); } - }; - - async update(): Promise { - const times = (await socket.multiValue(30005))[0]; - this.data.remainingTimes = Number(!times); } - } - ] satisfies Task[]; + }) + }) +]; diff --git a/sdk/package-lock.json b/sdk/package-lock.json index 17fea27f..92957be8 100644 --- a/sdk/package-lock.json +++ b/sdk/package-lock.json @@ -9,12 +9,11 @@ "version": "1.0.0", "license": "AGPL-3.0-or-later", "dependencies": { - "@types/node": "^20.11.0", "dayjs": "^1.11.10" }, "devDependencies": { "@sea/core": "file:lib/sea-core-1.0.0-rc.6.tgz", - "@sea/mod-type": "file:lib/sea-mod-type-0.7.0.tgz", + "@sea/mod-type": "file:lib/sea-mod-type-0.8.0.tgz", "superjson": "^2.2.1", "typescript": "^5.4.5", "vite": "^5.2.10" @@ -563,7 +562,7 @@ "node_modules/@sea/core": { "version": "1.0.0-rc.6", "resolved": "file:lib/sea-core-1.0.0-rc.6.tgz", - "integrity": "sha512-NPpBr1N9VzWW5DHl9/iUqPmMjVCSUiWVxr6s0NxxsTEEqToXI6K6khJfB3f1Uk7YBlg6Wt9hSL6mN9z84YN50A==", + "integrity": "sha512-KjO2RkRckOGnyFVIQtSDH+qnK5FIyS6QCE81he6ESUY+WRzaKA3cW+98586/MA+XzBVLchFH/96qsWMmAhWAHw==", "dev": true, "license": "MPL-2.0", "dependencies": { @@ -571,9 +570,9 @@ } }, "node_modules/@sea/mod-type": { - "version": "0.7.0", - "resolved": "file:lib/sea-mod-type-0.7.0.tgz", - "integrity": "sha512-BWvLgYWkFjzABOnChaLOSlFL43vVgYha4xqG9abjPMqrDm19Dl/M9DZfOCzKBnH68BLpKdc/G/1pCe1aGWaQig==", + "version": "0.8.0", + "resolved": "file:lib/sea-mod-type-0.8.0.tgz", + "integrity": "sha512-lscchVoboJUAy/equNDannxI8tZ4mAnmw82nr4vKDCO8B7rQ4tA76pdB/P0WQls3WgW30FDBVbxDOhxhKe1eAg==", "dev": true, "peerDependencies": { "@sea/core": "^1.0.0-rc" @@ -586,10 +585,13 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.0.tgz", - "integrity": "sha512-o9bjXmDNcF7GbM4CNQpmi+TutCgap/K3w1JyKgxAjqx41zp9qlIAVFi0IhCNsJcXolEqLWhbFbEeL0PvYm4pcQ==", + "version": "20.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", + "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "undici-types": "~5.26.4" } @@ -820,7 +822,10 @@ "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "license": "MIT" + "dev": true, + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/vite": { "version": "5.2.10", diff --git a/sdk/package.json b/sdk/package.json index a42dfb8a..bfe010fb 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -13,13 +13,12 @@ }, "devDependencies": { "@sea/core": "file:lib/sea-core-1.0.0-rc.6.tgz", - "@sea/mod-type": "file:lib/sea-mod-type-0.7.0.tgz", + "@sea/mod-type": "file:lib/sea-mod-type-0.8.0.tgz", "superjson": "^2.2.1", "typescript": "^5.4.5", "vite": "^5.2.10" }, "dependencies": { - "@types/node": "^20.11.0", "dayjs": "^1.11.10" }, "engines": { diff --git a/sdk/tsconfig.json b/sdk/tsconfig.json index b490171f..efa29327 100644 --- a/sdk/tsconfig.json +++ b/sdk/tsconfig.json @@ -11,7 +11,7 @@ "skipLibCheck": true, "noEmit": true, "strict": true, - "lib": ["esnext", "dom"], + "lib": ["ESNext", "DOM"], "types": ["vite/client", "@sea/core/types/seerh5", "@sea/core/types/egret"], "paths": { "@/*": ["./mods/*"] diff --git a/tsconfig.common.json b/tsconfig.common.json new file mode 100644 index 00000000..ea08e5e9 --- /dev/null +++ b/tsconfig.common.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "ES2022", + "strict": true, + "noImplicitAny": true, + "noImplicitThis": true, + "verbatimModuleSyntax": true, + "forceConsistentCasingInFileNames": true, + "noEmitOnError": true, + "composite": true, + "incremental": true, + "skipLibCheck": true + } +} diff --git a/tsconfig.json b/tsconfig.json index 82ccecac..5376c263 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,27 +1,18 @@ { - "compilerOptions": { - "target": "es2022", - "strict": true, - "noImplicitAny": true, - "noImplicitThis": true, - "skipLibCheck": true, - "verbatimModuleSyntax": true, - "forceConsistentCasingInFileNames": true, - "lib": ["esnext", "dom"] - }, - "include": [], + "extends": "./tsconfig.common.json", + "files": [], "references": [ { - "path": "packages/server/tsconfig.json" + "path": "./packages/core/tsconfig.json" }, { - "path": "packages/launcher/tsconfig.json" + "path": "./packages/server/tsconfig.json" }, { - "path": "packages/core/tsconfig.json" + "path": "./packages/launcher/tsconfig.json" }, { - "path": "packages/mod-type/tsconfig.json" + "path": "./packages/mod-type/tsconfig.json" } ] }