This is page 2 of 2. Use http://codebase.md/mgsrevolver/seo-inspector-mcp?page={x} to view the full context.
# Directory Structure
```
├── .cursor
│ └── mcp.json
├── .gitignore
├── console-spy-mcp.js
├── cs-mcp-server.js
├── mcp-tools.js
├── node_modules
│ ├── .bin
│ │ ├── mime
│ │ └── supergateway
│ ├── .package-lock.json
│ ├── @modelcontextprotocol
│ │ └── sdk
│ │ ├── dist
│ │ │ ├── cjs
│ │ │ │ ├── cli.d.ts
│ │ │ │ ├── cli.d.ts.map
│ │ │ │ ├── cli.js
│ │ │ │ ├── cli.js.map
│ │ │ │ ├── client
│ │ │ │ │ ├── auth.d.ts
│ │ │ │ │ ├── auth.d.ts.map
│ │ │ │ │ ├── auth.js
│ │ │ │ │ ├── auth.js.map
│ │ │ │ │ ├── index.d.ts
│ │ │ │ │ ├── index.d.ts.map
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── index.js.map
│ │ │ │ │ ├── sse.d.ts
│ │ │ │ │ ├── sse.d.ts.map
│ │ │ │ │ ├── sse.js
│ │ │ │ │ ├── sse.js.map
│ │ │ │ │ ├── stdio.d.ts
│ │ │ │ │ ├── stdio.d.ts.map
│ │ │ │ │ ├── stdio.js
│ │ │ │ │ ├── stdio.js.map
│ │ │ │ │ ├── websocket.d.ts
│ │ │ │ │ ├── websocket.d.ts.map
│ │ │ │ │ ├── websocket.js
│ │ │ │ │ └── websocket.js.map
│ │ │ │ ├── inMemory.d.ts
│ │ │ │ ├── inMemory.d.ts.map
│ │ │ │ ├── inMemory.js
│ │ │ │ ├── inMemory.js.map
│ │ │ │ ├── package.json
│ │ │ │ ├── server
│ │ │ │ │ ├── auth
│ │ │ │ │ │ ├── clients.d.ts
│ │ │ │ │ │ ├── clients.d.ts.map
│ │ │ │ │ │ ├── clients.js
│ │ │ │ │ │ ├── clients.js.map
│ │ │ │ │ │ ├── errors.d.ts
│ │ │ │ │ │ ├── errors.d.ts.map
│ │ │ │ │ │ ├── errors.js
│ │ │ │ │ │ ├── errors.js.map
│ │ │ │ │ │ ├── handlers
│ │ │ │ │ │ │ ├── authorize.d.ts
│ │ │ │ │ │ │ ├── authorize.d.ts.map
│ │ │ │ │ │ │ ├── authorize.js
│ │ │ │ │ │ │ ├── authorize.js.map
│ │ │ │ │ │ │ ├── metadata.d.ts
│ │ │ │ │ │ │ ├── metadata.d.ts.map
│ │ │ │ │ │ │ ├── metadata.js
│ │ │ │ │ │ │ ├── metadata.js.map
│ │ │ │ │ │ │ ├── register.d.ts
│ │ │ │ │ │ │ ├── register.d.ts.map
│ │ │ │ │ │ │ ├── register.js
│ │ │ │ │ │ │ ├── register.js.map
│ │ │ │ │ │ │ ├── revoke.d.ts
│ │ │ │ │ │ │ ├── revoke.d.ts.map
│ │ │ │ │ │ │ ├── revoke.js
│ │ │ │ │ │ │ ├── revoke.js.map
│ │ │ │ │ │ │ ├── token.d.ts
│ │ │ │ │ │ │ ├── token.d.ts.map
│ │ │ │ │ │ │ ├── token.js
│ │ │ │ │ │ │ └── token.js.map
│ │ │ │ │ │ ├── middleware
│ │ │ │ │ │ │ ├── allowedMethods.d.ts
│ │ │ │ │ │ │ ├── allowedMethods.d.ts.map
│ │ │ │ │ │ │ ├── allowedMethods.js
│ │ │ │ │ │ │ ├── allowedMethods.js.map
│ │ │ │ │ │ │ ├── bearerAuth.d.ts
│ │ │ │ │ │ │ ├── bearerAuth.d.ts.map
│ │ │ │ │ │ │ ├── bearerAuth.js
│ │ │ │ │ │ │ ├── bearerAuth.js.map
│ │ │ │ │ │ │ ├── clientAuth.d.ts
│ │ │ │ │ │ │ ├── clientAuth.d.ts.map
│ │ │ │ │ │ │ ├── clientAuth.js
│ │ │ │ │ │ │ └── clientAuth.js.map
│ │ │ │ │ │ ├── provider.d.ts
│ │ │ │ │ │ ├── provider.d.ts.map
│ │ │ │ │ │ ├── provider.js
│ │ │ │ │ │ ├── provider.js.map
│ │ │ │ │ │ ├── router.d.ts
│ │ │ │ │ │ ├── router.d.ts.map
│ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ ├── router.js.map
│ │ │ │ │ │ ├── types.d.ts
│ │ │ │ │ │ ├── types.d.ts.map
│ │ │ │ │ │ ├── types.js
│ │ │ │ │ │ └── types.js.map
│ │ │ │ │ ├── completable.d.ts
│ │ │ │ │ ├── completable.d.ts.map
│ │ │ │ │ ├── completable.js
│ │ │ │ │ ├── completable.js.map
│ │ │ │ │ ├── index.d.ts
│ │ │ │ │ ├── index.d.ts.map
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── index.js.map
│ │ │ │ │ ├── mcp.d.ts
│ │ │ │ │ ├── mcp.d.ts.map
│ │ │ │ │ ├── mcp.js
│ │ │ │ │ ├── mcp.js.map
│ │ │ │ │ ├── sse.d.ts
│ │ │ │ │ ├── sse.d.ts.map
│ │ │ │ │ ├── sse.js
│ │ │ │ │ ├── sse.js.map
│ │ │ │ │ ├── stdio.d.ts
│ │ │ │ │ ├── stdio.d.ts.map
│ │ │ │ │ ├── stdio.js
│ │ │ │ │ └── stdio.js.map
│ │ │ │ ├── shared
│ │ │ │ │ ├── auth.d.ts
│ │ │ │ │ ├── auth.d.ts.map
│ │ │ │ │ ├── auth.js
│ │ │ │ │ ├── auth.js.map
│ │ │ │ │ ├── protocol.d.ts
│ │ │ │ │ ├── protocol.d.ts.map
│ │ │ │ │ ├── protocol.js
│ │ │ │ │ ├── protocol.js.map
│ │ │ │ │ ├── stdio.d.ts
│ │ │ │ │ ├── stdio.d.ts.map
│ │ │ │ │ ├── stdio.js
│ │ │ │ │ ├── stdio.js.map
│ │ │ │ │ ├── transport.d.ts
│ │ │ │ │ ├── transport.d.ts.map
│ │ │ │ │ ├── transport.js
│ │ │ │ │ ├── transport.js.map
│ │ │ │ │ ├── uriTemplate.d.ts
│ │ │ │ │ ├── uriTemplate.d.ts.map
│ │ │ │ │ ├── uriTemplate.js
│ │ │ │ │ └── uriTemplate.js.map
│ │ │ │ ├── types.d.ts
│ │ │ │ ├── types.d.ts.map
│ │ │ │ ├── types.js
│ │ │ │ └── types.js.map
│ │ │ └── esm
│ │ │ ├── cli.d.ts
│ │ │ ├── cli.d.ts.map
│ │ │ ├── cli.js
│ │ │ ├── cli.js.map
│ │ │ ├── client
│ │ │ │ ├── auth.d.ts
│ │ │ │ ├── auth.d.ts.map
│ │ │ │ ├── auth.js
│ │ │ │ ├── auth.js.map
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.d.ts.map
│ │ │ │ ├── index.js
│ │ │ │ ├── index.js.map
│ │ │ │ ├── sse.d.ts
│ │ │ │ ├── sse.d.ts.map
│ │ │ │ ├── sse.js
│ │ │ │ ├── sse.js.map
│ │ │ │ ├── stdio.d.ts
│ │ │ │ ├── stdio.d.ts.map
│ │ │ │ ├── stdio.js
│ │ │ │ ├── stdio.js.map
│ │ │ │ ├── websocket.d.ts
│ │ │ │ ├── websocket.d.ts.map
│ │ │ │ ├── websocket.js
│ │ │ │ └── websocket.js.map
│ │ │ ├── inMemory.d.ts
│ │ │ ├── inMemory.d.ts.map
│ │ │ ├── inMemory.js
│ │ │ ├── inMemory.js.map
│ │ │ ├── package.json
│ │ │ ├── server
│ │ │ │ ├── auth
│ │ │ │ │ ├── clients.d.ts
│ │ │ │ │ ├── clients.d.ts.map
│ │ │ │ │ ├── clients.js
│ │ │ │ │ ├── clients.js.map
│ │ │ │ │ ├── errors.d.ts
│ │ │ │ │ ├── errors.d.ts.map
│ │ │ │ │ ├── errors.js
│ │ │ │ │ ├── errors.js.map
│ │ │ │ │ ├── handlers
│ │ │ │ │ │ ├── authorize.d.ts
│ │ │ │ │ │ ├── authorize.d.ts.map
│ │ │ │ │ │ ├── authorize.js
│ │ │ │ │ │ ├── authorize.js.map
│ │ │ │ │ │ ├── metadata.d.ts
│ │ │ │ │ │ ├── metadata.d.ts.map
│ │ │ │ │ │ ├── metadata.js
│ │ │ │ │ │ ├── metadata.js.map
│ │ │ │ │ │ ├── register.d.ts
│ │ │ │ │ │ ├── register.d.ts.map
│ │ │ │ │ │ ├── register.js
│ │ │ │ │ │ ├── register.js.map
│ │ │ │ │ │ ├── revoke.d.ts
│ │ │ │ │ │ ├── revoke.d.ts.map
│ │ │ │ │ │ ├── revoke.js
│ │ │ │ │ │ ├── revoke.js.map
│ │ │ │ │ │ ├── token.d.ts
│ │ │ │ │ │ ├── token.d.ts.map
│ │ │ │ │ │ ├── token.js
│ │ │ │ │ │ └── token.js.map
│ │ │ │ │ ├── middleware
│ │ │ │ │ │ ├── allowedMethods.d.ts
│ │ │ │ │ │ ├── allowedMethods.d.ts.map
│ │ │ │ │ │ ├── allowedMethods.js
│ │ │ │ │ │ ├── allowedMethods.js.map
│ │ │ │ │ │ ├── bearerAuth.d.ts
│ │ │ │ │ │ ├── bearerAuth.d.ts.map
│ │ │ │ │ │ ├── bearerAuth.js
│ │ │ │ │ │ ├── bearerAuth.js.map
│ │ │ │ │ │ ├── clientAuth.d.ts
│ │ │ │ │ │ ├── clientAuth.d.ts.map
│ │ │ │ │ │ ├── clientAuth.js
│ │ │ │ │ │ └── clientAuth.js.map
│ │ │ │ │ ├── provider.d.ts
│ │ │ │ │ ├── provider.d.ts.map
│ │ │ │ │ ├── provider.js
│ │ │ │ │ ├── provider.js.map
│ │ │ │ │ ├── router.d.ts
│ │ │ │ │ ├── router.d.ts.map
│ │ │ │ │ ├── router.js
│ │ │ │ │ ├── router.js.map
│ │ │ │ │ ├── types.d.ts
│ │ │ │ │ ├── types.d.ts.map
│ │ │ │ │ ├── types.js
│ │ │ │ │ └── types.js.map
│ │ │ │ ├── completable.d.ts
│ │ │ │ ├── completable.d.ts.map
│ │ │ │ ├── completable.js
│ │ │ │ ├── completable.js.map
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.d.ts.map
│ │ │ │ ├── index.js
│ │ │ │ ├── index.js.map
│ │ │ │ ├── mcp.d.ts
│ │ │ │ ├── mcp.d.ts.map
│ │ │ │ ├── mcp.js
│ │ │ │ ├── mcp.js.map
│ │ │ │ ├── sse.d.ts
│ │ │ │ ├── sse.d.ts.map
│ │ │ │ ├── sse.js
│ │ │ │ ├── sse.js.map
│ │ │ │ ├── stdio.d.ts
│ │ │ │ ├── stdio.d.ts.map
│ │ │ │ ├── stdio.js
│ │ │ │ └── stdio.js.map
│ │ │ ├── shared
│ │ │ │ ├── auth.d.ts
│ │ │ │ ├── auth.d.ts.map
│ │ │ │ ├── auth.js
│ │ │ │ ├── auth.js.map
│ │ │ │ ├── protocol.d.ts
│ │ │ │ ├── protocol.d.ts.map
│ │ │ │ ├── protocol.js
│ │ │ │ ├── protocol.js.map
│ │ │ │ ├── stdio.d.ts
│ │ │ │ ├── stdio.d.ts.map
│ │ │ │ ├── stdio.js
│ │ │ │ ├── stdio.js.map
│ │ │ │ ├── transport.d.ts
│ │ │ │ ├── transport.d.ts.map
│ │ │ │ ├── transport.js
│ │ │ │ ├── transport.js.map
│ │ │ │ ├── uriTemplate.d.ts
│ │ │ │ ├── uriTemplate.d.ts.map
│ │ │ │ ├── uriTemplate.js
│ │ │ │ └── uriTemplate.js.map
│ │ │ ├── types.d.ts
│ │ │ ├── types.d.ts.map
│ │ │ ├── types.js
│ │ │ └── types.js.map
│ │ ├── LICENSE
│ │ ├── node_modules
│ │ │ ├── accepts
│ │ │ │ ├── HISTORY.md
│ │ │ │ ├── index.js
│ │ │ │ ├── LICENSE
│ │ │ │ ├── package.json
│ │ │ │ └── README.md
│ │ │ ├── body-parser
│ │ │ │ ├── HISTORY.md
│ │ │ │ ├── index.js
│ │ │ │ ├── lib
│ │ │ │ │ ├── read.js
│ │ │ │ │ └── types
│ │ │ │ │ ├── json.js
│ │ │ │ │ ├── raw.js
│ │ │ │ │ ├── text.js
│ │ │ │ │ └── urlencoded.js
│ │ │ │ ├── LICENSE
│ │ │ │ ├── node_modules
│ │ │ │ │ ├── debug
│ │ │ │ │ │ ├── LICENSE
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ └── src
│ │ │ │ │ │ ├── browser.js
│ │ │ │ │ │ ├── common.js
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── node.js
│ │ │ │ │ ├── iconv-lite
│ │ │ │ │ │ ├── Changelog.md
│ │ │ │ │ │ ├── encodings
│ │ │ │ │ │ │ ├── dbcs-codec.js
│ │ │ │ │ │ │ ├── dbcs-data.js
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ ├── internal.js
│ │ │ │ │ │ │ ├── sbcs-codec.js
│ │ │ │ │ │ │ ├── sbcs-data-generated.js
│ │ │ │ │ │ │ ├── sbcs-data.js
│ │ │ │ │ │ │ ├── tables
│ │ │ │ │ │ │ │ ├── big5-added.json
│ │ │ │ │ │ │ │ ├── cp936.json
│ │ │ │ │ │ │ │ ├── cp949.json
│ │ │ │ │ │ │ │ ├── cp950.json
│ │ │ │ │ │ │ │ ├── eucjp.json
│ │ │ │ │ │ │ │ ├── gb18030-ranges.json
│ │ │ │ │ │ │ │ ├── gbk-added.json
│ │ │ │ │ │ │ │ └── shiftjis.json
│ │ │ │ │ │ │ ├── utf16.js
│ │ │ │ │ │ │ ├── utf32.js
│ │ │ │ │ │ │ └── utf7.js
│ │ │ │ │ │ ├── lib
│ │ │ │ │ │ │ ├── bom-handling.js
│ │ │ │ │ │ │ ├── extend-node.js
│ │ │ │ │ │ │ ├── index.d.ts
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── streams.js
│ │ │ │ │ │ ├── LICENSE
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── ms
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ ├── license.md
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ └── qs
│ │ │ │ │ ├── .editorconfig
│ │ │ │ │ ├── .eslintrc
│ │ │ │ │ ├── .github
│ │ │ │ │ │ └── FUNDING.yml
│ │ │ │ │ ├── .nycrc
│ │ │ │ │ ├── CHANGELOG.md
│ │ │ │ │ ├── dist
│ │ │ │ │ │ └── qs.js
│ │ │ │ │ ├── lib
│ │ │ │ │ │ ├── formats.js
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ ├── parse.js
│ │ │ │ │ │ ├── stringify.js
│ │ │ │ │ │ └── utils.js
│ │ │ │ │ ├── LICENSE.md
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── README.md
│ │ │ │ │ └── test
│ │ │ │ │ ├── empty-keys-cases.js
│ │ │ │ │ ├── parse.js
│ │ │ │ │ ├── stringify.js
│ │ │ │ │ └── utils.js
│ │ │ │ ├── package.json
│ │ │ │ ├── README.md
│ │ │ │ └── SECURITY.md
│ │ │ ├── content-disposition
│ │ │ │ ├── HISTORY.md
│ │ │ │ ├── index.js
│ │ │ │ ├── LICENSE
│ │ │ │ ├── package.json
│ │ │ │ └── README.md
│ │ │ ├── cookie-signature
│ │ │ │ ├── History.md
│ │ │ │ ├── index.js
│ │ │ │ ├── LICENSE
│ │ │ │ ├── package.json
│ │ │ │ └── Readme.md
│ │ │ ├── debug
│ │ │ │ ├── LICENSE
│ │ │ │ ├── package.json
│ │ │ │ ├── README.md
│ │ │ │ └── src
│ │ │ │ ├── browser.js
│ │ │ │ ├── common.js
│ │ │ │ ├── index.js
│ │ │ │ └── node.js
│ │ │ ├── express
│ │ │ │ ├── History.md
│ │ │ │ ├── index.js
│ │ │ │ ├── lib
│ │ │ │ │ ├── application.js
│ │ │ │ │ ├── express.js
│ │ │ │ │ ├── request.js
│ │ │ │ │ ├── response.js
│ │ │ │ │ ├── utils.js
│ │ │ │ │ └── view.js
│ │ │ │ ├── LICENSE
│ │ │ │ ├── package.json
│ │ │ │ └── Readme.md
│ │ │ ├── finalhandler
│ │ │ │ ├── HISTORY.md
│ │ │ │ ├── index.js
│ │ │ │ ├── LICENSE
│ │ │ │ ├── node_modules
│ │ │ │ │ ├── debug
│ │ │ │ │ │ ├── LICENSE
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ └── src
│ │ │ │ │ │ ├── browser.js
│ │ │ │ │ │ ├── common.js
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── node.js
│ │ │ │ │ └── ms
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── license.md
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── readme.md
│ │ │ │ ├── package.json
│ │ │ │ └── README.md
│ │ │ ├── fresh
│ │ │ │ ├── HISTORY.md
│ │ │ │ ├── index.js
│ │ │ │ ├── LICENSE
│ │ │ │ ├── package.json
│ │ │ │ └── README.md
│ │ │ ├── media-typer
│ │ │ │ ├── HISTORY.md
│ │ │ │ ├── index.js
│ │ │ │ ├── LICENSE
│ │ │ │ ├── package.json
│ │ │ │ └── README.md
│ │ │ ├── merge-descriptors
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.js
│ │ │ │ ├── license
│ │ │ │ ├── package.json
│ │ │ │ └── readme.md
│ │ │ ├── mime-db
│ │ │ │ ├── db.json
│ │ │ │ ├── HISTORY.md
│ │ │ │ ├── index.js
│ │ │ │ ├── LICENSE
│ │ │ │ ├── package.json
│ │ │ │ └── README.md
│ │ │ ├── mime-types
│ │ │ │ ├── HISTORY.md
│ │ │ │ ├── index.js
│ │ │ │ ├── LICENSE
│ │ │ │ ├── mimeScore.js
│ │ │ │ ├── package.json
│ │ │ │ └── README.md
│ │ │ ├── ms
│ │ │ │ ├── index.js
│ │ │ │ ├── license.md
│ │ │ │ ├── package.json
│ │ │ │ └── readme.md
│ │ │ ├── negotiator
│ │ │ │ ├── HISTORY.md
│ │ │ │ ├── index.js
│ │ │ │ ├── lib
│ │ │ │ │ ├── charset.js
│ │ │ │ │ ├── encoding.js
│ │ │ │ │ ├── language.js
│ │ │ │ │ └── mediaType.js
│ │ │ │ ├── LICENSE
│ │ │ │ ├── package.json
│ │ │ │ └── README.md
│ │ │ ├── raw-body
│ │ │ │ ├── HISTORY.md
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.js
│ │ │ │ ├── LICENSE
│ │ │ │ ├── package.json
│ │ │ │ ├── README.md
│ │ │ │ └── SECURITY.md
│ │ │ ├── send
│ │ │ │ ├── HISTORY.md
│ │ │ │ ├── index.js
│ │ │ │ ├── LICENSE
│ │ │ │ ├── node_modules
│ │ │ │ │ ├── fresh
│ │ │ │ │ │ ├── HISTORY.md
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ ├── LICENSE
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── mime-db
│ │ │ │ │ │ ├── db.json
│ │ │ │ │ │ ├── HISTORY.md
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ ├── LICENSE
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── mime-types
│ │ │ │ │ │ ├── HISTORY.md
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ ├── LICENSE
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── README.md
│ │ │ │ │ └── ms
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── license.md
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── readme.md
│ │ │ │ ├── package.json
│ │ │ │ ├── README.md
│ │ │ │ └── SECURITY.md
│ │ │ ├── serve-static
│ │ │ │ ├── HISTORY.md
│ │ │ │ ├── index.js
│ │ │ │ ├── LICENSE
│ │ │ │ ├── package.json
│ │ │ │ └── README.md
│ │ │ └── type-is
│ │ │ ├── HISTORY.md
│ │ │ ├── index.js
│ │ │ ├── LICENSE
│ │ │ ├── package.json
│ │ │ └── README.md
│ │ ├── package.json
│ │ └── README.md
│ ├── accepts
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── ansi-regex
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── license
│ │ ├── package.json
│ │ └── readme.md
│ ├── ansi-styles
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── license
│ │ ├── package.json
│ │ └── readme.md
│ ├── array-flatten
│ │ ├── array-flatten.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── body-parser
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── lib
│ │ │ ├── read.js
│ │ │ └── types
│ │ │ ├── json.js
│ │ │ ├── raw.js
│ │ │ ├── text.js
│ │ │ └── urlencoded.js
│ │ ├── LICENSE
│ │ ├── node_modules
│ │ │ └── iconv-lite
│ │ │ ├── Changelog.md
│ │ │ ├── encodings
│ │ │ │ ├── dbcs-codec.js
│ │ │ │ ├── dbcs-data.js
│ │ │ │ ├── index.js
│ │ │ │ ├── internal.js
│ │ │ │ ├── sbcs-codec.js
│ │ │ │ ├── sbcs-data-generated.js
│ │ │ │ ├── sbcs-data.js
│ │ │ │ ├── tables
│ │ │ │ │ ├── big5-added.json
│ │ │ │ │ ├── cp936.json
│ │ │ │ │ ├── cp949.json
│ │ │ │ │ ├── cp950.json
│ │ │ │ │ ├── eucjp.json
│ │ │ │ │ ├── gb18030-ranges.json
│ │ │ │ │ ├── gbk-added.json
│ │ │ │ │ └── shiftjis.json
│ │ │ │ ├── utf16.js
│ │ │ │ └── utf7.js
│ │ │ ├── lib
│ │ │ │ ├── bom-handling.js
│ │ │ │ ├── extend-node.js
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.js
│ │ │ │ └── streams.js
│ │ │ ├── LICENSE
│ │ │ ├── package.json
│ │ │ └── README.md
│ │ ├── package.json
│ │ ├── README.md
│ │ └── SECURITY.md
│ ├── boolbase
│ │ ├── index.js
│ │ ├── package.json
│ │ └── README.md
│ ├── bytes
│ │ ├── History.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── Readme.md
│ ├── call-bind-apply-helpers
│ │ ├── .eslintrc
│ │ ├── .github
│ │ │ └── FUNDING.yml
│ │ ├── .nycrc
│ │ ├── actualApply.d.ts
│ │ ├── actualApply.js
│ │ ├── applyBind.d.ts
│ │ ├── applyBind.js
│ │ ├── CHANGELOG.md
│ │ ├── functionApply.d.ts
│ │ ├── functionApply.js
│ │ ├── functionCall.d.ts
│ │ ├── functionCall.js
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── reflectApply.d.ts
│ │ ├── reflectApply.js
│ │ ├── test
│ │ │ └── index.js
│ │ └── tsconfig.json
│ ├── call-bound
│ │ ├── .eslintrc
│ │ ├── .github
│ │ │ └── FUNDING.yml
│ │ ├── .nycrc
│ │ ├── CHANGELOG.md
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── test
│ │ │ └── index.js
│ │ └── tsconfig.json
│ ├── cheerio
│ │ ├── dist
│ │ │ ├── browser
│ │ │ │ ├── api
│ │ │ │ │ ├── attributes.d.ts
│ │ │ │ │ ├── attributes.d.ts.map
│ │ │ │ │ ├── attributes.js
│ │ │ │ │ ├── attributes.js.map
│ │ │ │ │ ├── css.d.ts
│ │ │ │ │ ├── css.d.ts.map
│ │ │ │ │ ├── css.js
│ │ │ │ │ ├── css.js.map
│ │ │ │ │ ├── extract.d.ts
│ │ │ │ │ ├── extract.d.ts.map
│ │ │ │ │ ├── extract.js
│ │ │ │ │ ├── extract.js.map
│ │ │ │ │ ├── forms.d.ts
│ │ │ │ │ ├── forms.d.ts.map
│ │ │ │ │ ├── forms.js
│ │ │ │ │ ├── forms.js.map
│ │ │ │ │ ├── manipulation.d.ts
│ │ │ │ │ ├── manipulation.d.ts.map
│ │ │ │ │ ├── manipulation.js
│ │ │ │ │ ├── manipulation.js.map
│ │ │ │ │ ├── traversing.d.ts
│ │ │ │ │ ├── traversing.d.ts.map
│ │ │ │ │ ├── traversing.js
│ │ │ │ │ └── traversing.js.map
│ │ │ │ ├── cheerio.d.ts
│ │ │ │ ├── cheerio.d.ts.map
│ │ │ │ ├── cheerio.js
│ │ │ │ ├── cheerio.js.map
│ │ │ │ ├── index-browser.d.mts.map
│ │ │ │ ├── index-browser.mjs.map
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.js
│ │ │ │ ├── load-parse.d.ts
│ │ │ │ ├── load-parse.d.ts.map
│ │ │ │ ├── load-parse.js
│ │ │ │ ├── load-parse.js.map
│ │ │ │ ├── load.d.ts
│ │ │ │ ├── load.d.ts.map
│ │ │ │ ├── load.js
│ │ │ │ ├── load.js.map
│ │ │ │ ├── options.d.ts
│ │ │ │ ├── options.d.ts.map
│ │ │ │ ├── options.js
│ │ │ │ ├── options.js.map
│ │ │ │ ├── package.json
│ │ │ │ ├── parse.d.ts
│ │ │ │ ├── parse.d.ts.map
│ │ │ │ ├── parse.js
│ │ │ │ ├── parse.js.map
│ │ │ │ ├── parsers
│ │ │ │ │ ├── parse5-adapter.d.ts
│ │ │ │ │ ├── parse5-adapter.d.ts.map
│ │ │ │ │ ├── parse5-adapter.js
│ │ │ │ │ └── parse5-adapter.js.map
│ │ │ │ ├── slim.d.ts
│ │ │ │ ├── slim.d.ts.map
│ │ │ │ ├── slim.js
│ │ │ │ ├── slim.js.map
│ │ │ │ ├── static.d.ts
│ │ │ │ ├── static.d.ts.map
│ │ │ │ ├── static.js
│ │ │ │ ├── static.js.map
│ │ │ │ ├── types.d.ts
│ │ │ │ ├── types.d.ts.map
│ │ │ │ ├── types.js
│ │ │ │ ├── types.js.map
│ │ │ │ ├── utils.d.ts
│ │ │ │ ├── utils.d.ts.map
│ │ │ │ ├── utils.js
│ │ │ │ └── utils.js.map
│ │ │ ├── commonjs
│ │ │ │ ├── api
│ │ │ │ │ ├── attributes.d.ts
│ │ │ │ │ ├── attributes.d.ts.map
│ │ │ │ │ ├── attributes.js
│ │ │ │ │ ├── attributes.js.map
│ │ │ │ │ ├── css.d.ts
│ │ │ │ │ ├── css.d.ts.map
│ │ │ │ │ ├── css.js
│ │ │ │ │ ├── css.js.map
│ │ │ │ │ ├── extract.d.ts
│ │ │ │ │ ├── extract.d.ts.map
│ │ │ │ │ ├── extract.js
│ │ │ │ │ ├── extract.js.map
│ │ │ │ │ ├── forms.d.ts
│ │ │ │ │ ├── forms.d.ts.map
│ │ │ │ │ ├── forms.js
│ │ │ │ │ ├── forms.js.map
│ │ │ │ │ ├── manipulation.d.ts
│ │ │ │ │ ├── manipulation.d.ts.map
│ │ │ │ │ ├── manipulation.js
│ │ │ │ │ ├── manipulation.js.map
│ │ │ │ │ ├── traversing.d.ts
│ │ │ │ │ ├── traversing.d.ts.map
│ │ │ │ │ ├── traversing.js
│ │ │ │ │ └── traversing.js.map
│ │ │ │ ├── cheerio.d.ts
│ │ │ │ ├── cheerio.d.ts.map
│ │ │ │ ├── cheerio.js
│ │ │ │ ├── cheerio.js.map
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.d.ts.map
│ │ │ │ ├── index.js
│ │ │ │ ├── index.js.map
│ │ │ │ ├── load-parse.d.ts
│ │ │ │ ├── load-parse.d.ts.map
│ │ │ │ ├── load-parse.js
│ │ │ │ ├── load-parse.js.map
│ │ │ │ ├── load.d.ts
│ │ │ │ ├── load.d.ts.map
│ │ │ │ ├── load.js
│ │ │ │ ├── load.js.map
│ │ │ │ ├── options.d.ts
│ │ │ │ ├── options.d.ts.map
│ │ │ │ ├── options.js
│ │ │ │ ├── options.js.map
│ │ │ │ ├── package.json
│ │ │ │ ├── parse.d.ts
│ │ │ │ ├── parse.d.ts.map
│ │ │ │ ├── parse.js
│ │ │ │ ├── parse.js.map
│ │ │ │ ├── parsers
│ │ │ │ │ ├── parse5-adapter.d.ts
│ │ │ │ │ ├── parse5-adapter.d.ts.map
│ │ │ │ │ ├── parse5-adapter.js
│ │ │ │ │ └── parse5-adapter.js.map
│ │ │ │ ├── slim.d.ts
│ │ │ │ ├── slim.d.ts.map
│ │ │ │ ├── slim.js
│ │ │ │ ├── slim.js.map
│ │ │ │ ├── static.d.ts
│ │ │ │ ├── static.d.ts.map
│ │ │ │ ├── static.js
│ │ │ │ ├── static.js.map
│ │ │ │ ├── types.d.ts
│ │ │ │ ├── types.d.ts.map
│ │ │ │ ├── types.js
│ │ │ │ ├── types.js.map
│ │ │ │ ├── utils.d.ts
│ │ │ │ ├── utils.d.ts.map
│ │ │ │ ├── utils.js
│ │ │ │ └── utils.js.map
│ │ │ └── esm
│ │ │ ├── api
│ │ │ │ ├── attributes.d.ts
│ │ │ │ ├── attributes.d.ts.map
│ │ │ │ ├── attributes.js
│ │ │ │ ├── attributes.js.map
│ │ │ │ ├── css.d.ts
│ │ │ │ ├── css.d.ts.map
│ │ │ │ ├── css.js
│ │ │ │ ├── css.js.map
│ │ │ │ ├── extract.d.ts
│ │ │ │ ├── extract.d.ts.map
│ │ │ │ ├── extract.js
│ │ │ │ ├── extract.js.map
│ │ │ │ ├── forms.d.ts
│ │ │ │ ├── forms.d.ts.map
│ │ │ │ ├── forms.js
│ │ │ │ ├── forms.js.map
│ │ │ │ ├── manipulation.d.ts
│ │ │ │ ├── manipulation.d.ts.map
│ │ │ │ ├── manipulation.js
│ │ │ │ ├── manipulation.js.map
│ │ │ │ ├── traversing.d.ts
│ │ │ │ ├── traversing.d.ts.map
│ │ │ │ ├── traversing.js
│ │ │ │ └── traversing.js.map
│ │ │ ├── cheerio.d.ts
│ │ │ ├── cheerio.d.ts.map
│ │ │ ├── cheerio.js
│ │ │ ├── cheerio.js.map
│ │ │ ├── index.d.ts
│ │ │ ├── index.d.ts.map
│ │ │ ├── index.js
│ │ │ ├── index.js.map
│ │ │ ├── load-parse.d.ts
│ │ │ ├── load-parse.d.ts.map
│ │ │ ├── load-parse.js
│ │ │ ├── load-parse.js.map
│ │ │ ├── load.d.ts
│ │ │ ├── load.d.ts.map
│ │ │ ├── load.js
│ │ │ ├── load.js.map
│ │ │ ├── options.d.ts
│ │ │ ├── options.d.ts.map
│ │ │ ├── options.js
│ │ │ ├── options.js.map
│ │ │ ├── package.json
│ │ │ ├── parse.d.ts
│ │ │ ├── parse.d.ts.map
│ │ │ ├── parse.js
│ │ │ ├── parse.js.map
│ │ │ ├── parsers
│ │ │ │ ├── parse5-adapter.d.ts
│ │ │ │ ├── parse5-adapter.d.ts.map
│ │ │ │ ├── parse5-adapter.js
│ │ │ │ └── parse5-adapter.js.map
│ │ │ ├── slim.d.ts
│ │ │ ├── slim.d.ts.map
│ │ │ ├── slim.js
│ │ │ ├── slim.js.map
│ │ │ ├── static.d.ts
│ │ │ ├── static.d.ts.map
│ │ │ ├── static.js
│ │ │ ├── static.js.map
│ │ │ ├── types.d.ts
│ │ │ ├── types.d.ts.map
│ │ │ ├── types.js
│ │ │ ├── types.js.map
│ │ │ ├── utils.d.ts
│ │ │ ├── utils.d.ts.map
│ │ │ ├── utils.js
│ │ │ └── utils.js.map
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── Readme.md
│ │ └── src
│ │ ├── __fixtures__
│ │ │ └── fixtures.ts
│ │ ├── __tests__
│ │ │ ├── deprecated.spec.ts
│ │ │ └── xml.spec.ts
│ │ ├── api
│ │ │ ├── attributes.spec.ts
│ │ │ ├── attributes.ts
│ │ │ ├── css.spec.ts
│ │ │ ├── css.ts
│ │ │ ├── extract.spec.ts
│ │ │ ├── extract.ts
│ │ │ ├── forms.spec.ts
│ │ │ ├── forms.ts
│ │ │ ├── manipulation.spec.ts
│ │ │ ├── manipulation.ts
│ │ │ ├── traversing.spec.ts
│ │ │ └── traversing.ts
│ │ ├── cheerio.spec.ts
│ │ ├── cheerio.ts
│ │ ├── index-browser.mts
│ │ ├── index.spec.ts
│ │ ├── index.ts
│ │ ├── load-parse.ts
│ │ ├── load.spec.ts
│ │ ├── load.ts
│ │ ├── options.ts
│ │ ├── parse.spec.ts
│ │ ├── parse.ts
│ │ ├── parsers
│ │ │ └── parse5-adapter.ts
│ │ ├── slim.ts
│ │ ├── static.spec.ts
│ │ ├── static.ts
│ │ ├── types.ts
│ │ ├── utils.spec.ts
│ │ └── utils.ts
│ ├── cheerio-select
│ │ ├── lib
│ │ │ ├── esm
│ │ │ │ ├── helpers.d.ts
│ │ │ │ ├── helpers.d.ts.map
│ │ │ │ ├── helpers.js
│ │ │ │ ├── helpers.js.map
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.d.ts.map
│ │ │ │ ├── index.js
│ │ │ │ ├── index.js.map
│ │ │ │ ├── package.json
│ │ │ │ ├── positionals.d.ts
│ │ │ │ ├── positionals.d.ts.map
│ │ │ │ ├── positionals.js
│ │ │ │ └── positionals.js.map
│ │ │ ├── helpers.d.ts
│ │ │ ├── helpers.d.ts.map
│ │ │ ├── helpers.js
│ │ │ ├── helpers.js.map
│ │ │ ├── index.d.ts
│ │ │ ├── index.d.ts.map
│ │ │ ├── index.js
│ │ │ ├── index.js.map
│ │ │ ├── positionals.d.ts
│ │ │ ├── positionals.d.ts.map
│ │ │ ├── positionals.js
│ │ │ └── positionals.js.map
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── cliui
│ │ ├── build
│ │ │ ├── index.cjs
│ │ │ ├── index.d.cts
│ │ │ └── lib
│ │ │ ├── index.js
│ │ │ └── string-utils.js
│ │ ├── CHANGELOG.md
│ │ ├── index.mjs
│ │ ├── LICENSE.txt
│ │ ├── package.json
│ │ └── README.md
│ ├── color-convert
│ │ ├── CHANGELOG.md
│ │ ├── conversions.js
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ └── route.js
│ ├── color-name
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── content-disposition
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── content-type
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── cookie
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ └── SECURITY.md
│ ├── cookie-signature
│ │ ├── .npmignore
│ │ ├── History.md
│ │ ├── index.js
│ │ ├── package.json
│ │ └── Readme.md
│ ├── cors
│ │ ├── CONTRIBUTING.md
│ │ ├── HISTORY.md
│ │ ├── lib
│ │ │ └── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── css-select
│ │ ├── lib
│ │ │ ├── attributes.d.ts
│ │ │ ├── attributes.d.ts.map
│ │ │ ├── attributes.js
│ │ │ ├── attributes.js.map
│ │ │ ├── compile.d.ts
│ │ │ ├── compile.d.ts.map
│ │ │ ├── compile.js
│ │ │ ├── compile.js.map
│ │ │ ├── esm
│ │ │ │ ├── attributes.d.ts
│ │ │ │ ├── attributes.d.ts.map
│ │ │ │ ├── attributes.js
│ │ │ │ ├── attributes.js.map
│ │ │ │ ├── compile.d.ts
│ │ │ │ ├── compile.d.ts.map
│ │ │ │ ├── compile.js
│ │ │ │ ├── compile.js.map
│ │ │ │ ├── general.d.ts
│ │ │ │ ├── general.d.ts.map
│ │ │ │ ├── general.js
│ │ │ │ ├── general.js.map
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.d.ts.map
│ │ │ │ ├── index.js
│ │ │ │ ├── index.js.map
│ │ │ │ ├── package.json
│ │ │ │ ├── pseudo-selectors
│ │ │ │ │ ├── aliases.d.ts
│ │ │ │ │ ├── aliases.d.ts.map
│ │ │ │ │ ├── aliases.js
│ │ │ │ │ ├── aliases.js.map
│ │ │ │ │ ├── filters.d.ts
│ │ │ │ │ ├── filters.d.ts.map
│ │ │ │ │ ├── filters.js
│ │ │ │ │ ├── filters.js.map
│ │ │ │ │ ├── index.d.ts
│ │ │ │ │ ├── index.d.ts.map
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── index.js.map
│ │ │ │ │ ├── pseudos.d.ts
│ │ │ │ │ ├── pseudos.d.ts.map
│ │ │ │ │ ├── pseudos.js
│ │ │ │ │ ├── pseudos.js.map
│ │ │ │ │ ├── subselects.d.ts
│ │ │ │ │ ├── subselects.d.ts.map
│ │ │ │ │ ├── subselects.js
│ │ │ │ │ └── subselects.js.map
│ │ │ │ ├── sort.d.ts
│ │ │ │ ├── sort.d.ts.map
│ │ │ │ ├── sort.js
│ │ │ │ ├── sort.js.map
│ │ │ │ ├── types.d.ts
│ │ │ │ ├── types.d.ts.map
│ │ │ │ ├── types.js
│ │ │ │ └── types.js.map
│ │ │ ├── general.d.ts
│ │ │ ├── general.d.ts.map
│ │ │ ├── general.js
│ │ │ ├── general.js.map
│ │ │ ├── index.d.ts
│ │ │ ├── index.d.ts.map
│ │ │ ├── index.js
│ │ │ ├── index.js.map
│ │ │ ├── pseudo-selectors
│ │ │ │ ├── aliases.d.ts
│ │ │ │ ├── aliases.d.ts.map
│ │ │ │ ├── aliases.js
│ │ │ │ ├── aliases.js.map
│ │ │ │ ├── filters.d.ts
│ │ │ │ ├── filters.d.ts.map
│ │ │ │ ├── filters.js
│ │ │ │ ├── filters.js.map
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.d.ts.map
│ │ │ │ ├── index.js
│ │ │ │ ├── index.js.map
│ │ │ │ ├── pseudos.d.ts
│ │ │ │ ├── pseudos.d.ts.map
│ │ │ │ ├── pseudos.js
│ │ │ │ ├── pseudos.js.map
│ │ │ │ ├── subselects.d.ts
│ │ │ │ ├── subselects.d.ts.map
│ │ │ │ ├── subselects.js
│ │ │ │ └── subselects.js.map
│ │ │ ├── sort.d.ts
│ │ │ ├── sort.d.ts.map
│ │ │ ├── sort.js
│ │ │ ├── sort.js.map
│ │ │ ├── types.d.ts
│ │ │ ├── types.d.ts.map
│ │ │ ├── types.js
│ │ │ └── types.js.map
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── css-what
│ │ ├── lib
│ │ │ ├── commonjs
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.d.ts.map
│ │ │ │ ├── index.js
│ │ │ │ ├── parse.d.ts
│ │ │ │ ├── parse.d.ts.map
│ │ │ │ ├── parse.js
│ │ │ │ ├── stringify.d.ts
│ │ │ │ ├── stringify.d.ts.map
│ │ │ │ ├── stringify.js
│ │ │ │ ├── types.d.ts
│ │ │ │ ├── types.d.ts.map
│ │ │ │ └── types.js
│ │ │ └── es
│ │ │ ├── index.d.ts
│ │ │ ├── index.d.ts.map
│ │ │ ├── index.js
│ │ │ ├── parse.d.ts
│ │ │ ├── parse.d.ts.map
│ │ │ ├── parse.js
│ │ │ ├── stringify.d.ts
│ │ │ ├── stringify.d.ts.map
│ │ │ ├── stringify.js
│ │ │ ├── types.d.ts
│ │ │ ├── types.d.ts.map
│ │ │ └── types.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── readme.md
│ ├── debug
│ │ ├── .coveralls.yml
│ │ ├── .eslintrc
│ │ ├── .npmignore
│ │ ├── .travis.yml
│ │ ├── CHANGELOG.md
│ │ ├── component.json
│ │ ├── karma.conf.js
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── node.js
│ │ ├── package.json
│ │ ├── README.md
│ │ └── src
│ │ ├── browser.js
│ │ ├── debug.js
│ │ ├── index.js
│ │ ├── inspector-log.js
│ │ └── node.js
│ ├── depd
│ │ ├── History.md
│ │ ├── index.js
│ │ ├── lib
│ │ │ └── browser
│ │ │ └── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── Readme.md
│ ├── destroy
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── dom-serializer
│ │ ├── lib
│ │ │ ├── esm
│ │ │ │ ├── foreignNames.d.ts
│ │ │ │ ├── foreignNames.d.ts.map
│ │ │ │ ├── foreignNames.js
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.d.ts.map
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── foreignNames.d.ts
│ │ │ ├── foreignNames.d.ts.map
│ │ │ ├── foreignNames.js
│ │ │ ├── index.d.ts
│ │ │ ├── index.d.ts.map
│ │ │ └── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── domelementtype
│ │ ├── lib
│ │ │ ├── esm
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.d.ts.map
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── index.d.ts
│ │ │ ├── index.d.ts.map
│ │ │ └── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── readme.md
│ ├── domhandler
│ │ ├── lib
│ │ │ ├── esm
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.d.ts.map
│ │ │ │ ├── index.js
│ │ │ │ ├── node.d.ts
│ │ │ │ ├── node.d.ts.map
│ │ │ │ ├── node.js
│ │ │ │ └── package.json
│ │ │ ├── index.d.ts
│ │ │ ├── index.d.ts.map
│ │ │ ├── index.js
│ │ │ ├── node.d.ts
│ │ │ ├── node.d.ts.map
│ │ │ └── node.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── readme.md
│ ├── domutils
│ │ ├── lib
│ │ │ ├── esm
│ │ │ │ ├── feeds.d.ts
│ │ │ │ ├── feeds.d.ts.map
│ │ │ │ ├── feeds.js
│ │ │ │ ├── feeds.js.map
│ │ │ │ ├── helpers.d.ts
│ │ │ │ ├── helpers.d.ts.map
│ │ │ │ ├── helpers.js
│ │ │ │ ├── helpers.js.map
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.d.ts.map
│ │ │ │ ├── index.js
│ │ │ │ ├── index.js.map
│ │ │ │ ├── legacy.d.ts
│ │ │ │ ├── legacy.d.ts.map
│ │ │ │ ├── legacy.js
│ │ │ │ ├── legacy.js.map
│ │ │ │ ├── manipulation.d.ts
│ │ │ │ ├── manipulation.d.ts.map
│ │ │ │ ├── manipulation.js
│ │ │ │ ├── manipulation.js.map
│ │ │ │ ├── package.json
│ │ │ │ ├── querying.d.ts
│ │ │ │ ├── querying.d.ts.map
│ │ │ │ ├── querying.js
│ │ │ │ ├── querying.js.map
│ │ │ │ ├── stringify.d.ts
│ │ │ │ ├── stringify.d.ts.map
│ │ │ │ ├── stringify.js
│ │ │ │ ├── stringify.js.map
│ │ │ │ ├── traversal.d.ts
│ │ │ │ ├── traversal.d.ts.map
│ │ │ │ ├── traversal.js
│ │ │ │ └── traversal.js.map
│ │ │ ├── feeds.d.ts
│ │ │ ├── feeds.d.ts.map
│ │ │ ├── feeds.js
│ │ │ ├── feeds.js.map
│ │ │ ├── helpers.d.ts
│ │ │ ├── helpers.d.ts.map
│ │ │ ├── helpers.js
│ │ │ ├── helpers.js.map
│ │ │ ├── index.d.ts
│ │ │ ├── index.d.ts.map
│ │ │ ├── index.js
│ │ │ ├── index.js.map
│ │ │ ├── legacy.d.ts
│ │ │ ├── legacy.d.ts.map
│ │ │ ├── legacy.js
│ │ │ ├── legacy.js.map
│ │ │ ├── manipulation.d.ts
│ │ │ ├── manipulation.d.ts.map
│ │ │ ├── manipulation.js
│ │ │ ├── manipulation.js.map
│ │ │ ├── querying.d.ts
│ │ │ ├── querying.d.ts.map
│ │ │ ├── querying.js
│ │ │ ├── querying.js.map
│ │ │ ├── stringify.d.ts
│ │ │ ├── stringify.d.ts.map
│ │ │ ├── stringify.js
│ │ │ ├── stringify.js.map
│ │ │ ├── traversal.d.ts
│ │ │ ├── traversal.d.ts.map
│ │ │ ├── traversal.js
│ │ │ └── traversal.js.map
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── readme.md
│ ├── dunder-proto
│ │ ├── .eslintrc
│ │ ├── .github
│ │ │ └── FUNDING.yml
│ │ ├── .nycrc
│ │ ├── CHANGELOG.md
│ │ ├── get.d.ts
│ │ ├── get.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── set.d.ts
│ │ ├── set.js
│ │ ├── test
│ │ │ ├── get.js
│ │ │ ├── index.js
│ │ │ └── set.js
│ │ └── tsconfig.json
│ ├── ee-first
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── emoji-regex
│ │ ├── es2015
│ │ │ ├── index.js
│ │ │ └── text.js
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── LICENSE-MIT.txt
│ │ ├── package.json
│ │ ├── README.md
│ │ └── text.js
│ ├── encodeurl
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── encoding-sniffer
│ │ ├── dist
│ │ │ ├── commonjs
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.d.ts.map
│ │ │ │ ├── index.js
│ │ │ │ ├── index.js.map
│ │ │ │ ├── package.json
│ │ │ │ ├── sniffer.d.ts
│ │ │ │ ├── sniffer.d.ts.map
│ │ │ │ ├── sniffer.js
│ │ │ │ └── sniffer.js.map
│ │ │ └── esm
│ │ │ ├── index.d.ts
│ │ │ ├── index.d.ts.map
│ │ │ ├── index.js
│ │ │ ├── index.js.map
│ │ │ ├── package.json
│ │ │ ├── sniffer.d.ts
│ │ │ ├── sniffer.d.ts.map
│ │ │ ├── sniffer.js
│ │ │ └── sniffer.js.map
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── entities
│ │ ├── lib
│ │ │ ├── decode_codepoint.d.ts
│ │ │ ├── decode_codepoint.d.ts.map
│ │ │ ├── decode_codepoint.js
│ │ │ ├── decode_codepoint.js.map
│ │ │ ├── decode.d.ts
│ │ │ ├── decode.d.ts.map
│ │ │ ├── decode.js
│ │ │ ├── decode.js.map
│ │ │ ├── encode.d.ts
│ │ │ ├── encode.d.ts.map
│ │ │ ├── encode.js
│ │ │ ├── encode.js.map
│ │ │ ├── escape.d.ts
│ │ │ ├── escape.d.ts.map
│ │ │ ├── escape.js
│ │ │ ├── escape.js.map
│ │ │ ├── esm
│ │ │ │ ├── decode_codepoint.d.ts
│ │ │ │ ├── decode_codepoint.d.ts.map
│ │ │ │ ├── decode_codepoint.js
│ │ │ │ ├── decode_codepoint.js.map
│ │ │ │ ├── decode.d.ts
│ │ │ │ ├── decode.d.ts.map
│ │ │ │ ├── decode.js
│ │ │ │ ├── decode.js.map
│ │ │ │ ├── encode.d.ts
│ │ │ │ ├── encode.d.ts.map
│ │ │ │ ├── encode.js
│ │ │ │ ├── encode.js.map
│ │ │ │ ├── escape.d.ts
│ │ │ │ ├── escape.d.ts.map
│ │ │ │ ├── escape.js
│ │ │ │ ├── escape.js.map
│ │ │ │ ├── generated
│ │ │ │ │ ├── decode-data-html.d.ts
│ │ │ │ │ ├── decode-data-html.d.ts.map
│ │ │ │ │ ├── decode-data-html.js
│ │ │ │ │ ├── decode-data-html.js.map
│ │ │ │ │ ├── decode-data-xml.d.ts
│ │ │ │ │ ├── decode-data-xml.d.ts.map
│ │ │ │ │ ├── decode-data-xml.js
│ │ │ │ │ ├── decode-data-xml.js.map
│ │ │ │ │ ├── encode-html.d.ts
│ │ │ │ │ ├── encode-html.d.ts.map
│ │ │ │ │ ├── encode-html.js
│ │ │ │ │ └── encode-html.js.map
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.d.ts.map
│ │ │ │ ├── index.js
│ │ │ │ ├── index.js.map
│ │ │ │ └── package.json
│ │ │ ├── generated
│ │ │ │ ├── decode-data-html.d.ts
│ │ │ │ ├── decode-data-html.d.ts.map
│ │ │ │ ├── decode-data-html.js
│ │ │ │ ├── decode-data-html.js.map
│ │ │ │ ├── decode-data-xml.d.ts
│ │ │ │ ├── decode-data-xml.d.ts.map
│ │ │ │ ├── decode-data-xml.js
│ │ │ │ ├── decode-data-xml.js.map
│ │ │ │ ├── encode-html.d.ts
│ │ │ │ ├── encode-html.d.ts.map
│ │ │ │ ├── encode-html.js
│ │ │ │ └── encode-html.js.map
│ │ │ ├── index.d.ts
│ │ │ ├── index.d.ts.map
│ │ │ ├── index.js
│ │ │ └── index.js.map
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── readme.md
│ ├── es-define-property
│ │ ├── .eslintrc
│ │ ├── .github
│ │ │ └── FUNDING.yml
│ │ ├── .nycrc
│ │ ├── CHANGELOG.md
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── test
│ │ │ └── index.js
│ │ └── tsconfig.json
│ ├── es-errors
│ │ ├── .eslintrc
│ │ ├── .github
│ │ │ └── FUNDING.yml
│ │ ├── CHANGELOG.md
│ │ ├── eval.d.ts
│ │ ├── eval.js
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── range.d.ts
│ │ ├── range.js
│ │ ├── README.md
│ │ ├── ref.d.ts
│ │ ├── ref.js
│ │ ├── syntax.d.ts
│ │ ├── syntax.js
│ │ ├── test
│ │ │ └── index.js
│ │ ├── tsconfig.json
│ │ ├── type.d.ts
│ │ ├── type.js
│ │ ├── uri.d.ts
│ │ └── uri.js
│ ├── es-object-atoms
│ │ ├── .eslintrc
│ │ ├── .github
│ │ │ └── FUNDING.yml
│ │ ├── CHANGELOG.md
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── isObject.d.ts
│ │ ├── isObject.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── RequireObjectCoercible.d.ts
│ │ ├── RequireObjectCoercible.js
│ │ ├── test
│ │ │ └── index.js
│ │ ├── ToObject.d.ts
│ │ ├── ToObject.js
│ │ └── tsconfig.json
│ ├── escalade
│ │ ├── dist
│ │ │ ├── index.js
│ │ │ └── index.mjs
│ │ ├── index.d.mts
│ │ ├── index.d.ts
│ │ ├── license
│ │ ├── package.json
│ │ ├── readme.md
│ │ └── sync
│ │ ├── index.d.mts
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ └── index.mjs
│ ├── escape-html
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── Readme.md
│ ├── etag
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── eventsource
│ │ ├── dist
│ │ │ ├── index.cjs
│ │ │ ├── index.cjs.map
│ │ │ ├── index.d.cts
│ │ │ ├── index.d.ts
│ │ │ ├── index.js
│ │ │ └── index.js.map
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ └── src
│ │ ├── errors.ts
│ │ ├── EventSource.ts
│ │ ├── index.ts
│ │ └── types.ts
│ ├── eventsource-parser
│ │ ├── dist
│ │ │ ├── index.cjs
│ │ │ ├── index.cjs.map
│ │ │ ├── index.d.cts
│ │ │ ├── index.d.ts
│ │ │ ├── index.esm.js
│ │ │ ├── index.esm.js.map
│ │ │ ├── index.js
│ │ │ ├── index.js.map
│ │ │ ├── stats.html
│ │ │ ├── stream.cjs
│ │ │ ├── stream.cjs.map
│ │ │ ├── stream.d.cts
│ │ │ ├── stream.d.ts
│ │ │ ├── stream.esm.js
│ │ │ ├── stream.esm.js.map
│ │ │ ├── stream.js
│ │ │ └── stream.js.map
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── src
│ │ │ ├── errors.ts
│ │ │ ├── index.ts
│ │ │ ├── parse.ts
│ │ │ ├── stream.ts
│ │ │ └── types.ts
│ │ └── stream.js
│ ├── express
│ │ ├── History.md
│ │ ├── index.js
│ │ ├── lib
│ │ │ ├── application.js
│ │ │ ├── express.js
│ │ │ ├── middleware
│ │ │ │ ├── init.js
│ │ │ │ └── query.js
│ │ │ ├── request.js
│ │ │ ├── response.js
│ │ │ ├── router
│ │ │ │ ├── index.js
│ │ │ │ ├── layer.js
│ │ │ │ └── route.js
│ │ │ ├── utils.js
│ │ │ └── view.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── Readme.md
│ ├── express-rate-limit
│ │ ├── dist
│ │ │ ├── index.cjs
│ │ │ ├── index.d.cts
│ │ │ ├── index.d.mts
│ │ │ ├── index.d.ts
│ │ │ └── index.mjs
│ │ ├── license.md
│ │ ├── package.json
│ │ ├── readme.md
│ │ └── tsconfig.json
│ ├── finalhandler
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ └── SECURITY.md
│ ├── forwarded
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── fresh
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── function-bind
│ │ ├── .eslintrc
│ │ ├── .github
│ │ │ ├── FUNDING.yml
│ │ │ └── SECURITY.md
│ │ ├── .nycrc
│ │ ├── CHANGELOG.md
│ │ ├── implementation.js
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ └── test
│ │ ├── .eslintrc
│ │ └── index.js
│ ├── get-caller-file
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── index.js.map
│ │ ├── LICENSE.md
│ │ ├── package.json
│ │ └── README.md
│ ├── get-intrinsic
│ │ ├── .eslintrc
│ │ ├── .github
│ │ │ └── FUNDING.yml
│ │ ├── .nycrc
│ │ ├── CHANGELOG.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ └── test
│ │ └── GetIntrinsic.js
│ ├── get-proto
│ │ ├── .eslintrc
│ │ ├── .github
│ │ │ └── FUNDING.yml
│ │ ├── .nycrc
│ │ ├── CHANGELOG.md
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── Object.getPrototypeOf.d.ts
│ │ ├── Object.getPrototypeOf.js
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── Reflect.getPrototypeOf.d.ts
│ │ ├── Reflect.getPrototypeOf.js
│ │ ├── test
│ │ │ └── index.js
│ │ └── tsconfig.json
│ ├── gopd
│ │ ├── .eslintrc
│ │ ├── .github
│ │ │ └── FUNDING.yml
│ │ ├── CHANGELOG.md
│ │ ├── gOPD.d.ts
│ │ ├── gOPD.js
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── test
│ │ │ └── index.js
│ │ └── tsconfig.json
│ ├── has-symbols
│ │ ├── .eslintrc
│ │ ├── .github
│ │ │ └── FUNDING.yml
│ │ ├── .nycrc
│ │ ├── CHANGELOG.md
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── shams.d.ts
│ │ ├── shams.js
│ │ ├── test
│ │ │ ├── index.js
│ │ │ ├── shams
│ │ │ │ ├── core-js.js
│ │ │ │ └── get-own-property-symbols.js
│ │ │ └── tests.js
│ │ └── tsconfig.json
│ ├── hasown
│ │ ├── .eslintrc
│ │ ├── .github
│ │ │ └── FUNDING.yml
│ │ ├── .nycrc
│ │ ├── CHANGELOG.md
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ └── tsconfig.json
│ ├── htmlparser2
│ │ ├── lib
│ │ │ ├── esm
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.d.ts.map
│ │ │ │ ├── index.js
│ │ │ │ ├── index.js.map
│ │ │ │ ├── package.json
│ │ │ │ ├── Parser.d.ts
│ │ │ │ ├── Parser.d.ts.map
│ │ │ │ ├── Parser.js
│ │ │ │ ├── Parser.js.map
│ │ │ │ ├── Tokenizer.d.ts
│ │ │ │ ├── Tokenizer.d.ts.map
│ │ │ │ ├── Tokenizer.js
│ │ │ │ ├── Tokenizer.js.map
│ │ │ │ ├── WritableStream.d.ts
│ │ │ │ ├── WritableStream.d.ts.map
│ │ │ │ ├── WritableStream.js
│ │ │ │ └── WritableStream.js.map
│ │ │ ├── index.d.ts
│ │ │ ├── index.d.ts.map
│ │ │ ├── index.js
│ │ │ ├── index.js.map
│ │ │ ├── Parser.d.ts
│ │ │ ├── Parser.d.ts.map
│ │ │ ├── Parser.js
│ │ │ ├── Parser.js.map
│ │ │ ├── Tokenizer.d.ts
│ │ │ ├── Tokenizer.d.ts.map
│ │ │ ├── Tokenizer.js
│ │ │ ├── Tokenizer.js.map
│ │ │ ├── WritableStream.d.ts
│ │ │ ├── WritableStream.d.ts.map
│ │ │ ├── WritableStream.js
│ │ │ └── WritableStream.js.map
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── http-errors
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── iconv-lite
│ │ ├── .github
│ │ │ └── dependabot.yml
│ │ ├── .idea
│ │ │ ├── codeStyles
│ │ │ │ ├── codeStyleConfig.xml
│ │ │ │ └── Project.xml
│ │ │ ├── iconv-lite.iml
│ │ │ ├── inspectionProfiles
│ │ │ │ └── Project_Default.xml
│ │ │ ├── modules.xml
│ │ │ └── vcs.xml
│ │ ├── Changelog.md
│ │ ├── encodings
│ │ │ ├── dbcs-codec.js
│ │ │ ├── dbcs-data.js
│ │ │ ├── index.js
│ │ │ ├── internal.js
│ │ │ ├── sbcs-codec.js
│ │ │ ├── sbcs-data-generated.js
│ │ │ ├── sbcs-data.js
│ │ │ ├── tables
│ │ │ │ ├── big5-added.json
│ │ │ │ ├── cp936.json
│ │ │ │ ├── cp949.json
│ │ │ │ ├── cp950.json
│ │ │ │ ├── eucjp.json
│ │ │ │ ├── gb18030-ranges.json
│ │ │ │ ├── gbk-added.json
│ │ │ │ └── shiftjis.json
│ │ │ ├── utf16.js
│ │ │ ├── utf32.js
│ │ │ └── utf7.js
│ │ ├── lib
│ │ │ ├── bom-handling.js
│ │ │ ├── index.d.ts
│ │ │ ├── index.js
│ │ │ └── streams.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── inherits
│ │ ├── inherits_browser.js
│ │ ├── inherits.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── ipaddr.js
│ │ ├── ipaddr.min.js
│ │ ├── lib
│ │ │ ├── ipaddr.js
│ │ │ └── ipaddr.js.d.ts
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── is-fullwidth-code-point
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── license
│ │ ├── package.json
│ │ └── readme.md
│ ├── is-promise
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── index.mjs
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── readme.md
│ ├── math-intrinsics
│ │ ├── .eslintrc
│ │ ├── .github
│ │ │ └── FUNDING.yml
│ │ ├── abs.d.ts
│ │ ├── abs.js
│ │ ├── CHANGELOG.md
│ │ ├── constants
│ │ │ ├── maxArrayLength.d.ts
│ │ │ ├── maxArrayLength.js
│ │ │ ├── maxSafeInteger.d.ts
│ │ │ ├── maxSafeInteger.js
│ │ │ ├── maxValue.d.ts
│ │ │ └── maxValue.js
│ │ ├── floor.d.ts
│ │ ├── floor.js
│ │ ├── isFinite.d.ts
│ │ ├── isFinite.js
│ │ ├── isInteger.d.ts
│ │ ├── isInteger.js
│ │ ├── isNaN.d.ts
│ │ ├── isNaN.js
│ │ ├── isNegativeZero.d.ts
│ │ ├── isNegativeZero.js
│ │ ├── LICENSE
│ │ ├── max.d.ts
│ │ ├── max.js
│ │ ├── min.d.ts
│ │ ├── min.js
│ │ ├── mod.d.ts
│ │ ├── mod.js
│ │ ├── package.json
│ │ ├── pow.d.ts
│ │ ├── pow.js
│ │ ├── README.md
│ │ ├── round.d.ts
│ │ ├── round.js
│ │ ├── sign.d.ts
│ │ ├── sign.js
│ │ ├── test
│ │ │ └── index.js
│ │ └── tsconfig.json
│ ├── media-typer
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── merge-descriptors
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── methods
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── mime
│ │ ├── .npmignore
│ │ ├── CHANGELOG.md
│ │ ├── cli.js
│ │ ├── LICENSE
│ │ ├── mime.js
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── src
│ │ │ ├── build.js
│ │ │ └── test.js
│ │ └── types.json
│ ├── mime-db
│ │ ├── db.json
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── mime-types
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── ms
│ │ ├── index.js
│ │ ├── license.md
│ │ ├── package.json
│ │ └── readme.md
│ ├── negotiator
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── lib
│ │ │ ├── charset.js
│ │ │ ├── encoding.js
│ │ │ ├── language.js
│ │ │ └── mediaType.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── nth-check
│ │ ├── lib
│ │ │ ├── compile.d.ts
│ │ │ ├── compile.d.ts.map
│ │ │ ├── compile.js
│ │ │ ├── compile.js.map
│ │ │ ├── esm
│ │ │ │ ├── compile.d.ts
│ │ │ │ ├── compile.d.ts.map
│ │ │ │ ├── compile.js
│ │ │ │ ├── compile.js.map
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.d.ts.map
│ │ │ │ ├── index.js
│ │ │ │ ├── index.js.map
│ │ │ │ ├── package.json
│ │ │ │ ├── parse.d.ts
│ │ │ │ ├── parse.d.ts.map
│ │ │ │ ├── parse.js
│ │ │ │ └── parse.js.map
│ │ │ ├── index.d.ts
│ │ │ ├── index.d.ts.map
│ │ │ ├── index.js
│ │ │ ├── index.js.map
│ │ │ ├── parse.d.ts
│ │ │ ├── parse.d.ts.map
│ │ │ ├── parse.js
│ │ │ └── parse.js.map
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── object-assign
│ │ ├── index.js
│ │ ├── license
│ │ ├── package.json
│ │ └── readme.md
│ ├── object-inspect
│ │ ├── .eslintrc
│ │ ├── .github
│ │ │ └── FUNDING.yml
│ │ ├── .nycrc
│ │ ├── CHANGELOG.md
│ │ ├── example
│ │ │ ├── all.js
│ │ │ ├── circular.js
│ │ │ ├── fn.js
│ │ │ └── inspect.js
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package-support.json
│ │ ├── package.json
│ │ ├── readme.markdown
│ │ ├── test
│ │ │ ├── bigint.js
│ │ │ ├── browser
│ │ │ │ └── dom.js
│ │ │ ├── circular.js
│ │ │ ├── deep.js
│ │ │ ├── element.js
│ │ │ ├── err.js
│ │ │ ├── fakes.js
│ │ │ ├── fn.js
│ │ │ ├── global.js
│ │ │ ├── has.js
│ │ │ ├── holes.js
│ │ │ ├── indent-option.js
│ │ │ ├── inspect.js
│ │ │ ├── lowbyte.js
│ │ │ ├── number.js
│ │ │ ├── quoteStyle.js
│ │ │ ├── toStringTag.js
│ │ │ ├── undef.js
│ │ │ └── values.js
│ │ ├── test-core-js.js
│ │ └── util.inspect.js
│ ├── on-finished
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── once
│ │ ├── LICENSE
│ │ ├── once.js
│ │ ├── package.json
│ │ └── README.md
│ ├── parse5
│ │ ├── dist
│ │ │ ├── cjs
│ │ │ │ ├── common
│ │ │ │ │ ├── doctype.d.ts
│ │ │ │ │ ├── doctype.js
│ │ │ │ │ ├── error-codes.d.ts
│ │ │ │ │ ├── error-codes.js
│ │ │ │ │ ├── foreign-content.d.ts
│ │ │ │ │ ├── foreign-content.js
│ │ │ │ │ ├── html.d.ts
│ │ │ │ │ ├── html.js
│ │ │ │ │ ├── token.d.ts
│ │ │ │ │ ├── token.js
│ │ │ │ │ ├── unicode.d.ts
│ │ │ │ │ └── unicode.js
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.js
│ │ │ │ ├── package.json
│ │ │ │ ├── parser
│ │ │ │ │ ├── formatting-element-list.d.ts
│ │ │ │ │ ├── formatting-element-list.js
│ │ │ │ │ ├── index.d.ts
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── open-element-stack.d.ts
│ │ │ │ │ └── open-element-stack.js
│ │ │ │ ├── serializer
│ │ │ │ │ ├── index.d.ts
│ │ │ │ │ └── index.js
│ │ │ │ ├── tokenizer
│ │ │ │ │ ├── index.d.ts
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── preprocessor.d.ts
│ │ │ │ │ └── preprocessor.js
│ │ │ │ └── tree-adapters
│ │ │ │ ├── default.d.ts
│ │ │ │ ├── default.js
│ │ │ │ ├── interface.d.ts
│ │ │ │ └── interface.js
│ │ │ ├── common
│ │ │ │ ├── doctype.d.ts
│ │ │ │ ├── doctype.js
│ │ │ │ ├── error-codes.d.ts
│ │ │ │ ├── error-codes.js
│ │ │ │ ├── foreign-content.d.ts
│ │ │ │ ├── foreign-content.js
│ │ │ │ ├── html.d.ts
│ │ │ │ ├── html.js
│ │ │ │ ├── token.d.ts
│ │ │ │ ├── token.js
│ │ │ │ ├── unicode.d.ts
│ │ │ │ └── unicode.js
│ │ │ ├── index.d.ts
│ │ │ ├── index.js
│ │ │ ├── parser
│ │ │ │ ├── formatting-element-list.d.ts
│ │ │ │ ├── formatting-element-list.js
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.js
│ │ │ │ ├── open-element-stack.d.ts
│ │ │ │ └── open-element-stack.js
│ │ │ ├── serializer
│ │ │ │ ├── index.d.ts
│ │ │ │ └── index.js
│ │ │ ├── tokenizer
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.js
│ │ │ │ ├── preprocessor.d.ts
│ │ │ │ └── preprocessor.js
│ │ │ └── tree-adapters
│ │ │ ├── default.d.ts
│ │ │ ├── default.js
│ │ │ ├── interface.d.ts
│ │ │ └── interface.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── parse5-htmlparser2-tree-adapter
│ │ ├── dist
│ │ │ ├── cjs
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── index.d.ts
│ │ │ └── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── parse5-parser-stream
│ │ ├── dist
│ │ │ ├── cjs
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── index.d.ts
│ │ │ └── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── parseurl
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── path-to-regexp
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── Readme.md
│ ├── pkce-challenge
│ │ ├── dist
│ │ │ ├── index.browser.d.ts
│ │ │ ├── index.browser.js
│ │ │ ├── index.node.d.ts
│ │ │ └── index.node.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── proxy-addr
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── qs
│ │ ├── .editorconfig
│ │ ├── .eslintrc
│ │ ├── .github
│ │ │ └── FUNDING.yml
│ │ ├── .nycrc
│ │ ├── CHANGELOG.md
│ │ ├── dist
│ │ │ └── qs.js
│ │ ├── lib
│ │ │ ├── formats.js
│ │ │ ├── index.js
│ │ │ ├── parse.js
│ │ │ ├── stringify.js
│ │ │ └── utils.js
│ │ ├── LICENSE.md
│ │ ├── package.json
│ │ ├── README.md
│ │ └── test
│ │ ├── empty-keys-cases.js
│ │ ├── parse.js
│ │ ├── stringify.js
│ │ └── utils.js
│ ├── range-parser
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── raw-body
│ │ ├── HISTORY.md
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── node_modules
│ │ │ └── iconv-lite
│ │ │ ├── Changelog.md
│ │ │ ├── encodings
│ │ │ │ ├── dbcs-codec.js
│ │ │ │ ├── dbcs-data.js
│ │ │ │ ├── index.js
│ │ │ │ ├── internal.js
│ │ │ │ ├── sbcs-codec.js
│ │ │ │ ├── sbcs-data-generated.js
│ │ │ │ ├── sbcs-data.js
│ │ │ │ ├── tables
│ │ │ │ │ ├── big5-added.json
│ │ │ │ │ ├── cp936.json
│ │ │ │ │ ├── cp949.json
│ │ │ │ │ ├── cp950.json
│ │ │ │ │ ├── eucjp.json
│ │ │ │ │ ├── gb18030-ranges.json
│ │ │ │ │ ├── gbk-added.json
│ │ │ │ │ └── shiftjis.json
│ │ │ │ ├── utf16.js
│ │ │ │ └── utf7.js
│ │ │ ├── lib
│ │ │ │ ├── bom-handling.js
│ │ │ │ ├── extend-node.js
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.js
│ │ │ │ └── streams.js
│ │ │ ├── LICENSE
│ │ │ ├── package.json
│ │ │ └── README.md
│ │ ├── package.json
│ │ ├── README.md
│ │ └── SECURITY.md
│ ├── require-directory
│ │ ├── .jshintrc
│ │ ├── .npmignore
│ │ ├── .travis.yml
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.markdown
│ ├── router
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── lib
│ │ │ ├── layer.js
│ │ │ └── route.js
│ │ ├── LICENSE
│ │ ├── node_modules
│ │ │ └── path-to-regexp
│ │ │ ├── dist
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.js
│ │ │ │ └── index.js.map
│ │ │ ├── LICENSE
│ │ │ ├── package.json
│ │ │ └── Readme.md
│ │ ├── package.json
│ │ ├── README.md
│ │ └── SECURITY.md
│ ├── safe-buffer
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── safer-buffer
│ │ ├── dangerous.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── Porting-Buffer.md
│ │ ├── Readme.md
│ │ ├── safer.js
│ │ └── tests.js
│ ├── send
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── node_modules
│ │ │ ├── encodeurl
│ │ │ │ ├── HISTORY.md
│ │ │ │ ├── index.js
│ │ │ │ ├── LICENSE
│ │ │ │ ├── package.json
│ │ │ │ └── README.md
│ │ │ └── ms
│ │ │ ├── index.js
│ │ │ ├── license.md
│ │ │ ├── package.json
│ │ │ └── readme.md
│ │ ├── package.json
│ │ ├── README.md
│ │ └── SECURITY.md
│ ├── serve-static
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── setprototypeof
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ └── test
│ │ └── index.js
│ ├── side-channel
│ │ ├── .editorconfig
│ │ ├── .eslintrc
│ │ ├── .github
│ │ │ └── FUNDING.yml
│ │ ├── .nycrc
│ │ ├── CHANGELOG.md
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── test
│ │ │ └── index.js
│ │ └── tsconfig.json
│ ├── side-channel-list
│ │ ├── .editorconfig
│ │ ├── .eslintrc
│ │ ├── .github
│ │ │ └── FUNDING.yml
│ │ ├── .nycrc
│ │ ├── CHANGELOG.md
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── list.d.ts
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── test
│ │ │ └── index.js
│ │ └── tsconfig.json
│ ├── side-channel-map
│ │ ├── .editorconfig
│ │ ├── .eslintrc
│ │ ├── .github
│ │ │ └── FUNDING.yml
│ │ ├── .nycrc
│ │ ├── CHANGELOG.md
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── test
│ │ │ └── index.js
│ │ └── tsconfig.json
│ ├── side-channel-weakmap
│ │ ├── .editorconfig
│ │ ├── .eslintrc
│ │ ├── .github
│ │ │ └── FUNDING.yml
│ │ ├── .nycrc
│ │ ├── CHANGELOG.md
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── test
│ │ │ └── index.js
│ │ └── tsconfig.json
│ ├── statuses
│ │ ├── codes.json
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── string-width
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── license
│ │ ├── package.json
│ │ └── readme.md
│ ├── strip-ansi
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── license
│ │ ├── package.json
│ │ └── readme.md
│ ├── supergateway
│ │ ├── dist
│ │ │ └── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── src
│ │ │ └── index.ts
│ │ ├── supergateway.png
│ │ └── tsconfig.json
│ ├── toidentifier
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── type-is
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── undici
│ │ ├── docs
│ │ │ └── docs
│ │ │ ├── api
│ │ │ │ ├── Agent.md
│ │ │ │ ├── api-lifecycle.md
│ │ │ │ ├── BalancedPool.md
│ │ │ │ ├── CacheStorage.md
│ │ │ │ ├── Client.md
│ │ │ │ ├── Connector.md
│ │ │ │ ├── ContentType.md
│ │ │ │ ├── Cookies.md
│ │ │ │ ├── Debug.md
│ │ │ │ ├── DiagnosticsChannel.md
│ │ │ │ ├── Dispatcher.md
│ │ │ │ ├── DispatchInterceptor.md
│ │ │ │ ├── EnvHttpProxyAgent.md
│ │ │ │ ├── Errors.md
│ │ │ │ ├── EventSource.md
│ │ │ │ ├── Fetch.md
│ │ │ │ ├── MockAgent.md
│ │ │ │ ├── MockClient.md
│ │ │ │ ├── MockErrors.md
│ │ │ │ ├── MockPool.md
│ │ │ │ ├── Pool.md
│ │ │ │ ├── PoolStats.md
│ │ │ │ ├── ProxyAgent.md
│ │ │ │ ├── RedirectHandler.md
│ │ │ │ ├── RetryAgent.md
│ │ │ │ ├── RetryHandler.md
│ │ │ │ ├── Util.md
│ │ │ │ └── WebSocket.md
│ │ │ └── best-practices
│ │ │ ├── client-certificate.md
│ │ │ ├── mocking-request.md
│ │ │ ├── proxy.md
│ │ │ └── writing-tests.md
│ │ ├── index-fetch.js
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── lib
│ │ │ ├── api
│ │ │ │ ├── abort-signal.js
│ │ │ │ ├── api-connect.js
│ │ │ │ ├── api-pipeline.js
│ │ │ │ ├── api-request.js
│ │ │ │ ├── api-stream.js
│ │ │ │ ├── api-upgrade.js
│ │ │ │ ├── index.js
│ │ │ │ ├── readable.js
│ │ │ │ └── util.js
│ │ │ ├── core
│ │ │ │ ├── connect.js
│ │ │ │ ├── constants.js
│ │ │ │ ├── diagnostics.js
│ │ │ │ ├── errors.js
│ │ │ │ ├── request.js
│ │ │ │ ├── symbols.js
│ │ │ │ ├── tree.js
│ │ │ │ └── util.js
│ │ │ ├── dispatcher
│ │ │ │ ├── agent.js
│ │ │ │ ├── balanced-pool.js
│ │ │ │ ├── client-h1.js
│ │ │ │ ├── client-h2.js
│ │ │ │ ├── client.js
│ │ │ │ ├── dispatcher-base.js
│ │ │ │ ├── dispatcher.js
│ │ │ │ ├── env-http-proxy-agent.js
│ │ │ │ ├── fixed-queue.js
│ │ │ │ ├── pool-base.js
│ │ │ │ ├── pool-stats.js
│ │ │ │ ├── pool.js
│ │ │ │ ├── proxy-agent.js
│ │ │ │ └── retry-agent.js
│ │ │ ├── global.js
│ │ │ ├── handler
│ │ │ │ ├── decorator-handler.js
│ │ │ │ ├── redirect-handler.js
│ │ │ │ └── retry-handler.js
│ │ │ ├── interceptor
│ │ │ │ ├── dns.js
│ │ │ │ ├── dump.js
│ │ │ │ ├── redirect-interceptor.js
│ │ │ │ ├── redirect.js
│ │ │ │ ├── response-error.js
│ │ │ │ └── retry.js
│ │ │ ├── llhttp
│ │ │ │ ├── .gitkeep
│ │ │ │ ├── constants.js
│ │ │ │ ├── llhttp_simd-wasm.js
│ │ │ │ ├── llhttp-wasm.js
│ │ │ │ └── utils.js
│ │ │ ├── mock
│ │ │ │ ├── mock-agent.js
│ │ │ │ ├── mock-client.js
│ │ │ │ ├── mock-errors.js
│ │ │ │ ├── mock-interceptor.js
│ │ │ │ ├── mock-pool.js
│ │ │ │ ├── mock-symbols.js
│ │ │ │ ├── mock-utils.js
│ │ │ │ ├── pending-interceptors-formatter.js
│ │ │ │ └── pluralizer.js
│ │ │ ├── util
│ │ │ │ └── timers.js
│ │ │ └── web
│ │ │ ├── cache
│ │ │ │ ├── cache.js
│ │ │ │ ├── cachestorage.js
│ │ │ │ ├── symbols.js
│ │ │ │ └── util.js
│ │ │ ├── cookies
│ │ │ │ ├── constants.js
│ │ │ │ ├── index.js
│ │ │ │ ├── parse.js
│ │ │ │ └── util.js
│ │ │ ├── eventsource
│ │ │ │ ├── eventsource-stream.js
│ │ │ │ ├── eventsource.js
│ │ │ │ └── util.js
│ │ │ ├── fetch
│ │ │ │ ├── body.js
│ │ │ │ ├── constants.js
│ │ │ │ ├── data-url.js
│ │ │ │ ├── dispatcher-weakref.js
│ │ │ │ ├── file.js
│ │ │ │ ├── formdata-parser.js
│ │ │ │ ├── formdata.js
│ │ │ │ ├── global.js
│ │ │ │ ├── headers.js
│ │ │ │ ├── index.js
│ │ │ │ ├── LICENSE
│ │ │ │ ├── request.js
│ │ │ │ ├── response.js
│ │ │ │ ├── symbols.js
│ │ │ │ ├── util.js
│ │ │ │ └── webidl.js
│ │ │ ├── fileapi
│ │ │ │ ├── encoding.js
│ │ │ │ ├── filereader.js
│ │ │ │ ├── progressevent.js
│ │ │ │ ├── symbols.js
│ │ │ │ └── util.js
│ │ │ └── websocket
│ │ │ ├── connection.js
│ │ │ ├── constants.js
│ │ │ ├── events.js
│ │ │ ├── frame.js
│ │ │ ├── permessage-deflate.js
│ │ │ ├── receiver.js
│ │ │ ├── sender.js
│ │ │ ├── symbols.js
│ │ │ ├── util.js
│ │ │ └── websocket.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── scripts
│ │ │ └── strip-comments.js
│ │ └── types
│ │ ├── agent.d.ts
│ │ ├── api.d.ts
│ │ ├── balanced-pool.d.ts
│ │ ├── cache.d.ts
│ │ ├── client.d.ts
│ │ ├── connector.d.ts
│ │ ├── content-type.d.ts
│ │ ├── cookies.d.ts
│ │ ├── diagnostics-channel.d.ts
│ │ ├── dispatcher.d.ts
│ │ ├── env-http-proxy-agent.d.ts
│ │ ├── errors.d.ts
│ │ ├── eventsource.d.ts
│ │ ├── fetch.d.ts
│ │ ├── file.d.ts
│ │ ├── filereader.d.ts
│ │ ├── formdata.d.ts
│ │ ├── global-dispatcher.d.ts
│ │ ├── global-origin.d.ts
│ │ ├── handlers.d.ts
│ │ ├── header.d.ts
│ │ ├── index.d.ts
│ │ ├── interceptors.d.ts
│ │ ├── mock-agent.d.ts
│ │ ├── mock-client.d.ts
│ │ ├── mock-errors.d.ts
│ │ ├── mock-interceptor.d.ts
│ │ ├── mock-pool.d.ts
│ │ ├── patch.d.ts
│ │ ├── pool-stats.d.ts
│ │ ├── pool.d.ts
│ │ ├── proxy-agent.d.ts
│ │ ├── readable.d.ts
│ │ ├── README.md
│ │ ├── retry-agent.d.ts
│ │ ├── retry-handler.d.ts
│ │ ├── util.d.ts
│ │ ├── webidl.d.ts
│ │ └── websocket.d.ts
│ ├── unpipe
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── utils-merge
│ │ ├── .npmignore
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── vary
│ │ ├── HISTORY.md
│ │ ├── index.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── whatwg-encoding
│ │ ├── lib
│ │ │ ├── labels-to-names.json
│ │ │ ├── supported-names.json
│ │ │ └── whatwg-encoding.js
│ │ ├── LICENSE.txt
│ │ ├── package.json
│ │ └── README.md
│ ├── whatwg-mimetype
│ │ ├── lib
│ │ │ ├── mime-type-parameters.js
│ │ │ ├── mime-type.js
│ │ │ ├── parser.js
│ │ │ ├── serializer.js
│ │ │ └── utils.js
│ │ ├── LICENSE.txt
│ │ ├── package.json
│ │ └── README.md
│ ├── wrap-ansi
│ │ ├── index.js
│ │ ├── license
│ │ ├── package.json
│ │ └── readme.md
│ ├── wrappy
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── README.md
│ │ └── wrappy.js
│ ├── y18n
│ │ ├── build
│ │ │ ├── index.cjs
│ │ │ └── lib
│ │ │ ├── cjs.js
│ │ │ ├── index.js
│ │ │ └── platform-shims
│ │ │ └── node.js
│ │ ├── CHANGELOG.md
│ │ ├── index.mjs
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ ├── yargs
│ │ ├── browser.d.ts
│ │ ├── browser.mjs
│ │ ├── build
│ │ │ ├── index.cjs
│ │ │ └── lib
│ │ │ ├── argsert.js
│ │ │ ├── command.js
│ │ │ ├── completion-templates.js
│ │ │ ├── completion.js
│ │ │ ├── middleware.js
│ │ │ ├── parse-command.js
│ │ │ ├── typings
│ │ │ │ ├── common-types.js
│ │ │ │ └── yargs-parser-types.js
│ │ │ ├── usage.js
│ │ │ ├── utils
│ │ │ │ ├── apply-extends.js
│ │ │ │ ├── is-promise.js
│ │ │ │ ├── levenshtein.js
│ │ │ │ ├── maybe-async-result.js
│ │ │ │ ├── obj-filter.js
│ │ │ │ ├── process-argv.js
│ │ │ │ ├── set-blocking.js
│ │ │ │ └── which-module.js
│ │ │ ├── validation.js
│ │ │ ├── yargs-factory.js
│ │ │ └── yerror.js
│ │ ├── helpers
│ │ │ ├── helpers.mjs
│ │ │ ├── index.js
│ │ │ └── package.json
│ │ ├── index.cjs
│ │ ├── index.mjs
│ │ ├── lib
│ │ │ └── platform-shims
│ │ │ ├── browser.mjs
│ │ │ └── esm.mjs
│ │ ├── LICENSE
│ │ ├── locales
│ │ │ ├── be.json
│ │ │ ├── cs.json
│ │ │ ├── de.json
│ │ │ ├── en.json
│ │ │ ├── es.json
│ │ │ ├── fi.json
│ │ │ ├── fr.json
│ │ │ ├── hi.json
│ │ │ ├── hu.json
│ │ │ ├── id.json
│ │ │ ├── it.json
│ │ │ ├── ja.json
│ │ │ ├── ko.json
│ │ │ ├── nb.json
│ │ │ ├── nl.json
│ │ │ ├── nn.json
│ │ │ ├── pirate.json
│ │ │ ├── pl.json
│ │ │ ├── pt_BR.json
│ │ │ ├── pt.json
│ │ │ ├── ru.json
│ │ │ ├── th.json
│ │ │ ├── tr.json
│ │ │ ├── uk_UA.json
│ │ │ ├── uz.json
│ │ │ ├── zh_CN.json
│ │ │ └── zh_TW.json
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── yargs
│ │ └── yargs.mjs
│ ├── yargs-parser
│ │ ├── browser.js
│ │ ├── build
│ │ │ ├── index.cjs
│ │ │ └── lib
│ │ │ ├── index.js
│ │ │ ├── string-utils.js
│ │ │ ├── tokenize-arg-string.js
│ │ │ ├── yargs-parser-types.js
│ │ │ └── yargs-parser.js
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE.txt
│ │ ├── package.json
│ │ └── README.md
│ ├── zod
│ │ ├── index.d.ts
│ │ ├── lib
│ │ │ ├── __tests__
│ │ │ │ ├── Mocker.d.ts
│ │ │ │ └── Mocker.js
│ │ │ ├── benchmarks
│ │ │ │ ├── datetime.d.ts
│ │ │ │ ├── datetime.js
│ │ │ │ ├── discriminatedUnion.d.ts
│ │ │ │ ├── discriminatedUnion.js
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.js
│ │ │ │ ├── ipv4.d.ts
│ │ │ │ ├── ipv4.js
│ │ │ │ ├── object.d.ts
│ │ │ │ ├── object.js
│ │ │ │ ├── primitives.d.ts
│ │ │ │ ├── primitives.js
│ │ │ │ ├── realworld.d.ts
│ │ │ │ ├── realworld.js
│ │ │ │ ├── string.d.ts
│ │ │ │ ├── string.js
│ │ │ │ ├── union.d.ts
│ │ │ │ └── union.js
│ │ │ ├── errors.d.ts
│ │ │ ├── errors.js
│ │ │ ├── external.d.ts
│ │ │ ├── external.js
│ │ │ ├── helpers
│ │ │ │ ├── enumUtil.d.ts
│ │ │ │ ├── enumUtil.js
│ │ │ │ ├── errorUtil.d.ts
│ │ │ │ ├── errorUtil.js
│ │ │ │ ├── parseUtil.d.ts
│ │ │ │ ├── parseUtil.js
│ │ │ │ ├── partialUtil.d.ts
│ │ │ │ ├── partialUtil.js
│ │ │ │ ├── typeAliases.d.ts
│ │ │ │ ├── typeAliases.js
│ │ │ │ ├── util.d.ts
│ │ │ │ └── util.js
│ │ │ ├── index.d.ts
│ │ │ ├── index.js
│ │ │ ├── index.mjs
│ │ │ ├── index.umd.js
│ │ │ ├── locales
│ │ │ │ ├── en.d.ts
│ │ │ │ └── en.js
│ │ │ ├── standard-schema.d.ts
│ │ │ ├── standard-schema.js
│ │ │ ├── types.d.ts
│ │ │ ├── types.js
│ │ │ ├── ZodError.d.ts
│ │ │ └── ZodError.js
│ │ ├── LICENSE
│ │ ├── package.json
│ │ └── README.md
│ └── zod-to-json-schema
│ ├── .github
│ │ ├── CR_logotype-full-color.png
│ │ └── FUNDING.yml
│ ├── .prettierrc.json
│ ├── changelog.md
│ ├── contributing.md
│ ├── createIndex.ts
│ ├── dist
│ │ ├── cjs
│ │ │ ├── errorMessages.js
│ │ │ ├── index.js
│ │ │ ├── Options.js
│ │ │ ├── package.json
│ │ │ ├── parseDef.js
│ │ │ ├── parsers
│ │ │ │ ├── any.js
│ │ │ │ ├── array.js
│ │ │ │ ├── bigint.js
│ │ │ │ ├── boolean.js
│ │ │ │ ├── branded.js
│ │ │ │ ├── catch.js
│ │ │ │ ├── date.js
│ │ │ │ ├── default.js
│ │ │ │ ├── effects.js
│ │ │ │ ├── enum.js
│ │ │ │ ├── intersection.js
│ │ │ │ ├── literal.js
│ │ │ │ ├── map.js
│ │ │ │ ├── nativeEnum.js
│ │ │ │ ├── never.js
│ │ │ │ ├── null.js
│ │ │ │ ├── nullable.js
│ │ │ │ ├── number.js
│ │ │ │ ├── object.js
│ │ │ │ ├── optional.js
│ │ │ │ ├── pipeline.js
│ │ │ │ ├── promise.js
│ │ │ │ ├── readonly.js
│ │ │ │ ├── record.js
│ │ │ │ ├── set.js
│ │ │ │ ├── string.js
│ │ │ │ ├── tuple.js
│ │ │ │ ├── undefined.js
│ │ │ │ ├── union.js
│ │ │ │ └── unknown.js
│ │ │ ├── parseTypes.js
│ │ │ ├── Refs.js
│ │ │ ├── selectParser.js
│ │ │ └── zodToJsonSchema.js
│ │ ├── esm
│ │ │ ├── errorMessages.js
│ │ │ ├── index.js
│ │ │ ├── Options.js
│ │ │ ├── package.json
│ │ │ ├── parseDef.js
│ │ │ ├── parsers
│ │ │ │ ├── any.js
│ │ │ │ ├── array.js
│ │ │ │ ├── bigint.js
│ │ │ │ ├── boolean.js
│ │ │ │ ├── branded.js
│ │ │ │ ├── catch.js
│ │ │ │ ├── date.js
│ │ │ │ ├── default.js
│ │ │ │ ├── effects.js
│ │ │ │ ├── enum.js
│ │ │ │ ├── intersection.js
│ │ │ │ ├── literal.js
│ │ │ │ ├── map.js
│ │ │ │ ├── nativeEnum.js
│ │ │ │ ├── never.js
│ │ │ │ ├── null.js
│ │ │ │ ├── nullable.js
│ │ │ │ ├── number.js
│ │ │ │ ├── object.js
│ │ │ │ ├── optional.js
│ │ │ │ ├── pipeline.js
│ │ │ │ ├── promise.js
│ │ │ │ ├── readonly.js
│ │ │ │ ├── record.js
│ │ │ │ ├── set.js
│ │ │ │ ├── string.js
│ │ │ │ ├── tuple.js
│ │ │ │ ├── undefined.js
│ │ │ │ ├── union.js
│ │ │ │ └── unknown.js
│ │ │ ├── parseTypes.js
│ │ │ ├── Refs.js
│ │ │ ├── selectParser.js
│ │ │ └── zodToJsonSchema.js
│ │ └── types
│ │ ├── errorMessages.d.ts
│ │ ├── index.d.ts
│ │ ├── Options.d.ts
│ │ ├── parseDef.d.ts
│ │ ├── parsers
│ │ │ ├── any.d.ts
│ │ │ ├── array.d.ts
│ │ │ ├── bigint.d.ts
│ │ │ ├── boolean.d.ts
│ │ │ ├── branded.d.ts
│ │ │ ├── catch.d.ts
│ │ │ ├── date.d.ts
│ │ │ ├── default.d.ts
│ │ │ ├── effects.d.ts
│ │ │ ├── enum.d.ts
│ │ │ ├── intersection.d.ts
│ │ │ ├── literal.d.ts
│ │ │ ├── map.d.ts
│ │ │ ├── nativeEnum.d.ts
│ │ │ ├── never.d.ts
│ │ │ ├── null.d.ts
│ │ │ ├── nullable.d.ts
│ │ │ ├── number.d.ts
│ │ │ ├── object.d.ts
│ │ │ ├── optional.d.ts
│ │ │ ├── pipeline.d.ts
│ │ │ ├── promise.d.ts
│ │ │ ├── readonly.d.ts
│ │ │ ├── record.d.ts
│ │ │ ├── set.d.ts
│ │ │ ├── string.d.ts
│ │ │ ├── tuple.d.ts
│ │ │ ├── undefined.d.ts
│ │ │ ├── union.d.ts
│ │ │ └── unknown.d.ts
│ │ ├── parseTypes.d.ts
│ │ ├── Refs.d.ts
│ │ ├── selectParser.d.ts
│ │ └── zodToJsonSchema.d.ts
│ ├── dist-test
│ │ ├── cjs
│ │ │ ├── index.js
│ │ │ ├── node_modules
│ │ │ │ ├── .package-lock.json
│ │ │ │ └── zod
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── lib
│ │ │ │ │ ├── __tests__
│ │ │ │ │ │ ├── Mocker.d.ts
│ │ │ │ │ │ └── Mocker.js
│ │ │ │ │ ├── benchmarks
│ │ │ │ │ │ ├── datetime.d.ts
│ │ │ │ │ │ ├── datetime.js
│ │ │ │ │ │ ├── discriminatedUnion.d.ts
│ │ │ │ │ │ ├── discriminatedUnion.js
│ │ │ │ │ │ ├── index.d.ts
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ ├── ipv4.d.ts
│ │ │ │ │ │ ├── ipv4.js
│ │ │ │ │ │ ├── object.d.ts
│ │ │ │ │ │ ├── object.js
│ │ │ │ │ │ ├── primitives.d.ts
│ │ │ │ │ │ ├── primitives.js
│ │ │ │ │ │ ├── realworld.d.ts
│ │ │ │ │ │ ├── realworld.js
│ │ │ │ │ │ ├── string.d.ts
│ │ │ │ │ │ ├── string.js
│ │ │ │ │ │ ├── union.d.ts
│ │ │ │ │ │ └── union.js
│ │ │ │ │ ├── errors.d.ts
│ │ │ │ │ ├── errors.js
│ │ │ │ │ ├── external.d.ts
│ │ │ │ │ ├── external.js
│ │ │ │ │ ├── helpers
│ │ │ │ │ │ ├── enumUtil.d.ts
│ │ │ │ │ │ ├── enumUtil.js
│ │ │ │ │ │ ├── errorUtil.d.ts
│ │ │ │ │ │ ├── errorUtil.js
│ │ │ │ │ │ ├── parseUtil.d.ts
│ │ │ │ │ │ ├── parseUtil.js
│ │ │ │ │ │ ├── partialUtil.d.ts
│ │ │ │ │ │ ├── partialUtil.js
│ │ │ │ │ │ ├── typeAliases.d.ts
│ │ │ │ │ │ ├── typeAliases.js
│ │ │ │ │ │ ├── util.d.ts
│ │ │ │ │ │ └── util.js
│ │ │ │ │ ├── index.d.ts
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── index.mjs
│ │ │ │ │ ├── index.umd.js
│ │ │ │ │ ├── locales
│ │ │ │ │ │ ├── en.d.ts
│ │ │ │ │ │ └── en.js
│ │ │ │ │ ├── standard-schema.d.ts
│ │ │ │ │ ├── standard-schema.js
│ │ │ │ │ ├── types.d.ts
│ │ │ │ │ ├── types.js
│ │ │ │ │ ├── ZodError.d.ts
│ │ │ │ │ └── ZodError.js
│ │ │ │ ├── LICENSE
│ │ │ │ ├── package.json
│ │ │ │ └── README.md
│ │ │ ├── package-lock.json
│ │ │ └── package.json
│ │ ├── esm
│ │ │ ├── index.js
│ │ │ ├── node_modules
│ │ │ │ ├── .package-lock.json
│ │ │ │ └── zod
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── lib
│ │ │ │ │ ├── __tests__
│ │ │ │ │ │ ├── Mocker.d.ts
│ │ │ │ │ │ └── Mocker.js
│ │ │ │ │ ├── benchmarks
│ │ │ │ │ │ ├── datetime.d.ts
│ │ │ │ │ │ ├── datetime.js
│ │ │ │ │ │ ├── discriminatedUnion.d.ts
│ │ │ │ │ │ ├── discriminatedUnion.js
│ │ │ │ │ │ ├── index.d.ts
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ ├── ipv4.d.ts
│ │ │ │ │ │ ├── ipv4.js
│ │ │ │ │ │ ├── object.d.ts
│ │ │ │ │ │ ├── object.js
│ │ │ │ │ │ ├── primitives.d.ts
│ │ │ │ │ │ ├── primitives.js
│ │ │ │ │ │ ├── realworld.d.ts
│ │ │ │ │ │ ├── realworld.js
│ │ │ │ │ │ ├── string.d.ts
│ │ │ │ │ │ ├── string.js
│ │ │ │ │ │ ├── union.d.ts
│ │ │ │ │ │ └── union.js
│ │ │ │ │ ├── errors.d.ts
│ │ │ │ │ ├── errors.js
│ │ │ │ │ ├── external.d.ts
│ │ │ │ │ ├── external.js
│ │ │ │ │ ├── helpers
│ │ │ │ │ │ ├── enumUtil.d.ts
│ │ │ │ │ │ ├── enumUtil.js
│ │ │ │ │ │ ├── errorUtil.d.ts
│ │ │ │ │ │ ├── errorUtil.js
│ │ │ │ │ │ ├── parseUtil.d.ts
│ │ │ │ │ │ ├── parseUtil.js
│ │ │ │ │ │ ├── partialUtil.d.ts
│ │ │ │ │ │ ├── partialUtil.js
│ │ │ │ │ │ ├── typeAliases.d.ts
│ │ │ │ │ │ ├── typeAliases.js
│ │ │ │ │ │ ├── util.d.ts
│ │ │ │ │ │ └── util.js
│ │ │ │ │ ├── index.d.ts
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── index.mjs
│ │ │ │ │ ├── index.umd.js
│ │ │ │ │ ├── locales
│ │ │ │ │ │ ├── en.d.ts
│ │ │ │ │ │ └── en.js
│ │ │ │ │ ├── standard-schema.d.ts
│ │ │ │ │ ├── standard-schema.js
│ │ │ │ │ ├── types.d.ts
│ │ │ │ │ ├── types.js
│ │ │ │ │ ├── ZodError.d.ts
│ │ │ │ │ └── ZodError.js
│ │ │ │ ├── LICENSE
│ │ │ │ ├── package.json
│ │ │ │ └── README.md
│ │ │ ├── package-lock.json
│ │ │ └── package.json
│ │ ├── package.json
│ │ └── types
│ │ ├── index.ts
│ │ ├── node_modules
│ │ │ ├── .package-lock.json
│ │ │ └── zod
│ │ │ ├── index.d.ts
│ │ │ ├── lib
│ │ │ │ ├── __tests__
│ │ │ │ │ ├── Mocker.d.ts
│ │ │ │ │ └── Mocker.js
│ │ │ │ ├── benchmarks
│ │ │ │ │ ├── datetime.d.ts
│ │ │ │ │ ├── datetime.js
│ │ │ │ │ ├── discriminatedUnion.d.ts
│ │ │ │ │ ├── discriminatedUnion.js
│ │ │ │ │ ├── index.d.ts
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── ipv4.d.ts
│ │ │ │ │ ├── ipv4.js
│ │ │ │ │ ├── object.d.ts
│ │ │ │ │ ├── object.js
│ │ │ │ │ ├── primitives.d.ts
│ │ │ │ │ ├── primitives.js
│ │ │ │ │ ├── realworld.d.ts
│ │ │ │ │ ├── realworld.js
│ │ │ │ │ ├── string.d.ts
│ │ │ │ │ ├── string.js
│ │ │ │ │ ├── union.d.ts
│ │ │ │ │ └── union.js
│ │ │ │ ├── errors.d.ts
│ │ │ │ ├── errors.js
│ │ │ │ ├── external.d.ts
│ │ │ │ ├── external.js
│ │ │ │ ├── helpers
│ │ │ │ │ ├── enumUtil.d.ts
│ │ │ │ │ ├── enumUtil.js
│ │ │ │ │ ├── errorUtil.d.ts
│ │ │ │ │ ├── errorUtil.js
│ │ │ │ │ ├── parseUtil.d.ts
│ │ │ │ │ ├── parseUtil.js
│ │ │ │ │ ├── partialUtil.d.ts
│ │ │ │ │ ├── partialUtil.js
│ │ │ │ │ ├── typeAliases.d.ts
│ │ │ │ │ ├── typeAliases.js
│ │ │ │ │ ├── util.d.ts
│ │ │ │ │ └── util.js
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.js
│ │ │ │ ├── index.mjs
│ │ │ │ ├── index.umd.js
│ │ │ │ ├── locales
│ │ │ │ │ ├── en.d.ts
│ │ │ │ │ └── en.js
│ │ │ │ ├── standard-schema.d.ts
│ │ │ │ ├── standard-schema.js
│ │ │ │ ├── types.d.ts
│ │ │ │ ├── types.js
│ │ │ │ ├── ZodError.d.ts
│ │ │ │ └── ZodError.js
│ │ │ ├── LICENSE
│ │ │ ├── package.json
│ │ │ └── README.md
│ │ ├── package-lock.json
│ │ └── package.json
│ ├── LICENSE
│ ├── package.json
│ ├── postcjs.ts
│ ├── postesm.ts
│ ├── README.md
│ └── SECURITY.md
├── package-lock.json
├── package.json
├── README.md
├── run-mcp.sh
├── seo-mcp-server.js
├── seo-requirements.js
└── src
├── analyzers
│ ├── html-analyzer.js
│ └── keyword-analyzer.js
├── formatters
│ └── text-formatter.js
├── server.js
└── utils
└── file-utils.js
```
# Files
--------------------------------------------------------------------------------
/src/analyzers/html-analyzer.js:
--------------------------------------------------------------------------------
```javascript
// src/analyzers/html-analyzer.js
import * as cheerio from 'cheerio';
import { detectTargetKeywords } from './keyword-analyzer.js';
import fs from 'fs/promises';
import path from 'path';
export function analyzeHtml(html, pageIdentifier) {
const $ = cheerio.load(html);
const issues = [];
const recommendations = [];
// Basic SEO checks
const title = $('title').text();
const metaDescription = $('meta[name="description"]').attr('content');
const h1Count = $('h1').length;
const h2Count = $('h2').length;
const h3Count = $('h3').length;
// Check for robots meta tag
const robotsContent = $('meta[name="robots"]').attr('content');
const hasNoIndex = robotsContent && robotsContent.includes('noindex');
const hasNoFollow = robotsContent && robotsContent.includes('nofollow');
// Check for canonical URL
const canonicalUrl = $('link[rel="canonical"]').attr('href');
// Check for social media tags
const ogTitle = $('meta[property="og:title"]').attr('content');
const ogDescription = $('meta[property="og:description"]').attr('content');
const ogImage = $('meta[property="og:image"]').attr('content');
const twitterCard = $('meta[name="twitter:card"]').attr('content');
const twitterTitle = $('meta[name="twitter:title"]').attr('content');
const twitterDescription = $('meta[name="twitter:description"]').attr(
'content'
);
const twitterImage = $('meta[name="twitter:image"]').attr('content');
// Detect potential target keywords
const keywordAnalysis = detectTargetKeywords(html, title, metaDescription);
// Check for React-specific elements
const hasReactRoot =
$('#root').length > 0 ||
$('#app').length > 0 ||
$('[data-reactroot]').length > 0;
// Check for empty divs that might be React mounting points
const emptyRootDivs = $('div:empty').length;
const hasReactScripts =
$('script').filter((i, el) => {
const src = $(el).attr('src') || '';
return (
src.includes('react') || src.includes('bundle') || src.includes('chunk')
);
}).length > 0;
// More confidently determine if it's a React app
const isReactApp = hasReactRoot || (emptyRootDivs > 0 && hasReactScripts);
// Calculate analysis confidence score
let confidenceScore = 100;
// If it's a React app, add a specific warning about client-side rendering
if (isReactApp) {
// Reduce confidence score for React apps
confidenceScore = 40;
issues.push({
severity: 'critical',
message:
'⚠️ WARNING: This is a client-side rendered React app - this analysis is INCOMPLETE',
impact: 100,
area: 'Analysis Limitations',
});
issues.push({
severity: 'critical',
message:
'Client-side rendered React apps hide content from this analyzer',
impact: 95,
area: 'Framework',
});
recommendations.push({
text: 'Switch to server-side rendering for better SEO',
impact: 95,
reason:
'This analysis only sees your initial HTML, not the content rendered by React',
implementation:
'Migrate to Next.js, Gatsby, or implement server-side rendering in your current setup',
});
recommendations.push({
text: 'For accurate analysis, view your page source and analyze what search engines actually see',
impact: 90,
reason:
'What you see in the browser is different from what search engines see',
implementation:
'Right-click your page and select "View Page Source" to see what search engines see',
});
}
// Check title - HIGH IMPACT
if (!title) {
issues.push({
severity: 'high',
message: 'Missing page title',
impact: 90,
area: 'Meta Tags',
});
recommendations.push({
text: 'Add a descriptive page title',
impact: 90,
reason:
'Title tags are a critical ranking factor and appear in search results',
implementation: '<title>Your Primary Keyword - Your Brand Name</title>',
});
} else if (title.length < 30) {
issues.push({
severity: 'medium',
message: `Title is too short (${title.length} chars) - aim for 50-60 characters`,
impact: 75,
area: 'Meta Tags',
});
recommendations.push({
text: 'Expand your title to be more descriptive',
impact: 75,
reason:
'Short titles miss opportunities to include keywords and attract clicks',
implementation: `<title>${title} | Add More Keywords and Brand</title>`,
});
} else if (title.length > 60) {
issues.push({
severity: 'medium',
message: `Title length (${title.length} chars) exceeds recommended maximum of 60 characters`,
impact: 70,
area: 'Meta Tags',
});
recommendations.push({
text: 'Shorten title to under 60 characters',
impact: 70,
reason: 'Long titles get truncated in search results',
implementation: `<title>${title.substring(0, 57)}...</title>`,
});
}
// Check meta description
if (!metaDescription) {
issues.push({
severity: 'high',
message: 'Missing meta description',
impact: 80,
area: 'Meta Tags',
});
recommendations.push({
text: 'Add a descriptive meta description',
impact: 80,
reason:
'Meta descriptions appear in search results and affect click-through rates',
implementation:
'<meta name="description" content="A compelling description of your page that includes target keywords and encourages clicks.">',
});
} else if (metaDescription.length < 50 || metaDescription.length > 160) {
issues.push({
severity: 'medium',
message: `Meta description length (${metaDescription.length} chars) outside recommended range (50-160)`,
impact: 60,
area: 'Meta Tags',
});
recommendations.push({
text: 'Adjust meta description to be between 50-160 characters',
impact: 60,
reason:
'Descriptions outside this range may be truncated or considered thin content',
implementation:
metaDescription.length < 50
? 'Expand your meta description to be more descriptive and include target keywords'
: 'Shorten your meta description to ensure it displays properly in search results',
});
}
// Check robots meta tag
if (hasNoIndex) {
issues.push({
severity: 'critical',
message:
'Page has noindex directive - it will not appear in search results',
impact: 100,
area: 'Indexability',
});
recommendations.push({
text: 'Remove noindex directive if you want this page to be indexed',
impact: 100,
reason:
'The noindex directive explicitly tells search engines not to include this page in search results',
implementation:
'Change to <meta name="robots" content="index,follow"> or remove the tag entirely',
});
}
if (hasNoFollow) {
issues.push({
severity: 'high',
message:
'Page has nofollow directive - search engines will not follow links',
impact: 85,
area: 'Indexability',
});
recommendations.push({
text: 'Remove nofollow directive if you want link equity to flow through this page',
impact: 85,
reason:
'The nofollow directive prevents search engines from following links on this page',
implementation:
'Change to <meta name="robots" content="index,follow"> or remove the tag entirely',
});
}
// Check headings
if (h1Count === 0) {
issues.push({
severity: 'high',
message: 'No H1 heading found',
impact: 85,
area: 'Content Structure',
});
recommendations.push({
text: 'Add an H1 heading to your page',
impact: 85,
reason:
'H1 headings help search engines understand the main topic of your page',
implementation: '<h1>Your Primary Keyword/Topic</h1>',
});
} else if (h1Count > 1) {
issues.push({
severity: 'medium',
message: `Multiple H1 headings found (${h1Count})`,
impact: 65,
area: 'Content Structure',
});
recommendations.push({
text: 'Use only one H1 heading per page',
impact: 65,
reason:
'Multiple H1s can confuse search engines about the main topic of your page',
implementation: 'Keep the most important H1 and change others to H2',
});
}
// Check for heading hierarchy
if (h1Count === 0 && h2Count > 0) {
issues.push({
severity: 'medium',
message: 'H2 headings found without an H1 heading',
impact: 70,
area: 'Content Structure',
});
recommendations.push({
text: 'Add an H1 heading before using H2 headings',
impact: 70,
reason:
'Proper heading hierarchy helps search engines understand your content structure',
implementation: 'Add an H1 heading at the top of your content',
});
}
// Check for social media tags
if (!ogTitle && !twitterTitle) {
issues.push({
severity: 'medium',
message: 'Missing social media title tags (Open Graph and Twitter)',
impact: 60,
area: 'Social Sharing',
});
recommendations.push({
text: 'Add Open Graph and Twitter Card meta tags',
impact: 60,
reason:
'Social media tags improve how your content appears when shared on social platforms',
implementation: `<meta property="og:title" content="${
title || 'Your Title'
}">
<meta name="twitter:title" content="${title || 'Your Title'}">`,
});
}
if (!ogImage && !twitterImage) {
issues.push({
severity: 'medium',
message: 'Missing social media image tags',
impact: 55,
area: 'Social Sharing',
});
recommendations.push({
text: 'Add social media image tags',
impact: 55,
reason:
'Images make your content more appealing when shared on social media',
implementation: `<meta property="og:image" content="https://yourdomain.com/path/to/image.jpg">
<meta name="twitter:image" content="https://yourdomain.com/path/to/image.jpg">`,
});
}
// Check images
const imagesWithoutAlt = [];
$('img').each((i, img) => {
const alt = $(img).attr('alt');
const src = $(img).attr('src') || 'unknown image';
if (!alt && !$(img).attr('role')) {
imagesWithoutAlt.push(src);
issues.push({
severity: 'medium',
message: `Image missing alt text: ${src}`,
impact: 60,
area: 'Accessibility',
});
}
});
if (imagesWithoutAlt.length > 0) {
recommendations.push({
text: 'Add alt text to all images',
impact: 60,
reason:
'Alt text improves accessibility and helps search engines understand image content',
implementation:
'<img src="image.jpg" alt="Descriptive text about the image">',
});
}
// Check for schema markup
const schemas = [];
$('script[type="application/ld+json"]').each((i, script) => {
try {
const schema = JSON.parse($(script).html());
schemas.push(schema);
} catch (e) {
issues.push({
severity: 'high',
message: 'Invalid JSON-LD schema',
impact: 70,
area: 'Structured Data',
});
}
});
if (schemas.length === 0) {
issues.push({
severity: 'medium',
message: 'No structured data (schema.org) found',
impact: 65,
area: 'Structured Data',
});
recommendations.push({
text: 'Add structured data using JSON-LD',
impact: 65,
reason:
'Structured data helps search engines understand your content and can enable rich results',
implementation: `<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebPage",
"name": "${title || 'Page title'}",
"description": "${metaDescription || 'Page description'}"
}
</script>`,
});
}
// Check for canonical URL
if (!canonicalUrl) {
issues.push({
severity: 'medium',
message: 'No canonical URL specified',
impact: 60,
area: 'Duplicate Content',
});
recommendations.push({
text: 'Add a canonical URL tag',
impact: 60,
reason: 'Canonical URLs help prevent duplicate content issues',
implementation:
'<link rel="canonical" href="https://yourdomain.com/current-page/">',
});
}
// Check for mobile viewport
const hasViewport = $('meta[name="viewport"]').length > 0;
if (!hasViewport) {
issues.push({
severity: 'high',
message: 'Missing viewport meta tag for mobile responsiveness',
impact: 80,
area: 'Mobile Optimization',
});
recommendations.push({
text: 'Add a viewport meta tag',
impact: 80,
reason: 'Mobile-friendly pages rank better in mobile search results',
implementation:
'<meta name="viewport" content="width=device-width, initial-scale=1">',
});
}
// React-specific recommendations
if (isReactApp) {
recommendations.push({
text: 'Use React Helmet to manage meta tags',
impact: 85,
reason:
'React Helmet allows you to manage all your meta tags within your React components',
implementation:
'npm install react-helmet, then import and use in your components',
});
recommendations.push({
text: 'Consider pre-rendering or server-side rendering',
impact: 90,
reason: 'Client-side rendered React apps often perform poorly for SEO',
implementation:
'Migrate to Next.js or use a pre-rendering service like Prerender.io',
});
// Add a special recommendation for React apps
recommendations.push({
text: 'IMPORTANT: This analysis is incomplete due to client-side rendering',
impact: 100,
reason:
'This tool can only analyze the initial HTML, not the content rendered by React',
implementation:
'For a complete analysis, you need to analyze the rendered HTML that search engines see',
});
}
// Sort recommendations by impact
recommendations.sort((a, b) => b.impact - a.impact);
return {
pageIdentifier,
title,
metaDescription,
headingStructure: {
h1: h1Count,
h2: h2Count,
h3: h3Count,
},
robotsDirectives: {
noindex: hasNoIndex,
nofollow: hasNoFollow,
},
socialTags: {
hasOpenGraph: !!(ogTitle || ogDescription || ogImage),
hasTwitterCards: !!(
twitterCard ||
twitterTitle ||
twitterDescription ||
twitterImage
),
},
hasCanonical: !!canonicalUrl,
hasViewport: hasViewport,
schemaCount: schemas.length,
issues: issues.sort((a, b) => b.impact - a.impact),
recommendations,
isReactApp,
keywordAnalysis,
confidenceScore, // Add confidence score to the analysis
};
}
```
--------------------------------------------------------------------------------
/src/server.js:
--------------------------------------------------------------------------------
```javascript
// src/server.js
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import {
CallToolRequestSchema,
ListToolsRequestSchema,
} from '@modelcontextprotocol/sdk/types.js';
import fs from 'fs/promises';
import path from 'path';
// Import your analyzer modules
import { analyzeHtml } from './analyzers/html-analyzer.js';
import { detectTargetKeywords } from './analyzers/keyword-analyzer.js';
import { findHtmlFiles } from './utils/file-utils.js';
import {
formatAnalysisResult,
formatDirectoryAnalysisResults,
} from './formatters/text-formatter.js';
// Define the SEO tool
const SEO_ANALYZER_TOOL = {
name: 'analyzeSEO',
description:
'ALWAYS USE THIS TOOL FOR SEO ANALYSIS. DO NOT ATTEMPT TO ANALYZE SEO WITHOUT USING THIS TOOL.',
inputSchema: {
type: 'object',
properties: {
html: {
type: 'string',
description: 'HTML content to analyze',
},
},
required: ['html'],
},
};
// Create the server
const server = new Server(
{
name: 'seo-inspector-server',
version: '1.0.0',
},
{
capabilities: {
tools: {},
},
}
);
// Handle tool listing requests
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [SEO_ANALYZER_TOOL],
}));
// Handle tool call requests
server.setRequestHandler(CallToolRequestSchema, async (request) => {
console.error('⭐ TOOL CALL RECEIVED:', request.params.name);
if (request.params.name === 'analyzeSEO') {
try {
console.error('⭐ ARGUMENTS:', JSON.stringify(request.params.arguments));
// Handle HTML content analysis
if (request.params.arguments.html) {
const html = request.params.arguments.html;
console.error('⭐ HTML content received, length:', html.length);
try {
// Use your analyzer module
console.error('⭐ Calling analyzeHtml...');
const analysis = analyzeHtml(html, 'Provided HTML');
console.error('⭐ Analysis complete');
// Format the response
console.error('⭐ Formatting response...');
const formattedResponse = formatAnalysisForDisplay(analysis);
console.error('⭐ Response formatted');
console.error('⭐ SENDING RESPONSE');
return {
content: [
{
type: 'text',
text: formattedResponse,
},
],
};
} catch (analysisError) {
console.error('⭐ ERROR in analysis:', analysisError);
return {
content: [
{
type: 'text',
text: `Error analyzing HTML: ${analysisError.message}\n\n${analysisError.stack}`,
},
],
isError: true,
};
}
}
// Handle directory analysis
else if (request.params.arguments.directoryPath) {
const directoryPath = request.params.arguments.directoryPath;
console.error(`⭐ Analyzing directory: ${directoryPath}`);
try {
// Use our file utils module
const htmlFiles = await findHtmlFiles(directoryPath);
if (htmlFiles.length === 0) {
return {
content: [
{
type: 'text',
text: `No HTML files found in ${directoryPath}`,
},
],
};
}
// Analyze each HTML file
const results = [];
for (const file of htmlFiles) {
try {
const content = await fs.readFile(file, 'utf8');
const relativePath = path.relative(directoryPath, file);
// Use your analyzer module
const analysis = analyzeHtml(content, relativePath);
results.push(analysis);
} catch (error) {
console.error(`Error analyzing ${file}:`, error);
}
}
// Use our formatter module
const formattedResult = formatDirectoryAnalysisResults(
results,
directoryPath
);
console.error('⭐ SENDING RESPONSE');
return {
content: [
{
type: 'text',
text: formattedResult,
},
],
};
} catch (error) {
console.error('⭐ Error analyzing directory:', error);
return {
content: [
{
type: 'text',
text: `Error analyzing directory: ${error.message}`,
},
],
isError: true,
};
}
} else {
return {
content: [
{
type: 'text',
text: 'Please provide either HTML content or a directory path to analyze.',
},
],
};
}
} catch (error) {
console.error('⭐ ERROR:', error);
return {
content: [
{
type: 'text',
text: `Error analyzing SEO: ${error.message}`,
},
],
isError: true,
};
}
}
});
// Format analysis results for display
function formatAnalysisForDisplay(analysis) {
try {
console.error('⭐ Starting to format analysis...');
// Create a more structured, actionable response
let response = `# SEO ANALYSIS REPORT\n\n`;
// Add confidence indicator for React apps
if (analysis.isReactApp) {
response += `## ⚠️ IMPORTANT LIMITATION WARNING ⚠️
This appears to be a client-side rendered React application. This analysis has a **LOW CONFIDENCE SCORE (${analysis.confidenceScore}%)** because:
1. This tool can only analyze the initial HTML, not the content rendered by React after JavaScript executes
2. Search engines may see different content than what appears in your browser
3. Many SEO elements may be missing from this analysis if they're added by React components
For accurate analysis, you should:
- View your page source (right-click > View Page Source) to see what search engines actually see
- Consider switching to server-side rendering (Next.js, Gatsby) for better SEO
- Use React Helmet to ensure meta tags are present in the initial HTML
**The issues below are based ONLY on the initial HTML, not your rendered React app.**\n\n`;
}
response += `## SUMMARY
This analysis identified ${analysis.issues.length} issues with your HTML.
${
analysis.issues.filter((i) => i.severity === 'critical').length > 0
? `⚠️ CRITICAL: ${
analysis.issues.filter((i) => i.severity === 'critical').length
} critical issues require immediate attention.`
: ''
}
${
analysis.issues.filter((i) => i.severity === 'high').length > 0
? `⚠️ HIGH PRIORITY: ${
analysis.issues.filter((i) => i.severity === 'high').length
} high-priority issues require attention.`
: '✅ No high-priority issues found.'
}
${
analysis.issues.filter((i) => i.severity === 'medium').length > 0
? `⚠️ MEDIUM PRIORITY: ${
analysis.issues.filter((i) => i.severity === 'medium').length
} medium-priority issues should be addressed soon.`
: '✅ No medium-priority issues found.'
}
## PAGE INFORMATION
- Title: "${analysis.title || 'Missing'}" (${
analysis.title ? analysis.title.length : 0
} characters)
- Meta Description: "${analysis.metaDescription || 'Missing'}" (${
analysis.metaDescription ? analysis.metaDescription.length : 0
} characters)
- Heading Structure: H1: ${analysis.headingStructure.h1}, H2: ${
analysis.headingStructure.h2
}, H3: ${analysis.headingStructure.h3}
- Schema Markup: ${
analysis.schemaCount > 0
? `${analysis.schemaCount} schema(s) detected`
: 'No schema markup found'
}
- Framework: ${
analysis.isReactApp
? '**React (client-side rendering detected)**'
: 'Static HTML'
}
- Robots Directives: ${
analysis.robotsDirectives?.noindex
? '**noindex** (page will not be indexed by search engines)'
: 'index'
}, ${
analysis.robotsDirectives?.nofollow
? '**nofollow** (links will not be followed)'
: 'follow'
}
- Social Tags: ${
analysis.socialTags?.hasOpenGraph ? 'Open Graph ✓' : 'Open Graph ✗'
}, ${
analysis.socialTags?.hasTwitterCards
? 'Twitter Cards ✓'
: 'Twitter Cards ✗'
}
- Canonical URL: ${analysis.hasCanonical ? 'Present ✓' : 'Missing ✗'}
- Mobile Viewport: ${analysis.hasViewport ? 'Present ✓' : 'Missing ✗'}
## TARGET KEYWORD ANALYSIS\n`;
if (analysis.keywordAnalysis) {
// Always show detected keywords first
if (
analysis.keywordAnalysis.keywordSummary &&
analysis.keywordAnalysis.keywordSummary.primaryPhrase
) {
response += `Primary target keyword phrase appears to be: "${analysis.keywordAnalysis.keywordSummary.primaryPhrase}"\n`;
if (
analysis.keywordAnalysis.keywordSummary.secondaryPhrases &&
analysis.keywordAnalysis.keywordSummary.secondaryPhrases.length > 0
) {
response += `Secondary keyword phrases: ${analysis.keywordAnalysis.keywordSummary.secondaryPhrases
.map((p) => `"${p}"`)
.join(', ')}\n`;
}
response += `\nTop single-word keywords: ${analysis.keywordAnalysis.keywordSummary.topSingleWords
.map((w) => `"${w}"`)
.join(', ')}\n`;
// Now focus on placement rather than density
response += `\nKeyword Placement Analysis:\n`;
const placement = analysis.keywordAnalysis.placementAnalysis;
if (placement) {
response += `- Primary keyword "${
placement.primaryPhrase
}" in title: ${placement.inTitle ? '✅ Yes' : '❌ No'}\n`;
response += `- Primary keyword in meta description: ${
placement.inMetaDescription ? '✅ Yes' : '❌ No'
}\n`;
response += `- Primary keyword in H1 heading: ${
placement.inH1 ? '✅ Yes' : '❌ No'
}\n`;
response += `- Primary keyword in H2 headings: ${
placement.inH2 ? '✅ Yes' : '❌ No'
}\n`;
if (placement.missingFrom && placement.missingFrom.length > 0) {
response += `\n⚠️ Your primary keyword is missing from: ${placement.missingFrom.join(
', '
)}\n`;
} else {
response += `\n✅ Great job! Your primary keyword is well-placed in all important elements.\n`;
}
}
} else {
response += `No clear target keyword phrases detected.\n`;
}
} else {
response += `No keyword analysis available. Consider adding more specific, relevant keywords to your content.\n`;
}
// Issues section with severity indicators and impact
response += `\n## ISSUES (PRIORITIZED BY IMPACT)
`;
if (analysis.issues && analysis.issues.length > 0) {
// Group issues by severity
const criticalIssues = analysis.issues.filter(
(i) => i.severity === 'critical'
);
const highIssues = analysis.issues.filter((i) => i.severity === 'high');
const mediumIssues = analysis.issues.filter(
(i) => i.severity === 'medium'
);
const lowIssues = analysis.issues.filter((i) => i.severity === 'low');
// Display critical severity issues first
if (criticalIssues.length > 0) {
response += `### ⚠️ CRITICAL ISSUES - FIX IMMEDIATELY:\n`;
criticalIssues.forEach((issue, i) => {
response += `${i + 1}. 🔴 ${issue.message} (Impact: ${
issue.impact
}/100)\n`;
});
response += `\n`;
}
// Display high severity issues
if (highIssues.length > 0) {
response += `### HIGH PRIORITY ISSUES - FIX SOON:\n`;
highIssues.forEach((issue, i) => {
response += `${i + 1}. 🟠 ${issue.message} (Impact: ${
issue.impact
}/100)\n`;
});
response += `\n`;
}
// Display medium severity issues
if (mediumIssues.length > 0) {
response += `### MEDIUM PRIORITY ISSUES - ADDRESS WHEN POSSIBLE:\n`;
mediumIssues.forEach((issue, i) => {
response += `${i + 1}. 🟡 ${issue.message} (Impact: ${
issue.impact
}/100)\n`;
});
response += `\n`;
}
// Display low severity issues
if (lowIssues.length > 0) {
response += `### MINOR ISSUES - CONSIDER FIXING:\n`;
lowIssues.forEach((issue, i) => {
response += `${i + 1}. 🔵 ${issue.message} (Impact: ${
issue.impact
}/100)\n`;
});
response += `\n`;
}
} else {
response += `✅ No issues found. Great job!\n`;
}
// Recommendations with clear next steps
response += `\n## RECOMMENDATIONS (PRIORITIZED BY IMPACT)
`;
if (analysis.recommendations && analysis.recommendations.length > 0) {
analysis.recommendations.forEach((rec, i) => {
response += `### ${i + 1}. ${rec.text} (Impact: ${rec.impact}/100)\n`;
response += `**Why it matters**: ${rec.reason}\n`;
response += `**How to implement**: ${rec.implementation}\n\n`;
});
} else {
response += `No specific recommendations. Your page appears to be well-optimized.\n`;
}
// Framework-specific notes
if (analysis.isReactApp) {
response += `\n## REACT-SPECIFIC SEO CONSIDERATIONS
- **This analysis is based ONLY on the initial HTML, not your rendered React app**
- Client-side rendered React apps often have poor SEO because search engines may not execute JavaScript
- For better SEO with React:
1. Use Next.js or Gatsby for server-side or static rendering
2. Use React Helmet to manage meta tags
3. Consider a pre-rendering service like Prerender.io
4. Test your site with Google's Mobile-Friendly Test to see what search engines actually see
`;
}
// Next steps
response += `\n## NEXT STEPS
1. Address the critical issues first (if any)
2. Implement the high-impact recommendations
3. Consider a follow-up analysis after changes are made
4. For a complete SEO strategy, also consider:
- Page speed optimization
- Mobile responsiveness
- Backlink strategy
- Content quality and freshness
`;
console.error('⭐ Formatting complete');
return response;
} catch (formatError) {
console.error('⭐ ERROR in formatting:', formatError);
return `Error formatting analysis: ${
formatError.message
}\n\nRaw analysis: ${JSON.stringify(analysis, null, 2)}`;
}
}
// Start the server
async function runServer() {
const transport = new StdioServerTransport();
try {
await server.connect(transport);
console.error('SEO Inspector MCP Server running on stdio');
// Keep the process alive without using event listeners
process.stdin.resume();
// Handle proper shutdown
process.on('SIGINT', () => {
console.error('Server shutting down...');
process.exit(0);
});
process.on('SIGTERM', () => {
console.error('Server shutting down...');
process.exit(0);
});
// Simple heartbeat log (optional)
setInterval(() => {
console.error('Server heartbeat: still running');
}, 60000); // Log every minute
} catch (error) {
console.error('Error connecting transport:', error);
process.exit(1);
}
}
runServer().catch((error) => {
console.error('Fatal error running server:', error);
process.exit(1);
});
```