├── Nuxt3 切换主题色且不闪屏该怎么做? └── demo │ ├── public │ ├── robots.txt │ └── favicon.ico │ ├── server │ └── tsconfig.json │ ├── tsconfig.json │ ├── app.vue │ ├── style │ └── theme.css │ ├── nuxt.config.ts │ ├── store │ ├── index.ts │ └── theme.ts │ ├── .gitignore │ ├── package.json │ ├── README.md │ └── pages │ └── index.vue ├── Nest.js 入门与核心原理解析 ├── toy-nest │ ├── .gitignore │ ├── src │ │ ├── const │ │ │ └── index.ts │ │ ├── common │ │ │ ├── index.ts │ │ │ ├── injectable.ts │ │ │ ├── controller.ts │ │ │ ├── module.ts │ │ │ └── request.ts │ │ ├── types │ │ │ └── index.ts │ │ ├── main.ts │ │ └── core │ │ │ └── index.ts │ ├── tsconfig.json │ ├── package.json │ └── yarn.lock ├── IoC-DI-demo │ ├── .gitignore │ ├── package.json │ ├── tsconfig.json │ ├── src │ │ └── index.ts │ └── yarn.lock ├── decorator-demo │ ├── .gitignore │ ├── tsconfig.json │ ├── package.json │ ├── src │ │ └── index.ts │ └── yarn.lock ├── nest-demo-1 │ ├── .gitignore │ ├── .prettierrc │ ├── tsconfig.build.json │ ├── src │ │ ├── app.service.ts │ │ ├── main.ts │ │ ├── app.module.ts │ │ ├── app.controller.ts │ │ └── app.controller.spec.ts │ ├── nest-cli.json │ ├── test │ │ ├── jest-e2e.json │ │ └── app.e2e-spec.ts │ ├── tsconfig.json │ ├── .eslintrc.js │ ├── package.json │ └── README.md ├── nest-demo-2 │ ├── .gitignore │ ├── .prettierrc │ ├── src │ │ ├── custom.d.ts │ │ ├── app.module.ts │ │ ├── main.ts │ │ └── modules │ │ │ └── user │ │ │ ├── user.module.ts │ │ │ ├── user.service.ts │ │ │ └── user.controller.ts │ ├── tsconfig.build.json │ ├── nest-cli.json │ ├── test │ │ ├── jest-e2e.json │ │ └── app.e2e-spec.ts │ ├── .vscode │ │ └── settings.json │ ├── tsconfig.json │ ├── .eslintrc.js │ ├── package.json │ └── README.md ├── nest-demo-3 │ ├── .gitignore │ ├── .prettierrc │ ├── tsconfig.build.json │ ├── nest-cli.json │ ├── test │ │ ├── jest-e2e.json │ │ └── app.e2e-spec.ts │ ├── tsconfig.json │ ├── .eslintrc.js │ ├── src │ │ └── main.ts │ ├── package.json │ └── README.md └── README.md ├── 逐步解析 koa2 核心实现原理及代码实践 ├── README.md ├── koa │ ├── package.json │ ├── request.js │ ├── response.js │ ├── context.js │ └── application.js ├── test-koa-error.js ├── test.js └── test-koa.js └── README.md /Nuxt3 切换主题色且不闪屏该怎么做?/demo/public/robots.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/toy-nest/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/IoC-DI-demo/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/decorator-demo/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-1/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-2/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-3/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist -------------------------------------------------------------------------------- /逐步解析 koa2 核心实现原理及代码实践/README.md: -------------------------------------------------------------------------------- 1 | 在当前目录下执行: 2 | 3 | ``` 4 | node ./test.js 5 | ``` -------------------------------------------------------------------------------- /逐步解析 koa2 核心实现原理及代码实践/koa/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": "./application.js" 3 | } -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/README.md: -------------------------------------------------------------------------------- 1 | 此目录下有所有文中提到的过程源码,查看 `package.json` 中的 `scripts` 查看启动命令。 2 | 3 | 别忘记装依赖哦~ -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-1/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all" 4 | } -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-2/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all" 4 | } -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-3/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all" 4 | } -------------------------------------------------------------------------------- /Nuxt3 切换主题色且不闪屏该怎么做?/demo/server/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../.nuxt/tsconfig.server.json" 3 | } 4 | -------------------------------------------------------------------------------- /Nuxt3 切换主题色且不闪屏该怎么做?/demo/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vortesnail/blog/HEAD/Nuxt3 切换主题色且不闪屏该怎么做?/demo/public/favicon.ico -------------------------------------------------------------------------------- /Nuxt3 切换主题色且不闪屏该怎么做?/demo/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | // https://nuxt.com/docs/guide/concepts/typescript 3 | "extends": "./.nuxt/tsconfig.json" 4 | } 5 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-2/src/custom.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace globalThis { 2 | // eslint-disable-next-line no-var 3 | var UsersStorage: any[]; 4 | } 5 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-1/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-2/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-3/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /Nuxt3 切换主题色且不闪屏该怎么做?/demo/app.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /Nuxt3 切换主题色且不闪屏该怎么做?/demo/style/theme.css: -------------------------------------------------------------------------------- 1 | body { 2 | --color-text: #000; 3 | --color-bg: #fff; 4 | } 5 | 6 | body[theme='dark'] { 7 | --color-text: #fff; 8 | --color-bg: #0d1117; 9 | } 10 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/toy-nest/src/const/index.ts: -------------------------------------------------------------------------------- 1 | export const INJECTABLE_WATERMARK = 'injectable_watermark'; 2 | export const PATH_METADATA = 'path_metadata'; 3 | export const METHOD_METADATA = 'method_metadata'; 4 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-1/src/app.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@nestjs/common'; 2 | 3 | @Injectable() 4 | export class AppService { 5 | getHello(): string { 6 | return 'Hello World!'; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /逐步解析 koa2 核心实现原理及代码实践/koa/request.js: -------------------------------------------------------------------------------- 1 | const request = { 2 | get url() { 3 | return this.req.url 4 | }, 5 | set url(val) { 6 | this.req.url = val 7 | }, 8 | } 9 | 10 | module.exports = request -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-1/nest-cli.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/nest-cli", 3 | "collection": "@nestjs/schematics", 4 | "sourceRoot": "src", 5 | "compilerOptions": { 6 | "deleteOutDir": true 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-2/nest-cli.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/nest-cli", 3 | "collection": "@nestjs/schematics", 4 | "sourceRoot": "src", 5 | "compilerOptions": { 6 | "deleteOutDir": true 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-3/nest-cli.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/nest-cli", 3 | "collection": "@nestjs/schematics", 4 | "sourceRoot": "src", 5 | "compilerOptions": { 6 | "deleteOutDir": true 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/toy-nest/src/common/index.ts: -------------------------------------------------------------------------------- 1 | import Injectable from './injectable'; 2 | import Controller from './controller'; 3 | import Module from './module'; 4 | import { Get } from './request'; 5 | 6 | export { Injectable, Controller, Module, Get }; 7 | -------------------------------------------------------------------------------- /Nuxt3 切换主题色且不闪屏该怎么做?/demo/nuxt.config.ts: -------------------------------------------------------------------------------- 1 | export default defineNuxtConfig({ 2 | compatibilityDate: '2024-11-01', 3 | devtools: { 4 | enabled: true, 5 | }, 6 | css: ['@/style/theme.css'], 7 | modules: [ 8 | '@pinia/nuxt', 9 | ], 10 | }) 11 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-1/test/jest-e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "moduleFileExtensions": ["js", "json", "ts"], 3 | "rootDir": ".", 4 | "testEnvironment": "node", 5 | "testRegex": ".e2e-spec.ts$", 6 | "transform": { 7 | "^.+\\.(t|j)s$": "ts-jest" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-2/test/jest-e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "moduleFileExtensions": ["js", "json", "ts"], 3 | "rootDir": ".", 4 | "testEnvironment": "node", 5 | "testRegex": ".e2e-spec.ts$", 6 | "transform": { 7 | "^.+\\.(t|j)s$": "ts-jest" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-3/test/jest-e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "moduleFileExtensions": ["js", "json", "ts"], 3 | "rootDir": ".", 4 | "testEnvironment": "node", 5 | "testRegex": ".e2e-spec.ts$", 6 | "transform": { 7 | "^.+\\.(t|j)s$": "ts-jest" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-1/src/main.ts: -------------------------------------------------------------------------------- 1 | import { NestFactory } from '@nestjs/core'; 2 | import { AppModule } from './app.module'; 3 | 4 | async function bootstrap() { 5 | const app = await NestFactory.create(AppModule); 6 | await app.listen(3000); 7 | } 8 | bootstrap(); 9 | -------------------------------------------------------------------------------- /逐步解析 koa2 核心实现原理及代码实践/koa/response.js: -------------------------------------------------------------------------------- 1 | const response = { 2 | _body: undefined, 3 | get body() { 4 | return this._body 5 | }, 6 | set body(val) { 7 | this._body = val 8 | this.res.statusCode = 200 9 | } 10 | } 11 | 12 | module.exports = response -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-2/src/app.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { UserModule } from './modules/user/user.module'; 3 | 4 | @Module({ 5 | imports: [UserModule], 6 | controllers: [], 7 | providers: [], 8 | }) 9 | export class AppModule {} 10 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-2/src/main.ts: -------------------------------------------------------------------------------- 1 | import { NestFactory } from '@nestjs/core'; 2 | import { AppModule } from './app.module'; 3 | 4 | async function bootstrap() { 5 | const app = await NestFactory.create(AppModule); 6 | await app.listen(3000); 7 | } 8 | 9 | globalThis.UsersStorage = []; 10 | 11 | bootstrap(); 12 | -------------------------------------------------------------------------------- /Nuxt3 切换主题色且不闪屏该怎么做?/demo/store/index.ts: -------------------------------------------------------------------------------- 1 | import { createPinia } from 'pinia' 2 | import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' 3 | import useThemeStroe from './theme' 4 | 5 | const pinia = createPinia() 6 | pinia.use(piniaPluginPersistedstate) 7 | 8 | export { useThemeStroe } 9 | export default pinia 10 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-1/src/app.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { AppController } from './app.controller'; 3 | import { AppService } from './app.service'; 4 | 5 | @Module({ 6 | imports: [], 7 | controllers: [AppController], 8 | providers: [AppService], 9 | }) 10 | export class AppModule {} 11 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-2/src/modules/user/user.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { UserController } from './user.controller'; 3 | import { UserService } from './user.service'; 4 | 5 | @Module({ 6 | controllers: [UserController], 7 | providers: [UserService], 8 | }) 9 | export class UserModule {} 10 | -------------------------------------------------------------------------------- /Nuxt3 切换主题色且不闪屏该怎么做?/demo/.gitignore: -------------------------------------------------------------------------------- 1 | # Nuxt dev/build outputs 2 | .output 3 | .data 4 | .nuxt 5 | .nitro 6 | .cache 7 | dist 8 | 9 | # Node dependencies 10 | node_modules 11 | 12 | # Logs 13 | logs 14 | *.log 15 | 16 | # Misc 17 | .DS_Store 18 | .fleet 19 | .idea 20 | 21 | # Local env files 22 | .env 23 | .env.* 24 | !.env.example 25 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/toy-nest/src/types/index.ts: -------------------------------------------------------------------------------- 1 | export type Constructor = new (...args: any[]) => any; 2 | 3 | export type ClassDecorator = (target: T) => T | void; 4 | 5 | export type MethodDecorator = (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor | void; 6 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/toy-nest/src/common/injectable.ts: -------------------------------------------------------------------------------- 1 | import { INJECTABLE_WATERMARK } from '../const'; 2 | import type { ClassDecorator } from '../types'; 3 | 4 | function Injectable(): ClassDecorator { 5 | return (target) => { 6 | Reflect.defineMetadata(INJECTABLE_WATERMARK, true, target); 7 | }; 8 | } 9 | 10 | export default Injectable; 11 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-1/src/app.controller.ts: -------------------------------------------------------------------------------- 1 | import { Controller, Get } from '@nestjs/common'; 2 | import { AppService } from './app.service'; 3 | 4 | @Controller() 5 | export class AppController { 6 | constructor(private readonly appService: AppService) {} 7 | 8 | @Get() 9 | getHello(): string { 10 | return this.appService.getHello(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/toy-nest/src/common/controller.ts: -------------------------------------------------------------------------------- 1 | import { PATH_METADATA } from '../const'; 2 | import type { ClassDecorator } from '../types'; 3 | 4 | function Controller(path?: string): ClassDecorator { 5 | const defaultPath = '/'; 6 | 7 | return (target) => { 8 | Reflect.defineMetadata(PATH_METADATA, path || defaultPath, target); 9 | }; 10 | } 11 | 12 | export default Controller; 13 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/toy-nest/src/common/module.ts: -------------------------------------------------------------------------------- 1 | import type { ClassDecorator } from '../types'; 2 | 3 | function Module(metadata: Record): ClassDecorator { 4 | return (target) => { 5 | for (const property in metadata) { 6 | if (metadata.hasOwnProperty(property)) { 7 | Reflect.defineMetadata(property, metadata[property], target); 8 | } 9 | } 10 | }; 11 | } 12 | 13 | export default Module; 14 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/IoC-DI-demo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "IoC-DI-demo", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "scripts": { 7 | "dev:watch": "nodemon --watch src/ -e ts --exec ts-node ./src/index.ts" 8 | }, 9 | "devDependencies": { 10 | "@types/node": "^20.6.2", 11 | "typescript": "^5.2.2" 12 | }, 13 | "dependencies": { 14 | "nodemon": "^3.0.1", 15 | "ts-node": "^10.9.1" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/IoC-DI-demo/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0", 3 | "compilerOptions": { 4 | "outDir": "dist", 5 | "lib": ["es6"], 6 | "target": "es5", 7 | "module": "commonjs", 8 | "moduleResolution": "node", 9 | "emitDecoratorMetadata": true, 10 | "experimentalDecorators": true, 11 | "sourceMap": true, 12 | "noImplicitAny": true, 13 | "declaration": true 14 | }, 15 | "exclude": ["dist", "node_modules"] 16 | } -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/decorator-demo/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0", 3 | "compilerOptions": { 4 | "outDir": "dist", 5 | "lib": ["es6"], 6 | "target": "es5", 7 | "module": "commonjs", 8 | "moduleResolution": "node", 9 | "emitDecoratorMetadata": true, 10 | "experimentalDecorators": true, 11 | "sourceMap": true, 12 | "noImplicitAny": true, 13 | "declaration": true 14 | }, 15 | "exclude": ["dist", "node_modules"] 16 | } -------------------------------------------------------------------------------- /逐步解析 koa2 核心实现原理及代码实践/test-koa-error.js: -------------------------------------------------------------------------------- 1 | const Koa = require('./koa') 2 | 3 | const app = new Koa() 4 | 5 | app.use((ctx) => { 6 | ctx.response.res.writeHead(200, { 'Content-Type': 'text/html' }) 7 | str += '

Hello World

' // 变量未声明,应该报错 8 | ctx.body = str 9 | }); 10 | 11 | app.on('error', (err, ctx) => { 12 | console.error('[Outer Error]', err) 13 | }); 14 | 15 | app.listen(8888, () => { 16 | console.log('server is running on http://localhost:8888') 17 | }) -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/decorator-demo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "decorator-demo", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "scripts": { 7 | "dev:watch": "nodemon --watch src/ -e ts --exec ts-node ./src/index.ts" 8 | }, 9 | "devDependencies": { 10 | "@types/node": "^20.6.2", 11 | "typescript": "^5.2.2" 12 | }, 13 | "dependencies": { 14 | "nodemon": "^3.0.1", 15 | "reflect-metadata": "^0.1.13", 16 | "ts-node": "^10.9.1" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/toy-nest/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0", 3 | "compilerOptions": { 4 | "outDir": "./dist", 5 | "baseUrl": "./", 6 | "lib": ["es6"], 7 | "target": "es5", 8 | "module": "commonjs", 9 | "moduleResolution": "node", 10 | "emitDecoratorMetadata": true, 11 | "experimentalDecorators": true, 12 | "esModuleInterop": true, 13 | "sourceMap": true, 14 | "noImplicitAny": true, 15 | "declaration": true 16 | }, 17 | "include": ["src"], 18 | "exclude": ["dist", "node_modules"] 19 | } -------------------------------------------------------------------------------- /逐步解析 koa2 核心实现原理及代码实践/test.js: -------------------------------------------------------------------------------- 1 | const Koa = require('./koa') 2 | 3 | const app = new Koa() 4 | 5 | app.use(async (ctx, next) => { 6 | console.log(1) 7 | ctx.response.res.writeHead(200, { 'Content-Type': 'text/html' }) 8 | await next() 9 | ctx.body = '

Hello World

' 10 | }) 11 | 12 | app.use(async (ctx, next) => { 13 | console.log(2) 14 | await next() 15 | }) 16 | 17 | app.use(async (ctx, next) => { 18 | console.log(3) 19 | await next() 20 | }) 21 | 22 | app.listen(8888, () => { 23 | console.log('server is running on http://localhost:8888') 24 | }) -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/toy-nest/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "toy-nest", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "scripts": { 7 | "dev:watch": "nodemon --watch src/ -e ts --exec ts-node ./src/main.ts", 8 | "build": "tsc" 9 | }, 10 | "devDependencies": { 11 | "@types/express": "^4.17.20", 12 | "@types/node": "^20.6.2", 13 | "typescript": "^5.2.2" 14 | }, 15 | "dependencies": { 16 | "express": "^4.18.2", 17 | "nodemon": "^3.0.1", 18 | "reflect-metadata": "^0.1.13", 19 | "ts-node": "^10.9.1" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-2/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "eslint.validate": ["javascript"], 3 | 4 | "search.exclude": { 5 | "**/node_modules": true, 6 | "dist": true, 7 | "build": true 8 | }, 9 | 10 | "editor.formatOnSave": true, 11 | "editor.codeActionsOnSave": { 12 | "source.fixAll.eslint": true 13 | }, 14 | "[javascript]": { 15 | "editor.defaultFormatter": "esbenp.prettier-vscode" 16 | }, 17 | "[typescript]": { 18 | "editor.defaultFormatter": "esbenp.prettier-vscode" 19 | }, 20 | "[json]": { 21 | "editor.defaultFormatter": "esbenp.prettier-vscode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Nuxt3 切换主题色且不闪屏该怎么做?/demo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nuxt-app", 3 | "private": true, 4 | "type": "module", 5 | "scripts": { 6 | "build": "nuxt build", 7 | "dev": "nuxt dev", 8 | "generate": "nuxt generate", 9 | "preview": "nuxt preview", 10 | "postinstall": "nuxt prepare" 11 | }, 12 | "dependencies": { 13 | "@pinia/nuxt": "^0.9.0", 14 | "nuxt": "^3.15.0", 15 | "pinia": "^2.3.0", 16 | "pinia-plugin-persistedstate": "^4.2.0", 17 | "vue": "latest", 18 | "vue-router": "latest" 19 | }, 20 | "packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610" 21 | } 22 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-2/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "declaration": true, 5 | "removeComments": true, 6 | "emitDecoratorMetadata": true, 7 | "experimentalDecorators": true, 8 | "allowSyntheticDefaultImports": true, 9 | "target": "ES2021", 10 | "sourceMap": true, 11 | "outDir": "./dist", 12 | "baseUrl": "./", 13 | "incremental": true, 14 | "skipLibCheck": true, 15 | "strictNullChecks": true, 16 | "noImplicitAny": true, 17 | "strictBindCallApply": true, 18 | "forceConsistentCasingInFileNames": true, 19 | "noFallthroughCasesInSwitch": true 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-1/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "declaration": true, 5 | "removeComments": true, 6 | "emitDecoratorMetadata": true, 7 | "experimentalDecorators": true, 8 | "allowSyntheticDefaultImports": true, 9 | "target": "ES2021", 10 | "sourceMap": true, 11 | "outDir": "./dist", 12 | "baseUrl": "./", 13 | "incremental": true, 14 | "skipLibCheck": true, 15 | "strictNullChecks": false, 16 | "noImplicitAny": false, 17 | "strictBindCallApply": false, 18 | "forceConsistentCasingInFileNames": false, 19 | "noFallthroughCasesInSwitch": false 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-3/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "declaration": true, 5 | "removeComments": true, 6 | "emitDecoratorMetadata": true, 7 | "experimentalDecorators": true, 8 | "allowSyntheticDefaultImports": true, 9 | "target": "ES2021", 10 | "sourceMap": true, 11 | "outDir": "./dist", 12 | "baseUrl": "./", 13 | "incremental": true, 14 | "skipLibCheck": true, 15 | "strictNullChecks": false, 16 | "noImplicitAny": false, 17 | "strictBindCallApply": false, 18 | "forceConsistentCasingInFileNames": false, 19 | "noFallthroughCasesInSwitch": false 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /逐步解析 koa2 核心实现原理及代码实践/koa/context.js: -------------------------------------------------------------------------------- 1 | const context = { 2 | onerror(err) { 3 | if (null == err) return 4 | this.app.emit('error', err, this) 5 | }, 6 | } 7 | 8 | function defineGetter(target, key) { 9 | context.__defineGetter__(key, function() { 10 | return this[target][key] 11 | }) 12 | } 13 | 14 | function defineSetter(target, key) { 15 | context.__defineSetter__(key, function(value) { 16 | return this[target][key] = value 17 | }) 18 | } 19 | 20 | defineGetter('request', 'url') 21 | defineSetter('request', 'url') 22 | 23 | defineGetter('response', 'body') 24 | defineSetter('response', 'body') 25 | 26 | module.exports = context -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/toy-nest/src/common/request.ts: -------------------------------------------------------------------------------- 1 | import { PATH_METADATA, METHOD_METADATA } from '../const'; 2 | import type { MethodDecorator } from '../types'; 3 | 4 | function RequestMapping(method?: string) { 5 | return (path?: string): MethodDecorator => { 6 | const reqPath = path || '/'; 7 | const reqMethod = method || 'Get'; 8 | 9 | return (target, propertyKey, descriptor) => { 10 | Reflect.defineMetadata(METHOD_METADATA, reqMethod, descriptor.value); 11 | Reflect.defineMetadata(PATH_METADATA, reqPath, descriptor.value); 12 | }; 13 | }; 14 | } 15 | 16 | export const Get = RequestMapping('Get'); 17 | export const Post = RequestMapping('Post'); 18 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-1/src/app.controller.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { AppController } from './app.controller'; 3 | import { AppService } from './app.service'; 4 | 5 | describe('AppController', () => { 6 | let appController: AppController; 7 | 8 | beforeEach(async () => { 9 | const app: TestingModule = await Test.createTestingModule({ 10 | controllers: [AppController], 11 | providers: [AppService], 12 | }).compile(); 13 | 14 | appController = app.get(AppController); 15 | }); 16 | 17 | describe('root', () => { 18 | it('should return "Hello World!"', () => { 19 | expect(appController.getHello()).toBe('Hello World!'); 20 | }); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-1/test/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { INestApplication } from '@nestjs/common'; 3 | import * as request from 'supertest'; 4 | import { AppModule } from './../src/app.module'; 5 | 6 | describe('AppController (e2e)', () => { 7 | let app: INestApplication; 8 | 9 | beforeEach(async () => { 10 | const moduleFixture: TestingModule = await Test.createTestingModule({ 11 | imports: [AppModule], 12 | }).compile(); 13 | 14 | app = moduleFixture.createNestApplication(); 15 | await app.init(); 16 | }); 17 | 18 | it('/ (GET)', () => { 19 | return request(app.getHttpServer()) 20 | .get('/') 21 | .expect(200) 22 | .expect('Hello World!'); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-2/test/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { INestApplication } from '@nestjs/common'; 3 | import * as request from 'supertest'; 4 | import { AppModule } from './../src/app.module'; 5 | 6 | describe('AppController (e2e)', () => { 7 | let app: INestApplication; 8 | 9 | beforeEach(async () => { 10 | const moduleFixture: TestingModule = await Test.createTestingModule({ 11 | imports: [AppModule], 12 | }).compile(); 13 | 14 | app = moduleFixture.createNestApplication(); 15 | await app.init(); 16 | }); 17 | 18 | it('/ (GET)', () => { 19 | return request(app.getHttpServer()) 20 | .get('/') 21 | .expect(200) 22 | .expect('Hello World!'); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-3/test/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { INestApplication } from '@nestjs/common'; 3 | import * as request from 'supertest'; 4 | import { AppModule } from './../src/app.module'; 5 | 6 | describe('AppController (e2e)', () => { 7 | let app: INestApplication; 8 | 9 | beforeEach(async () => { 10 | const moduleFixture: TestingModule = await Test.createTestingModule({ 11 | imports: [AppModule], 12 | }).compile(); 13 | 14 | app = moduleFixture.createNestApplication(); 15 | await app.init(); 16 | }); 17 | 18 | it('/ (GET)', () => { 19 | return request(app.getHttpServer()) 20 | .get('/') 21 | .expect(200) 22 | .expect('Hello World!'); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-1/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parser: '@typescript-eslint/parser', 3 | parserOptions: { 4 | project: 'tsconfig.json', 5 | tsconfigRootDir: __dirname, 6 | sourceType: 'module', 7 | }, 8 | plugins: ['@typescript-eslint/eslint-plugin'], 9 | extends: [ 10 | 'plugin:@typescript-eslint/recommended', 11 | 'plugin:prettier/recommended', 12 | ], 13 | root: true, 14 | env: { 15 | node: true, 16 | jest: true, 17 | }, 18 | ignorePatterns: ['.eslintrc.js'], 19 | rules: { 20 | '@typescript-eslint/interface-name-prefix': 'off', 21 | '@typescript-eslint/explicit-function-return-type': 'off', 22 | '@typescript-eslint/explicit-module-boundary-types': 'off', 23 | '@typescript-eslint/no-explicit-any': 'off', 24 | }, 25 | }; 26 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-2/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parser: '@typescript-eslint/parser', 3 | parserOptions: { 4 | project: 'tsconfig.json', 5 | tsconfigRootDir: __dirname, 6 | sourceType: 'module', 7 | }, 8 | plugins: ['@typescript-eslint/eslint-plugin'], 9 | extends: [ 10 | 'plugin:@typescript-eslint/recommended', 11 | 'plugin:prettier/recommended', 12 | ], 13 | root: true, 14 | env: { 15 | node: true, 16 | jest: true, 17 | }, 18 | ignorePatterns: ['.eslintrc.js'], 19 | rules: { 20 | '@typescript-eslint/interface-name-prefix': 'off', 21 | '@typescript-eslint/explicit-function-return-type': 'off', 22 | '@typescript-eslint/explicit-module-boundary-types': 'off', 23 | '@typescript-eslint/no-explicit-any': 'off', 24 | }, 25 | }; 26 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-3/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parser: '@typescript-eslint/parser', 3 | parserOptions: { 4 | project: 'tsconfig.json', 5 | tsconfigRootDir: __dirname, 6 | sourceType: 'module', 7 | }, 8 | plugins: ['@typescript-eslint/eslint-plugin'], 9 | extends: [ 10 | 'plugin:@typescript-eslint/recommended', 11 | 'plugin:prettier/recommended', 12 | ], 13 | root: true, 14 | env: { 15 | node: true, 16 | jest: true, 17 | }, 18 | ignorePatterns: ['.eslintrc.js'], 19 | rules: { 20 | '@typescript-eslint/interface-name-prefix': 'off', 21 | '@typescript-eslint/explicit-function-return-type': 'off', 22 | '@typescript-eslint/explicit-module-boundary-types': 'off', 23 | '@typescript-eslint/no-explicit-any': 'off', 24 | }, 25 | }; 26 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/toy-nest/src/main.ts: -------------------------------------------------------------------------------- 1 | import { ToyNestFactory } from './core'; 2 | import { Injectable, Controller, Module, Get } from './common'; 3 | 4 | @Injectable() 5 | export class AppService { 6 | getHello(): string { 7 | return 'Hello World!'; 8 | } 9 | } 10 | 11 | @Controller('/app') 12 | export class AppController { 13 | constructor(private readonly appService: AppService) {} 14 | 15 | @Get('/hello') 16 | getHello(): string { 17 | return this.appService.getHello(); 18 | } 19 | } 20 | 21 | @Module({ 22 | imports: [], 23 | controllers: [AppController], 24 | providers: [AppService], 25 | }) 26 | export class AppModule {} 27 | 28 | async function bootstrap() { 29 | const app = await ToyNestFactory.create(AppModule); 30 | await app.listen(3000); 31 | } 32 | bootstrap(); 33 | -------------------------------------------------------------------------------- /逐步解析 koa2 核心实现原理及代码实践/test-koa.js: -------------------------------------------------------------------------------- 1 | const Koa = require('koa') 2 | 3 | const app = new Koa() 4 | 5 | const sleep = (time) => { 6 | return new Promise((resolve) => { 7 | setTimeout(() => { 8 | console.log('sleeping') 9 | resolve() 10 | }, time); 11 | }) 12 | } 13 | 14 | app.use((ctx, next) => { 15 | console.log(1) 16 | ctx.body = '1' 17 | next() 18 | console.log(2) 19 | ctx.body = '2' 20 | }) 21 | 22 | app.use(async (ctx, next) => { 23 | console.log(3) 24 | ctx.body = '3' 25 | await sleep(2000) 26 | next() 27 | console.log(4) 28 | ctx.body = '4' 29 | }) 30 | 31 | app.use((ctx, next) => { 32 | console.log(5) 33 | ctx.body = '5' 34 | next() 35 | console.log(6) 36 | ctx.body = '6' 37 | }) 38 | 39 | app.listen(7777, () => { 40 | console.log('server is running on http://localhost:7777') 41 | }) -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-2/src/modules/user/user.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@nestjs/common'; 2 | 3 | @Injectable() 4 | export class UserService { 5 | async create(userInfo: any) { 6 | globalThis.UsersStorage.push(userInfo); 7 | return userInfo; 8 | } 9 | 10 | async findAll() { 11 | return globalThis.UsersStorage; 12 | } 13 | 14 | async delete(name: string) { 15 | const idx = globalThis.UsersStorage.findIndex((item) => item.name === name); 16 | globalThis.UsersStorage.splice(idx, 1); 17 | return globalThis.UsersStorage; 18 | } 19 | 20 | async update(userInfo: any) { 21 | const idx = globalThis.UsersStorage.findIndex( 22 | (item) => item.name === userInfo.name, 23 | ); 24 | globalThis.UsersStorage[idx].age = userInfo.age; 25 | return globalThis.UsersStorage; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-3/src/main.ts: -------------------------------------------------------------------------------- 1 | import { NestFactory } from '@nestjs/core'; 2 | import { Module, Controller, Get, Injectable } from '@nestjs/common'; 3 | 4 | // 原来的 .service.ts 5 | @Injectable() 6 | export class AppService { 7 | getHello(): string { 8 | return 'Hello World!'; 9 | } 10 | } 11 | 12 | // 原来的 .controller.ts 13 | @Controller('/app') 14 | export class AppController { 15 | constructor(private readonly appService: AppService) {} 16 | 17 | @Get('/hello') 18 | getHello(): string { 19 | return this.appService.getHello(); 20 | } 21 | } 22 | 23 | // 原来的 .module.ts 24 | @Module({ 25 | imports: [], 26 | controllers: [AppController], 27 | providers: [AppService], 28 | }) 29 | export class AppModule {} 30 | 31 | // main 32 | async function bootstrap() { 33 | const app = await NestFactory.create(AppModule); 34 | await app.listen(3000); 35 | } 36 | bootstrap(); 37 | -------------------------------------------------------------------------------- /Nuxt3 切换主题色且不闪屏该怎么做?/demo/README.md: -------------------------------------------------------------------------------- 1 | # Nuxt Minimal Starter 2 | 3 | Look at the [Nuxt documentation](https://nuxt.com/docs/getting-started/introduction) to learn more. 4 | 5 | ## Setup 6 | 7 | Make sure to install dependencies: 8 | 9 | ```bash 10 | # npm 11 | npm install 12 | 13 | # pnpm 14 | pnpm install 15 | 16 | # yarn 17 | yarn install 18 | 19 | # bun 20 | bun install 21 | ``` 22 | 23 | ## Development Server 24 | 25 | Start the development server on `http://localhost:3000`: 26 | 27 | ```bash 28 | # npm 29 | npm run dev 30 | 31 | # pnpm 32 | pnpm dev 33 | 34 | # yarn 35 | yarn dev 36 | 37 | # bun 38 | bun run dev 39 | ``` 40 | 41 | ## Production 42 | 43 | Build the application for production: 44 | 45 | ```bash 46 | # npm 47 | npm run build 48 | 49 | # pnpm 50 | pnpm build 51 | 52 | # yarn 53 | yarn build 54 | 55 | # bun 56 | bun run build 57 | ``` 58 | 59 | Locally preview production build: 60 | 61 | ```bash 62 | # npm 63 | npm run preview 64 | 65 | # pnpm 66 | pnpm preview 67 | 68 | # yarn 69 | yarn preview 70 | 71 | # bun 72 | bun run preview 73 | ``` 74 | 75 | Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information. 76 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-2/src/modules/user/user.controller.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Controller, 3 | Body, 4 | Param, 5 | Get, 6 | Post, 7 | Delete, 8 | Patch, 9 | } from '@nestjs/common'; 10 | import { UserService } from './user.service'; 11 | 12 | @Controller('user') 13 | export class UserController { 14 | constructor(private readonly userService: UserService) {} 15 | 16 | @Post('/create') 17 | async createUser(@Body() userInfo: any) { 18 | const res = await this.userService.create(userInfo); 19 | return { 20 | code: 0, 21 | msg: '创建成功', 22 | data: res, 23 | }; 24 | } 25 | 26 | @Get('/queryList') 27 | async getAllUsers() { 28 | const res = await this.userService.findAll(); 29 | return { 30 | code: 0, 31 | msg: '请求成功', 32 | data: res, 33 | }; 34 | } 35 | 36 | @Delete('/delete/:name') 37 | async removeGoods(@Param('name') name: string) { 38 | const res = await this.userService.delete(name); 39 | return { 40 | code: 0, 41 | msg: '删除成功', 42 | data: res, 43 | }; 44 | } 45 | 46 | @Patch() 47 | async updateGoods(@Body() userInfo: any) { 48 | const res = await this.userService.update(userInfo); 49 | return { 50 | code: 0, 51 | msg: '修改成功', 52 | data: res, 53 | }; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /Nuxt3 切换主题色且不闪屏该怎么做?/demo/store/theme.ts: -------------------------------------------------------------------------------- 1 | import { defineStore } from 'pinia' 2 | 3 | export type ThemeType = 'system' | 'light' | 'dark' 4 | 5 | export interface GlobalState { 6 | fakeTheme: ThemeType 7 | theme: Exclude 8 | } 9 | 10 | const useThemeStroe = defineStore('global', { 11 | state: (): GlobalState => ({ 12 | fakeTheme: 'light', 13 | theme: 'light', 14 | }), 15 | actions: { 16 | setRealTheme(theme: Exclude) { 17 | this.theme = theme 18 | if (theme === 'light') { 19 | document.body.removeAttribute('theme') 20 | } else { 21 | document.body.setAttribute('theme', 'dark') 22 | } 23 | }, 24 | setTheme(theme: ThemeType) { 25 | window.localStorage.setItem('theme', theme) 26 | this.fakeTheme = theme 27 | if (theme === 'system') { 28 | const themeMedia = window.matchMedia('(prefers-color-scheme: dark)') 29 | this.setRealTheme(themeMedia.matches ? 'dark' : 'light') 30 | themeMedia.addEventListener('change', (evt) => { 31 | const t = evt.matches ? 'dark' : 'light' 32 | this.setRealTheme(t) 33 | }) 34 | } else { 35 | this.setRealTheme(theme) 36 | } 37 | }, 38 | }, 39 | persist: true, 40 | }) 41 | 42 | export default useThemeStroe 43 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/IoC-DI-demo/src/index.ts: -------------------------------------------------------------------------------- 1 | // 定义一个产品经理接口 2 | interface ProductManager { 3 | generateRequirement: () => void 4 | } 5 | 6 | // 定义一个程序员接口 7 | interface Programmer { 8 | completeRequirement: () => void 9 | } 10 | 11 | // 贵产品经理 12 | class ExpProductManager implements ProductManager { 13 | generateRequirement() { 14 | console.log("A requirement has been generated."); 15 | } 16 | } 17 | 18 | // 贵程序员 19 | class ExpProgrammer implements Programmer { 20 | completeRequirement() { 21 | console.log("A requirement has been completed."); 22 | } 23 | } 24 | 25 | // 主管 26 | class Director { 27 | private productManager: ProductManager; 28 | private programmer: Programmer; 29 | 30 | constructor(pm: ProductManager, programmer: Programmer) { 31 | this.productManager = pm; 32 | this.programmer = programmer; 33 | } 34 | 35 | task() { 36 | this.productManager.generateRequirement(); 37 | this.programmer.completeRequirement(); 38 | } 39 | } 40 | 41 | // 公司 42 | class Company { 43 | run() { 44 | // 控制反转 45 | const expProductManager: ExpProductManager = new ExpProductManager() 46 | // const cheapProductManager: CheapProductManager = new CheapProductManager() 47 | const expProgrammer: ExpProgrammer = new ExpProgrammer() 48 | // const cheapProgrammer: CheapProgrammer = new CheapProgrammer() 49 | 50 | const screwWorkshop = new Director(expProductManager, expProgrammer); 51 | screwWorkshop.task(); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Nuxt3 切换主题色且不闪屏该怎么做?/demo/pages/index.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 45 | 46 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/toy-nest/src/core/index.ts: -------------------------------------------------------------------------------- 1 | import 'reflect-metadata'; 2 | import express from 'express'; 3 | import type { Express } from 'express'; 4 | import { INJECTABLE_WATERMARK, PATH_METADATA, METHOD_METADATA } from '../const'; 5 | 6 | class ToyNestFactoryStatic { 7 | private readonly app: Express; 8 | 9 | constructor() { 10 | this.app = express(); 11 | } 12 | 13 | create(module: any): Express { 14 | const Controllers = Reflect.getMetadata('controllers', module); 15 | this.initialize(Controllers); 16 | 17 | return this.app; 18 | } 19 | 20 | initialize(Controllers: any[]) { 21 | Controllers.forEach((Controller) => { 22 | const Services: any[] = Reflect.getMetadata('design:paramtypes', Controller); 23 | 24 | const services = Services.map((Service) => { 25 | if (!Reflect.getMetadata(INJECTABLE_WATERMARK, Service)) { 26 | throw new Error(`${Service.name} is not injectable, check if it is decorated with @Injectable.`); 27 | } 28 | 29 | const instance = new Service(); 30 | return instance; 31 | }); 32 | 33 | const controller = new Controller(...services); 34 | 35 | const rootPath = Reflect.getMetadata(PATH_METADATA, Controller); 36 | 37 | this.createRoute(controller, rootPath); 38 | }); 39 | } 40 | 41 | createRoute(controller: any, rootPath: string) { 42 | const prototype = Reflect.getPrototypeOf(controller) as any; 43 | const allMethodNames = Reflect.ownKeys(prototype).filter((name) => name !== 'constructor'); 44 | 45 | allMethodNames.forEach((methodName) => { 46 | const fn = prototype[methodName]; 47 | 48 | const method = Reflect.getMetadata(METHOD_METADATA, fn); 49 | const path = Reflect.getMetadata(PATH_METADATA, fn); 50 | 51 | if (!method || !path) { 52 | return; 53 | } 54 | 55 | const completePath = rootPath + path; 56 | const lowerMethod = method.toLowerCase() as 'get' | 'post'; 57 | const bindFn = fn.bind(controller); 58 | 59 | this.app[lowerMethod](completePath, (req: any, res: any) => { 60 | res.send(bindFn(req)); 61 | }); 62 | }); 63 | } 64 | } 65 | 66 | export const ToyNestFactory = new ToyNestFactoryStatic(); 67 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-1/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nest-demo-1", 3 | "version": "0.0.1", 4 | "description": "", 5 | "author": "", 6 | "private": true, 7 | "license": "UNLICENSED", 8 | "scripts": { 9 | "build": "nest build", 10 | "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", 11 | "start": "nest start", 12 | "start:dev": "nest start --watch", 13 | "start:debug": "nest start --debug --watch", 14 | "start:prod": "node dist/main", 15 | "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", 16 | "test": "jest", 17 | "test:watch": "jest --watch", 18 | "test:cov": "jest --coverage", 19 | "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", 20 | "test:e2e": "jest --config ./test/jest-e2e.json" 21 | }, 22 | "dependencies": { 23 | "@nestjs/common": "^10.0.0", 24 | "@nestjs/core": "^10.0.0", 25 | "@nestjs/platform-express": "^10.0.0", 26 | "reflect-metadata": "^0.1.13", 27 | "rxjs": "^7.8.1" 28 | }, 29 | "devDependencies": { 30 | "@nestjs/cli": "^10.0.0", 31 | "@nestjs/schematics": "^10.0.0", 32 | "@nestjs/testing": "^10.0.0", 33 | "@types/express": "^4.17.17", 34 | "@types/jest": "^29.5.2", 35 | "@types/node": "^20.3.1", 36 | "@types/supertest": "^2.0.12", 37 | "@typescript-eslint/eslint-plugin": "^5.59.11", 38 | "@typescript-eslint/parser": "^5.59.11", 39 | "eslint": "^8.42.0", 40 | "eslint-config-prettier": "^8.8.0", 41 | "eslint-plugin-prettier": "^4.2.1", 42 | "jest": "^29.5.0", 43 | "prettier": "^2.8.8", 44 | "source-map-support": "^0.5.21", 45 | "supertest": "^6.3.3", 46 | "ts-jest": "^29.1.0", 47 | "ts-loader": "^9.4.3", 48 | "ts-node": "^10.9.1", 49 | "tsconfig-paths": "^4.2.0", 50 | "typescript": "^5.1.3" 51 | }, 52 | "jest": { 53 | "moduleFileExtensions": [ 54 | "js", 55 | "json", 56 | "ts" 57 | ], 58 | "rootDir": "src", 59 | "testRegex": ".*\\.spec\\.ts$", 60 | "transform": { 61 | "^.+\\.(t|j)s$": "ts-jest" 62 | }, 63 | "collectCoverageFrom": [ 64 | "**/*.(t|j)s" 65 | ], 66 | "coverageDirectory": "../coverage", 67 | "testEnvironment": "node" 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-2/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nest-demo-2", 3 | "version": "0.0.1", 4 | "description": "", 5 | "author": "", 6 | "private": true, 7 | "license": "UNLICENSED", 8 | "scripts": { 9 | "build": "nest build", 10 | "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", 11 | "start": "nest start", 12 | "start:dev": "nest start --watch", 13 | "start:debug": "nest start --debug --watch", 14 | "start:prod": "node dist/main", 15 | "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", 16 | "test": "jest", 17 | "test:watch": "jest --watch", 18 | "test:cov": "jest --coverage", 19 | "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", 20 | "test:e2e": "jest --config ./test/jest-e2e.json" 21 | }, 22 | "dependencies": { 23 | "@nestjs/common": "^10.0.0", 24 | "@nestjs/core": "^10.0.0", 25 | "@nestjs/platform-express": "^10.0.0", 26 | "reflect-metadata": "^0.1.13", 27 | "rxjs": "^7.8.1" 28 | }, 29 | "devDependencies": { 30 | "@nestjs/cli": "^10.0.0", 31 | "@nestjs/schematics": "^10.0.0", 32 | "@nestjs/testing": "^10.0.0", 33 | "@types/express": "^4.17.17", 34 | "@types/jest": "^29.5.2", 35 | "@types/node": "^20.3.1", 36 | "@types/supertest": "^2.0.12", 37 | "@typescript-eslint/eslint-plugin": "^5.59.11", 38 | "@typescript-eslint/parser": "^5.59.11", 39 | "eslint": "^8.42.0", 40 | "eslint-config-prettier": "^8.8.0", 41 | "eslint-plugin-prettier": "^4.2.1", 42 | "jest": "^29.5.0", 43 | "prettier": "^2.8.8", 44 | "source-map-support": "^0.5.21", 45 | "supertest": "^6.3.3", 46 | "ts-jest": "^29.1.0", 47 | "ts-loader": "^9.4.3", 48 | "ts-node": "^10.9.1", 49 | "tsconfig-paths": "^4.2.0", 50 | "typescript": "^5.1.3" 51 | }, 52 | "jest": { 53 | "moduleFileExtensions": [ 54 | "js", 55 | "json", 56 | "ts" 57 | ], 58 | "rootDir": "src", 59 | "testRegex": ".*\\.spec\\.ts$", 60 | "transform": { 61 | "^.+\\.(t|j)s$": "ts-jest" 62 | }, 63 | "collectCoverageFrom": [ 64 | "**/*.(t|j)s" 65 | ], 66 | "coverageDirectory": "../coverage", 67 | "testEnvironment": "node" 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-3/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nest-demo-3", 3 | "version": "0.0.1", 4 | "description": "", 5 | "author": "", 6 | "private": true, 7 | "license": "UNLICENSED", 8 | "scripts": { 9 | "build": "nest build", 10 | "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", 11 | "start": "nest start", 12 | "start:dev": "nest start --watch", 13 | "start:debug": "nest start --debug --watch", 14 | "start:prod": "node dist/main", 15 | "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", 16 | "test": "jest", 17 | "test:watch": "jest --watch", 18 | "test:cov": "jest --coverage", 19 | "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", 20 | "test:e2e": "jest --config ./test/jest-e2e.json" 21 | }, 22 | "dependencies": { 23 | "@nestjs/common": "^10.0.0", 24 | "@nestjs/core": "^10.0.0", 25 | "@nestjs/platform-express": "^10.0.0", 26 | "reflect-metadata": "^0.1.13", 27 | "rxjs": "^7.8.1" 28 | }, 29 | "devDependencies": { 30 | "@nestjs/cli": "^10.0.0", 31 | "@nestjs/schematics": "^10.0.0", 32 | "@nestjs/testing": "^10.0.0", 33 | "@types/express": "^4.17.17", 34 | "@types/jest": "^29.5.2", 35 | "@types/node": "^20.3.1", 36 | "@types/supertest": "^2.0.12", 37 | "@typescript-eslint/eslint-plugin": "^5.59.11", 38 | "@typescript-eslint/parser": "^5.59.11", 39 | "eslint": "^8.42.0", 40 | "eslint-config-prettier": "^8.8.0", 41 | "eslint-plugin-prettier": "^4.2.1", 42 | "jest": "^29.5.0", 43 | "prettier": "^2.8.8", 44 | "source-map-support": "^0.5.21", 45 | "supertest": "^6.3.3", 46 | "ts-jest": "^29.1.0", 47 | "ts-loader": "^9.4.3", 48 | "ts-node": "^10.9.1", 49 | "tsconfig-paths": "^4.2.0", 50 | "typescript": "^5.1.3" 51 | }, 52 | "jest": { 53 | "moduleFileExtensions": [ 54 | "js", 55 | "json", 56 | "ts" 57 | ], 58 | "rootDir": "src", 59 | "testRegex": ".*\\.spec\\.ts$", 60 | "transform": { 61 | "^.+\\.(t|j)s$": "ts-jest" 62 | }, 63 | "collectCoverageFrom": [ 64 | "**/*.(t|j)s" 65 | ], 66 | "coverageDirectory": "../coverage", 67 | "testEnvironment": "node" 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/decorator-demo/src/index.ts: -------------------------------------------------------------------------------- 1 | import "reflect-metadata"; 2 | 3 | type Constructor = new (...args: any[]) => any; 4 | 5 | // 类装饰器 6 | function addBackground(target: T) { 7 | target.prototype.background = "mortgage slave"; 8 | return target; 9 | } 10 | 11 | // 属性装饰器 12 | function validateAge(max: number) { 13 | return (target: Object, propertyKey: string) => { 14 | Object.defineProperty(target, propertyKey, { 15 | set: function (v: number) { 16 | if (v > max) { 17 | throw new Error(`${v} is too old!`); 18 | } 19 | }, 20 | }); 21 | }; 22 | } 23 | 24 | // 方法装饰器 25 | function logWorkTime( 26 | target: Object, 27 | propertyKey: string, 28 | descriptor: PropertyDescriptor 29 | ) { 30 | const original = descriptor.value; 31 | 32 | descriptor.value = function (...args: any[]) { 33 | const paramsCollector = 34 | Reflect.getOwnMetadata("paramsCollector", target) || {}; 35 | for ( 36 | let parameterIndex = 0; 37 | parameterIndex < args.length; 38 | parameterIndex++ 39 | ) { 40 | let minNum: number[] = 41 | paramsCollector[`${propertyKey}_${parameterIndex}`]; 42 | if (args[parameterIndex] < minNum) { 43 | throw new Error(`Working hours are less than ${minNum} hours`); 44 | } 45 | } 46 | 47 | const result = original.call(this, ...args); 48 | console.log(`Already worked ${result} hours`); 49 | return result; 50 | }; 51 | } 52 | 53 | // 参数装饰器 54 | function minimum(num: number) { 55 | return (target: Object, propertyKey: string, parameterIndex: number) => { 56 | let paramsCollector = 57 | Reflect.getOwnMetadata("paramsCollector", target) || {}; 58 | paramsCollector = { 59 | ...paramsCollector, 60 | [`${propertyKey}_${parameterIndex}`]: num, 61 | }; 62 | Reflect.defineMetadata("paramsCollector", paramsCollector, target); 63 | }; 64 | } 65 | 66 | @addBackground 67 | class Programmer { 68 | @validateAge(35) 69 | age!: number; 70 | 71 | @logWorkTime 72 | work(@minimum(3) morningTime: number, @minimum(7) afternoonTime: number) { 73 | return morningTime + afternoonTime; 74 | } 75 | } 76 | 77 | const programmer = new Programmer(); 78 | const a = programmer.work(3, 7); // Already worked 10 hours 79 | programmer.age = 35; // throw error 80 | -------------------------------------------------------------------------------- /逐步解析 koa2 核心实现原理及代码实践/koa/application.js: -------------------------------------------------------------------------------- 1 | const http = require('http') 2 | const context = require('./context') 3 | const request = require('./request') 4 | const response = require('./response') 5 | const EventEmitter = require('events') 6 | 7 | class Application extends EventEmitter { 8 | constructor() { 9 | super() 10 | 11 | this.context = Object.create(context) 12 | this.request = Object.create(request) 13 | this.response = Object.create(response) 14 | 15 | this.middlewares = [] 16 | } 17 | 18 | use(fn) { 19 | this.middlewares.push(fn) 20 | } 21 | 22 | createContext(req, res) { 23 | const context = Object.create(this.context) 24 | const request = Object.create(this.request) 25 | const response = Object.create(this.response) 26 | 27 | context.app = this 28 | context.req = req // 原生的 29 | context.request = request // 自己封装的 30 | context.request.req = req // 原生的 31 | 32 | context.res = res // 原生的 33 | context.response = response // 自己封装的 34 | context.response.res = res // 原生的 35 | 36 | return context 37 | } 38 | 39 | compose(ctx) { 40 | let index = -1 41 | 42 | const dispatch = (i) => { 43 | if (i <= index) { 44 | return Promise.reject('[Error] next() called multiples times') 45 | } 46 | 47 | index = i 48 | 49 | if (this.middlewares.length === i) { 50 | return Promise.resolve() 51 | } 52 | 53 | const fn = this.middlewares[i] 54 | try { 55 | return Promise.resolve(fn(ctx, () => dispatch(i + 1))); 56 | } catch (err) { 57 | return Promise.reject(err) 58 | } 59 | } 60 | 61 | return dispatch(0) 62 | } 63 | 64 | handleRequestCallback() { 65 | return (req, res) => { 66 | const ctx = this.createContext(req, res) 67 | res.statusCode = 404 68 | this.on('error', this.onerror) 69 | const onerror = err => ctx.onerror(err) 70 | 71 | this.compose(ctx) 72 | .then(() => { 73 | const content = ctx.body 74 | if (content) { 75 | res.end(content) 76 | } else { 77 | res.end('Not Found') 78 | } 79 | }) 80 | .catch(onerror) 81 | } 82 | } 83 | 84 | onerror(err) { 85 | const msg = err.stack || err.toString(); 86 | console.error('[Inner Error]', `\n${msg.replace(/^/gm, ' ')}\n`); 87 | } 88 | 89 | listen(...args) { 90 | const server = http.createServer(this.handleRequestCallback()) 91 | server.listen(...args) 92 | } 93 | } 94 | 95 | module.exports = Application 96 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 博客目录 2 | 3 | :notebook: 个人技术小文章,旨在对知识的总结,能帮助到别人就更好啦。 4 | 5 | ## CSS 6 | 1.[如何画一个只能在已显示区域进行事件绑定的三角形](https://github.com/vortesnail/blog/issues/3) (2019.09.24) 7 | 8 | 2.[图文并茂总结7个工作中常用的css3案例,带你了解冷门却实用的特性!](https://github.com/vortesnail/blog/issues/15) (2020.10.12) 9 | 10 | ## JavaScript 11 | 1.[原型链继承详解](https://github.com/vortesnail/blog/issues/1) (2019.06.18) 12 | 13 | 2.[从头到尾给你讲清楚如何实现一个new](https://github.com/vortesnail/blog/issues/2) (2019.09.13) 14 | 15 | 3.[不一样的“悬停几秒后执行函数”?](https://github.com/vortesnail/blog/issues/9) (2019.10.31) 16 | 17 | 4.[弹幕的常规设计与实现](https://github.com/vortesnail/blog/issues/20) (2022.07.16) 18 | 19 | ## React 20 | 1.[[译]使用 React Hooks 构建电影搜索应用程序](https://github.com/vortesnail/blog/issues/10) (2019.11.03) 21 | 22 | 2.[好想用Typescript+React hooks开发啊!(嘴对嘴解释)](https://github.com/vortesnail/blog/issues/13) (2020.03.09) 23 | 24 | 3.[如何使用React Testing Library和Jest测试React应用](https://github.com/vortesnail/blog/issues/16) (2020.10.23) 25 | 26 | 4.[React Router 5 完整指南](https://github.com/vortesnail/blog/issues/18) (2021.05.25) 27 | 28 | ## Vue 29 | 1.[我是怎么从 React 过渡到 Vue2 的?](https://github.com/vortesnail/blog/issues/19) (2021.11.30) 30 | 31 | 2.[Nuxt3 切换主题色且不闪屏该怎么做?](https://github.com/vortesnail/blog/issues/26)(2025.01.07) 32 | 33 | ## Node 34 | 1.[node 写一个自动监听文件并读写配置的脚本](https://github.com/vortesnail/blog/issues/12) (2020.02.20) 35 | 36 | 2.[这样入门 js 抽象语法树(AST),从此我来到了一个新世界](https://github.com/vortesnail/blog/issues/17) (2021.03.21) 37 | 38 | 3.[逐步解析 koa2 核心实现原理及代码实践](https://github.com/vortesnail/blog/issues/21) (2023.01.08) 39 | 40 | 4.[Nest.js 入门与核心原理解析,从 IoC、DI、装饰器到元编程](https://github.com/vortesnail/blog/issues/23)(2023.11.10) 41 | 42 | 5.[如何基于 Nest.js 设计一个评论系统](https://github.com/vortesnail/blog/issues/25)(2024.11.25) 43 | 44 | ## Webpack 45 | 1.[从零配置webpack 4+react脚手架(一)](https://github.com/vortesnail/blog/issues/4) (2019.10.01) 46 | 47 | 2.[从零配置webpack 4+react脚手架(二)](https://github.com/vortesnail/blog/issues/5) (2019.10.03) 48 | 49 | 3.[从零配置webpack 4+react脚手架(三)](https://github.com/vortesnail/blog/issues/6) (2019.10.13) 50 | 51 | 4.[从零配置webpack 4+react脚手架(四)](https://github.com/vortesnail/blog/issues/7) (2019.10.14) 52 | 53 | 5.[我是这样搭建Typescript+React项目环境的!(2.7w字详解)](https://github.com/vortesnail/blog/issues/14) (2020.08.11) 54 | 55 | ## 网络 56 | 1.[这一次,彻底理解https原理](https://github.com/vortesnail/blog/issues/11) (2020.01.06) 57 | 58 | ## Git 59 | 1.[如何部署create-react-app项目到Github pages步骤](https://github.com/vortesnail/blog/issues/8) (2019.10.25) 60 | 61 | ## 其它 62 | 1.[web 和 node 项目部署阿里云服务器并域名访问教程](https://github.com/vortesnail/blog/issues/22)(2023.06.29) 63 | 64 | 2.[部署阿里云云函数舒畅无阻的请求 Github OpenApi](https://github.com/vortesnail/blog/issues/24)(2024.01.03) -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-1/README.md: -------------------------------------------------------------------------------- 1 |

2 | Nest Logo 3 |

4 | 5 | [circleci-image]: https://img.shields.io/circleci/build/github/nestjs/nest/master?token=abc123def456 6 | [circleci-url]: https://circleci.com/gh/nestjs/nest 7 | 8 |

A progressive Node.js framework for building efficient and scalable server-side applications.

9 |

10 | NPM Version 11 | Package License 12 | NPM Downloads 13 | CircleCI 14 | Coverage 15 | Discord 16 | Backers on Open Collective 17 | Sponsors on Open Collective 18 | 19 | Support us 20 | 21 |

22 | 24 | 25 | ## Description 26 | 27 | [Nest](https://github.com/nestjs/nest) framework TypeScript starter repository. 28 | 29 | ## Installation 30 | 31 | ```bash 32 | $ yarn install 33 | ``` 34 | 35 | ## Running the app 36 | 37 | ```bash 38 | # development 39 | $ yarn run start 40 | 41 | # watch mode 42 | $ yarn run start:dev 43 | 44 | # production mode 45 | $ yarn run start:prod 46 | ``` 47 | 48 | ## Test 49 | 50 | ```bash 51 | # unit tests 52 | $ yarn run test 53 | 54 | # e2e tests 55 | $ yarn run test:e2e 56 | 57 | # test coverage 58 | $ yarn run test:cov 59 | ``` 60 | 61 | ## Support 62 | 63 | Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support). 64 | 65 | ## Stay in touch 66 | 67 | - Author - [Kamil Myśliwiec](https://kamilmysliwiec.com) 68 | - Website - [https://nestjs.com](https://nestjs.com/) 69 | - Twitter - [@nestframework](https://twitter.com/nestframework) 70 | 71 | ## License 72 | 73 | Nest is [MIT licensed](LICENSE). 74 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-2/README.md: -------------------------------------------------------------------------------- 1 |

2 | Nest Logo 3 |

4 | 5 | [circleci-image]: https://img.shields.io/circleci/build/github/nestjs/nest/master?token=abc123def456 6 | [circleci-url]: https://circleci.com/gh/nestjs/nest 7 | 8 |

A progressive Node.js framework for building efficient and scalable server-side applications.

9 |

10 | NPM Version 11 | Package License 12 | NPM Downloads 13 | CircleCI 14 | Coverage 15 | Discord 16 | Backers on Open Collective 17 | Sponsors on Open Collective 18 | 19 | Support us 20 | 21 |

22 | 24 | 25 | ## Description 26 | 27 | [Nest](https://github.com/nestjs/nest) framework TypeScript starter repository. 28 | 29 | ## Installation 30 | 31 | ```bash 32 | $ yarn install 33 | ``` 34 | 35 | ## Running the app 36 | 37 | ```bash 38 | # development 39 | $ yarn run start 40 | 41 | # watch mode 42 | $ yarn run start:dev 43 | 44 | # production mode 45 | $ yarn run start:prod 46 | ``` 47 | 48 | ## Test 49 | 50 | ```bash 51 | # unit tests 52 | $ yarn run test 53 | 54 | # e2e tests 55 | $ yarn run test:e2e 56 | 57 | # test coverage 58 | $ yarn run test:cov 59 | ``` 60 | 61 | ## Support 62 | 63 | Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support). 64 | 65 | ## Stay in touch 66 | 67 | - Author - [Kamil Myśliwiec](https://kamilmysliwiec.com) 68 | - Website - [https://nestjs.com](https://nestjs.com/) 69 | - Twitter - [@nestframework](https://twitter.com/nestframework) 70 | 71 | ## License 72 | 73 | Nest is [MIT licensed](LICENSE). 74 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/nest-demo-3/README.md: -------------------------------------------------------------------------------- 1 |

2 | Nest Logo 3 |

4 | 5 | [circleci-image]: https://img.shields.io/circleci/build/github/nestjs/nest/master?token=abc123def456 6 | [circleci-url]: https://circleci.com/gh/nestjs/nest 7 | 8 |

A progressive Node.js framework for building efficient and scalable server-side applications.

9 |

10 | NPM Version 11 | Package License 12 | NPM Downloads 13 | CircleCI 14 | Coverage 15 | Discord 16 | Backers on Open Collective 17 | Sponsors on Open Collective 18 | 19 | Support us 20 | 21 |

22 | 24 | 25 | ## Description 26 | 27 | [Nest](https://github.com/nestjs/nest) framework TypeScript starter repository. 28 | 29 | ## Installation 30 | 31 | ```bash 32 | $ yarn install 33 | ``` 34 | 35 | ## Running the app 36 | 37 | ```bash 38 | # development 39 | $ yarn run start 40 | 41 | # watch mode 42 | $ yarn run start:dev 43 | 44 | # production mode 45 | $ yarn run start:prod 46 | ``` 47 | 48 | ## Test 49 | 50 | ```bash 51 | # unit tests 52 | $ yarn run test 53 | 54 | # e2e tests 55 | $ yarn run test:e2e 56 | 57 | # test coverage 58 | $ yarn run test:cov 59 | ``` 60 | 61 | ## Support 62 | 63 | Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support). 64 | 65 | ## Stay in touch 66 | 67 | - Author - [Kamil Myśliwiec](https://kamilmysliwiec.com) 68 | - Website - [https://nestjs.com](https://nestjs.com/) 69 | - Twitter - [@nestframework](https://twitter.com/nestframework) 70 | 71 | ## License 72 | 73 | Nest is [MIT licensed](LICENSE). 74 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/IoC-DI-demo/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@cspotcode/source-map-support@^0.8.0": 6 | version "0.8.1" 7 | resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" 8 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== 9 | dependencies: 10 | "@jridgewell/trace-mapping" "0.3.9" 11 | 12 | "@jridgewell/resolve-uri@^3.0.3": 13 | version "3.1.1" 14 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" 15 | integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== 16 | 17 | "@jridgewell/sourcemap-codec@^1.4.10": 18 | version "1.4.15" 19 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" 20 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 21 | 22 | "@jridgewell/trace-mapping@0.3.9": 23 | version "0.3.9" 24 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" 25 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== 26 | dependencies: 27 | "@jridgewell/resolve-uri" "^3.0.3" 28 | "@jridgewell/sourcemap-codec" "^1.4.10" 29 | 30 | "@tsconfig/node10@^1.0.7": 31 | version "1.0.9" 32 | resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" 33 | integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== 34 | 35 | "@tsconfig/node12@^1.0.7": 36 | version "1.0.11" 37 | resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" 38 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== 39 | 40 | "@tsconfig/node14@^1.0.0": 41 | version "1.0.3" 42 | resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" 43 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== 44 | 45 | "@tsconfig/node16@^1.0.2": 46 | version "1.0.4" 47 | resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" 48 | integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== 49 | 50 | "@types/node@^20.6.2": 51 | version "20.6.2" 52 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.2.tgz#a065925409f59657022e9063275cd0b9bd7e1b12" 53 | integrity sha512-Y+/1vGBHV/cYk6OI1Na/LHzwnlNCAfU3ZNGrc1LdRe/LAIbdDPTTv/HU3M7yXN448aTVDq3eKRm2cg7iKLb8gw== 54 | 55 | abbrev@1: 56 | version "1.1.1" 57 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 58 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 59 | 60 | acorn-walk@^8.1.1: 61 | version "8.2.0" 62 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" 63 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== 64 | 65 | acorn@^8.4.1: 66 | version "8.10.0" 67 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" 68 | integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== 69 | 70 | anymatch@~3.1.2: 71 | version "3.1.3" 72 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 73 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 74 | dependencies: 75 | normalize-path "^3.0.0" 76 | picomatch "^2.0.4" 77 | 78 | arg@^4.1.0: 79 | version "4.1.3" 80 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 81 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 82 | 83 | balanced-match@^1.0.0: 84 | version "1.0.2" 85 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 86 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 87 | 88 | binary-extensions@^2.0.0: 89 | version "2.2.0" 90 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 91 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 92 | 93 | brace-expansion@^1.1.7: 94 | version "1.1.11" 95 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 96 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 97 | dependencies: 98 | balanced-match "^1.0.0" 99 | concat-map "0.0.1" 100 | 101 | braces@~3.0.2: 102 | version "3.0.2" 103 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 104 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 105 | dependencies: 106 | fill-range "^7.0.1" 107 | 108 | chokidar@^3.5.2: 109 | version "3.5.3" 110 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 111 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 112 | dependencies: 113 | anymatch "~3.1.2" 114 | braces "~3.0.2" 115 | glob-parent "~5.1.2" 116 | is-binary-path "~2.1.0" 117 | is-glob "~4.0.1" 118 | normalize-path "~3.0.0" 119 | readdirp "~3.6.0" 120 | optionalDependencies: 121 | fsevents "~2.3.2" 122 | 123 | concat-map@0.0.1: 124 | version "0.0.1" 125 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 126 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 127 | 128 | create-require@^1.1.0: 129 | version "1.1.1" 130 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" 131 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 132 | 133 | debug@^3.2.7: 134 | version "3.2.7" 135 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 136 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 137 | dependencies: 138 | ms "^2.1.1" 139 | 140 | diff@^4.0.1: 141 | version "4.0.2" 142 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 143 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 144 | 145 | fill-range@^7.0.1: 146 | version "7.0.1" 147 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 148 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 149 | dependencies: 150 | to-regex-range "^5.0.1" 151 | 152 | fsevents@~2.3.2: 153 | version "2.3.3" 154 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" 155 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== 156 | 157 | glob-parent@~5.1.2: 158 | version "5.1.2" 159 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 160 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 161 | dependencies: 162 | is-glob "^4.0.1" 163 | 164 | has-flag@^3.0.0: 165 | version "3.0.0" 166 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 167 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 168 | 169 | ignore-by-default@^1.0.1: 170 | version "1.0.1" 171 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" 172 | integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== 173 | 174 | is-binary-path@~2.1.0: 175 | version "2.1.0" 176 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 177 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 178 | dependencies: 179 | binary-extensions "^2.0.0" 180 | 181 | is-extglob@^2.1.1: 182 | version "2.1.1" 183 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 184 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 185 | 186 | is-glob@^4.0.1, is-glob@~4.0.1: 187 | version "4.0.3" 188 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 189 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 190 | dependencies: 191 | is-extglob "^2.1.1" 192 | 193 | is-number@^7.0.0: 194 | version "7.0.0" 195 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 196 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 197 | 198 | lru-cache@^6.0.0: 199 | version "6.0.0" 200 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 201 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 202 | dependencies: 203 | yallist "^4.0.0" 204 | 205 | make-error@^1.1.1: 206 | version "1.3.6" 207 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 208 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 209 | 210 | minimatch@^3.1.2: 211 | version "3.1.2" 212 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 213 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 214 | dependencies: 215 | brace-expansion "^1.1.7" 216 | 217 | ms@^2.1.1: 218 | version "2.1.3" 219 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 220 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 221 | 222 | nodemon@^3.0.1: 223 | version "3.0.1" 224 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.0.1.tgz#affe822a2c5f21354466b2fc8ae83277d27dadc7" 225 | integrity sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw== 226 | dependencies: 227 | chokidar "^3.5.2" 228 | debug "^3.2.7" 229 | ignore-by-default "^1.0.1" 230 | minimatch "^3.1.2" 231 | pstree.remy "^1.1.8" 232 | semver "^7.5.3" 233 | simple-update-notifier "^2.0.0" 234 | supports-color "^5.5.0" 235 | touch "^3.1.0" 236 | undefsafe "^2.0.5" 237 | 238 | nopt@~1.0.10: 239 | version "1.0.10" 240 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" 241 | integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== 242 | dependencies: 243 | abbrev "1" 244 | 245 | normalize-path@^3.0.0, normalize-path@~3.0.0: 246 | version "3.0.0" 247 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 248 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 249 | 250 | picomatch@^2.0.4, picomatch@^2.2.1: 251 | version "2.3.1" 252 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 253 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 254 | 255 | pstree.remy@^1.1.8: 256 | version "1.1.8" 257 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" 258 | integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== 259 | 260 | readdirp@~3.6.0: 261 | version "3.6.0" 262 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 263 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 264 | dependencies: 265 | picomatch "^2.2.1" 266 | 267 | semver@^7.5.3: 268 | version "7.5.4" 269 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" 270 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== 271 | dependencies: 272 | lru-cache "^6.0.0" 273 | 274 | simple-update-notifier@^2.0.0: 275 | version "2.0.0" 276 | resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" 277 | integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== 278 | dependencies: 279 | semver "^7.5.3" 280 | 281 | supports-color@^5.5.0: 282 | version "5.5.0" 283 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 284 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 285 | dependencies: 286 | has-flag "^3.0.0" 287 | 288 | to-regex-range@^5.0.1: 289 | version "5.0.1" 290 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 291 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 292 | dependencies: 293 | is-number "^7.0.0" 294 | 295 | touch@^3.1.0: 296 | version "3.1.0" 297 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" 298 | integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== 299 | dependencies: 300 | nopt "~1.0.10" 301 | 302 | ts-node@^10.9.1: 303 | version "10.9.1" 304 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" 305 | integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== 306 | dependencies: 307 | "@cspotcode/source-map-support" "^0.8.0" 308 | "@tsconfig/node10" "^1.0.7" 309 | "@tsconfig/node12" "^1.0.7" 310 | "@tsconfig/node14" "^1.0.0" 311 | "@tsconfig/node16" "^1.0.2" 312 | acorn "^8.4.1" 313 | acorn-walk "^8.1.1" 314 | arg "^4.1.0" 315 | create-require "^1.1.0" 316 | diff "^4.0.1" 317 | make-error "^1.1.1" 318 | v8-compile-cache-lib "^3.0.1" 319 | yn "3.1.1" 320 | 321 | typescript@^5.2.2: 322 | version "5.2.2" 323 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" 324 | integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== 325 | 326 | undefsafe@^2.0.5: 327 | version "2.0.5" 328 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" 329 | integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== 330 | 331 | v8-compile-cache-lib@^3.0.1: 332 | version "3.0.1" 333 | resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" 334 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== 335 | 336 | yallist@^4.0.0: 337 | version "4.0.0" 338 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 339 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 340 | 341 | yn@3.1.1: 342 | version "3.1.1" 343 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 344 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 345 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/decorator-demo/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@cspotcode/source-map-support@^0.8.0": 6 | version "0.8.1" 7 | resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" 8 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== 9 | dependencies: 10 | "@jridgewell/trace-mapping" "0.3.9" 11 | 12 | "@jridgewell/resolve-uri@^3.0.3": 13 | version "3.1.1" 14 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" 15 | integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== 16 | 17 | "@jridgewell/sourcemap-codec@^1.4.10": 18 | version "1.4.15" 19 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" 20 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 21 | 22 | "@jridgewell/trace-mapping@0.3.9": 23 | version "0.3.9" 24 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" 25 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== 26 | dependencies: 27 | "@jridgewell/resolve-uri" "^3.0.3" 28 | "@jridgewell/sourcemap-codec" "^1.4.10" 29 | 30 | "@tsconfig/node10@^1.0.7": 31 | version "1.0.9" 32 | resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" 33 | integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== 34 | 35 | "@tsconfig/node12@^1.0.7": 36 | version "1.0.11" 37 | resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" 38 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== 39 | 40 | "@tsconfig/node14@^1.0.0": 41 | version "1.0.3" 42 | resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" 43 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== 44 | 45 | "@tsconfig/node16@^1.0.2": 46 | version "1.0.4" 47 | resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" 48 | integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== 49 | 50 | "@types/node@^20.6.2": 51 | version "20.6.2" 52 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.2.tgz#a065925409f59657022e9063275cd0b9bd7e1b12" 53 | integrity sha512-Y+/1vGBHV/cYk6OI1Na/LHzwnlNCAfU3ZNGrc1LdRe/LAIbdDPTTv/HU3M7yXN448aTVDq3eKRm2cg7iKLb8gw== 54 | 55 | abbrev@1: 56 | version "1.1.1" 57 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 58 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 59 | 60 | acorn-walk@^8.1.1: 61 | version "8.2.0" 62 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" 63 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== 64 | 65 | acorn@^8.4.1: 66 | version "8.10.0" 67 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" 68 | integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== 69 | 70 | anymatch@~3.1.2: 71 | version "3.1.3" 72 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 73 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 74 | dependencies: 75 | normalize-path "^3.0.0" 76 | picomatch "^2.0.4" 77 | 78 | arg@^4.1.0: 79 | version "4.1.3" 80 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 81 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 82 | 83 | balanced-match@^1.0.0: 84 | version "1.0.2" 85 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 86 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 87 | 88 | binary-extensions@^2.0.0: 89 | version "2.2.0" 90 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 91 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 92 | 93 | brace-expansion@^1.1.7: 94 | version "1.1.11" 95 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 96 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 97 | dependencies: 98 | balanced-match "^1.0.0" 99 | concat-map "0.0.1" 100 | 101 | braces@~3.0.2: 102 | version "3.0.2" 103 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 104 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 105 | dependencies: 106 | fill-range "^7.0.1" 107 | 108 | chokidar@^3.5.2: 109 | version "3.5.3" 110 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 111 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 112 | dependencies: 113 | anymatch "~3.1.2" 114 | braces "~3.0.2" 115 | glob-parent "~5.1.2" 116 | is-binary-path "~2.1.0" 117 | is-glob "~4.0.1" 118 | normalize-path "~3.0.0" 119 | readdirp "~3.6.0" 120 | optionalDependencies: 121 | fsevents "~2.3.2" 122 | 123 | concat-map@0.0.1: 124 | version "0.0.1" 125 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 126 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 127 | 128 | create-require@^1.1.0: 129 | version "1.1.1" 130 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" 131 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 132 | 133 | debug@^3.2.7: 134 | version "3.2.7" 135 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 136 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 137 | dependencies: 138 | ms "^2.1.1" 139 | 140 | diff@^4.0.1: 141 | version "4.0.2" 142 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 143 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 144 | 145 | fill-range@^7.0.1: 146 | version "7.0.1" 147 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 148 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 149 | dependencies: 150 | to-regex-range "^5.0.1" 151 | 152 | fsevents@~2.3.2: 153 | version "2.3.3" 154 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" 155 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== 156 | 157 | glob-parent@~5.1.2: 158 | version "5.1.2" 159 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 160 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 161 | dependencies: 162 | is-glob "^4.0.1" 163 | 164 | has-flag@^3.0.0: 165 | version "3.0.0" 166 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 167 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 168 | 169 | ignore-by-default@^1.0.1: 170 | version "1.0.1" 171 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" 172 | integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== 173 | 174 | is-binary-path@~2.1.0: 175 | version "2.1.0" 176 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 177 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 178 | dependencies: 179 | binary-extensions "^2.0.0" 180 | 181 | is-extglob@^2.1.1: 182 | version "2.1.1" 183 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 184 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 185 | 186 | is-glob@^4.0.1, is-glob@~4.0.1: 187 | version "4.0.3" 188 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 189 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 190 | dependencies: 191 | is-extglob "^2.1.1" 192 | 193 | is-number@^7.0.0: 194 | version "7.0.0" 195 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 196 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 197 | 198 | lru-cache@^6.0.0: 199 | version "6.0.0" 200 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 201 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 202 | dependencies: 203 | yallist "^4.0.0" 204 | 205 | make-error@^1.1.1: 206 | version "1.3.6" 207 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 208 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 209 | 210 | minimatch@^3.1.2: 211 | version "3.1.2" 212 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 213 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 214 | dependencies: 215 | brace-expansion "^1.1.7" 216 | 217 | ms@^2.1.1: 218 | version "2.1.3" 219 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 220 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 221 | 222 | nodemon@^3.0.1: 223 | version "3.0.1" 224 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.0.1.tgz#affe822a2c5f21354466b2fc8ae83277d27dadc7" 225 | integrity sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw== 226 | dependencies: 227 | chokidar "^3.5.2" 228 | debug "^3.2.7" 229 | ignore-by-default "^1.0.1" 230 | minimatch "^3.1.2" 231 | pstree.remy "^1.1.8" 232 | semver "^7.5.3" 233 | simple-update-notifier "^2.0.0" 234 | supports-color "^5.5.0" 235 | touch "^3.1.0" 236 | undefsafe "^2.0.5" 237 | 238 | nopt@~1.0.10: 239 | version "1.0.10" 240 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" 241 | integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== 242 | dependencies: 243 | abbrev "1" 244 | 245 | normalize-path@^3.0.0, normalize-path@~3.0.0: 246 | version "3.0.0" 247 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 248 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 249 | 250 | picomatch@^2.0.4, picomatch@^2.2.1: 251 | version "2.3.1" 252 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 253 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 254 | 255 | pstree.remy@^1.1.8: 256 | version "1.1.8" 257 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" 258 | integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== 259 | 260 | readdirp@~3.6.0: 261 | version "3.6.0" 262 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 263 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 264 | dependencies: 265 | picomatch "^2.2.1" 266 | 267 | reflect-metadata@^0.1.13: 268 | version "0.1.13" 269 | resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" 270 | integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== 271 | 272 | semver@^7.5.3: 273 | version "7.5.4" 274 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" 275 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== 276 | dependencies: 277 | lru-cache "^6.0.0" 278 | 279 | simple-update-notifier@^2.0.0: 280 | version "2.0.0" 281 | resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" 282 | integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== 283 | dependencies: 284 | semver "^7.5.3" 285 | 286 | supports-color@^5.5.0: 287 | version "5.5.0" 288 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 289 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 290 | dependencies: 291 | has-flag "^3.0.0" 292 | 293 | to-regex-range@^5.0.1: 294 | version "5.0.1" 295 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 296 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 297 | dependencies: 298 | is-number "^7.0.0" 299 | 300 | touch@^3.1.0: 301 | version "3.1.0" 302 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" 303 | integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== 304 | dependencies: 305 | nopt "~1.0.10" 306 | 307 | ts-node@^10.9.1: 308 | version "10.9.1" 309 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" 310 | integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== 311 | dependencies: 312 | "@cspotcode/source-map-support" "^0.8.0" 313 | "@tsconfig/node10" "^1.0.7" 314 | "@tsconfig/node12" "^1.0.7" 315 | "@tsconfig/node14" "^1.0.0" 316 | "@tsconfig/node16" "^1.0.2" 317 | acorn "^8.4.1" 318 | acorn-walk "^8.1.1" 319 | arg "^4.1.0" 320 | create-require "^1.1.0" 321 | diff "^4.0.1" 322 | make-error "^1.1.1" 323 | v8-compile-cache-lib "^3.0.1" 324 | yn "3.1.1" 325 | 326 | typescript@^5.2.2: 327 | version "5.2.2" 328 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" 329 | integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== 330 | 331 | undefsafe@^2.0.5: 332 | version "2.0.5" 333 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" 334 | integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== 335 | 336 | v8-compile-cache-lib@^3.0.1: 337 | version "3.0.1" 338 | resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" 339 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== 340 | 341 | yallist@^4.0.0: 342 | version "4.0.0" 343 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 344 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 345 | 346 | yn@3.1.1: 347 | version "3.1.1" 348 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 349 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 350 | -------------------------------------------------------------------------------- /Nest.js 入门与核心原理解析/toy-nest/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@cspotcode/source-map-support@^0.8.0": 6 | version "0.8.1" 7 | resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" 8 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== 9 | dependencies: 10 | "@jridgewell/trace-mapping" "0.3.9" 11 | 12 | "@jridgewell/resolve-uri@^3.0.3": 13 | version "3.1.1" 14 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" 15 | integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== 16 | 17 | "@jridgewell/sourcemap-codec@^1.4.10": 18 | version "1.4.15" 19 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" 20 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 21 | 22 | "@jridgewell/trace-mapping@0.3.9": 23 | version "0.3.9" 24 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" 25 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== 26 | dependencies: 27 | "@jridgewell/resolve-uri" "^3.0.3" 28 | "@jridgewell/sourcemap-codec" "^1.4.10" 29 | 30 | "@tsconfig/node10@^1.0.7": 31 | version "1.0.9" 32 | resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" 33 | integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== 34 | 35 | "@tsconfig/node12@^1.0.7": 36 | version "1.0.11" 37 | resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" 38 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== 39 | 40 | "@tsconfig/node14@^1.0.0": 41 | version "1.0.3" 42 | resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" 43 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== 44 | 45 | "@tsconfig/node16@^1.0.2": 46 | version "1.0.4" 47 | resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" 48 | integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== 49 | 50 | "@types/body-parser@*": 51 | version "1.19.4" 52 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.4.tgz#78ad68f1f79eb851aa3634db0c7f57f6f601b462" 53 | integrity sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA== 54 | dependencies: 55 | "@types/connect" "*" 56 | "@types/node" "*" 57 | 58 | "@types/connect@*": 59 | version "3.4.37" 60 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.37.tgz#c66a96689fd3127c8772eb3e9e5c6028ec1a9af5" 61 | integrity sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q== 62 | dependencies: 63 | "@types/node" "*" 64 | 65 | "@types/express-serve-static-core@^4.17.33": 66 | version "4.17.39" 67 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz#2107afc0a4b035e6cb00accac3bdf2d76ae408c8" 68 | integrity sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ== 69 | dependencies: 70 | "@types/node" "*" 71 | "@types/qs" "*" 72 | "@types/range-parser" "*" 73 | "@types/send" "*" 74 | 75 | "@types/express@^4.17.20": 76 | version "4.17.20" 77 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.20.tgz#e7c9b40276d29e38a4e3564d7a3d65911e2aa433" 78 | integrity sha512-rOaqlkgEvOW495xErXMsmyX3WKBInbhG5eqojXYi3cGUaLoRDlXa5d52fkfWZT963AZ3v2eZ4MbKE6WpDAGVsw== 79 | dependencies: 80 | "@types/body-parser" "*" 81 | "@types/express-serve-static-core" "^4.17.33" 82 | "@types/qs" "*" 83 | "@types/serve-static" "*" 84 | 85 | "@types/http-errors@*": 86 | version "2.0.3" 87 | resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.3.tgz#c54e61f79b3947d040f150abd58f71efb422ff62" 88 | integrity sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA== 89 | 90 | "@types/mime@*": 91 | version "3.0.3" 92 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.3.tgz#886674659ce55fe7c6c06ec5ca7c0eb276a08f91" 93 | integrity sha512-i8MBln35l856k5iOhKk2XJ4SeAWg75mLIpZB4v6imOagKL6twsukBZGDMNhdOVk7yRFTMPpfILocMos59Q1otQ== 94 | 95 | "@types/mime@^1": 96 | version "1.3.4" 97 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.4.tgz#a4ed836e069491414bab92c31fdea9e557aca0d9" 98 | integrity sha512-1Gjee59G25MrQGk8bsNvC6fxNiRgUlGn2wlhGf95a59DrprnnHk80FIMMFG9XHMdrfsuA119ht06QPDXA1Z7tw== 99 | 100 | "@types/node@*": 101 | version "20.8.10" 102 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.10.tgz#a5448b895c753ae929c26ce85cab557c6d4a365e" 103 | integrity sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w== 104 | dependencies: 105 | undici-types "~5.26.4" 106 | 107 | "@types/node@^20.6.2": 108 | version "20.6.2" 109 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.2.tgz#a065925409f59657022e9063275cd0b9bd7e1b12" 110 | integrity sha512-Y+/1vGBHV/cYk6OI1Na/LHzwnlNCAfU3ZNGrc1LdRe/LAIbdDPTTv/HU3M7yXN448aTVDq3eKRm2cg7iKLb8gw== 111 | 112 | "@types/qs@*": 113 | version "6.9.9" 114 | resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.9.tgz#66f7b26288f6799d279edf13da7ccd40d2fa9197" 115 | integrity sha512-wYLxw35euwqGvTDx6zfY1vokBFnsK0HNrzc6xNHchxfO2hpuRg74GbkEW7e3sSmPvj0TjCDT1VCa6OtHXnubsg== 116 | 117 | "@types/range-parser@*": 118 | version "1.2.6" 119 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.6.tgz#7cb33992049fd7340d5b10c0098e104184dfcd2a" 120 | integrity sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA== 121 | 122 | "@types/send@*": 123 | version "0.17.3" 124 | resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.3.tgz#81b2ea5a3a18aad357405af2d643ccbe5a09020b" 125 | integrity sha512-/7fKxvKUoETxjFUsuFlPB9YndePpxxRAOfGC/yJdc9kTjTeP5kRCTzfnE8kPUKCeyiyIZu0YQ76s50hCedI1ug== 126 | dependencies: 127 | "@types/mime" "^1" 128 | "@types/node" "*" 129 | 130 | "@types/serve-static@*": 131 | version "1.15.4" 132 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.4.tgz#44b5895a68ca637f06c229119e1c774ca88f81b2" 133 | integrity sha512-aqqNfs1XTF0HDrFdlY//+SGUxmdSUbjeRXb5iaZc3x0/vMbYmdw9qvOgHWOyyLFxSSRnUuP5+724zBgfw8/WAw== 134 | dependencies: 135 | "@types/http-errors" "*" 136 | "@types/mime" "*" 137 | "@types/node" "*" 138 | 139 | abbrev@1: 140 | version "1.1.1" 141 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 142 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 143 | 144 | accepts@~1.3.8: 145 | version "1.3.8" 146 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" 147 | integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== 148 | dependencies: 149 | mime-types "~2.1.34" 150 | negotiator "0.6.3" 151 | 152 | acorn-walk@^8.1.1: 153 | version "8.2.0" 154 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" 155 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== 156 | 157 | acorn@^8.4.1: 158 | version "8.10.0" 159 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" 160 | integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== 161 | 162 | anymatch@~3.1.2: 163 | version "3.1.3" 164 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 165 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 166 | dependencies: 167 | normalize-path "^3.0.0" 168 | picomatch "^2.0.4" 169 | 170 | arg@^4.1.0: 171 | version "4.1.3" 172 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 173 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 174 | 175 | array-flatten@1.1.1: 176 | version "1.1.1" 177 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 178 | integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== 179 | 180 | balanced-match@^1.0.0: 181 | version "1.0.2" 182 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 183 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 184 | 185 | binary-extensions@^2.0.0: 186 | version "2.2.0" 187 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 188 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 189 | 190 | body-parser@1.20.1: 191 | version "1.20.1" 192 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" 193 | integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== 194 | dependencies: 195 | bytes "3.1.2" 196 | content-type "~1.0.4" 197 | debug "2.6.9" 198 | depd "2.0.0" 199 | destroy "1.2.0" 200 | http-errors "2.0.0" 201 | iconv-lite "0.4.24" 202 | on-finished "2.4.1" 203 | qs "6.11.0" 204 | raw-body "2.5.1" 205 | type-is "~1.6.18" 206 | unpipe "1.0.0" 207 | 208 | brace-expansion@^1.1.7: 209 | version "1.1.11" 210 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 211 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 212 | dependencies: 213 | balanced-match "^1.0.0" 214 | concat-map "0.0.1" 215 | 216 | braces@~3.0.2: 217 | version "3.0.2" 218 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 219 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 220 | dependencies: 221 | fill-range "^7.0.1" 222 | 223 | bytes@3.1.2: 224 | version "3.1.2" 225 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" 226 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== 227 | 228 | call-bind@^1.0.0: 229 | version "1.0.5" 230 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" 231 | integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== 232 | dependencies: 233 | function-bind "^1.1.2" 234 | get-intrinsic "^1.2.1" 235 | set-function-length "^1.1.1" 236 | 237 | chokidar@^3.5.2: 238 | version "3.5.3" 239 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 240 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 241 | dependencies: 242 | anymatch "~3.1.2" 243 | braces "~3.0.2" 244 | glob-parent "~5.1.2" 245 | is-binary-path "~2.1.0" 246 | is-glob "~4.0.1" 247 | normalize-path "~3.0.0" 248 | readdirp "~3.6.0" 249 | optionalDependencies: 250 | fsevents "~2.3.2" 251 | 252 | concat-map@0.0.1: 253 | version "0.0.1" 254 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 255 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 256 | 257 | content-disposition@0.5.4: 258 | version "0.5.4" 259 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" 260 | integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== 261 | dependencies: 262 | safe-buffer "5.2.1" 263 | 264 | content-type@~1.0.4: 265 | version "1.0.5" 266 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" 267 | integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== 268 | 269 | cookie-signature@1.0.6: 270 | version "1.0.6" 271 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 272 | integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== 273 | 274 | cookie@0.5.0: 275 | version "0.5.0" 276 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" 277 | integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== 278 | 279 | create-require@^1.1.0: 280 | version "1.1.1" 281 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" 282 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 283 | 284 | debug@2.6.9: 285 | version "2.6.9" 286 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 287 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 288 | dependencies: 289 | ms "2.0.0" 290 | 291 | debug@^3.2.7: 292 | version "3.2.7" 293 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 294 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 295 | dependencies: 296 | ms "^2.1.1" 297 | 298 | define-data-property@^1.1.1: 299 | version "1.1.1" 300 | resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" 301 | integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== 302 | dependencies: 303 | get-intrinsic "^1.2.1" 304 | gopd "^1.0.1" 305 | has-property-descriptors "^1.0.0" 306 | 307 | depd@2.0.0: 308 | version "2.0.0" 309 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" 310 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== 311 | 312 | destroy@1.2.0: 313 | version "1.2.0" 314 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" 315 | integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== 316 | 317 | diff@^4.0.1: 318 | version "4.0.2" 319 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 320 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 321 | 322 | ee-first@1.1.1: 323 | version "1.1.1" 324 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 325 | integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== 326 | 327 | encodeurl@~1.0.2: 328 | version "1.0.2" 329 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 330 | integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== 331 | 332 | escape-html@~1.0.3: 333 | version "1.0.3" 334 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 335 | integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== 336 | 337 | etag@~1.8.1: 338 | version "1.8.1" 339 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 340 | integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== 341 | 342 | express@^4.18.2: 343 | version "4.18.2" 344 | resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" 345 | integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== 346 | dependencies: 347 | accepts "~1.3.8" 348 | array-flatten "1.1.1" 349 | body-parser "1.20.1" 350 | content-disposition "0.5.4" 351 | content-type "~1.0.4" 352 | cookie "0.5.0" 353 | cookie-signature "1.0.6" 354 | debug "2.6.9" 355 | depd "2.0.0" 356 | encodeurl "~1.0.2" 357 | escape-html "~1.0.3" 358 | etag "~1.8.1" 359 | finalhandler "1.2.0" 360 | fresh "0.5.2" 361 | http-errors "2.0.0" 362 | merge-descriptors "1.0.1" 363 | methods "~1.1.2" 364 | on-finished "2.4.1" 365 | parseurl "~1.3.3" 366 | path-to-regexp "0.1.7" 367 | proxy-addr "~2.0.7" 368 | qs "6.11.0" 369 | range-parser "~1.2.1" 370 | safe-buffer "5.2.1" 371 | send "0.18.0" 372 | serve-static "1.15.0" 373 | setprototypeof "1.2.0" 374 | statuses "2.0.1" 375 | type-is "~1.6.18" 376 | utils-merge "1.0.1" 377 | vary "~1.1.2" 378 | 379 | fill-range@^7.0.1: 380 | version "7.0.1" 381 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 382 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 383 | dependencies: 384 | to-regex-range "^5.0.1" 385 | 386 | finalhandler@1.2.0: 387 | version "1.2.0" 388 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" 389 | integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== 390 | dependencies: 391 | debug "2.6.9" 392 | encodeurl "~1.0.2" 393 | escape-html "~1.0.3" 394 | on-finished "2.4.1" 395 | parseurl "~1.3.3" 396 | statuses "2.0.1" 397 | unpipe "~1.0.0" 398 | 399 | forwarded@0.2.0: 400 | version "0.2.0" 401 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" 402 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== 403 | 404 | fresh@0.5.2: 405 | version "0.5.2" 406 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 407 | integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== 408 | 409 | fsevents@~2.3.2: 410 | version "2.3.3" 411 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" 412 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== 413 | 414 | function-bind@^1.1.2: 415 | version "1.1.2" 416 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" 417 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== 418 | 419 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: 420 | version "1.2.2" 421 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" 422 | integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== 423 | dependencies: 424 | function-bind "^1.1.2" 425 | has-proto "^1.0.1" 426 | has-symbols "^1.0.3" 427 | hasown "^2.0.0" 428 | 429 | glob-parent@~5.1.2: 430 | version "5.1.2" 431 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 432 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 433 | dependencies: 434 | is-glob "^4.0.1" 435 | 436 | gopd@^1.0.1: 437 | version "1.0.1" 438 | resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" 439 | integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== 440 | dependencies: 441 | get-intrinsic "^1.1.3" 442 | 443 | has-flag@^3.0.0: 444 | version "3.0.0" 445 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 446 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 447 | 448 | has-property-descriptors@^1.0.0: 449 | version "1.0.1" 450 | resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" 451 | integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== 452 | dependencies: 453 | get-intrinsic "^1.2.2" 454 | 455 | has-proto@^1.0.1: 456 | version "1.0.1" 457 | resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" 458 | integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== 459 | 460 | has-symbols@^1.0.3: 461 | version "1.0.3" 462 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" 463 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 464 | 465 | hasown@^2.0.0: 466 | version "2.0.0" 467 | resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" 468 | integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== 469 | dependencies: 470 | function-bind "^1.1.2" 471 | 472 | http-errors@2.0.0: 473 | version "2.0.0" 474 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" 475 | integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== 476 | dependencies: 477 | depd "2.0.0" 478 | inherits "2.0.4" 479 | setprototypeof "1.2.0" 480 | statuses "2.0.1" 481 | toidentifier "1.0.1" 482 | 483 | iconv-lite@0.4.24: 484 | version "0.4.24" 485 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 486 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 487 | dependencies: 488 | safer-buffer ">= 2.1.2 < 3" 489 | 490 | ignore-by-default@^1.0.1: 491 | version "1.0.1" 492 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" 493 | integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== 494 | 495 | inherits@2.0.4: 496 | version "2.0.4" 497 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 498 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 499 | 500 | ipaddr.js@1.9.1: 501 | version "1.9.1" 502 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 503 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 504 | 505 | is-binary-path@~2.1.0: 506 | version "2.1.0" 507 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 508 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 509 | dependencies: 510 | binary-extensions "^2.0.0" 511 | 512 | is-extglob@^2.1.1: 513 | version "2.1.1" 514 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 515 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 516 | 517 | is-glob@^4.0.1, is-glob@~4.0.1: 518 | version "4.0.3" 519 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 520 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 521 | dependencies: 522 | is-extglob "^2.1.1" 523 | 524 | is-number@^7.0.0: 525 | version "7.0.0" 526 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 527 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 528 | 529 | lru-cache@^6.0.0: 530 | version "6.0.0" 531 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 532 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 533 | dependencies: 534 | yallist "^4.0.0" 535 | 536 | make-error@^1.1.1: 537 | version "1.3.6" 538 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 539 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 540 | 541 | media-typer@0.3.0: 542 | version "0.3.0" 543 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 544 | integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== 545 | 546 | merge-descriptors@1.0.1: 547 | version "1.0.1" 548 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 549 | integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== 550 | 551 | methods@~1.1.2: 552 | version "1.1.2" 553 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 554 | integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== 555 | 556 | mime-db@1.52.0: 557 | version "1.52.0" 558 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 559 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 560 | 561 | mime-types@~2.1.24, mime-types@~2.1.34: 562 | version "2.1.35" 563 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 564 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 565 | dependencies: 566 | mime-db "1.52.0" 567 | 568 | mime@1.6.0: 569 | version "1.6.0" 570 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 571 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 572 | 573 | minimatch@^3.1.2: 574 | version "3.1.2" 575 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 576 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 577 | dependencies: 578 | brace-expansion "^1.1.7" 579 | 580 | ms@2.0.0: 581 | version "2.0.0" 582 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 583 | integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== 584 | 585 | ms@2.1.3, ms@^2.1.1: 586 | version "2.1.3" 587 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 588 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 589 | 590 | negotiator@0.6.3: 591 | version "0.6.3" 592 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" 593 | integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== 594 | 595 | nodemon@^3.0.1: 596 | version "3.0.1" 597 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.0.1.tgz#affe822a2c5f21354466b2fc8ae83277d27dadc7" 598 | integrity sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw== 599 | dependencies: 600 | chokidar "^3.5.2" 601 | debug "^3.2.7" 602 | ignore-by-default "^1.0.1" 603 | minimatch "^3.1.2" 604 | pstree.remy "^1.1.8" 605 | semver "^7.5.3" 606 | simple-update-notifier "^2.0.0" 607 | supports-color "^5.5.0" 608 | touch "^3.1.0" 609 | undefsafe "^2.0.5" 610 | 611 | nopt@~1.0.10: 612 | version "1.0.10" 613 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" 614 | integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== 615 | dependencies: 616 | abbrev "1" 617 | 618 | normalize-path@^3.0.0, normalize-path@~3.0.0: 619 | version "3.0.0" 620 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 621 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 622 | 623 | object-inspect@^1.9.0: 624 | version "1.13.1" 625 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" 626 | integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== 627 | 628 | on-finished@2.4.1: 629 | version "2.4.1" 630 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" 631 | integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== 632 | dependencies: 633 | ee-first "1.1.1" 634 | 635 | parseurl@~1.3.3: 636 | version "1.3.3" 637 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 638 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 639 | 640 | path-to-regexp@0.1.7: 641 | version "0.1.7" 642 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 643 | integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== 644 | 645 | picomatch@^2.0.4, picomatch@^2.2.1: 646 | version "2.3.1" 647 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 648 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 649 | 650 | proxy-addr@~2.0.7: 651 | version "2.0.7" 652 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" 653 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== 654 | dependencies: 655 | forwarded "0.2.0" 656 | ipaddr.js "1.9.1" 657 | 658 | pstree.remy@^1.1.8: 659 | version "1.1.8" 660 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" 661 | integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== 662 | 663 | qs@6.11.0: 664 | version "6.11.0" 665 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" 666 | integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== 667 | dependencies: 668 | side-channel "^1.0.4" 669 | 670 | range-parser@~1.2.1: 671 | version "1.2.1" 672 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 673 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 674 | 675 | raw-body@2.5.1: 676 | version "2.5.1" 677 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" 678 | integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== 679 | dependencies: 680 | bytes "3.1.2" 681 | http-errors "2.0.0" 682 | iconv-lite "0.4.24" 683 | unpipe "1.0.0" 684 | 685 | readdirp@~3.6.0: 686 | version "3.6.0" 687 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 688 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 689 | dependencies: 690 | picomatch "^2.2.1" 691 | 692 | reflect-metadata@^0.1.13: 693 | version "0.1.13" 694 | resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" 695 | integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== 696 | 697 | safe-buffer@5.2.1: 698 | version "5.2.1" 699 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 700 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 701 | 702 | "safer-buffer@>= 2.1.2 < 3": 703 | version "2.1.2" 704 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 705 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 706 | 707 | semver@^7.5.3: 708 | version "7.5.4" 709 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" 710 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== 711 | dependencies: 712 | lru-cache "^6.0.0" 713 | 714 | send@0.18.0: 715 | version "0.18.0" 716 | resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" 717 | integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== 718 | dependencies: 719 | debug "2.6.9" 720 | depd "2.0.0" 721 | destroy "1.2.0" 722 | encodeurl "~1.0.2" 723 | escape-html "~1.0.3" 724 | etag "~1.8.1" 725 | fresh "0.5.2" 726 | http-errors "2.0.0" 727 | mime "1.6.0" 728 | ms "2.1.3" 729 | on-finished "2.4.1" 730 | range-parser "~1.2.1" 731 | statuses "2.0.1" 732 | 733 | serve-static@1.15.0: 734 | version "1.15.0" 735 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" 736 | integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== 737 | dependencies: 738 | encodeurl "~1.0.2" 739 | escape-html "~1.0.3" 740 | parseurl "~1.3.3" 741 | send "0.18.0" 742 | 743 | set-function-length@^1.1.1: 744 | version "1.1.1" 745 | resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" 746 | integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== 747 | dependencies: 748 | define-data-property "^1.1.1" 749 | get-intrinsic "^1.2.1" 750 | gopd "^1.0.1" 751 | has-property-descriptors "^1.0.0" 752 | 753 | setprototypeof@1.2.0: 754 | version "1.2.0" 755 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" 756 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== 757 | 758 | side-channel@^1.0.4: 759 | version "1.0.4" 760 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" 761 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 762 | dependencies: 763 | call-bind "^1.0.0" 764 | get-intrinsic "^1.0.2" 765 | object-inspect "^1.9.0" 766 | 767 | simple-update-notifier@^2.0.0: 768 | version "2.0.0" 769 | resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" 770 | integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== 771 | dependencies: 772 | semver "^7.5.3" 773 | 774 | statuses@2.0.1: 775 | version "2.0.1" 776 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" 777 | integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== 778 | 779 | supports-color@^5.5.0: 780 | version "5.5.0" 781 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 782 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 783 | dependencies: 784 | has-flag "^3.0.0" 785 | 786 | to-regex-range@^5.0.1: 787 | version "5.0.1" 788 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 789 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 790 | dependencies: 791 | is-number "^7.0.0" 792 | 793 | toidentifier@1.0.1: 794 | version "1.0.1" 795 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" 796 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== 797 | 798 | touch@^3.1.0: 799 | version "3.1.0" 800 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" 801 | integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== 802 | dependencies: 803 | nopt "~1.0.10" 804 | 805 | ts-node@^10.9.1: 806 | version "10.9.1" 807 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" 808 | integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== 809 | dependencies: 810 | "@cspotcode/source-map-support" "^0.8.0" 811 | "@tsconfig/node10" "^1.0.7" 812 | "@tsconfig/node12" "^1.0.7" 813 | "@tsconfig/node14" "^1.0.0" 814 | "@tsconfig/node16" "^1.0.2" 815 | acorn "^8.4.1" 816 | acorn-walk "^8.1.1" 817 | arg "^4.1.0" 818 | create-require "^1.1.0" 819 | diff "^4.0.1" 820 | make-error "^1.1.1" 821 | v8-compile-cache-lib "^3.0.1" 822 | yn "3.1.1" 823 | 824 | type-is@~1.6.18: 825 | version "1.6.18" 826 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 827 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 828 | dependencies: 829 | media-typer "0.3.0" 830 | mime-types "~2.1.24" 831 | 832 | typescript@^5.2.2: 833 | version "5.2.2" 834 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" 835 | integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== 836 | 837 | undefsafe@^2.0.5: 838 | version "2.0.5" 839 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" 840 | integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== 841 | 842 | undici-types@~5.26.4: 843 | version "5.26.5" 844 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" 845 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== 846 | 847 | unpipe@1.0.0, unpipe@~1.0.0: 848 | version "1.0.0" 849 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 850 | integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== 851 | 852 | utils-merge@1.0.1: 853 | version "1.0.1" 854 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 855 | integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== 856 | 857 | v8-compile-cache-lib@^3.0.1: 858 | version "3.0.1" 859 | resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" 860 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== 861 | 862 | vary@~1.1.2: 863 | version "1.1.2" 864 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 865 | integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== 866 | 867 | yallist@^4.0.0: 868 | version "4.0.0" 869 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 870 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 871 | 872 | yn@3.1.1: 873 | version "3.1.1" 874 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 875 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 876 | --------------------------------------------------------------------------------