Trần Viết Sơn commited on
Commit
3cdf53d
·
1 Parent(s): 88f437e

feat: config nest project

Browse files
backend/.env.example ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ DB_HOST=0.0.0.0
2
+ DB_PORT=3306
3
+ DB_USER='root'
4
+ DB_PASSWORD='your_password'
5
+ DB_NAME='pbl6'
backend/README.md CHANGED
@@ -1,37 +1,24 @@
1
- <p align="center">
2
- <a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="120" alt="Nest Logo" /></a>
3
- </p>
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
- <p align="center">A progressive <a href="http://nodejs.org" target="_blank">Node.js</a> framework for building efficient and scalable server-side applications.</p>
9
- <p align="center">
10
- <a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/v/@nestjs/core.svg" alt="NPM Version" /></a>
11
- <a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/l/@nestjs/core.svg" alt="Package License" /></a>
12
- <a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/dm/@nestjs/common.svg" alt="NPM Downloads" /></a>
13
- <a href="https://circleci.com/gh/nestjs/nest" target="_blank"><img src="https://img.shields.io/circleci/build/github/nestjs/nest/master" alt="CircleCI" /></a>
14
- <a href="https://coveralls.io/github/nestjs/nest?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#9" alt="Coverage" /></a>
15
- <a href="https://discord.gg/G7Qnnhy" target="_blank"><img src="https://img.shields.io/badge/discord-online-brightgreen.svg" alt="Discord"/></a>
16
- <a href="https://opencollective.com/nest#backer" target="_blank"><img src="https://opencollective.com/nest/backers/badge.svg" alt="Backers on Open Collective" /></a>
17
- <a href="https://opencollective.com/nest#sponsor" target="_blank"><img src="https://opencollective.com/nest/sponsors/badge.svg" alt="Sponsors on Open Collective" /></a>
18
- <a href="https://paypal.me/kamilmysliwiec" target="_blank"><img src="https://img.shields.io/badge/Donate-PayPal-ff3f59.svg" alt="Donate us"/></a>
19
- <a href="https://opencollective.com/nest#sponsor" target="_blank"><img src="https://img.shields.io/badge/Support%20us-Open%20Collective-41B883.svg" alt="Support us"></a>
20
- <a href="https://twitter.com/nestframework" target="_blank"><img src="https://img.shields.io/twitter/follow/nestframework.svg?style=social&label=Follow" alt="Follow us on Twitter"></a>
21
- </p>
22
- <!--[![Backers on Open Collective](https://opencollective.com/nest/backers/badge.svg)](https://opencollective.com/nest#backer)
23
- [![Sponsors on Open Collective](https://opencollective.com/nest/sponsors/badge.svg)](https://opencollective.com/nest#sponsor)-->
24
-
25
  ## Description
26
 
27
  [Nest](https://github.com/nestjs/nest) framework TypeScript starter repository.
28
 
29
  ## Project setup
30
 
 
 
31
  ```bash
32
  $ npm install
33
  ```
34
 
 
 
 
 
 
 
 
 
 
35
  ## Compile and run the project
36
 
37
  ```bash
@@ -40,46 +27,10 @@ $ npm run start
40
 
41
  # watch mode
42
  $ npm run start:dev
43
-
44
- # production mode
45
- $ npm run start:prod
46
  ```
47
 
48
  ## Run tests
49
 
50
- ```bash
51
- # unit tests
52
- $ npm run test
53
-
54
- # e2e tests
55
- $ npm run test:e2e
56
-
57
- # test coverage
58
- $ npm run test:cov
59
- ```
60
-
61
- ## Resources
62
-
63
- Check out a few resources that may come in handy when working with NestJS:
64
-
65
- - Visit the [NestJS Documentation](https://docs.nestjs.com) to learn more about the framework.
66
- - For questions and support, please visit our [Discord channel](https://discord.gg/G7Qnnhy).
67
- - To dive deeper and get more hands-on experience, check out our official video [courses](https://courses.nestjs.com/).
68
- - Visualize your application graph and interact with the NestJS application in real-time using [NestJS Devtools](https://devtools.nestjs.com).
69
- - Need help with your project (part-time to full-time)? Check out our official [enterprise support](https://enterprise.nestjs.com).
70
- - To stay in the loop and get updates, follow us on [X](https://x.com/nestframework) and [LinkedIn](https://linkedin.com/company/nestjs).
71
- - Looking for a job, or have a job to offer? Check out our official [Jobs board](https://jobs.nestjs.com).
72
-
73
- ## Support
74
-
75
- 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).
76
-
77
- ## Stay in touch
78
-
79
- - Author - [Kamil Myśliwiec](https://twitter.com/kammysliwiec)
80
- - Website - [https://nestjs.com](https://nestjs.com/)
81
- - Twitter - [@nestframework](https://twitter.com/nestframework)
82
-
83
- ## License
84
 
85
- Nest is [MIT licensed](https://github.com/nestjs/nest/blob/master/LICENSE).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ## Description
2
 
3
  [Nest](https://github.com/nestjs/nest) framework TypeScript starter repository.
4
 
5
  ## Project setup
6
 
7
+ #### 1. Install all dependencies
8
+
9
  ```bash
10
  $ npm install
11
  ```
12
 
13
+ #### 2. Initialize database
14
+
15
+ - Download and install `mysql`.
16
+ - Create schema name `pbl6` or whatever.
17
+
18
+ #### 3. Create .env file
19
+
20
+ - Copy from `.env.example`
21
+
22
  ## Compile and run the project
23
 
24
  ```bash
 
27
 
28
  # watch mode
29
  $ npm run start:dev
 
 
 
30
  ```
31
 
32
  ## Run tests
33
 
34
+ We currently don't care about test
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
 
36
+ Notice: We use `synchronize: true (src/config/database)`, so that no need to use migration
backend/package-lock.json CHANGED
@@ -10,10 +10,15 @@
10
  "license": "UNLICENSED",
11
  "dependencies": {
12
  "@nestjs/common": "^10.0.0",
 
13
  "@nestjs/core": "^10.0.0",
14
  "@nestjs/platform-express": "^10.0.0",
 
 
 
15
  "reflect-metadata": "^0.2.0",
16
- "rxjs": "^7.8.1"
 
17
  },
18
  "devDependencies": {
19
  "@nestjs/cli": "^10.0.0",
@@ -776,7 +781,7 @@
776
  "version": "0.8.1",
777
  "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
778
  "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
779
- "dev": true,
780
  "dependencies": {
781
  "@jridgewell/trace-mapping": "0.3.9"
782
  },
@@ -788,7 +793,7 @@
788
  "version": "0.3.9",
789
  "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
790
  "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
791
- "dev": true,
792
  "dependencies": {
793
  "@jridgewell/resolve-uri": "^3.0.3",
794
  "@jridgewell/sourcemap-codec": "^1.4.10"
@@ -955,7 +960,6 @@
955
  "version": "8.0.2",
956
  "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
957
  "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
958
- "dev": true,
959
  "dependencies": {
960
  "string-width": "^5.1.2",
961
  "string-width-cjs": "npm:string-width@^4.2.0",
@@ -972,7 +976,6 @@
972
  "version": "6.1.0",
973
  "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
974
  "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
975
- "dev": true,
976
  "engines": {
977
  "node": ">=12"
978
  },
@@ -984,7 +987,6 @@
984
  "version": "6.2.1",
985
  "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
986
  "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
987
- "dev": true,
988
  "engines": {
989
  "node": ">=12"
990
  },
@@ -995,14 +997,12 @@
995
  "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
996
  "version": "9.2.2",
997
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
998
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
999
- "dev": true
1000
  },
1001
  "node_modules/@isaacs/cliui/node_modules/string-width": {
1002
  "version": "5.1.2",
1003
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
1004
  "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
1005
- "dev": true,
1006
  "dependencies": {
1007
  "eastasianwidth": "^0.2.0",
1008
  "emoji-regex": "^9.2.2",
@@ -1019,7 +1019,6 @@
1019
  "version": "7.1.0",
1020
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
1021
  "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
1022
- "dev": true,
1023
  "dependencies": {
1024
  "ansi-regex": "^6.0.1"
1025
  },
@@ -1034,7 +1033,6 @@
1034
  "version": "8.1.0",
1035
  "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
1036
  "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
1037
- "dev": true,
1038
  "dependencies": {
1039
  "ansi-styles": "^6.1.0",
1040
  "string-width": "^5.0.1",
@@ -1494,7 +1492,7 @@
1494
  "version": "3.1.2",
1495
  "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
1496
  "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
1497
- "dev": true,
1498
  "engines": {
1499
  "node": ">=6.0.0"
1500
  }
@@ -1522,7 +1520,7 @@
1522
  "version": "1.5.0",
1523
  "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
1524
  "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
1525
- "dev": true
1526
  },
1527
  "node_modules/@jridgewell/trace-mapping": {
1528
  "version": "0.3.25",
@@ -1640,6 +1638,20 @@
1640
  }
1641
  }
1642
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1643
  "node_modules/@nestjs/core": {
1644
  "version": "10.4.3",
1645
  "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.4.3.tgz",
@@ -1746,6 +1758,21 @@
1746
  }
1747
  }
1748
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1749
  "node_modules/@nodelib/fs.scandir": {
1750
  "version": "2.1.5",
1751
  "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -1802,7 +1829,6 @@
1802
  "version": "0.11.0",
1803
  "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
1804
  "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
1805
- "dev": true,
1806
  "optional": true,
1807
  "engines": {
1808
  "node": ">=14"
@@ -1844,29 +1870,34 @@
1844
  "@sinonjs/commons": "^3.0.0"
1845
  }
1846
  },
 
 
 
 
 
1847
  "node_modules/@tsconfig/node10": {
1848
  "version": "1.0.11",
1849
  "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
1850
  "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
1851
- "dev": true
1852
  },
1853
  "node_modules/@tsconfig/node12": {
1854
  "version": "1.0.11",
1855
  "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
1856
  "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
1857
- "dev": true
1858
  },
1859
  "node_modules/@tsconfig/node14": {
1860
  "version": "1.0.3",
1861
  "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
1862
  "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
1863
- "dev": true
1864
  },
1865
  "node_modules/@tsconfig/node16": {
1866
  "version": "1.0.4",
1867
  "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
1868
  "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
1869
- "dev": true
1870
  },
1871
  "node_modules/@types/babel__core": {
1872
  "version": "7.20.5",
@@ -2035,7 +2066,7 @@
2035
  "version": "20.16.5",
2036
  "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.5.tgz",
2037
  "integrity": "sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==",
2038
- "dev": true,
2039
  "dependencies": {
2040
  "undici-types": "~6.19.2"
2041
  }
@@ -2478,7 +2509,7 @@
2478
  "version": "8.12.1",
2479
  "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
2480
  "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
2481
- "dev": true,
2482
  "bin": {
2483
  "acorn": "bin/acorn"
2484
  },
@@ -2508,7 +2539,7 @@
2508
  "version": "8.3.4",
2509
  "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
2510
  "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
2511
- "dev": true,
2512
  "dependencies": {
2513
  "acorn": "^8.11.0"
2514
  },
@@ -2589,7 +2620,6 @@
2589
  "version": "5.0.1",
2590
  "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2591
  "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2592
- "dev": true,
2593
  "engines": {
2594
  "node": ">=8"
2595
  }
@@ -2608,6 +2638,11 @@
2608
  "url": "https://github.com/chalk/ansi-styles?sponsor=1"
2609
  }
2610
  },
 
 
 
 
 
2611
  "node_modules/anymatch": {
2612
  "version": "3.1.3",
2613
  "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
@@ -2633,6 +2668,14 @@
2633
  "url": "https://github.com/sponsors/jonschlinkert"
2634
  }
2635
  },
 
 
 
 
 
 
 
 
2636
  "node_modules/append-field": {
2637
  "version": "1.0.0",
2638
  "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
@@ -2642,7 +2685,7 @@
2642
  "version": "4.1.3",
2643
  "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
2644
  "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
2645
- "dev": true
2646
  },
2647
  "node_modules/argparse": {
2648
  "version": "2.0.1",
@@ -2679,6 +2722,14 @@
2679
  "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
2680
  "dev": true
2681
  },
 
 
 
 
 
 
 
 
2682
  "node_modules/babel-jest": {
2683
  "version": "29.7.0",
2684
  "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
@@ -2801,14 +2852,12 @@
2801
  "node_modules/balanced-match": {
2802
  "version": "1.0.2",
2803
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
2804
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
2805
- "dev": true
2806
  },
2807
  "node_modules/base64-js": {
2808
  "version": "1.5.1",
2809
  "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
2810
  "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
2811
- "dev": true,
2812
  "funding": [
2813
  {
2814
  "type": "github",
@@ -2901,7 +2950,6 @@
2901
  "version": "2.0.1",
2902
  "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
2903
  "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
2904
- "dev": true,
2905
  "dependencies": {
2906
  "balanced-match": "^1.0.0"
2907
  }
@@ -3171,6 +3219,77 @@
3171
  "node": ">=8"
3172
  }
3173
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3174
  "node_modules/cli-spinners": {
3175
  "version": "2.9.2",
3176
  "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
@@ -3211,7 +3330,6 @@
3211
  "version": "8.0.1",
3212
  "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
3213
  "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
3214
- "dev": true,
3215
  "dependencies": {
3216
  "string-width": "^4.2.0",
3217
  "strip-ansi": "^6.0.1",
@@ -3225,7 +3343,6 @@
3225
  "version": "7.0.0",
3226
  "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
3227
  "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
3228
- "dev": true,
3229
  "dependencies": {
3230
  "ansi-styles": "^4.0.0",
3231
  "string-width": "^4.1.0",
@@ -3462,13 +3579,12 @@
3462
  "version": "1.1.1",
3463
  "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
3464
  "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
3465
- "dev": true
3466
  },
3467
  "node_modules/cross-spawn": {
3468
  "version": "7.0.3",
3469
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
3470
  "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
3471
- "dev": true,
3472
  "dependencies": {
3473
  "path-key": "^3.1.0",
3474
  "shebang-command": "^2.0.0",
@@ -3478,11 +3594,15 @@
3478
  "node": ">= 8"
3479
  }
3480
  },
 
 
 
 
 
3481
  "node_modules/debug": {
3482
  "version": "4.3.7",
3483
  "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
3484
  "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
3485
- "dev": true,
3486
  "dependencies": {
3487
  "ms": "^2.1.3"
3488
  },
@@ -3561,6 +3681,14 @@
3561
  "node": ">=0.4.0"
3562
  }
3563
  },
 
 
 
 
 
 
 
 
3564
  "node_modules/depd": {
3565
  "version": "2.0.0",
3566
  "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -3601,7 +3729,7 @@
3601
  "version": "4.0.2",
3602
  "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
3603
  "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
3604
- "dev": true,
3605
  "engines": {
3606
  "node": ">=0.3.1"
3607
  }
@@ -3627,11 +3755,29 @@
3627
  "node": ">=6.0.0"
3628
  }
3629
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3630
  "node_modules/eastasianwidth": {
3631
  "version": "0.2.0",
3632
  "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
3633
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
3634
- "dev": true
3635
  },
3636
  "node_modules/ee-first": {
3637
  "version": "1.1.1",
@@ -3674,8 +3820,7 @@
3674
  "node_modules/emoji-regex": {
3675
  "version": "8.0.0",
3676
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
3677
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
3678
- "dev": true
3679
  },
3680
  "node_modules/encodeurl": {
3681
  "version": "2.0.0",
@@ -3736,7 +3881,6 @@
3736
  "version": "3.2.0",
3737
  "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
3738
  "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
3739
- "dev": true,
3740
  "engines": {
3741
  "node": ">=6"
3742
  }
@@ -4357,7 +4501,6 @@
4357
  "version": "3.3.0",
4358
  "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
4359
  "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
4360
- "dev": true,
4361
  "dependencies": {
4362
  "cross-spawn": "^7.0.0",
4363
  "signal-exit": "^4.0.1"
@@ -4511,6 +4654,14 @@
4511
  "url": "https://github.com/sponsors/ljharb"
4512
  }
4513
  },
 
 
 
 
 
 
 
 
4514
  "node_modules/gensync": {
4515
  "version": "1.0.0-beta.2",
4516
  "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -4524,7 +4675,6 @@
4524
  "version": "2.0.5",
4525
  "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
4526
  "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
4527
- "dev": true,
4528
  "engines": {
4529
  "node": "6.* || 8.* || >= 10.*"
4530
  }
@@ -4572,7 +4722,6 @@
4572
  "version": "10.4.2",
4573
  "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
4574
  "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
4575
- "dev": true,
4576
  "dependencies": {
4577
  "foreground-child": "^3.1.0",
4578
  "jackspeak": "^3.1.2",
@@ -4717,6 +4866,14 @@
4717
  "node": ">=8"
4718
  }
4719
  },
 
 
 
 
 
 
 
 
4720
  "node_modules/html-escaper": {
4721
  "version": "2.0.2",
4722
  "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
@@ -4762,7 +4919,6 @@
4762
  "version": "1.2.1",
4763
  "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
4764
  "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
4765
- "dev": true,
4766
  "funding": [
4767
  {
4768
  "type": "github",
@@ -4927,7 +5083,6 @@
4927
  "version": "3.0.0",
4928
  "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
4929
  "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
4930
- "dev": true,
4931
  "engines": {
4932
  "node": ">=8"
4933
  }
@@ -4980,6 +5135,11 @@
4980
  "node": ">=8"
4981
  }
4982
  },
 
 
 
 
 
4983
  "node_modules/is-stream": {
4984
  "version": "2.0.1",
4985
  "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
@@ -5012,8 +5172,7 @@
5012
  "node_modules/isexe": {
5013
  "version": "2.0.0",
5014
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
5015
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
5016
- "dev": true
5017
  },
5018
  "node_modules/istanbul-lib-coverage": {
5019
  "version": "3.2.2",
@@ -5102,7 +5261,6 @@
5102
  "version": "3.4.3",
5103
  "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
5104
  "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
5105
- "dev": true,
5106
  "dependencies": {
5107
  "@isaacs/cliui": "^8.0.2"
5108
  },
@@ -5982,8 +6140,7 @@
5982
  "node_modules/lodash": {
5983
  "version": "4.17.21",
5984
  "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
5985
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
5986
- "dev": true
5987
  },
5988
  "node_modules/lodash.memoize": {
5989
  "version": "4.1.2",
@@ -6013,6 +6170,11 @@
6013
  "url": "https://github.com/sponsors/sindresorhus"
6014
  }
6015
  },
 
 
 
 
 
6016
  "node_modules/lru-cache": {
6017
  "version": "5.1.1",
6018
  "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@@ -6022,6 +6184,20 @@
6022
  "yallist": "^3.0.2"
6023
  }
6024
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6025
  "node_modules/magic-string": {
6026
  "version": "0.30.8",
6027
  "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz",
@@ -6053,7 +6229,7 @@
6053
  "version": "1.3.6",
6054
  "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
6055
  "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
6056
- "dev": true
6057
  },
6058
  "node_modules/makeerror": {
6059
  "version": "1.0.12",
@@ -6183,7 +6359,6 @@
6183
  "version": "9.0.5",
6184
  "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
6185
  "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
6186
- "dev": true,
6187
  "dependencies": {
6188
  "brace-expansion": "^2.0.1"
6189
  },
@@ -6206,7 +6381,6 @@
6206
  "version": "7.1.2",
6207
  "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
6208
  "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
6209
- "dev": true,
6210
  "engines": {
6211
  "node": ">=16 || 14 >=14.17"
6212
  }
@@ -6250,6 +6424,65 @@
6250
  "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
6251
  "dev": true
6252
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6253
  "node_modules/natural-compare": {
6254
  "version": "1.4.0",
6255
  "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -6482,8 +6715,7 @@
6482
  "node_modules/package-json-from-dist": {
6483
  "version": "1.0.0",
6484
  "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
6485
- "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
6486
- "dev": true
6487
  },
6488
  "node_modules/parent-module": {
6489
  "version": "1.0.1",
@@ -6515,6 +6747,24 @@
6515
  "url": "https://github.com/sponsors/sindresorhus"
6516
  }
6517
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6518
  "node_modules/parseurl": {
6519
  "version": "1.3.3",
6520
  "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -6545,7 +6795,6 @@
6545
  "version": "3.1.1",
6546
  "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
6547
  "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
6548
- "dev": true,
6549
  "engines": {
6550
  "node": ">=8"
6551
  }
@@ -6560,7 +6809,6 @@
6560
  "version": "1.11.1",
6561
  "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
6562
  "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
6563
- "dev": true,
6564
  "dependencies": {
6565
  "lru-cache": "^10.2.0",
6566
  "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
@@ -6575,8 +6823,7 @@
6575
  "node_modules/path-scurry/node_modules/lru-cache": {
6576
  "version": "10.4.3",
6577
  "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
6578
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
6579
- "dev": true
6580
  },
6581
  "node_modules/path-to-regexp": {
6582
  "version": "3.3.0",
@@ -6941,7 +7188,6 @@
6941
  "version": "2.1.1",
6942
  "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
6943
  "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
6944
- "dev": true,
6945
  "engines": {
6946
  "node": ">=0.10.0"
6947
  }
@@ -7268,6 +7514,11 @@
7268
  "node": ">= 0.8"
7269
  }
7270
  },
 
 
 
 
 
7271
  "node_modules/serialize-javascript": {
7272
  "version": "6.0.2",
7273
  "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
@@ -7312,11 +7563,22 @@
7312
  "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
7313
  "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
7314
  },
 
 
 
 
 
 
 
 
 
 
 
 
7315
  "node_modules/shebang-command": {
7316
  "version": "2.0.0",
7317
  "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
7318
  "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
7319
- "dev": true,
7320
  "dependencies": {
7321
  "shebang-regex": "^3.0.0"
7322
  },
@@ -7328,7 +7590,6 @@
7328
  "version": "3.0.0",
7329
  "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
7330
  "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
7331
- "dev": true,
7332
  "engines": {
7333
  "node": ">=8"
7334
  }
@@ -7354,7 +7615,6 @@
7354
  "version": "4.1.0",
7355
  "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
7356
  "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
7357
- "dev": true,
7358
  "engines": {
7359
  "node": ">=14"
7360
  },
@@ -7411,6 +7671,14 @@
7411
  "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
7412
  "dev": true
7413
  },
 
 
 
 
 
 
 
 
7414
  "node_modules/stack-utils": {
7415
  "version": "2.0.6",
7416
  "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
@@ -7478,7 +7746,6 @@
7478
  "version": "4.2.3",
7479
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
7480
  "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
7481
- "dev": true,
7482
  "dependencies": {
7483
  "emoji-regex": "^8.0.0",
7484
  "is-fullwidth-code-point": "^3.0.0",
@@ -7493,7 +7760,6 @@
7493
  "version": "4.2.3",
7494
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
7495
  "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
7496
- "dev": true,
7497
  "dependencies": {
7498
  "emoji-regex": "^8.0.0",
7499
  "is-fullwidth-code-point": "^3.0.0",
@@ -7507,7 +7773,6 @@
7507
  "version": "6.0.1",
7508
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
7509
  "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
7510
- "dev": true,
7511
  "dependencies": {
7512
  "ansi-regex": "^5.0.1"
7513
  },
@@ -7520,7 +7785,6 @@
7520
  "version": "6.0.1",
7521
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
7522
  "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
7523
- "dev": true,
7524
  "dependencies": {
7525
  "ansi-regex": "^5.0.1"
7526
  },
@@ -7810,6 +8074,25 @@
7810
  "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
7811
  "dev": true
7812
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7813
  "node_modules/through": {
7814
  "version": "2.3.8",
7815
  "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@@ -7961,7 +8244,7 @@
7961
  "version": "10.9.2",
7962
  "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
7963
  "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
7964
- "dev": true,
7965
  "dependencies": {
7966
  "@cspotcode/source-map-support": "^0.8.0",
7967
  "@tsconfig/node10": "^1.0.7",
@@ -8092,11 +8375,153 @@
8092
  "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
8093
  "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
8094
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8095
  "node_modules/typescript": {
8096
  "version": "5.6.2",
8097
  "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
8098
  "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
8099
- "dev": true,
8100
  "bin": {
8101
  "tsc": "bin/tsc",
8102
  "tsserver": "bin/tsserver"
@@ -8120,7 +8545,7 @@
8120
  "version": "6.19.8",
8121
  "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
8122
  "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
8123
- "dev": true
8124
  },
8125
  "node_modules/universalify": {
8126
  "version": "2.0.1",
@@ -8191,11 +8616,23 @@
8191
  "node": ">= 0.4.0"
8192
  }
8193
  },
 
 
 
 
 
 
 
 
 
 
 
 
8194
  "node_modules/v8-compile-cache-lib": {
8195
  "version": "3.0.1",
8196
  "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
8197
  "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
8198
- "dev": true
8199
  },
8200
  "node_modules/v8-to-istanbul": {
8201
  "version": "9.3.0",
@@ -8354,7 +8791,6 @@
8354
  "version": "2.0.2",
8355
  "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
8356
  "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
8357
- "dev": true,
8358
  "dependencies": {
8359
  "isexe": "^2.0.0"
8360
  },
@@ -8393,7 +8829,6 @@
8393
  "version": "7.0.0",
8394
  "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
8395
  "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
8396
- "dev": true,
8397
  "dependencies": {
8398
  "ansi-styles": "^4.0.0",
8399
  "string-width": "^4.1.0",
@@ -8443,7 +8878,6 @@
8443
  "version": "5.0.8",
8444
  "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
8445
  "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
8446
- "dev": true,
8447
  "engines": {
8448
  "node": ">=10"
8449
  }
@@ -8458,7 +8892,6 @@
8458
  "version": "17.7.2",
8459
  "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
8460
  "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
8461
- "dev": true,
8462
  "dependencies": {
8463
  "cliui": "^8.0.1",
8464
  "escalade": "^3.1.1",
@@ -8476,7 +8909,6 @@
8476
  "version": "21.1.1",
8477
  "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
8478
  "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
8479
- "dev": true,
8480
  "engines": {
8481
  "node": ">=12"
8482
  }
@@ -8485,7 +8917,7 @@
8485
  "version": "3.1.1",
8486
  "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
8487
  "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
8488
- "dev": true,
8489
  "engines": {
8490
  "node": ">=6"
8491
  }
 
10
  "license": "UNLICENSED",
11
  "dependencies": {
12
  "@nestjs/common": "^10.0.0",
13
+ "@nestjs/config": "^3.2.3",
14
  "@nestjs/core": "^10.0.0",
15
  "@nestjs/platform-express": "^10.0.0",
16
+ "@nestjs/typeorm": "^10.0.2",
17
+ "dotenv": "^16.4.5",
18
+ "mysql2": "^3.11.3",
19
  "reflect-metadata": "^0.2.0",
20
+ "rxjs": "^7.8.1",
21
+ "typeorm": "^0.3.20"
22
  },
23
  "devDependencies": {
24
  "@nestjs/cli": "^10.0.0",
 
781
  "version": "0.8.1",
782
  "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
783
  "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
784
+ "devOptional": true,
785
  "dependencies": {
786
  "@jridgewell/trace-mapping": "0.3.9"
787
  },
 
793
  "version": "0.3.9",
794
  "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
795
  "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
796
+ "devOptional": true,
797
  "dependencies": {
798
  "@jridgewell/resolve-uri": "^3.0.3",
799
  "@jridgewell/sourcemap-codec": "^1.4.10"
 
960
  "version": "8.0.2",
961
  "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
962
  "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
 
963
  "dependencies": {
964
  "string-width": "^5.1.2",
965
  "string-width-cjs": "npm:string-width@^4.2.0",
 
976
  "version": "6.1.0",
977
  "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
978
  "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
 
979
  "engines": {
980
  "node": ">=12"
981
  },
 
987
  "version": "6.2.1",
988
  "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
989
  "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
 
990
  "engines": {
991
  "node": ">=12"
992
  },
 
997
  "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
998
  "version": "9.2.2",
999
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
1000
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
 
1001
  },
1002
  "node_modules/@isaacs/cliui/node_modules/string-width": {
1003
  "version": "5.1.2",
1004
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
1005
  "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
 
1006
  "dependencies": {
1007
  "eastasianwidth": "^0.2.0",
1008
  "emoji-regex": "^9.2.2",
 
1019
  "version": "7.1.0",
1020
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
1021
  "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
 
1022
  "dependencies": {
1023
  "ansi-regex": "^6.0.1"
1024
  },
 
1033
  "version": "8.1.0",
1034
  "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
1035
  "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
 
1036
  "dependencies": {
1037
  "ansi-styles": "^6.1.0",
1038
  "string-width": "^5.0.1",
 
1492
  "version": "3.1.2",
1493
  "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
1494
  "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
1495
+ "devOptional": true,
1496
  "engines": {
1497
  "node": ">=6.0.0"
1498
  }
 
1520
  "version": "1.5.0",
1521
  "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
1522
  "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
1523
+ "devOptional": true
1524
  },
1525
  "node_modules/@jridgewell/trace-mapping": {
1526
  "version": "0.3.25",
 
1638
  }
1639
  }
1640
  },
1641
+ "node_modules/@nestjs/config": {
1642
+ "version": "3.2.3",
1643
+ "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.2.3.tgz",
1644
+ "integrity": "sha512-p6yv/CvoBewJ72mBq4NXgOAi2rSQNWx3a+IMJLVKS2uiwFCOQQuiIatGwq6MRjXV3Jr+B41iUO8FIf4xBrZ4/w==",
1645
+ "dependencies": {
1646
+ "dotenv": "16.4.5",
1647
+ "dotenv-expand": "10.0.0",
1648
+ "lodash": "4.17.21"
1649
+ },
1650
+ "peerDependencies": {
1651
+ "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0",
1652
+ "rxjs": "^7.1.0"
1653
+ }
1654
+ },
1655
  "node_modules/@nestjs/core": {
1656
  "version": "10.4.3",
1657
  "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.4.3.tgz",
 
1758
  }
1759
  }
1760
  },
1761
+ "node_modules/@nestjs/typeorm": {
1762
+ "version": "10.0.2",
1763
+ "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-10.0.2.tgz",
1764
+ "integrity": "sha512-H738bJyydK4SQkRCTeh1aFBxoO1E9xdL/HaLGThwrqN95os5mEyAtK7BLADOS+vldP4jDZ2VQPLj4epWwRqCeQ==",
1765
+ "dependencies": {
1766
+ "uuid": "9.0.1"
1767
+ },
1768
+ "peerDependencies": {
1769
+ "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0",
1770
+ "@nestjs/core": "^8.0.0 || ^9.0.0 || ^10.0.0",
1771
+ "reflect-metadata": "^0.1.13 || ^0.2.0",
1772
+ "rxjs": "^7.2.0",
1773
+ "typeorm": "^0.3.0"
1774
+ }
1775
+ },
1776
  "node_modules/@nodelib/fs.scandir": {
1777
  "version": "2.1.5",
1778
  "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
 
1829
  "version": "0.11.0",
1830
  "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
1831
  "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
 
1832
  "optional": true,
1833
  "engines": {
1834
  "node": ">=14"
 
1870
  "@sinonjs/commons": "^3.0.0"
1871
  }
1872
  },
1873
+ "node_modules/@sqltools/formatter": {
1874
+ "version": "1.2.5",
1875
+ "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz",
1876
+ "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw=="
1877
+ },
1878
  "node_modules/@tsconfig/node10": {
1879
  "version": "1.0.11",
1880
  "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
1881
  "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
1882
+ "devOptional": true
1883
  },
1884
  "node_modules/@tsconfig/node12": {
1885
  "version": "1.0.11",
1886
  "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
1887
  "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
1888
+ "devOptional": true
1889
  },
1890
  "node_modules/@tsconfig/node14": {
1891
  "version": "1.0.3",
1892
  "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
1893
  "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
1894
+ "devOptional": true
1895
  },
1896
  "node_modules/@tsconfig/node16": {
1897
  "version": "1.0.4",
1898
  "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
1899
  "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
1900
+ "devOptional": true
1901
  },
1902
  "node_modules/@types/babel__core": {
1903
  "version": "7.20.5",
 
2066
  "version": "20.16.5",
2067
  "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.5.tgz",
2068
  "integrity": "sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==",
2069
+ "devOptional": true,
2070
  "dependencies": {
2071
  "undici-types": "~6.19.2"
2072
  }
 
2509
  "version": "8.12.1",
2510
  "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
2511
  "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
2512
+ "devOptional": true,
2513
  "bin": {
2514
  "acorn": "bin/acorn"
2515
  },
 
2539
  "version": "8.3.4",
2540
  "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
2541
  "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
2542
+ "devOptional": true,
2543
  "dependencies": {
2544
  "acorn": "^8.11.0"
2545
  },
 
2620
  "version": "5.0.1",
2621
  "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2622
  "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
 
2623
  "engines": {
2624
  "node": ">=8"
2625
  }
 
2638
  "url": "https://github.com/chalk/ansi-styles?sponsor=1"
2639
  }
2640
  },
2641
+ "node_modules/any-promise": {
2642
+ "version": "1.3.0",
2643
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
2644
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
2645
+ },
2646
  "node_modules/anymatch": {
2647
  "version": "3.1.3",
2648
  "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
 
2668
  "url": "https://github.com/sponsors/jonschlinkert"
2669
  }
2670
  },
2671
+ "node_modules/app-root-path": {
2672
+ "version": "3.1.0",
2673
+ "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz",
2674
+ "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==",
2675
+ "engines": {
2676
+ "node": ">= 6.0.0"
2677
+ }
2678
+ },
2679
  "node_modules/append-field": {
2680
  "version": "1.0.0",
2681
  "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
 
2685
  "version": "4.1.3",
2686
  "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
2687
  "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
2688
+ "devOptional": true
2689
  },
2690
  "node_modules/argparse": {
2691
  "version": "2.0.1",
 
2722
  "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
2723
  "dev": true
2724
  },
2725
+ "node_modules/aws-ssl-profiles": {
2726
+ "version": "1.1.2",
2727
+ "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz",
2728
+ "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==",
2729
+ "engines": {
2730
+ "node": ">= 6.0.0"
2731
+ }
2732
+ },
2733
  "node_modules/babel-jest": {
2734
  "version": "29.7.0",
2735
  "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
 
2852
  "node_modules/balanced-match": {
2853
  "version": "1.0.2",
2854
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
2855
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
 
2856
  },
2857
  "node_modules/base64-js": {
2858
  "version": "1.5.1",
2859
  "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
2860
  "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
 
2861
  "funding": [
2862
  {
2863
  "type": "github",
 
2950
  "version": "2.0.1",
2951
  "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
2952
  "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
 
2953
  "dependencies": {
2954
  "balanced-match": "^1.0.0"
2955
  }
 
3219
  "node": ">=8"
3220
  }
3221
  },
3222
+ "node_modules/cli-highlight": {
3223
+ "version": "2.1.11",
3224
+ "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz",
3225
+ "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==",
3226
+ "dependencies": {
3227
+ "chalk": "^4.0.0",
3228
+ "highlight.js": "^10.7.1",
3229
+ "mz": "^2.4.0",
3230
+ "parse5": "^5.1.1",
3231
+ "parse5-htmlparser2-tree-adapter": "^6.0.0",
3232
+ "yargs": "^16.0.0"
3233
+ },
3234
+ "bin": {
3235
+ "highlight": "bin/highlight"
3236
+ },
3237
+ "engines": {
3238
+ "node": ">=8.0.0",
3239
+ "npm": ">=5.0.0"
3240
+ }
3241
+ },
3242
+ "node_modules/cli-highlight/node_modules/cliui": {
3243
+ "version": "7.0.4",
3244
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
3245
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
3246
+ "dependencies": {
3247
+ "string-width": "^4.2.0",
3248
+ "strip-ansi": "^6.0.0",
3249
+ "wrap-ansi": "^7.0.0"
3250
+ }
3251
+ },
3252
+ "node_modules/cli-highlight/node_modules/wrap-ansi": {
3253
+ "version": "7.0.0",
3254
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
3255
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
3256
+ "dependencies": {
3257
+ "ansi-styles": "^4.0.0",
3258
+ "string-width": "^4.1.0",
3259
+ "strip-ansi": "^6.0.0"
3260
+ },
3261
+ "engines": {
3262
+ "node": ">=10"
3263
+ },
3264
+ "funding": {
3265
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
3266
+ }
3267
+ },
3268
+ "node_modules/cli-highlight/node_modules/yargs": {
3269
+ "version": "16.2.0",
3270
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
3271
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
3272
+ "dependencies": {
3273
+ "cliui": "^7.0.2",
3274
+ "escalade": "^3.1.1",
3275
+ "get-caller-file": "^2.0.5",
3276
+ "require-directory": "^2.1.1",
3277
+ "string-width": "^4.2.0",
3278
+ "y18n": "^5.0.5",
3279
+ "yargs-parser": "^20.2.2"
3280
+ },
3281
+ "engines": {
3282
+ "node": ">=10"
3283
+ }
3284
+ },
3285
+ "node_modules/cli-highlight/node_modules/yargs-parser": {
3286
+ "version": "20.2.9",
3287
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
3288
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
3289
+ "engines": {
3290
+ "node": ">=10"
3291
+ }
3292
+ },
3293
  "node_modules/cli-spinners": {
3294
  "version": "2.9.2",
3295
  "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
 
3330
  "version": "8.0.1",
3331
  "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
3332
  "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
 
3333
  "dependencies": {
3334
  "string-width": "^4.2.0",
3335
  "strip-ansi": "^6.0.1",
 
3343
  "version": "7.0.0",
3344
  "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
3345
  "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
 
3346
  "dependencies": {
3347
  "ansi-styles": "^4.0.0",
3348
  "string-width": "^4.1.0",
 
3579
  "version": "1.1.1",
3580
  "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
3581
  "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
3582
+ "devOptional": true
3583
  },
3584
  "node_modules/cross-spawn": {
3585
  "version": "7.0.3",
3586
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
3587
  "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
 
3588
  "dependencies": {
3589
  "path-key": "^3.1.0",
3590
  "shebang-command": "^2.0.0",
 
3594
  "node": ">= 8"
3595
  }
3596
  },
3597
+ "node_modules/dayjs": {
3598
+ "version": "1.11.13",
3599
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
3600
+ "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
3601
+ },
3602
  "node_modules/debug": {
3603
  "version": "4.3.7",
3604
  "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
3605
  "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
 
3606
  "dependencies": {
3607
  "ms": "^2.1.3"
3608
  },
 
3681
  "node": ">=0.4.0"
3682
  }
3683
  },
3684
+ "node_modules/denque": {
3685
+ "version": "2.1.0",
3686
+ "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
3687
+ "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==",
3688
+ "engines": {
3689
+ "node": ">=0.10"
3690
+ }
3691
+ },
3692
  "node_modules/depd": {
3693
  "version": "2.0.0",
3694
  "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
 
3729
  "version": "4.0.2",
3730
  "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
3731
  "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
3732
+ "devOptional": true,
3733
  "engines": {
3734
  "node": ">=0.3.1"
3735
  }
 
3755
  "node": ">=6.0.0"
3756
  }
3757
  },
3758
+ "node_modules/dotenv": {
3759
+ "version": "16.4.5",
3760
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
3761
+ "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
3762
+ "engines": {
3763
+ "node": ">=12"
3764
+ },
3765
+ "funding": {
3766
+ "url": "https://dotenvx.com"
3767
+ }
3768
+ },
3769
+ "node_modules/dotenv-expand": {
3770
+ "version": "10.0.0",
3771
+ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz",
3772
+ "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==",
3773
+ "engines": {
3774
+ "node": ">=12"
3775
+ }
3776
+ },
3777
  "node_modules/eastasianwidth": {
3778
  "version": "0.2.0",
3779
  "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
3780
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
 
3781
  },
3782
  "node_modules/ee-first": {
3783
  "version": "1.1.1",
 
3820
  "node_modules/emoji-regex": {
3821
  "version": "8.0.0",
3822
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
3823
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
 
3824
  },
3825
  "node_modules/encodeurl": {
3826
  "version": "2.0.0",
 
3881
  "version": "3.2.0",
3882
  "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
3883
  "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
 
3884
  "engines": {
3885
  "node": ">=6"
3886
  }
 
4501
  "version": "3.3.0",
4502
  "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
4503
  "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
 
4504
  "dependencies": {
4505
  "cross-spawn": "^7.0.0",
4506
  "signal-exit": "^4.0.1"
 
4654
  "url": "https://github.com/sponsors/ljharb"
4655
  }
4656
  },
4657
+ "node_modules/generate-function": {
4658
+ "version": "2.3.1",
4659
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
4660
+ "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
4661
+ "dependencies": {
4662
+ "is-property": "^1.0.2"
4663
+ }
4664
+ },
4665
  "node_modules/gensync": {
4666
  "version": "1.0.0-beta.2",
4667
  "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
 
4675
  "version": "2.0.5",
4676
  "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
4677
  "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
 
4678
  "engines": {
4679
  "node": "6.* || 8.* || >= 10.*"
4680
  }
 
4722
  "version": "10.4.2",
4723
  "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
4724
  "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
 
4725
  "dependencies": {
4726
  "foreground-child": "^3.1.0",
4727
  "jackspeak": "^3.1.2",
 
4866
  "node": ">=8"
4867
  }
4868
  },
4869
+ "node_modules/highlight.js": {
4870
+ "version": "10.7.3",
4871
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
4872
+ "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
4873
+ "engines": {
4874
+ "node": "*"
4875
+ }
4876
+ },
4877
  "node_modules/html-escaper": {
4878
  "version": "2.0.2",
4879
  "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
 
4919
  "version": "1.2.1",
4920
  "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
4921
  "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
 
4922
  "funding": [
4923
  {
4924
  "type": "github",
 
5083
  "version": "3.0.0",
5084
  "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
5085
  "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
 
5086
  "engines": {
5087
  "node": ">=8"
5088
  }
 
5135
  "node": ">=8"
5136
  }
5137
  },
5138
+ "node_modules/is-property": {
5139
+ "version": "1.0.2",
5140
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
5141
+ "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
5142
+ },
5143
  "node_modules/is-stream": {
5144
  "version": "2.0.1",
5145
  "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
 
5172
  "node_modules/isexe": {
5173
  "version": "2.0.0",
5174
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
5175
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
 
5176
  },
5177
  "node_modules/istanbul-lib-coverage": {
5178
  "version": "3.2.2",
 
5261
  "version": "3.4.3",
5262
  "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
5263
  "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
 
5264
  "dependencies": {
5265
  "@isaacs/cliui": "^8.0.2"
5266
  },
 
6140
  "node_modules/lodash": {
6141
  "version": "4.17.21",
6142
  "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
6143
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
 
6144
  },
6145
  "node_modules/lodash.memoize": {
6146
  "version": "4.1.2",
 
6170
  "url": "https://github.com/sponsors/sindresorhus"
6171
  }
6172
  },
6173
+ "node_modules/long": {
6174
+ "version": "5.2.3",
6175
+ "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
6176
+ "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
6177
+ },
6178
  "node_modules/lru-cache": {
6179
  "version": "5.1.1",
6180
  "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
 
6184
  "yallist": "^3.0.2"
6185
  }
6186
  },
6187
+ "node_modules/lru.min": {
6188
+ "version": "1.1.0",
6189
+ "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.0.tgz",
6190
+ "integrity": "sha512-86xXMB6DiuKrTqkE/lRL0drlNh568awttBPJ7D66fzDHpy6NC5r3N+Ly/lKCS2zjmeGyvFDx670z0cD0PVBwGA==",
6191
+ "engines": {
6192
+ "bun": ">=1.0.0",
6193
+ "deno": ">=1.30.0",
6194
+ "node": ">=8.0.0"
6195
+ },
6196
+ "funding": {
6197
+ "type": "github",
6198
+ "url": "https://github.com/sponsors/wellwelwel"
6199
+ }
6200
+ },
6201
  "node_modules/magic-string": {
6202
  "version": "0.30.8",
6203
  "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz",
 
6229
  "version": "1.3.6",
6230
  "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
6231
  "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
6232
+ "devOptional": true
6233
  },
6234
  "node_modules/makeerror": {
6235
  "version": "1.0.12",
 
6359
  "version": "9.0.5",
6360
  "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
6361
  "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
 
6362
  "dependencies": {
6363
  "brace-expansion": "^2.0.1"
6364
  },
 
6381
  "version": "7.1.2",
6382
  "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
6383
  "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
 
6384
  "engines": {
6385
  "node": ">=16 || 14 >=14.17"
6386
  }
 
6424
  "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
6425
  "dev": true
6426
  },
6427
+ "node_modules/mysql2": {
6428
+ "version": "3.11.3",
6429
+ "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.11.3.tgz",
6430
+ "integrity": "sha512-Qpu2ADfbKzyLdwC/5d4W7+5Yz7yBzCU05YWt5npWzACST37wJsB23wgOSo00qi043urkiRwXtEvJc9UnuLX/MQ==",
6431
+ "dependencies": {
6432
+ "aws-ssl-profiles": "^1.1.1",
6433
+ "denque": "^2.1.0",
6434
+ "generate-function": "^2.3.1",
6435
+ "iconv-lite": "^0.6.3",
6436
+ "long": "^5.2.1",
6437
+ "lru.min": "^1.0.0",
6438
+ "named-placeholders": "^1.1.3",
6439
+ "seq-queue": "^0.0.5",
6440
+ "sqlstring": "^2.3.2"
6441
+ },
6442
+ "engines": {
6443
+ "node": ">= 8.0"
6444
+ }
6445
+ },
6446
+ "node_modules/mysql2/node_modules/iconv-lite": {
6447
+ "version": "0.6.3",
6448
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
6449
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
6450
+ "dependencies": {
6451
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
6452
+ },
6453
+ "engines": {
6454
+ "node": ">=0.10.0"
6455
+ }
6456
+ },
6457
+ "node_modules/mz": {
6458
+ "version": "2.7.0",
6459
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
6460
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
6461
+ "dependencies": {
6462
+ "any-promise": "^1.0.0",
6463
+ "object-assign": "^4.0.1",
6464
+ "thenify-all": "^1.0.0"
6465
+ }
6466
+ },
6467
+ "node_modules/named-placeholders": {
6468
+ "version": "1.1.3",
6469
+ "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz",
6470
+ "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==",
6471
+ "dependencies": {
6472
+ "lru-cache": "^7.14.1"
6473
+ },
6474
+ "engines": {
6475
+ "node": ">=12.0.0"
6476
+ }
6477
+ },
6478
+ "node_modules/named-placeholders/node_modules/lru-cache": {
6479
+ "version": "7.18.3",
6480
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
6481
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
6482
+ "engines": {
6483
+ "node": ">=12"
6484
+ }
6485
+ },
6486
  "node_modules/natural-compare": {
6487
  "version": "1.4.0",
6488
  "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
 
6715
  "node_modules/package-json-from-dist": {
6716
  "version": "1.0.0",
6717
  "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
6718
+ "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw=="
 
6719
  },
6720
  "node_modules/parent-module": {
6721
  "version": "1.0.1",
 
6747
  "url": "https://github.com/sponsors/sindresorhus"
6748
  }
6749
  },
6750
+ "node_modules/parse5": {
6751
+ "version": "5.1.1",
6752
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
6753
+ "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug=="
6754
+ },
6755
+ "node_modules/parse5-htmlparser2-tree-adapter": {
6756
+ "version": "6.0.1",
6757
+ "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
6758
+ "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",
6759
+ "dependencies": {
6760
+ "parse5": "^6.0.1"
6761
+ }
6762
+ },
6763
+ "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": {
6764
+ "version": "6.0.1",
6765
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
6766
+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
6767
+ },
6768
  "node_modules/parseurl": {
6769
  "version": "1.3.3",
6770
  "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
 
6795
  "version": "3.1.1",
6796
  "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
6797
  "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
 
6798
  "engines": {
6799
  "node": ">=8"
6800
  }
 
6809
  "version": "1.11.1",
6810
  "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
6811
  "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
 
6812
  "dependencies": {
6813
  "lru-cache": "^10.2.0",
6814
  "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
 
6823
  "node_modules/path-scurry/node_modules/lru-cache": {
6824
  "version": "10.4.3",
6825
  "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
6826
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
 
6827
  },
6828
  "node_modules/path-to-regexp": {
6829
  "version": "3.3.0",
 
7188
  "version": "2.1.1",
7189
  "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
7190
  "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
 
7191
  "engines": {
7192
  "node": ">=0.10.0"
7193
  }
 
7514
  "node": ">= 0.8"
7515
  }
7516
  },
7517
+ "node_modules/seq-queue": {
7518
+ "version": "0.0.5",
7519
+ "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
7520
+ "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
7521
+ },
7522
  "node_modules/serialize-javascript": {
7523
  "version": "6.0.2",
7524
  "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
 
7563
  "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
7564
  "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
7565
  },
7566
+ "node_modules/sha.js": {
7567
+ "version": "2.4.11",
7568
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
7569
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
7570
+ "dependencies": {
7571
+ "inherits": "^2.0.1",
7572
+ "safe-buffer": "^5.0.1"
7573
+ },
7574
+ "bin": {
7575
+ "sha.js": "bin.js"
7576
+ }
7577
+ },
7578
  "node_modules/shebang-command": {
7579
  "version": "2.0.0",
7580
  "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
7581
  "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
 
7582
  "dependencies": {
7583
  "shebang-regex": "^3.0.0"
7584
  },
 
7590
  "version": "3.0.0",
7591
  "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
7592
  "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
 
7593
  "engines": {
7594
  "node": ">=8"
7595
  }
 
7615
  "version": "4.1.0",
7616
  "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
7617
  "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
 
7618
  "engines": {
7619
  "node": ">=14"
7620
  },
 
7671
  "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
7672
  "dev": true
7673
  },
7674
+ "node_modules/sqlstring": {
7675
+ "version": "2.3.3",
7676
+ "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
7677
+ "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==",
7678
+ "engines": {
7679
+ "node": ">= 0.6"
7680
+ }
7681
+ },
7682
  "node_modules/stack-utils": {
7683
  "version": "2.0.6",
7684
  "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
 
7746
  "version": "4.2.3",
7747
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
7748
  "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
 
7749
  "dependencies": {
7750
  "emoji-regex": "^8.0.0",
7751
  "is-fullwidth-code-point": "^3.0.0",
 
7760
  "version": "4.2.3",
7761
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
7762
  "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
 
7763
  "dependencies": {
7764
  "emoji-regex": "^8.0.0",
7765
  "is-fullwidth-code-point": "^3.0.0",
 
7773
  "version": "6.0.1",
7774
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
7775
  "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
 
7776
  "dependencies": {
7777
  "ansi-regex": "^5.0.1"
7778
  },
 
7785
  "version": "6.0.1",
7786
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
7787
  "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
 
7788
  "dependencies": {
7789
  "ansi-regex": "^5.0.1"
7790
  },
 
8074
  "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
8075
  "dev": true
8076
  },
8077
+ "node_modules/thenify": {
8078
+ "version": "3.3.1",
8079
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
8080
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
8081
+ "dependencies": {
8082
+ "any-promise": "^1.0.0"
8083
+ }
8084
+ },
8085
+ "node_modules/thenify-all": {
8086
+ "version": "1.6.0",
8087
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
8088
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
8089
+ "dependencies": {
8090
+ "thenify": ">= 3.1.0 < 4"
8091
+ },
8092
+ "engines": {
8093
+ "node": ">=0.8"
8094
+ }
8095
+ },
8096
  "node_modules/through": {
8097
  "version": "2.3.8",
8098
  "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
 
8244
  "version": "10.9.2",
8245
  "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
8246
  "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
8247
+ "devOptional": true,
8248
  "dependencies": {
8249
  "@cspotcode/source-map-support": "^0.8.0",
8250
  "@tsconfig/node10": "^1.0.7",
 
8375
  "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
8376
  "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
8377
  },
8378
+ "node_modules/typeorm": {
8379
+ "version": "0.3.20",
8380
+ "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.20.tgz",
8381
+ "integrity": "sha512-sJ0T08dV5eoZroaq9uPKBoNcGslHBR4E4y+EBHs//SiGbblGe7IeduP/IH4ddCcj0qp3PHwDwGnuvqEAnKlq/Q==",
8382
+ "dependencies": {
8383
+ "@sqltools/formatter": "^1.2.5",
8384
+ "app-root-path": "^3.1.0",
8385
+ "buffer": "^6.0.3",
8386
+ "chalk": "^4.1.2",
8387
+ "cli-highlight": "^2.1.11",
8388
+ "dayjs": "^1.11.9",
8389
+ "debug": "^4.3.4",
8390
+ "dotenv": "^16.0.3",
8391
+ "glob": "^10.3.10",
8392
+ "mkdirp": "^2.1.3",
8393
+ "reflect-metadata": "^0.2.1",
8394
+ "sha.js": "^2.4.11",
8395
+ "tslib": "^2.5.0",
8396
+ "uuid": "^9.0.0",
8397
+ "yargs": "^17.6.2"
8398
+ },
8399
+ "bin": {
8400
+ "typeorm": "cli.js",
8401
+ "typeorm-ts-node-commonjs": "cli-ts-node-commonjs.js",
8402
+ "typeorm-ts-node-esm": "cli-ts-node-esm.js"
8403
+ },
8404
+ "engines": {
8405
+ "node": ">=16.13.0"
8406
+ },
8407
+ "funding": {
8408
+ "url": "https://opencollective.com/typeorm"
8409
+ },
8410
+ "peerDependencies": {
8411
+ "@google-cloud/spanner": "^5.18.0",
8412
+ "@sap/hana-client": "^2.12.25",
8413
+ "better-sqlite3": "^7.1.2 || ^8.0.0 || ^9.0.0",
8414
+ "hdb-pool": "^0.1.6",
8415
+ "ioredis": "^5.0.4",
8416
+ "mongodb": "^5.8.0",
8417
+ "mssql": "^9.1.1 || ^10.0.1",
8418
+ "mysql2": "^2.2.5 || ^3.0.1",
8419
+ "oracledb": "^6.3.0",
8420
+ "pg": "^8.5.1",
8421
+ "pg-native": "^3.0.0",
8422
+ "pg-query-stream": "^4.0.0",
8423
+ "redis": "^3.1.1 || ^4.0.0",
8424
+ "sql.js": "^1.4.0",
8425
+ "sqlite3": "^5.0.3",
8426
+ "ts-node": "^10.7.0",
8427
+ "typeorm-aurora-data-api-driver": "^2.0.0"
8428
+ },
8429
+ "peerDependenciesMeta": {
8430
+ "@google-cloud/spanner": {
8431
+ "optional": true
8432
+ },
8433
+ "@sap/hana-client": {
8434
+ "optional": true
8435
+ },
8436
+ "better-sqlite3": {
8437
+ "optional": true
8438
+ },
8439
+ "hdb-pool": {
8440
+ "optional": true
8441
+ },
8442
+ "ioredis": {
8443
+ "optional": true
8444
+ },
8445
+ "mongodb": {
8446
+ "optional": true
8447
+ },
8448
+ "mssql": {
8449
+ "optional": true
8450
+ },
8451
+ "mysql2": {
8452
+ "optional": true
8453
+ },
8454
+ "oracledb": {
8455
+ "optional": true
8456
+ },
8457
+ "pg": {
8458
+ "optional": true
8459
+ },
8460
+ "pg-native": {
8461
+ "optional": true
8462
+ },
8463
+ "pg-query-stream": {
8464
+ "optional": true
8465
+ },
8466
+ "redis": {
8467
+ "optional": true
8468
+ },
8469
+ "sql.js": {
8470
+ "optional": true
8471
+ },
8472
+ "sqlite3": {
8473
+ "optional": true
8474
+ },
8475
+ "ts-node": {
8476
+ "optional": true
8477
+ },
8478
+ "typeorm-aurora-data-api-driver": {
8479
+ "optional": true
8480
+ }
8481
+ }
8482
+ },
8483
+ "node_modules/typeorm/node_modules/buffer": {
8484
+ "version": "6.0.3",
8485
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
8486
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
8487
+ "funding": [
8488
+ {
8489
+ "type": "github",
8490
+ "url": "https://github.com/sponsors/feross"
8491
+ },
8492
+ {
8493
+ "type": "patreon",
8494
+ "url": "https://www.patreon.com/feross"
8495
+ },
8496
+ {
8497
+ "type": "consulting",
8498
+ "url": "https://feross.org/support"
8499
+ }
8500
+ ],
8501
+ "dependencies": {
8502
+ "base64-js": "^1.3.1",
8503
+ "ieee754": "^1.2.1"
8504
+ }
8505
+ },
8506
+ "node_modules/typeorm/node_modules/mkdirp": {
8507
+ "version": "2.1.6",
8508
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz",
8509
+ "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==",
8510
+ "bin": {
8511
+ "mkdirp": "dist/cjs/src/bin.js"
8512
+ },
8513
+ "engines": {
8514
+ "node": ">=10"
8515
+ },
8516
+ "funding": {
8517
+ "url": "https://github.com/sponsors/isaacs"
8518
+ }
8519
+ },
8520
  "node_modules/typescript": {
8521
  "version": "5.6.2",
8522
  "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
8523
  "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
8524
+ "devOptional": true,
8525
  "bin": {
8526
  "tsc": "bin/tsc",
8527
  "tsserver": "bin/tsserver"
 
8545
  "version": "6.19.8",
8546
  "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
8547
  "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
8548
+ "devOptional": true
8549
  },
8550
  "node_modules/universalify": {
8551
  "version": "2.0.1",
 
8616
  "node": ">= 0.4.0"
8617
  }
8618
  },
8619
+ "node_modules/uuid": {
8620
+ "version": "9.0.1",
8621
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
8622
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
8623
+ "funding": [
8624
+ "https://github.com/sponsors/broofa",
8625
+ "https://github.com/sponsors/ctavan"
8626
+ ],
8627
+ "bin": {
8628
+ "uuid": "dist/bin/uuid"
8629
+ }
8630
+ },
8631
  "node_modules/v8-compile-cache-lib": {
8632
  "version": "3.0.1",
8633
  "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
8634
  "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
8635
+ "devOptional": true
8636
  },
8637
  "node_modules/v8-to-istanbul": {
8638
  "version": "9.3.0",
 
8791
  "version": "2.0.2",
8792
  "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
8793
  "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
 
8794
  "dependencies": {
8795
  "isexe": "^2.0.0"
8796
  },
 
8829
  "version": "7.0.0",
8830
  "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
8831
  "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
 
8832
  "dependencies": {
8833
  "ansi-styles": "^4.0.0",
8834
  "string-width": "^4.1.0",
 
8878
  "version": "5.0.8",
8879
  "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
8880
  "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
 
8881
  "engines": {
8882
  "node": ">=10"
8883
  }
 
8892
  "version": "17.7.2",
8893
  "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
8894
  "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
 
8895
  "dependencies": {
8896
  "cliui": "^8.0.1",
8897
  "escalade": "^3.1.1",
 
8909
  "version": "21.1.1",
8910
  "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
8911
  "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
 
8912
  "engines": {
8913
  "node": ">=12"
8914
  }
 
8917
  "version": "3.1.1",
8918
  "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
8919
  "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
8920
+ "devOptional": true,
8921
  "engines": {
8922
  "node": ">=6"
8923
  }
backend/package.json CHANGED
@@ -17,14 +17,23 @@
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.2.0",
27
- "rxjs": "^7.8.1"
 
28
  },
29
  "devDependencies": {
30
  "@nestjs/cli": "^10.0.0",
 
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
+ "typeorm": "typeorm-ts-node-commonjs",
22
+ "db:migrate:generate": "npm run typeorm -d ./src/config/typeorm.ts migration:generate",
23
+ "db:migrate:up": "npm run typeorm -d ./src/config/typeorm.ts migration:run",
24
+ "db:migrate:down": "npm run typeorm -d ./src/config/typeorm.ts migration:revert"
25
  },
26
  "dependencies": {
27
  "@nestjs/common": "^10.0.0",
28
+ "@nestjs/config": "^3.2.3",
29
  "@nestjs/core": "^10.0.0",
30
  "@nestjs/platform-express": "^10.0.0",
31
+ "@nestjs/typeorm": "^10.0.2",
32
+ "dotenv": "^16.4.5",
33
+ "mysql2": "^3.11.3",
34
  "reflect-metadata": "^0.2.0",
35
+ "rxjs": "^7.8.1",
36
+ "typeorm": "^0.3.20"
37
  },
38
  "devDependencies": {
39
  "@nestjs/cli": "^10.0.0",
backend/src/app.controller.spec.ts DELETED
@@ -1,22 +0,0 @@
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>(AppController);
15
- });
16
-
17
- describe('root', () => {
18
- it('should return "Hello World!"', () => {
19
- expect(appController.getHello()).toBe('Hello World!');
20
- });
21
- });
22
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/src/app.module.ts CHANGED
@@ -1,9 +1,22 @@
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
  })
 
1
  import { Module } from '@nestjs/common';
2
  import { AppController } from './app.controller';
3
  import { AppService } from './app.service';
4
+ import { ConfigModule } from '@nestjs/config';
5
+ import { TypeOrmModule } from '@nestjs/typeorm';
6
+ import { configuration } from './config/config.js';
7
+ import { DatabaseConfigService } from './config/database.js';
8
 
9
  @Module({
10
+ imports: [
11
+ ConfigModule.forRoot({
12
+ isGlobal: true,
13
+ load: [configuration],
14
+ }),
15
+ TypeOrmModule.forRootAsync({
16
+ imports: [ConfigModule],
17
+ useClass: DatabaseConfigService,
18
+ }),
19
+ ],
20
  controllers: [AppController],
21
  providers: [AppService],
22
  })
backend/src/config/config.ts ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ export const configuration = () => {
2
+ return {
3
+ // db config
4
+ 'db.host': process.env.DB_HOST,
5
+ 'db.port': process.env.DB_PORT,
6
+ 'db.user_name': process.env.DB_USER,
7
+ 'db.password': process.env.DB_PASSWORD,
8
+ 'db.name': process.env.DB_NAME,
9
+ 'db.slow_limit': Number(process.env.DB_SLOW_LIMIT) || 500, // ms
10
+ };
11
+ };
backend/src/config/database.ts ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Injectable } from '@nestjs/common';
2
+ import { ConfigService } from '@nestjs/config';
3
+ import { TypeOrmModuleOptions, TypeOrmOptionsFactory } from '@nestjs/typeorm';
4
+ import * as path from 'path';
5
+
6
+ @Injectable()
7
+ export class DatabaseConfigService implements TypeOrmOptionsFactory {
8
+ constructor(private readonly configService: ConfigService) {}
9
+
10
+ createTypeOrmOptions(): TypeOrmModuleOptions {
11
+ return {
12
+ type: 'mysql',
13
+ host: this.configService.get('db.host'),
14
+ port: this.configService.get('db.port'),
15
+ username: this.configService.get('db.user_name'),
16
+ database: this.configService.get('db.name'),
17
+ password: this.configService.get('db.password'),
18
+ entities: [path.join(__dirname, '../**/*.entity{.ts,.js}')],
19
+ synchronize: true,
20
+ maxQueryExecutionTime: this.configService.get('db.slow_limit'),
21
+ };
22
+ }
23
+ }
backend/src/config/typeorm.ts ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { DataSource } from 'typeorm';
2
+ import { config } from 'dotenv';
3
+ config();
4
+ import * as path from 'path';
5
+ const migrationsPath = 'src/migrations/*.ts';
6
+
7
+ export default new DataSource({
8
+ type: 'mysql',
9
+ host: process.env.DB_HOST,
10
+ port: Number(process.env.DB_PORT),
11
+ database: process.env.DB_NAME,
12
+ username: process.env.DB_USER,
13
+ password: process.env.DB_PASSWORD,
14
+ entities: [path.join(__dirname, '../**/*.entity{.ts,.js}')],
15
+ migrations: [migrationsPath],
16
+ });
backend/src/entities/user.entity.ts ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Entity, Column, BaseEntity, PrimaryGeneratedColumn } from 'typeorm';
2
+
3
+ @Entity('users')
4
+ export class UserEntity extends BaseEntity {
5
+ @PrimaryGeneratedColumn('uuid')
6
+ id: string;
7
+
8
+ @Column({ nullable: true })
9
+ avatar: string;
10
+
11
+ @Column({ nullable: true })
12
+ full_name: string;
13
+
14
+ @Column({ nullable: true })
15
+ phone_number: string;
16
+
17
+ @Column({ nullable: true })
18
+ address: string;
19
+
20
+ @Column({ nullable: true })
21
+ email: string;
22
+
23
+ @Column({ nullable: true })
24
+ role_id: number;
25
+
26
+ @Column({ nullable: true })
27
+ decoded_password: string;
28
+
29
+ @Column({ default: true })
30
+ is_valid: boolean;
31
+
32
+ @Column({ type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' })
33
+ create_time: Date;
34
+ }