├── LICENSE
├── README.md
├── package.json
├── src
├── app.ts
├── controllers
│ ├── image_randomization.ts
│ └── search_controller.ts
├── routes
│ ├── hentai
│ │ └── search.ts
│ ├── home.ts
│ └── porn
│ │ └── search.ts
└── utils
│ └── scrapers
│ ├── pornpics
│ └── index.ts
│ ├── pornwhite
│ ├── index.ts
│ ├── scraper.ts
│ └── search.ts
│ ├── rule34
│ ├── images.ts
│ └── index.ts
│ └── sfmcompile
│ ├── index.ts
│ └── pages.ts
├── tags.txt
├── tsconfig.json
└── yarn.lock
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Baby
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
7 |
8 |
9 |
10 | # nsfw-api
11 | an api to "generate" nsfw images randomly.
12 |
13 | ## to search hentai images or videos
14 | **/h/image/search?q=**
15 | **/h/video/search?q=**
16 |
17 | ## to search real videos
18 | **/r/video/search?q=**
19 |
20 | ## 110 types are also available in the route
21 | **/r/image/< tag >**
22 |
23 | tags are available at `tags.txt`
24 |
25 | # in the air is like:
26 | https://nsfw-api-p302.onrender.com/
27 |
28 |
29 | ## deployment guide
30 | ```bash
31 | cd nsfw-api2
32 | yarn
33 | tsc
34 | node dist/app.js
35 | ```
36 |
37 | yes, this is the same code as before, it was taken down and I reuploaded it.
38 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "@types/node": "^20.10.6",
4 | "axios": "^1.6.3",
5 | "body-parser": "^1.20.2",
6 | "cheerio": "^1.0.0-rc.12",
7 | "express": "^4.18.2",
8 | "lodash": "^4.17.21"
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/src/app.ts:
--------------------------------------------------------------------------------
1 | import * as express from "express";
2 | import * as bodyParser from "body-parser";
3 | import home from "./routes/home";
4 | import hentaiSearch from "./routes/hentai/search";
5 | import pornSearch from "./routes/porn/search";
6 | const app = express();
7 | app.use(bodyParser.json());
8 |
9 | app.use("/",
10 | hentaiSearch,
11 | pornSearch,
12 | home
13 | );
14 |
15 | app.listen(3000, () => {
16 | console.log("running");
17 | });
18 |
--------------------------------------------------------------------------------
/src/controllers/image_randomization.ts:
--------------------------------------------------------------------------------
1 | import {readdir, readFileSync} from "fs";
2 | import {sample} from "lodash";
3 |
4 | export const imageRandomization = (folder, response) => {
5 | readdir(folder, (err, files) => {
6 | if(err) throw err;
7 | response.contentType('image/jpeg');
8 | const randomImage = sample(files);
9 | response.send(readFileSync(`${folder}/${randomImage}`));
10 | });
11 | }
--------------------------------------------------------------------------------
/src/controllers/search_controller.ts:
--------------------------------------------------------------------------------
1 | import {scraper} from "../utils/scrapers/rule34/index";
2 |
3 | export const surveyController = (search) => {
4 | let data: any[] = []
5 | const awaitPromise = () => {
6 | return new Promise(async(resolve) => {
7 | data = await scraper(search);
8 | resolve(data);
9 | });
10 | }
11 | const main = async() => {
12 | try{
13 | await awaitPromise();
14 | return data;
15 | }catch{
16 | return {"error": 10060};
17 | }
18 | }
19 | return main()
20 | }
--------------------------------------------------------------------------------
/src/routes/hentai/search.ts:
--------------------------------------------------------------------------------
1 | import {surveyController} from "../../controllers/search_controller";
2 | import {searchVideos} from "../../utils/scrapers/sfmcompile/index";
3 | import {Router, requests, response} from "express";
4 | const routes = Router();
5 |
6 | routes.get("/h/image/search", async(request, response) => {
7 | const resp = await surveyController(request.query.q)
8 | if(resp[0]){
9 | response.send(resp);
10 | }else{
11 | response.send({"error": "not found"});
12 | }
13 | });
14 | routes.get("/h/video/search", async(request, response) => {
15 | const resp = await searchVideos(request.query.q)
16 | if(resp[0]){
17 | response.send(resp);
18 | }else{
19 | response.send({"error": "not found"});
20 | }
21 | });
22 |
23 | export default routes;
24 |
--------------------------------------------------------------------------------
/src/routes/home.ts:
--------------------------------------------------------------------------------
1 | import {Router, requests, response} from "express";
2 | const routes = Router()
3 |
4 | routes.get("/", async(request, response) => {
5 | response.send({"response":"see the routes in : https://github.com/Swag666baby/nsfw-api"})
6 | });
7 |
8 | export default routes;
--------------------------------------------------------------------------------
/src/routes/porn/search.ts:
--------------------------------------------------------------------------------
1 | import {searchPornImages} from "../../utils/scrapers/pornpics";
2 | import {searchPornVideos} from "../../utils/scrapers/pornwhite";
3 | import {Router, requests, response} from "express";
4 | const routes = Router();
5 |
6 | routes.get("/r/image/:tag", async(request, response) => {
7 | const resp = await searchPornImages(request.params.tag)
8 | if(resp[0]){
9 | response.send(resp);
10 | }else{
11 | response.send({"error": "tag not found. see the documentation at: https://github.com/Swag666baby/nsfw-api"});
12 | }
13 | });
14 | routes.get("/r/video/search", async(request, response) => {
15 | const resp = await searchPornVideos(request.query.q)
16 | if(resp[0]){
17 | response.send(resp);
18 | }else{
19 | response.send({"error": "tag not found. see the documentation at: https://github.com/Swag666baby/nsfw-api"});
20 | }
21 | });
22 | export default routes;
23 |
--------------------------------------------------------------------------------
/src/utils/scrapers/pornpics/index.ts:
--------------------------------------------------------------------------------
1 | import {load} from "cheerio";
2 | import { default as axios} from "axios";
3 |
4 | export const searchPornImages = async(query) => {
5 | let data: any[] = []
6 | try{
7 | const request = await axios.get(`https://www.pornpics.com/${query}/`);
8 | let $ = load(request.data);
9 |
10 | $(".rel-link img").map((index, element) => {
11 | data.push(`${$(element).attr("data-src")}`);
12 | });
13 | return data
14 | }catch{
15 | return []
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/utils/scrapers/pornwhite/index.ts:
--------------------------------------------------------------------------------
1 | import {search} from "./search";
2 | import {scraper} from "./scraper";
3 |
4 | export const searchPornVideos = async(query) => {
5 | const images: any[] = await search(query);
6 | let data: any[] = [];
7 |
8 | for(let image of images){
9 | data.push(await scraper(image))
10 | }
11 | return data;
12 | }
--------------------------------------------------------------------------------
/src/utils/scrapers/pornwhite/scraper.ts:
--------------------------------------------------------------------------------
1 | import {load} from "cheerio";
2 | import axios from "axios";
3 |
4 | export const scraper = async(url) => {
5 | const response = await axios.get(url);
6 | let $ = load(`${response.data}`);
7 | let data: any[] = []
8 | const images = $(".player meta").map((index, element) => {
9 | data.push(`${$(element).attr("content")}`);
10 | });
11 |
12 | return {
13 | "title": data[0],
14 | "thumbnail": data[2],
15 | "video": data[4],
16 | "date": data[5],
17 | "url": data[6],
18 | }
19 | }
--------------------------------------------------------------------------------
/src/utils/scrapers/pornwhite/search.ts:
--------------------------------------------------------------------------------
1 | import {load} from "cheerio";
2 | import axios from "axios";
3 |
4 | export const search = async(search) => {
5 |
6 | const response = await axios.get(`https://www.pornwhite.com/search/?q=${search}`);
7 | let $ = load(`${response.data}`);
8 | let data: any[] = []
9 | const images = $("a").map((index, element) => {
10 | let image = `${$(element).attr("href")}`
11 | if(image?.startsWith("https://www.pornwhite.com/videos/")){
12 | data.push(image);
13 | }
14 | });
15 |
16 | return data;
17 | }
--------------------------------------------------------------------------------
/src/utils/scrapers/rule34/images.ts:
--------------------------------------------------------------------------------
1 | import {load} from "cheerio";
2 | import {default as axios} from "axios";
3 |
4 | export const resolvedImages = async(urls) => {
5 | let resolvedImages: any[] = []
6 |
7 | for(let url of urls){
8 | const headers = {
9 | "User-Agent": "Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, como Gecko) Versão/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36",
10 | }
11 | const response = await axios.get(url, {headers});
12 | let $ = load(`${response.data}`);
13 | let data: any[] = []
14 | $(".container img").map((index, element) => {
15 | const image = $(element).attr("src")
16 | if(!image?.endsWith(".svg")){
17 | resolvedImages.push(image);
18 | }
19 | });
20 | }
21 | return resolvedImages;
22 | }
--------------------------------------------------------------------------------
/src/utils/scrapers/rule34/index.ts:
--------------------------------------------------------------------------------
1 | import {load} from "cheerio";
2 | import {resolvedImages} from "./images";
3 | import axios from "axios";
4 |
5 | export const scraper = async(search) => {
6 | const headers = {
7 | "User-Agent": "Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, como Gecko) Versão/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36",
8 | }
9 | const response = await axios.get(`https://www.rule34.us/index.php?r=posts/index&q=${search}`, {headers});
10 | let $ = load(`${response.data}`);
11 | let data: any[] = []
12 | const images = $(".thumbail-container a").map((index, element) => {
13 | data.push(`${$(element).attr("href")}`);
14 | });
15 | return resolvedImages(data);
16 | }
--------------------------------------------------------------------------------
/src/utils/scrapers/sfmcompile/index.ts:
--------------------------------------------------------------------------------
1 | import {pages} from "./pages";
2 | import {load} from "cheerio";
3 | import {default as axios} from "axios";
4 |
5 | export const searchVideos = async(query) => {
6 | const pageUrls = await pages(query)
7 | let data: any[] = []
8 | for(let page of pageUrls){
9 | const response = await axios.get(page)
10 | const $ = load(response.data)
11 |
12 | $(".wp-video-shortcode source").map((index, element) => {
13 | var url = $(element).attr("src")
14 | if(url?.endsWith(".mp4")){
15 | data.push(url)
16 | }
17 | });
18 | }
19 | return data;
20 | }
--------------------------------------------------------------------------------
/src/utils/scrapers/sfmcompile/pages.ts:
--------------------------------------------------------------------------------
1 | import {load} from "cheerio";
2 | import {default as axios} from "axios";
3 |
4 | export const pages = async(query) => {
5 | const response = await axios.get(`https://sfmcompile.club/?s=${query}`)
6 | const $ = load(response.data)
7 | let pages: any[] = []
8 |
9 | $("a").map((index, element) => {
10 | var url = $(element).attr("href")
11 | if(url?.includes("/page/")){
12 | pages.push(url)
13 | }
14 | });
15 | return pages
16 | }
--------------------------------------------------------------------------------
/tags.txt:
--------------------------------------------------------------------------------
1 | Amateur
2 | Anal
3 | Anal-Gape
4 | Arab
5 | Argentina
6 | Asian
7 | Ass
8 | Ass-Licking
9 | Asshole
10 | Babe
11 | BBC
12 | BBW
13 | BDSM
14 | Big-Tits
15 | Beach
16 | Beautiful
17 | Big-Clit
18 | Big-Cock
19 | Big-Tits
20 | Bikini
21 | Blonde
22 | Blowjob
23 | Brazilian
24 | Ebony
25 | Facial
26 | Feet
27 | Anal
28 | Gangbang
29 | Gay
30 | Glasses
31 | Gloryhole
32 | Goth
33 | Granny
34 | Gym
35 | Hairy
36 | Handjob
37 | Hardcore
38 | High-Heels
39 | Homemade
40 | Indian
41 | Interracial
42 | Japanese
43 | Jeans
44 | Korean
45 | Pussy
46 | Ladyboy
47 | Latina
48 | Legs
49 | Brunette
50 | Bukkake
51 | Cameltoe
52 | Casting
53 | Chinese
54 | Chubby
55 | Colombian
56 | Cosplay
57 | Teen
58 | Cougar
59 | Cowgirl
60 | Creampie
61 | Cuckold
62 | Cum-In-Mouth
63 | Cum-In-Pussy
64 | Cumshot
65 | Curvy
66 | Cute
67 | Deepthroat
68 | Dildo
69 | Doggy-Style
70 | Double-Penetration
71 | Dress
72 | Tall
73 | Tattoo
74 | Teacher
75 | Teen
76 | Thai
77 | Thong
78 | Threesome
79 | Upskirt
80 | Venezuela
81 | Vintage
82 | Webcams
83 | White
84 | Wife
85 | Yoga
86 | Yoga-Pants
87 | Redhead
88 | Russian
89 | Saggy-Tits
90 | Sandals
91 | Schoolgirl
92 | Secretary
93 | Selfie
94 | Shemale
95 | Short-Hair
96 | Latina
97 | Shorts
98 | Shower
99 | Skinny
100 | Skirt
101 | Solo
102 | SSBBW
103 | Stockings
104 | Tall
105 | Tattoo
106 | Teacher
107 | Teen
108 | Thai
109 | Thong
110 | Threesome
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es2015",
4 | "module": "commonjs",
5 | "outDir": "./dist",
6 | "rootDir": "src"
7 | },
8 | "include": [
9 | "src/**/*.ts"
10 | ],
11 | "exclude": [
12 | "node_modules"
13 | ],
14 | "scripts": {
15 | "start": "src/index.js"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@types/node@^20.10.6":
6 | version "20.10.6"
7 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.6.tgz#a3ec84c22965802bf763da55b2394424f22bfbb5"
8 | integrity sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==
9 | dependencies:
10 | undici-types "~5.26.4"
11 |
12 | accepts@~1.3.8:
13 | version "1.3.8"
14 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
15 | integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
16 | dependencies:
17 | mime-types "~2.1.34"
18 | negotiator "0.6.3"
19 |
20 | array-flatten@1.1.1:
21 | version "1.1.1"
22 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
23 | integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==
24 |
25 | asynckit@^0.4.0:
26 | version "0.4.0"
27 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
28 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
29 |
30 | axios@^1.6.3:
31 | version "1.6.3"
32 | resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.3.tgz#7f50f23b3aa246eff43c54834272346c396613f4"
33 | integrity sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww==
34 | dependencies:
35 | follow-redirects "^1.15.0"
36 | form-data "^4.0.0"
37 | proxy-from-env "^1.1.0"
38 |
39 | body-parser@1.20.1:
40 | version "1.20.1"
41 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668"
42 | integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==
43 | dependencies:
44 | bytes "3.1.2"
45 | content-type "~1.0.4"
46 | debug "2.6.9"
47 | depd "2.0.0"
48 | destroy "1.2.0"
49 | http-errors "2.0.0"
50 | iconv-lite "0.4.24"
51 | on-finished "2.4.1"
52 | qs "6.11.0"
53 | raw-body "2.5.1"
54 | type-is "~1.6.18"
55 | unpipe "1.0.0"
56 |
57 | body-parser@^1.20.2:
58 | version "1.20.2"
59 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd"
60 | integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==
61 | dependencies:
62 | bytes "3.1.2"
63 | content-type "~1.0.5"
64 | debug "2.6.9"
65 | depd "2.0.0"
66 | destroy "1.2.0"
67 | http-errors "2.0.0"
68 | iconv-lite "0.4.24"
69 | on-finished "2.4.1"
70 | qs "6.11.0"
71 | raw-body "2.5.2"
72 | type-is "~1.6.18"
73 | unpipe "1.0.0"
74 |
75 | boolbase@^1.0.0:
76 | version "1.0.0"
77 | resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
78 | integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
79 |
80 | bytes@3.1.2:
81 | version "3.1.2"
82 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
83 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
84 |
85 | call-bind@^1.0.0:
86 | version "1.0.5"
87 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513"
88 | integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==
89 | dependencies:
90 | function-bind "^1.1.2"
91 | get-intrinsic "^1.2.1"
92 | set-function-length "^1.1.1"
93 |
94 | cheerio-select@^2.1.0:
95 | version "2.1.0"
96 | resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4"
97 | integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==
98 | dependencies:
99 | boolbase "^1.0.0"
100 | css-select "^5.1.0"
101 | css-what "^6.1.0"
102 | domelementtype "^2.3.0"
103 | domhandler "^5.0.3"
104 | domutils "^3.0.1"
105 |
106 | cheerio@^1.0.0-rc.12:
107 | version "1.0.0-rc.12"
108 | resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683"
109 | integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==
110 | dependencies:
111 | cheerio-select "^2.1.0"
112 | dom-serializer "^2.0.0"
113 | domhandler "^5.0.3"
114 | domutils "^3.0.1"
115 | htmlparser2 "^8.0.1"
116 | parse5 "^7.0.0"
117 | parse5-htmlparser2-tree-adapter "^7.0.0"
118 |
119 | combined-stream@^1.0.8:
120 | version "1.0.8"
121 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
122 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
123 | dependencies:
124 | delayed-stream "~1.0.0"
125 |
126 | content-disposition@0.5.4:
127 | version "0.5.4"
128 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
129 | integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
130 | dependencies:
131 | safe-buffer "5.2.1"
132 |
133 | content-type@~1.0.4, content-type@~1.0.5:
134 | version "1.0.5"
135 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
136 | integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
137 |
138 | cookie-signature@1.0.6:
139 | version "1.0.6"
140 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
141 | integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
142 |
143 | cookie@0.5.0:
144 | version "0.5.0"
145 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
146 | integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
147 |
148 | css-select@^5.1.0:
149 | version "5.1.0"
150 | resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6"
151 | integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==
152 | dependencies:
153 | boolbase "^1.0.0"
154 | css-what "^6.1.0"
155 | domhandler "^5.0.2"
156 | domutils "^3.0.1"
157 | nth-check "^2.0.1"
158 |
159 | css-what@^6.1.0:
160 | version "6.1.0"
161 | resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
162 | integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
163 |
164 | debug@2.6.9:
165 | version "2.6.9"
166 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
167 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
168 | dependencies:
169 | ms "2.0.0"
170 |
171 | define-data-property@^1.1.1:
172 | version "1.1.1"
173 | resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3"
174 | integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==
175 | dependencies:
176 | get-intrinsic "^1.2.1"
177 | gopd "^1.0.1"
178 | has-property-descriptors "^1.0.0"
179 |
180 | delayed-stream@~1.0.0:
181 | version "1.0.0"
182 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
183 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
184 |
185 | depd@2.0.0:
186 | version "2.0.0"
187 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
188 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
189 |
190 | destroy@1.2.0:
191 | version "1.2.0"
192 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
193 | integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
194 |
195 | dom-serializer@^2.0.0:
196 | version "2.0.0"
197 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
198 | integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
199 | dependencies:
200 | domelementtype "^2.3.0"
201 | domhandler "^5.0.2"
202 | entities "^4.2.0"
203 |
204 | domelementtype@^2.3.0:
205 | version "2.3.0"
206 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
207 | integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
208 |
209 | domhandler@^5.0.2, domhandler@^5.0.3:
210 | version "5.0.3"
211 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
212 | integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
213 | dependencies:
214 | domelementtype "^2.3.0"
215 |
216 | domutils@^3.0.1:
217 | version "3.1.0"
218 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e"
219 | integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==
220 | dependencies:
221 | dom-serializer "^2.0.0"
222 | domelementtype "^2.3.0"
223 | domhandler "^5.0.3"
224 |
225 | ee-first@1.1.1:
226 | version "1.1.1"
227 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
228 | integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
229 |
230 | encodeurl@~1.0.2:
231 | version "1.0.2"
232 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
233 | integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
234 |
235 | entities@^4.2.0, entities@^4.4.0:
236 | version "4.5.0"
237 | resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
238 | integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
239 |
240 | escape-html@~1.0.3:
241 | version "1.0.3"
242 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
243 | integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
244 |
245 | etag@~1.8.1:
246 | version "1.8.1"
247 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
248 | integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
249 |
250 | express@^4.18.2:
251 | version "4.18.2"
252 | resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59"
253 | integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==
254 | dependencies:
255 | accepts "~1.3.8"
256 | array-flatten "1.1.1"
257 | body-parser "1.20.1"
258 | content-disposition "0.5.4"
259 | content-type "~1.0.4"
260 | cookie "0.5.0"
261 | cookie-signature "1.0.6"
262 | debug "2.6.9"
263 | depd "2.0.0"
264 | encodeurl "~1.0.2"
265 | escape-html "~1.0.3"
266 | etag "~1.8.1"
267 | finalhandler "1.2.0"
268 | fresh "0.5.2"
269 | http-errors "2.0.0"
270 | merge-descriptors "1.0.1"
271 | methods "~1.1.2"
272 | on-finished "2.4.1"
273 | parseurl "~1.3.3"
274 | path-to-regexp "0.1.7"
275 | proxy-addr "~2.0.7"
276 | qs "6.11.0"
277 | range-parser "~1.2.1"
278 | safe-buffer "5.2.1"
279 | send "0.18.0"
280 | serve-static "1.15.0"
281 | setprototypeof "1.2.0"
282 | statuses "2.0.1"
283 | type-is "~1.6.18"
284 | utils-merge "1.0.1"
285 | vary "~1.1.2"
286 |
287 | finalhandler@1.2.0:
288 | version "1.2.0"
289 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32"
290 | integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==
291 | dependencies:
292 | debug "2.6.9"
293 | encodeurl "~1.0.2"
294 | escape-html "~1.0.3"
295 | on-finished "2.4.1"
296 | parseurl "~1.3.3"
297 | statuses "2.0.1"
298 | unpipe "~1.0.0"
299 |
300 | follow-redirects@^1.15.0:
301 | version "1.15.4"
302 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf"
303 | integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==
304 |
305 | form-data@^4.0.0:
306 | version "4.0.0"
307 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
308 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
309 | dependencies:
310 | asynckit "^0.4.0"
311 | combined-stream "^1.0.8"
312 | mime-types "^2.1.12"
313 |
314 | forwarded@0.2.0:
315 | version "0.2.0"
316 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
317 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
318 |
319 | fresh@0.5.2:
320 | version "0.5.2"
321 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
322 | integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
323 |
324 | function-bind@^1.1.2:
325 | version "1.1.2"
326 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
327 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
328 |
329 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2:
330 | version "1.2.2"
331 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b"
332 | integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==
333 | dependencies:
334 | function-bind "^1.1.2"
335 | has-proto "^1.0.1"
336 | has-symbols "^1.0.3"
337 | hasown "^2.0.0"
338 |
339 | gopd@^1.0.1:
340 | version "1.0.1"
341 | resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
342 | integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
343 | dependencies:
344 | get-intrinsic "^1.1.3"
345 |
346 | has-property-descriptors@^1.0.0:
347 | version "1.0.1"
348 | resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340"
349 | integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==
350 | dependencies:
351 | get-intrinsic "^1.2.2"
352 |
353 | has-proto@^1.0.1:
354 | version "1.0.1"
355 | resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0"
356 | integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
357 |
358 | has-symbols@^1.0.3:
359 | version "1.0.3"
360 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
361 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
362 |
363 | hasown@^2.0.0:
364 | version "2.0.0"
365 | resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c"
366 | integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==
367 | dependencies:
368 | function-bind "^1.1.2"
369 |
370 | htmlparser2@^8.0.1:
371 | version "8.0.2"
372 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21"
373 | integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==
374 | dependencies:
375 | domelementtype "^2.3.0"
376 | domhandler "^5.0.3"
377 | domutils "^3.0.1"
378 | entities "^4.4.0"
379 |
380 | http-errors@2.0.0:
381 | version "2.0.0"
382 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
383 | integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
384 | dependencies:
385 | depd "2.0.0"
386 | inherits "2.0.4"
387 | setprototypeof "1.2.0"
388 | statuses "2.0.1"
389 | toidentifier "1.0.1"
390 |
391 | iconv-lite@0.4.24:
392 | version "0.4.24"
393 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
394 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
395 | dependencies:
396 | safer-buffer ">= 2.1.2 < 3"
397 |
398 | inherits@2.0.4:
399 | version "2.0.4"
400 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
401 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
402 |
403 | ipaddr.js@1.9.1:
404 | version "1.9.1"
405 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
406 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
407 |
408 | lodash@^4.17.21:
409 | version "4.17.21"
410 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
411 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
412 |
413 | media-typer@0.3.0:
414 | version "0.3.0"
415 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
416 | integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
417 |
418 | merge-descriptors@1.0.1:
419 | version "1.0.1"
420 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
421 | integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==
422 |
423 | methods@~1.1.2:
424 | version "1.1.2"
425 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
426 | integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
427 |
428 | mime-db@1.52.0:
429 | version "1.52.0"
430 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
431 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
432 |
433 | mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34:
434 | version "2.1.35"
435 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
436 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
437 | dependencies:
438 | mime-db "1.52.0"
439 |
440 | mime@1.6.0:
441 | version "1.6.0"
442 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
443 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
444 |
445 | ms@2.0.0:
446 | version "2.0.0"
447 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
448 | integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
449 |
450 | ms@2.1.3:
451 | version "2.1.3"
452 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
453 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
454 |
455 | negotiator@0.6.3:
456 | version "0.6.3"
457 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
458 | integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
459 |
460 | nth-check@^2.0.1:
461 | version "2.1.1"
462 | resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
463 | integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
464 | dependencies:
465 | boolbase "^1.0.0"
466 |
467 | object-inspect@^1.9.0:
468 | version "1.13.1"
469 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2"
470 | integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==
471 |
472 | on-finished@2.4.1:
473 | version "2.4.1"
474 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
475 | integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
476 | dependencies:
477 | ee-first "1.1.1"
478 |
479 | parse5-htmlparser2-tree-adapter@^7.0.0:
480 | version "7.0.0"
481 | resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1"
482 | integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==
483 | dependencies:
484 | domhandler "^5.0.2"
485 | parse5 "^7.0.0"
486 |
487 | parse5@^7.0.0:
488 | version "7.1.2"
489 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32"
490 | integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==
491 | dependencies:
492 | entities "^4.4.0"
493 |
494 | parseurl@~1.3.3:
495 | version "1.3.3"
496 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
497 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
498 |
499 | path-to-regexp@0.1.7:
500 | version "0.1.7"
501 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
502 | integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
503 |
504 | proxy-addr@~2.0.7:
505 | version "2.0.7"
506 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
507 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
508 | dependencies:
509 | forwarded "0.2.0"
510 | ipaddr.js "1.9.1"
511 |
512 | proxy-from-env@^1.1.0:
513 | version "1.1.0"
514 | resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
515 | integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
516 |
517 | qs@6.11.0:
518 | version "6.11.0"
519 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
520 | integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
521 | dependencies:
522 | side-channel "^1.0.4"
523 |
524 | range-parser@~1.2.1:
525 | version "1.2.1"
526 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
527 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
528 |
529 | raw-body@2.5.1:
530 | version "2.5.1"
531 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857"
532 | integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==
533 | dependencies:
534 | bytes "3.1.2"
535 | http-errors "2.0.0"
536 | iconv-lite "0.4.24"
537 | unpipe "1.0.0"
538 |
539 | raw-body@2.5.2:
540 | version "2.5.2"
541 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a"
542 | integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
543 | dependencies:
544 | bytes "3.1.2"
545 | http-errors "2.0.0"
546 | iconv-lite "0.4.24"
547 | unpipe "1.0.0"
548 |
549 | safe-buffer@5.2.1:
550 | version "5.2.1"
551 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
552 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
553 |
554 | "safer-buffer@>= 2.1.2 < 3":
555 | version "2.1.2"
556 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
557 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
558 |
559 | send@0.18.0:
560 | version "0.18.0"
561 | resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be"
562 | integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==
563 | dependencies:
564 | debug "2.6.9"
565 | depd "2.0.0"
566 | destroy "1.2.0"
567 | encodeurl "~1.0.2"
568 | escape-html "~1.0.3"
569 | etag "~1.8.1"
570 | fresh "0.5.2"
571 | http-errors "2.0.0"
572 | mime "1.6.0"
573 | ms "2.1.3"
574 | on-finished "2.4.1"
575 | range-parser "~1.2.1"
576 | statuses "2.0.1"
577 |
578 | serve-static@1.15.0:
579 | version "1.15.0"
580 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
581 | integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
582 | dependencies:
583 | encodeurl "~1.0.2"
584 | escape-html "~1.0.3"
585 | parseurl "~1.3.3"
586 | send "0.18.0"
587 |
588 | set-function-length@^1.1.1:
589 | version "1.1.1"
590 | resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed"
591 | integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==
592 | dependencies:
593 | define-data-property "^1.1.1"
594 | get-intrinsic "^1.2.1"
595 | gopd "^1.0.1"
596 | has-property-descriptors "^1.0.0"
597 |
598 | setprototypeof@1.2.0:
599 | version "1.2.0"
600 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
601 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
602 |
603 | side-channel@^1.0.4:
604 | version "1.0.4"
605 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
606 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
607 | dependencies:
608 | call-bind "^1.0.0"
609 | get-intrinsic "^1.0.2"
610 | object-inspect "^1.9.0"
611 |
612 | statuses@2.0.1:
613 | version "2.0.1"
614 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
615 | integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
616 |
617 | toidentifier@1.0.1:
618 | version "1.0.1"
619 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
620 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
621 |
622 | type-is@~1.6.18:
623 | version "1.6.18"
624 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
625 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
626 | dependencies:
627 | media-typer "0.3.0"
628 | mime-types "~2.1.24"
629 |
630 | undici-types@~5.26.4:
631 | version "5.26.5"
632 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
633 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
634 |
635 | unpipe@1.0.0, unpipe@~1.0.0:
636 | version "1.0.0"
637 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
638 | integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
639 |
640 | utils-merge@1.0.1:
641 | version "1.0.1"
642 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
643 | integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
644 |
645 | vary@~1.1.2:
646 | version "1.1.2"
647 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
648 | integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
649 |
--------------------------------------------------------------------------------