├── src ├── vite-env.d.ts ├── game │ ├── Wall.ts │ ├── Floor.ts │ ├── index.ts │ ├── tests │ │ ├── map.spec.ts │ │ ├── cargo.spec.ts │ │ └── game.spec.ts │ ├── collisionDetection.ts │ ├── position.ts │ ├── player.ts │ ├── map.ts │ ├── game.ts │ ├── placePoint.ts │ ├── move.ts │ ├── cargo.ts │ └── gameData.ts ├── assets │ ├── wall.png │ ├── cargo.png │ ├── empty.png │ ├── floor.png │ ├── keeper.png │ ├── target.png │ ├── cargo_on_target.png │ ├── keeper_on_target.png │ └── vue.svg ├── utils │ └── id.ts ├── style.css ├── main.ts ├── components │ ├── Wall.vue │ ├── Empty.vue │ ├── Floor.vue │ ├── mapEdit │ │ ├── Cargos.vue │ │ ├── PlacePoints.vue │ │ ├── EditElement.vue │ │ ├── Keeper.vue │ │ ├── Cargo.vue │ │ ├── PlacePoint.vue │ │ ├── MapDataDisplay.vue │ │ ├── EditElementView.vue │ │ └── MapBlock.vue │ ├── Cargos.vue │ ├── PlacePoints.vue │ ├── PlacePoint.vue │ ├── Cargo.vue │ ├── Map.vue │ └── Player.vue ├── composables │ ├── mapEdit │ │ ├── collectMapBlock.ts │ │ ├── editElement.ts │ │ ├── tests │ │ │ ├── cargo.spec.ts │ │ │ └── placePoint.spec.ts │ │ ├── tile.ts │ │ ├── keeper.ts │ │ ├── cargo.ts │ │ ├── placePoint.ts │ │ └── map.ts │ └── position.ts ├── App.vue ├── router │ └── index.ts └── view │ ├── Game.vue │ └── MapEdit.vue ├── .vscode └── extensions.json ├── postcss.config.js ├── README.md ├── vite.config.ts ├── tailwind.config.js ├── tsconfig.node.json ├── .gitignore ├── index.html ├── package.json ├── tsconfig.json ├── public └── vite.svg └── pnpm-lock.yaml /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /src/game/Wall.ts: -------------------------------------------------------------------------------- 1 | export class Wall { 2 | public name: string = "Wall"; 3 | } 4 | -------------------------------------------------------------------------------- /src/game/Floor.ts: -------------------------------------------------------------------------------- 1 | export class Floor { 2 | public name: string = "Floor"; 3 | } 4 | -------------------------------------------------------------------------------- /src/assets/wall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuixiaorui/sokoban-vue3/HEAD/src/assets/wall.png -------------------------------------------------------------------------------- /src/utils/id.ts: -------------------------------------------------------------------------------- 1 | let id = 0; 2 | 3 | export function generateId() { 4 | return id++; 5 | } 6 | -------------------------------------------------------------------------------- /src/assets/cargo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuixiaorui/sokoban-vue3/HEAD/src/assets/cargo.png -------------------------------------------------------------------------------- /src/assets/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuixiaorui/sokoban-vue3/HEAD/src/assets/empty.png -------------------------------------------------------------------------------- /src/assets/floor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuixiaorui/sokoban-vue3/HEAD/src/assets/floor.png -------------------------------------------------------------------------------- /src/assets/keeper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuixiaorui/sokoban-vue3/HEAD/src/assets/keeper.png -------------------------------------------------------------------------------- /src/assets/target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuixiaorui/sokoban-vue3/HEAD/src/assets/target.png -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] 3 | } 4 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /src/assets/cargo_on_target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuixiaorui/sokoban-vue3/HEAD/src/assets/cargo_on_target.png -------------------------------------------------------------------------------- /src/assets/keeper_on_target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuixiaorui/sokoban-vue3/HEAD/src/assets/keeper_on_target.png -------------------------------------------------------------------------------- /src/style.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | 6 | body{ 7 | background: black; 8 | } 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # sokoban-vue3 2 | sokoban game by vue3 3 | 4 | 5 | 6 | 1. 代码大全 7 | 2. 代码整洁之道 8 | 3. 重构 9 | 10 | 11 | ## 功能 12 | 13 | -[ ] 撤回 14 | 15 | -------------------------------------------------------------------------------- /src/game/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./game"; 2 | export * from "./player"; 3 | export * from "./map" 4 | export * from "./cargo" 5 | export * from "./placePoint" 6 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from "vue"; 2 | import "./style.css"; 3 | import App from "./App.vue"; 4 | import { router } from "./router"; 5 | 6 | createApp(App).use(router).mount("#app"); 7 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import vue from '@vitejs/plugin-vue' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [vue()], 7 | }) 8 | -------------------------------------------------------------------------------- /src/components/Wall.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | export default { 3 | content: [ 4 | "./index.html", 5 | "./src/**/*.{vue,js,ts,jsx,tsx}", 6 | ], 7 | theme: { 8 | extend: {}, 9 | }, 10 | plugins: [], 11 | } -------------------------------------------------------------------------------- /src/components/Empty.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/components/Floor.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "include": ["vite.config.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /src/components/mapEdit/Cargos.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /src/game/tests/map.spec.ts: -------------------------------------------------------------------------------- 1 | import { it, expect, describe } from "vitest"; 2 | import { createMap, getMap, setupMap } from "../map"; 3 | import { Floor } from "../Floor"; 4 | import { Wall } from "../Wall"; 5 | 6 | describe("Map", () => { 7 | it("should init map ", () => { 8 | setupMap(createMap([[1, 2]])); 9 | 10 | expect(getMap().data).toEqual([[new Wall(), new Floor()]]); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + Vue + TS 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/components/Cargos.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/composables/mapEdit/collectMapBlock.ts: -------------------------------------------------------------------------------- 1 | let isCollect = false; 2 | 3 | export function useCollectMapBlock() { 4 | function start() { 5 | isCollect = true; 6 | } 7 | 8 | function stop() { 9 | isCollect = false; 10 | } 11 | 12 | function collect(fn: () => void) { 13 | if (!isCollect) return; 14 | fn && fn(); 15 | } 16 | 17 | return { 18 | start, 19 | stop, 20 | collect, 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /src/components/mapEdit/PlacePoints.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/composables/mapEdit/editElement.ts: -------------------------------------------------------------------------------- 1 | import { ref } from "vue"; 2 | import { TileType } from "./tile"; 3 | 4 | export interface EditElement { 5 | title: string; 6 | type: TileType | "cargo" | "placePoint" | "keeper"; 7 | imgSrc: string 8 | } 9 | 10 | 11 | export const currentSelectedEditElement = ref(); 12 | 13 | export function setCurrentSelectedElement(element: EditElement) { 14 | currentSelectedEditElement.value = element; 15 | } 16 | -------------------------------------------------------------------------------- /src/assets/vue.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/PlacePoints.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/composables/mapEdit/tests/cargo.spec.ts: -------------------------------------------------------------------------------- 1 | import { it, expect, describe, beforeEach } from "vitest"; 2 | import { useCargo } from "../cargo"; 3 | 4 | describe("map edit cargo", () => { 5 | beforeEach(() => { 6 | const { reset } = useCargo(); 7 | 8 | reset(); 9 | }); 10 | it("should remove cargo", () => { 11 | const { removeCargo, addCargo, cargos } = useCargo(); 12 | 13 | const cargo = addCargo(1, 1); 14 | 15 | removeCargo(cargo); 16 | 17 | expect(cargos.length).toBe(0); 18 | }); 19 | }); 20 | -------------------------------------------------------------------------------- /src/game/collisionDetection.ts: -------------------------------------------------------------------------------- 1 | import { getCargoByPosition } from "./cargo"; 2 | import { getElementByPosition } from "./map"; 3 | import { type Position } from "./position"; 4 | 5 | export function collisionWall(position: Position) { 6 | const element = getElementByPosition(position); 7 | 8 | if (element.name === "Wall") { 9 | return true; 10 | } 11 | 12 | return false; 13 | } 14 | 15 | export function collisionCargo(position: Position) { 16 | const cargo = getCargoByPosition(position); 17 | 18 | return !!cargo; 19 | } 20 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 13 | 14 | 28 | -------------------------------------------------------------------------------- /src/router/index.ts: -------------------------------------------------------------------------------- 1 | import { createRouter, createWebHashHistory } from "vue-router"; 2 | import Game from "../view/Game.vue"; 3 | import MapEdit from "../view/MapEdit.vue"; 4 | 5 | export const router = createRouter({ 6 | history: createWebHashHistory(), 7 | routes: [ 8 | { 9 | path: "/", 10 | redirect: "Game", 11 | }, 12 | 13 | { 14 | name: "Game", 15 | path: "/game", 16 | component: Game, 17 | }, 18 | { 19 | path: "/mapEdit", 20 | component: MapEdit, 21 | }, 22 | ], 23 | }); 24 | -------------------------------------------------------------------------------- /src/composables/position.ts: -------------------------------------------------------------------------------- 1 | import { computed } from "vue"; 2 | 3 | const STEP = 32; 4 | 5 | interface Position { 6 | x: number; 7 | y: number; 8 | } 9 | 10 | export function usePosition(position: Position) { 11 | const top = computed(() => { 12 | return position.y * STEP; 13 | }); 14 | 15 | const left = computed(() => { 16 | return position.x * STEP; 17 | }); 18 | 19 | const positionStyle = computed(() => { 20 | return [`top:${top.value}px`, `left:${left.value}px`]; 21 | }); 22 | 23 | return { 24 | positionStyle, 25 | }; 26 | } 27 | -------------------------------------------------------------------------------- /src/components/PlacePoint.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/composables/mapEdit/tests/placePoint.spec.ts: -------------------------------------------------------------------------------- 1 | import { it, expect, describe, beforeEach } from "vitest"; 2 | import { usePlacePoint } from "../placePoint"; 3 | 4 | describe("map edit placePoint", () => { 5 | beforeEach(() => { 6 | const { reset } = usePlacePoint(); 7 | 8 | reset(); 9 | }); 10 | 11 | it("should remove the place point", () => { 12 | const { removePlacePoint, addPlacePoint, placePoints } = usePlacePoint(); 13 | 14 | const placePoint = addPlacePoint(1, 1); 15 | 16 | removePlacePoint(placePoint); 17 | 18 | expect(placePoints.length).toBe(0); 19 | }); 20 | }); 21 | -------------------------------------------------------------------------------- /src/components/mapEdit/EditElement.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sokoban-vue3", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vue-tsc && vite build", 9 | "preview": "vite preview", 10 | "test": "vitest" 11 | }, 12 | "dependencies": { 13 | "vue": "^3.3.4", 14 | "vue-router": "^4.2.4" 15 | }, 16 | "devDependencies": { 17 | "@vitejs/plugin-vue": "^4.2.3", 18 | "autoprefixer": "^10.4.15", 19 | "postcss": "^8.4.28", 20 | "tailwindcss": "^3.3.3", 21 | "typescript": "^5.0.2", 22 | "vite": "^4.4.5", 23 | "vitest": "^0.34.2", 24 | "vue-tsc": "^1.8.5" 25 | } 26 | } -------------------------------------------------------------------------------- /src/game/position.ts: -------------------------------------------------------------------------------- 1 | export interface Position { 2 | x: number; 3 | y: number; 4 | } 5 | 6 | export function calcLeftPosition(position: Position) { 7 | return { 8 | x: position.x - 1, 9 | y: position.y, 10 | }; 11 | } 12 | 13 | export function calcRightPosition(position: Position) { 14 | return { 15 | x: position.x + 1, 16 | y: position.y, 17 | }; 18 | } 19 | 20 | export function calcUpPosition(position: Position) { 21 | return { 22 | x: position.x, 23 | y: position.y - 1, 24 | }; 25 | } 26 | export function calcDownPosition(position: Position) { 27 | return { 28 | x: position.x, 29 | y: position.y + 1, 30 | }; 31 | } 32 | -------------------------------------------------------------------------------- /src/components/Cargo.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/components/mapEdit/Keeper.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/components/mapEdit/Cargo.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/composables/mapEdit/tile.ts: -------------------------------------------------------------------------------- 1 | import floorImg from "../../assets/floor.png"; 2 | import WallImg from "../../assets/wall.png"; 3 | import { type EditElement } from "./editElement"; 4 | 5 | export enum TileType { 6 | wall = 1, 7 | floor = 2, 8 | } 9 | 10 | interface TileEditElement extends EditElement { 11 | type: TileType; 12 | } 13 | 14 | export const tileEditElements: TileEditElement[] = [ 15 | { 16 | imgSrc: floorImg, 17 | title: "地板", 18 | type: TileType.floor, 19 | }, 20 | { 21 | imgSrc: WallImg, 22 | title: "墙", 23 | type: TileType.wall, 24 | }, 25 | ]; 26 | 27 | export function isTile(element: EditElement): element is TileEditElement { 28 | return element.type === TileType.floor || element.type === TileType.wall; 29 | } 30 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "module": "ESNext", 6 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "bundler", 11 | "allowImportingTsExtensions": true, 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "noEmit": true, 15 | "jsx": "preserve", 16 | 17 | /* Linting */ 18 | "strict": true, 19 | "noUnusedLocals": true, 20 | "noUnusedParameters": true, 21 | "noFallthroughCasesInSwitch": true 22 | }, 23 | "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], 24 | "references": [{ "path": "./tsconfig.node.json" }] 25 | } 26 | -------------------------------------------------------------------------------- /src/composables/mapEdit/keeper.ts: -------------------------------------------------------------------------------- 1 | import { reactive, ref } from "vue"; 2 | import { type EditElement } from "./editElement"; 3 | import keeperImgSrc from "../../assets/keeper.png"; 4 | 5 | export interface Keeper { 6 | x: number; 7 | y: number; 8 | } 9 | 10 | export const keeperEditElement: EditElement = { 11 | title: "玩家", 12 | type: "keeper", 13 | imgSrc: keeperImgSrc, 14 | }; 15 | 16 | const isShowKeeper = ref(false); 17 | const keeper = reactive({ 18 | x: 0, 19 | y: 0, 20 | }); 21 | 22 | export function useKeeper() { 23 | function showKeeper() { 24 | isShowKeeper.value = true; 25 | } 26 | 27 | function hideKeeper() { 28 | isShowKeeper.value = false; 29 | } 30 | return { 31 | keeper, 32 | isShowKeeper, 33 | showKeeper, 34 | hideKeeper, 35 | }; 36 | } 37 | -------------------------------------------------------------------------------- /src/components/mapEdit/PlacePoint.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /src/view/Game.vue: -------------------------------------------------------------------------------- 1 | 12 | 31 | -------------------------------------------------------------------------------- /src/game/player.ts: -------------------------------------------------------------------------------- 1 | import { Direction, move } from "./move"; 2 | 3 | export interface Player { 4 | x: number; 5 | y: number; 6 | } 7 | 8 | let _player: Player; 9 | export function setupPlayer(player: Player) { 10 | _player = player; 11 | } 12 | 13 | export function createPlayer({ x, y }: { x: number; y: number }): Player { 14 | return { 15 | x, 16 | y, 17 | }; 18 | } 19 | 20 | export function moveLeft() { 21 | move(Direction.left); 22 | } 23 | 24 | export function moveRight() { 25 | move(Direction.right); 26 | } 27 | 28 | export function moveUp() { 29 | move(Direction.up); 30 | } 31 | 32 | export function moveDown() { 33 | move(Direction.down); 34 | } 35 | 36 | export function getPlayer() { 37 | return _player; 38 | } 39 | 40 | export function initPlayer(player: Player) { 41 | _player = player; 42 | } 43 | 44 | export function updatePlayer({ x, y }: { x: number; y: number }) { 45 | _player.x = x; 46 | _player.y = y; 47 | } 48 | -------------------------------------------------------------------------------- /src/components/Map.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 31 | 32 | 41 | -------------------------------------------------------------------------------- /src/game/tests/cargo.spec.ts: -------------------------------------------------------------------------------- 1 | import { it, expect, describe } from "vitest"; 2 | import { createPlacePoints, setupPlacePoints } from "../placePoint"; 3 | import { 4 | handleHitPlacePoint, 5 | createCargos, 6 | setupCargos, 7 | } from "../cargo"; 8 | 9 | describe("cargo", () => { 10 | it("should on target place point when hit place point", () => { 11 | setupPlacePoints(createPlacePoints([{ x: 1, y: 1 }])); 12 | const cargos = createCargos([{ x: 1, y: 1 }]); 13 | setupCargos(createCargos([{ x: 1, y: 1 }])); 14 | const cargo = cargos[0] 15 | handleHitPlacePoint(cargo); 16 | 17 | expect(cargo.onTargetPoint).toBeTruthy(); 18 | }); 19 | 20 | it("should reset on target point statue", () => { 21 | setupPlacePoints(createPlacePoints([{ x: 1, y: 1 }])); 22 | const cargos = createCargos([{ x: 1, y: 1 }]); 23 | setupCargos(createCargos([{ x: 1, y: 1 }])); 24 | 25 | const cargo = cargos[0] 26 | handleHitPlacePoint(cargo); 27 | cargo.x += 1; 28 | handleHitPlacePoint(cargo); 29 | 30 | expect(cargo.onTargetPoint).toBeFalsy(); 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /src/game/map.ts: -------------------------------------------------------------------------------- 1 | import { Floor } from "./Floor"; 2 | import { Wall } from "./Wall"; 3 | import { type Position } from "./position"; 4 | 5 | export type Element = Floor | Wall; 6 | 7 | export interface Map { 8 | data: Element[][]; 9 | } 10 | 11 | let _map: Map; 12 | export function setupMap(map: Map) { 13 | _map = map; 14 | } 15 | 16 | export function createMap(rawMap: number[][]): Map { 17 | return { 18 | data: convertRawMap(rawMap), 19 | }; 20 | } 21 | 22 | export function getMap() { 23 | return _map; 24 | } 25 | export function updateMap(rawMap: number[][]) { _map.data = convertRawMap(rawMap); 26 | } export function getElementByPosition(position: Position) { 27 | return _map.data[position.y][position.x]; 28 | } 29 | 30 | // 0. 空白 31 | // 1. 墙 32 | // 2. 地板 33 | function convertRawMap(rawMap: number[][]) { 34 | const newMap: Element[][] = []; 35 | rawMap.forEach((row, i) => { 36 | newMap[i] = []; 37 | row.forEach((col, j) => { 38 | if (col === 1) { 39 | newMap[i][j] = new Wall(); 40 | } else if (col === 2) { 41 | newMap[i][j] = new Floor(); 42 | } 43 | }); }); 44 | 45 | return newMap; 46 | } 47 | -------------------------------------------------------------------------------- /src/components/mapEdit/MapDataDisplay.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /src/composables/mapEdit/cargo.ts: -------------------------------------------------------------------------------- 1 | import { reactive } from "vue"; 2 | import { generateId } from "../../utils/id"; 3 | import { type EditElement } from "./editElement"; 4 | import cargoSrc from "../../assets/cargo.png"; 5 | 6 | export interface Cargo { 7 | id: number; 8 | x: number; 9 | y: number; 10 | } 11 | 12 | export const cargoEditElement: EditElement = { 13 | type: "cargo", 14 | title: "箱子", 15 | imgSrc: cargoSrc, 16 | }; 17 | 18 | const cargos = reactive([]); 19 | 20 | export function useCargo() { 21 | function createCargo(x: number, y: number) { 22 | return { 23 | x, 24 | y, 25 | id: generateId(), 26 | }; 27 | } 28 | 29 | function addCargo(x: number, y: number) { 30 | const cargo = createCargo(x, y); 31 | cargos.push(cargo); 32 | return cargo; 33 | } 34 | 35 | function removeCargo(cargo: Cargo) { 36 | 37 | const cargoIndex = cargos.findIndex((c) => c.id === cargo.id); 38 | 39 | if (cargoIndex !== -1) cargos.splice(cargoIndex, 1); 40 | } 41 | 42 | function reset () { 43 | cargos.length = 0 44 | } 45 | 46 | return { 47 | cargos, 48 | reset, 49 | addCargo, 50 | removeCargo, 51 | }; 52 | } 53 | -------------------------------------------------------------------------------- /src/components/Player.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 56 | -------------------------------------------------------------------------------- /src/composables/mapEdit/placePoint.ts: -------------------------------------------------------------------------------- 1 | import { reactive } from "vue"; 2 | import { generateId } from "../../utils/id"; 3 | import { type EditElement } from "./editElement"; 4 | import placePointImgSrc from "../../assets/target.png"; 5 | 6 | export interface PlacePoint { 7 | x: number; 8 | y: number; 9 | id: number; 10 | } 11 | 12 | export const placePointEditElement: EditElement = { 13 | type: "placePoint", 14 | title: "放置点", 15 | imgSrc: placePointImgSrc, 16 | }; 17 | 18 | const placePoints = reactive([]); 19 | 20 | export function usePlacePoint() { 21 | function createPlacePoint(x: number, y: number) { 22 | return { 23 | x, 24 | y, 25 | id: generateId(), 26 | }; 27 | } 28 | function addPlacePoint(x: number, y: number) { 29 | const placePoint = createPlacePoint(x, y); 30 | placePoints.push(placePoint); 31 | 32 | return placePoint; 33 | } 34 | 35 | function removePlacePoint(placePoint: PlacePoint) { 36 | const index = placePoints.findIndex((p) => p.id === placePoint.id); 37 | 38 | if (index !== -1) placePoints.splice(index, 1); 39 | } 40 | 41 | function reset() { 42 | placePoints.length = 0; 43 | } 44 | 45 | return { 46 | reset, 47 | removePlacePoint, 48 | addPlacePoint, 49 | placePoints, 50 | }; 51 | } 52 | -------------------------------------------------------------------------------- /src/game/game.ts: -------------------------------------------------------------------------------- 1 | import { isAllCargoOnTarget, updateCargos } from "./cargo"; 2 | import { updateMap } from "./map"; 3 | import { updatePlacePoints } from "./placePoint"; 4 | import { updatePlayer } from "./player"; 5 | import { gameDatas } from "./gameData"; 6 | 7 | export interface Game { 8 | currentLevel: number; 9 | isWin: boolean; 10 | } 11 | 12 | let _game: Game; 13 | export function setupGame(game: Game) { 14 | _game = game; 15 | } 16 | 17 | export function createGame(config: { level: number }): Game { 18 | return { 19 | currentLevel: config.level, 20 | isWin: false, 21 | }; 22 | } 23 | 24 | export function getGame() { 25 | return _game; 26 | } 27 | 28 | export function startGame() { 29 | updateGame(); 30 | } 31 | 32 | export function startNextLevel() { 33 | _game.currentLevel += 1; 34 | resetGame(); 35 | updateGame(); 36 | } 37 | 38 | function resetGame() { 39 | _game.isWin = false; 40 | } 41 | 42 | function updateGame() { 43 | const { player, map, cargos, placePoints } = 44 | gameDatas[_game.currentLevel - 1]; 45 | 46 | // playerConfig 47 | // 上面的这些数据 都是 config 48 | updatePlayer(player); 49 | updateMap(map); 50 | updateCargos(cargos); 51 | updatePlacePoints(placePoints); 52 | } 53 | 54 | export function judgeGameWin() { 55 | _game.isWin = isAllCargoOnTarget(); 56 | } 57 | -------------------------------------------------------------------------------- /src/game/placePoint.ts: -------------------------------------------------------------------------------- 1 | import { generateId } from "../utils/id"; 2 | import { Position } from "./position"; 3 | 4 | export interface PlacePoint { 5 | x: number; 6 | y: number; 7 | id: number; 8 | } 9 | 10 | let _placePoints: PlacePoint[] = [] 11 | 12 | export function setupPlacePoints(placePoint: PlacePoint[]) { 13 | _placePoints = placePoint; 14 | } 15 | 16 | export function createPlacePoints( 17 | config: { x: number; y: number }[] 18 | ): PlacePoint[] { 19 | return config.map(({ x, y }) => { 20 | return createPlacePoint(x, y); 21 | }); 22 | } 23 | 24 | function createPlacePoint(x: number, y: number): PlacePoint { 25 | return { 26 | x, 27 | y, 28 | id: generateId(), 29 | }; 30 | } 31 | 32 | export function updatePlacePoints(rawPlacePoints: { x: number; y: number }[]) { 33 | cleanAllPlacePoints(); 34 | 35 | // add new placePoint 36 | rawPlacePoints.forEach(({ x, y }) => { 37 | _placePoints.push(createPlacePoint(x, y)); 38 | }); 39 | } 40 | 41 | export function getPointByPosition(position: Position) { 42 | return _placePoints.find((point) => { 43 | return point.x === position.x && point.y === position.y; 44 | }); 45 | } 46 | 47 | function cleanAllPlacePoints() { 48 | _placePoints.length = 0; 49 | } 50 | 51 | export function getPlacePoints() { 52 | return _placePoints; 53 | } 54 | -------------------------------------------------------------------------------- /src/components/mapEdit/EditElementView.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/game/move.ts: -------------------------------------------------------------------------------- 1 | import { getCargoByPosition, handleHitPlacePoint } from "./cargo"; 2 | import { judgeGameWin } from "./game"; 3 | import { getPlayer } from "./player"; 4 | import { collisionCargo, collisionWall } from "./collisionDetection"; 5 | import { 6 | Position, 7 | calcDownPosition, 8 | calcLeftPosition, 9 | calcRightPosition, 10 | calcUpPosition, 11 | } from "./position"; 12 | 13 | export enum Direction { 14 | left = "left", 15 | right = "right", 16 | up = "up", 17 | down = "down", 18 | } 19 | 20 | const map: Record< 21 | string, 22 | { 23 | calcPositionFn: (position: Position) => Position; 24 | dirPropName: "x" | "y"; 25 | dir: -1 | 1; 26 | } 27 | > = { 28 | left: { calcPositionFn: calcLeftPosition, dirPropName: "x", dir: -1 }, 29 | right: { calcPositionFn: calcRightPosition, dirPropName: "x", dir: 1 }, 30 | up: { calcPositionFn: calcUpPosition, dirPropName: "y", dir: -1 }, 31 | down: { calcPositionFn: calcDownPosition, dirPropName: "y", dir: 1 }, 32 | }; 33 | 34 | export function move(direction: Direction) { 35 | // 1. 箱子推到放置点上 36 | // 2. 箱子检测是不是碰到了箱子 37 | const player = getPlayer(); 38 | const { calcPositionFn, dirPropName, dir } = map[direction]; 39 | if (collisionWall(calcPositionFn(player))) return; 40 | 41 | const cargo = getCargoByPosition(calcPositionFn(player)); 42 | 43 | if (cargo) { 44 | // 看看是不是墙 45 | if (collisionWall(calcPositionFn(cargo))) { 46 | return; 47 | } 48 | 49 | // 看看是不是箱子 50 | if (collisionCargo(calcPositionFn(cargo))) { 51 | return; 52 | } 53 | 54 | cargo[dirPropName] += 1 * dir; 55 | 56 | handleHitPlacePoint(cargo); 57 | 58 | judgeGameWin(); 59 | } 60 | 61 | player[dirPropName] += 1 * dir; 62 | } 63 | -------------------------------------------------------------------------------- /src/game/cargo.ts: -------------------------------------------------------------------------------- 1 | import { type PlacePoint, getPointByPosition } from "./placePoint"; 2 | import { type Position } from "./position"; 3 | import { generateId } from "../utils/id"; 4 | 5 | export interface Cargo { 6 | x: number; 7 | y: number; 8 | id: number; 9 | onTargetPoint?: PlacePoint | undefined; 10 | } 11 | 12 | let _cargos: Cargo[] = []; 13 | export function setupCargos(cargos: Cargo[]) { 14 | _cargos = cargos; 15 | } 16 | 17 | export function createCargos(rawCargos: { x: number; y: number }[]): Cargo[] { 18 | return rawCargos.map((rawCargo) => { 19 | return createCargo(rawCargo.x, rawCargo.y); 20 | }); 21 | } 22 | 23 | function createCargo(x: number, y: number): Cargo { 24 | return { 25 | x, 26 | y, 27 | id: generateId(), 28 | }; 29 | } 30 | 31 | export function updateCargos(rawCargos: { x: number; y: number }[]) { 32 | cleanAllCargos(); 33 | 34 | // add new cargos 35 | rawCargos.forEach((rawCargo) => { 36 | _cargos.push(createCargo(rawCargo.x, rawCargo.y)); 37 | }); 38 | } 39 | 40 | function cleanAllCargos() { 41 | _cargos.length = 0; 42 | } 43 | 44 | export function handleHitPlacePoint(cargo: Cargo) { 45 | reset(cargo); 46 | 47 | const point = getPointByPosition(cargo); 48 | 49 | if (point) { 50 | cargo.onTargetPoint = point; 51 | } 52 | } 53 | 54 | function reset(cargo: Cargo) { 55 | if (cargo.onTargetPoint) { 56 | cargo.onTargetPoint = undefined; 57 | } 58 | } 59 | 60 | export function getCargos() { 61 | return _cargos; 62 | } 63 | 64 | export function getCargoByPosition(position: Position) { 65 | return _cargos.find((c) => { 66 | return c.x === position.x && c.y === position.y; 67 | }); 68 | } 69 | 70 | export function isAllCargoOnTarget() { 71 | return _cargos.every((cargo) => { 72 | return !!cargo.onTargetPoint; 73 | }); 74 | } -------------------------------------------------------------------------------- /src/view/MapEdit.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /src/composables/mapEdit/map.ts: -------------------------------------------------------------------------------- 1 | import { reactive } from "vue"; 2 | import { TileType } from "./tile"; 3 | import { generateId } from "../../utils/id"; 4 | 5 | type MapType = TileType | undefined; 6 | export interface MapBlock { 7 | type: MapType; 8 | x: number; 9 | y: number; 10 | id: number; 11 | } 12 | 13 | interface Map { 14 | row: number; 15 | col: number; 16 | data: MapBlock[][]; 17 | } 18 | 19 | function createMapBlock(x: number, y: number, type?: MapType): MapBlock { 20 | return { 21 | type, 22 | x, 23 | y, 24 | id: generateId(), 25 | }; 26 | } 27 | 28 | const map = reactive({ 29 | row: 0, 30 | col: 0, 31 | data: [], 32 | }); 33 | 34 | export function useMap() { 35 | function updateMapCol(newCol: number) { 36 | const oldCol = map.col; 37 | const addColCount = newCol - oldCol; 38 | 39 | // 添加列 40 | if (addColCount > 0) { 41 | let col = map.data[0].length; 42 | 43 | for (let i = 0; i < map.data.length; i++) { 44 | for (let j = 0; j < addColCount; j++) { 45 | const block = createMapBlock(col + j, i); 46 | map.data[i].push(block); 47 | } 48 | } 49 | } else if (addColCount < 0) { 50 | // 删除 51 | for (let i = 0; i < map.data.length; i++) { 52 | for (let j = 0; j < Math.abs(addColCount); j++) { 53 | map.data[i].pop(); 54 | } 55 | } 56 | } 57 | 58 | map.col = newCol; 59 | } 60 | 61 | function updateMapRow(newRow: number) { 62 | const oldRow = map.row; 63 | const addRowCount = newRow - oldRow; 64 | 65 | // 添加行 66 | if (addRowCount > 0) { 67 | for (let i = 0; i < addRowCount; i++) { 68 | // 先创建一行 69 | const newRow: any = []; 70 | map.data.push(newRow); 71 | 72 | // 在把新的行填满 73 | let col = map.data[i].length; 74 | 75 | for (let j = 0; j < col; j++) { 76 | const block = createMapBlock(j, map.data.length - 1); 77 | newRow.push(block); 78 | } 79 | } 80 | } else if (addRowCount < 0) { 81 | // 删除 82 | for (let i = 0; i < Math.abs(addRowCount); i++) { 83 | // 删除最后一行 84 | map.data.pop(); 85 | } 86 | } 87 | 88 | map.row = newRow; 89 | } 90 | 91 | function initMap() { 92 | for (let i = 0; i < map.row; i++) { 93 | map.data[i] = []; 94 | for (let j = 0; j < map.col; j++) { 95 | const block = createMapBlock(j, i); 96 | map.data[i].push(block); 97 | } 98 | } 99 | } 100 | 101 | return { 102 | map, 103 | initMap, 104 | updateMapCol, 105 | updateMapRow, 106 | }; 107 | } 108 | -------------------------------------------------------------------------------- /src/components/mapEdit/MapBlock.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /src/game/gameData.ts: -------------------------------------------------------------------------------- 1 | export interface GameData { 2 | name?: string; 3 | map: number[][]; 4 | player: { 5 | x: number; 6 | y: number; 7 | }; 8 | cargos: { x: number; y: number }[]; 9 | placePoints: { x: number; y: number }[]; 10 | } 11 | 12 | export const gameDatas: GameData[] = [ 13 | { 14 | map: [ 15 | [1, 1, 1, 1, 1, 1, 1, 1], 16 | [1, 2, 2, 2, 2, 2, 2, 1], 17 | [1, 2, 2, 2, 2, 2, 2, 1], 18 | [1, 1, 2, 2, 2, 2, 2, 1], 19 | [1, 2, 2, 2, 2, 2, 2, 1], 20 | [1, 2, 2, 2, 2, 2, 2, 1], 21 | [1, 2, 2, 2, 2, 2, 2, 1], 22 | [1, 1, 1, 1, 1, 1, 1, 1], 23 | ], 24 | player: { 25 | x: 2, 26 | y: 3, 27 | }, 28 | cargos: [ 29 | { 30 | x: 4, 31 | y: 3, 32 | }, 33 | ], 34 | placePoints: [ 35 | { 36 | x: 4, 37 | y: 6, 38 | }, 39 | ], 40 | }, 41 | { 42 | map: [ 43 | [1, 1, 1, 1, 1, 1, 1, 1], 44 | [1, 2, 2, 2, 2, 2, 2, 1], 45 | [1, 2, 2, 2, 2, 2, 2, 1], 46 | [1, 2, 2, 2, 2, 2, 2, 1], 47 | [1, 2, 2, 2, 2, 2, 2, 1], 48 | [1, 2, 2, 2, 2, 2, 2, 1], 49 | [1, 2, 2, 2, 2, 2, 2, 1], 50 | [1, 1, 1, 1, 1, 1, 1, 1], 51 | ], 52 | player: { 53 | x: 1, 54 | y: 3, 55 | }, 56 | cargos: [ 57 | { 58 | x: 3, 59 | y: 3, 60 | }, 61 | { 62 | x: 3, 63 | y: 2, 64 | }, 65 | { 66 | x: 5, 67 | y: 2, 68 | }, 69 | ], 70 | placePoints: [ 71 | { 72 | x: 1, 73 | y: 6, 74 | }, 75 | { 76 | x: 2, 77 | y: 6, 78 | }, 79 | { 80 | x: 3, 81 | y: 6, 82 | }, 83 | ], 84 | }, 85 | { 86 | map: [ 87 | [1, 1, 1, 1, 1, 1, 1, 1], 88 | [1, 2, 2, 2, 2, 2, 2, 1], 89 | [1, 2, 2, 2, 2, 2, 2, 1], 90 | [1, 2, 2, 2, 2, 2, 2, 1], 91 | [1, 2, 2, 2, 2, 2, 2, 1], 92 | [1, 2, 2, 2, 2, 2, 2, 1], 93 | [1, 2, 2, 2, 2, 2, 2, 1], 94 | [1, 1, 1, 1, 1, 1, 1, 1], 95 | ], 96 | player: { 97 | x: 4, 98 | y: 3, 99 | }, 100 | cargos: [ 101 | { 102 | x: 3, 103 | y: 4, 104 | }, 105 | { 106 | x: 3, 107 | y: 3, 108 | }, 109 | { 110 | x: 2, 111 | y: 3, 112 | }, 113 | ], 114 | placePoints: [ 115 | { 116 | x: 3, 117 | y: 6, 118 | }, 119 | { 120 | x: 4, 121 | y: 6, 122 | }, 123 | { 124 | x: 5, 125 | y: 6, 126 | }, 127 | ], 128 | }, 129 | { 130 | name: "关卡一", 131 | map: [ 132 | [1, 1, 1, 1, 1, 1, 1, 0], 133 | [1, 1, 1, 2, 2, 2, 1, 0], 134 | [1, 2, 2, 2, 2, 2, 1, 0], 135 | [1, 1, 1, 2, 2, 2, 1, 0], 136 | [1, 2, 1, 1, 2, 2, 1, 0], 137 | [1, 2, 1, 2, 2, 2, 1, 1], 138 | [1, 2, 2, 2, 2, 2, 2, 1], 139 | [1, 2, 2, 2, 2, 2, 2, 1], 140 | [1, 1, 1, 1, 1, 1, 1, 1], 141 | ], 142 | player: { x: 2, y: 2 }, 143 | cargos: [{ x: 3, y: 2 }], 144 | placePoints: [{ x: 5, y: 3 }], 145 | }, 146 | { 147 | name: "关卡二", 148 | map: [ 149 | [1, 1, 1, 1, 1, 1, 1, 1], 150 | [1, 2, 2, 2, 2, 2, 2, 1], 151 | [1, 2, 2, 2, 2, 2, 2, 1], 152 | [1, 2, 2, 2, 2, 2, 2, 1], 153 | [1, 2, 2, 1, 2, 2, 2, 1], 154 | [1, 2, 2, 2, 2, 2, 2, 1], 155 | [1, 2, 2, 2, 2, 2, 2, 1], 156 | [1, 2, 2, 2, 2, 2, 2, 1], 157 | [1, 1, 1, 1, 1, 1, 1, 1], 158 | ], 159 | player: { 160 | x: 2, 161 | y: 2, 162 | }, 163 | cargos: [{ x: 3, y: 2 }], 164 | placePoints: [{ x: 4, y: 4 }], 165 | }, 166 | { 167 | name: "第三关", 168 | map: [ 169 | [1, 1, 1, 1, 1, 1, 1, 1], 170 | [1, 2, 2, 2, 2, 2, 2, 1], 171 | [1, 2, 1, 2, 2, 1, 2, 1], 172 | [1, 2, 2, 2, 2, 2, 2, 1], 173 | [1, 2, 2, 1, 1, 2, 2, 1], 174 | [1, 2, 2, 2, 2, 2, 2, 1], 175 | [1, 2, 2, 2, 2, 2, 2, 1], 176 | [1, 1, 1, 1, 1, 1, 1, 1], 177 | ], 178 | player: { 179 | x: 1, 180 | y: 1, 181 | }, 182 | cargos: [ 183 | { 184 | x: 3, 185 | y: 6, 186 | }, 187 | ], 188 | placePoints: [ 189 | { 190 | x: 4, 191 | y: 6, 192 | }, 193 | ], 194 | }, 195 | ]; 196 | -------------------------------------------------------------------------------- /src/game/tests/game.spec.ts: -------------------------------------------------------------------------------- 1 | import { it, expect, describe, beforeEach } from "vitest"; 2 | import { createMap, setupMap } from "../map"; 3 | import { 4 | createPlayer, 5 | getPlayer, 6 | moveDown, 7 | moveLeft, 8 | moveRight, 9 | moveUp, 10 | setupPlayer, 11 | } from "../player"; 12 | import { createCargos, getCargos, setupCargos } from "../cargo"; 13 | import { createGame, getGame, setupGame } from "../game"; 14 | import { createPlacePoints, setupPlacePoints } from "../placePoint"; 15 | 16 | function initCargos(config: { x: number; y: number }[]) { 17 | setupCargos(createCargos(config)); 18 | } 19 | 20 | function initPlayer(config: { x: number; y: number }) { 21 | setupPlayer(createPlayer(config)); 22 | } 23 | 24 | function initPlacePoints(config: { x: number; y: number }[]) { 25 | setupPlacePoints(createPlacePoints(config)); 26 | } 27 | 28 | describe("fighting", () => { 29 | beforeEach(() => { 30 | setupMap( 31 | createMap([ 32 | [1, 1, 1, 1, 1], 33 | [1, 2, 2, 2, 1], 34 | [1, 2, 2, 2, 1], 35 | [1, 2, 2, 2, 1], 36 | [1, 1, 1, 1, 1], 37 | ]) 38 | ); 39 | 40 | setupGame(createGame({ level: 1 })); 41 | }); 42 | describe("move to left", () => { 43 | it("should move to left when next left position is not wall ", () => { 44 | initPlayer({ x: 2, y: 1 }); 45 | 46 | moveLeft(); 47 | 48 | expect(getPlayer().x).toBe(1); 49 | }); 50 | 51 | it("should not move to left when next left position is wall ", () => { 52 | initPlayer({ x: 1, y: 1 }); 53 | 54 | moveLeft(); 55 | 56 | expect(getPlayer().x).toBe(1); 57 | }); 58 | 59 | it("should move player and cargo", () => { 60 | initPlayer({ x: 3, y: 1 }); 61 | initCargos([{ x: 2, y: 1 }]); 62 | 63 | moveLeft(); 64 | 65 | const cargo = getCargos()[0]; 66 | expect(cargo.x).toBe(1); 67 | expect(getPlayer().x).toBe(2); 68 | }); 69 | 70 | it("should not move when cargo hit wall", () => { 71 | initPlayer({ x: 2, y: 1 }); 72 | initCargos([{ x: 1, y: 1 }]); 73 | 74 | moveLeft(); 75 | 76 | const cargo = getCargos()[0]; 77 | expect(cargo.x).toBe(1); 78 | expect(getPlayer().x).toBe(2); 79 | }); 80 | 81 | it("should not move when cargo hit cargo", () => { 82 | initPlayer({ x: 3, y: 1 }); 83 | initCargos([ 84 | { x: 2, y: 1 }, 85 | { x: 1, y: 1 }, 86 | ]); 87 | 88 | moveLeft(); 89 | 90 | const firstCargo = getCargos()[0]; 91 | const secondCargo = getCargos()[1]; 92 | expect(firstCargo.x).toBe(2); 93 | expect(secondCargo.x).toBe(1); 94 | expect(getPlayer().x).toBe(3); 95 | }); 96 | }); 97 | 98 | describe("move to right", () => { 99 | it("should move to right when next right position is not wall ", () => { 100 | initPlayer({ x: 1, y: 1 }); 101 | 102 | moveRight(); 103 | 104 | expect(getPlayer().x).toBe(2); 105 | }); 106 | 107 | it("should not move to right when next right position is wall ", () => { 108 | initPlayer({ x: 3, y: 1 }); 109 | 110 | moveRight(); 111 | 112 | expect(getPlayer().x).toBe(3); 113 | }); 114 | 115 | it("should move cargo to right when next position is cargo", () => { 116 | initPlayer({ x: 1, y: 1 }); 117 | initCargos([{ x: 2, y: 1 }]); 118 | 119 | moveRight(); 120 | 121 | const cargo = getCargos()[0]; 122 | expect(cargo.x).toBe(3); 123 | expect(getPlayer().x).toBe(2); 124 | }); 125 | 126 | it("should not move to right when cargo's next position is wall", () => { 127 | initPlayer({ x: 2, y: 1 }); 128 | initCargos([{ x: 3, y: 1 }]); 129 | 130 | moveRight(); 131 | 132 | const cargo = getCargos()[0]; 133 | expect(cargo.x).toBe(3); 134 | expect(getPlayer().x).toBe(2); 135 | }); 136 | 137 | it("should not move when cargo hit cargo", () => { 138 | initPlayer({ x: 1, y: 1 }); 139 | initCargos([ 140 | { x: 2, y: 1 }, 141 | { x: 3, y: 1 }, 142 | ]); 143 | 144 | moveRight(); 145 | 146 | const firstCargo = getCargos()[0]; 147 | const secondCargo = getCargos()[1]; 148 | expect(firstCargo.x).toBe(2); 149 | expect(secondCargo.x).toBe(3); 150 | expect(getPlayer().x).toBe(1); 151 | }); 152 | }); 153 | 154 | describe("move to up", () => { 155 | it("should move to up when next up position is not wall ", () => { 156 | initPlayer({ x: 1, y: 2 }); 157 | 158 | moveUp(); 159 | 160 | expect(getPlayer().y).toBe(1); 161 | }); 162 | 163 | it("should not move to up when next up position is wall ", () => { 164 | initPlayer({ x: 1, y: 1 }); 165 | 166 | moveUp(); 167 | 168 | expect(getPlayer().y).toBe(1); 169 | }); 170 | it("should move cargo to up when next position is cargo", () => { 171 | initPlayer({ x: 1, y: 3 }); 172 | initCargos([{ x: 1, y: 2 }]); 173 | 174 | moveUp(); 175 | const cargo = getCargos()[0]; 176 | expect(cargo.y).toBe(1); 177 | expect(getPlayer().y).toBe(2); 178 | }); 179 | it("should not move to up when cargo's next position is wall", () => { 180 | initPlayer({ x: 1, y: 2 }); 181 | initCargos([{ x: 1, y: 1 }]); 182 | 183 | moveUp(); 184 | 185 | const cargo = getCargos()[0]; 186 | expect(cargo.y).toBe(1); 187 | expect(getPlayer().y).toBe(2); 188 | }); 189 | 190 | it("should not move when cargo hit cargo", () => { 191 | initPlayer({ x: 1, y: 3 }); 192 | initCargos([ 193 | { x: 1, y: 2 }, 194 | { x: 1, y: 1 }, 195 | ]); 196 | 197 | moveUp(); 198 | const firstCargo = getCargos()[0]; 199 | const secondCargo = getCargos()[1]; 200 | expect(firstCargo.y).toBe(2); 201 | expect(secondCargo.y).toBe(1); 202 | expect(getPlayer().y).toBe(3); 203 | }); 204 | }); 205 | 206 | describe("move to down", () => { 207 | it("should move to down when next down position is not wall ", () => { 208 | initPlayer({ x: 1, y: 1 }); 209 | 210 | moveDown(); 211 | 212 | expect(getPlayer().y).toBe(2); 213 | }); 214 | 215 | it("should not move to down when next down position is wall ", () => { 216 | initPlayer({ x: 1, y: 3 }); 217 | 218 | moveDown(); 219 | 220 | expect(getPlayer().y).toBe(3); 221 | }); 222 | 223 | it("should move cargo to down when next position is cargo", () => { 224 | initPlayer({ x: 1, y: 1 }); 225 | initCargos([{ x: 1, y: 2 }]); 226 | 227 | moveDown(); 228 | 229 | const cargo = getCargos()[0]; 230 | expect(cargo.y).toBe(3); 231 | expect(getPlayer().y).toBe(2); 232 | }); 233 | 234 | it("should not move to down when cargo's next position is wall", () => { 235 | initPlayer({ x: 1, y: 2 }); 236 | initCargos([{ x: 1, y: 3 }]); 237 | 238 | moveDown(); 239 | 240 | const cargo = getCargos()[0]; 241 | expect(cargo.y).toBe(3); 242 | expect(getPlayer().y).toBe(2); 243 | }); 244 | 245 | it("should not move when cargo hit cargo", () => { 246 | initPlayer({ x: 1, y: 1 }); 247 | initCargos([ 248 | { x: 1, y: 2 }, 249 | { x: 1, y: 3 }, 250 | ]); 251 | 252 | moveDown(); 253 | 254 | const firstCargo = getCargos()[0]; 255 | const secondCargo = getCargos()[1]; 256 | expect(firstCargo.y).toBe(2); 257 | expect(secondCargo.y).toBe(3); 258 | expect(getPlayer().y).toBe(1); 259 | }); 260 | }); 261 | 262 | describe("game statue", () => { 263 | it("should game win when all cargos hit all place points", () => { 264 | initPlayer({ x: 1, y: 1 }); 265 | initCargos([{ x: 2, y: 1 }]); 266 | initPlacePoints([{ x: 3, y: 1 }]); 267 | 268 | moveRight(); 269 | 270 | expect(getGame().isWin).toBe(true); 271 | }); 272 | }); 273 | }); 274 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@vitejs/plugin-vue': ^4.2.3 5 | autoprefixer: ^10.4.15 6 | postcss: ^8.4.28 7 | tailwindcss: ^3.3.3 8 | typescript: ^5.0.2 9 | vite: ^4.4.5 10 | vitest: ^0.34.2 11 | vue: ^3.3.4 12 | vue-router: ^4.2.4 13 | vue-tsc: ^1.8.5 14 | 15 | dependencies: 16 | vue: registry.npmmirror.com/vue/3.3.4 17 | vue-router: registry.npmmirror.com/vue-router/4.2.4_vue@3.3.4 18 | 19 | devDependencies: 20 | '@vitejs/plugin-vue': registry.npmmirror.com/@vitejs/plugin-vue/4.3.2_vite@4.4.9+vue@3.3.4 21 | autoprefixer: registry.npmmirror.com/autoprefixer/10.4.15_postcss@8.4.28 22 | postcss: registry.npmmirror.com/postcss/8.4.28 23 | tailwindcss: registry.npmmirror.com/tailwindcss/3.3.3 24 | typescript: registry.npmmirror.com/typescript/5.1.6 25 | vite: registry.npmmirror.com/vite/4.4.9 26 | vitest: registry.npmmirror.com/vitest/0.34.2 27 | vue-tsc: registry.npmmirror.com/vue-tsc/1.8.8_typescript@5.1.6 28 | 29 | packages: 30 | 31 | registry.npmmirror.com/@alloc/quick-lru/5.2.0: 32 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz} 33 | name: '@alloc/quick-lru' 34 | version: 5.2.0 35 | engines: {node: '>=10'} 36 | dev: true 37 | 38 | registry.npmmirror.com/@babel/helper-string-parser/7.22.5: 39 | resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz} 40 | name: '@babel/helper-string-parser' 41 | version: 7.22.5 42 | engines: {node: '>=6.9.0'} 43 | 44 | registry.npmmirror.com/@babel/helper-validator-identifier/7.22.5: 45 | resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz} 46 | name: '@babel/helper-validator-identifier' 47 | version: 7.22.5 48 | engines: {node: '>=6.9.0'} 49 | 50 | registry.npmmirror.com/@babel/parser/7.22.10: 51 | resolution: {integrity: sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/parser/-/parser-7.22.10.tgz} 52 | name: '@babel/parser' 53 | version: 7.22.10 54 | engines: {node: '>=6.0.0'} 55 | hasBin: true 56 | dependencies: 57 | '@babel/types': registry.npmmirror.com/@babel/types/7.22.10 58 | 59 | registry.npmmirror.com/@babel/types/7.22.10: 60 | resolution: {integrity: sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/types/-/types-7.22.10.tgz} 61 | name: '@babel/types' 62 | version: 7.22.10 63 | engines: {node: '>=6.9.0'} 64 | dependencies: 65 | '@babel/helper-string-parser': registry.npmmirror.com/@babel/helper-string-parser/7.22.5 66 | '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.22.5 67 | to-fast-properties: registry.npmmirror.com/to-fast-properties/2.0.0 68 | 69 | registry.npmmirror.com/@esbuild/android-arm/0.18.20: 70 | resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz} 71 | name: '@esbuild/android-arm' 72 | version: 0.18.20 73 | engines: {node: '>=12'} 74 | cpu: [arm] 75 | os: [android] 76 | requiresBuild: true 77 | dev: true 78 | optional: true 79 | 80 | registry.npmmirror.com/@esbuild/android-arm64/0.18.20: 81 | resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz} 82 | name: '@esbuild/android-arm64' 83 | version: 0.18.20 84 | engines: {node: '>=12'} 85 | cpu: [arm64] 86 | os: [android] 87 | requiresBuild: true 88 | dev: true 89 | optional: true 90 | 91 | registry.npmmirror.com/@esbuild/android-x64/0.18.20: 92 | resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz} 93 | name: '@esbuild/android-x64' 94 | version: 0.18.20 95 | engines: {node: '>=12'} 96 | cpu: [x64] 97 | os: [android] 98 | requiresBuild: true 99 | dev: true 100 | optional: true 101 | 102 | registry.npmmirror.com/@esbuild/darwin-arm64/0.18.20: 103 | resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz} 104 | name: '@esbuild/darwin-arm64' 105 | version: 0.18.20 106 | engines: {node: '>=12'} 107 | cpu: [arm64] 108 | os: [darwin] 109 | requiresBuild: true 110 | dev: true 111 | optional: true 112 | 113 | registry.npmmirror.com/@esbuild/darwin-x64/0.18.20: 114 | resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz} 115 | name: '@esbuild/darwin-x64' 116 | version: 0.18.20 117 | engines: {node: '>=12'} 118 | cpu: [x64] 119 | os: [darwin] 120 | requiresBuild: true 121 | dev: true 122 | optional: true 123 | 124 | registry.npmmirror.com/@esbuild/freebsd-arm64/0.18.20: 125 | resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz} 126 | name: '@esbuild/freebsd-arm64' 127 | version: 0.18.20 128 | engines: {node: '>=12'} 129 | cpu: [arm64] 130 | os: [freebsd] 131 | requiresBuild: true 132 | dev: true 133 | optional: true 134 | 135 | registry.npmmirror.com/@esbuild/freebsd-x64/0.18.20: 136 | resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz} 137 | name: '@esbuild/freebsd-x64' 138 | version: 0.18.20 139 | engines: {node: '>=12'} 140 | cpu: [x64] 141 | os: [freebsd] 142 | requiresBuild: true 143 | dev: true 144 | optional: true 145 | 146 | registry.npmmirror.com/@esbuild/linux-arm/0.18.20: 147 | resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz} 148 | name: '@esbuild/linux-arm' 149 | version: 0.18.20 150 | engines: {node: '>=12'} 151 | cpu: [arm] 152 | os: [linux] 153 | requiresBuild: true 154 | dev: true 155 | optional: true 156 | 157 | registry.npmmirror.com/@esbuild/linux-arm64/0.18.20: 158 | resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz} 159 | name: '@esbuild/linux-arm64' 160 | version: 0.18.20 161 | engines: {node: '>=12'} 162 | cpu: [arm64] 163 | os: [linux] 164 | requiresBuild: true 165 | dev: true 166 | optional: true 167 | 168 | registry.npmmirror.com/@esbuild/linux-ia32/0.18.20: 169 | resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz} 170 | name: '@esbuild/linux-ia32' 171 | version: 0.18.20 172 | engines: {node: '>=12'} 173 | cpu: [ia32] 174 | os: [linux] 175 | requiresBuild: true 176 | dev: true 177 | optional: true 178 | 179 | registry.npmmirror.com/@esbuild/linux-loong64/0.18.20: 180 | resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz} 181 | name: '@esbuild/linux-loong64' 182 | version: 0.18.20 183 | engines: {node: '>=12'} 184 | cpu: [loong64] 185 | os: [linux] 186 | requiresBuild: true 187 | dev: true 188 | optional: true 189 | 190 | registry.npmmirror.com/@esbuild/linux-mips64el/0.18.20: 191 | resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz} 192 | name: '@esbuild/linux-mips64el' 193 | version: 0.18.20 194 | engines: {node: '>=12'} 195 | cpu: [mips64el] 196 | os: [linux] 197 | requiresBuild: true 198 | dev: true 199 | optional: true 200 | 201 | registry.npmmirror.com/@esbuild/linux-ppc64/0.18.20: 202 | resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz} 203 | name: '@esbuild/linux-ppc64' 204 | version: 0.18.20 205 | engines: {node: '>=12'} 206 | cpu: [ppc64] 207 | os: [linux] 208 | requiresBuild: true 209 | dev: true 210 | optional: true 211 | 212 | registry.npmmirror.com/@esbuild/linux-riscv64/0.18.20: 213 | resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz} 214 | name: '@esbuild/linux-riscv64' 215 | version: 0.18.20 216 | engines: {node: '>=12'} 217 | cpu: [riscv64] 218 | os: [linux] 219 | requiresBuild: true 220 | dev: true 221 | optional: true 222 | 223 | registry.npmmirror.com/@esbuild/linux-s390x/0.18.20: 224 | resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz} 225 | name: '@esbuild/linux-s390x' 226 | version: 0.18.20 227 | engines: {node: '>=12'} 228 | cpu: [s390x] 229 | os: [linux] 230 | requiresBuild: true 231 | dev: true 232 | optional: true 233 | 234 | registry.npmmirror.com/@esbuild/linux-x64/0.18.20: 235 | resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz} 236 | name: '@esbuild/linux-x64' 237 | version: 0.18.20 238 | engines: {node: '>=12'} 239 | cpu: [x64] 240 | os: [linux] 241 | requiresBuild: true 242 | dev: true 243 | optional: true 244 | 245 | registry.npmmirror.com/@esbuild/netbsd-x64/0.18.20: 246 | resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz} 247 | name: '@esbuild/netbsd-x64' 248 | version: 0.18.20 249 | engines: {node: '>=12'} 250 | cpu: [x64] 251 | os: [netbsd] 252 | requiresBuild: true 253 | dev: true 254 | optional: true 255 | 256 | registry.npmmirror.com/@esbuild/openbsd-x64/0.18.20: 257 | resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz} 258 | name: '@esbuild/openbsd-x64' 259 | version: 0.18.20 260 | engines: {node: '>=12'} 261 | cpu: [x64] 262 | os: [openbsd] 263 | requiresBuild: true 264 | dev: true 265 | optional: true 266 | 267 | registry.npmmirror.com/@esbuild/sunos-x64/0.18.20: 268 | resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz} 269 | name: '@esbuild/sunos-x64' 270 | version: 0.18.20 271 | engines: {node: '>=12'} 272 | cpu: [x64] 273 | os: [sunos] 274 | requiresBuild: true 275 | dev: true 276 | optional: true 277 | 278 | registry.npmmirror.com/@esbuild/win32-arm64/0.18.20: 279 | resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz} 280 | name: '@esbuild/win32-arm64' 281 | version: 0.18.20 282 | engines: {node: '>=12'} 283 | cpu: [arm64] 284 | os: [win32] 285 | requiresBuild: true 286 | dev: true 287 | optional: true 288 | 289 | registry.npmmirror.com/@esbuild/win32-ia32/0.18.20: 290 | resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz} 291 | name: '@esbuild/win32-ia32' 292 | version: 0.18.20 293 | engines: {node: '>=12'} 294 | cpu: [ia32] 295 | os: [win32] 296 | requiresBuild: true 297 | dev: true 298 | optional: true 299 | 300 | registry.npmmirror.com/@esbuild/win32-x64/0.18.20: 301 | resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz} 302 | name: '@esbuild/win32-x64' 303 | version: 0.18.20 304 | engines: {node: '>=12'} 305 | cpu: [x64] 306 | os: [win32] 307 | requiresBuild: true 308 | dev: true 309 | optional: true 310 | 311 | registry.npmmirror.com/@jest/schemas/29.6.3: 312 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/schemas/-/schemas-29.6.3.tgz} 313 | name: '@jest/schemas' 314 | version: 29.6.3 315 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 316 | dependencies: 317 | '@sinclair/typebox': registry.npmmirror.com/@sinclair/typebox/0.27.8 318 | dev: true 319 | 320 | registry.npmmirror.com/@jridgewell/gen-mapping/0.3.3: 321 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz} 322 | name: '@jridgewell/gen-mapping' 323 | version: 0.3.3 324 | engines: {node: '>=6.0.0'} 325 | dependencies: 326 | '@jridgewell/set-array': registry.npmmirror.com/@jridgewell/set-array/1.1.2 327 | '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.15 328 | '@jridgewell/trace-mapping': registry.npmmirror.com/@jridgewell/trace-mapping/0.3.19 329 | dev: true 330 | 331 | registry.npmmirror.com/@jridgewell/resolve-uri/3.1.1: 332 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz} 333 | name: '@jridgewell/resolve-uri' 334 | version: 3.1.1 335 | engines: {node: '>=6.0.0'} 336 | dev: true 337 | 338 | registry.npmmirror.com/@jridgewell/set-array/1.1.2: 339 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz} 340 | name: '@jridgewell/set-array' 341 | version: 1.1.2 342 | engines: {node: '>=6.0.0'} 343 | dev: true 344 | 345 | registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.15: 346 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz} 347 | name: '@jridgewell/sourcemap-codec' 348 | version: 1.4.15 349 | 350 | registry.npmmirror.com/@jridgewell/trace-mapping/0.3.19: 351 | resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz} 352 | name: '@jridgewell/trace-mapping' 353 | version: 0.3.19 354 | dependencies: 355 | '@jridgewell/resolve-uri': registry.npmmirror.com/@jridgewell/resolve-uri/3.1.1 356 | '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.15 357 | dev: true 358 | 359 | registry.npmmirror.com/@nodelib/fs.scandir/2.1.5: 360 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz} 361 | name: '@nodelib/fs.scandir' 362 | version: 2.1.5 363 | engines: {node: '>= 8'} 364 | dependencies: 365 | '@nodelib/fs.stat': registry.npmmirror.com/@nodelib/fs.stat/2.0.5 366 | run-parallel: registry.npmmirror.com/run-parallel/1.2.0 367 | dev: true 368 | 369 | registry.npmmirror.com/@nodelib/fs.stat/2.0.5: 370 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz} 371 | name: '@nodelib/fs.stat' 372 | version: 2.0.5 373 | engines: {node: '>= 8'} 374 | dev: true 375 | 376 | registry.npmmirror.com/@nodelib/fs.walk/1.2.8: 377 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz} 378 | name: '@nodelib/fs.walk' 379 | version: 1.2.8 380 | engines: {node: '>= 8'} 381 | dependencies: 382 | '@nodelib/fs.scandir': registry.npmmirror.com/@nodelib/fs.scandir/2.1.5 383 | fastq: registry.npmmirror.com/fastq/1.15.0 384 | dev: true 385 | 386 | registry.npmmirror.com/@sinclair/typebox/0.27.8: 387 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@sinclair/typebox/-/typebox-0.27.8.tgz} 388 | name: '@sinclair/typebox' 389 | version: 0.27.8 390 | dev: true 391 | 392 | registry.npmmirror.com/@types/chai-subset/1.3.3: 393 | resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/chai-subset/-/chai-subset-1.3.3.tgz} 394 | name: '@types/chai-subset' 395 | version: 1.3.3 396 | dependencies: 397 | '@types/chai': registry.npmmirror.com/@types/chai/4.3.5 398 | dev: true 399 | 400 | registry.npmmirror.com/@types/chai/4.3.5: 401 | resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/chai/-/chai-4.3.5.tgz} 402 | name: '@types/chai' 403 | version: 4.3.5 404 | dev: true 405 | 406 | registry.npmmirror.com/@types/node/20.5.1: 407 | resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/node/-/node-20.5.1.tgz} 408 | name: '@types/node' 409 | version: 20.5.1 410 | dev: true 411 | 412 | registry.npmmirror.com/@vitejs/plugin-vue/4.3.2_vite@4.4.9+vue@3.3.4: 413 | resolution: {integrity: sha512-iDDhGruwhKkwNwT5qgtGaeTxF4ULs52xpQbsC27F01kf3aQBHtrDP738pmHw4oclVAUA3m+Vk8gxhDV5KbfM+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.3.2.tgz} 414 | id: registry.npmmirror.com/@vitejs/plugin-vue/4.3.2 415 | name: '@vitejs/plugin-vue' 416 | version: 4.3.2 417 | engines: {node: ^14.18.0 || >=16.0.0} 418 | peerDependencies: 419 | vite: ^4.0.0 420 | vue: ^3.2.25 421 | dependencies: 422 | vite: registry.npmmirror.com/vite/4.4.9 423 | vue: registry.npmmirror.com/vue/3.3.4 424 | dev: true 425 | 426 | registry.npmmirror.com/@vitest/expect/0.34.2: 427 | resolution: {integrity: sha512-EZm2dMNlLyIfDMha17QHSQcg2KjeAZaXd65fpPzXY5bvnfx10Lcaz3N55uEe8PhF+w4pw+hmrlHLLlRn9vkBJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vitest/expect/-/expect-0.34.2.tgz} 428 | name: '@vitest/expect' 429 | version: 0.34.2 430 | dependencies: 431 | '@vitest/spy': registry.npmmirror.com/@vitest/spy/0.34.2 432 | '@vitest/utils': registry.npmmirror.com/@vitest/utils/0.34.2 433 | chai: registry.npmmirror.com/chai/4.3.7 434 | dev: true 435 | 436 | registry.npmmirror.com/@vitest/runner/0.34.2: 437 | resolution: {integrity: sha512-8ydGPACVX5tK3Dl0SUwxfdg02h+togDNeQX3iXVFYgzF5odxvaou7HnquALFZkyVuYskoaHUOqOyOLpOEj5XTA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vitest/runner/-/runner-0.34.2.tgz} 438 | name: '@vitest/runner' 439 | version: 0.34.2 440 | dependencies: 441 | '@vitest/utils': registry.npmmirror.com/@vitest/utils/0.34.2 442 | p-limit: registry.npmmirror.com/p-limit/4.0.0 443 | pathe: registry.npmmirror.com/pathe/1.1.1 444 | dev: true 445 | 446 | registry.npmmirror.com/@vitest/snapshot/0.34.2: 447 | resolution: {integrity: sha512-qhQ+xy3u4mwwLxltS4Pd4SR+XHv4EajiTPNY3jkIBLUApE6/ce72neJPSUQZ7bL3EBuKI+NhvzhGj3n5baRQUQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vitest/snapshot/-/snapshot-0.34.2.tgz} 448 | name: '@vitest/snapshot' 449 | version: 0.34.2 450 | dependencies: 451 | magic-string: registry.npmmirror.com/magic-string/0.30.3 452 | pathe: registry.npmmirror.com/pathe/1.1.1 453 | pretty-format: registry.npmmirror.com/pretty-format/29.6.3 454 | dev: true 455 | 456 | registry.npmmirror.com/@vitest/spy/0.34.2: 457 | resolution: {integrity: sha512-yd4L9OhfH6l0Av7iK3sPb3MykhtcRN5c5K5vm1nTbuN7gYn+yvUVVsyvzpHrjqS7EWqn9WsPJb7+0c3iuY60tA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vitest/spy/-/spy-0.34.2.tgz} 458 | name: '@vitest/spy' 459 | version: 0.34.2 460 | dependencies: 461 | tinyspy: registry.npmmirror.com/tinyspy/2.1.1 462 | dev: true 463 | 464 | registry.npmmirror.com/@vitest/utils/0.34.2: 465 | resolution: {integrity: sha512-Lzw+kAsTPubhoQDp1uVAOP6DhNia1GMDsI9jgB0yMn+/nDaPieYQ88lKqz/gGjSHL4zwOItvpehec9OY+rS73w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vitest/utils/-/utils-0.34.2.tgz} 466 | name: '@vitest/utils' 467 | version: 0.34.2 468 | dependencies: 469 | diff-sequences: registry.npmmirror.com/diff-sequences/29.6.3 470 | loupe: registry.npmmirror.com/loupe/2.3.6 471 | pretty-format: registry.npmmirror.com/pretty-format/29.6.3 472 | dev: true 473 | 474 | registry.npmmirror.com/@volar/language-core/1.10.0: 475 | resolution: {integrity: sha512-ddyWwSYqcbEZNFHm+Z3NZd6M7Ihjcwl/9B5cZd8kECdimVXUFdFi60XHWD27nrWtUQIsUYIG7Ca1WBwV2u2LSQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@volar/language-core/-/language-core-1.10.0.tgz} 476 | name: '@volar/language-core' 477 | version: 1.10.0 478 | dependencies: 479 | '@volar/source-map': registry.npmmirror.com/@volar/source-map/1.10.0 480 | dev: true 481 | 482 | registry.npmmirror.com/@volar/language-core/1.10.1: 483 | resolution: {integrity: sha512-JnsM1mIPdfGPxmoOcK1c7HYAsL6YOv0TCJ4aW3AXPZN/Jb4R77epDyMZIVudSGjWMbvv/JfUa+rQ+dGKTmgwBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@volar/language-core/-/language-core-1.10.1.tgz} 484 | name: '@volar/language-core' 485 | version: 1.10.1 486 | dependencies: 487 | '@volar/source-map': registry.npmmirror.com/@volar/source-map/1.10.1 488 | dev: true 489 | 490 | registry.npmmirror.com/@volar/source-map/1.10.0: 491 | resolution: {integrity: sha512-/ibWdcOzDGiq/GM1JU2eX8fH1bvAhl66hfe8yEgLEzg9txgr6qb5sQ/DEz5PcDL75tF5H5sCRRwn8Eu8ezi9mw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@volar/source-map/-/source-map-1.10.0.tgz} 492 | name: '@volar/source-map' 493 | version: 1.10.0 494 | dependencies: 495 | muggle-string: registry.npmmirror.com/muggle-string/0.3.1 496 | dev: true 497 | 498 | registry.npmmirror.com/@volar/source-map/1.10.1: 499 | resolution: {integrity: sha512-3/S6KQbqa7pGC8CxPrg69qHLpOvkiPHGJtWPkI/1AXCsktkJ6gIk/5z4hyuMp8Anvs6eS/Kvp/GZa3ut3votKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@volar/source-map/-/source-map-1.10.1.tgz} 500 | name: '@volar/source-map' 501 | version: 1.10.1 502 | dependencies: 503 | muggle-string: registry.npmmirror.com/muggle-string/0.3.1 504 | dev: true 505 | 506 | registry.npmmirror.com/@volar/typescript/1.10.0: 507 | resolution: {integrity: sha512-OtqGtFbUKYC0pLNIk3mHQp5xWnvL1CJIUc9VE39VdZ/oqpoBh5jKfb9uJ45Y4/oP/WYTrif/Uxl1k8VTPz66Gg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@volar/typescript/-/typescript-1.10.0.tgz} 508 | name: '@volar/typescript' 509 | version: 1.10.0 510 | dependencies: 511 | '@volar/language-core': registry.npmmirror.com/@volar/language-core/1.10.0 512 | dev: true 513 | 514 | registry.npmmirror.com/@vue/compiler-core/3.3.4: 515 | resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.4.tgz} 516 | name: '@vue/compiler-core' 517 | version: 3.3.4 518 | dependencies: 519 | '@babel/parser': registry.npmmirror.com/@babel/parser/7.22.10 520 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.3.4 521 | estree-walker: registry.npmmirror.com/estree-walker/2.0.2 522 | source-map-js: registry.npmmirror.com/source-map-js/1.0.2 523 | 524 | registry.npmmirror.com/@vue/compiler-dom/3.3.4: 525 | resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz} 526 | name: '@vue/compiler-dom' 527 | version: 3.3.4 528 | dependencies: 529 | '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.3.4 530 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.3.4 531 | 532 | registry.npmmirror.com/@vue/compiler-sfc/3.3.4: 533 | resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz} 534 | name: '@vue/compiler-sfc' 535 | version: 3.3.4 536 | dependencies: 537 | '@babel/parser': registry.npmmirror.com/@babel/parser/7.22.10 538 | '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.3.4 539 | '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom/3.3.4 540 | '@vue/compiler-ssr': registry.npmmirror.com/@vue/compiler-ssr/3.3.4 541 | '@vue/reactivity-transform': registry.npmmirror.com/@vue/reactivity-transform/3.3.4 542 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.3.4 543 | estree-walker: registry.npmmirror.com/estree-walker/2.0.2 544 | magic-string: registry.npmmirror.com/magic-string/0.30.3 545 | postcss: registry.npmmirror.com/postcss/8.4.28 546 | source-map-js: registry.npmmirror.com/source-map-js/1.0.2 547 | 548 | registry.npmmirror.com/@vue/compiler-ssr/3.3.4: 549 | resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz} 550 | name: '@vue/compiler-ssr' 551 | version: 3.3.4 552 | dependencies: 553 | '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom/3.3.4 554 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.3.4 555 | 556 | registry.npmmirror.com/@vue/devtools-api/6.5.0: 557 | resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz} 558 | name: '@vue/devtools-api' 559 | version: 6.5.0 560 | dev: false 561 | 562 | registry.npmmirror.com/@vue/language-core/1.8.8_typescript@5.1.6: 563 | resolution: {integrity: sha512-i4KMTuPazf48yMdYoebTkgSOJdFraE4pQf0B+FTOFkbB+6hAfjrSou/UmYWRsWyZV6r4Rc6DDZdI39CJwL0rWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/language-core/-/language-core-1.8.8.tgz} 564 | id: registry.npmmirror.com/@vue/language-core/1.8.8 565 | name: '@vue/language-core' 566 | version: 1.8.8 567 | peerDependencies: 568 | typescript: '*' 569 | peerDependenciesMeta: 570 | typescript: 571 | optional: true 572 | dependencies: 573 | '@volar/language-core': registry.npmmirror.com/@volar/language-core/1.10.1 574 | '@volar/source-map': registry.npmmirror.com/@volar/source-map/1.10.1 575 | '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom/3.3.4 576 | '@vue/reactivity': registry.npmmirror.com/@vue/reactivity/3.3.4 577 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.3.4 578 | minimatch: registry.npmmirror.com/minimatch/9.0.3 579 | muggle-string: registry.npmmirror.com/muggle-string/0.3.1 580 | typescript: registry.npmmirror.com/typescript/5.1.6 581 | vue-template-compiler: registry.npmmirror.com/vue-template-compiler/2.7.14 582 | dev: true 583 | 584 | registry.npmmirror.com/@vue/reactivity-transform/3.3.4: 585 | resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz} 586 | name: '@vue/reactivity-transform' 587 | version: 3.3.4 588 | dependencies: 589 | '@babel/parser': registry.npmmirror.com/@babel/parser/7.22.10 590 | '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.3.4 591 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.3.4 592 | estree-walker: registry.npmmirror.com/estree-walker/2.0.2 593 | magic-string: registry.npmmirror.com/magic-string/0.30.3 594 | 595 | registry.npmmirror.com/@vue/reactivity/3.3.4: 596 | resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.4.tgz} 597 | name: '@vue/reactivity' 598 | version: 3.3.4 599 | dependencies: 600 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.3.4 601 | 602 | registry.npmmirror.com/@vue/runtime-core/3.3.4: 603 | resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.4.tgz} 604 | name: '@vue/runtime-core' 605 | version: 3.3.4 606 | dependencies: 607 | '@vue/reactivity': registry.npmmirror.com/@vue/reactivity/3.3.4 608 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.3.4 609 | 610 | registry.npmmirror.com/@vue/runtime-dom/3.3.4: 611 | resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz} 612 | name: '@vue/runtime-dom' 613 | version: 3.3.4 614 | dependencies: 615 | '@vue/runtime-core': registry.npmmirror.com/@vue/runtime-core/3.3.4 616 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.3.4 617 | csstype: registry.npmmirror.com/csstype/3.1.2 618 | 619 | registry.npmmirror.com/@vue/server-renderer/3.3.4_vue@3.3.4: 620 | resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.4.tgz} 621 | id: registry.npmmirror.com/@vue/server-renderer/3.3.4 622 | name: '@vue/server-renderer' 623 | version: 3.3.4 624 | peerDependencies: 625 | vue: 3.3.4 626 | dependencies: 627 | '@vue/compiler-ssr': registry.npmmirror.com/@vue/compiler-ssr/3.3.4 628 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.3.4 629 | vue: registry.npmmirror.com/vue/3.3.4 630 | 631 | registry.npmmirror.com/@vue/shared/3.3.4: 632 | resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/shared/-/shared-3.3.4.tgz} 633 | name: '@vue/shared' 634 | version: 3.3.4 635 | 636 | registry.npmmirror.com/@vue/typescript/1.8.8_typescript@5.1.6: 637 | resolution: {integrity: sha512-jUnmMB6egu5wl342eaUH236v8tdcEPXXkPgj+eI/F6JwW/lb+yAU6U07ZbQ3MVabZRlupIlPESB7ajgAGixhow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/typescript/-/typescript-1.8.8.tgz} 638 | id: registry.npmmirror.com/@vue/typescript/1.8.8 639 | name: '@vue/typescript' 640 | version: 1.8.8 641 | dependencies: 642 | '@volar/typescript': registry.npmmirror.com/@volar/typescript/1.10.0 643 | '@vue/language-core': registry.npmmirror.com/@vue/language-core/1.8.8_typescript@5.1.6 644 | transitivePeerDependencies: 645 | - typescript 646 | dev: true 647 | 648 | registry.npmmirror.com/acorn-walk/8.2.0: 649 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz} 650 | name: acorn-walk 651 | version: 8.2.0 652 | engines: {node: '>=0.4.0'} 653 | dev: true 654 | 655 | registry.npmmirror.com/acorn/8.10.0: 656 | resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn/-/acorn-8.10.0.tgz} 657 | name: acorn 658 | version: 8.10.0 659 | engines: {node: '>=0.4.0'} 660 | hasBin: true 661 | dev: true 662 | 663 | registry.npmmirror.com/ansi-styles/5.2.0: 664 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz} 665 | name: ansi-styles 666 | version: 5.2.0 667 | engines: {node: '>=10'} 668 | dev: true 669 | 670 | registry.npmmirror.com/any-promise/1.3.0: 671 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz} 672 | name: any-promise 673 | version: 1.3.0 674 | dev: true 675 | 676 | registry.npmmirror.com/anymatch/3.1.3: 677 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz} 678 | name: anymatch 679 | version: 3.1.3 680 | engines: {node: '>= 8'} 681 | dependencies: 682 | normalize-path: registry.npmmirror.com/normalize-path/3.0.0 683 | picomatch: registry.npmmirror.com/picomatch/2.3.1 684 | dev: true 685 | 686 | registry.npmmirror.com/arg/5.0.2: 687 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz} 688 | name: arg 689 | version: 5.0.2 690 | dev: true 691 | 692 | registry.npmmirror.com/assertion-error/1.1.0: 693 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/assertion-error/-/assertion-error-1.1.0.tgz} 694 | name: assertion-error 695 | version: 1.1.0 696 | dev: true 697 | 698 | registry.npmmirror.com/autoprefixer/10.4.15_postcss@8.4.28: 699 | resolution: {integrity: sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.15.tgz} 700 | id: registry.npmmirror.com/autoprefixer/10.4.15 701 | name: autoprefixer 702 | version: 10.4.15 703 | engines: {node: ^10 || ^12 || >=14} 704 | hasBin: true 705 | peerDependencies: 706 | postcss: ^8.1.0 707 | dependencies: 708 | browserslist: registry.npmmirror.com/browserslist/4.21.10 709 | caniuse-lite: registry.npmmirror.com/caniuse-lite/1.0.30001522 710 | fraction.js: registry.npmmirror.com/fraction.js/4.2.1 711 | normalize-range: registry.npmmirror.com/normalize-range/0.1.2 712 | picocolors: registry.npmmirror.com/picocolors/1.0.0 713 | postcss: registry.npmmirror.com/postcss/8.4.28 714 | postcss-value-parser: registry.npmmirror.com/postcss-value-parser/4.2.0 715 | dev: true 716 | 717 | registry.npmmirror.com/balanced-match/1.0.2: 718 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz} 719 | name: balanced-match 720 | version: 1.0.2 721 | dev: true 722 | 723 | registry.npmmirror.com/binary-extensions/2.2.0: 724 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz} 725 | name: binary-extensions 726 | version: 2.2.0 727 | engines: {node: '>=8'} 728 | dev: true 729 | 730 | registry.npmmirror.com/brace-expansion/1.1.11: 731 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz} 732 | name: brace-expansion 733 | version: 1.1.11 734 | dependencies: 735 | balanced-match: registry.npmmirror.com/balanced-match/1.0.2 736 | concat-map: registry.npmmirror.com/concat-map/0.0.1 737 | dev: true 738 | 739 | registry.npmmirror.com/brace-expansion/2.0.1: 740 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz} 741 | name: brace-expansion 742 | version: 2.0.1 743 | dependencies: 744 | balanced-match: registry.npmmirror.com/balanced-match/1.0.2 745 | dev: true 746 | 747 | registry.npmmirror.com/braces/3.0.2: 748 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz} 749 | name: braces 750 | version: 3.0.2 751 | engines: {node: '>=8'} 752 | dependencies: 753 | fill-range: registry.npmmirror.com/fill-range/7.0.1 754 | dev: true 755 | 756 | registry.npmmirror.com/browserslist/4.21.10: 757 | resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browserslist/-/browserslist-4.21.10.tgz} 758 | name: browserslist 759 | version: 4.21.10 760 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 761 | hasBin: true 762 | dependencies: 763 | caniuse-lite: registry.npmmirror.com/caniuse-lite/1.0.30001522 764 | electron-to-chromium: registry.npmmirror.com/electron-to-chromium/1.4.496 765 | node-releases: registry.npmmirror.com/node-releases/2.0.13 766 | update-browserslist-db: registry.npmmirror.com/update-browserslist-db/1.0.11_browserslist@4.21.10 767 | dev: true 768 | 769 | registry.npmmirror.com/cac/6.7.14: 770 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cac/-/cac-6.7.14.tgz} 771 | name: cac 772 | version: 6.7.14 773 | engines: {node: '>=8'} 774 | dev: true 775 | 776 | registry.npmmirror.com/camelcase-css/2.0.1: 777 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz} 778 | name: camelcase-css 779 | version: 2.0.1 780 | engines: {node: '>= 6'} 781 | dev: true 782 | 783 | registry.npmmirror.com/caniuse-lite/1.0.30001522: 784 | resolution: {integrity: sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz} 785 | name: caniuse-lite 786 | version: 1.0.30001522 787 | dev: true 788 | 789 | registry.npmmirror.com/chai/4.3.7: 790 | resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chai/-/chai-4.3.7.tgz} 791 | name: chai 792 | version: 4.3.7 793 | engines: {node: '>=4'} 794 | dependencies: 795 | assertion-error: registry.npmmirror.com/assertion-error/1.1.0 796 | check-error: registry.npmmirror.com/check-error/1.0.2 797 | deep-eql: registry.npmmirror.com/deep-eql/4.1.3 798 | get-func-name: registry.npmmirror.com/get-func-name/2.0.0 799 | loupe: registry.npmmirror.com/loupe/2.3.6 800 | pathval: registry.npmmirror.com/pathval/1.1.1 801 | type-detect: registry.npmmirror.com/type-detect/4.0.8 802 | dev: true 803 | 804 | registry.npmmirror.com/check-error/1.0.2: 805 | resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/check-error/-/check-error-1.0.2.tgz} 806 | name: check-error 807 | version: 1.0.2 808 | dev: true 809 | 810 | registry.npmmirror.com/chokidar/3.5.3: 811 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz} 812 | name: chokidar 813 | version: 3.5.3 814 | engines: {node: '>= 8.10.0'} 815 | dependencies: 816 | anymatch: registry.npmmirror.com/anymatch/3.1.3 817 | braces: registry.npmmirror.com/braces/3.0.2 818 | glob-parent: registry.npmmirror.com/glob-parent/5.1.2 819 | is-binary-path: registry.npmmirror.com/is-binary-path/2.1.0 820 | is-glob: registry.npmmirror.com/is-glob/4.0.3 821 | normalize-path: registry.npmmirror.com/normalize-path/3.0.0 822 | readdirp: registry.npmmirror.com/readdirp/3.6.0 823 | optionalDependencies: 824 | fsevents: registry.npmmirror.com/fsevents/2.3.2 825 | dev: true 826 | 827 | registry.npmmirror.com/commander/4.1.1: 828 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz} 829 | name: commander 830 | version: 4.1.1 831 | engines: {node: '>= 6'} 832 | dev: true 833 | 834 | registry.npmmirror.com/concat-map/0.0.1: 835 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz} 836 | name: concat-map 837 | version: 0.0.1 838 | dev: true 839 | 840 | registry.npmmirror.com/cssesc/3.0.0: 841 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz} 842 | name: cssesc 843 | version: 3.0.0 844 | engines: {node: '>=4'} 845 | hasBin: true 846 | dev: true 847 | 848 | registry.npmmirror.com/csstype/3.1.2: 849 | resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz} 850 | name: csstype 851 | version: 3.1.2 852 | 853 | registry.npmmirror.com/de-indent/1.0.2: 854 | resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz} 855 | name: de-indent 856 | version: 1.0.2 857 | dev: true 858 | 859 | registry.npmmirror.com/debug/4.3.4: 860 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz} 861 | name: debug 862 | version: 4.3.4 863 | engines: {node: '>=6.0'} 864 | peerDependencies: 865 | supports-color: '*' 866 | peerDependenciesMeta: 867 | supports-color: 868 | optional: true 869 | dependencies: 870 | ms: registry.npmmirror.com/ms/2.1.2 871 | dev: true 872 | 873 | registry.npmmirror.com/deep-eql/4.1.3: 874 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/deep-eql/-/deep-eql-4.1.3.tgz} 875 | name: deep-eql 876 | version: 4.1.3 877 | engines: {node: '>=6'} 878 | dependencies: 879 | type-detect: registry.npmmirror.com/type-detect/4.0.8 880 | dev: true 881 | 882 | registry.npmmirror.com/didyoumean/1.2.2: 883 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/didyoumean/-/didyoumean-1.2.2.tgz} 884 | name: didyoumean 885 | version: 1.2.2 886 | dev: true 887 | 888 | registry.npmmirror.com/diff-sequences/29.6.3: 889 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/diff-sequences/-/diff-sequences-29.6.3.tgz} 890 | name: diff-sequences 891 | version: 29.6.3 892 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 893 | dev: true 894 | 895 | registry.npmmirror.com/dlv/1.1.3: 896 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dlv/-/dlv-1.1.3.tgz} 897 | name: dlv 898 | version: 1.1.3 899 | dev: true 900 | 901 | registry.npmmirror.com/electron-to-chromium/1.4.496: 902 | resolution: {integrity: sha512-qeXC3Zbykq44RCrBa4kr8v/dWzYJA8rAwpyh9Qd+NKWoJfjG5vvJqy9XOJ9H4P/lqulZBCgUWAYi+FeK5AuJ8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.496.tgz} 903 | name: electron-to-chromium 904 | version: 1.4.496 905 | dev: true 906 | 907 | registry.npmmirror.com/esbuild/0.18.20: 908 | resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild/-/esbuild-0.18.20.tgz} 909 | name: esbuild 910 | version: 0.18.20 911 | engines: {node: '>=12'} 912 | hasBin: true 913 | requiresBuild: true 914 | optionalDependencies: 915 | '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.18.20 916 | '@esbuild/android-arm64': registry.npmmirror.com/@esbuild/android-arm64/0.18.20 917 | '@esbuild/android-x64': registry.npmmirror.com/@esbuild/android-x64/0.18.20 918 | '@esbuild/darwin-arm64': registry.npmmirror.com/@esbuild/darwin-arm64/0.18.20 919 | '@esbuild/darwin-x64': registry.npmmirror.com/@esbuild/darwin-x64/0.18.20 920 | '@esbuild/freebsd-arm64': registry.npmmirror.com/@esbuild/freebsd-arm64/0.18.20 921 | '@esbuild/freebsd-x64': registry.npmmirror.com/@esbuild/freebsd-x64/0.18.20 922 | '@esbuild/linux-arm': registry.npmmirror.com/@esbuild/linux-arm/0.18.20 923 | '@esbuild/linux-arm64': registry.npmmirror.com/@esbuild/linux-arm64/0.18.20 924 | '@esbuild/linux-ia32': registry.npmmirror.com/@esbuild/linux-ia32/0.18.20 925 | '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.18.20 926 | '@esbuild/linux-mips64el': registry.npmmirror.com/@esbuild/linux-mips64el/0.18.20 927 | '@esbuild/linux-ppc64': registry.npmmirror.com/@esbuild/linux-ppc64/0.18.20 928 | '@esbuild/linux-riscv64': registry.npmmirror.com/@esbuild/linux-riscv64/0.18.20 929 | '@esbuild/linux-s390x': registry.npmmirror.com/@esbuild/linux-s390x/0.18.20 930 | '@esbuild/linux-x64': registry.npmmirror.com/@esbuild/linux-x64/0.18.20 931 | '@esbuild/netbsd-x64': registry.npmmirror.com/@esbuild/netbsd-x64/0.18.20 932 | '@esbuild/openbsd-x64': registry.npmmirror.com/@esbuild/openbsd-x64/0.18.20 933 | '@esbuild/sunos-x64': registry.npmmirror.com/@esbuild/sunos-x64/0.18.20 934 | '@esbuild/win32-arm64': registry.npmmirror.com/@esbuild/win32-arm64/0.18.20 935 | '@esbuild/win32-ia32': registry.npmmirror.com/@esbuild/win32-ia32/0.18.20 936 | '@esbuild/win32-x64': registry.npmmirror.com/@esbuild/win32-x64/0.18.20 937 | dev: true 938 | 939 | registry.npmmirror.com/escalade/3.1.1: 940 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz} 941 | name: escalade 942 | version: 3.1.1 943 | engines: {node: '>=6'} 944 | dev: true 945 | 946 | registry.npmmirror.com/estree-walker/2.0.2: 947 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz} 948 | name: estree-walker 949 | version: 2.0.2 950 | 951 | registry.npmmirror.com/fast-glob/3.3.1: 952 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.1.tgz} 953 | name: fast-glob 954 | version: 3.3.1 955 | engines: {node: '>=8.6.0'} 956 | dependencies: 957 | '@nodelib/fs.stat': registry.npmmirror.com/@nodelib/fs.stat/2.0.5 958 | '@nodelib/fs.walk': registry.npmmirror.com/@nodelib/fs.walk/1.2.8 959 | glob-parent: registry.npmmirror.com/glob-parent/5.1.2 960 | merge2: registry.npmmirror.com/merge2/1.4.1 961 | micromatch: registry.npmmirror.com/micromatch/4.0.5 962 | dev: true 963 | 964 | registry.npmmirror.com/fastq/1.15.0: 965 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fastq/-/fastq-1.15.0.tgz} 966 | name: fastq 967 | version: 1.15.0 968 | dependencies: 969 | reusify: registry.npmmirror.com/reusify/1.0.4 970 | dev: true 971 | 972 | registry.npmmirror.com/fill-range/7.0.1: 973 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz} 974 | name: fill-range 975 | version: 7.0.1 976 | engines: {node: '>=8'} 977 | dependencies: 978 | to-regex-range: registry.npmmirror.com/to-regex-range/5.0.1 979 | dev: true 980 | 981 | registry.npmmirror.com/fraction.js/4.2.1: 982 | resolution: {integrity: sha512-/KxoyCnPM0GwYI4NN0Iag38Tqt+od3/mLuguepLgCAKPn0ZhC544nssAW0tG2/00zXEYl9W+7hwAIpLHo6Oc7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fraction.js/-/fraction.js-4.2.1.tgz} 983 | name: fraction.js 984 | version: 4.2.1 985 | dev: true 986 | 987 | registry.npmmirror.com/fs.realpath/1.0.0: 988 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz} 989 | name: fs.realpath 990 | version: 1.0.0 991 | dev: true 992 | 993 | registry.npmmirror.com/fsevents/2.3.2: 994 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz} 995 | name: fsevents 996 | version: 2.3.2 997 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 998 | os: [darwin] 999 | requiresBuild: true 1000 | dev: true 1001 | optional: true 1002 | 1003 | registry.npmmirror.com/function-bind/1.1.1: 1004 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz} 1005 | name: function-bind 1006 | version: 1.1.1 1007 | dev: true 1008 | 1009 | registry.npmmirror.com/get-func-name/2.0.0: 1010 | resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-func-name/-/get-func-name-2.0.0.tgz} 1011 | name: get-func-name 1012 | version: 2.0.0 1013 | dev: true 1014 | 1015 | registry.npmmirror.com/glob-parent/5.1.2: 1016 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz} 1017 | name: glob-parent 1018 | version: 5.1.2 1019 | engines: {node: '>= 6'} 1020 | dependencies: 1021 | is-glob: registry.npmmirror.com/is-glob/4.0.3 1022 | dev: true 1023 | 1024 | registry.npmmirror.com/glob-parent/6.0.2: 1025 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz} 1026 | name: glob-parent 1027 | version: 6.0.2 1028 | engines: {node: '>=10.13.0'} 1029 | dependencies: 1030 | is-glob: registry.npmmirror.com/is-glob/4.0.3 1031 | dev: true 1032 | 1033 | registry.npmmirror.com/glob/7.1.6: 1034 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob/-/glob-7.1.6.tgz} 1035 | name: glob 1036 | version: 7.1.6 1037 | dependencies: 1038 | fs.realpath: registry.npmmirror.com/fs.realpath/1.0.0 1039 | inflight: registry.npmmirror.com/inflight/1.0.6 1040 | inherits: registry.npmmirror.com/inherits/2.0.4 1041 | minimatch: registry.npmmirror.com/minimatch/3.1.2 1042 | once: registry.npmmirror.com/once/1.4.0 1043 | path-is-absolute: registry.npmmirror.com/path-is-absolute/1.0.1 1044 | dev: true 1045 | 1046 | registry.npmmirror.com/has/1.0.3: 1047 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has/-/has-1.0.3.tgz} 1048 | name: has 1049 | version: 1.0.3 1050 | engines: {node: '>= 0.4.0'} 1051 | dependencies: 1052 | function-bind: registry.npmmirror.com/function-bind/1.1.1 1053 | dev: true 1054 | 1055 | registry.npmmirror.com/he/1.2.0: 1056 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/he/-/he-1.2.0.tgz} 1057 | name: he 1058 | version: 1.2.0 1059 | hasBin: true 1060 | dev: true 1061 | 1062 | registry.npmmirror.com/inflight/1.0.6: 1063 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz} 1064 | name: inflight 1065 | version: 1.0.6 1066 | dependencies: 1067 | once: registry.npmmirror.com/once/1.4.0 1068 | wrappy: registry.npmmirror.com/wrappy/1.0.2 1069 | dev: true 1070 | 1071 | registry.npmmirror.com/inherits/2.0.4: 1072 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz} 1073 | name: inherits 1074 | version: 2.0.4 1075 | dev: true 1076 | 1077 | registry.npmmirror.com/is-binary-path/2.1.0: 1078 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz} 1079 | name: is-binary-path 1080 | version: 2.1.0 1081 | engines: {node: '>=8'} 1082 | dependencies: 1083 | binary-extensions: registry.npmmirror.com/binary-extensions/2.2.0 1084 | dev: true 1085 | 1086 | registry.npmmirror.com/is-core-module/2.13.0: 1087 | resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.0.tgz} 1088 | name: is-core-module 1089 | version: 2.13.0 1090 | dependencies: 1091 | has: registry.npmmirror.com/has/1.0.3 1092 | dev: true 1093 | 1094 | registry.npmmirror.com/is-extglob/2.1.1: 1095 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz} 1096 | name: is-extglob 1097 | version: 2.1.1 1098 | engines: {node: '>=0.10.0'} 1099 | dev: true 1100 | 1101 | registry.npmmirror.com/is-glob/4.0.3: 1102 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz} 1103 | name: is-glob 1104 | version: 4.0.3 1105 | engines: {node: '>=0.10.0'} 1106 | dependencies: 1107 | is-extglob: registry.npmmirror.com/is-extglob/2.1.1 1108 | dev: true 1109 | 1110 | registry.npmmirror.com/is-number/7.0.0: 1111 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz} 1112 | name: is-number 1113 | version: 7.0.0 1114 | engines: {node: '>=0.12.0'} 1115 | dev: true 1116 | 1117 | registry.npmmirror.com/jiti/1.19.3: 1118 | resolution: {integrity: sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jiti/-/jiti-1.19.3.tgz} 1119 | name: jiti 1120 | version: 1.19.3 1121 | hasBin: true 1122 | dev: true 1123 | 1124 | registry.npmmirror.com/jsonc-parser/3.2.0: 1125 | resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz} 1126 | name: jsonc-parser 1127 | version: 3.2.0 1128 | dev: true 1129 | 1130 | registry.npmmirror.com/lilconfig/2.1.0: 1131 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz} 1132 | name: lilconfig 1133 | version: 2.1.0 1134 | engines: {node: '>=10'} 1135 | dev: true 1136 | 1137 | registry.npmmirror.com/lines-and-columns/1.2.4: 1138 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz} 1139 | name: lines-and-columns 1140 | version: 1.2.4 1141 | dev: true 1142 | 1143 | registry.npmmirror.com/local-pkg/0.4.3: 1144 | resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.3.tgz} 1145 | name: local-pkg 1146 | version: 0.4.3 1147 | engines: {node: '>=14'} 1148 | dev: true 1149 | 1150 | registry.npmmirror.com/loupe/2.3.6: 1151 | resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loupe/-/loupe-2.3.6.tgz} 1152 | name: loupe 1153 | version: 2.3.6 1154 | dependencies: 1155 | get-func-name: registry.npmmirror.com/get-func-name/2.0.0 1156 | dev: true 1157 | 1158 | registry.npmmirror.com/lru-cache/6.0.0: 1159 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz} 1160 | name: lru-cache 1161 | version: 6.0.0 1162 | engines: {node: '>=10'} 1163 | dependencies: 1164 | yallist: registry.npmmirror.com/yallist/4.0.0 1165 | dev: true 1166 | 1167 | registry.npmmirror.com/magic-string/0.30.3: 1168 | resolution: {integrity: sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/magic-string/-/magic-string-0.30.3.tgz} 1169 | name: magic-string 1170 | version: 0.30.3 1171 | engines: {node: '>=12'} 1172 | dependencies: 1173 | '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.15 1174 | 1175 | registry.npmmirror.com/merge2/1.4.1: 1176 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz} 1177 | name: merge2 1178 | version: 1.4.1 1179 | engines: {node: '>= 8'} 1180 | dev: true 1181 | 1182 | registry.npmmirror.com/micromatch/4.0.5: 1183 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz} 1184 | name: micromatch 1185 | version: 4.0.5 1186 | engines: {node: '>=8.6'} 1187 | dependencies: 1188 | braces: registry.npmmirror.com/braces/3.0.2 1189 | picomatch: registry.npmmirror.com/picomatch/2.3.1 1190 | dev: true 1191 | 1192 | registry.npmmirror.com/minimatch/3.1.2: 1193 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz} 1194 | name: minimatch 1195 | version: 3.1.2 1196 | dependencies: 1197 | brace-expansion: registry.npmmirror.com/brace-expansion/1.1.11 1198 | dev: true 1199 | 1200 | registry.npmmirror.com/minimatch/9.0.3: 1201 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-9.0.3.tgz} 1202 | name: minimatch 1203 | version: 9.0.3 1204 | engines: {node: '>=16 || 14 >=14.17'} 1205 | dependencies: 1206 | brace-expansion: registry.npmmirror.com/brace-expansion/2.0.1 1207 | dev: true 1208 | 1209 | registry.npmmirror.com/mlly/1.4.0: 1210 | resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mlly/-/mlly-1.4.0.tgz} 1211 | name: mlly 1212 | version: 1.4.0 1213 | dependencies: 1214 | acorn: registry.npmmirror.com/acorn/8.10.0 1215 | pathe: registry.npmmirror.com/pathe/1.1.1 1216 | pkg-types: registry.npmmirror.com/pkg-types/1.0.3 1217 | ufo: registry.npmmirror.com/ufo/1.2.0 1218 | dev: true 1219 | 1220 | registry.npmmirror.com/ms/2.1.2: 1221 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz} 1222 | name: ms 1223 | version: 2.1.2 1224 | dev: true 1225 | 1226 | registry.npmmirror.com/muggle-string/0.3.1: 1227 | resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/muggle-string/-/muggle-string-0.3.1.tgz} 1228 | name: muggle-string 1229 | version: 0.3.1 1230 | dev: true 1231 | 1232 | registry.npmmirror.com/mz/2.7.0: 1233 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz} 1234 | name: mz 1235 | version: 2.7.0 1236 | dependencies: 1237 | any-promise: registry.npmmirror.com/any-promise/1.3.0 1238 | object-assign: registry.npmmirror.com/object-assign/4.1.1 1239 | thenify-all: registry.npmmirror.com/thenify-all/1.6.0 1240 | dev: true 1241 | 1242 | registry.npmmirror.com/nanoid/3.3.6: 1243 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz} 1244 | name: nanoid 1245 | version: 3.3.6 1246 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1247 | hasBin: true 1248 | 1249 | registry.npmmirror.com/node-releases/2.0.13: 1250 | resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-releases/-/node-releases-2.0.13.tgz} 1251 | name: node-releases 1252 | version: 2.0.13 1253 | dev: true 1254 | 1255 | registry.npmmirror.com/normalize-path/3.0.0: 1256 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz} 1257 | name: normalize-path 1258 | version: 3.0.0 1259 | engines: {node: '>=0.10.0'} 1260 | dev: true 1261 | 1262 | registry.npmmirror.com/normalize-range/0.1.2: 1263 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz} 1264 | name: normalize-range 1265 | version: 0.1.2 1266 | engines: {node: '>=0.10.0'} 1267 | dev: true 1268 | 1269 | registry.npmmirror.com/object-assign/4.1.1: 1270 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz} 1271 | name: object-assign 1272 | version: 4.1.1 1273 | engines: {node: '>=0.10.0'} 1274 | dev: true 1275 | 1276 | registry.npmmirror.com/object-hash/3.0.0: 1277 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-hash/-/object-hash-3.0.0.tgz} 1278 | name: object-hash 1279 | version: 3.0.0 1280 | engines: {node: '>= 6'} 1281 | dev: true 1282 | 1283 | registry.npmmirror.com/once/1.4.0: 1284 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/once/-/once-1.4.0.tgz} 1285 | name: once 1286 | version: 1.4.0 1287 | dependencies: 1288 | wrappy: registry.npmmirror.com/wrappy/1.0.2 1289 | dev: true 1290 | 1291 | registry.npmmirror.com/p-limit/4.0.0: 1292 | resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-limit/-/p-limit-4.0.0.tgz} 1293 | name: p-limit 1294 | version: 4.0.0 1295 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1296 | dependencies: 1297 | yocto-queue: registry.npmmirror.com/yocto-queue/1.0.0 1298 | dev: true 1299 | 1300 | registry.npmmirror.com/path-is-absolute/1.0.1: 1301 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz} 1302 | name: path-is-absolute 1303 | version: 1.0.1 1304 | engines: {node: '>=0.10.0'} 1305 | dev: true 1306 | 1307 | registry.npmmirror.com/path-parse/1.0.7: 1308 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz} 1309 | name: path-parse 1310 | version: 1.0.7 1311 | dev: true 1312 | 1313 | registry.npmmirror.com/pathe/1.1.1: 1314 | resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pathe/-/pathe-1.1.1.tgz} 1315 | name: pathe 1316 | version: 1.1.1 1317 | dev: true 1318 | 1319 | registry.npmmirror.com/pathval/1.1.1: 1320 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pathval/-/pathval-1.1.1.tgz} 1321 | name: pathval 1322 | version: 1.1.1 1323 | dev: true 1324 | 1325 | registry.npmmirror.com/picocolors/1.0.0: 1326 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz} 1327 | name: picocolors 1328 | version: 1.0.0 1329 | 1330 | registry.npmmirror.com/picomatch/2.3.1: 1331 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz} 1332 | name: picomatch 1333 | version: 2.3.1 1334 | engines: {node: '>=8.6'} 1335 | dev: true 1336 | 1337 | registry.npmmirror.com/pify/2.3.0: 1338 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz} 1339 | name: pify 1340 | version: 2.3.0 1341 | engines: {node: '>=0.10.0'} 1342 | dev: true 1343 | 1344 | registry.npmmirror.com/pirates/4.0.6: 1345 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pirates/-/pirates-4.0.6.tgz} 1346 | name: pirates 1347 | version: 4.0.6 1348 | engines: {node: '>= 6'} 1349 | dev: true 1350 | 1351 | registry.npmmirror.com/pkg-types/1.0.3: 1352 | resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pkg-types/-/pkg-types-1.0.3.tgz} 1353 | name: pkg-types 1354 | version: 1.0.3 1355 | dependencies: 1356 | jsonc-parser: registry.npmmirror.com/jsonc-parser/3.2.0 1357 | mlly: registry.npmmirror.com/mlly/1.4.0 1358 | pathe: registry.npmmirror.com/pathe/1.1.1 1359 | dev: true 1360 | 1361 | registry.npmmirror.com/postcss-import/15.1.0_postcss@8.4.28: 1362 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-import/-/postcss-import-15.1.0.tgz} 1363 | id: registry.npmmirror.com/postcss-import/15.1.0 1364 | name: postcss-import 1365 | version: 15.1.0 1366 | engines: {node: '>=14.0.0'} 1367 | peerDependencies: 1368 | postcss: ^8.0.0 1369 | dependencies: 1370 | postcss: registry.npmmirror.com/postcss/8.4.28 1371 | postcss-value-parser: registry.npmmirror.com/postcss-value-parser/4.2.0 1372 | read-cache: registry.npmmirror.com/read-cache/1.0.0 1373 | resolve: registry.npmmirror.com/resolve/1.22.4 1374 | dev: true 1375 | 1376 | registry.npmmirror.com/postcss-js/4.0.1_postcss@8.4.28: 1377 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-js/-/postcss-js-4.0.1.tgz} 1378 | id: registry.npmmirror.com/postcss-js/4.0.1 1379 | name: postcss-js 1380 | version: 4.0.1 1381 | engines: {node: ^12 || ^14 || >= 16} 1382 | peerDependencies: 1383 | postcss: ^8.4.21 1384 | dependencies: 1385 | camelcase-css: registry.npmmirror.com/camelcase-css/2.0.1 1386 | postcss: registry.npmmirror.com/postcss/8.4.28 1387 | dev: true 1388 | 1389 | registry.npmmirror.com/postcss-load-config/4.0.1_postcss@8.4.28: 1390 | resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz} 1391 | id: registry.npmmirror.com/postcss-load-config/4.0.1 1392 | name: postcss-load-config 1393 | version: 4.0.1 1394 | engines: {node: '>= 14'} 1395 | peerDependencies: 1396 | postcss: '>=8.0.9' 1397 | ts-node: '>=9.0.0' 1398 | peerDependenciesMeta: 1399 | postcss: 1400 | optional: true 1401 | ts-node: 1402 | optional: true 1403 | dependencies: 1404 | lilconfig: registry.npmmirror.com/lilconfig/2.1.0 1405 | postcss: registry.npmmirror.com/postcss/8.4.28 1406 | yaml: registry.npmmirror.com/yaml/2.3.1 1407 | dev: true 1408 | 1409 | registry.npmmirror.com/postcss-nested/6.0.1_postcss@8.4.28: 1410 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-nested/-/postcss-nested-6.0.1.tgz} 1411 | id: registry.npmmirror.com/postcss-nested/6.0.1 1412 | name: postcss-nested 1413 | version: 6.0.1 1414 | engines: {node: '>=12.0'} 1415 | peerDependencies: 1416 | postcss: ^8.2.14 1417 | dependencies: 1418 | postcss: registry.npmmirror.com/postcss/8.4.28 1419 | postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser/6.0.13 1420 | dev: true 1421 | 1422 | registry.npmmirror.com/postcss-selector-parser/6.0.13: 1423 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz} 1424 | name: postcss-selector-parser 1425 | version: 6.0.13 1426 | engines: {node: '>=4'} 1427 | dependencies: 1428 | cssesc: registry.npmmirror.com/cssesc/3.0.0 1429 | util-deprecate: registry.npmmirror.com/util-deprecate/1.0.2 1430 | dev: true 1431 | 1432 | registry.npmmirror.com/postcss-value-parser/4.2.0: 1433 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz} 1434 | name: postcss-value-parser 1435 | version: 4.2.0 1436 | dev: true 1437 | 1438 | registry.npmmirror.com/postcss/8.4.28: 1439 | resolution: {integrity: sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss/-/postcss-8.4.28.tgz} 1440 | name: postcss 1441 | version: 8.4.28 1442 | engines: {node: ^10 || ^12 || >=14} 1443 | dependencies: 1444 | nanoid: registry.npmmirror.com/nanoid/3.3.6 1445 | picocolors: registry.npmmirror.com/picocolors/1.0.0 1446 | source-map-js: registry.npmmirror.com/source-map-js/1.0.2 1447 | 1448 | registry.npmmirror.com/pretty-format/29.6.3: 1449 | resolution: {integrity: sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pretty-format/-/pretty-format-29.6.3.tgz} 1450 | name: pretty-format 1451 | version: 29.6.3 1452 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1453 | dependencies: 1454 | '@jest/schemas': registry.npmmirror.com/@jest/schemas/29.6.3 1455 | ansi-styles: registry.npmmirror.com/ansi-styles/5.2.0 1456 | react-is: registry.npmmirror.com/react-is/18.2.0 1457 | dev: true 1458 | 1459 | registry.npmmirror.com/queue-microtask/1.2.3: 1460 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz} 1461 | name: queue-microtask 1462 | version: 1.2.3 1463 | dev: true 1464 | 1465 | registry.npmmirror.com/react-is/18.2.0: 1466 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/react-is/-/react-is-18.2.0.tgz} 1467 | name: react-is 1468 | version: 18.2.0 1469 | dev: true 1470 | 1471 | registry.npmmirror.com/read-cache/1.0.0: 1472 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz} 1473 | name: read-cache 1474 | version: 1.0.0 1475 | dependencies: 1476 | pify: registry.npmmirror.com/pify/2.3.0 1477 | dev: true 1478 | 1479 | registry.npmmirror.com/readdirp/3.6.0: 1480 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz} 1481 | name: readdirp 1482 | version: 3.6.0 1483 | engines: {node: '>=8.10.0'} 1484 | dependencies: 1485 | picomatch: registry.npmmirror.com/picomatch/2.3.1 1486 | dev: true 1487 | 1488 | registry.npmmirror.com/resolve/1.22.4: 1489 | resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve/-/resolve-1.22.4.tgz} 1490 | name: resolve 1491 | version: 1.22.4 1492 | hasBin: true 1493 | dependencies: 1494 | is-core-module: registry.npmmirror.com/is-core-module/2.13.0 1495 | path-parse: registry.npmmirror.com/path-parse/1.0.7 1496 | supports-preserve-symlinks-flag: registry.npmmirror.com/supports-preserve-symlinks-flag/1.0.0 1497 | dev: true 1498 | 1499 | registry.npmmirror.com/reusify/1.0.4: 1500 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz} 1501 | name: reusify 1502 | version: 1.0.4 1503 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1504 | dev: true 1505 | 1506 | registry.npmmirror.com/rollup/3.28.0: 1507 | resolution: {integrity: sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rollup/-/rollup-3.28.0.tgz} 1508 | name: rollup 1509 | version: 3.28.0 1510 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 1511 | hasBin: true 1512 | optionalDependencies: 1513 | fsevents: registry.npmmirror.com/fsevents/2.3.2 1514 | dev: true 1515 | 1516 | registry.npmmirror.com/run-parallel/1.2.0: 1517 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz} 1518 | name: run-parallel 1519 | version: 1.2.0 1520 | dependencies: 1521 | queue-microtask: registry.npmmirror.com/queue-microtask/1.2.3 1522 | dev: true 1523 | 1524 | registry.npmmirror.com/semver/7.5.4: 1525 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz} 1526 | name: semver 1527 | version: 7.5.4 1528 | engines: {node: '>=10'} 1529 | hasBin: true 1530 | dependencies: 1531 | lru-cache: registry.npmmirror.com/lru-cache/6.0.0 1532 | dev: true 1533 | 1534 | registry.npmmirror.com/siginfo/2.0.0: 1535 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/siginfo/-/siginfo-2.0.0.tgz} 1536 | name: siginfo 1537 | version: 2.0.0 1538 | dev: true 1539 | 1540 | registry.npmmirror.com/source-map-js/1.0.2: 1541 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz} 1542 | name: source-map-js 1543 | version: 1.0.2 1544 | engines: {node: '>=0.10.0'} 1545 | 1546 | registry.npmmirror.com/stackback/0.0.2: 1547 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stackback/-/stackback-0.0.2.tgz} 1548 | name: stackback 1549 | version: 0.0.2 1550 | dev: true 1551 | 1552 | registry.npmmirror.com/std-env/3.4.1: 1553 | resolution: {integrity: sha512-8ff1ZsX3NZMNEmDZmINWcFb7CIhPGKZO+TSVytJxJmFzZjAHtAHOR2GuIur7QXlgwY9Md7wNlu4Q7TtSvbu/SA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/std-env/-/std-env-3.4.1.tgz} 1554 | name: std-env 1555 | version: 3.4.1 1556 | dev: true 1557 | 1558 | registry.npmmirror.com/strip-literal/1.3.0: 1559 | resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-literal/-/strip-literal-1.3.0.tgz} 1560 | name: strip-literal 1561 | version: 1.3.0 1562 | dependencies: 1563 | acorn: registry.npmmirror.com/acorn/8.10.0 1564 | dev: true 1565 | 1566 | registry.npmmirror.com/sucrase/3.34.0: 1567 | resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sucrase/-/sucrase-3.34.0.tgz} 1568 | name: sucrase 1569 | version: 3.34.0 1570 | engines: {node: '>=8'} 1571 | hasBin: true 1572 | dependencies: 1573 | '@jridgewell/gen-mapping': registry.npmmirror.com/@jridgewell/gen-mapping/0.3.3 1574 | commander: registry.npmmirror.com/commander/4.1.1 1575 | glob: registry.npmmirror.com/glob/7.1.6 1576 | lines-and-columns: registry.npmmirror.com/lines-and-columns/1.2.4 1577 | mz: registry.npmmirror.com/mz/2.7.0 1578 | pirates: registry.npmmirror.com/pirates/4.0.6 1579 | ts-interface-checker: registry.npmmirror.com/ts-interface-checker/0.1.13 1580 | dev: true 1581 | 1582 | registry.npmmirror.com/supports-preserve-symlinks-flag/1.0.0: 1583 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz} 1584 | name: supports-preserve-symlinks-flag 1585 | version: 1.0.0 1586 | engines: {node: '>= 0.4'} 1587 | dev: true 1588 | 1589 | registry.npmmirror.com/tailwindcss/3.3.3: 1590 | resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.3.3.tgz} 1591 | name: tailwindcss 1592 | version: 3.3.3 1593 | engines: {node: '>=14.0.0'} 1594 | hasBin: true 1595 | dependencies: 1596 | '@alloc/quick-lru': registry.npmmirror.com/@alloc/quick-lru/5.2.0 1597 | arg: registry.npmmirror.com/arg/5.0.2 1598 | chokidar: registry.npmmirror.com/chokidar/3.5.3 1599 | didyoumean: registry.npmmirror.com/didyoumean/1.2.2 1600 | dlv: registry.npmmirror.com/dlv/1.1.3 1601 | fast-glob: registry.npmmirror.com/fast-glob/3.3.1 1602 | glob-parent: registry.npmmirror.com/glob-parent/6.0.2 1603 | is-glob: registry.npmmirror.com/is-glob/4.0.3 1604 | jiti: registry.npmmirror.com/jiti/1.19.3 1605 | lilconfig: registry.npmmirror.com/lilconfig/2.1.0 1606 | micromatch: registry.npmmirror.com/micromatch/4.0.5 1607 | normalize-path: registry.npmmirror.com/normalize-path/3.0.0 1608 | object-hash: registry.npmmirror.com/object-hash/3.0.0 1609 | picocolors: registry.npmmirror.com/picocolors/1.0.0 1610 | postcss: registry.npmmirror.com/postcss/8.4.28 1611 | postcss-import: registry.npmmirror.com/postcss-import/15.1.0_postcss@8.4.28 1612 | postcss-js: registry.npmmirror.com/postcss-js/4.0.1_postcss@8.4.28 1613 | postcss-load-config: registry.npmmirror.com/postcss-load-config/4.0.1_postcss@8.4.28 1614 | postcss-nested: registry.npmmirror.com/postcss-nested/6.0.1_postcss@8.4.28 1615 | postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser/6.0.13 1616 | resolve: registry.npmmirror.com/resolve/1.22.4 1617 | sucrase: registry.npmmirror.com/sucrase/3.34.0 1618 | transitivePeerDependencies: 1619 | - ts-node 1620 | dev: true 1621 | 1622 | registry.npmmirror.com/thenify-all/1.6.0: 1623 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz} 1624 | name: thenify-all 1625 | version: 1.6.0 1626 | engines: {node: '>=0.8'} 1627 | dependencies: 1628 | thenify: registry.npmmirror.com/thenify/3.3.1 1629 | dev: true 1630 | 1631 | registry.npmmirror.com/thenify/3.3.1: 1632 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz} 1633 | name: thenify 1634 | version: 3.3.1 1635 | dependencies: 1636 | any-promise: registry.npmmirror.com/any-promise/1.3.0 1637 | dev: true 1638 | 1639 | registry.npmmirror.com/tinybench/2.5.0: 1640 | resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tinybench/-/tinybench-2.5.0.tgz} 1641 | name: tinybench 1642 | version: 2.5.0 1643 | dev: true 1644 | 1645 | registry.npmmirror.com/tinypool/0.7.0: 1646 | resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tinypool/-/tinypool-0.7.0.tgz} 1647 | name: tinypool 1648 | version: 0.7.0 1649 | engines: {node: '>=14.0.0'} 1650 | dev: true 1651 | 1652 | registry.npmmirror.com/tinyspy/2.1.1: 1653 | resolution: {integrity: sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tinyspy/-/tinyspy-2.1.1.tgz} 1654 | name: tinyspy 1655 | version: 2.1.1 1656 | engines: {node: '>=14.0.0'} 1657 | dev: true 1658 | 1659 | registry.npmmirror.com/to-fast-properties/2.0.0: 1660 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz} 1661 | name: to-fast-properties 1662 | version: 2.0.0 1663 | engines: {node: '>=4'} 1664 | 1665 | registry.npmmirror.com/to-regex-range/5.0.1: 1666 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz} 1667 | name: to-regex-range 1668 | version: 5.0.1 1669 | engines: {node: '>=8.0'} 1670 | dependencies: 1671 | is-number: registry.npmmirror.com/is-number/7.0.0 1672 | dev: true 1673 | 1674 | registry.npmmirror.com/ts-interface-checker/0.1.13: 1675 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz} 1676 | name: ts-interface-checker 1677 | version: 0.1.13 1678 | dev: true 1679 | 1680 | registry.npmmirror.com/type-detect/4.0.8: 1681 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-detect/-/type-detect-4.0.8.tgz} 1682 | name: type-detect 1683 | version: 4.0.8 1684 | engines: {node: '>=4'} 1685 | dev: true 1686 | 1687 | registry.npmmirror.com/typescript/5.1.6: 1688 | resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/typescript/-/typescript-5.1.6.tgz} 1689 | name: typescript 1690 | version: 5.1.6 1691 | engines: {node: '>=14.17'} 1692 | hasBin: true 1693 | dev: true 1694 | 1695 | registry.npmmirror.com/ufo/1.2.0: 1696 | resolution: {integrity: sha512-RsPyTbqORDNDxqAdQPQBpgqhWle1VcTSou/FraClYlHf6TZnQcGslpLcAphNR+sQW4q5lLWLbOsRlh9j24baQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ufo/-/ufo-1.2.0.tgz} 1697 | name: ufo 1698 | version: 1.2.0 1699 | dev: true 1700 | 1701 | registry.npmmirror.com/update-browserslist-db/1.0.11_browserslist@4.21.10: 1702 | resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz} 1703 | id: registry.npmmirror.com/update-browserslist-db/1.0.11 1704 | name: update-browserslist-db 1705 | version: 1.0.11 1706 | hasBin: true 1707 | peerDependencies: 1708 | browserslist: '>= 4.21.0' 1709 | dependencies: 1710 | browserslist: registry.npmmirror.com/browserslist/4.21.10 1711 | escalade: registry.npmmirror.com/escalade/3.1.1 1712 | picocolors: registry.npmmirror.com/picocolors/1.0.0 1713 | dev: true 1714 | 1715 | registry.npmmirror.com/util-deprecate/1.0.2: 1716 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz} 1717 | name: util-deprecate 1718 | version: 1.0.2 1719 | dev: true 1720 | 1721 | registry.npmmirror.com/vite-node/0.34.2_@types+node@20.5.1: 1722 | resolution: {integrity: sha512-JtW249Zm3FB+F7pQfH56uWSdlltCo1IOkZW5oHBzeQo0iX4jtC7o1t9aILMGd9kVekXBP2lfJBEQt9rBh07ebA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite-node/-/vite-node-0.34.2.tgz} 1723 | id: registry.npmmirror.com/vite-node/0.34.2 1724 | name: vite-node 1725 | version: 0.34.2 1726 | engines: {node: '>=v14.18.0'} 1727 | hasBin: true 1728 | dependencies: 1729 | cac: registry.npmmirror.com/cac/6.7.14 1730 | debug: registry.npmmirror.com/debug/4.3.4 1731 | mlly: registry.npmmirror.com/mlly/1.4.0 1732 | pathe: registry.npmmirror.com/pathe/1.1.1 1733 | picocolors: registry.npmmirror.com/picocolors/1.0.0 1734 | vite: registry.npmmirror.com/vite/4.4.9_@types+node@20.5.1 1735 | transitivePeerDependencies: 1736 | - '@types/node' 1737 | - less 1738 | - lightningcss 1739 | - sass 1740 | - stylus 1741 | - sugarss 1742 | - supports-color 1743 | - terser 1744 | dev: true 1745 | 1746 | registry.npmmirror.com/vite/4.4.9: 1747 | resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite/-/vite-4.4.9.tgz} 1748 | name: vite 1749 | version: 4.4.9 1750 | engines: {node: ^14.18.0 || >=16.0.0} 1751 | hasBin: true 1752 | peerDependencies: 1753 | '@types/node': '>= 14' 1754 | less: '*' 1755 | lightningcss: ^1.21.0 1756 | sass: '*' 1757 | stylus: '*' 1758 | sugarss: '*' 1759 | terser: ^5.4.0 1760 | peerDependenciesMeta: 1761 | '@types/node': 1762 | optional: true 1763 | less: 1764 | optional: true 1765 | lightningcss: 1766 | optional: true 1767 | sass: 1768 | optional: true 1769 | stylus: 1770 | optional: true 1771 | sugarss: 1772 | optional: true 1773 | terser: 1774 | optional: true 1775 | dependencies: 1776 | esbuild: registry.npmmirror.com/esbuild/0.18.20 1777 | postcss: registry.npmmirror.com/postcss/8.4.28 1778 | rollup: registry.npmmirror.com/rollup/3.28.0 1779 | optionalDependencies: 1780 | fsevents: registry.npmmirror.com/fsevents/2.3.2 1781 | dev: true 1782 | 1783 | registry.npmmirror.com/vite/4.4.9_@types+node@20.5.1: 1784 | resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite/-/vite-4.4.9.tgz} 1785 | id: registry.npmmirror.com/vite/4.4.9 1786 | name: vite 1787 | version: 4.4.9 1788 | engines: {node: ^14.18.0 || >=16.0.0} 1789 | hasBin: true 1790 | peerDependencies: 1791 | '@types/node': '>= 14' 1792 | less: '*' 1793 | lightningcss: ^1.21.0 1794 | sass: '*' 1795 | stylus: '*' 1796 | sugarss: '*' 1797 | terser: ^5.4.0 1798 | peerDependenciesMeta: 1799 | '@types/node': 1800 | optional: true 1801 | less: 1802 | optional: true 1803 | lightningcss: 1804 | optional: true 1805 | sass: 1806 | optional: true 1807 | stylus: 1808 | optional: true 1809 | sugarss: 1810 | optional: true 1811 | terser: 1812 | optional: true 1813 | dependencies: 1814 | '@types/node': registry.npmmirror.com/@types/node/20.5.1 1815 | esbuild: registry.npmmirror.com/esbuild/0.18.20 1816 | postcss: registry.npmmirror.com/postcss/8.4.28 1817 | rollup: registry.npmmirror.com/rollup/3.28.0 1818 | optionalDependencies: 1819 | fsevents: registry.npmmirror.com/fsevents/2.3.2 1820 | dev: true 1821 | 1822 | registry.npmmirror.com/vitest/0.34.2: 1823 | resolution: {integrity: sha512-WgaIvBbjsSYMq/oiMlXUI7KflELmzM43BEvkdC/8b5CAod4ryAiY2z8uR6Crbi5Pjnu5oOmhKa9sy7uk6paBxQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vitest/-/vitest-0.34.2.tgz} 1824 | name: vitest 1825 | version: 0.34.2 1826 | engines: {node: '>=v14.18.0'} 1827 | hasBin: true 1828 | peerDependencies: 1829 | '@edge-runtime/vm': '*' 1830 | '@vitest/browser': '*' 1831 | '@vitest/ui': '*' 1832 | happy-dom: '*' 1833 | jsdom: '*' 1834 | playwright: '*' 1835 | safaridriver: '*' 1836 | webdriverio: '*' 1837 | peerDependenciesMeta: 1838 | '@edge-runtime/vm': 1839 | optional: true 1840 | '@vitest/browser': 1841 | optional: true 1842 | '@vitest/ui': 1843 | optional: true 1844 | happy-dom: 1845 | optional: true 1846 | jsdom: 1847 | optional: true 1848 | playwright: 1849 | optional: true 1850 | safaridriver: 1851 | optional: true 1852 | webdriverio: 1853 | optional: true 1854 | dependencies: 1855 | '@types/chai': registry.npmmirror.com/@types/chai/4.3.5 1856 | '@types/chai-subset': registry.npmmirror.com/@types/chai-subset/1.3.3 1857 | '@types/node': registry.npmmirror.com/@types/node/20.5.1 1858 | '@vitest/expect': registry.npmmirror.com/@vitest/expect/0.34.2 1859 | '@vitest/runner': registry.npmmirror.com/@vitest/runner/0.34.2 1860 | '@vitest/snapshot': registry.npmmirror.com/@vitest/snapshot/0.34.2 1861 | '@vitest/spy': registry.npmmirror.com/@vitest/spy/0.34.2 1862 | '@vitest/utils': registry.npmmirror.com/@vitest/utils/0.34.2 1863 | acorn: registry.npmmirror.com/acorn/8.10.0 1864 | acorn-walk: registry.npmmirror.com/acorn-walk/8.2.0 1865 | cac: registry.npmmirror.com/cac/6.7.14 1866 | chai: registry.npmmirror.com/chai/4.3.7 1867 | debug: registry.npmmirror.com/debug/4.3.4 1868 | local-pkg: registry.npmmirror.com/local-pkg/0.4.3 1869 | magic-string: registry.npmmirror.com/magic-string/0.30.3 1870 | pathe: registry.npmmirror.com/pathe/1.1.1 1871 | picocolors: registry.npmmirror.com/picocolors/1.0.0 1872 | std-env: registry.npmmirror.com/std-env/3.4.1 1873 | strip-literal: registry.npmmirror.com/strip-literal/1.3.0 1874 | tinybench: registry.npmmirror.com/tinybench/2.5.0 1875 | tinypool: registry.npmmirror.com/tinypool/0.7.0 1876 | vite: registry.npmmirror.com/vite/4.4.9_@types+node@20.5.1 1877 | vite-node: registry.npmmirror.com/vite-node/0.34.2_@types+node@20.5.1 1878 | why-is-node-running: registry.npmmirror.com/why-is-node-running/2.2.2 1879 | transitivePeerDependencies: 1880 | - less 1881 | - lightningcss 1882 | - sass 1883 | - stylus 1884 | - sugarss 1885 | - supports-color 1886 | - terser 1887 | dev: true 1888 | 1889 | registry.npmmirror.com/vue-router/4.2.4_vue@3.3.4: 1890 | resolution: {integrity: sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-router/-/vue-router-4.2.4.tgz} 1891 | id: registry.npmmirror.com/vue-router/4.2.4 1892 | name: vue-router 1893 | version: 4.2.4 1894 | peerDependencies: 1895 | vue: ^3.2.0 1896 | dependencies: 1897 | '@vue/devtools-api': registry.npmmirror.com/@vue/devtools-api/6.5.0 1898 | vue: registry.npmmirror.com/vue/3.3.4 1899 | dev: false 1900 | 1901 | registry.npmmirror.com/vue-template-compiler/2.7.14: 1902 | resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz} 1903 | name: vue-template-compiler 1904 | version: 2.7.14 1905 | dependencies: 1906 | de-indent: registry.npmmirror.com/de-indent/1.0.2 1907 | he: registry.npmmirror.com/he/1.2.0 1908 | dev: true 1909 | 1910 | registry.npmmirror.com/vue-tsc/1.8.8_typescript@5.1.6: 1911 | resolution: {integrity: sha512-bSydNFQsF7AMvwWsRXD7cBIXaNs/KSjvzWLymq/UtKE36697sboX4EccSHFVxvgdBlI1frYPc/VMKJNB7DFeDQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.8.8.tgz} 1912 | id: registry.npmmirror.com/vue-tsc/1.8.8 1913 | name: vue-tsc 1914 | version: 1.8.8 1915 | hasBin: true 1916 | peerDependencies: 1917 | typescript: '*' 1918 | dependencies: 1919 | '@vue/language-core': registry.npmmirror.com/@vue/language-core/1.8.8_typescript@5.1.6 1920 | '@vue/typescript': registry.npmmirror.com/@vue/typescript/1.8.8_typescript@5.1.6 1921 | semver: registry.npmmirror.com/semver/7.5.4 1922 | typescript: registry.npmmirror.com/typescript/5.1.6 1923 | dev: true 1924 | 1925 | registry.npmmirror.com/vue/3.3.4: 1926 | resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue/-/vue-3.3.4.tgz} 1927 | name: vue 1928 | version: 3.3.4 1929 | dependencies: 1930 | '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom/3.3.4 1931 | '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc/3.3.4 1932 | '@vue/runtime-dom': registry.npmmirror.com/@vue/runtime-dom/3.3.4 1933 | '@vue/server-renderer': registry.npmmirror.com/@vue/server-renderer/3.3.4_vue@3.3.4 1934 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.3.4 1935 | 1936 | registry.npmmirror.com/why-is-node-running/2.2.2: 1937 | resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz} 1938 | name: why-is-node-running 1939 | version: 2.2.2 1940 | engines: {node: '>=8'} 1941 | hasBin: true 1942 | dependencies: 1943 | siginfo: registry.npmmirror.com/siginfo/2.0.0 1944 | stackback: registry.npmmirror.com/stackback/0.0.2 1945 | dev: true 1946 | 1947 | registry.npmmirror.com/wrappy/1.0.2: 1948 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz} 1949 | name: wrappy 1950 | version: 1.0.2 1951 | dev: true 1952 | 1953 | registry.npmmirror.com/yallist/4.0.0: 1954 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz} 1955 | name: yallist 1956 | version: 4.0.0 1957 | dev: true 1958 | 1959 | registry.npmmirror.com/yaml/2.3.1: 1960 | resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yaml/-/yaml-2.3.1.tgz} 1961 | name: yaml 1962 | version: 2.3.1 1963 | engines: {node: '>= 14'} 1964 | dev: true 1965 | 1966 | registry.npmmirror.com/yocto-queue/1.0.0: 1967 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yocto-queue/-/yocto-queue-1.0.0.tgz} 1968 | name: yocto-queue 1969 | version: 1.0.0 1970 | engines: {node: '>=12.20'} 1971 | dev: true 1972 | --------------------------------------------------------------------------------