├── .changeset ├── README.md └── config.json ├── .github └── workflows │ ├── main.yml │ └── publish.yml ├── .gitignore ├── .prettierignore ├── .prettierrc ├── CHANGELOG.md ├── LICENSE ├── README.md ├── examples └── express │ ├── index.js │ ├── package-lock.json │ └── package.json ├── package.json ├── pnpm-lock.yaml ├── src ├── constants │ └── links.ts ├── errors │ ├── NotFoundError.ts │ ├── NotValidHtmlNodeError.ts │ ├── NotValidSpecPageError.ts │ ├── OpenPageError.ts │ ├── PrivateInformationError.ts │ ├── RankingSearchError.ts │ ├── RetryError.ts │ └── index.ts ├── index.ts ├── parsers │ ├── equipment.ts │ ├── general.ts │ ├── homepage.ts │ └── spec.ts └── types │ ├── Character.ts │ ├── Equipment.ts │ ├── GeneralInformation.ts │ ├── Potential.ts │ ├── Spec.ts │ ├── Stat.ts │ └── Symbol.ts └── tsconfig.json /.changeset/README.md: -------------------------------------------------------------------------------- 1 | # Changesets 2 | 3 | Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works 4 | with multi-package repos, or single-package repos to help you version and publish your code. You can 5 | find the full documentation for it [in our repository](https://github.com/changesets/changesets) 6 | 7 | We have a quick list of common questions to get you started engaging with this project in 8 | [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) 9 | -------------------------------------------------------------------------------- /.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json", 3 | "changelog": "@changesets/cli/changelog", 4 | "commit": false, 5 | "fixed": [], 6 | "linked": [], 7 | "access": "public", 8 | "baseBranch": "main", 9 | "updateInternalDependencies": "patch", 10 | "ignore": [] 11 | } 12 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | on: 3 | push: 4 | branches: 5 | - "**" 6 | 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v3 12 | - uses: pnpm/action-setup@v2 13 | with: 14 | version: 8 15 | - uses: actions/setup-node@v3 16 | with: 17 | node-version: 16.x 18 | cache: "pnpm" 19 | - run: pnpm install --frozen-lockfile 20 | - run: pnpm run build 21 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish 2 | on: 3 | push: 4 | branches: 5 | - "main" 6 | 7 | concurrency: ${{ github.workflow }}-${{ github.ref }} 8 | 9 | jobs: 10 | publish: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v3 14 | - uses: pnpm/action-setup@v2 15 | with: 16 | version: 8 17 | - uses: actions/setup-node@v3 18 | with: 19 | node-version: 16.x 20 | cache: "pnpm" 21 | - run: pnpm install --frozen-lockfile 22 | - name: Create Release PR 23 | id: changesets 24 | uses: changesets/action@v1 25 | with: 26 | publish: pnpm run release 27 | env: 28 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 29 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | 4 | .DS_Store 5 | 6 | .idea 7 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | .idea 2 | build 3 | node_modules 4 | .gitignore 5 | *.json 6 | *.md 7 | .prettierrc 8 | *.yaml 9 | *.yml 10 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "always", 3 | "bracketSpacing": true, 4 | "endOfLine": "lf", 5 | "htmlWhitespaceSensitivity": "css", 6 | "insertPragma": false, 7 | "jsxBracketSameLine": false, 8 | "jsxSingleQuote": true, 9 | "printWidth": 120, 10 | "proseWrap": "preserve", 11 | "quoteProps": "as-needed", 12 | "requirePragma": false, 13 | "semi": true, 14 | "singleQuote": true, 15 | "tabWidth": 4, 16 | "trailingComma": "es5", 17 | "useTabs": false, 18 | "vueIndentScriptAndStyle": false, 19 | "parser": "typescript" 20 | } -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # mapleutils-parser-js 2 | 3 | ## 0.0.7 4 | 5 | ### Patch Changes 6 | 7 | - 5a02a48: 에러객체 추가 8 | 9 | ## 0.0.6 10 | 11 | ### Patch Changes 12 | 13 | - c8e9c08: add level to equipment parser 14 | 15 | ## 0.0.5 16 | 17 | ### Patch Changes 18 | 19 | - 7e875fa: add getCharacterWithErrors 20 | 21 | ## 0.0.4 22 | 23 | ### Patch Changes 24 | 25 | - d6bed75: fix example 26 | 27 | ## 0.0.3 28 | 29 | ### Patch Changes 30 | 31 | - d7763e5: fix package files 32 | 33 | ## 0.0.2 34 | 35 | ### Patch Changes 36 | 37 | - c09d588: package 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Sangbin Lee 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 | # 메이플 유틸 캐릭터 정보 파싱 프로젝트 JS 2 | 3 | ## About 4 | 5 | 메이플스토리 캐릭터 장비를 가져오는 공식 API가 없어서 직접 만든 파싱 프로그램입니다. 공식 홈페이지에 정보가 공개된 캐릭터를 검색하여 해당 캐릭터의 기본정보, 기본 스펙, 장착한 장비 아이템, 펫장비, 아케인 6 | 심볼을 추출합니다. 기존에 있던 [C# 프로젝트](https://github.com/leesangb/mapleutils-parser)를 참고하여 만들었습니다. 7 | 8 | ## Usage 9 | 10 | ```js 11 | import { MapleUtilsParser } from 'mapleutils-parser-js'; 12 | 13 | const parser = MapleUtilsParser.new(); 14 | parser.getCharacter({ 15 | name: '상빈', 16 | cash: true, 17 | pet: true, 18 | equip: true, 19 | symbol: true 20 | }).then((character) => console.log(character)); 21 | 22 | parser.getCharacterWithErrors({ 23 | name: '상빈', 24 | cash: true, 25 | pet: true, 26 | equip: true, 27 | symbol: true 28 | }).then(({data: character, errors}) => { 29 | console.log(character); // 캐릭터 정보 30 | errors?.equipments()?.then(equipments => console.log(equipments)); // 실패한 장비목록 재시도하는 콜백 31 | errors?.arcanes()?.then(symbols => console.log(symbols)); // 실패한 아케인심볼 목록 재시도하는 콜백 32 | errors?.petEquipments()?.then(petEquipments => console.log(petEquipments)); // 실패한 펫장비 목록 재시도하는 콜백 33 | errors?.cashEquipments()?.then(cashEquipments => console.log(cashEquipments)); // 실패한 캐시장비 목록 재시도하는 콜백 34 | }); 35 | ``` 36 | 37 | ## 파싱되는 스탯 38 | 39 | ```ts 40 | const statList = [ 41 | 'str', // 힘 42 | 'dex', // 덱 43 | 'int', // 인 44 | 'luk', // 럭 45 | 'strP', // 힘퍼 46 | 'dexP', // 덱퍼 47 | 'intP', // 인퍼 48 | 'lukP', // 럭퍼 49 | 'hp', // hp 50 | 'hpP', // hp퍼 51 | 'mp', // mp 52 | 'mpP', // mp퍼 53 | 'atk', // 공격력 54 | 'atkP', // 공격력퍼 55 | 'mAtk', // 마력 56 | 'mAtkP', // 마력퍼 57 | 'def', // 물리방어력 58 | 'defP', // 물리방어력% 59 | 'speed', // 이동속도 60 | 'jump', // 점프력 61 | 'ignoreDef', // 방어율무시% 62 | 'mobDmg', // 일반몬스터데미지% 63 | 'bossDmg', // 보스몬스터데미지% 64 | 'dmg', // 데미지% 65 | 'allStat', // 올스탯 66 | 'allStatP', // 올스탯% 67 | 'crit', // 크리티컬확률 68 | 'critDmg', // 크리티컬데미지% 69 | 'buff', // 버프지속시간 70 | 'statusDmg', // 상태이상데미지 71 | 'arcane', // 아케인포스 72 | 'lvNAtk', // lvN당공1 73 | 'lvNmAtk', // lvN당마1 74 | 'lv9Str', // lv9당힘N 75 | 'lv9Dex', // lv9당덱N 76 | 'lv9Int', // lv9당인N 77 | 'lv9Luk', // lv9당럭N 78 | 'meso', // 메소획득량 79 | 'drop', // 아이템드롭률 80 | 'hpHeal', // 회복 81 | 'passive', // 패시브1렙 82 | 'reuse', // 재사용 83 | 'exp', // 획득 경험치 84 | ] as const; 85 | 86 | type Stat = typeof statList[number]; 87 | ``` 88 | 89 | ## Output 예시 90 | 91 | ```json 92 | { 93 | "name": "상빈", 94 | "world": "크로아", 95 | "guild": "꿈길", 96 | "job": "듀얼블레이더", 97 | "level": 253, 98 | "imageUrl": "https://avatar.maplestory.nexon.com/Character/180/DIDFBINAMEPMOAFKNCMDJNDMMIDKJBHHNLKKKKKGDDKJBFKBPIKKJEHKBBEMCJPHIEINOKJNNAACNNHECPKOMHHLKDJPCNEELKAGDLLJAAHHMHMIECPIKHGDAKGHDELGKIDBPCIDABNNILCHBDGONHOPDEOILIOFPPJGECFLOHDKOBPMFIIJPJPCKEMPDBPNJCAHDMCKBKGJGJGMDKPNHPEIONFHJKCDALLEJHJJNNGKEOGKEPFGFIKAOGCNHJJO.png", 99 | "traits": { 100 | "ambition": 100, 101 | "insight": 100, 102 | "willpower": 100, 103 | "diligence": 100, 104 | "empathy": 100, 105 | "charm": 100 106 | }, 107 | "spec": { 108 | "statAtkLow": 5003901, 109 | "statAtkHigh": 5559889, 110 | "hp": 45230, 111 | "mp": 27811, 112 | "str": 1781, 113 | "dex": 3279, 114 | "int": 1597, 115 | "luk": 23817, 116 | "critDmg": 56, 117 | "bossDmg": 272, 118 | "ignoreDef": 83, 119 | "resistance": 54, 120 | "stance": 100, 121 | "def": 31370, 122 | "speed": 160, 123 | "jump": 123, 124 | "starForce": 241, 125 | "arcaneForce": 1040, 126 | "hypers": { 127 | "atk": 24, 128 | "mAtk": 24, 129 | "luk": 210, 130 | "crit": 7, 131 | "critDmg": 11, 132 | "ignoreDef": 30, 133 | "dmg": 33, 134 | "bossDmg": 39 135 | }, 136 | "abilities": { 137 | "bossDmg": 20, 138 | "reuse": 10, 139 | "statusDmg": 7 140 | } 141 | }, 142 | "equipments": [ 143 | { 144 | "name": "골드 메이플리프 엠블렘", 145 | "level": 100, 146 | "imageUrl": "https://avatar.maplestory.nexon.com/ItemIcon/KEOLLEOA.png", 147 | "category": "엠블렘", 148 | "upgrade": 0, 149 | "base": { 150 | "str": 10, 151 | "dex": 10, 152 | "int": 10, 153 | "luk": 10, 154 | "atk": 2, 155 | "mAtk": 2 156 | }, 157 | "scroll": {}, 158 | "grade": "legendary", 159 | "star": 0, 160 | "potential": { 161 | "grade": "legendary", 162 | "effects": [ 163 | { 164 | "atkP": 12 165 | }, 166 | { 167 | "atkP": 9 168 | }, 169 | { 170 | "dexP": 9 171 | } 172 | ] 173 | }, 174 | "additional": { 175 | "grade": "rare", 176 | "effects": [ 177 | { 178 | "dmg": 3 179 | }, 180 | { 181 | "def": 50 182 | }, 183 | { 184 | "mp": 50 185 | } 186 | ] 187 | }, 188 | "flame": {} 189 | }, 190 | { 191 | "name": "아케인셰이드 대거", 192 | "level": 200, 193 | "imageUrl": "https://avatar.maplestory.nexon.com/ItemIcon/KEMBJFHA.png", 194 | "category": "단검 (한손무기)", 195 | "upgrade": 8, 196 | "base": { 197 | "dex": 100, 198 | "luk": 100, 199 | "atk": 276, 200 | "bossDmg": 30, 201 | "ignoreDef": 20 202 | }, 203 | "scroll": { 204 | "dex": 40, 205 | "luk": 64, 206 | "hp": 255, 207 | "mp": 255, 208 | "atk": 179 209 | }, 210 | "grade": "legendary", 211 | "star": 15, 212 | "potential": { 213 | "grade": "legendary", 214 | "effects": [ 215 | { 216 | "bossDmg": 35 217 | }, 218 | { 219 | "dmg": 12 220 | }, 221 | { 222 | "crit": 12 223 | } 224 | ] 225 | }, 226 | "flame": { 227 | "dex": 33, 228 | "mp": 1800, 229 | "atk": 133, 230 | "dmg": 3 231 | }, 232 | "soul": { 233 | "allStat": 15 234 | } 235 | } 236 | ], 237 | "arcanes": [ 238 | { 239 | "name": "아케인심볼 : 소멸의 여로", 240 | "stat": { 241 | "luk": 1600 242 | }, 243 | "level": 14, 244 | "experience": 230, 245 | "requiredExperience": 207 246 | }, 247 | { 248 | "name": "아케인심볼 : 츄츄 아일랜드", 249 | "stat": { 250 | "luk": 1700 251 | }, 252 | "level": 15, 253 | "experience": 238, 254 | "requiredExperience": 236 255 | }, 256 | { 257 | "name": "아케인심볼 : 레헬른", 258 | "stat": { 259 | "luk": 1500 260 | }, 261 | "level": 13, 262 | "experience": 43, 263 | "requiredExperience": 180 264 | }, 265 | { 266 | "name": "아케인심볼 : 아르카나", 267 | "stat": { 268 | "luk": 1700 269 | }, 270 | "level": 15, 271 | "experience": 355, 272 | "requiredExperience": 236 273 | }, 274 | { 275 | "name": "아케인심볼 : 모라스", 276 | "stat": { 277 | "luk": 1800 278 | }, 279 | "level": 16, 280 | "experience": 309, 281 | "requiredExperience": 267 282 | }, 283 | { 284 | "name": "아케인심볼 : 에스페라", 285 | "stat": { 286 | "luk": 1800 287 | }, 288 | "level": 16, 289 | "experience": 162, 290 | "requiredExperience": 267 291 | } 292 | ], 293 | "cashEquipments": [ 294 | { 295 | "name": "8주년 음표 시트린", 296 | "upgrade": 0, 297 | "imageUrl": "https://avatar.maplestory.nexon.com/ItemIcon/KEPCIFLA.png", 298 | "category": "모자", 299 | "scroll": {}, 300 | "base": {} 301 | }, 302 | { 303 | "name": "발그레 발그레", 304 | "upgrade": 0, 305 | "imageUrl": "https://avatar.maplestory.nexon.com/ItemIcon/KEPDJEJI.png", 306 | "category": "얼굴장식", 307 | "scroll": {}, 308 | "base": {} 309 | } 310 | ], 311 | "petEquipments": [ 312 | { 313 | "name": "노란색 모자", 314 | "upgrade": 0, 315 | "imageUrl": "https://avatar.maplestory.nexon.com/ItemIcon/KEHCJHOA.png", 316 | "category": "펫장비", 317 | "scroll": {}, 318 | "base": {} 319 | } 320 | ] 321 | } 322 | ``` 323 | 324 | ## 325 | 326 | ## 에러 목록 327 | 328 | - `NotFoundError`: 캐릭터 또는 캐릭터 상세정보를 찾을 수 없을 때 329 | - `NotValidHtmlNodeError`: 올바른 HTML 노드가 아닐 때 330 | - `NotValidSpecPageError`: 올바른 스펙 페이지가 아닐 때 331 | - `OpenPageError`: 페이지를 열 수 없을 때 332 | - `PrivateInformationError`: 비공개 정보일 때 333 | - `RankingSearchError`: 공식 홈페이지 랭킹 검색에 실패했을 때 334 | - `RetryError`: 재시도를 실패했을 때 335 | -------------------------------------------------------------------------------- /examples/express/index.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const { MapleUtilsParser } = require('mapleutils-parser-js'); 3 | const app = express(); 4 | const port = 3000; 5 | 6 | app.get('/character/:name', async (req, res) => { 7 | const character = await MapleUtilsParser.new().getCharacter({ 8 | name: req.params.name, 9 | cash: true, 10 | pet: true, 11 | equip: true, 12 | symbol: true, 13 | }); 14 | res.send(JSON.stringify(character, undefined, 4)); 15 | }); 16 | 17 | app.listen(port, () => { 18 | console.log(`Example app listening on port ${port}`); 19 | }); 20 | -------------------------------------------------------------------------------- /examples/express/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "express-example", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "express-example", 9 | "version": "1.0.0", 10 | "dependencies": { 11 | "express": "^4.18.1", 12 | "mapleutils-parser-js": "file:../.." 13 | } 14 | }, 15 | "../..": { 16 | "version": "1.0.0", 17 | "license": "MIT", 18 | "dependencies": { 19 | "axios": "^0.27.2", 20 | "node-html-parser": "^5.3.3" 21 | }, 22 | "devDependencies": { 23 | "@rollup/plugin-commonjs": "^22.0.1", 24 | "@rollup/plugin-json": "^4.1.0", 25 | "@rollup/plugin-node-resolve": "^13.3.0", 26 | "@rollup/plugin-typescript": "^8.3.3", 27 | "@types/node": "^18.0.3", 28 | "rollup": "^2.76.0", 29 | "tslib": "^2.4.0", 30 | "typescript": "^4.7.4" 31 | } 32 | }, 33 | "node_modules/accepts": { 34 | "version": "1.3.8", 35 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 36 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 37 | "dependencies": { 38 | "mime-types": "~2.1.34", 39 | "negotiator": "0.6.3" 40 | }, 41 | "engines": { 42 | "node": ">= 0.6" 43 | } 44 | }, 45 | "node_modules/array-flatten": { 46 | "version": "1.1.1", 47 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 48 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 49 | }, 50 | "node_modules/body-parser": { 51 | "version": "1.20.0", 52 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", 53 | "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", 54 | "dependencies": { 55 | "bytes": "3.1.2", 56 | "content-type": "~1.0.4", 57 | "debug": "2.6.9", 58 | "depd": "2.0.0", 59 | "destroy": "1.2.0", 60 | "http-errors": "2.0.0", 61 | "iconv-lite": "0.4.24", 62 | "on-finished": "2.4.1", 63 | "qs": "6.10.3", 64 | "raw-body": "2.5.1", 65 | "type-is": "~1.6.18", 66 | "unpipe": "1.0.0" 67 | }, 68 | "engines": { 69 | "node": ">= 0.8", 70 | "npm": "1.2.8000 || >= 1.4.16" 71 | } 72 | }, 73 | "node_modules/bytes": { 74 | "version": "3.1.2", 75 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 76 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 77 | "engines": { 78 | "node": ">= 0.8" 79 | } 80 | }, 81 | "node_modules/call-bind": { 82 | "version": "1.0.2", 83 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 84 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 85 | "dependencies": { 86 | "function-bind": "^1.1.1", 87 | "get-intrinsic": "^1.0.2" 88 | }, 89 | "funding": { 90 | "url": "https://github.com/sponsors/ljharb" 91 | } 92 | }, 93 | "node_modules/content-disposition": { 94 | "version": "0.5.4", 95 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 96 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 97 | "dependencies": { 98 | "safe-buffer": "5.2.1" 99 | }, 100 | "engines": { 101 | "node": ">= 0.6" 102 | } 103 | }, 104 | "node_modules/content-type": { 105 | "version": "1.0.4", 106 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 107 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", 108 | "engines": { 109 | "node": ">= 0.6" 110 | } 111 | }, 112 | "node_modules/cookie": { 113 | "version": "0.5.0", 114 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 115 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 116 | "engines": { 117 | "node": ">= 0.6" 118 | } 119 | }, 120 | "node_modules/cookie-signature": { 121 | "version": "1.0.6", 122 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 123 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 124 | }, 125 | "node_modules/debug": { 126 | "version": "2.6.9", 127 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 128 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 129 | "dependencies": { 130 | "ms": "2.0.0" 131 | } 132 | }, 133 | "node_modules/depd": { 134 | "version": "2.0.0", 135 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 136 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 137 | "engines": { 138 | "node": ">= 0.8" 139 | } 140 | }, 141 | "node_modules/destroy": { 142 | "version": "1.2.0", 143 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 144 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 145 | "engines": { 146 | "node": ">= 0.8", 147 | "npm": "1.2.8000 || >= 1.4.16" 148 | } 149 | }, 150 | "node_modules/ee-first": { 151 | "version": "1.1.1", 152 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 153 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 154 | }, 155 | "node_modules/encodeurl": { 156 | "version": "1.0.2", 157 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 158 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 159 | "engines": { 160 | "node": ">= 0.8" 161 | } 162 | }, 163 | "node_modules/escape-html": { 164 | "version": "1.0.3", 165 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 166 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 167 | }, 168 | "node_modules/etag": { 169 | "version": "1.8.1", 170 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 171 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 172 | "engines": { 173 | "node": ">= 0.6" 174 | } 175 | }, 176 | "node_modules/express": { 177 | "version": "4.18.1", 178 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", 179 | "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", 180 | "dependencies": { 181 | "accepts": "~1.3.8", 182 | "array-flatten": "1.1.1", 183 | "body-parser": "1.20.0", 184 | "content-disposition": "0.5.4", 185 | "content-type": "~1.0.4", 186 | "cookie": "0.5.0", 187 | "cookie-signature": "1.0.6", 188 | "debug": "2.6.9", 189 | "depd": "2.0.0", 190 | "encodeurl": "~1.0.2", 191 | "escape-html": "~1.0.3", 192 | "etag": "~1.8.1", 193 | "finalhandler": "1.2.0", 194 | "fresh": "0.5.2", 195 | "http-errors": "2.0.0", 196 | "merge-descriptors": "1.0.1", 197 | "methods": "~1.1.2", 198 | "on-finished": "2.4.1", 199 | "parseurl": "~1.3.3", 200 | "path-to-regexp": "0.1.7", 201 | "proxy-addr": "~2.0.7", 202 | "qs": "6.10.3", 203 | "range-parser": "~1.2.1", 204 | "safe-buffer": "5.2.1", 205 | "send": "0.18.0", 206 | "serve-static": "1.15.0", 207 | "setprototypeof": "1.2.0", 208 | "statuses": "2.0.1", 209 | "type-is": "~1.6.18", 210 | "utils-merge": "1.0.1", 211 | "vary": "~1.1.2" 212 | }, 213 | "engines": { 214 | "node": ">= 0.10.0" 215 | } 216 | }, 217 | "node_modules/finalhandler": { 218 | "version": "1.2.0", 219 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 220 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 221 | "dependencies": { 222 | "debug": "2.6.9", 223 | "encodeurl": "~1.0.2", 224 | "escape-html": "~1.0.3", 225 | "on-finished": "2.4.1", 226 | "parseurl": "~1.3.3", 227 | "statuses": "2.0.1", 228 | "unpipe": "~1.0.0" 229 | }, 230 | "engines": { 231 | "node": ">= 0.8" 232 | } 233 | }, 234 | "node_modules/forwarded": { 235 | "version": "0.2.0", 236 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 237 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 238 | "engines": { 239 | "node": ">= 0.6" 240 | } 241 | }, 242 | "node_modules/fresh": { 243 | "version": "0.5.2", 244 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 245 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 246 | "engines": { 247 | "node": ">= 0.6" 248 | } 249 | }, 250 | "node_modules/function-bind": { 251 | "version": "1.1.1", 252 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 253 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 254 | }, 255 | "node_modules/get-intrinsic": { 256 | "version": "1.1.2", 257 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", 258 | "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", 259 | "dependencies": { 260 | "function-bind": "^1.1.1", 261 | "has": "^1.0.3", 262 | "has-symbols": "^1.0.3" 263 | }, 264 | "funding": { 265 | "url": "https://github.com/sponsors/ljharb" 266 | } 267 | }, 268 | "node_modules/has": { 269 | "version": "1.0.3", 270 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 271 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 272 | "dependencies": { 273 | "function-bind": "^1.1.1" 274 | }, 275 | "engines": { 276 | "node": ">= 0.4.0" 277 | } 278 | }, 279 | "node_modules/has-symbols": { 280 | "version": "1.0.3", 281 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 282 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 283 | "engines": { 284 | "node": ">= 0.4" 285 | }, 286 | "funding": { 287 | "url": "https://github.com/sponsors/ljharb" 288 | } 289 | }, 290 | "node_modules/http-errors": { 291 | "version": "2.0.0", 292 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 293 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 294 | "dependencies": { 295 | "depd": "2.0.0", 296 | "inherits": "2.0.4", 297 | "setprototypeof": "1.2.0", 298 | "statuses": "2.0.1", 299 | "toidentifier": "1.0.1" 300 | }, 301 | "engines": { 302 | "node": ">= 0.8" 303 | } 304 | }, 305 | "node_modules/iconv-lite": { 306 | "version": "0.4.24", 307 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 308 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 309 | "dependencies": { 310 | "safer-buffer": ">= 2.1.2 < 3" 311 | }, 312 | "engines": { 313 | "node": ">=0.10.0" 314 | } 315 | }, 316 | "node_modules/inherits": { 317 | "version": "2.0.4", 318 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 319 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 320 | }, 321 | "node_modules/ipaddr.js": { 322 | "version": "1.9.1", 323 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 324 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 325 | "engines": { 326 | "node": ">= 0.10" 327 | } 328 | }, 329 | "node_modules/mapleutils-parser-js": { 330 | "resolved": "../..", 331 | "link": true 332 | }, 333 | "node_modules/media-typer": { 334 | "version": "0.3.0", 335 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 336 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 337 | "engines": { 338 | "node": ">= 0.6" 339 | } 340 | }, 341 | "node_modules/merge-descriptors": { 342 | "version": "1.0.1", 343 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 344 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 345 | }, 346 | "node_modules/methods": { 347 | "version": "1.1.2", 348 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 349 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 350 | "engines": { 351 | "node": ">= 0.6" 352 | } 353 | }, 354 | "node_modules/mime": { 355 | "version": "1.6.0", 356 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 357 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 358 | "bin": { 359 | "mime": "cli.js" 360 | }, 361 | "engines": { 362 | "node": ">=4" 363 | } 364 | }, 365 | "node_modules/mime-db": { 366 | "version": "1.52.0", 367 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 368 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 369 | "engines": { 370 | "node": ">= 0.6" 371 | } 372 | }, 373 | "node_modules/mime-types": { 374 | "version": "2.1.35", 375 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 376 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 377 | "dependencies": { 378 | "mime-db": "1.52.0" 379 | }, 380 | "engines": { 381 | "node": ">= 0.6" 382 | } 383 | }, 384 | "node_modules/ms": { 385 | "version": "2.0.0", 386 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 387 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 388 | }, 389 | "node_modules/negotiator": { 390 | "version": "0.6.3", 391 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 392 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 393 | "engines": { 394 | "node": ">= 0.6" 395 | } 396 | }, 397 | "node_modules/object-inspect": { 398 | "version": "1.12.2", 399 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", 400 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", 401 | "funding": { 402 | "url": "https://github.com/sponsors/ljharb" 403 | } 404 | }, 405 | "node_modules/on-finished": { 406 | "version": "2.4.1", 407 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 408 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 409 | "dependencies": { 410 | "ee-first": "1.1.1" 411 | }, 412 | "engines": { 413 | "node": ">= 0.8" 414 | } 415 | }, 416 | "node_modules/parseurl": { 417 | "version": "1.3.3", 418 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 419 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 420 | "engines": { 421 | "node": ">= 0.8" 422 | } 423 | }, 424 | "node_modules/path-to-regexp": { 425 | "version": "0.1.7", 426 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 427 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 428 | }, 429 | "node_modules/proxy-addr": { 430 | "version": "2.0.7", 431 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 432 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 433 | "dependencies": { 434 | "forwarded": "0.2.0", 435 | "ipaddr.js": "1.9.1" 436 | }, 437 | "engines": { 438 | "node": ">= 0.10" 439 | } 440 | }, 441 | "node_modules/qs": { 442 | "version": "6.10.3", 443 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", 444 | "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", 445 | "dependencies": { 446 | "side-channel": "^1.0.4" 447 | }, 448 | "engines": { 449 | "node": ">=0.6" 450 | }, 451 | "funding": { 452 | "url": "https://github.com/sponsors/ljharb" 453 | } 454 | }, 455 | "node_modules/range-parser": { 456 | "version": "1.2.1", 457 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 458 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 459 | "engines": { 460 | "node": ">= 0.6" 461 | } 462 | }, 463 | "node_modules/raw-body": { 464 | "version": "2.5.1", 465 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 466 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 467 | "dependencies": { 468 | "bytes": "3.1.2", 469 | "http-errors": "2.0.0", 470 | "iconv-lite": "0.4.24", 471 | "unpipe": "1.0.0" 472 | }, 473 | "engines": { 474 | "node": ">= 0.8" 475 | } 476 | }, 477 | "node_modules/safe-buffer": { 478 | "version": "5.2.1", 479 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 480 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 481 | "funding": [ 482 | { 483 | "type": "github", 484 | "url": "https://github.com/sponsors/feross" 485 | }, 486 | { 487 | "type": "patreon", 488 | "url": "https://www.patreon.com/feross" 489 | }, 490 | { 491 | "type": "consulting", 492 | "url": "https://feross.org/support" 493 | } 494 | ] 495 | }, 496 | "node_modules/safer-buffer": { 497 | "version": "2.1.2", 498 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 499 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 500 | }, 501 | "node_modules/send": { 502 | "version": "0.18.0", 503 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 504 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 505 | "dependencies": { 506 | "debug": "2.6.9", 507 | "depd": "2.0.0", 508 | "destroy": "1.2.0", 509 | "encodeurl": "~1.0.2", 510 | "escape-html": "~1.0.3", 511 | "etag": "~1.8.1", 512 | "fresh": "0.5.2", 513 | "http-errors": "2.0.0", 514 | "mime": "1.6.0", 515 | "ms": "2.1.3", 516 | "on-finished": "2.4.1", 517 | "range-parser": "~1.2.1", 518 | "statuses": "2.0.1" 519 | }, 520 | "engines": { 521 | "node": ">= 0.8.0" 522 | } 523 | }, 524 | "node_modules/send/node_modules/ms": { 525 | "version": "2.1.3", 526 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 527 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 528 | }, 529 | "node_modules/serve-static": { 530 | "version": "1.15.0", 531 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 532 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 533 | "dependencies": { 534 | "encodeurl": "~1.0.2", 535 | "escape-html": "~1.0.3", 536 | "parseurl": "~1.3.3", 537 | "send": "0.18.0" 538 | }, 539 | "engines": { 540 | "node": ">= 0.8.0" 541 | } 542 | }, 543 | "node_modules/setprototypeof": { 544 | "version": "1.2.0", 545 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 546 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 547 | }, 548 | "node_modules/side-channel": { 549 | "version": "1.0.4", 550 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 551 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 552 | "dependencies": { 553 | "call-bind": "^1.0.0", 554 | "get-intrinsic": "^1.0.2", 555 | "object-inspect": "^1.9.0" 556 | }, 557 | "funding": { 558 | "url": "https://github.com/sponsors/ljharb" 559 | } 560 | }, 561 | "node_modules/statuses": { 562 | "version": "2.0.1", 563 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 564 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 565 | "engines": { 566 | "node": ">= 0.8" 567 | } 568 | }, 569 | "node_modules/toidentifier": { 570 | "version": "1.0.1", 571 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 572 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 573 | "engines": { 574 | "node": ">=0.6" 575 | } 576 | }, 577 | "node_modules/type-is": { 578 | "version": "1.6.18", 579 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 580 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 581 | "dependencies": { 582 | "media-typer": "0.3.0", 583 | "mime-types": "~2.1.24" 584 | }, 585 | "engines": { 586 | "node": ">= 0.6" 587 | } 588 | }, 589 | "node_modules/unpipe": { 590 | "version": "1.0.0", 591 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 592 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 593 | "engines": { 594 | "node": ">= 0.8" 595 | } 596 | }, 597 | "node_modules/utils-merge": { 598 | "version": "1.0.1", 599 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 600 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 601 | "engines": { 602 | "node": ">= 0.4.0" 603 | } 604 | }, 605 | "node_modules/vary": { 606 | "version": "1.1.2", 607 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 608 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 609 | "engines": { 610 | "node": ">= 0.8" 611 | } 612 | } 613 | }, 614 | "dependencies": { 615 | "accepts": { 616 | "version": "1.3.8", 617 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 618 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 619 | "requires": { 620 | "mime-types": "~2.1.34", 621 | "negotiator": "0.6.3" 622 | } 623 | }, 624 | "array-flatten": { 625 | "version": "1.1.1", 626 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 627 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 628 | }, 629 | "body-parser": { 630 | "version": "1.20.0", 631 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", 632 | "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", 633 | "requires": { 634 | "bytes": "3.1.2", 635 | "content-type": "~1.0.4", 636 | "debug": "2.6.9", 637 | "depd": "2.0.0", 638 | "destroy": "1.2.0", 639 | "http-errors": "2.0.0", 640 | "iconv-lite": "0.4.24", 641 | "on-finished": "2.4.1", 642 | "qs": "6.10.3", 643 | "raw-body": "2.5.1", 644 | "type-is": "~1.6.18", 645 | "unpipe": "1.0.0" 646 | } 647 | }, 648 | "bytes": { 649 | "version": "3.1.2", 650 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 651 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" 652 | }, 653 | "call-bind": { 654 | "version": "1.0.2", 655 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 656 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 657 | "requires": { 658 | "function-bind": "^1.1.1", 659 | "get-intrinsic": "^1.0.2" 660 | } 661 | }, 662 | "content-disposition": { 663 | "version": "0.5.4", 664 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 665 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 666 | "requires": { 667 | "safe-buffer": "5.2.1" 668 | } 669 | }, 670 | "content-type": { 671 | "version": "1.0.4", 672 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 673 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 674 | }, 675 | "cookie": { 676 | "version": "0.5.0", 677 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 678 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" 679 | }, 680 | "cookie-signature": { 681 | "version": "1.0.6", 682 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 683 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 684 | }, 685 | "debug": { 686 | "version": "2.6.9", 687 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 688 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 689 | "requires": { 690 | "ms": "2.0.0" 691 | } 692 | }, 693 | "depd": { 694 | "version": "2.0.0", 695 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 696 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" 697 | }, 698 | "destroy": { 699 | "version": "1.2.0", 700 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 701 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" 702 | }, 703 | "ee-first": { 704 | "version": "1.1.1", 705 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 706 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 707 | }, 708 | "encodeurl": { 709 | "version": "1.0.2", 710 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 711 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" 712 | }, 713 | "escape-html": { 714 | "version": "1.0.3", 715 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 716 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 717 | }, 718 | "etag": { 719 | "version": "1.8.1", 720 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 721 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" 722 | }, 723 | "express": { 724 | "version": "4.18.1", 725 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", 726 | "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", 727 | "requires": { 728 | "accepts": "~1.3.8", 729 | "array-flatten": "1.1.1", 730 | "body-parser": "1.20.0", 731 | "content-disposition": "0.5.4", 732 | "content-type": "~1.0.4", 733 | "cookie": "0.5.0", 734 | "cookie-signature": "1.0.6", 735 | "debug": "2.6.9", 736 | "depd": "2.0.0", 737 | "encodeurl": "~1.0.2", 738 | "escape-html": "~1.0.3", 739 | "etag": "~1.8.1", 740 | "finalhandler": "1.2.0", 741 | "fresh": "0.5.2", 742 | "http-errors": "2.0.0", 743 | "merge-descriptors": "1.0.1", 744 | "methods": "~1.1.2", 745 | "on-finished": "2.4.1", 746 | "parseurl": "~1.3.3", 747 | "path-to-regexp": "0.1.7", 748 | "proxy-addr": "~2.0.7", 749 | "qs": "6.10.3", 750 | "range-parser": "~1.2.1", 751 | "safe-buffer": "5.2.1", 752 | "send": "0.18.0", 753 | "serve-static": "1.15.0", 754 | "setprototypeof": "1.2.0", 755 | "statuses": "2.0.1", 756 | "type-is": "~1.6.18", 757 | "utils-merge": "1.0.1", 758 | "vary": "~1.1.2" 759 | } 760 | }, 761 | "finalhandler": { 762 | "version": "1.2.0", 763 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 764 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 765 | "requires": { 766 | "debug": "2.6.9", 767 | "encodeurl": "~1.0.2", 768 | "escape-html": "~1.0.3", 769 | "on-finished": "2.4.1", 770 | "parseurl": "~1.3.3", 771 | "statuses": "2.0.1", 772 | "unpipe": "~1.0.0" 773 | } 774 | }, 775 | "forwarded": { 776 | "version": "0.2.0", 777 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 778 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 779 | }, 780 | "fresh": { 781 | "version": "0.5.2", 782 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 783 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" 784 | }, 785 | "function-bind": { 786 | "version": "1.1.1", 787 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 788 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 789 | }, 790 | "get-intrinsic": { 791 | "version": "1.1.2", 792 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", 793 | "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", 794 | "requires": { 795 | "function-bind": "^1.1.1", 796 | "has": "^1.0.3", 797 | "has-symbols": "^1.0.3" 798 | } 799 | }, 800 | "has": { 801 | "version": "1.0.3", 802 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 803 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 804 | "requires": { 805 | "function-bind": "^1.1.1" 806 | } 807 | }, 808 | "has-symbols": { 809 | "version": "1.0.3", 810 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 811 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" 812 | }, 813 | "http-errors": { 814 | "version": "2.0.0", 815 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 816 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 817 | "requires": { 818 | "depd": "2.0.0", 819 | "inherits": "2.0.4", 820 | "setprototypeof": "1.2.0", 821 | "statuses": "2.0.1", 822 | "toidentifier": "1.0.1" 823 | } 824 | }, 825 | "iconv-lite": { 826 | "version": "0.4.24", 827 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 828 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 829 | "requires": { 830 | "safer-buffer": ">= 2.1.2 < 3" 831 | } 832 | }, 833 | "inherits": { 834 | "version": "2.0.4", 835 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 836 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 837 | }, 838 | "ipaddr.js": { 839 | "version": "1.9.1", 840 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 841 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 842 | }, 843 | "mapleutils-parser-js": { 844 | "version": "file:../..", 845 | "requires": { 846 | "@rollup/plugin-commonjs": "^22.0.1", 847 | "@rollup/plugin-json": "^4.1.0", 848 | "@rollup/plugin-node-resolve": "^13.3.0", 849 | "@rollup/plugin-typescript": "^8.3.3", 850 | "@types/node": "^18.0.3", 851 | "axios": "^0.27.2", 852 | "node-html-parser": "^5.3.3", 853 | "rollup": "^2.76.0", 854 | "tslib": "^2.4.0", 855 | "typescript": "^4.7.4" 856 | } 857 | }, 858 | "media-typer": { 859 | "version": "0.3.0", 860 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 861 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" 862 | }, 863 | "merge-descriptors": { 864 | "version": "1.0.1", 865 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 866 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 867 | }, 868 | "methods": { 869 | "version": "1.1.2", 870 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 871 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" 872 | }, 873 | "mime": { 874 | "version": "1.6.0", 875 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 876 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 877 | }, 878 | "mime-db": { 879 | "version": "1.52.0", 880 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 881 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 882 | }, 883 | "mime-types": { 884 | "version": "2.1.35", 885 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 886 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 887 | "requires": { 888 | "mime-db": "1.52.0" 889 | } 890 | }, 891 | "ms": { 892 | "version": "2.0.0", 893 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 894 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 895 | }, 896 | "negotiator": { 897 | "version": "0.6.3", 898 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 899 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" 900 | }, 901 | "object-inspect": { 902 | "version": "1.12.2", 903 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", 904 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" 905 | }, 906 | "on-finished": { 907 | "version": "2.4.1", 908 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 909 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 910 | "requires": { 911 | "ee-first": "1.1.1" 912 | } 913 | }, 914 | "parseurl": { 915 | "version": "1.3.3", 916 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 917 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 918 | }, 919 | "path-to-regexp": { 920 | "version": "0.1.7", 921 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 922 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 923 | }, 924 | "proxy-addr": { 925 | "version": "2.0.7", 926 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 927 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 928 | "requires": { 929 | "forwarded": "0.2.0", 930 | "ipaddr.js": "1.9.1" 931 | } 932 | }, 933 | "qs": { 934 | "version": "6.10.3", 935 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", 936 | "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", 937 | "requires": { 938 | "side-channel": "^1.0.4" 939 | } 940 | }, 941 | "range-parser": { 942 | "version": "1.2.1", 943 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 944 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 945 | }, 946 | "raw-body": { 947 | "version": "2.5.1", 948 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 949 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 950 | "requires": { 951 | "bytes": "3.1.2", 952 | "http-errors": "2.0.0", 953 | "iconv-lite": "0.4.24", 954 | "unpipe": "1.0.0" 955 | } 956 | }, 957 | "safe-buffer": { 958 | "version": "5.2.1", 959 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 960 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 961 | }, 962 | "safer-buffer": { 963 | "version": "2.1.2", 964 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 965 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 966 | }, 967 | "send": { 968 | "version": "0.18.0", 969 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 970 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 971 | "requires": { 972 | "debug": "2.6.9", 973 | "depd": "2.0.0", 974 | "destroy": "1.2.0", 975 | "encodeurl": "~1.0.2", 976 | "escape-html": "~1.0.3", 977 | "etag": "~1.8.1", 978 | "fresh": "0.5.2", 979 | "http-errors": "2.0.0", 980 | "mime": "1.6.0", 981 | "ms": "2.1.3", 982 | "on-finished": "2.4.1", 983 | "range-parser": "~1.2.1", 984 | "statuses": "2.0.1" 985 | }, 986 | "dependencies": { 987 | "ms": { 988 | "version": "2.1.3", 989 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 990 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 991 | } 992 | } 993 | }, 994 | "serve-static": { 995 | "version": "1.15.0", 996 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 997 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 998 | "requires": { 999 | "encodeurl": "~1.0.2", 1000 | "escape-html": "~1.0.3", 1001 | "parseurl": "~1.3.3", 1002 | "send": "0.18.0" 1003 | } 1004 | }, 1005 | "setprototypeof": { 1006 | "version": "1.2.0", 1007 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 1008 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 1009 | }, 1010 | "side-channel": { 1011 | "version": "1.0.4", 1012 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1013 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1014 | "requires": { 1015 | "call-bind": "^1.0.0", 1016 | "get-intrinsic": "^1.0.2", 1017 | "object-inspect": "^1.9.0" 1018 | } 1019 | }, 1020 | "statuses": { 1021 | "version": "2.0.1", 1022 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 1023 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" 1024 | }, 1025 | "toidentifier": { 1026 | "version": "1.0.1", 1027 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 1028 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" 1029 | }, 1030 | "type-is": { 1031 | "version": "1.6.18", 1032 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1033 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1034 | "requires": { 1035 | "media-typer": "0.3.0", 1036 | "mime-types": "~2.1.24" 1037 | } 1038 | }, 1039 | "unpipe": { 1040 | "version": "1.0.0", 1041 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1042 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" 1043 | }, 1044 | "utils-merge": { 1045 | "version": "1.0.1", 1046 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1047 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" 1048 | }, 1049 | "vary": { 1050 | "version": "1.1.2", 1051 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1052 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" 1053 | } 1054 | } 1055 | } 1056 | -------------------------------------------------------------------------------- /examples/express/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "express-example", 3 | "version": "1.0.0", 4 | "description": "example", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node index.js", 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "author": "Sangbin Lee", 11 | "dependencies": { 12 | "express": "^4.18.1", 13 | "mapleutils-parser-js": "latest" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mapleutils-parser-js", 3 | "version": "0.0.7", 4 | "description": "Maplestory unofficial parsing library", 5 | "main": "dist/index.js", 6 | "module": "dist/index.mjs", 7 | "types": "dist/index.d.ts", 8 | "files": [ 9 | "dist" 10 | ], 11 | "scripts": { 12 | "build": "tsup src/index.ts --format cjs,esm --dts --minify --legacy-output --clean --sourcemap --out-dir dist", 13 | "release": "pnpm run build && changeset publish", 14 | "package": "pnpm run build && pnpm changeset" 15 | }, 16 | "author": "Sangbin Lee ", 17 | "license": "MIT", 18 | "bugs": { 19 | "url": "https://github.com/leesangb/mapleutils-parser-js/issues" 20 | }, 21 | "homepage": "https://github.com/leesangb/mapleutils-parser-js#readme", 22 | "devDependencies": { 23 | "@changesets/cli": "^2.26.2", 24 | "@types/node": "^18.0.3", 25 | "tsup": "^7.1.0", 26 | "typescript": "^4.9.5" 27 | }, 28 | "dependencies": { 29 | "node-html-parser": "^6.1.5" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | node-html-parser: 9 | specifier: ^6.1.5 10 | version: 6.1.5 11 | 12 | devDependencies: 13 | '@changesets/cli': 14 | specifier: ^2.26.2 15 | version: 2.26.2 16 | '@types/node': 17 | specifier: ^18.0.3 18 | version: 18.17.1 19 | tsup: 20 | specifier: ^7.1.0 21 | version: 7.1.0(typescript@4.9.5) 22 | typescript: 23 | specifier: ^4.9.5 24 | version: 4.9.5 25 | 26 | packages: 27 | 28 | /@babel/code-frame@7.22.5: 29 | resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} 30 | engines: {node: '>=6.9.0'} 31 | dependencies: 32 | '@babel/highlight': 7.22.5 33 | dev: true 34 | 35 | /@babel/helper-validator-identifier@7.22.5: 36 | resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} 37 | engines: {node: '>=6.9.0'} 38 | dev: true 39 | 40 | /@babel/highlight@7.22.5: 41 | resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} 42 | engines: {node: '>=6.9.0'} 43 | dependencies: 44 | '@babel/helper-validator-identifier': 7.22.5 45 | chalk: 2.4.2 46 | js-tokens: 4.0.0 47 | dev: true 48 | 49 | /@babel/runtime@7.22.6: 50 | resolution: {integrity: sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==} 51 | engines: {node: '>=6.9.0'} 52 | dependencies: 53 | regenerator-runtime: 0.13.11 54 | dev: true 55 | 56 | /@changesets/apply-release-plan@6.1.4: 57 | resolution: {integrity: sha512-FMpKF1fRlJyCZVYHr3CbinpZZ+6MwvOtWUuO8uo+svcATEoc1zRDcj23pAurJ2TZ/uVz1wFHH6K3NlACy0PLew==} 58 | dependencies: 59 | '@babel/runtime': 7.22.6 60 | '@changesets/config': 2.3.1 61 | '@changesets/get-version-range-type': 0.3.2 62 | '@changesets/git': 2.0.0 63 | '@changesets/types': 5.2.1 64 | '@manypkg/get-packages': 1.1.3 65 | detect-indent: 6.1.0 66 | fs-extra: 7.0.1 67 | lodash.startcase: 4.4.0 68 | outdent: 0.5.0 69 | prettier: 2.8.8 70 | resolve-from: 5.0.0 71 | semver: 7.5.4 72 | dev: true 73 | 74 | /@changesets/assemble-release-plan@5.2.4: 75 | resolution: {integrity: sha512-xJkWX+1/CUaOUWTguXEbCDTyWJFECEhmdtbkjhn5GVBGxdP/JwaHBIU9sW3FR6gD07UwZ7ovpiPclQZs+j+mvg==} 76 | dependencies: 77 | '@babel/runtime': 7.22.6 78 | '@changesets/errors': 0.1.4 79 | '@changesets/get-dependents-graph': 1.3.6 80 | '@changesets/types': 5.2.1 81 | '@manypkg/get-packages': 1.1.3 82 | semver: 7.5.4 83 | dev: true 84 | 85 | /@changesets/changelog-git@0.1.14: 86 | resolution: {integrity: sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA==} 87 | dependencies: 88 | '@changesets/types': 5.2.1 89 | dev: true 90 | 91 | /@changesets/cli@2.26.2: 92 | resolution: {integrity: sha512-dnWrJTmRR8bCHikJHl9b9HW3gXACCehz4OasrXpMp7sx97ECuBGGNjJhjPhdZNCvMy9mn4BWdplI323IbqsRig==} 93 | hasBin: true 94 | dependencies: 95 | '@babel/runtime': 7.22.6 96 | '@changesets/apply-release-plan': 6.1.4 97 | '@changesets/assemble-release-plan': 5.2.4 98 | '@changesets/changelog-git': 0.1.14 99 | '@changesets/config': 2.3.1 100 | '@changesets/errors': 0.1.4 101 | '@changesets/get-dependents-graph': 1.3.6 102 | '@changesets/get-release-plan': 3.0.17 103 | '@changesets/git': 2.0.0 104 | '@changesets/logger': 0.0.5 105 | '@changesets/pre': 1.0.14 106 | '@changesets/read': 0.5.9 107 | '@changesets/types': 5.2.1 108 | '@changesets/write': 0.2.3 109 | '@manypkg/get-packages': 1.1.3 110 | '@types/is-ci': 3.0.0 111 | '@types/semver': 7.5.0 112 | ansi-colors: 4.1.3 113 | chalk: 2.4.2 114 | enquirer: 2.4.1 115 | external-editor: 3.1.0 116 | fs-extra: 7.0.1 117 | human-id: 1.0.2 118 | is-ci: 3.0.1 119 | meow: 6.1.1 120 | outdent: 0.5.0 121 | p-limit: 2.3.0 122 | preferred-pm: 3.0.3 123 | resolve-from: 5.0.0 124 | semver: 7.5.4 125 | spawndamnit: 2.0.0 126 | term-size: 2.2.1 127 | tty-table: 4.2.1 128 | dev: true 129 | 130 | /@changesets/config@2.3.1: 131 | resolution: {integrity: sha512-PQXaJl82CfIXddUOppj4zWu+987GCw2M+eQcOepxN5s+kvnsZOwjEJO3DH9eVy+OP6Pg/KFEWdsECFEYTtbg6w==} 132 | dependencies: 133 | '@changesets/errors': 0.1.4 134 | '@changesets/get-dependents-graph': 1.3.6 135 | '@changesets/logger': 0.0.5 136 | '@changesets/types': 5.2.1 137 | '@manypkg/get-packages': 1.1.3 138 | fs-extra: 7.0.1 139 | micromatch: 4.0.5 140 | dev: true 141 | 142 | /@changesets/errors@0.1.4: 143 | resolution: {integrity: sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==} 144 | dependencies: 145 | extendable-error: 0.1.7 146 | dev: true 147 | 148 | /@changesets/get-dependents-graph@1.3.6: 149 | resolution: {integrity: sha512-Q/sLgBANmkvUm09GgRsAvEtY3p1/5OCzgBE5vX3vgb5CvW0j7CEljocx5oPXeQSNph6FXulJlXV3Re/v3K3P3Q==} 150 | dependencies: 151 | '@changesets/types': 5.2.1 152 | '@manypkg/get-packages': 1.1.3 153 | chalk: 2.4.2 154 | fs-extra: 7.0.1 155 | semver: 7.5.4 156 | dev: true 157 | 158 | /@changesets/get-release-plan@3.0.17: 159 | resolution: {integrity: sha512-6IwKTubNEgoOZwDontYc2x2cWXfr6IKxP3IhKeK+WjyD6y3M4Gl/jdQvBw+m/5zWILSOCAaGLu2ZF6Q+WiPniw==} 160 | dependencies: 161 | '@babel/runtime': 7.22.6 162 | '@changesets/assemble-release-plan': 5.2.4 163 | '@changesets/config': 2.3.1 164 | '@changesets/pre': 1.0.14 165 | '@changesets/read': 0.5.9 166 | '@changesets/types': 5.2.1 167 | '@manypkg/get-packages': 1.1.3 168 | dev: true 169 | 170 | /@changesets/get-version-range-type@0.3.2: 171 | resolution: {integrity: sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==} 172 | dev: true 173 | 174 | /@changesets/git@2.0.0: 175 | resolution: {integrity: sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==} 176 | dependencies: 177 | '@babel/runtime': 7.22.6 178 | '@changesets/errors': 0.1.4 179 | '@changesets/types': 5.2.1 180 | '@manypkg/get-packages': 1.1.3 181 | is-subdir: 1.2.0 182 | micromatch: 4.0.5 183 | spawndamnit: 2.0.0 184 | dev: true 185 | 186 | /@changesets/logger@0.0.5: 187 | resolution: {integrity: sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==} 188 | dependencies: 189 | chalk: 2.4.2 190 | dev: true 191 | 192 | /@changesets/parse@0.3.16: 193 | resolution: {integrity: sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg==} 194 | dependencies: 195 | '@changesets/types': 5.2.1 196 | js-yaml: 3.14.1 197 | dev: true 198 | 199 | /@changesets/pre@1.0.14: 200 | resolution: {integrity: sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==} 201 | dependencies: 202 | '@babel/runtime': 7.22.6 203 | '@changesets/errors': 0.1.4 204 | '@changesets/types': 5.2.1 205 | '@manypkg/get-packages': 1.1.3 206 | fs-extra: 7.0.1 207 | dev: true 208 | 209 | /@changesets/read@0.5.9: 210 | resolution: {integrity: sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==} 211 | dependencies: 212 | '@babel/runtime': 7.22.6 213 | '@changesets/git': 2.0.0 214 | '@changesets/logger': 0.0.5 215 | '@changesets/parse': 0.3.16 216 | '@changesets/types': 5.2.1 217 | chalk: 2.4.2 218 | fs-extra: 7.0.1 219 | p-filter: 2.1.0 220 | dev: true 221 | 222 | /@changesets/types@4.1.0: 223 | resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} 224 | dev: true 225 | 226 | /@changesets/types@5.2.1: 227 | resolution: {integrity: sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==} 228 | dev: true 229 | 230 | /@changesets/write@0.2.3: 231 | resolution: {integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==} 232 | dependencies: 233 | '@babel/runtime': 7.22.6 234 | '@changesets/types': 5.2.1 235 | fs-extra: 7.0.1 236 | human-id: 1.0.2 237 | prettier: 2.8.8 238 | dev: true 239 | 240 | /@esbuild/android-arm64@0.18.17: 241 | resolution: {integrity: sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==} 242 | engines: {node: '>=12'} 243 | cpu: [arm64] 244 | os: [android] 245 | requiresBuild: true 246 | dev: true 247 | optional: true 248 | 249 | /@esbuild/android-arm@0.18.17: 250 | resolution: {integrity: sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==} 251 | engines: {node: '>=12'} 252 | cpu: [arm] 253 | os: [android] 254 | requiresBuild: true 255 | dev: true 256 | optional: true 257 | 258 | /@esbuild/android-x64@0.18.17: 259 | resolution: {integrity: sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==} 260 | engines: {node: '>=12'} 261 | cpu: [x64] 262 | os: [android] 263 | requiresBuild: true 264 | dev: true 265 | optional: true 266 | 267 | /@esbuild/darwin-arm64@0.18.17: 268 | resolution: {integrity: sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==} 269 | engines: {node: '>=12'} 270 | cpu: [arm64] 271 | os: [darwin] 272 | requiresBuild: true 273 | dev: true 274 | optional: true 275 | 276 | /@esbuild/darwin-x64@0.18.17: 277 | resolution: {integrity: sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==} 278 | engines: {node: '>=12'} 279 | cpu: [x64] 280 | os: [darwin] 281 | requiresBuild: true 282 | dev: true 283 | optional: true 284 | 285 | /@esbuild/freebsd-arm64@0.18.17: 286 | resolution: {integrity: sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==} 287 | engines: {node: '>=12'} 288 | cpu: [arm64] 289 | os: [freebsd] 290 | requiresBuild: true 291 | dev: true 292 | optional: true 293 | 294 | /@esbuild/freebsd-x64@0.18.17: 295 | resolution: {integrity: sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==} 296 | engines: {node: '>=12'} 297 | cpu: [x64] 298 | os: [freebsd] 299 | requiresBuild: true 300 | dev: true 301 | optional: true 302 | 303 | /@esbuild/linux-arm64@0.18.17: 304 | resolution: {integrity: sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==} 305 | engines: {node: '>=12'} 306 | cpu: [arm64] 307 | os: [linux] 308 | requiresBuild: true 309 | dev: true 310 | optional: true 311 | 312 | /@esbuild/linux-arm@0.18.17: 313 | resolution: {integrity: sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==} 314 | engines: {node: '>=12'} 315 | cpu: [arm] 316 | os: [linux] 317 | requiresBuild: true 318 | dev: true 319 | optional: true 320 | 321 | /@esbuild/linux-ia32@0.18.17: 322 | resolution: {integrity: sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==} 323 | engines: {node: '>=12'} 324 | cpu: [ia32] 325 | os: [linux] 326 | requiresBuild: true 327 | dev: true 328 | optional: true 329 | 330 | /@esbuild/linux-loong64@0.18.17: 331 | resolution: {integrity: sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==} 332 | engines: {node: '>=12'} 333 | cpu: [loong64] 334 | os: [linux] 335 | requiresBuild: true 336 | dev: true 337 | optional: true 338 | 339 | /@esbuild/linux-mips64el@0.18.17: 340 | resolution: {integrity: sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==} 341 | engines: {node: '>=12'} 342 | cpu: [mips64el] 343 | os: [linux] 344 | requiresBuild: true 345 | dev: true 346 | optional: true 347 | 348 | /@esbuild/linux-ppc64@0.18.17: 349 | resolution: {integrity: sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==} 350 | engines: {node: '>=12'} 351 | cpu: [ppc64] 352 | os: [linux] 353 | requiresBuild: true 354 | dev: true 355 | optional: true 356 | 357 | /@esbuild/linux-riscv64@0.18.17: 358 | resolution: {integrity: sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==} 359 | engines: {node: '>=12'} 360 | cpu: [riscv64] 361 | os: [linux] 362 | requiresBuild: true 363 | dev: true 364 | optional: true 365 | 366 | /@esbuild/linux-s390x@0.18.17: 367 | resolution: {integrity: sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==} 368 | engines: {node: '>=12'} 369 | cpu: [s390x] 370 | os: [linux] 371 | requiresBuild: true 372 | dev: true 373 | optional: true 374 | 375 | /@esbuild/linux-x64@0.18.17: 376 | resolution: {integrity: sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==} 377 | engines: {node: '>=12'} 378 | cpu: [x64] 379 | os: [linux] 380 | requiresBuild: true 381 | dev: true 382 | optional: true 383 | 384 | /@esbuild/netbsd-x64@0.18.17: 385 | resolution: {integrity: sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==} 386 | engines: {node: '>=12'} 387 | cpu: [x64] 388 | os: [netbsd] 389 | requiresBuild: true 390 | dev: true 391 | optional: true 392 | 393 | /@esbuild/openbsd-x64@0.18.17: 394 | resolution: {integrity: sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==} 395 | engines: {node: '>=12'} 396 | cpu: [x64] 397 | os: [openbsd] 398 | requiresBuild: true 399 | dev: true 400 | optional: true 401 | 402 | /@esbuild/sunos-x64@0.18.17: 403 | resolution: {integrity: sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==} 404 | engines: {node: '>=12'} 405 | cpu: [x64] 406 | os: [sunos] 407 | requiresBuild: true 408 | dev: true 409 | optional: true 410 | 411 | /@esbuild/win32-arm64@0.18.17: 412 | resolution: {integrity: sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==} 413 | engines: {node: '>=12'} 414 | cpu: [arm64] 415 | os: [win32] 416 | requiresBuild: true 417 | dev: true 418 | optional: true 419 | 420 | /@esbuild/win32-ia32@0.18.17: 421 | resolution: {integrity: sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==} 422 | engines: {node: '>=12'} 423 | cpu: [ia32] 424 | os: [win32] 425 | requiresBuild: true 426 | dev: true 427 | optional: true 428 | 429 | /@esbuild/win32-x64@0.18.17: 430 | resolution: {integrity: sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==} 431 | engines: {node: '>=12'} 432 | cpu: [x64] 433 | os: [win32] 434 | requiresBuild: true 435 | dev: true 436 | optional: true 437 | 438 | /@jridgewell/gen-mapping@0.3.3: 439 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 440 | engines: {node: '>=6.0.0'} 441 | dependencies: 442 | '@jridgewell/set-array': 1.1.2 443 | '@jridgewell/sourcemap-codec': 1.4.15 444 | '@jridgewell/trace-mapping': 0.3.18 445 | dev: true 446 | 447 | /@jridgewell/resolve-uri@3.1.0: 448 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 449 | engines: {node: '>=6.0.0'} 450 | dev: true 451 | 452 | /@jridgewell/set-array@1.1.2: 453 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 454 | engines: {node: '>=6.0.0'} 455 | dev: true 456 | 457 | /@jridgewell/sourcemap-codec@1.4.14: 458 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 459 | dev: true 460 | 461 | /@jridgewell/sourcemap-codec@1.4.15: 462 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 463 | dev: true 464 | 465 | /@jridgewell/trace-mapping@0.3.18: 466 | resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} 467 | dependencies: 468 | '@jridgewell/resolve-uri': 3.1.0 469 | '@jridgewell/sourcemap-codec': 1.4.14 470 | dev: true 471 | 472 | /@manypkg/find-root@1.1.0: 473 | resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} 474 | dependencies: 475 | '@babel/runtime': 7.22.6 476 | '@types/node': 12.20.55 477 | find-up: 4.1.0 478 | fs-extra: 8.1.0 479 | dev: true 480 | 481 | /@manypkg/get-packages@1.1.3: 482 | resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} 483 | dependencies: 484 | '@babel/runtime': 7.22.6 485 | '@changesets/types': 4.1.0 486 | '@manypkg/find-root': 1.1.0 487 | fs-extra: 8.1.0 488 | globby: 11.1.0 489 | read-yaml-file: 1.1.0 490 | dev: true 491 | 492 | /@nodelib/fs.scandir@2.1.5: 493 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 494 | engines: {node: '>= 8'} 495 | dependencies: 496 | '@nodelib/fs.stat': 2.0.5 497 | run-parallel: 1.2.0 498 | dev: true 499 | 500 | /@nodelib/fs.stat@2.0.5: 501 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 502 | engines: {node: '>= 8'} 503 | dev: true 504 | 505 | /@nodelib/fs.walk@1.2.8: 506 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 507 | engines: {node: '>= 8'} 508 | dependencies: 509 | '@nodelib/fs.scandir': 2.1.5 510 | fastq: 1.15.0 511 | dev: true 512 | 513 | /@types/is-ci@3.0.0: 514 | resolution: {integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==} 515 | dependencies: 516 | ci-info: 3.8.0 517 | dev: true 518 | 519 | /@types/minimist@1.2.2: 520 | resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} 521 | dev: true 522 | 523 | /@types/node@12.20.55: 524 | resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} 525 | dev: true 526 | 527 | /@types/node@18.17.1: 528 | resolution: {integrity: sha512-xlR1jahfizdplZYRU59JlUx9uzF1ARa8jbhM11ccpCJya8kvos5jwdm2ZAgxSCwOl0fq21svP18EVwPBXMQudw==} 529 | dev: true 530 | 531 | /@types/normalize-package-data@2.4.1: 532 | resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} 533 | dev: true 534 | 535 | /@types/semver@7.5.0: 536 | resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} 537 | dev: true 538 | 539 | /ansi-colors@4.1.3: 540 | resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} 541 | engines: {node: '>=6'} 542 | dev: true 543 | 544 | /ansi-regex@5.0.1: 545 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 546 | engines: {node: '>=8'} 547 | dev: true 548 | 549 | /ansi-styles@3.2.1: 550 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 551 | engines: {node: '>=4'} 552 | dependencies: 553 | color-convert: 1.9.3 554 | dev: true 555 | 556 | /ansi-styles@4.3.0: 557 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 558 | engines: {node: '>=8'} 559 | dependencies: 560 | color-convert: 2.0.1 561 | dev: true 562 | 563 | /any-promise@1.3.0: 564 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 565 | dev: true 566 | 567 | /anymatch@3.1.3: 568 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 569 | engines: {node: '>= 8'} 570 | dependencies: 571 | normalize-path: 3.0.0 572 | picomatch: 2.3.1 573 | dev: true 574 | 575 | /argparse@1.0.10: 576 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 577 | dependencies: 578 | sprintf-js: 1.0.3 579 | dev: true 580 | 581 | /array-buffer-byte-length@1.0.0: 582 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} 583 | dependencies: 584 | call-bind: 1.0.2 585 | is-array-buffer: 3.0.2 586 | dev: true 587 | 588 | /array-union@2.1.0: 589 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 590 | engines: {node: '>=8'} 591 | dev: true 592 | 593 | /array.prototype.flat@1.3.1: 594 | resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} 595 | engines: {node: '>= 0.4'} 596 | dependencies: 597 | call-bind: 1.0.2 598 | define-properties: 1.2.0 599 | es-abstract: 1.22.1 600 | es-shim-unscopables: 1.0.0 601 | dev: true 602 | 603 | /arraybuffer.prototype.slice@1.0.1: 604 | resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} 605 | engines: {node: '>= 0.4'} 606 | dependencies: 607 | array-buffer-byte-length: 1.0.0 608 | call-bind: 1.0.2 609 | define-properties: 1.2.0 610 | get-intrinsic: 1.2.1 611 | is-array-buffer: 3.0.2 612 | is-shared-array-buffer: 1.0.2 613 | dev: true 614 | 615 | /arrify@1.0.1: 616 | resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} 617 | engines: {node: '>=0.10.0'} 618 | dev: true 619 | 620 | /available-typed-arrays@1.0.5: 621 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} 622 | engines: {node: '>= 0.4'} 623 | dev: true 624 | 625 | /balanced-match@1.0.2: 626 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 627 | dev: true 628 | 629 | /better-path-resolve@1.0.0: 630 | resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} 631 | engines: {node: '>=4'} 632 | dependencies: 633 | is-windows: 1.0.2 634 | dev: true 635 | 636 | /binary-extensions@2.2.0: 637 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 638 | engines: {node: '>=8'} 639 | dev: true 640 | 641 | /boolbase@1.0.0: 642 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} 643 | dev: false 644 | 645 | /brace-expansion@1.1.11: 646 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 647 | dependencies: 648 | balanced-match: 1.0.2 649 | concat-map: 0.0.1 650 | dev: true 651 | 652 | /braces@3.0.2: 653 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 654 | engines: {node: '>=8'} 655 | dependencies: 656 | fill-range: 7.0.1 657 | dev: true 658 | 659 | /breakword@1.0.6: 660 | resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} 661 | dependencies: 662 | wcwidth: 1.0.1 663 | dev: true 664 | 665 | /bundle-require@4.0.1(esbuild@0.18.17): 666 | resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} 667 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 668 | peerDependencies: 669 | esbuild: '>=0.17' 670 | dependencies: 671 | esbuild: 0.18.17 672 | load-tsconfig: 0.2.5 673 | dev: true 674 | 675 | /cac@6.7.14: 676 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 677 | engines: {node: '>=8'} 678 | dev: true 679 | 680 | /call-bind@1.0.2: 681 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 682 | dependencies: 683 | function-bind: 1.1.1 684 | get-intrinsic: 1.2.1 685 | dev: true 686 | 687 | /camelcase-keys@6.2.2: 688 | resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} 689 | engines: {node: '>=8'} 690 | dependencies: 691 | camelcase: 5.3.1 692 | map-obj: 4.3.0 693 | quick-lru: 4.0.1 694 | dev: true 695 | 696 | /camelcase@5.3.1: 697 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 698 | engines: {node: '>=6'} 699 | dev: true 700 | 701 | /chalk@2.4.2: 702 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 703 | engines: {node: '>=4'} 704 | dependencies: 705 | ansi-styles: 3.2.1 706 | escape-string-regexp: 1.0.5 707 | supports-color: 5.5.0 708 | dev: true 709 | 710 | /chalk@4.1.2: 711 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 712 | engines: {node: '>=10'} 713 | dependencies: 714 | ansi-styles: 4.3.0 715 | supports-color: 7.2.0 716 | dev: true 717 | 718 | /chardet@0.7.0: 719 | resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} 720 | dev: true 721 | 722 | /chokidar@3.5.3: 723 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 724 | engines: {node: '>= 8.10.0'} 725 | dependencies: 726 | anymatch: 3.1.3 727 | braces: 3.0.2 728 | glob-parent: 5.1.2 729 | is-binary-path: 2.1.0 730 | is-glob: 4.0.3 731 | normalize-path: 3.0.0 732 | readdirp: 3.6.0 733 | optionalDependencies: 734 | fsevents: 2.3.2 735 | dev: true 736 | 737 | /ci-info@3.8.0: 738 | resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} 739 | engines: {node: '>=8'} 740 | dev: true 741 | 742 | /cliui@6.0.0: 743 | resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} 744 | dependencies: 745 | string-width: 4.2.3 746 | strip-ansi: 6.0.1 747 | wrap-ansi: 6.2.0 748 | dev: true 749 | 750 | /cliui@8.0.1: 751 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 752 | engines: {node: '>=12'} 753 | dependencies: 754 | string-width: 4.2.3 755 | strip-ansi: 6.0.1 756 | wrap-ansi: 7.0.0 757 | dev: true 758 | 759 | /clone@1.0.4: 760 | resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} 761 | engines: {node: '>=0.8'} 762 | dev: true 763 | 764 | /color-convert@1.9.3: 765 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 766 | dependencies: 767 | color-name: 1.1.3 768 | dev: true 769 | 770 | /color-convert@2.0.1: 771 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 772 | engines: {node: '>=7.0.0'} 773 | dependencies: 774 | color-name: 1.1.4 775 | dev: true 776 | 777 | /color-name@1.1.3: 778 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 779 | dev: true 780 | 781 | /color-name@1.1.4: 782 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 783 | dev: true 784 | 785 | /commander@4.1.1: 786 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 787 | engines: {node: '>= 6'} 788 | dev: true 789 | 790 | /concat-map@0.0.1: 791 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 792 | dev: true 793 | 794 | /cross-spawn@5.1.0: 795 | resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} 796 | dependencies: 797 | lru-cache: 4.1.5 798 | shebang-command: 1.2.0 799 | which: 1.3.1 800 | dev: true 801 | 802 | /cross-spawn@7.0.3: 803 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 804 | engines: {node: '>= 8'} 805 | dependencies: 806 | path-key: 3.1.1 807 | shebang-command: 2.0.0 808 | which: 2.0.2 809 | dev: true 810 | 811 | /css-select@5.1.0: 812 | resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} 813 | dependencies: 814 | boolbase: 1.0.0 815 | css-what: 6.1.0 816 | domhandler: 5.0.3 817 | domutils: 3.1.0 818 | nth-check: 2.1.1 819 | dev: false 820 | 821 | /css-what@6.1.0: 822 | resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} 823 | engines: {node: '>= 6'} 824 | dev: false 825 | 826 | /csv-generate@3.4.3: 827 | resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} 828 | dev: true 829 | 830 | /csv-parse@4.16.3: 831 | resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} 832 | dev: true 833 | 834 | /csv-stringify@5.6.5: 835 | resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} 836 | dev: true 837 | 838 | /csv@5.5.3: 839 | resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} 840 | engines: {node: '>= 0.1.90'} 841 | dependencies: 842 | csv-generate: 3.4.3 843 | csv-parse: 4.16.3 844 | csv-stringify: 5.6.5 845 | stream-transform: 2.1.3 846 | dev: true 847 | 848 | /debug@4.3.4: 849 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 850 | engines: {node: '>=6.0'} 851 | peerDependencies: 852 | supports-color: '*' 853 | peerDependenciesMeta: 854 | supports-color: 855 | optional: true 856 | dependencies: 857 | ms: 2.1.2 858 | dev: true 859 | 860 | /decamelize-keys@1.1.1: 861 | resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} 862 | engines: {node: '>=0.10.0'} 863 | dependencies: 864 | decamelize: 1.2.0 865 | map-obj: 1.0.1 866 | dev: true 867 | 868 | /decamelize@1.2.0: 869 | resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} 870 | engines: {node: '>=0.10.0'} 871 | dev: true 872 | 873 | /defaults@1.0.4: 874 | resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} 875 | dependencies: 876 | clone: 1.0.4 877 | dev: true 878 | 879 | /define-properties@1.2.0: 880 | resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} 881 | engines: {node: '>= 0.4'} 882 | dependencies: 883 | has-property-descriptors: 1.0.0 884 | object-keys: 1.1.1 885 | dev: true 886 | 887 | /detect-indent@6.1.0: 888 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 889 | engines: {node: '>=8'} 890 | dev: true 891 | 892 | /dir-glob@3.0.1: 893 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 894 | engines: {node: '>=8'} 895 | dependencies: 896 | path-type: 4.0.0 897 | dev: true 898 | 899 | /dom-serializer@2.0.0: 900 | resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} 901 | dependencies: 902 | domelementtype: 2.3.0 903 | domhandler: 5.0.3 904 | entities: 4.5.0 905 | dev: false 906 | 907 | /domelementtype@2.3.0: 908 | resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} 909 | dev: false 910 | 911 | /domhandler@5.0.3: 912 | resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} 913 | engines: {node: '>= 4'} 914 | dependencies: 915 | domelementtype: 2.3.0 916 | dev: false 917 | 918 | /domutils@3.1.0: 919 | resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} 920 | dependencies: 921 | dom-serializer: 2.0.0 922 | domelementtype: 2.3.0 923 | domhandler: 5.0.3 924 | dev: false 925 | 926 | /emoji-regex@8.0.0: 927 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 928 | dev: true 929 | 930 | /enquirer@2.4.1: 931 | resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} 932 | engines: {node: '>=8.6'} 933 | dependencies: 934 | ansi-colors: 4.1.3 935 | strip-ansi: 6.0.1 936 | dev: true 937 | 938 | /entities@4.5.0: 939 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 940 | engines: {node: '>=0.12'} 941 | dev: false 942 | 943 | /error-ex@1.3.2: 944 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 945 | dependencies: 946 | is-arrayish: 0.2.1 947 | dev: true 948 | 949 | /es-abstract@1.22.1: 950 | resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} 951 | engines: {node: '>= 0.4'} 952 | dependencies: 953 | array-buffer-byte-length: 1.0.0 954 | arraybuffer.prototype.slice: 1.0.1 955 | available-typed-arrays: 1.0.5 956 | call-bind: 1.0.2 957 | es-set-tostringtag: 2.0.1 958 | es-to-primitive: 1.2.1 959 | function.prototype.name: 1.1.5 960 | get-intrinsic: 1.2.1 961 | get-symbol-description: 1.0.0 962 | globalthis: 1.0.3 963 | gopd: 1.0.1 964 | has: 1.0.3 965 | has-property-descriptors: 1.0.0 966 | has-proto: 1.0.1 967 | has-symbols: 1.0.3 968 | internal-slot: 1.0.5 969 | is-array-buffer: 3.0.2 970 | is-callable: 1.2.7 971 | is-negative-zero: 2.0.2 972 | is-regex: 1.1.4 973 | is-shared-array-buffer: 1.0.2 974 | is-string: 1.0.7 975 | is-typed-array: 1.1.12 976 | is-weakref: 1.0.2 977 | object-inspect: 1.12.3 978 | object-keys: 1.1.1 979 | object.assign: 4.1.4 980 | regexp.prototype.flags: 1.5.0 981 | safe-array-concat: 1.0.0 982 | safe-regex-test: 1.0.0 983 | string.prototype.trim: 1.2.7 984 | string.prototype.trimend: 1.0.6 985 | string.prototype.trimstart: 1.0.6 986 | typed-array-buffer: 1.0.0 987 | typed-array-byte-length: 1.0.0 988 | typed-array-byte-offset: 1.0.0 989 | typed-array-length: 1.0.4 990 | unbox-primitive: 1.0.2 991 | which-typed-array: 1.1.11 992 | dev: true 993 | 994 | /es-set-tostringtag@2.0.1: 995 | resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} 996 | engines: {node: '>= 0.4'} 997 | dependencies: 998 | get-intrinsic: 1.2.1 999 | has: 1.0.3 1000 | has-tostringtag: 1.0.0 1001 | dev: true 1002 | 1003 | /es-shim-unscopables@1.0.0: 1004 | resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} 1005 | dependencies: 1006 | has: 1.0.3 1007 | dev: true 1008 | 1009 | /es-to-primitive@1.2.1: 1010 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 1011 | engines: {node: '>= 0.4'} 1012 | dependencies: 1013 | is-callable: 1.2.7 1014 | is-date-object: 1.0.5 1015 | is-symbol: 1.0.4 1016 | dev: true 1017 | 1018 | /esbuild@0.18.17: 1019 | resolution: {integrity: sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==} 1020 | engines: {node: '>=12'} 1021 | hasBin: true 1022 | requiresBuild: true 1023 | optionalDependencies: 1024 | '@esbuild/android-arm': 0.18.17 1025 | '@esbuild/android-arm64': 0.18.17 1026 | '@esbuild/android-x64': 0.18.17 1027 | '@esbuild/darwin-arm64': 0.18.17 1028 | '@esbuild/darwin-x64': 0.18.17 1029 | '@esbuild/freebsd-arm64': 0.18.17 1030 | '@esbuild/freebsd-x64': 0.18.17 1031 | '@esbuild/linux-arm': 0.18.17 1032 | '@esbuild/linux-arm64': 0.18.17 1033 | '@esbuild/linux-ia32': 0.18.17 1034 | '@esbuild/linux-loong64': 0.18.17 1035 | '@esbuild/linux-mips64el': 0.18.17 1036 | '@esbuild/linux-ppc64': 0.18.17 1037 | '@esbuild/linux-riscv64': 0.18.17 1038 | '@esbuild/linux-s390x': 0.18.17 1039 | '@esbuild/linux-x64': 0.18.17 1040 | '@esbuild/netbsd-x64': 0.18.17 1041 | '@esbuild/openbsd-x64': 0.18.17 1042 | '@esbuild/sunos-x64': 0.18.17 1043 | '@esbuild/win32-arm64': 0.18.17 1044 | '@esbuild/win32-ia32': 0.18.17 1045 | '@esbuild/win32-x64': 0.18.17 1046 | dev: true 1047 | 1048 | /escalade@3.1.1: 1049 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1050 | engines: {node: '>=6'} 1051 | dev: true 1052 | 1053 | /escape-string-regexp@1.0.5: 1054 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1055 | engines: {node: '>=0.8.0'} 1056 | dev: true 1057 | 1058 | /esprima@4.0.1: 1059 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1060 | engines: {node: '>=4'} 1061 | hasBin: true 1062 | dev: true 1063 | 1064 | /execa@5.1.1: 1065 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 1066 | engines: {node: '>=10'} 1067 | dependencies: 1068 | cross-spawn: 7.0.3 1069 | get-stream: 6.0.1 1070 | human-signals: 2.1.0 1071 | is-stream: 2.0.1 1072 | merge-stream: 2.0.0 1073 | npm-run-path: 4.0.1 1074 | onetime: 5.1.2 1075 | signal-exit: 3.0.7 1076 | strip-final-newline: 2.0.0 1077 | dev: true 1078 | 1079 | /extendable-error@0.1.7: 1080 | resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} 1081 | dev: true 1082 | 1083 | /external-editor@3.1.0: 1084 | resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} 1085 | engines: {node: '>=4'} 1086 | dependencies: 1087 | chardet: 0.7.0 1088 | iconv-lite: 0.4.24 1089 | tmp: 0.0.33 1090 | dev: true 1091 | 1092 | /fast-glob@3.3.1: 1093 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} 1094 | engines: {node: '>=8.6.0'} 1095 | dependencies: 1096 | '@nodelib/fs.stat': 2.0.5 1097 | '@nodelib/fs.walk': 1.2.8 1098 | glob-parent: 5.1.2 1099 | merge2: 1.4.1 1100 | micromatch: 4.0.5 1101 | dev: true 1102 | 1103 | /fastq@1.15.0: 1104 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1105 | dependencies: 1106 | reusify: 1.0.4 1107 | dev: true 1108 | 1109 | /fill-range@7.0.1: 1110 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1111 | engines: {node: '>=8'} 1112 | dependencies: 1113 | to-regex-range: 5.0.1 1114 | dev: true 1115 | 1116 | /find-up@4.1.0: 1117 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1118 | engines: {node: '>=8'} 1119 | dependencies: 1120 | locate-path: 5.0.0 1121 | path-exists: 4.0.0 1122 | dev: true 1123 | 1124 | /find-up@5.0.0: 1125 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1126 | engines: {node: '>=10'} 1127 | dependencies: 1128 | locate-path: 6.0.0 1129 | path-exists: 4.0.0 1130 | dev: true 1131 | 1132 | /find-yarn-workspace-root2@1.2.16: 1133 | resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} 1134 | dependencies: 1135 | micromatch: 4.0.5 1136 | pkg-dir: 4.2.0 1137 | dev: true 1138 | 1139 | /for-each@0.3.3: 1140 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1141 | dependencies: 1142 | is-callable: 1.2.7 1143 | dev: true 1144 | 1145 | /fs-extra@7.0.1: 1146 | resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} 1147 | engines: {node: '>=6 <7 || >=8'} 1148 | dependencies: 1149 | graceful-fs: 4.2.11 1150 | jsonfile: 4.0.0 1151 | universalify: 0.1.2 1152 | dev: true 1153 | 1154 | /fs-extra@8.1.0: 1155 | resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} 1156 | engines: {node: '>=6 <7 || >=8'} 1157 | dependencies: 1158 | graceful-fs: 4.2.11 1159 | jsonfile: 4.0.0 1160 | universalify: 0.1.2 1161 | dev: true 1162 | 1163 | /fs.realpath@1.0.0: 1164 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1165 | dev: true 1166 | 1167 | /fsevents@2.3.2: 1168 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1169 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1170 | os: [darwin] 1171 | requiresBuild: true 1172 | dev: true 1173 | optional: true 1174 | 1175 | /function-bind@1.1.1: 1176 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1177 | dev: true 1178 | 1179 | /function.prototype.name@1.1.5: 1180 | resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} 1181 | engines: {node: '>= 0.4'} 1182 | dependencies: 1183 | call-bind: 1.0.2 1184 | define-properties: 1.2.0 1185 | es-abstract: 1.22.1 1186 | functions-have-names: 1.2.3 1187 | dev: true 1188 | 1189 | /functions-have-names@1.2.3: 1190 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1191 | dev: true 1192 | 1193 | /get-caller-file@2.0.5: 1194 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1195 | engines: {node: 6.* || 8.* || >= 10.*} 1196 | dev: true 1197 | 1198 | /get-intrinsic@1.2.1: 1199 | resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} 1200 | dependencies: 1201 | function-bind: 1.1.1 1202 | has: 1.0.3 1203 | has-proto: 1.0.1 1204 | has-symbols: 1.0.3 1205 | dev: true 1206 | 1207 | /get-stream@6.0.1: 1208 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1209 | engines: {node: '>=10'} 1210 | dev: true 1211 | 1212 | /get-symbol-description@1.0.0: 1213 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 1214 | engines: {node: '>= 0.4'} 1215 | dependencies: 1216 | call-bind: 1.0.2 1217 | get-intrinsic: 1.2.1 1218 | dev: true 1219 | 1220 | /glob-parent@5.1.2: 1221 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1222 | engines: {node: '>= 6'} 1223 | dependencies: 1224 | is-glob: 4.0.3 1225 | dev: true 1226 | 1227 | /glob@7.1.6: 1228 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} 1229 | dependencies: 1230 | fs.realpath: 1.0.0 1231 | inflight: 1.0.6 1232 | inherits: 2.0.4 1233 | minimatch: 3.1.2 1234 | once: 1.4.0 1235 | path-is-absolute: 1.0.1 1236 | dev: true 1237 | 1238 | /globalthis@1.0.3: 1239 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 1240 | engines: {node: '>= 0.4'} 1241 | dependencies: 1242 | define-properties: 1.2.0 1243 | dev: true 1244 | 1245 | /globby@11.1.0: 1246 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1247 | engines: {node: '>=10'} 1248 | dependencies: 1249 | array-union: 2.1.0 1250 | dir-glob: 3.0.1 1251 | fast-glob: 3.3.1 1252 | ignore: 5.2.4 1253 | merge2: 1.4.1 1254 | slash: 3.0.0 1255 | dev: true 1256 | 1257 | /gopd@1.0.1: 1258 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1259 | dependencies: 1260 | get-intrinsic: 1.2.1 1261 | dev: true 1262 | 1263 | /graceful-fs@4.2.11: 1264 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1265 | dev: true 1266 | 1267 | /grapheme-splitter@1.0.4: 1268 | resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} 1269 | dev: true 1270 | 1271 | /hard-rejection@2.1.0: 1272 | resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} 1273 | engines: {node: '>=6'} 1274 | dev: true 1275 | 1276 | /has-bigints@1.0.2: 1277 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1278 | dev: true 1279 | 1280 | /has-flag@3.0.0: 1281 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1282 | engines: {node: '>=4'} 1283 | dev: true 1284 | 1285 | /has-flag@4.0.0: 1286 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1287 | engines: {node: '>=8'} 1288 | dev: true 1289 | 1290 | /has-property-descriptors@1.0.0: 1291 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} 1292 | dependencies: 1293 | get-intrinsic: 1.2.1 1294 | dev: true 1295 | 1296 | /has-proto@1.0.1: 1297 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 1298 | engines: {node: '>= 0.4'} 1299 | dev: true 1300 | 1301 | /has-symbols@1.0.3: 1302 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1303 | engines: {node: '>= 0.4'} 1304 | dev: true 1305 | 1306 | /has-tostringtag@1.0.0: 1307 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 1308 | engines: {node: '>= 0.4'} 1309 | dependencies: 1310 | has-symbols: 1.0.3 1311 | dev: true 1312 | 1313 | /has@1.0.3: 1314 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1315 | engines: {node: '>= 0.4.0'} 1316 | dependencies: 1317 | function-bind: 1.1.1 1318 | dev: true 1319 | 1320 | /he@1.2.0: 1321 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} 1322 | hasBin: true 1323 | dev: false 1324 | 1325 | /hosted-git-info@2.8.9: 1326 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 1327 | dev: true 1328 | 1329 | /human-id@1.0.2: 1330 | resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} 1331 | dev: true 1332 | 1333 | /human-signals@2.1.0: 1334 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 1335 | engines: {node: '>=10.17.0'} 1336 | dev: true 1337 | 1338 | /iconv-lite@0.4.24: 1339 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 1340 | engines: {node: '>=0.10.0'} 1341 | dependencies: 1342 | safer-buffer: 2.1.2 1343 | dev: true 1344 | 1345 | /ignore@5.2.4: 1346 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 1347 | engines: {node: '>= 4'} 1348 | dev: true 1349 | 1350 | /indent-string@4.0.0: 1351 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 1352 | engines: {node: '>=8'} 1353 | dev: true 1354 | 1355 | /inflight@1.0.6: 1356 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1357 | dependencies: 1358 | once: 1.4.0 1359 | wrappy: 1.0.2 1360 | dev: true 1361 | 1362 | /inherits@2.0.4: 1363 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1364 | dev: true 1365 | 1366 | /internal-slot@1.0.5: 1367 | resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} 1368 | engines: {node: '>= 0.4'} 1369 | dependencies: 1370 | get-intrinsic: 1.2.1 1371 | has: 1.0.3 1372 | side-channel: 1.0.4 1373 | dev: true 1374 | 1375 | /is-array-buffer@3.0.2: 1376 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} 1377 | dependencies: 1378 | call-bind: 1.0.2 1379 | get-intrinsic: 1.2.1 1380 | is-typed-array: 1.1.12 1381 | dev: true 1382 | 1383 | /is-arrayish@0.2.1: 1384 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1385 | dev: true 1386 | 1387 | /is-bigint@1.0.4: 1388 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 1389 | dependencies: 1390 | has-bigints: 1.0.2 1391 | dev: true 1392 | 1393 | /is-binary-path@2.1.0: 1394 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1395 | engines: {node: '>=8'} 1396 | dependencies: 1397 | binary-extensions: 2.2.0 1398 | dev: true 1399 | 1400 | /is-boolean-object@1.1.2: 1401 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1402 | engines: {node: '>= 0.4'} 1403 | dependencies: 1404 | call-bind: 1.0.2 1405 | has-tostringtag: 1.0.0 1406 | dev: true 1407 | 1408 | /is-callable@1.2.7: 1409 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1410 | engines: {node: '>= 0.4'} 1411 | dev: true 1412 | 1413 | /is-ci@3.0.1: 1414 | resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} 1415 | hasBin: true 1416 | dependencies: 1417 | ci-info: 3.8.0 1418 | dev: true 1419 | 1420 | /is-core-module@2.12.1: 1421 | resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} 1422 | dependencies: 1423 | has: 1.0.3 1424 | dev: true 1425 | 1426 | /is-date-object@1.0.5: 1427 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1428 | engines: {node: '>= 0.4'} 1429 | dependencies: 1430 | has-tostringtag: 1.0.0 1431 | dev: true 1432 | 1433 | /is-extglob@2.1.1: 1434 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1435 | engines: {node: '>=0.10.0'} 1436 | dev: true 1437 | 1438 | /is-fullwidth-code-point@3.0.0: 1439 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1440 | engines: {node: '>=8'} 1441 | dev: true 1442 | 1443 | /is-glob@4.0.3: 1444 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1445 | engines: {node: '>=0.10.0'} 1446 | dependencies: 1447 | is-extglob: 2.1.1 1448 | dev: true 1449 | 1450 | /is-negative-zero@2.0.2: 1451 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} 1452 | engines: {node: '>= 0.4'} 1453 | dev: true 1454 | 1455 | /is-number-object@1.0.7: 1456 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1457 | engines: {node: '>= 0.4'} 1458 | dependencies: 1459 | has-tostringtag: 1.0.0 1460 | dev: true 1461 | 1462 | /is-number@7.0.0: 1463 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1464 | engines: {node: '>=0.12.0'} 1465 | dev: true 1466 | 1467 | /is-plain-obj@1.1.0: 1468 | resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} 1469 | engines: {node: '>=0.10.0'} 1470 | dev: true 1471 | 1472 | /is-regex@1.1.4: 1473 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1474 | engines: {node: '>= 0.4'} 1475 | dependencies: 1476 | call-bind: 1.0.2 1477 | has-tostringtag: 1.0.0 1478 | dev: true 1479 | 1480 | /is-shared-array-buffer@1.0.2: 1481 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} 1482 | dependencies: 1483 | call-bind: 1.0.2 1484 | dev: true 1485 | 1486 | /is-stream@2.0.1: 1487 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1488 | engines: {node: '>=8'} 1489 | dev: true 1490 | 1491 | /is-string@1.0.7: 1492 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1493 | engines: {node: '>= 0.4'} 1494 | dependencies: 1495 | has-tostringtag: 1.0.0 1496 | dev: true 1497 | 1498 | /is-subdir@1.2.0: 1499 | resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} 1500 | engines: {node: '>=4'} 1501 | dependencies: 1502 | better-path-resolve: 1.0.0 1503 | dev: true 1504 | 1505 | /is-symbol@1.0.4: 1506 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1507 | engines: {node: '>= 0.4'} 1508 | dependencies: 1509 | has-symbols: 1.0.3 1510 | dev: true 1511 | 1512 | /is-typed-array@1.1.12: 1513 | resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} 1514 | engines: {node: '>= 0.4'} 1515 | dependencies: 1516 | which-typed-array: 1.1.11 1517 | dev: true 1518 | 1519 | /is-weakref@1.0.2: 1520 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1521 | dependencies: 1522 | call-bind: 1.0.2 1523 | dev: true 1524 | 1525 | /is-windows@1.0.2: 1526 | resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} 1527 | engines: {node: '>=0.10.0'} 1528 | dev: true 1529 | 1530 | /isarray@2.0.5: 1531 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1532 | dev: true 1533 | 1534 | /isexe@2.0.0: 1535 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1536 | dev: true 1537 | 1538 | /joycon@3.1.1: 1539 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 1540 | engines: {node: '>=10'} 1541 | dev: true 1542 | 1543 | /js-tokens@4.0.0: 1544 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1545 | dev: true 1546 | 1547 | /js-yaml@3.14.1: 1548 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1549 | hasBin: true 1550 | dependencies: 1551 | argparse: 1.0.10 1552 | esprima: 4.0.1 1553 | dev: true 1554 | 1555 | /json-parse-even-better-errors@2.3.1: 1556 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1557 | dev: true 1558 | 1559 | /jsonfile@4.0.0: 1560 | resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} 1561 | optionalDependencies: 1562 | graceful-fs: 4.2.11 1563 | dev: true 1564 | 1565 | /kind-of@6.0.3: 1566 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 1567 | engines: {node: '>=0.10.0'} 1568 | dev: true 1569 | 1570 | /kleur@4.1.5: 1571 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 1572 | engines: {node: '>=6'} 1573 | dev: true 1574 | 1575 | /lilconfig@2.1.0: 1576 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 1577 | engines: {node: '>=10'} 1578 | dev: true 1579 | 1580 | /lines-and-columns@1.2.4: 1581 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1582 | dev: true 1583 | 1584 | /load-tsconfig@0.2.5: 1585 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} 1586 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1587 | dev: true 1588 | 1589 | /load-yaml-file@0.2.0: 1590 | resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} 1591 | engines: {node: '>=6'} 1592 | dependencies: 1593 | graceful-fs: 4.2.11 1594 | js-yaml: 3.14.1 1595 | pify: 4.0.1 1596 | strip-bom: 3.0.0 1597 | dev: true 1598 | 1599 | /locate-path@5.0.0: 1600 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1601 | engines: {node: '>=8'} 1602 | dependencies: 1603 | p-locate: 4.1.0 1604 | dev: true 1605 | 1606 | /locate-path@6.0.0: 1607 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1608 | engines: {node: '>=10'} 1609 | dependencies: 1610 | p-locate: 5.0.0 1611 | dev: true 1612 | 1613 | /lodash.sortby@4.7.0: 1614 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 1615 | dev: true 1616 | 1617 | /lodash.startcase@4.4.0: 1618 | resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} 1619 | dev: true 1620 | 1621 | /lru-cache@4.1.5: 1622 | resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} 1623 | dependencies: 1624 | pseudomap: 1.0.2 1625 | yallist: 2.1.2 1626 | dev: true 1627 | 1628 | /lru-cache@6.0.0: 1629 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1630 | engines: {node: '>=10'} 1631 | dependencies: 1632 | yallist: 4.0.0 1633 | dev: true 1634 | 1635 | /map-obj@1.0.1: 1636 | resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} 1637 | engines: {node: '>=0.10.0'} 1638 | dev: true 1639 | 1640 | /map-obj@4.3.0: 1641 | resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} 1642 | engines: {node: '>=8'} 1643 | dev: true 1644 | 1645 | /meow@6.1.1: 1646 | resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} 1647 | engines: {node: '>=8'} 1648 | dependencies: 1649 | '@types/minimist': 1.2.2 1650 | camelcase-keys: 6.2.2 1651 | decamelize-keys: 1.1.1 1652 | hard-rejection: 2.1.0 1653 | minimist-options: 4.1.0 1654 | normalize-package-data: 2.5.0 1655 | read-pkg-up: 7.0.1 1656 | redent: 3.0.0 1657 | trim-newlines: 3.0.1 1658 | type-fest: 0.13.1 1659 | yargs-parser: 18.1.3 1660 | dev: true 1661 | 1662 | /merge-stream@2.0.0: 1663 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1664 | dev: true 1665 | 1666 | /merge2@1.4.1: 1667 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1668 | engines: {node: '>= 8'} 1669 | dev: true 1670 | 1671 | /micromatch@4.0.5: 1672 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1673 | engines: {node: '>=8.6'} 1674 | dependencies: 1675 | braces: 3.0.2 1676 | picomatch: 2.3.1 1677 | dev: true 1678 | 1679 | /mimic-fn@2.1.0: 1680 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1681 | engines: {node: '>=6'} 1682 | dev: true 1683 | 1684 | /min-indent@1.0.1: 1685 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 1686 | engines: {node: '>=4'} 1687 | dev: true 1688 | 1689 | /minimatch@3.1.2: 1690 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1691 | dependencies: 1692 | brace-expansion: 1.1.11 1693 | dev: true 1694 | 1695 | /minimist-options@4.1.0: 1696 | resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} 1697 | engines: {node: '>= 6'} 1698 | dependencies: 1699 | arrify: 1.0.1 1700 | is-plain-obj: 1.1.0 1701 | kind-of: 6.0.3 1702 | dev: true 1703 | 1704 | /mixme@0.5.9: 1705 | resolution: {integrity: sha512-VC5fg6ySUscaWUpI4gxCBTQMH2RdUpNrk+MsbpCYtIvf9SBJdiUey4qE7BXviJsJR4nDQxCZ+3yaYNW3guz/Pw==} 1706 | engines: {node: '>= 8.0.0'} 1707 | dev: true 1708 | 1709 | /ms@2.1.2: 1710 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1711 | dev: true 1712 | 1713 | /mz@2.7.0: 1714 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1715 | dependencies: 1716 | any-promise: 1.3.0 1717 | object-assign: 4.1.1 1718 | thenify-all: 1.6.0 1719 | dev: true 1720 | 1721 | /node-html-parser@6.1.5: 1722 | resolution: {integrity: sha512-fAaM511feX++/Chnhe475a0NHD8M7AxDInsqQpz6x63GRF7xYNdS8Vo5dKsIVPgsOvG7eioRRTZQnWBrhDHBSg==} 1723 | dependencies: 1724 | css-select: 5.1.0 1725 | he: 1.2.0 1726 | dev: false 1727 | 1728 | /normalize-package-data@2.5.0: 1729 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} 1730 | dependencies: 1731 | hosted-git-info: 2.8.9 1732 | resolve: 1.22.2 1733 | semver: 5.7.2 1734 | validate-npm-package-license: 3.0.4 1735 | dev: true 1736 | 1737 | /normalize-path@3.0.0: 1738 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1739 | engines: {node: '>=0.10.0'} 1740 | dev: true 1741 | 1742 | /npm-run-path@4.0.1: 1743 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 1744 | engines: {node: '>=8'} 1745 | dependencies: 1746 | path-key: 3.1.1 1747 | dev: true 1748 | 1749 | /nth-check@2.1.1: 1750 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} 1751 | dependencies: 1752 | boolbase: 1.0.0 1753 | dev: false 1754 | 1755 | /object-assign@4.1.1: 1756 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1757 | engines: {node: '>=0.10.0'} 1758 | dev: true 1759 | 1760 | /object-inspect@1.12.3: 1761 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} 1762 | dev: true 1763 | 1764 | /object-keys@1.1.1: 1765 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1766 | engines: {node: '>= 0.4'} 1767 | dev: true 1768 | 1769 | /object.assign@4.1.4: 1770 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} 1771 | engines: {node: '>= 0.4'} 1772 | dependencies: 1773 | call-bind: 1.0.2 1774 | define-properties: 1.2.0 1775 | has-symbols: 1.0.3 1776 | object-keys: 1.1.1 1777 | dev: true 1778 | 1779 | /once@1.4.0: 1780 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1781 | dependencies: 1782 | wrappy: 1.0.2 1783 | dev: true 1784 | 1785 | /onetime@5.1.2: 1786 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1787 | engines: {node: '>=6'} 1788 | dependencies: 1789 | mimic-fn: 2.1.0 1790 | dev: true 1791 | 1792 | /os-tmpdir@1.0.2: 1793 | resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} 1794 | engines: {node: '>=0.10.0'} 1795 | dev: true 1796 | 1797 | /outdent@0.5.0: 1798 | resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} 1799 | dev: true 1800 | 1801 | /p-filter@2.1.0: 1802 | resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} 1803 | engines: {node: '>=8'} 1804 | dependencies: 1805 | p-map: 2.1.0 1806 | dev: true 1807 | 1808 | /p-limit@2.3.0: 1809 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1810 | engines: {node: '>=6'} 1811 | dependencies: 1812 | p-try: 2.2.0 1813 | dev: true 1814 | 1815 | /p-limit@3.1.0: 1816 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1817 | engines: {node: '>=10'} 1818 | dependencies: 1819 | yocto-queue: 0.1.0 1820 | dev: true 1821 | 1822 | /p-locate@4.1.0: 1823 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1824 | engines: {node: '>=8'} 1825 | dependencies: 1826 | p-limit: 2.3.0 1827 | dev: true 1828 | 1829 | /p-locate@5.0.0: 1830 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1831 | engines: {node: '>=10'} 1832 | dependencies: 1833 | p-limit: 3.1.0 1834 | dev: true 1835 | 1836 | /p-map@2.1.0: 1837 | resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} 1838 | engines: {node: '>=6'} 1839 | dev: true 1840 | 1841 | /p-try@2.2.0: 1842 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1843 | engines: {node: '>=6'} 1844 | dev: true 1845 | 1846 | /parse-json@5.2.0: 1847 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1848 | engines: {node: '>=8'} 1849 | dependencies: 1850 | '@babel/code-frame': 7.22.5 1851 | error-ex: 1.3.2 1852 | json-parse-even-better-errors: 2.3.1 1853 | lines-and-columns: 1.2.4 1854 | dev: true 1855 | 1856 | /path-exists@4.0.0: 1857 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1858 | engines: {node: '>=8'} 1859 | dev: true 1860 | 1861 | /path-is-absolute@1.0.1: 1862 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1863 | engines: {node: '>=0.10.0'} 1864 | dev: true 1865 | 1866 | /path-key@3.1.1: 1867 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1868 | engines: {node: '>=8'} 1869 | dev: true 1870 | 1871 | /path-parse@1.0.7: 1872 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1873 | dev: true 1874 | 1875 | /path-type@4.0.0: 1876 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1877 | engines: {node: '>=8'} 1878 | dev: true 1879 | 1880 | /picomatch@2.3.1: 1881 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1882 | engines: {node: '>=8.6'} 1883 | dev: true 1884 | 1885 | /pify@4.0.1: 1886 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} 1887 | engines: {node: '>=6'} 1888 | dev: true 1889 | 1890 | /pirates@4.0.6: 1891 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1892 | engines: {node: '>= 6'} 1893 | dev: true 1894 | 1895 | /pkg-dir@4.2.0: 1896 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 1897 | engines: {node: '>=8'} 1898 | dependencies: 1899 | find-up: 4.1.0 1900 | dev: true 1901 | 1902 | /postcss-load-config@4.0.1: 1903 | resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} 1904 | engines: {node: '>= 14'} 1905 | peerDependencies: 1906 | postcss: '>=8.0.9' 1907 | ts-node: '>=9.0.0' 1908 | peerDependenciesMeta: 1909 | postcss: 1910 | optional: true 1911 | ts-node: 1912 | optional: true 1913 | dependencies: 1914 | lilconfig: 2.1.0 1915 | yaml: 2.3.1 1916 | dev: true 1917 | 1918 | /preferred-pm@3.0.3: 1919 | resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} 1920 | engines: {node: '>=10'} 1921 | dependencies: 1922 | find-up: 5.0.0 1923 | find-yarn-workspace-root2: 1.2.16 1924 | path-exists: 4.0.0 1925 | which-pm: 2.0.0 1926 | dev: true 1927 | 1928 | /prettier@2.8.8: 1929 | resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} 1930 | engines: {node: '>=10.13.0'} 1931 | hasBin: true 1932 | dev: true 1933 | 1934 | /pseudomap@1.0.2: 1935 | resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} 1936 | dev: true 1937 | 1938 | /punycode@2.3.0: 1939 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 1940 | engines: {node: '>=6'} 1941 | dev: true 1942 | 1943 | /queue-microtask@1.2.3: 1944 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1945 | dev: true 1946 | 1947 | /quick-lru@4.0.1: 1948 | resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} 1949 | engines: {node: '>=8'} 1950 | dev: true 1951 | 1952 | /read-pkg-up@7.0.1: 1953 | resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} 1954 | engines: {node: '>=8'} 1955 | dependencies: 1956 | find-up: 4.1.0 1957 | read-pkg: 5.2.0 1958 | type-fest: 0.8.1 1959 | dev: true 1960 | 1961 | /read-pkg@5.2.0: 1962 | resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} 1963 | engines: {node: '>=8'} 1964 | dependencies: 1965 | '@types/normalize-package-data': 2.4.1 1966 | normalize-package-data: 2.5.0 1967 | parse-json: 5.2.0 1968 | type-fest: 0.6.0 1969 | dev: true 1970 | 1971 | /read-yaml-file@1.1.0: 1972 | resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} 1973 | engines: {node: '>=6'} 1974 | dependencies: 1975 | graceful-fs: 4.2.11 1976 | js-yaml: 3.14.1 1977 | pify: 4.0.1 1978 | strip-bom: 3.0.0 1979 | dev: true 1980 | 1981 | /readdirp@3.6.0: 1982 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1983 | engines: {node: '>=8.10.0'} 1984 | dependencies: 1985 | picomatch: 2.3.1 1986 | dev: true 1987 | 1988 | /redent@3.0.0: 1989 | resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} 1990 | engines: {node: '>=8'} 1991 | dependencies: 1992 | indent-string: 4.0.0 1993 | strip-indent: 3.0.0 1994 | dev: true 1995 | 1996 | /regenerator-runtime@0.13.11: 1997 | resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} 1998 | dev: true 1999 | 2000 | /regexp.prototype.flags@1.5.0: 2001 | resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} 2002 | engines: {node: '>= 0.4'} 2003 | dependencies: 2004 | call-bind: 1.0.2 2005 | define-properties: 1.2.0 2006 | functions-have-names: 1.2.3 2007 | dev: true 2008 | 2009 | /require-directory@2.1.1: 2010 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 2011 | engines: {node: '>=0.10.0'} 2012 | dev: true 2013 | 2014 | /require-main-filename@2.0.0: 2015 | resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} 2016 | dev: true 2017 | 2018 | /resolve-from@5.0.0: 2019 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 2020 | engines: {node: '>=8'} 2021 | dev: true 2022 | 2023 | /resolve@1.22.2: 2024 | resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} 2025 | hasBin: true 2026 | dependencies: 2027 | is-core-module: 2.12.1 2028 | path-parse: 1.0.7 2029 | supports-preserve-symlinks-flag: 1.0.0 2030 | dev: true 2031 | 2032 | /reusify@1.0.4: 2033 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2034 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2035 | dev: true 2036 | 2037 | /rollup@3.27.0: 2038 | resolution: {integrity: sha512-aOltLCrYZ0FhJDm7fCqwTjIUEVjWjcydKBV/Zeid6Mn8BWgDCUBBWT5beM5ieForYNo/1ZHuGJdka26kvQ3Gzg==} 2039 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 2040 | hasBin: true 2041 | optionalDependencies: 2042 | fsevents: 2.3.2 2043 | dev: true 2044 | 2045 | /run-parallel@1.2.0: 2046 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2047 | dependencies: 2048 | queue-microtask: 1.2.3 2049 | dev: true 2050 | 2051 | /safe-array-concat@1.0.0: 2052 | resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} 2053 | engines: {node: '>=0.4'} 2054 | dependencies: 2055 | call-bind: 1.0.2 2056 | get-intrinsic: 1.2.1 2057 | has-symbols: 1.0.3 2058 | isarray: 2.0.5 2059 | dev: true 2060 | 2061 | /safe-regex-test@1.0.0: 2062 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} 2063 | dependencies: 2064 | call-bind: 1.0.2 2065 | get-intrinsic: 1.2.1 2066 | is-regex: 1.1.4 2067 | dev: true 2068 | 2069 | /safer-buffer@2.1.2: 2070 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 2071 | dev: true 2072 | 2073 | /semver@5.7.2: 2074 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 2075 | hasBin: true 2076 | dev: true 2077 | 2078 | /semver@7.5.4: 2079 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 2080 | engines: {node: '>=10'} 2081 | hasBin: true 2082 | dependencies: 2083 | lru-cache: 6.0.0 2084 | dev: true 2085 | 2086 | /set-blocking@2.0.0: 2087 | resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} 2088 | dev: true 2089 | 2090 | /shebang-command@1.2.0: 2091 | resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} 2092 | engines: {node: '>=0.10.0'} 2093 | dependencies: 2094 | shebang-regex: 1.0.0 2095 | dev: true 2096 | 2097 | /shebang-command@2.0.0: 2098 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2099 | engines: {node: '>=8'} 2100 | dependencies: 2101 | shebang-regex: 3.0.0 2102 | dev: true 2103 | 2104 | /shebang-regex@1.0.0: 2105 | resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} 2106 | engines: {node: '>=0.10.0'} 2107 | dev: true 2108 | 2109 | /shebang-regex@3.0.0: 2110 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2111 | engines: {node: '>=8'} 2112 | dev: true 2113 | 2114 | /side-channel@1.0.4: 2115 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 2116 | dependencies: 2117 | call-bind: 1.0.2 2118 | get-intrinsic: 1.2.1 2119 | object-inspect: 1.12.3 2120 | dev: true 2121 | 2122 | /signal-exit@3.0.7: 2123 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 2124 | dev: true 2125 | 2126 | /slash@3.0.0: 2127 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2128 | engines: {node: '>=8'} 2129 | dev: true 2130 | 2131 | /smartwrap@2.0.2: 2132 | resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} 2133 | engines: {node: '>=6'} 2134 | hasBin: true 2135 | dependencies: 2136 | array.prototype.flat: 1.3.1 2137 | breakword: 1.0.6 2138 | grapheme-splitter: 1.0.4 2139 | strip-ansi: 6.0.1 2140 | wcwidth: 1.0.1 2141 | yargs: 15.4.1 2142 | dev: true 2143 | 2144 | /source-map@0.8.0-beta.0: 2145 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 2146 | engines: {node: '>= 8'} 2147 | dependencies: 2148 | whatwg-url: 7.1.0 2149 | dev: true 2150 | 2151 | /spawndamnit@2.0.0: 2152 | resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} 2153 | dependencies: 2154 | cross-spawn: 5.1.0 2155 | signal-exit: 3.0.7 2156 | dev: true 2157 | 2158 | /spdx-correct@3.2.0: 2159 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 2160 | dependencies: 2161 | spdx-expression-parse: 3.0.1 2162 | spdx-license-ids: 3.0.13 2163 | dev: true 2164 | 2165 | /spdx-exceptions@2.3.0: 2166 | resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} 2167 | dev: true 2168 | 2169 | /spdx-expression-parse@3.0.1: 2170 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 2171 | dependencies: 2172 | spdx-exceptions: 2.3.0 2173 | spdx-license-ids: 3.0.13 2174 | dev: true 2175 | 2176 | /spdx-license-ids@3.0.13: 2177 | resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} 2178 | dev: true 2179 | 2180 | /sprintf-js@1.0.3: 2181 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 2182 | dev: true 2183 | 2184 | /stream-transform@2.1.3: 2185 | resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} 2186 | dependencies: 2187 | mixme: 0.5.9 2188 | dev: true 2189 | 2190 | /string-width@4.2.3: 2191 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 2192 | engines: {node: '>=8'} 2193 | dependencies: 2194 | emoji-regex: 8.0.0 2195 | is-fullwidth-code-point: 3.0.0 2196 | strip-ansi: 6.0.1 2197 | dev: true 2198 | 2199 | /string.prototype.trim@1.2.7: 2200 | resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} 2201 | engines: {node: '>= 0.4'} 2202 | dependencies: 2203 | call-bind: 1.0.2 2204 | define-properties: 1.2.0 2205 | es-abstract: 1.22.1 2206 | dev: true 2207 | 2208 | /string.prototype.trimend@1.0.6: 2209 | resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} 2210 | dependencies: 2211 | call-bind: 1.0.2 2212 | define-properties: 1.2.0 2213 | es-abstract: 1.22.1 2214 | dev: true 2215 | 2216 | /string.prototype.trimstart@1.0.6: 2217 | resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} 2218 | dependencies: 2219 | call-bind: 1.0.2 2220 | define-properties: 1.2.0 2221 | es-abstract: 1.22.1 2222 | dev: true 2223 | 2224 | /strip-ansi@6.0.1: 2225 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2226 | engines: {node: '>=8'} 2227 | dependencies: 2228 | ansi-regex: 5.0.1 2229 | dev: true 2230 | 2231 | /strip-bom@3.0.0: 2232 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 2233 | engines: {node: '>=4'} 2234 | dev: true 2235 | 2236 | /strip-final-newline@2.0.0: 2237 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 2238 | engines: {node: '>=6'} 2239 | dev: true 2240 | 2241 | /strip-indent@3.0.0: 2242 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 2243 | engines: {node: '>=8'} 2244 | dependencies: 2245 | min-indent: 1.0.1 2246 | dev: true 2247 | 2248 | /sucrase@3.34.0: 2249 | resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} 2250 | engines: {node: '>=8'} 2251 | hasBin: true 2252 | dependencies: 2253 | '@jridgewell/gen-mapping': 0.3.3 2254 | commander: 4.1.1 2255 | glob: 7.1.6 2256 | lines-and-columns: 1.2.4 2257 | mz: 2.7.0 2258 | pirates: 4.0.6 2259 | ts-interface-checker: 0.1.13 2260 | dev: true 2261 | 2262 | /supports-color@5.5.0: 2263 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 2264 | engines: {node: '>=4'} 2265 | dependencies: 2266 | has-flag: 3.0.0 2267 | dev: true 2268 | 2269 | /supports-color@7.2.0: 2270 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2271 | engines: {node: '>=8'} 2272 | dependencies: 2273 | has-flag: 4.0.0 2274 | dev: true 2275 | 2276 | /supports-preserve-symlinks-flag@1.0.0: 2277 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2278 | engines: {node: '>= 0.4'} 2279 | dev: true 2280 | 2281 | /term-size@2.2.1: 2282 | resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} 2283 | engines: {node: '>=8'} 2284 | dev: true 2285 | 2286 | /thenify-all@1.6.0: 2287 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 2288 | engines: {node: '>=0.8'} 2289 | dependencies: 2290 | thenify: 3.3.1 2291 | dev: true 2292 | 2293 | /thenify@3.3.1: 2294 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 2295 | dependencies: 2296 | any-promise: 1.3.0 2297 | dev: true 2298 | 2299 | /tmp@0.0.33: 2300 | resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} 2301 | engines: {node: '>=0.6.0'} 2302 | dependencies: 2303 | os-tmpdir: 1.0.2 2304 | dev: true 2305 | 2306 | /to-regex-range@5.0.1: 2307 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2308 | engines: {node: '>=8.0'} 2309 | dependencies: 2310 | is-number: 7.0.0 2311 | dev: true 2312 | 2313 | /tr46@1.0.1: 2314 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 2315 | dependencies: 2316 | punycode: 2.3.0 2317 | dev: true 2318 | 2319 | /tree-kill@1.2.2: 2320 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 2321 | hasBin: true 2322 | dev: true 2323 | 2324 | /trim-newlines@3.0.1: 2325 | resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} 2326 | engines: {node: '>=8'} 2327 | dev: true 2328 | 2329 | /ts-interface-checker@0.1.13: 2330 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 2331 | dev: true 2332 | 2333 | /tsup@7.1.0(typescript@4.9.5): 2334 | resolution: {integrity: sha512-mazl/GRAk70j8S43/AbSYXGgvRP54oQeX8Un4iZxzATHt0roW0t6HYDVZIXMw0ZQIpvr1nFMniIVnN5186lW7w==} 2335 | engines: {node: '>=16.14'} 2336 | hasBin: true 2337 | peerDependencies: 2338 | '@swc/core': ^1 2339 | postcss: ^8.4.12 2340 | typescript: '>=4.1.0' 2341 | peerDependenciesMeta: 2342 | '@swc/core': 2343 | optional: true 2344 | postcss: 2345 | optional: true 2346 | typescript: 2347 | optional: true 2348 | dependencies: 2349 | bundle-require: 4.0.1(esbuild@0.18.17) 2350 | cac: 6.7.14 2351 | chokidar: 3.5.3 2352 | debug: 4.3.4 2353 | esbuild: 0.18.17 2354 | execa: 5.1.1 2355 | globby: 11.1.0 2356 | joycon: 3.1.1 2357 | postcss-load-config: 4.0.1 2358 | resolve-from: 5.0.0 2359 | rollup: 3.27.0 2360 | source-map: 0.8.0-beta.0 2361 | sucrase: 3.34.0 2362 | tree-kill: 1.2.2 2363 | typescript: 4.9.5 2364 | transitivePeerDependencies: 2365 | - supports-color 2366 | - ts-node 2367 | dev: true 2368 | 2369 | /tty-table@4.2.1: 2370 | resolution: {integrity: sha512-xz0uKo+KakCQ+Dxj1D/tKn2FSyreSYWzdkL/BYhgN6oMW808g8QRMuh1atAV9fjTPbWBjfbkKQpI/5rEcnAc7g==} 2371 | engines: {node: '>=8.0.0'} 2372 | hasBin: true 2373 | dependencies: 2374 | chalk: 4.1.2 2375 | csv: 5.5.3 2376 | kleur: 4.1.5 2377 | smartwrap: 2.0.2 2378 | strip-ansi: 6.0.1 2379 | wcwidth: 1.0.1 2380 | yargs: 17.7.2 2381 | dev: true 2382 | 2383 | /type-fest@0.13.1: 2384 | resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} 2385 | engines: {node: '>=10'} 2386 | dev: true 2387 | 2388 | /type-fest@0.6.0: 2389 | resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} 2390 | engines: {node: '>=8'} 2391 | dev: true 2392 | 2393 | /type-fest@0.8.1: 2394 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} 2395 | engines: {node: '>=8'} 2396 | dev: true 2397 | 2398 | /typed-array-buffer@1.0.0: 2399 | resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} 2400 | engines: {node: '>= 0.4'} 2401 | dependencies: 2402 | call-bind: 1.0.2 2403 | get-intrinsic: 1.2.1 2404 | is-typed-array: 1.1.12 2405 | dev: true 2406 | 2407 | /typed-array-byte-length@1.0.0: 2408 | resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} 2409 | engines: {node: '>= 0.4'} 2410 | dependencies: 2411 | call-bind: 1.0.2 2412 | for-each: 0.3.3 2413 | has-proto: 1.0.1 2414 | is-typed-array: 1.1.12 2415 | dev: true 2416 | 2417 | /typed-array-byte-offset@1.0.0: 2418 | resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} 2419 | engines: {node: '>= 0.4'} 2420 | dependencies: 2421 | available-typed-arrays: 1.0.5 2422 | call-bind: 1.0.2 2423 | for-each: 0.3.3 2424 | has-proto: 1.0.1 2425 | is-typed-array: 1.1.12 2426 | dev: true 2427 | 2428 | /typed-array-length@1.0.4: 2429 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} 2430 | dependencies: 2431 | call-bind: 1.0.2 2432 | for-each: 0.3.3 2433 | is-typed-array: 1.1.12 2434 | dev: true 2435 | 2436 | /typescript@4.9.5: 2437 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} 2438 | engines: {node: '>=4.2.0'} 2439 | hasBin: true 2440 | dev: true 2441 | 2442 | /unbox-primitive@1.0.2: 2443 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 2444 | dependencies: 2445 | call-bind: 1.0.2 2446 | has-bigints: 1.0.2 2447 | has-symbols: 1.0.3 2448 | which-boxed-primitive: 1.0.2 2449 | dev: true 2450 | 2451 | /universalify@0.1.2: 2452 | resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} 2453 | engines: {node: '>= 4.0.0'} 2454 | dev: true 2455 | 2456 | /validate-npm-package-license@3.0.4: 2457 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 2458 | dependencies: 2459 | spdx-correct: 3.2.0 2460 | spdx-expression-parse: 3.0.1 2461 | dev: true 2462 | 2463 | /wcwidth@1.0.1: 2464 | resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} 2465 | dependencies: 2466 | defaults: 1.0.4 2467 | dev: true 2468 | 2469 | /webidl-conversions@4.0.2: 2470 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 2471 | dev: true 2472 | 2473 | /whatwg-url@7.1.0: 2474 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 2475 | dependencies: 2476 | lodash.sortby: 4.7.0 2477 | tr46: 1.0.1 2478 | webidl-conversions: 4.0.2 2479 | dev: true 2480 | 2481 | /which-boxed-primitive@1.0.2: 2482 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 2483 | dependencies: 2484 | is-bigint: 1.0.4 2485 | is-boolean-object: 1.1.2 2486 | is-number-object: 1.0.7 2487 | is-string: 1.0.7 2488 | is-symbol: 1.0.4 2489 | dev: true 2490 | 2491 | /which-module@2.0.1: 2492 | resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} 2493 | dev: true 2494 | 2495 | /which-pm@2.0.0: 2496 | resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} 2497 | engines: {node: '>=8.15'} 2498 | dependencies: 2499 | load-yaml-file: 0.2.0 2500 | path-exists: 4.0.0 2501 | dev: true 2502 | 2503 | /which-typed-array@1.1.11: 2504 | resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} 2505 | engines: {node: '>= 0.4'} 2506 | dependencies: 2507 | available-typed-arrays: 1.0.5 2508 | call-bind: 1.0.2 2509 | for-each: 0.3.3 2510 | gopd: 1.0.1 2511 | has-tostringtag: 1.0.0 2512 | dev: true 2513 | 2514 | /which@1.3.1: 2515 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} 2516 | hasBin: true 2517 | dependencies: 2518 | isexe: 2.0.0 2519 | dev: true 2520 | 2521 | /which@2.0.2: 2522 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2523 | engines: {node: '>= 8'} 2524 | hasBin: true 2525 | dependencies: 2526 | isexe: 2.0.0 2527 | dev: true 2528 | 2529 | /wrap-ansi@6.2.0: 2530 | resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} 2531 | engines: {node: '>=8'} 2532 | dependencies: 2533 | ansi-styles: 4.3.0 2534 | string-width: 4.2.3 2535 | strip-ansi: 6.0.1 2536 | dev: true 2537 | 2538 | /wrap-ansi@7.0.0: 2539 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2540 | engines: {node: '>=10'} 2541 | dependencies: 2542 | ansi-styles: 4.3.0 2543 | string-width: 4.2.3 2544 | strip-ansi: 6.0.1 2545 | dev: true 2546 | 2547 | /wrappy@1.0.2: 2548 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2549 | dev: true 2550 | 2551 | /y18n@4.0.3: 2552 | resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} 2553 | dev: true 2554 | 2555 | /y18n@5.0.8: 2556 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 2557 | engines: {node: '>=10'} 2558 | dev: true 2559 | 2560 | /yallist@2.1.2: 2561 | resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} 2562 | dev: true 2563 | 2564 | /yallist@4.0.0: 2565 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2566 | dev: true 2567 | 2568 | /yaml@2.3.1: 2569 | resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} 2570 | engines: {node: '>= 14'} 2571 | dev: true 2572 | 2573 | /yargs-parser@18.1.3: 2574 | resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} 2575 | engines: {node: '>=6'} 2576 | dependencies: 2577 | camelcase: 5.3.1 2578 | decamelize: 1.2.0 2579 | dev: true 2580 | 2581 | /yargs-parser@21.1.1: 2582 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 2583 | engines: {node: '>=12'} 2584 | dev: true 2585 | 2586 | /yargs@15.4.1: 2587 | resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} 2588 | engines: {node: '>=8'} 2589 | dependencies: 2590 | cliui: 6.0.0 2591 | decamelize: 1.2.0 2592 | find-up: 4.1.0 2593 | get-caller-file: 2.0.5 2594 | require-directory: 2.1.1 2595 | require-main-filename: 2.0.0 2596 | set-blocking: 2.0.0 2597 | string-width: 4.2.3 2598 | which-module: 2.0.1 2599 | y18n: 4.0.3 2600 | yargs-parser: 18.1.3 2601 | dev: true 2602 | 2603 | /yargs@17.7.2: 2604 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 2605 | engines: {node: '>=12'} 2606 | dependencies: 2607 | cliui: 8.0.1 2608 | escalade: 3.1.1 2609 | get-caller-file: 2.0.5 2610 | require-directory: 2.1.1 2611 | string-width: 4.2.3 2612 | y18n: 5.0.8 2613 | yargs-parser: 21.1.1 2614 | dev: true 2615 | 2616 | /yocto-queue@0.1.0: 2617 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2618 | engines: {node: '>=10'} 2619 | dev: true 2620 | -------------------------------------------------------------------------------- /src/constants/links.ts: -------------------------------------------------------------------------------- 1 | export const MAPLESTORY_HOME = 'https://maplestory.nexon.com'; 2 | export const MAPLESTORY_RANKING_SEARCH = `${MAPLESTORY_HOME}/Ranking/World/Total`; 3 | -------------------------------------------------------------------------------- /src/errors/NotFoundError.ts: -------------------------------------------------------------------------------- 1 | export class NotFoundError extends Error { 2 | constructor(item: string) { 3 | super(`캐릭터 ${item}을(를) 찾을 수 없습니다`); 4 | this.name = 'NotFoundError'; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/errors/NotValidHtmlNodeError.ts: -------------------------------------------------------------------------------- 1 | import HTMLParser, { HTMLElement } from 'node-html-parser'; 2 | 3 | export class NotValidHtmlNodeError extends Error { 4 | constructor(public node: HTMLElement, public selector: string) { 5 | super('올바른 HTML 노드가 아닙니다'); 6 | this.name = 'NotValidHtmlNodeError'; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/errors/NotValidSpecPageError.ts: -------------------------------------------------------------------------------- 1 | export class NotValidSpecPageError extends Error { 2 | constructor() { 3 | super('올바른 캐릭터 정보 페이지가 아닙니다'); 4 | this.name = 'InvalidSpecPageError'; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/errors/OpenPageError.ts: -------------------------------------------------------------------------------- 1 | export class OpenPageError extends Error { 2 | constructor(title: string) { 3 | super(`${title} 페이지 열기 오류`); 4 | this.name = 'OpenPageError'; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/errors/PrivateInformationError.ts: -------------------------------------------------------------------------------- 1 | export class PrivateInformationError extends Error { 2 | constructor(scope?: string) { 3 | super(`캐릭터 정보가 비공개입니다${scope ? ` (${scope})` : ''}`); 4 | this.name = 'PrivateInformationError'; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/errors/RankingSearchError.ts: -------------------------------------------------------------------------------- 1 | export class RankingSearchError extends Error { 2 | constructor(public characterName: string) { 3 | super(`'${characterName}' 공식 홈페이지 랭킹 검색 오류`); 4 | this.name = 'RankingSearchError'; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/errors/RetryError.ts: -------------------------------------------------------------------------------- 1 | export class RetryError extends Error { 2 | constructor(item: string) { 3 | super(`${item} 재시도를 실패 했습니다`); 4 | this.name = 'RetryError'; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/errors/index.ts: -------------------------------------------------------------------------------- 1 | export { NotValidSpecPageError } from './NotValidSpecPageError'; 2 | export { OpenPageError } from './OpenPageError'; 3 | export { PrivateInformationError } from './PrivateInformationError'; 4 | export { RetryError } from './RetryError'; 5 | export { RankingSearchError } from './RankingSearchError'; 6 | export { NotFoundError } from './NotFoundError'; 7 | export { NotValidHtmlNodeError } from './NotValidHtmlNodeError'; 8 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { MAPLESTORY_RANKING_SEARCH } from './constants/links'; 2 | import { OpenPageError, RankingSearchError, RetryError } from './errors'; 3 | import { EquipmentParser } from './parsers/equipment'; 4 | import { GeneralInformationParser } from './parsers/general'; 5 | import { HomePageParser } from './parsers/homepage'; 6 | import { SpecParser } from './parsers/spec'; 7 | import { Character } from './types/Character'; 8 | import { CashEquipment, Equipment, Equipments } from './types/Equipment'; 9 | import { Symbol } from './types/Symbol'; 10 | 11 | type EquipmentsResult = { 12 | success: Equipments; 13 | error: { [key in keyof Equipments]?: () => Promise> }; 14 | }; 15 | 16 | type CashEquipmentsResult = { 17 | success: CashEquipment[]; 18 | error?: () => Promise; 19 | }; 20 | 21 | export class MapleUtilsParser { 22 | private homePageParser: HomePageParser; 23 | private equipmentParser: EquipmentParser; 24 | private specParser: SpecParser; 25 | private generalInformationParser: GeneralInformationParser; 26 | 27 | constructor( 28 | homePageParser: HomePageParser, 29 | equipmentParser: EquipmentParser, 30 | specParser: SpecParser, 31 | generalInformationParser: GeneralInformationParser 32 | ) { 33 | this.homePageParser = homePageParser; 34 | this.equipmentParser = equipmentParser; 35 | this.specParser = specParser; 36 | this.generalInformationParser = generalInformationParser; 37 | } 38 | 39 | static new(): MapleUtilsParser { 40 | const homePage = new HomePageParser(); 41 | const equipment = new EquipmentParser(); 42 | const spec = new SpecParser(); 43 | const generalInformation = new GeneralInformationParser(); 44 | return new MapleUtilsParser(homePage, equipment, spec, generalInformation); 45 | } 46 | 47 | private async getCharacterInfo({ 48 | name, 49 | cash, 50 | pet, 51 | equip, 52 | symbol, 53 | }: { 54 | name: string; 55 | cash: boolean; 56 | pet: boolean; 57 | equip: boolean; 58 | symbol: boolean; 59 | }) { 60 | console.log(`${name} --> ranking search`); 61 | const characterLink = await this.getCharacterLink(name); 62 | 63 | console.log(`${name} --> character page`); 64 | const characterSpecPage = await this.getSpecPage(characterLink); 65 | 66 | const spec = this.specParser.parse(characterSpecPage); 67 | const generalInformation = this.generalInformationParser.parse(characterSpecPage); 68 | 69 | const equipmentLink = this.homePageParser.getEquipmentPageLink(characterSpecPage); 70 | const petLink = this.homePageParser.getPetPageLink(characterSpecPage); 71 | 72 | console.log(`${name} --> equipments`); 73 | const [equipments, petEquipments] = await Promise.all([ 74 | this.getEquipments(equipmentLink, equip, cash, symbol), 75 | pet ? this.getPetEquipments(petLink) : undefined, 76 | ]); 77 | 78 | return { 79 | spec, 80 | generalInformation, 81 | equipments, 82 | petEquipments, 83 | }; 84 | } 85 | 86 | async getCharacter({ 87 | name, 88 | cash = true, 89 | pet = true, 90 | equip = true, 91 | symbol = true, 92 | }: { 93 | name: string; 94 | cash?: boolean; 95 | pet?: boolean; 96 | equip?: boolean; 97 | symbol?: boolean; 98 | }): Promise { 99 | const { spec, generalInformation, equipments, petEquipments } = await this.getCharacterInfo({ 100 | name, 101 | cash, 102 | pet, 103 | equip, 104 | symbol, 105 | }); 106 | 107 | return { 108 | ...generalInformation, 109 | spec, 110 | equipments: equipments?.success.base, 111 | arcanes: equipments?.success.symbol, 112 | cashEquipments: equipments?.success.cash, 113 | // authentics: [], 114 | petEquipments: petEquipments?.success, 115 | }; 116 | } 117 | 118 | async getCharacterWithErrors({ 119 | name, 120 | cash = true, 121 | pet = true, 122 | equip = true, 123 | symbol = true, 124 | }: { 125 | name: string; 126 | cash?: boolean; 127 | pet?: boolean; 128 | equip?: boolean; 129 | symbol?: boolean; 130 | }) { 131 | const { spec, generalInformation, equipments, petEquipments } = await this.getCharacterInfo({ 132 | name, 133 | cash, 134 | pet, 135 | equip, 136 | symbol, 137 | }); 138 | 139 | const hasError = [ 140 | equipments?.error?.base, 141 | equipments?.error?.symbol, 142 | equipments?.error?.cash, 143 | petEquipments?.error, 144 | ].some((e) => !!e); 145 | 146 | return { 147 | data: { 148 | ...generalInformation, 149 | spec, 150 | equipments: equipments?.success.base, 151 | arcanes: equipments?.success.symbol, 152 | cashEquipments: equipments?.success.cash, 153 | // authentics: [], 154 | petEquipments: petEquipments?.success, 155 | }, 156 | errors: hasError 157 | ? { 158 | equipments: equipments?.error?.base, 159 | arcanes: equipments?.error?.symbol, 160 | cashEquipments: equipments?.error?.cash, 161 | petEquipments: petEquipments?.error, 162 | } 163 | : undefined, 164 | }; 165 | } 166 | 167 | private async getCharacterLink(name: string): Promise { 168 | const rankingSearch = await fetch(`${MAPLESTORY_RANKING_SEARCH}?c=${encodeURI(name)}`); 169 | if (rankingSearch.status !== 200) throw new RankingSearchError(name); 170 | 171 | const searchData = await rankingSearch.text(); 172 | let characterLink = ''; 173 | try { 174 | characterLink = this.homePageParser.getCharacterLink(name, searchData); 175 | } catch (e) { 176 | const rebootSearch = await fetch(`${MAPLESTORY_RANKING_SEARCH}?c=${encodeURI(name)}&w=254`); 177 | if (rankingSearch.status !== 200) throw new RankingSearchError(name); 178 | const rebootSearchData = await rebootSearch.text(); 179 | characterLink = this.homePageParser.getCharacterLink(name, rebootSearchData); 180 | } 181 | return characterLink; 182 | } 183 | 184 | private async getSpecPage(characterLink: string): Promise { 185 | const characterSpecPage = await fetch(characterLink); 186 | if (characterSpecPage.status !== 200) throw new OpenPageError('캐릭터 정보'); 187 | 188 | const specPageData = await characterSpecPage.text(); 189 | this.homePageParser.ensureIsPublic(specPageData, '기본 정보'); 190 | 191 | return specPageData; 192 | } 193 | 194 | private async getEquipments(equipmentLink: string, e: boolean, c: boolean, s: boolean): Promise { 195 | const equipmentPage = await fetch(equipmentLink); 196 | if (equipmentPage.status !== 200) throw new OpenPageError('장비'); 197 | const equipmentPageData = await equipmentPage.text(); 198 | this.homePageParser.ensureIsPublic(equipmentPageData, '장비'); 199 | 200 | const equipmentLinks = this.homePageParser.getEquipmentLinks(equipmentPageData); 201 | const [baseHtml, cashHtml, symbolHtml] = await Promise.all([ 202 | e ? this.getAllHtmls(equipmentLinks.base) : undefined, 203 | c ? this.getAllHtmls(equipmentLinks.cash) : undefined, 204 | s ? this.getAllHtmls(equipmentLinks.symbol) : undefined, 205 | ]); 206 | 207 | const failedBaseLinks = baseHtml?.error; 208 | const failedCashLinks = cashHtml?.error; 209 | const failedSymbolLinks = symbolHtml?.error; 210 | 211 | const base: Equipment[] | undefined = baseHtml?.success 212 | ?.map((html) => this.equipmentParser.parseBase(html)) 213 | .filter((e) => !!e); 214 | const cash: CashEquipment[] | undefined = cashHtml?.success 215 | ?.map((html) => this.equipmentParser.parseCash(html)) 216 | .filter((e) => !!e); 217 | const symbol: Symbol[] | undefined = symbolHtml?.success 218 | ?.map((html) => this.equipmentParser.parseSymbol(html)) 219 | .filter((e) => !!e); 220 | 221 | return { 222 | success: { 223 | base, 224 | cash, 225 | symbol, 226 | }, 227 | error: { 228 | base: failedBaseLinks?.length 229 | ? () => 230 | this.getAllHtmls(failedBaseLinks).then(({ success, error }) => { 231 | if (error.length) { 232 | throw new RetryError('일반장비'); 233 | } 234 | return success.map(this.equipmentParser.parseBase); 235 | }) 236 | : undefined, 237 | cash: failedCashLinks?.length 238 | ? () => 239 | this.getAllHtmls(failedCashLinks).then(({ success, error }) => { 240 | if (error.length) { 241 | throw new RetryError('캐시장비'); 242 | } 243 | return success.map(this.equipmentParser.parseCash); 244 | }) 245 | : undefined, 246 | symbol: failedSymbolLinks?.length 247 | ? () => 248 | this.getAllHtmls(failedSymbolLinks).then(({ success, error }) => { 249 | if (error.length) { 250 | throw new RetryError('심볼'); 251 | } 252 | return success.map(this.equipmentParser.parseSymbol); 253 | }) 254 | : undefined, 255 | }, 256 | }; 257 | } 258 | 259 | private async getPetEquipments(petEquipmentLink: string): Promise { 260 | const equipmentPage = await fetch(petEquipmentLink); 261 | if (equipmentPage.status !== 200) throw new OpenPageError('펫장비'); 262 | 263 | const equipmentPageData = await equipmentPage.text(); 264 | this.homePageParser.ensureIsPublic(equipmentPageData, '펫'); 265 | 266 | const equipmentLinks: string[] = this.homePageParser.getPetEquipmentLinks(equipmentPageData); 267 | const equipmentHtml = await this.getAllHtmls(equipmentLinks); 268 | 269 | return { 270 | success: equipmentHtml.success.map((html) => this.equipmentParser.parseCash(html)).filter((e) => !!e), 271 | error: equipmentHtml.error?.length 272 | ? () => 273 | this.getAllHtmls(equipmentHtml.error).then(({ success, error }) => { 274 | if (error.length) { 275 | throw new RetryError('펫장비'); 276 | } 277 | return success.map(this.equipmentParser.parseCash); 278 | }) 279 | : undefined, 280 | }; 281 | } 282 | 283 | private async getAllHtmls(links: string[]): Promise<{ success: string[]; error: string[] }> { 284 | const failedLinks: string[] = links; 285 | const htmls: string[] = []; 286 | 287 | let count = 0; 288 | 289 | while (failedLinks.length > 0 && count < 5) { 290 | if (count) { 291 | console.log(`시도 횟수: ${count}, 남은 링크 수: ${failedLinks.length} ${count}초후 재시도`); 292 | await new Promise((resolve) => setTimeout(resolve, 1000 * count)); 293 | } 294 | 295 | const requests = failedLinks.map((link) => 296 | fetch(link, { headers: { 'X-Requested-With': 'XMLHttpRequest' } }) 297 | .then((response) => { 298 | if (response.status !== 200) { 299 | console.log(`'${link}' 정보를 가져오는데 실패했습니다`, response.status); 300 | throw new OpenPageError(link); 301 | } 302 | return response.json(); 303 | }) 304 | .then((data) => { 305 | if (!data.view) { 306 | return; 307 | } 308 | htmls.push(data.view); 309 | failedLinks.splice(failedLinks.indexOf(link), 1); 310 | }) 311 | ); 312 | 313 | await Promise.allSettled(requests); 314 | count++; 315 | } 316 | 317 | return { success: htmls, error: failedLinks }; 318 | } 319 | } 320 | 321 | export * from './errors'; 322 | -------------------------------------------------------------------------------- /src/parsers/equipment.ts: -------------------------------------------------------------------------------- 1 | import HTMLParser, { HTMLElement } from 'node-html-parser'; 2 | import { NotValidHtmlNodeError } from '../errors'; 3 | import { CashEquipment, Equipment } from '../types/Equipment'; 4 | import { Potential, POTENTIAL_GRADE_MAPPING, PotentialGrade } from '../types/Potential'; 5 | import { Stat, STAT_MAPPING, Stats } from '../types/Stat'; 6 | import { Symbol } from '../types/Symbol'; 7 | 8 | const ITEM_NAME_SELECTOR = 'div.item_memo_title > h1'; 9 | const ITEM_IMAGE_SELECTOR = 'div.item_img > img'; 10 | const ITEM_CATEGORY_SELECTOR = 'div.item_ability > div:nth-child(3) > span > em'; 11 | const ITEM_LEVEL_SELECTOR = 'div.item_ability > div:nth-child(1) > ul > li:nth-child(1) > em'; 12 | const ITEM_OPTIONS_SELECTOR = 'div.stet_info > ul > li'; 13 | const ITEM_GRADE_SELECTOR = 'div.item_title > div.item_memo > div.item_memo_sel'; 14 | 15 | type EquipmentStat = Record<'base' | 'scroll' | 'flame', Stats>; 16 | type EquipmentOption = EquipmentStat & { 17 | potential?: Potential; 18 | additional?: Potential; 19 | soul?: Stats; 20 | scissors?: number; 21 | }; 22 | type SymbolOption = Record<'level' | 'experience' | 'requiredExperience', number>; 23 | 24 | export class EquipmentParser { 25 | /** 26 | * 장비 정보 html에서 장비 효과를 파싱하여 반환 27 | * @param equipmentHtml 장비 html 28 | */ 29 | parseBase(equipmentHtml: string): Equipment { 30 | const node: HTMLElement = HTMLParser.parse(equipmentHtml); 31 | 32 | const { name, upgrade, star } = this.parseName(node, equipmentHtml); 33 | const level = this.parseLevel(node); 34 | const imageUrl = this.parseImage(node); 35 | const category = this.parseCategory(node); 36 | const { base, scroll, flame, potential, additional, soul, scissors } = this.parseOptions(node); 37 | const grade = this.parseGrade(node); 38 | 39 | return { 40 | name, 41 | level, 42 | imageUrl, 43 | category, 44 | upgrade, 45 | base, 46 | scroll, 47 | grade, 48 | star, 49 | potential, 50 | additional, 51 | flame, 52 | soul, 53 | scissors, 54 | }; 55 | } 56 | 57 | /** 58 | * 장비 정보 html에서 캐시 장비 효과를 파싱하여 반환 59 | * @param equipmentHtml 장비 html 60 | */ 61 | parseCash(equipmentHtml: string): CashEquipment { 62 | const node: HTMLElement = HTMLParser.parse(equipmentHtml); 63 | 64 | const { name, upgrade } = this.parseName(node, equipmentHtml); 65 | const imageUrl = this.parseImage(node); 66 | const category = this.parseCategory(node); 67 | const { base, scroll } = this.parseOptions(node); 68 | 69 | return { 70 | name, 71 | upgrade, 72 | imageUrl, 73 | category, 74 | scroll, 75 | base, 76 | }; 77 | } 78 | 79 | /** 80 | * 장비 정보 html에서 심볼 장비 효과를 파싱하여 반환 81 | * @param equipmentHtml 장비 html 82 | */ 83 | parseSymbol(equipmentHtml: string): Symbol { 84 | const node: HTMLElement = HTMLParser.parse(equipmentHtml); 85 | 86 | const { name } = this.parseName(node, equipmentHtml); 87 | const { scroll } = this.parseOptions(node); 88 | const rest = this.parseSymbolOptions(node); 89 | 90 | return { 91 | name: name, 92 | stat: scroll!, 93 | ...rest, 94 | }; 95 | } 96 | 97 | private parseSymbolOptions(node: HTMLElement): SymbolOption { 98 | const [levelNode, experienceNode]: HTMLElement[] = node.querySelectorAll(ITEM_OPTIONS_SELECTOR); 99 | const level = levelNode.querySelector('div.point_td')?.text || '0'; 100 | const experiences = experienceNode.querySelector('div.point_td')?.text; 101 | const [experience, requiredExperience] = experiences?.split('/') || ['0', '0']; 102 | return { 103 | level: parseInt(level), 104 | experience: parseInt(experience), 105 | requiredExperience: parseInt(requiredExperience), 106 | }; 107 | } 108 | 109 | private parseLevel(node: HTMLElement): number { 110 | return Number.parseInt(node.querySelector(ITEM_LEVEL_SELECTOR)?.text.trim() ?? '0'); 111 | } 112 | 113 | private parseOptions(node: HTMLElement): EquipmentOption { 114 | const optionNodes: HTMLElement[] = node.querySelectorAll(ITEM_OPTIONS_SELECTOR); 115 | 116 | const option: EquipmentOption = { 117 | base: {}, 118 | scroll: {}, 119 | flame: {}, 120 | }; 121 | for (const optionNode of optionNodes) { 122 | const nameNode = optionNode.querySelector('div.stet_th')!; 123 | const name = nameNode.text.trim(); 124 | if (!name || name === '공격속도' || name === '기타') continue; 125 | 126 | const statNode = optionNode.querySelector('div.point_td')!; 127 | 128 | if (name.startsWith('잠재')) { 129 | option.potential = this.parsePotential(nameNode, statNode); 130 | continue; 131 | } 132 | if (name.startsWith('에디')) { 133 | option.additional = this.parsePotential(nameNode, statNode); 134 | continue; 135 | } 136 | if (name.startsWith('소울')) { 137 | option.soul = this.parseSoul(statNode); 138 | continue; 139 | } 140 | if (name.startsWith('가위 사용')) { 141 | option.scissors = parseInt(statNode.text.trim()); 142 | continue; 143 | } 144 | if (name.startsWith('Max') && statNode.text.includes('%')) { 145 | const stat: Stat = name === 'MaxHP' ? 'hpP' : 'mpP'; 146 | option.base[stat] = parseInt(statNode.text.trim()); 147 | continue; 148 | } 149 | if (name.startsWith('올') && statNode.text.includes('%')) { 150 | const { base, scroll, flame } = this.parseStat(name, statNode); 151 | option.base.allStatP = base[1]; 152 | option.scroll.allStatP = scroll[1]; 153 | option.flame.allStatP = flame[1]; 154 | continue; 155 | } 156 | if (STAT_MAPPING[name]) { 157 | const { base, scroll, flame } = this.parseStat(name, statNode); 158 | option.base[base[0]] = base[1]; 159 | option.scroll[scroll[0]] = scroll[1]; 160 | option.flame[flame[0]] = flame[1]; 161 | } 162 | } 163 | 164 | return option; 165 | } 166 | 167 | private parseGrade(node: HTMLElement): PotentialGrade { 168 | const gradeText = node.querySelector(ITEM_GRADE_SELECTOR)?.text.trim(); 169 | return gradeText ? POTENTIAL_GRADE_MAPPING[gradeText] || 'nothing' : 'nothing'; 170 | } 171 | 172 | private parseStat( 173 | name: string, 174 | node: HTMLElement 175 | ): Record<'base' | 'scroll' | 'flame', [Stat, number | undefined]> { 176 | const stat = STAT_MAPPING[name]; 177 | const line = node.innerText.trim(); 178 | const parenthesisIndex = line.indexOf('('); 179 | if (parenthesisIndex < 0) { 180 | return { 181 | base: [stat, parseInt(line)], 182 | scroll: [stat, undefined], 183 | flame: [stat, undefined], 184 | }; 185 | } 186 | 187 | const [base, flame, scroll] = line 188 | .substring(parenthesisIndex + 1, line.length - 1) 189 | .split('+') 190 | .map((v: string) => parseInt(v.trim())); 191 | 192 | return { 193 | base: [stat, base || undefined], 194 | scroll: [stat, scroll || undefined], 195 | flame: [stat, flame || undefined], 196 | }; 197 | } 198 | 199 | private parseSoul(node: HTMLElement): Stats | undefined { 200 | const textNode = node.childNodes[2]; 201 | if (!textNode) return; 202 | 203 | const option = textNode.text.split(':').map((s: string) => s.trim()); 204 | if (option.length !== 2) return; 205 | const [name, value] = option; 206 | const stat = STAT_MAPPING[name]; 207 | if (!stat) return; 208 | 209 | return { [stat]: parseInt(value) }; 210 | } 211 | 212 | private parsePotential(nameNode: HTMLElement, valueNode: HTMLElement): Potential | undefined { 213 | const gradeName = nameNode.querySelector('font')?.text; 214 | if (!gradeName) return; 215 | 216 | const effects = valueNode.childNodes 217 | .filter((_: any, i: number) => i % 2 === 0) 218 | .map((n: { text: string }) => { 219 | const [name, value] = n.text.split(':'); 220 | const statName = name.trim() + (value?.includes('%') ? '%' : ''); 221 | 222 | const stat = STAT_MAPPING[statName]; 223 | if (!stat) { 224 | return null; 225 | } 226 | 227 | return { [stat]: parseInt(value) }; 228 | }) 229 | .filter((e: any) => e) as Record[]; 230 | 231 | return { 232 | grade: POTENTIAL_GRADE_MAPPING[gradeName] || 'nothing', 233 | effects, 234 | }; 235 | } 236 | 237 | private parseCategory(node: HTMLElement): string { 238 | const categoryNode = node.querySelector(ITEM_CATEGORY_SELECTOR); 239 | return categoryNode?.text?.trim() || ''; 240 | } 241 | 242 | private parseImage(node: HTMLElement): string { 243 | const imageNode = node.querySelector(ITEM_IMAGE_SELECTOR); 244 | return imageNode?.attrs['src'] || ''; 245 | } 246 | 247 | private parseName(node: HTMLElement, html: string): { name: string; upgrade: number; star: number } { 248 | const h1 = node.querySelector(ITEM_NAME_SELECTOR); 249 | if (!h1) { 250 | console.log(html); 251 | throw new NotValidHtmlNodeError(node, ITEM_NAME_SELECTOR); 252 | } 253 | 254 | const hasSoulWeapon = h1.childNodes.length > 3; 255 | if (hasSoulWeapon) { 256 | // remove blank 257 | h1.childNodes.shift(); 258 | // remove soul weapon name 259 | h1.childNodes.shift(); 260 | // remove blank 261 | h1.childNodes.shift(); 262 | } 263 | const [nameNode, starNode] = h1.childNodes; 264 | const [name, upgrade] = nameNode.text.replaceAll(' ', '').split('(+'); 265 | 266 | return { 267 | name: name.trim(), 268 | upgrade: parseInt(upgrade?.trim() || '0'), 269 | star: parseInt(starNode?.text.trim() || '0'), 270 | }; 271 | } 272 | } 273 | -------------------------------------------------------------------------------- /src/parsers/general.ts: -------------------------------------------------------------------------------- 1 | import HTMLParser, { HTMLElement } from 'node-html-parser'; 2 | import { NotValidSpecPageError, NotFoundError } from '../errors'; 3 | import { GeneralInformation, Traits } from '../types/GeneralInformation'; 4 | 5 | const CHARACTER_TABLE_DATA_SELECTOR = 6 | 'div.con_wrap > div.contents_wrap > div > div.tab01_con_wrap > table:nth-child(2) > tbody > tr > td'; 7 | const CHARACTER_NAME_SELECTOR = 'div.char_info_top > div.char_name > span'; 8 | const CHARACTER_LEVEL_SELECTOR = 'div.char_info_top > div.char_info > dl:nth-child(1) > dd'; 9 | const CHARACTER_IMAGE_SELECTOR = 'div.char_info_top > div.char_info > div.char_img > div > img'; 10 | const CHARACTER_TRAITS_SELECTOR = 11 | 'div.con_wrap > div.contents_wrap > div > div.tab02_con_wrap > div > ul > li > div > div.graph_wrap > div > span'; 12 | 13 | export class GeneralInformationParser { 14 | parse(specPageHtml: string): GeneralInformation { 15 | const node: HTMLElement = HTMLParser.parse(specPageHtml); 16 | const data = node.querySelectorAll(CHARACTER_TABLE_DATA_SELECTOR); 17 | if (!data || data.length !== 6) throw new NotValidSpecPageError(); 18 | 19 | const [ 20 | world, 21 | job, 22 | popularity, 23 | guild, 24 | // meso, 25 | // maplePoint, 26 | ] = data.map((n) => n.text.replaceAll(',', '').trim()); 27 | 28 | return { 29 | name: this.parseName(node), 30 | world, 31 | guild, 32 | job: job.split('/')[1].trim(), 33 | level: this.parseLevel(node), 34 | imageUrl: this.parseImageUrl(node), 35 | traits: this.parseTraits(node), 36 | }; 37 | } 38 | 39 | private parseName(node: HTMLElement): string { 40 | const name = node.querySelector(CHARACTER_NAME_SELECTOR)?.text; 41 | if (!name) throw new NotFoundError('이름'); 42 | return name.substring(0, name.length - 1); 43 | } 44 | 45 | private parseLevel(node: HTMLElement): number { 46 | const level = node.querySelector(CHARACTER_LEVEL_SELECTOR)?.text.replace(/[^\d]/g, ''); 47 | if (!level) throw new NotFoundError('레벨'); 48 | return parseInt(level); 49 | } 50 | 51 | private parseImageUrl(node: HTMLElement): string { 52 | const imageUrl = node.querySelector(CHARACTER_IMAGE_SELECTOR)?.attrs['src']; 53 | if (!imageUrl) throw new NotFoundError('이미지'); 54 | return imageUrl; 55 | } 56 | 57 | private parseTraits(node: HTMLElement): Traits { 58 | const traitNodes = node.querySelectorAll(CHARACTER_TRAITS_SELECTOR); 59 | if (traitNodes.length !== 6) throw new NotFoundError('성향'); 60 | 61 | const [ambition, insight, willpower, diligence, empathy, charm] = traitNodes.map((n) => parseInt(n.text)); 62 | return { 63 | ambition, 64 | insight, 65 | willpower, 66 | diligence, 67 | empathy, 68 | charm, 69 | }; 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /src/parsers/homepage.ts: -------------------------------------------------------------------------------- 1 | import HTMLParser, { HTMLElement as NhpHTMLElement } from 'node-html-parser'; 2 | import { MAPLESTORY_HOME } from '../constants/links'; 3 | import { NotFoundError, PrivateInformationError, NotValidSpecPageError } from '../errors'; 4 | 5 | const CHARACTER_LINKS_SELECTOR = 'div.rank_table_wrap > table > tbody > tr > td.left > dl > dt > a'; 6 | const EQUIPMENT_LINK_SELECTOR = '#container > div.con_wrap > div.lnb_wrap > ul > li:nth-child(3) > a'; 7 | const PET_LINK_SELECTOR = '#container > div.con_wrap > div.lnb_wrap > ul > li:nth-child(10) > a'; 8 | 9 | const BASE_EQUIPMENT_LINKS_SELECTOR = 10 | '#container > div.con_wrap > div.contents_wrap > div > div.tab01_con_wrap > div.weapon_wrap > ul > li a'; 11 | const CASH_EQUIPMENT_LINKS_SELECTOR = 12 | '#container > div.con_wrap > div.contents_wrap > div > div.tab02_con_wrap > div.cash_weapon_wrap > ul > li a'; 13 | const SYMBOL_EQUIPMENT_LINKS_SELECTOR = 14 | '#container > div.con_wrap > div.contents_wrap > div > div.tab03_con_wrap > div.arcane_weapon_wrap > ul > li a'; 15 | const PET_EQUIPMENT_LINKS_SELECTOR = 16 | '#container > div.con_wrap > div.contents_wrap > div > div.tab02_con_wrap > div > ul > li > h2 > span > a'; 17 | 18 | export interface EquipmentLinks { 19 | base: string[]; 20 | cash: string[]; 21 | symbol: string[]; 22 | } 23 | 24 | /** 25 | * 공식 홈페이지 html에서 링크 파싱 26 | */ 27 | export class HomePageParser { 28 | /** 29 | * 공식홈페이지 랭킹페이지에서 캐릭터를 검색하고 찾으면 해당 캐릭터 링크를 반환 30 | * @param name 검색할 캐릭터 닉네임 (영어가 포함된 경우 대소문자를 구분하지 않음) 31 | * @param rankingPageHtml 열려있는 랭킹 페이지 html 32 | */ 33 | getCharacterLink(name: string, rankingPageHtml: string): string { 34 | const node = HTMLParser.parse(rankingPageHtml); 35 | const links: NhpHTMLElement[] = node.querySelectorAll(CHARACTER_LINKS_SELECTOR); 36 | const link = links.find((linkNode: NhpHTMLElement) => linkNode.innerText.toLowerCase() === name.toLowerCase()); 37 | if (!link) throw new NotFoundError(name); 38 | return `${MAPLESTORY_HOME}${link.attrs['href']}`; 39 | } 40 | 41 | /** 42 | * 정보가 비공개일시 에러를 던짐 43 | * @param html 열려있는 페이지 html 44 | */ 45 | ensureIsPublic(html: string, scope: string) { 46 | const node = HTMLParser.parse(html); 47 | const privateDiv: NhpHTMLElement | null = node.querySelector('div.private2'); 48 | if (privateDiv) throw new PrivateInformationError(scope); 49 | } 50 | 51 | /** 52 | * 캐릭터 정보 페이지에서 장비 링크를 반환 53 | * @param characterLinkPageHtml 캐릭터 정보 페이지 html 54 | */ 55 | getEquipmentPageLink(characterLinkPageHtml: string): string { 56 | const node = HTMLParser.parse(characterLinkPageHtml); 57 | const link = node.querySelector(EQUIPMENT_LINK_SELECTOR); 58 | if (!link) throw new NotValidSpecPageError(); 59 | return `${MAPLESTORY_HOME}${link.attrs['href']}`; 60 | } 61 | 62 | /** 63 | * 캐릭터 정보 페이지에서 펫 링크를 반환 64 | * @param characterLinkPageHtml 캐릭터 정보 페이지 html 65 | */ 66 | getPetPageLink(characterLinkPageHtml: string): string { 67 | const node = HTMLParser.parse(characterLinkPageHtml); 68 | const link = node.querySelector(PET_LINK_SELECTOR); 69 | if (!link) throw new NotValidSpecPageError(); 70 | return `${MAPLESTORY_HOME}${link.attrs['href']}`; 71 | } 72 | 73 | /** 74 | * 장비 정보 페이지에서 착용중인 기본 아이템, 캐시 아이템, 아케인 심볼 링크들을 반환 75 | * @param equipmentPageHtml 캐릭터 장비 정보 페이지 html 76 | */ 77 | getEquipmentLinks(equipmentPageHtml: string): EquipmentLinks { 78 | const node = HTMLParser.parse(equipmentPageHtml); 79 | const baseLinks: NhpHTMLElement[] = node.querySelectorAll(BASE_EQUIPMENT_LINKS_SELECTOR); 80 | const cashLinks: NhpHTMLElement[] = node.querySelectorAll(CASH_EQUIPMENT_LINKS_SELECTOR); 81 | const symbolLinks: NhpHTMLElement[] = node.querySelectorAll(SYMBOL_EQUIPMENT_LINKS_SELECTOR); 82 | 83 | return { 84 | base: baseLinks.map((e) => `${MAPLESTORY_HOME}${e.attrs['href']}`).filter((url) => url !== MAPLESTORY_HOME), 85 | cash: cashLinks.map((e) => `${MAPLESTORY_HOME}${e.attrs['href']}`).filter((url) => url !== MAPLESTORY_HOME), 86 | symbol: symbolLinks 87 | .map((e) => `${MAPLESTORY_HOME}${e.attrs['href']}`) 88 | .filter((url) => url !== MAPLESTORY_HOME), 89 | }; 90 | } 91 | 92 | /** 93 | * 펫 장비 정보 페이지에서 착용중인 펫장비 아이템 링크들을 반환 94 | * @param petEquipmentPageHtml 펫 정보 페이지 html 95 | */ 96 | getPetEquipmentLinks(petEquipmentPageHtml: string): string[] { 97 | const node = HTMLParser.parse(petEquipmentPageHtml); 98 | const links: NhpHTMLElement[] = node.querySelectorAll(PET_EQUIPMENT_LINKS_SELECTOR); 99 | return links.map((e) => `${MAPLESTORY_HOME}${e.attrs['href']}`).filter((url) => url !== MAPLESTORY_HOME); 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /src/parsers/spec.ts: -------------------------------------------------------------------------------- 1 | import { NotValidSpecPageError } from '../errors'; 2 | import { Spec } from '../types/Spec'; 3 | import HTMLParser, { HTMLElement } from 'node-html-parser'; 4 | import { Stat, Stats } from '../types/Stat'; 5 | 6 | const SPEC_TABLE_DATA_SELECTOR = 7 | 'div.con_wrap > div.contents_wrap > div > div.tab01_con_wrap > table:nth-child(4) > tbody > tr > td'; 8 | 9 | export class SpecParser { 10 | /** 11 | * 캐릭터 정보 페이지 html에서 스펙을 파싱하여 반환 12 | * @param specPageHtml 13 | */ 14 | parse(specPageHtml: string): Spec { 15 | const node: HTMLElement = HTMLParser.parse(specPageHtml); 16 | const data = node.querySelectorAll(SPEC_TABLE_DATA_SELECTOR); 17 | if (!data || data.length !== 20) throw new NotValidSpecPageError(); 18 | 19 | const [ 20 | statAtks, 21 | hp, 22 | mp, 23 | str, 24 | dex, 25 | int, 26 | luk, 27 | critDmg, 28 | bossDmg, 29 | ignoreDef, 30 | resistance, 31 | stance, 32 | def, 33 | speed, 34 | jump, 35 | starForce, 36 | abilityPoints, 37 | arcaneForce, 38 | ability, 39 | hyper, 40 | ] = data.map((n) => { 41 | const isHyperOrAbility = n.childNodes[0].childNodes.length > 1; 42 | return isHyperOrAbility 43 | ? n.childNodes[0].childNodes 44 | .filter((_, i) => i % 2 === 0) 45 | .map((c) => c.text) 46 | .join('\n') 47 | : n.text.replaceAll(',', '').trim(); 48 | }); 49 | const [statAtkLow, statAtkHigh] = statAtks.split(' ~ '); 50 | 51 | return { 52 | statAtkLow: parseInt(statAtkLow.trim()), 53 | statAtkHigh: parseInt(statAtkHigh.trim()), 54 | hp: parseInt(hp), 55 | mp: parseInt(mp), 56 | str: parseInt(str), 57 | dex: parseInt(dex), 58 | int: parseInt(int), 59 | luk: parseInt(luk), 60 | // dmg: 0, // not provided 61 | critDmg: parseInt(critDmg), 62 | bossDmg: parseInt(bossDmg), 63 | ignoreDef: parseInt(ignoreDef), 64 | resistance: parseInt(resistance), 65 | stance: parseInt(stance), 66 | def: parseInt(def), 67 | speed: parseInt(speed), 68 | jump: parseInt(jump), 69 | starForce: parseInt(starForce), 70 | arcaneForce: parseInt(arcaneForce), 71 | // authenticForce: 0, // not provided 72 | hypers: this.parseHypers(hyper), 73 | abilities: this.parseAbilities(ability), 74 | }; 75 | } 76 | 77 | private parseHypers(hyper: string): Stats { 78 | const hypers: Stats = {}; 79 | hyper.split('\n').forEach((line) => { 80 | const value = parseInt(line.replace(/[^\d]/g, '')); 81 | if (line.startsWith('힘')) { 82 | hypers.str = value; 83 | } else if (line.startsWith('민첩성')) { 84 | hypers.dex = value; 85 | } else if (line.startsWith('지력')) { 86 | hypers.int = value; 87 | } else if (line.startsWith('운')) { 88 | hypers.luk = value; 89 | } else if (line.startsWith('최대 HP')) { 90 | hypers.hpP = value; 91 | } else if (line.startsWith('크리티컬 확률')) { 92 | hypers.crit = value; 93 | } else if (line.startsWith('크리티컬 데미지')) { 94 | hypers.critDmg = value; 95 | } else if (line.startsWith('공격력')) { 96 | hypers.atk = value; 97 | hypers.mAtk = value; 98 | } else if (line.startsWith('보스')) { 99 | hypers.bossDmg = value; 100 | } else if (line.startsWith('일반')) { 101 | hypers.mobDmg = value; 102 | } else if (line.startsWith('데미지')) { 103 | hypers.dmg = value; 104 | } else if (line.startsWith('방어율')) { 105 | hypers.ignoreDef = value; 106 | } else if (line.startsWith('아케인')) { 107 | hypers.arcane = value; 108 | } else if (line.startsWith('획득 경험치')) { 109 | hypers.exp = value / 10; 110 | } 111 | }); 112 | return hypers; 113 | } 114 | 115 | private parseAbilities(ability: string): Stats { 116 | const abilities: Stats = {}; 117 | ability.split('\n').forEach((stat) => { 118 | const value = parseInt(stat.replace(/[^\d]/g, '')); 119 | if (stat.includes('패시브')) { 120 | abilities.passive = 1; 121 | } else if (stat.includes('보스')) { 122 | abilities.bossDmg = value; 123 | } else if (stat.includes('레벨마다 공격력')) { 124 | abilities.lvNAtk = value; 125 | } else if (stat.includes('레벨마다 마력')) { 126 | abilities.lvNmAtk = value; 127 | } else if (stat.includes('재사용 대기시간')) { 128 | abilities.reuse = value; 129 | } else if (stat.includes('AP')) { 130 | // FIXME: AP에 투자한 %만큼 증가 131 | } else if (stat.includes('공격력')) { 132 | abilities.atk = value; 133 | } else if (stat.includes('마력')) { 134 | abilities.mAtk = value; 135 | } else if (stat.includes('크리')) { 136 | abilities.crit = value; 137 | } else if (stat.includes('최대 HP')) { 138 | if (stat.includes('%')) { 139 | abilities.hpP = value; 140 | } else { 141 | abilities.hp = value; 142 | } 143 | } else if (stat.includes('모든 능력치')) { 144 | abilities.allStat = value; 145 | } else if (stat.includes('상태 이상에')) { 146 | abilities.statusDmg = value; 147 | } else if (stat.includes('버프')) { 148 | abilities.buff = value; 149 | } else if (stat.includes('메소')) { 150 | abilities.meso = value; 151 | } else if (stat.includes('아이템')) { 152 | abilities.drop = value; 153 | } else { 154 | for (const defaultStat of ['str', 'dex', 'int', 'luk'] as Stat[]) { 155 | stat.split(',').forEach((line) => { 156 | if (line.includes(defaultStat.toUpperCase())) { 157 | const value = parseInt(line.replace(/[^\d]/g, '')); 158 | abilities[defaultStat] = (abilities[defaultStat] || 0) + value; 159 | } 160 | }); 161 | } 162 | } 163 | }); 164 | return abilities; 165 | } 166 | } 167 | -------------------------------------------------------------------------------- /src/types/Character.ts: -------------------------------------------------------------------------------- 1 | import { CashEquipment, Equipment } from './Equipment'; 2 | import { GeneralInformation } from './GeneralInformation'; 3 | import { Spec } from './Spec'; 4 | import { Symbol } from './Symbol'; 5 | 6 | export interface Character extends GeneralInformation { 7 | equipments?: Equipment[]; 8 | spec: Spec; 9 | arcanes?: Symbol[]; 10 | // authentics: Symbol[]; 11 | petEquipments?: CashEquipment[]; 12 | cashEquipments?: CashEquipment[]; 13 | } 14 | -------------------------------------------------------------------------------- /src/types/Equipment.ts: -------------------------------------------------------------------------------- 1 | import { Potential, PotentialGrade } from './Potential'; 2 | import { Stats } from './Stat'; 3 | import { Symbol } from './Symbol'; 4 | 5 | export interface EquipmentBase { 6 | /** 7 | * 이름 8 | */ 9 | name: string; 10 | /** 11 | * 이미지 링크 12 | */ 13 | imageUrl: string; 14 | /** 15 | * 종류 16 | */ 17 | category: string; 18 | /** 19 | * 업그레이드 횟수 20 | */ 21 | upgrade: number; 22 | /** 23 | * 기본 스탯 24 | */ 25 | base: Stats; 26 | /** 27 | * 작 스탯 28 | */ 29 | scroll: Stats; 30 | /** 31 | * 가위 사용 가능 횟수 32 | */ 33 | scissors?: number; 34 | } 35 | 36 | export interface Equipment extends EquipmentBase { 37 | /** 38 | * 레벨제한 39 | */ 40 | level: number; 41 | /** 42 | * 총 등급 43 | */ 44 | grade: PotentialGrade; 45 | /** 46 | * 스타포스 47 | */ 48 | star?: number; 49 | /** 50 | * 잠재능력 51 | */ 52 | potential?: Potential; 53 | /** 54 | * 에디셔널 잠재능력 55 | */ 56 | additional?: Potential; 57 | /** 58 | * 추가옵션 59 | */ 60 | flame: Stats; 61 | /** 62 | * 소울 63 | */ 64 | soul?: Stats; 65 | } 66 | 67 | export interface CashEquipment extends EquipmentBase {} 68 | 69 | export interface Equipments { 70 | base?: Equipment[]; 71 | cash?: CashEquipment[]; 72 | symbol?: Symbol[]; 73 | } 74 | -------------------------------------------------------------------------------- /src/types/GeneralInformation.ts: -------------------------------------------------------------------------------- 1 | export interface GeneralInformation { 2 | /** 3 | * 캐릭터 이름 4 | */ 5 | name: string; 6 | /** 7 | * 월드 8 | */ 9 | world: string; 10 | /** 11 | * 직업 12 | */ 13 | job: string; 14 | /** 15 | * 길드 16 | */ 17 | guild: string; 18 | /** 19 | * 레벨 20 | */ 21 | level: number; 22 | /** 23 | * 캐릭터 이미지 url 24 | */ 25 | imageUrl: string; 26 | /** 27 | * 성향 28 | */ 29 | traits: Traits; 30 | } 31 | 32 | export interface Traits { 33 | /** 34 | * 카리스마 35 | */ 36 | ambition: number; 37 | /** 38 | * 통찰력 39 | */ 40 | insight: number; 41 | /** 42 | * 의지 43 | */ 44 | willpower: number; 45 | /** 46 | * 손재주 47 | */ 48 | diligence: number; 49 | /** 50 | * 감성 51 | */ 52 | empathy: number; 53 | /** 54 | * 매력 55 | */ 56 | charm: number; 57 | } 58 | -------------------------------------------------------------------------------- /src/types/Potential.ts: -------------------------------------------------------------------------------- 1 | import { Stats } from './Stat'; 2 | 3 | const potentialGrades = ['nothing', 'rare', 'epic', 'unique', 'legendary', 'special'] as const; 4 | 5 | export type PotentialGrade = (typeof potentialGrades)[number]; 6 | 7 | export interface Potential { 8 | grade: PotentialGrade; 9 | effects: Stats[]; 10 | } 11 | 12 | export const POTENTIAL_GRADE_MAPPING: Readonly> = { 13 | ['레어아이템']: 'rare', 14 | ['에픽아이템']: 'epic', 15 | ['유니크아이템']: 'unique', 16 | ['레전드리아이템']: 'legendary', 17 | ['스페셜아이템']: 'special', 18 | ['레어']: 'rare', 19 | ['에픽']: 'epic', 20 | ['유니크']: 'unique', 21 | ['레전드리']: 'legendary', 22 | ['스페셜']: 'special', 23 | }; 24 | -------------------------------------------------------------------------------- /src/types/Spec.ts: -------------------------------------------------------------------------------- 1 | import { Stats } from './Stat'; 2 | 3 | export interface Spec { 4 | /** 5 | * 앞 스공 6 | */ 7 | statAtkLow: number; 8 | /** 9 | * 뒷 스공 10 | */ 11 | statAtkHigh: number; 12 | /** 13 | * HP 14 | */ 15 | hp: number; 16 | /** 17 | * MP 18 | */ 19 | mp: number; 20 | /** 21 | * 힘 22 | */ 23 | str: number; 24 | /** 25 | * 덱 26 | */ 27 | dex: number; 28 | /** 29 | * 인 30 | */ 31 | int: number; 32 | /** 33 | * 럭 34 | */ 35 | luk: number; 36 | /** 37 | * 크리 데미지 38 | */ 39 | critDmg: number; 40 | /** 41 | * 보스 데미지 42 | */ 43 | bossDmg: number; 44 | /** 45 | * 방어율 무시 46 | */ 47 | ignoreDef: number; 48 | // /** 49 | // * @deprecated 데미지 (⚠ 아직 공식 홈페이지에 추가되지 않아서 사용불가) 50 | // */ 51 | // dmg: number; 52 | /** 53 | * 상태이상 내성 54 | */ 55 | resistance: number; 56 | /** 57 | * 스탠스 58 | */ 59 | stance: number; 60 | /** 61 | * 방어력 62 | */ 63 | def: number; 64 | /** 65 | * 이동속도 66 | */ 67 | speed: number; 68 | /** 69 | * 점프력 70 | */ 71 | jump: number; 72 | /** 73 | * 스타포스 74 | */ 75 | starForce: number; 76 | /** 77 | * 아케인포스 78 | */ 79 | arcaneForce: number; 80 | // /** 81 | // * @deprecated 어센틱포스 (⚠ 아직 공식 홈페이지에 추가되지 않아서 사용불가) 82 | // */ 83 | // authenticForce: number; 84 | /** 85 | * 어빌리티 86 | */ 87 | abilities: Stats; 88 | /** 89 | * 하이퍼스탯 90 | */ 91 | hypers: Stats; 92 | } 93 | -------------------------------------------------------------------------------- /src/types/Stat.ts: -------------------------------------------------------------------------------- 1 | const statList = [ 2 | 'str', // 힘 3 | 'dex', // 덱 4 | 'int', // 인 5 | 'luk', // 럭 6 | 'strP', // 힘퍼 7 | 'dexP', // 덱퍼 8 | 'intP', // 인퍼 9 | 'lukP', // 럭퍼 10 | 'hp', // hp 11 | 'hpP', // hp퍼 12 | 'mp', // mp 13 | 'mpP', // mp퍼 14 | 'atk', // 공격력 15 | 'atkP', // 공격력퍼 16 | 'mAtk', // 마력 17 | 'mAtkP', // 마력퍼 18 | 'def', // 물리방어력 19 | 'defP', // 물리방어력% 20 | 'speed', // 이동속도 21 | 'jump', // 점프력 22 | 'ignoreDef', // 방어율무시% 23 | 'mobDmg', // 일반몬스터데미지% 24 | 'bossDmg', // 보스몬스터데미지% 25 | 'dmg', // 데미지% 26 | 'allStat', // 올스탯 27 | 'allStatP', // 올스탯% 28 | 'crit', // 크리티컬확률 29 | 'critDmg', // 크리티컬데미지% 30 | 'buff', // 버프지속시간 31 | 'statusDmg', // 상태이상데미지 32 | 'arcane', // 아케인포스 33 | 'lvNAtk', // lvN당공1 34 | 'lvNmAtk', // lvN당마1 35 | 'lv9Str', // lv9당힘N 36 | 'lv9Dex', // lv9당덱N 37 | 'lv9Int', // lv9당인N 38 | 'lv9Luk', // lv9당럭N 39 | 'meso', // 메소획득량 40 | 'drop', // 아이템드롭률 41 | 'hpHeal', // 회복 42 | 'passive', // 패시브1렙 43 | 'reuse', // 재사용 44 | 'exp', // 획득 경험치 45 | ] as const; 46 | 47 | export type Stat = (typeof statList)[number]; 48 | 49 | export type Stats = Partial>; 50 | 51 | export const STAT_MAPPING: Record = { 52 | ['STR']: 'str', 53 | ['DEX']: 'dex', 54 | ['INT']: 'int', 55 | ['LUK']: 'luk', 56 | ['힘']: 'str', 57 | ['민첩']: 'dex', 58 | ['민첩성']: 'dex', 59 | ['지력']: 'int', 60 | ['운']: 'luk', 61 | ['행운']: 'luk', 62 | ['MaxHP']: 'hp', 63 | ['최대 HP']: 'hp', 64 | ['MaxMP']: 'mp', 65 | ['최대 MP']: 'mp', 66 | ['STR%']: 'strP', 67 | ['DEX%']: 'dexP', 68 | ['INT%']: 'intP', 69 | ['LUK%']: 'lukP', 70 | ['MaxHP%']: 'hpP', 71 | ['최대 HP%']: 'hpP', 72 | ['MaxMP%']: 'mpP', 73 | ['최대 MP%']: 'mpP', 74 | ['공격력']: 'atk', 75 | ['마력']: 'mAtk', 76 | ['공격력%']: 'atkP', 77 | ['마력%']: 'mAtkP', 78 | ['물리방어력']: 'def', 79 | ['방어력']: 'def', 80 | ['물리방어력%']: 'defP', 81 | ['방어력%']: 'defP', 82 | ['이동속도']: 'speed', 83 | ['점프력']: 'jump', 84 | ['몬스터 방어력 무시']: 'ignoreDef', 85 | ['몬스터 방어력 무시%']: 'ignoreDef', 86 | ['몬스터 방어율 무시']: 'ignoreDef', 87 | ['몬스터 방어율 무시%']: 'ignoreDef', 88 | ['보스 몬스터공격 시 데미지']: 'bossDmg', 89 | ['보스 몬스터 공격 시 데미지']: 'bossDmg', 90 | ['보스 몬스터 공격 시 데미지%']: 'bossDmg', 91 | ['데미지']: 'dmg', 92 | ['데미지%']: 'dmg', 93 | ['올스탯']: 'allStat', 94 | ['올스탯%']: 'allStatP', 95 | ['크리티컬 확률']: 'crit', 96 | ['크리티컬 확률%']: 'crit', 97 | ['크리티컬 데미지']: 'critDmg', 98 | ['크리티컬 데미지%']: 'critDmg', 99 | ['캐릭터 기준 9레벨 당 STR']: 'lv9Str', 100 | ['캐릭터 기준 9레벨 당 DEX']: 'lv9Dex', 101 | ['캐릭터 기준 9레벨 당 INT']: 'lv9Int', 102 | ['캐릭터 기준 9레벨 당 LUK']: 'lv9Luk', 103 | ['메소 획득량']: 'meso', 104 | ['메소 획득량%']: 'meso', 105 | ['아이템 드롭률']: 'drop', 106 | ['아이템 드롭률%']: 'drop', 107 | ['HP 회복 아이템 및 회복 스킬 효율']: 'hpHeal', 108 | ['HP 회복 아이템 및 회복 스킬 효율%']: 'hpHeal', 109 | }; 110 | -------------------------------------------------------------------------------- /src/types/Symbol.ts: -------------------------------------------------------------------------------- 1 | import { Stats } from './Stat'; 2 | 3 | export interface Symbol { 4 | /** 5 | * 심볼 이름 6 | */ 7 | name: string; 8 | /** 9 | * 스탯 목록 10 | */ 11 | stat: Stats; 12 | /** 13 | * 레벨 14 | */ 15 | level: number; 16 | /** 17 | * 현제 경험치 18 | */ 19 | experience: number; 20 | /** 21 | * 레벨업에 필요한 경험치 22 | */ 23 | requiredExperience: number; 24 | } 25 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2021", 4 | /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 5 | "module": "commonjs", 6 | /* Specify what module code is generated. */ 7 | "esModuleInterop": true, 8 | /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 9 | "forceConsistentCasingInFileNames": true, 10 | /* Ensure that casing is correct in imports. */ 11 | "strict": true, 12 | /* Enable all strict type-checking options. */ 13 | "skipLibCheck": true, 14 | /* Skip type checking all .d.ts files. */ 15 | "noEmit": true 16 | /* Disable emitting files from a compilation. */ 17 | } 18 | } 19 | --------------------------------------------------------------------------------