diff --git a/.changeset/light-pumas-brake.md b/.changeset/light-pumas-brake.md new file mode 100644 index 000000000..7aa419911 --- /dev/null +++ b/.changeset/light-pumas-brake.md @@ -0,0 +1,7 @@ +--- +'@verdaccio/ui-theme': minor +'@verdaccio/server-fastify': minor +'@verdaccio/web': minor +--- + +feat: parse and sanitize on ui diff --git a/.changeset/pre.json b/.changeset/pre.json index 483f24c77..aa48ae971 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -9,7 +9,6 @@ "@verdaccio/file-locking": "11.0.0-alpha.0", "verdaccio-htpasswd": "11.0.0-alpha.0", "@verdaccio/local-storage": "11.0.0-alpha.0", - "@verdaccio/readme": "11.0.0-alpha.0", "@verdaccio/types": "11.0.0-alpha.0", "@verdaccio/hooks": "6.0.0-alpha.0", "@verdaccio/loaders": "6.0.0-alpha.0", diff --git a/packages/core/readme/.babelrc b/packages/core/readme/.babelrc deleted file mode 100644 index 851856e59..000000000 --- a/packages/core/readme/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../../../.babelrc" -} diff --git a/packages/core/readme/.gitignore b/packages/core/readme/.gitignore deleted file mode 100644 index c3af85790..000000000 --- a/packages/core/readme/.gitignore +++ /dev/null @@ -1 +0,0 @@ -lib/ diff --git a/packages/core/readme/CHANGELOG.md b/packages/core/readme/CHANGELOG.md deleted file mode 100644 index 00ed6bf27..000000000 --- a/packages/core/readme/CHANGELOG.md +++ /dev/null @@ -1,307 +0,0 @@ -# Change Log - -## 11.0.0-6-next.6 - -### Patch Changes - -- 351aeeaa: fix(deps): @verdaccio/utils should be a prod dep of local-storage - -## 11.0.0-6-next.5 - -### Major Changes - -- 292c0a37: feat!: replace deprecated request dependency by got - - This is a big refactoring of the core, fetching dependencies, improve code, more tests and better stability. This is essential for the next release, will take some time but would allow modularize more the core. - - ## Notes - - - Remove deprecated `request` by other `got`, retry improved, custom Agent ( got does not include it built-in) - - Remove `async` dependency from storage (used by core) it was linked with proxy somehow safe to remove now - - Refactor with promises instead callback wherever is possible - - ~Document the API~ - - Improve testing, integration tests - - Bugfix - - Clean up old validations - - Improve performance - - ## 💥 Breaking changes - - - Plugin API methods were callbacks based are returning promises, this will break current storage plugins, check documentation for upgrade. - - Write Tarball, Read Tarball methods parameters change, a new set of options like `AbortController` signals are being provided to the `addAbortSignal` can be internally used with Streams when a request is aborted. eg: `addAbortSignal(signal, fs.createReadStream(pathName));` - - `@verdaccio/streams` stream abort support is legacy is being deprecated removed - - Remove AWS and Google Cloud packages for future refactoring [#2574](https://github.com/verdaccio/verdaccio/pull/2574). - -## 11.0.0-6-next.4 - -### Major Changes - -- 794af76c: Remove Node 12 support - - - We need move to the new `undici` and does not support Node.js 12 - -## 10.0.0-alpha.3 - -### Patch Changes - -- fecbb9be: chore: add release step to private regisry on merge changeset pr - -## 10.0.0-alpha.2 - -### Minor Changes - -- 54c58d1e: feat: add server rate limit protection to all request - - To modify custom values, use the server settings property. - - ```markdown - server: - - ## https://www.npmjs.com/package/express-rate-limit#configuration-options - - rateLimit: - windowMs: 1000 - max: 10000 - ``` - - The values are intended to be high, if you want to improve security of your server consider - using different values. - -## 10.0.0-alpha.1 - -### Major Changes - -- d87fa026: feat!: experiments config renamed to flags - - - The `experiments` configuration is renamed to `flags`. The functionality is exactly the same. - - ```js - flags: token: false; - search: false; - ``` - - - The `self_path` property from the config file is being removed in favor of `config_file` full path. - - Refactor `config` module, better types and utilities - -- da1ee9c8: - Replace signature handler for legacy tokens by removing deprecated crypto.createDecipher by createCipheriv - - - Introduce environment variables for legacy tokens - - ### Code Improvements - - - Add debug library for improve developer experience - - ### Breaking change - - - The new signature invalidates all previous tokens generated by Verdaccio 4 or previous versions. - - The secret key must have 32 characters long. - - ### New environment variables - - - `VERDACCIO_LEGACY_ALGORITHM`: Allows to define the specific algorithm for the token signature which by default is `aes-256-ctr` - - `VERDACCIO_LEGACY_ENCRYPTION_KEY`: By default, the token stores in the database, but using this variable allows to get it from memory - -### Minor Changes - -- 26b494cb: feat: add typescript project references settings - - Reading https://ebaytech.berlin/optimizing-multi-package-apps-with-typescript-project-references-d5c57a3b4440 I realized I can use project references to solve the issue to pre-compile modules on develop mode. - - It allows to navigate (IDE) trough the packages without need compile the packages. - - Add two `tsconfig`, one using the previous existing configuration that is able to produce declaration files (`tsconfig.build`) and a new one `tsconfig` which is enables [_projects references_](https://www.typescriptlang.org/docs/handbook/project-references.html). - -### Patch Changes - -- b57b4338: Enable prerelease mode with **changesets** -- 31af0164: ESLint Warnings Fixed - - Related to issue #1461 - - - max-len: most of the sensible max-len errors are fixed - - no-unused-vars: most of these types of errors are fixed by deleting not needed declarations - - @typescript-eslint/no-unused-vars: same as above - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [9.7.3](https://github.com/verdaccio/monorepo/compare/v9.7.2...v9.7.3) (2020-07-30) - -### Bug Fixes - -- update marked / request security vulnerability ([#378](https://github.com/verdaccio/monorepo/issues/378)) ([4188e08](https://github.com/verdaccio/monorepo/commit/4188e088f42d0f6e090c948b869312ba1f30cd79)) - -## [9.7.2](https://github.com/verdaccio/monorepo/compare/v9.7.1...v9.7.2) (2020-07-20) - -**Note:** Version bump only for package @verdaccio/readme - -## [9.7.1](https://github.com/verdaccio/monorepo/compare/v9.7.0...v9.7.1) (2020-07-10) - -**Note:** Version bump only for package @verdaccio/readme - -# [9.7.0](https://github.com/verdaccio/monorepo/compare/v9.6.1...v9.7.0) (2020-06-24) - -**Note:** Version bump only for package @verdaccio/readme - -## [9.6.1](https://github.com/verdaccio/monorepo/compare/v9.6.0...v9.6.1) (2020-06-07) - -**Note:** Version bump only for package @verdaccio/readme - -## [9.5.1](https://github.com/verdaccio/monorepo/compare/v9.5.0...v9.5.1) (2020-06-03) - -### Bug Fixes - -- restore Node v8 support ([#361](https://github.com/verdaccio/monorepo/issues/361)) ([9be55a1](https://github.com/verdaccio/monorepo/commit/9be55a1deebe954e8eef9edc59af9fd16e29daed)) - -# [9.5.0](https://github.com/verdaccio/monorepo/compare/v9.4.1...v9.5.0) (2020-05-02) - -**Note:** Version bump only for package @verdaccio/readme - -# [9.4.0](https://github.com/verdaccio/monorepo/compare/v9.3.4...v9.4.0) (2020-03-21) - -**Note:** Version bump only for package @verdaccio/readme - -## [9.3.3](https://github.com/verdaccio/monorepo/compare/v9.3.2...v9.3.3) (2020-03-11) - -### Bug Fixes - -- update jsdom@16.2.1 ([#340](https://github.com/verdaccio/monorepo/issues/340)) ([6060769](https://github.com/verdaccio/monorepo/commit/6060769d52f796337dda9f1a54f149c5fb22ca17)) - -## [9.3.2](https://github.com/verdaccio/monorepo/compare/v9.3.1...v9.3.2) (2020-03-08) - -### Bug Fixes - -- security dependency jsdom@16.2.0 update ([#338](https://github.com/verdaccio/monorepo/issues/338)) ([0599f3e](https://github.com/verdaccio/monorepo/commit/0599f3e16fd1de993494943e2e7464d10b62d6be)) -- update dependencies ([#332](https://github.com/verdaccio/monorepo/issues/332)) ([b6165ae](https://github.com/verdaccio/monorepo/commit/b6165aea9b7e4012477081eae68bfa7159c58f56)) - -## [9.3.1](https://github.com/verdaccio/monorepo/compare/v9.3.0...v9.3.1) (2020-02-23) - -**Note:** Version bump only for package @verdaccio/readme - -# [9.3.0](https://github.com/verdaccio/monorepo/compare/v9.2.0...v9.3.0) (2020-01-29) - -**Note:** Version bump only for package @verdaccio/readme - -# [9.0.0](https://github.com/verdaccio/monorepo/compare/v8.5.3...v9.0.0) (2020-01-07) - -**Note:** Version bump only for package @verdaccio/readme - -## [8.5.2](https://github.com/verdaccio/monorepo/compare/v8.5.1...v8.5.2) (2019-12-25) - -**Note:** Version bump only for package @verdaccio/readme - -## [8.5.1](https://github.com/verdaccio/monorepo/compare/v8.5.0...v8.5.1) (2019-12-24) - -**Note:** Version bump only for package @verdaccio/readme - -# [8.5.0](https://github.com/verdaccio/monorepo/compare/v8.4.2...v8.5.0) (2019-12-22) - -**Note:** Version bump only for package @verdaccio/readme - -## [8.4.2](https://github.com/verdaccio/monorepo/compare/v8.4.1...v8.4.2) (2019-11-23) - -**Note:** Version bump only for package @verdaccio/readme - -## [8.4.1](https://github.com/verdaccio/monorepo/compare/v8.4.0...v8.4.1) (2019-11-22) - -**Note:** Version bump only for package @verdaccio/readme - -# [8.4.0](https://github.com/verdaccio/monorepo/compare/v8.3.0...v8.4.0) (2019-11-22) - -**Note:** Version bump only for package @verdaccio/readme - -# [8.3.0](https://github.com/verdaccio/monorepo/compare/v8.2.0...v8.3.0) (2019-10-27) - -**Note:** Version bump only for package @verdaccio/readme - -# [8.2.0](https://github.com/verdaccio/monorepo/compare/v8.2.0-next.0...v8.2.0) (2019-10-23) - -### Bug Fixes - -- core/readme/package.json to reduce vulnerabilities ([#216](https://github.com/verdaccio/monorepo/issues/216)) ([40299ab](https://github.com/verdaccio/monorepo/commit/40299ab)) - -# [8.2.0-next.0](https://github.com/verdaccio/monorepo/compare/v8.1.4...v8.2.0-next.0) (2019-10-08) - -### Bug Fixes - -- fixed lint errors ([5e677f7](https://github.com/verdaccio/monorepo/commit/5e677f7)) -- fixed lint errors ([c80e915](https://github.com/verdaccio/monorepo/commit/c80e915)) -- quotes should be single ([ae9aa44](https://github.com/verdaccio/monorepo/commit/ae9aa44)) - -## [8.1.2](https://github.com/verdaccio/monorepo/compare/v8.1.1...v8.1.2) (2019-09-29) - -### Bug Fixes - -- **readme:** security vulnerabilities in marked dep ([ee604b1](https://github.com/verdaccio/monorepo/commit/ee604b1)) - -## [8.1.1](https://github.com/verdaccio/monorepo/compare/v8.1.0...v8.1.1) (2019-09-26) - -### Bug Fixes - -- **security:** Cross-site Scripting (XSS) for readme ([7b53e1b](https://github.com/verdaccio/monorepo/commit/7b53e1b)) - -# [8.1.0](https://github.com/verdaccio/monorepo/compare/v8.0.1-next.1...v8.1.0) (2019-09-07) - -**Note:** Version bump only for package @verdaccio/readme - -## [8.0.1-next.1](https://github.com/verdaccio/monorepo/compare/v8.0.1-next.0...v8.0.1-next.1) (2019-08-29) - -**Note:** Version bump only for package @verdaccio/readme - -## [8.0.1-next.0](https://github.com/verdaccio/monorepo/compare/v8.0.0...v8.0.1-next.0) (2019-08-29) - -**Note:** Version bump only for package @verdaccio/readme - -# [8.0.0](https://github.com/verdaccio/monorepo/compare/v8.0.0-next.4...v8.0.0) (2019-08-22) - -**Note:** Version bump only for package @verdaccio/readme - -# [8.0.0-next.4](https://github.com/verdaccio/monorepo/compare/v8.0.0-next.3...v8.0.0-next.4) (2019-08-18) - -**Note:** Version bump only for package @verdaccio/readme - -# [8.0.0-next.2](https://github.com/verdaccio/monorepo/compare/v8.0.0-next.1...v8.0.0-next.2) (2019-08-03) - -**Note:** Version bump only for package @verdaccio/readme - -# [8.0.0-next.1](https://github.com/verdaccio/monorepo/compare/v8.0.0-next.0...v8.0.0-next.1) (2019-08-01) - -**Note:** Version bump only for package @verdaccio/readme - -# [8.0.0-next.0](https://github.com/verdaccio/monorepo/compare/v2.0.0...v8.0.0-next.0) (2019-08-01) - -### Features - -- **readme:** import readme package ([f4bbf3a](https://github.com/verdaccio/monorepo/commit/f4bbf3a)) -- **readme:** modernize project ([0d8f963](https://github.com/verdaccio/monorepo/commit/0d8f963)) - -# Changelog - -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. - -### [1.0.4](https://github.com/verdaccio/readme/compare/v1.0.3...v1.0.4) (2019-06-22) - -### Bug Fixes - -- update dependencies ([3316ccf](https://github.com/verdaccio/readme/commit/3316ccf)) - -### [1.0.3](https://github.com/verdaccio/readme/compare/v1.0.2...v1.0.3) (2019-05-15) - -### Bug Fixes - -- **build:** lib folder as main ([e1ac882](https://github.com/verdaccio/readme/commit/e1ac882)) - -### [1.0.2](https://github.com/verdaccio/readme/compare/v1.0.1...v1.0.2) (2019-05-15) - -### Bug Fixes - -- **build:** remove publish script ([9b36d5f](https://github.com/verdaccio/readme/commit/9b36d5f)) - -### 1.0.1 (2019-05-15) - -### Tests - -- add basic test ([774a54d](https://github.com/verdaccio/readme/commit/774a54d)) -- add image test ([8c4639e](https://github.com/verdaccio/readme/commit/8c4639e)) -- add xss scenarios ([81e43e8](https://github.com/verdaccio/readme/commit/81e43e8)) -- add xss scenarios ([b211b97](https://github.com/verdaccio/readme/commit/b211b97)) diff --git a/packages/core/readme/LICENSE b/packages/core/readme/LICENSE deleted file mode 100644 index 65fb12e2a..000000000 --- a/packages/core/readme/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2019 Verdaccio - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/core/readme/README.md b/packages/core/readme/README.md deleted file mode 100644 index 7fb4fdc49..000000000 --- a/packages/core/readme/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# @verdaccio/readme - -📃 Readme markdown parser - -[![verdaccio (latest)](https://img.shields.io/npm/v/@verdaccio/readme/latest.svg)](https://www.npmjs.com/package/@verdaccio/readme) -[![CircleCI](https://circleci.com/gh/verdaccio/readme/tree/master.svg?style=svg)](https://circleci.com/gh/verdaccio/readme/tree/master) -[![Known Vulnerabilities](https://snyk.io/test/github/verdaccio/readme/badge.svg?targetFile=package.json)](https://snyk.io/test/github/verdaccio/readme?targetFile=package.json) -[![codecov](https://codecov.io/gh/verdaccio/readme/branch/master/graph/badge.svg)](https://codecov.io/gh/verdaccio/readme) -[![backers](https://opencollective.com/verdaccio/tiers/backer/badge.svg?label=Backer&color=brightgreen)](https://opencollective.com/verdaccio) -[![discord](https://img.shields.io/discord/388674437219745793.svg)](http://chat.verdaccio.org/) -![MIT](https://img.shields.io/github/license/mashape/apistatus.svg) -[![node](https://img.shields.io/node/v/@verdaccio/readme/latest.svg)](https://www.npmjs.com/package/@verdaccio/readme) - -> This package is already built-in in verdaccio - -``` -npm install @verdaccio/readme -``` - -## License - -Verdaccio is [MIT licensed](https://github.com/verdaccio/readme/blob/master/LICENSE). diff --git a/packages/core/readme/jest.config.js b/packages/core/readme/jest.config.js deleted file mode 100644 index 1c3fbdb05..000000000 --- a/packages/core/readme/jest.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const config = require('../../../jest/config'); - -module.exports = Object.assign({}, config, {}); diff --git a/packages/core/readme/package.json b/packages/core/readme/package.json deleted file mode 100644 index 2b80508c9..000000000 --- a/packages/core/readme/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "@verdaccio/readme", - "version": "11.0.0-6-next.6", - "description": "Readme markdown parser", - "keywords": [ - "private", - "package", - "repository", - "registry", - "enterprise", - "modules", - "proxy", - "server", - "verdaccio" - ], - "author": { - "name": "Juan Picado", - "email": "juanpicado19@gmail.com" - }, - "license": "MIT", - "homepage": "https://verdaccio.org", - "engines": { - "node": ">=14", - "npm": ">=6" - }, - "repository": { - "type": "https", - "url": "https://github.com/verdaccio/verdaccio", - "directory": "packages/core/readme" - }, - "bugs": { - "url": "https://github.com/verdaccio/verdaccio/issues" - }, - "publishConfig": { - "access": "public" - }, - "main": "./build/index.js", - "types": "./build/index.d.ts", - "files": [ - "build" - ], - "dependencies": { - "dompurify": "2.4.0", - "jsdom": "17.0.0", - "marked": "3.0.8" - }, - "devDependencies": { - "@verdaccio/types": "workspace:11.0.0-6-next.17" - }, - "scripts": { - "clean": "rimraf ./build", - "test": "jest", - "build:types": "tsc --emitDeclarationOnly -p tsconfig.build.json", - "build:js": "babel src/ --out-dir build/ --copy-files --extensions \".ts,.tsx\" --source-maps", - "watch": "pnpm build:js -- --watch", - "build": "pnpm run build:js && pnpm run build:types" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/verdaccio" - } -} diff --git a/packages/core/readme/src/index.ts b/packages/core/readme/src/index.ts deleted file mode 100644 index b36942436..000000000 --- a/packages/core/readme/src/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -import createDOMPurify from 'dompurify'; -import { JSDOM } from 'jsdom'; -import marked from 'marked'; - -const DOMPurify = createDOMPurify(new JSDOM('').window); - -export default function parseReadme(readme: string): string | void { - if (readme) { - return DOMPurify.sanitize( - marked(readme, { - sanitize: false, - }).trim() - ); - } - - return; -} diff --git a/packages/core/readme/tests/__snapshots__/readme.spec.ts.snap b/packages/core/readme/tests/__snapshots__/readme.spec.ts.snap deleted file mode 100644 index 85f1245e8..000000000 --- a/packages/core/readme/tests/__snapshots__/readme.spec.ts.snap +++ /dev/null @@ -1,3 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`readme mix readmes / markdown should parse marked 1`] = `"

mix html and XSS markdown

Basic

"`; diff --git a/packages/core/readme/tests/partials/mixed-html-mk/readme.md b/packages/core/readme/tests/partials/mixed-html-mk/readme.md deleted file mode 100644 index a5dda982a..000000000 --- a/packages/core/readme/tests/partials/mixed-html-mk/readme.md +++ /dev/null @@ -1,5 +0,0 @@ -# mix html and XSS markdown - -[Basic]() - - diff --git a/packages/core/readme/tests/readme.spec.ts b/packages/core/readme/tests/readme.spec.ts deleted file mode 100644 index 38031bb3f..000000000 --- a/packages/core/readme/tests/readme.spec.ts +++ /dev/null @@ -1,247 +0,0 @@ -import fs from 'fs'; -import path from 'path'; - -import parseReadme from '../src'; - -function readReadme(project: string, fileName = 'readme.md'): Promise { - return new Promise((resolve, reject): void => { - fs.readFile(path.join(__dirname, 'partials', project, fileName), 'utf8', (err, data) => { - if (err) { - return reject(err); - } - - return resolve(data.toString()); - }); - }); -} - -function clean(text: string): string { - return text.replace(/\n|\r/g, '').trim(); -} - -describe('readme', () => { - test('should handle empty readme', () => { - expect(parseReadme('')).toBeUndefined(); - }); - - test('should handle single string readme', () => { - expect(parseReadme('this is a readme')).toEqual('

this is a readme

'); - }); - - test('should handle wrong text', () => { - // @ts-expect-error - expect(parseReadme(undefined)).toBeUndefined(); - }); - - describe('basic parsing', () => { - test('should parse basic', () => { - expect(parseReadme('# hi')).toEqual(`

hi

`); - }); - - test('should parse basic / js alert', () => { - expect(parseReadme("[Basic](javascript:alert('Basic'))")).toEqual('

Basic

'); - }); - - test('should parse basic / local storage', () => { - expect( - parseReadme('[Local Storage](javascript:alert(JSON.stringify(localStorage)))') - ).toEqual('

Local Storage

'); - }); - - test('should parse basic / case insensitive', () => { - expect(parseReadme("[CaseInsensitive](JaVaScRiPt:alert('CaseInsensitive'))")).toEqual( - '

CaseInsensitive

' - ); - }); - - test('should parse basic / url', () => { - expect(parseReadme("[URL](javascript://www.google.com%0Aalert('URL'))")).toEqual( - '

URL

' - ); - }); - - test('should parse basic / in quotes', () => { - expect(parseReadme('[In Quotes](\'javascript:alert("InQuotes")\')')).toEqual( - '

In Quotes

' - ); - }); - }); - - describe('should parse images', () => { - test('in quotes', () => { - expect( - parseReadme( - '![Escape SRC - onload](https://www.example.com/image.png"onload="alert(\'ImageOnLoad\'))' - ) - ).toEqual( - '

Escape SRC - onload

" - ); - }); - - test('in image error', () => { - expect(parseReadme('![Escape SRC - onerror]("onerror="alert(\'ImageOnError\'))')).toEqual( - '

Escape SRC - onerror

' - ); - }); - }); - - describe('should test fuzzing', () => { - test('xss / document cookie', () => { - expect(parseReadme('[XSS](javascript:prompt(document.cookie))')).toEqual('

XSS

'); - }); - - test('xss / white space cookie', () => { - expect( - parseReadme('[XSS](j a v a s c r i p t:prompt(document.cookie))') - ).toEqual('

[XSS](j a v a s c r i p t:prompt(document.cookie))

'); - }); - - test('xss / data test/html', () => { - expect( - parseReadme('[XSS](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)') - ).toEqual('

XSS

'); - }); - - test('xss / data test/html encoded', () => { - expect( - parseReadme( - '[XSS](javascript:ale' + - '2t('XSS'))' - ) - ).toEqual( - '

XSS

' - ); - }); - - test('xss / js prompt', () => { - expect(parseReadme('[XSS]: (javascript:prompt(document.cookie))')).toEqual(''); - }); - - test('xss / js window error alert', () => { - expect(parseReadme('[XSS](javascript:window.onerror=alert;throw%20document.cookie)')).toEqual( - '

XSS

' - ); - }); - - test('xss / js window encoded prompt', () => { - expect(parseReadme('[XSS](javascript://%0d%0aprompt(1))')).toEqual('

XSS

'); - }); - - test('xss / js window encoded prompt multiple statement', () => { - expect(parseReadme('[XSS](javascript://%0d%0aprompt(1);com)')).toEqual('

XSS

'); - }); - - test('xss / js window encoded window error alert multiple statement', () => { - expect(parseReadme('[XSS](javascript:window.onerror=alert;throw%20document.cookie)')).toEqual( - '

XSS

' - ); - }); - - test('xss / js window encoded window error alert throw error', () => { - expect( - parseReadme('[XSS](javascript://%0d%0awindow.onerror=alert;throw%20document.cookie)') - ).toEqual('

XSS

'); - }); - - test('xss / js window encoded data text/html base 64', () => { - expect( - parseReadme('[XSS](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)') - ).toEqual('

XSS

'); - }); - - test('xss / js vbscript alert', () => { - expect(parseReadme('[XSS](vbscript:alert(document.domain))')).toEqual('

XSS

'); - }); - - describe('xss / js alert this', () => { - test('xss / js case #1', () => { - expect(parseReadme('[XSS](javascript:this;alert(1))')).toEqual('

XSS

'); - }); - - test('xss / js case #2', () => { - expect(parseReadme('[XSS](javascript:this;alert(1))')).toEqual('

XSS

'); - }); - - test('xss / js case #3', () => { - expect(parseReadme('[XSS](javascript:this;alert(1))')).toEqual('

XSS

'); - }); - - test('xss / js case #4', () => { - expect(parseReadme('[XSS](Javascript:alert(1))')).toEqual('

XSS

'); - }); - - test('xss / js case #5', () => { - expect(parseReadme('[XSS](Javas%26%2399;ript:alert(1))')).toEqual( - '

XSS

' - ); - }); - - test('xss / js case #6', () => { - expect(parseReadme('[XSS](javascript:alert￾(1))')).toEqual('

XSS

'); - }); - }); - - test('xss / js confirm', () => { - expect(parseReadme('[XSS](javascript:confirm(1)')).toEqual('

XSS

'); - }); - - describe('xss / js url', () => { - test('xss / case #1', () => { - expect(parseReadme('[XSS](javascript://www.google.com%0Aprompt(1))')).toEqual( - '

XSS

' - ); - }); - - test('xss / case #2', () => { - expect(parseReadme('[XSS](javascript://%0d%0aconfirm(1);com)')).toEqual( - '

XSS

' - ); - }); - - test('xss / case #3', () => { - expect(parseReadme('[XSS](javascript:window.onerror=confirm;throw%201)')).toEqual( - '

XSS

' - ); - }); - - test('xss / case #4', () => { - expect(parseReadme('[XSS](�javascript:alert(document.domain))')).toEqual( - '

XSS

' - ); - }); - - test('xss / case #5', () => { - expect(parseReadme('![XSS](javascript:prompt(document.cookie))\\')).toEqual( - '

XSS\\

' - ); - }); - - test('xss / case #6', () => { - expect( - parseReadme('![XSS](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)\\') - ).toEqual( - '

XSS\\

' - ); - }); - - // FIXME: requires proper parsing - test.skip('xss / case #7', () => { - expect(parseReadme(`![XSS'"\`onerror=prompt(document.cookie)](x)\\`)).toEqual( - '

![XSS\'\\"`onerror=prompt(document.cookie)](x)\\\\

' - ); - }); - }); - }); - - describe('mix readmes / markdown', () => { - test('should parse marked', async () => { - const readme: string = await readReadme('mixed-html-mk'); - - expect(clean(parseReadme(readme) as string)).toMatchSnapshot(); - }); - }); -}); diff --git a/packages/core/readme/tsconfig.build.json b/packages/core/readme/tsconfig.build.json deleted file mode 100644 index 79f1f81e0..000000000 --- a/packages/core/readme/tsconfig.build.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../../tsconfig.base.json", - "compilerOptions": { - "rootDir": "./src", - "outDir": "./build" - }, - "include": ["src/**/*"], - "exclude": ["src/**/*.test.ts"] -} diff --git a/packages/core/readme/tsconfig.json b/packages/core/readme/tsconfig.json deleted file mode 100644 index ed65c36dd..000000000 --- a/packages/core/readme/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../../../tsconfig.reference.json", - "compilerOptions": { - "rootDir": "./src", - "outDir": "./build", - "preserveSymlinks": true, - "composite": true, - "declaration": true, - "declarationMap": true - }, - "include": ["src/**/*.ts"], - "exclude": ["src/**/*.test.ts"] -} diff --git a/packages/plugins/ui-theme/package.json b/packages/plugins/ui-theme/package.json index 5716504ee..86b43ce14 100644 --- a/packages/plugins/ui-theme/package.json +++ b/packages/plugins/ui-theme/package.json @@ -40,7 +40,6 @@ "css-loader": "6.7.1", "dayjs": "1.11.5", "friendly-errors-webpack-plugin": "1.7.0", - "github-markdown-css": "4.0.0", "harmony-reflect": "1.6.2", "history": "4.10.1", "html-webpack-plugin": "5.5.0", @@ -57,6 +56,9 @@ "normalize.css": "8.0.1", "optimize-css-assets-webpack-plugin": "6.0.1", "ora": "5.4.1", + "dompurify": "2.4.0", + "highlight.js": "11.6.0", + "marked": "4.2.2", "raw-loader": "4.0.2", "react": "18.2.0", "react-dom": "18.2.0", @@ -90,8 +92,7 @@ "webpack-dev-server": "3.11.3", "webpack-manifest-plugin": "4.1.1", "webpack-merge": "5.8.0", - "whatwg-fetch": "3.6.2", - "xss": "1.0.14" + "whatwg-fetch": "3.6.2" }, "keywords": [ "private", diff --git a/packages/plugins/ui-theme/src/pages/Version/DetailContainer/DetailContainerContentReadme.tsx b/packages/plugins/ui-theme/src/pages/Version/DetailContainer/DetailContainerContentReadme.tsx index d4b9c7972..8bbed34a2 100644 --- a/packages/plugins/ui-theme/src/pages/Version/DetailContainer/DetailContainerContentReadme.tsx +++ b/packages/plugins/ui-theme/src/pages/Version/DetailContainer/DetailContainerContentReadme.tsx @@ -1,5 +1,4 @@ import React from 'react'; -import { preventXSS } from 'verdaccio-ui/utils/sec-utils'; import Readme from './Readme'; @@ -11,8 +10,8 @@ const DetailContainerContentReadme: React.FC = ({ description }) => { if (!description) { return null; } - const encodedReadme = preventXSS(description); - return ; + + return ; }; export default DetailContainerContentReadme; diff --git a/packages/plugins/ui-theme/src/pages/Version/DetailContainer/Readme/Readme.tsx b/packages/plugins/ui-theme/src/pages/Version/DetailContainer/Readme/Readme.tsx index 29271b695..83c924d21 100644 --- a/packages/plugins/ui-theme/src/pages/Version/DetailContainer/Readme/Readme.tsx +++ b/packages/plugins/ui-theme/src/pages/Version/DetailContainer/Readme/Readme.tsx @@ -1,21 +1,23 @@ import styled from '@emotion/styled'; -import 'github-markdown-css'; +import 'highlight.js/styles/default.css'; import React from 'react'; import { Theme } from 'verdaccio-ui/design-tokens/theme'; import { Props } from './types'; +import { parseReadme } from './utils'; -const Readme: React.FC = ({ description }) => ( - -); - +const Readme: React.FC = ({ description }) => { + return ( + + ); +}; export default Readme; const Wrapper = styled('div')<{ theme?: Theme }>(({ theme }) => ({ background: theme?.palette.white, color: theme?.palette.black, padding: theme?.spacing(2, 3), - ul: { - listStyle: 'disc', - }, })); diff --git a/packages/plugins/ui-theme/src/pages/Version/DetailContainer/Readme/__snapshots__/Readme.spec.tsx.snap b/packages/plugins/ui-theme/src/pages/Version/DetailContainer/Readme/__snapshots__/Readme.spec.tsx.snap index 333845b9f..7951808de 100644 --- a/packages/plugins/ui-theme/src/pages/Version/DetailContainer/Readme/__snapshots__/Readme.spec.tsx.snap +++ b/packages/plugins/ui-theme/src/pages/Version/DetailContainer/Readme/__snapshots__/Readme.spec.tsx.snap @@ -9,16 +9,16 @@ exports[` component should load the component in default state 1`] = ` padding: 16px 24px; } -.emotion-0 ul { - list-style: disc; -} -
- test +

+ test +

+ +
, @@ -28,15 +28,15 @@ exports[` component should load the component in default state 1`] = ` padding: 16px 24px; } -.emotion-0 ul { - list-style: disc; -} -
- test +

+ test +

+ +
, "debug": [Function], diff --git a/packages/plugins/ui-theme/src/pages/Version/DetailContainer/Readme/utils.ts b/packages/plugins/ui-theme/src/pages/Version/DetailContainer/Readme/utils.ts new file mode 100644 index 000000000..d3a4a5c90 --- /dev/null +++ b/packages/plugins/ui-theme/src/pages/Version/DetailContainer/Readme/utils.ts @@ -0,0 +1,25 @@ +import * as DOMPurify from 'dompurify'; +import * as marked from 'marked'; + +marked.setOptions({ + renderer: new marked.Renderer(), + highlight: function (code, lang) { + const hljs = require('highlight.js'); + const language = hljs.getLanguage(lang) ? lang : 'plaintext'; + return hljs.highlight(code, { language }).value; + }, + langPrefix: 'hljs language-', // highlight.js css expects a top-level 'hljs' class. + pedantic: false, + gfm: true, + breaks: false, + mangle: false, + xhtml: false, +}); + +export function parseReadme(readme: string): string | void { + if (typeof readme === 'string') { + const html = marked.parse(readme); + return DOMPurify.sanitize(html); + } + return ''; +} diff --git a/packages/plugins/ui-theme/src/utils/sec-utils.ts b/packages/plugins/ui-theme/src/utils/sec-utils.ts deleted file mode 100644 index a615a6303..000000000 --- a/packages/plugins/ui-theme/src/utils/sec-utils.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { escapeAttrValue, filterXSS } from 'xss'; - -const xssOpts = { - onIgnoreTagAttr: function (tag: string, name: string, value: string) { - if (tag.match(/^h[0-9]$/) && name === 'id') { - return name + '="' + escapeAttrValue(value) + '"'; - } - }, -}; - -export function preventXSS(text: string): string { - const encodedText = filterXSS(text, xssOpts); - - return encodedText; -} diff --git a/packages/server/fastify/package.json b/packages/server/fastify/package.json index 5ad133e08..2e51e1dba 100644 --- a/packages/server/fastify/package.json +++ b/packages/server/fastify/package.json @@ -41,7 +41,6 @@ "@verdaccio/store": "workspace:6.0.0-6-next.30", "@verdaccio/tarball": "workspace:11.0.0-6-next.19", "@verdaccio/utils": "workspace:6.0.0-6-next.18", - "@verdaccio/readme": "workspace:11.0.0-6-next.6", "core-js": "3.25.5", "debug": "4.3.4", "fastify": "4.8.1", diff --git a/packages/server/fastify/src/routes/web/api/readme.ts b/packages/server/fastify/src/routes/web/api/readme.ts index d5fa62804..8cc02f238 100644 --- a/packages/server/fastify/src/routes/web/api/readme.ts +++ b/packages/server/fastify/src/routes/web/api/readme.ts @@ -1,8 +1,6 @@ import buildDebug from 'debug'; import { FastifyInstance } from 'fastify'; -import _ from 'lodash'; -import sanitizyReadme from '@verdaccio/readme'; import { Manifest } from '@verdaccio/types'; const debug = buildDebug('verdaccio:fastify:web:readme'); @@ -27,7 +25,7 @@ async function readmeRoute(fastify: FastifyInstance) { }, })) as Manifest; try { - const parsedReadme = parseReadme(manifest.name, manifest.readme as string); + const parsedReadme = manifest.readme; reply.code(fastify.statusCode.OK).send(parsedReadme); } catch { reply.code(fastify.statusCode.OK).send(NOT_README_FOUND); @@ -52,8 +50,7 @@ async function readmeRoute(fastify: FastifyInstance) { }, })) as Manifest; try { - const parsedReadme = parseReadme(manifest.name, manifest.readme as string); - reply.code(fastify.statusCode.OK).send(parsedReadme); + reply.code(fastify.statusCode.OK).send(manifest.readme); } catch { reply.code(fastify.statusCode.OK).send(NOT_README_FOUND); } @@ -61,17 +58,3 @@ async function readmeRoute(fastify: FastifyInstance) { } export default readmeRoute; - -/** - * parse package readme - markdown/ascii - * @param {String} packageName name of package - * @param {String} readme package readme - * @return {String} converted html template - */ -export function parseReadme(packageName: string, readme: string): string | void { - if (_.isEmpty(readme) === false) { - debug('sanizity readme'); - return sanitizyReadme(readme); - } - throw new Error('ERROR: No README data found!'); -} diff --git a/packages/web/package.json b/packages/web/package.json index 8b0fc9e6b..bf2b6b524 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -31,7 +31,6 @@ "@verdaccio/loaders": "workspace:6.0.0-6-next.19", "@verdaccio/logger": "workspace:6.0.0-6-next.18", "@verdaccio/middleware": "workspace:6.0.0-6-next.29", - "@verdaccio/readme": "workspace:11.0.0-6-next.6", "@verdaccio/store": "workspace:6.0.0-6-next.30", "@verdaccio/tarball": "workspace:11.0.0-6-next.19", "@verdaccio/url": "workspace:11.0.0-6-next.16", diff --git a/packages/web/src/api/readme.ts b/packages/web/src/api/readme.ts index b13a2fb64..d2b7b11b4 100644 --- a/packages/web/src/api/readme.ts +++ b/packages/web/src/api/readme.ts @@ -4,20 +4,27 @@ import { Router } from 'express'; import { Auth } from '@verdaccio/auth'; import { HEADERS, HEADER_TYPE } from '@verdaccio/core'; import { $NextFunctionVer, $RequestExtend, $ResponseExtend, allow } from '@verdaccio/middleware'; -import sanitizyReadme from '@verdaccio/readme'; import { Storage } from '@verdaccio/store'; import { Manifest } from '@verdaccio/types'; -import { AuthorAvatar, addScope, parseReadme } from '../utils/web-utils'; +import { AuthorAvatar, addScope } from '../utils/web-utils'; export { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages // TODO: review this type, should be on @verdacid/types export type PackageExt = Manifest & { author: AuthorAvatar; dist?: { tarball: string } }; - -const debug = buildDebug('verdaccio:web:api:readme'); - export const NOT_README_FOUND = 'ERROR: No README data found!'; +const debug = buildDebug('verdaccio:web:api:readme'); +const getReadme = (readme) => { + if (typeof readme === 'string' && readme.length === 0) { + return NOT_README_FOUND; + } + if (typeof readme !== 'string') { + return NOT_README_FOUND; + } else { + return readme; + } +}; function addReadmeWebApi(storage: Storage, auth: Auth): Router { debug('initialized readme web api'); @@ -53,11 +60,7 @@ function addReadmeWebApi(storage: Storage, auth: Auth): Router { })) as Manifest; debug('readme pkg %o', manifest?.name); res.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.TEXT_PLAIN_UTF8); - try { - next(parseReadme(manifest.name, manifest.readme as string)); - } catch { - next(sanitizyReadme(NOT_README_FOUND)); - } + next(getReadme(manifest.readme)); } catch (err) { next(err); } diff --git a/packages/web/src/utils/web-utils.ts b/packages/web/src/utils/web-utils.ts index 9259343bc..bdae1e1d3 100644 --- a/packages/web/src/utils/web-utils.ts +++ b/packages/web/src/utils/web-utils.ts @@ -1,7 +1,6 @@ import buildDebug from 'debug'; import _ from 'lodash'; -import sanitizyReadme from '@verdaccio/readme'; // import { normalizeContributors } from '@verdaccio/store'; import { Author, ConfigYaml } from '@verdaccio/types'; @@ -19,23 +18,6 @@ export function validatePrimaryColor(primaryColor) { return primaryColor; } -/** - * parse package readme - markdown/ascii - * @param {String} packageName name of package - * @param {String} readme package readme - * @return {String} converted html template - */ -export function parseReadme(packageName: string, readme: string): string | void { - if (_.isEmpty(readme) === false) { - debug('sanizity readme'); - return sanitizyReadme(readme); - } - - // logs readme not found error - // logger.error({ packageName }, '@{packageName}: No readme found'); - throw new Error('ERROR: No README data found!'); -} - export function deleteProperties(propertiesToDelete: string[], objectItem: any): any { debug('deleted unused version properties'); _.forEach(propertiesToDelete, (property): any => { diff --git a/packages/web/test/__snapshots__/utils.spec.ts.snap b/packages/web/test/__snapshots__/utils.spec.ts.snap deleted file mode 100644 index fb3deba97..000000000 --- a/packages/web/test/__snapshots__/utils.spec.ts.snap +++ /dev/null @@ -1,51 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Utilities parseReadme should parse makrdown text to html template 1`] = ` -"

Project Title

-

One Paragraph of project description goes here

-

Getting Started

-

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.

-

Prerequisites

-

What things you need to install the software and how to install them

-
Give examples
-
-

Installing

-

A step by step series of examples that tell you how to get a development env running

-

Say what the step will be

-
Give the example
-
-

And repeat

-
until finished
-
-

End with an example of getting some data out of the system or using it for a little demo

-

Running the tests

-

Explain how to run the automated tests for this system

-

Break down into end to end tests

-

Explain what these tests test and why

-
Give an example
-
-

And coding style tests

-

Explain what these tests test and why

-
Give an example
-
-

Deployment

-

Add additional notes about how to deploy this on a live system

-

Built With

-
    -
  • The web framework used
  • -
  • Dependency Management
  • -
  • Used to generate RSS Feeds
  • -
-

Contributing

-

Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.

-

Versioning

-

We use SemVer for versioning. For the versions available, see the tags on this repository.

-

License

-

This project is licensed under the MIT License - see the LICENSE.md file for details

-

Acknowledgments

-
    -
  • Hat tip to anyone whose code was used
  • -
  • Inspiration
  • -
  • etc
  • -
" -`; diff --git a/packages/web/test/api.readme.test.ts b/packages/web/test/api.readme.test.ts index 490ee2636..60fec382e 100644 --- a/packages/web/test/api.readme.test.ts +++ b/packages/web/test/api.readme.test.ts @@ -8,7 +8,7 @@ import { publishVersion } from '@verdaccio/test-helper'; import { NOT_README_FOUND } from '../src/api/readme'; import { initializeServer } from './helper'; -setup([]); +setup({}); const mockManifest = jest.fn(); jest.mock('@verdaccio/ui-theme', () => mockManifest()); diff --git a/packages/web/test/partials/readme/markdown.md b/packages/web/test/partials/readme/markdown.md deleted file mode 100644 index 387617df4..000000000 --- a/packages/web/test/partials/readme/markdown.md +++ /dev/null @@ -1,81 +0,0 @@ -# Project Title - -One Paragraph of project description goes here - -## Getting Started - -These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system. - -### Prerequisites - -What things you need to install the software and how to install them - -``` -Give examples -``` - -### Installing - -A step by step series of examples that tell you how to get a development env running - -Say what the step will be - -``` -Give the example -``` - -And repeat - -``` -until finished -``` - -End with an example of getting some data out of the system or using it for a little demo - -## Running the tests - -Explain how to run the automated tests for this system - -### Break down into end to end tests - -Explain what these tests test and why - -``` -Give an example -``` - -### And coding style tests - -Explain what these tests test and why - -``` -Give an example -``` - -## Deployment - -Add additional notes about how to deploy this on a live system - -## Built With - -- The web framework used -- Dependency Management -- Used to generate RSS Feeds - -## Contributing - -Please read [CONTRIBUTING.md](CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us. - -## Versioning - -We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/your/project/tags). - -## License - -This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details - -## Acknowledgments - -- Hat tip to anyone whose code was used -- Inspiration -- etc diff --git a/packages/web/test/utils.spec.ts b/packages/web/test/utils.spec.ts index a94765aee..58194276d 100644 --- a/packages/web/test/utils.spec.ts +++ b/packages/web/test/utils.spec.ts @@ -1,11 +1,4 @@ -import fs from 'fs'; -import path from 'path'; - -import { parseReadme, validatePrimaryColor } from '../src/utils/web-utils'; - -const readmeFile = (fileName = 'markdown.md') => { - return fs.readFileSync(path.join(__dirname, `./partials/readme/${fileName}`)); -}; +import { validatePrimaryColor } from '../src/utils/web-utils'; describe('Utilities', () => { describe('validatePrimaryColor', () => { @@ -17,29 +10,4 @@ describe('Utilities', () => { expect(validatePrimaryColor('fff')).toBeUndefined(); }); }); - describe('parseReadme', () => { - test('should parse makrdown text to html template', () => { - const markdown = '# markdown'; - expect(parseReadme('testPackage', markdown)).toEqual('

markdown

'); - // @ts-ignore - expect(parseReadme('testPackage', String(readmeFile('markdown.md')))).toMatchSnapshot(); - }); - - test('should pass for conversion of non-ascii to markdown text', () => { - const simpleText = 'simple text'; - const randomText = '%%%%%**##=='; - const randomTextMarkdown = 'simple text \n # markdown'; - - expect(parseReadme('testPackage', randomText)).toEqual('

%%%%%**##==

'); - expect(parseReadme('testPackage', simpleText)).toEqual('

simple text

'); - expect(parseReadme('testPackage', randomTextMarkdown)).toEqual( - '

simple text

\n

markdown

' - ); - }); - - test('should show error for no readme data', () => { - const noData = ''; - expect(() => parseReadme('testPackage', noData)).toThrowError('ERROR: No README data found!'); - }); - }); }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3e878e5b0..09accd966 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -466,19 +466,6 @@ importers: devDependencies: '@verdaccio/types': link:../types - packages/core/readme: - specifiers: - '@verdaccio/types': workspace:11.0.0-6-next.17 - dompurify: 2.4.0 - jsdom: 17.0.0 - marked: 3.0.8 - dependencies: - dompurify: 2.4.0 - jsdom: 17.0.0 - marked: 3.0.8 - devDependencies: - '@verdaccio/types': link:../types - packages/core/tarball: specifiers: '@verdaccio/core': workspace:6.0.0-6-next.50 @@ -811,9 +798,10 @@ importers: country-flag-icons: 1.5.5 css-loader: 6.7.1 dayjs: 1.11.5 + dompurify: 2.4.0 friendly-errors-webpack-plugin: 1.7.0 - github-markdown-css: 4.0.0 harmony-reflect: 1.6.2 + highlight.js: 11.6.0 history: 4.10.1 html-webpack-plugin: 5.5.0 i18next: 20.6.1 @@ -822,6 +810,7 @@ importers: js-yaml: 3.14.1 localstorage-memory: 1.0.3 lodash: 4.17.21 + marked: 4.2.2 mini-css-extract-plugin: 2.6.1 msw: 0.47.4 mutationobserver-shim: 0.3.7 @@ -863,7 +852,6 @@ importers: webpack-manifest-plugin: 4.1.1 webpack-merge: 5.8.0 whatwg-fetch: 3.6.2 - xss: 1.0.14 devDependencies: '@emotion/babel-plugin': 11.10.2_@babel+core@7.19.3 '@emotion/css': 11.10.0_@babel+core@7.19.3 @@ -891,9 +879,10 @@ importers: country-flag-icons: 1.5.5 css-loader: 6.7.1_webpack@5.74.0 dayjs: 1.11.5 + dompurify: 2.4.0 friendly-errors-webpack-plugin: 1.7.0_webpack@5.74.0 - github-markdown-css: 4.0.0 harmony-reflect: 1.6.2 + highlight.js: 11.6.0 history: 4.10.1 html-webpack-plugin: 5.5.0_webpack@5.74.0 i18next: 20.6.1 @@ -902,6 +891,7 @@ importers: js-yaml: 3.14.1 localstorage-memory: 1.0.3 lodash: 4.17.21 + marked: 4.2.2 mini-css-extract-plugin: 2.6.1_webpack@5.74.0 msw: 0.47.4_typescript@4.8.4 mutationobserver-shim: 0.3.7 @@ -943,7 +933,6 @@ importers: webpack-manifest-plugin: 4.1.1_webpack@5.74.0 webpack-merge: 5.8.0 whatwg-fetch: 3.6.2 - xss: 1.0.14 packages/proxy: specifiers: @@ -1040,7 +1029,6 @@ importers: '@verdaccio/config': workspace:6.0.0-6-next.50 '@verdaccio/core': workspace:6.0.0-6-next.50 '@verdaccio/logger': workspace:6.0.0-6-next.18 - '@verdaccio/readme': workspace:11.0.0-6-next.6 '@verdaccio/store': workspace:6.0.0-6-next.30 '@verdaccio/tarball': workspace:11.0.0-6-next.19 '@verdaccio/types': workspace:11.0.0-6-next.17 @@ -1056,7 +1044,6 @@ importers: '@verdaccio/config': link:../../config '@verdaccio/core': link:../../core/core '@verdaccio/logger': link:../../logger - '@verdaccio/readme': link:../../core/readme '@verdaccio/store': link:../../store '@verdaccio/tarball': link:../../core/tarball '@verdaccio/utils': link:../../utils @@ -1322,7 +1309,6 @@ importers: '@verdaccio/loaders': workspace:6.0.0-6-next.19 '@verdaccio/logger': workspace:6.0.0-6-next.18 '@verdaccio/middleware': workspace:6.0.0-6-next.29 - '@verdaccio/readme': workspace:11.0.0-6-next.6 '@verdaccio/store': workspace:6.0.0-6-next.30 '@verdaccio/tarball': workspace:11.0.0-6-next.19 '@verdaccio/test-helper': workspace:2.0.0-6-next.6 @@ -1348,7 +1334,6 @@ importers: '@verdaccio/loaders': link:../loaders '@verdaccio/logger': link:../logger '@verdaccio/middleware': link:../middleware - '@verdaccio/readme': link:../core/readme '@verdaccio/store': link:../store '@verdaccio/tarball': link:../core/tarball '@verdaccio/url': link:../core/url @@ -5941,7 +5926,7 @@ packages: copy-webpack-plugin: 11.0.0_webpack@5.74.0 core-js: 3.25.5 css-loader: 6.7.1_webpack@5.74.0 - css-minimizer-webpack-plugin: 4.0.0_webpack@5.74.0 + css-minimizer-webpack-plugin: 4.0.0_2868035f691d246a9a4674d398e4be11 cssnano: 5.1.12_postcss@8.4.18 del: 6.1.1 detect-port: 1.3.0 @@ -5984,8 +5969,10 @@ packages: webpackbar: 5.0.2_webpack@5.74.0 transitivePeerDependencies: - '@docusaurus/types' + - '@parcel/css' - '@swc/core' - bufferutil + - csso - debug - esbuild - eslint @@ -6036,7 +6023,7 @@ packages: copy-webpack-plugin: 11.0.0_webpack@5.74.0 core-js: 3.25.5 css-loader: 6.7.1_webpack@5.74.0 - css-minimizer-webpack-plugin: 4.0.0_webpack@5.74.0 + css-minimizer-webpack-plugin: 4.0.0_2868035f691d246a9a4674d398e4be11 cssnano: 5.1.12_postcss@8.4.18 del: 6.1.1 detect-port: 1.3.0 @@ -6079,8 +6066,10 @@ packages: webpackbar: 5.0.2_webpack@5.74.0 transitivePeerDependencies: - '@docusaurus/types' + - '@parcel/css' - '@swc/core' - bufferutil + - csso - debug - esbuild - eslint @@ -6233,8 +6222,10 @@ packages: utility-types: 3.10.0 webpack: 5.74.0_esbuild@0.14.10 transitivePeerDependencies: + - '@parcel/css' - '@swc/core' - bufferutil + - csso - debug - esbuild - eslint @@ -6272,8 +6263,10 @@ packages: utility-types: 3.10.0 webpack: 5.74.0_esbuild@0.14.10 transitivePeerDependencies: + - '@parcel/css' - '@swc/core' - bufferutil + - csso - debug - esbuild - eslint @@ -6303,8 +6296,10 @@ packages: tslib: 2.4.0 webpack: 5.74.0_esbuild@0.14.10 transitivePeerDependencies: + - '@parcel/css' - '@swc/core' - bufferutil + - csso - debug - esbuild - eslint @@ -6332,9 +6327,11 @@ packages: react-json-view: 1.21.3_react-dom@17.0.2+react@17.0.2 tslib: 2.4.0 transitivePeerDependencies: + - '@parcel/css' - '@swc/core' - '@types/react' - bufferutil + - csso - debug - encoding - esbuild @@ -6361,8 +6358,10 @@ packages: react-dom: 17.0.2_react@17.0.2 tslib: 2.4.0 transitivePeerDependencies: + - '@parcel/css' - '@swc/core' - bufferutil + - csso - debug - esbuild - eslint @@ -6388,8 +6387,10 @@ packages: react-dom: 17.0.2_react@17.0.2 tslib: 2.4.0 transitivePeerDependencies: + - '@parcel/css' - '@swc/core' - bufferutil + - csso - debug - esbuild - eslint @@ -6420,8 +6421,10 @@ packages: sitemap: 7.1.1 tslib: 2.4.0 transitivePeerDependencies: + - '@parcel/css' - '@swc/core' - bufferutil + - csso - debug - esbuild - eslint @@ -6456,9 +6459,11 @@ packages: react-dom: 17.0.2_react@17.0.2 transitivePeerDependencies: - '@algolia/client-search' + - '@parcel/css' - '@swc/core' - '@types/react' - bufferutil + - csso - debug - encoding - esbuild @@ -6533,8 +6538,10 @@ packages: tslib: 2.4.0 utility-types: 3.10.0 transitivePeerDependencies: + - '@parcel/css' - '@swc/core' - bufferutil + - csso - debug - esbuild - eslint @@ -6571,8 +6578,10 @@ packages: utility-types: 3.10.0 transitivePeerDependencies: - '@docusaurus/types' + - '@parcel/css' - '@swc/core' - bufferutil + - csso - debug - esbuild - eslint @@ -6609,8 +6618,10 @@ packages: utility-types: 3.10.0 transitivePeerDependencies: - '@docusaurus/types' + - '@parcel/css' - '@swc/core' - bufferutil + - csso - debug - esbuild - eslint @@ -6650,9 +6661,11 @@ packages: transitivePeerDependencies: - '@algolia/client-search' - '@docusaurus/types' + - '@parcel/css' - '@swc/core' - '@types/react' - bufferutil + - csso - debug - esbuild - eslint @@ -6692,9 +6705,11 @@ packages: transitivePeerDependencies: - '@algolia/client-search' - '@docusaurus/types' + - '@parcel/css' - '@swc/core' - '@types/react' - bufferutil + - csso - debug - esbuild - eslint @@ -6792,6 +6807,9 @@ packages: engines: {node: '>=16.14'} peerDependencies: '@docusaurus/types': '*' + peerDependenciesMeta: + '@docusaurus/types': + optional: true dependencies: tslib: 2.4.0 @@ -6800,6 +6818,9 @@ packages: engines: {node: '>=16.14'} peerDependencies: '@docusaurus/types': '*' + peerDependenciesMeta: + '@docusaurus/types': + optional: true dependencies: '@docusaurus/types': 2.2.0_e04bad828ac717e6587f05c972df8358 tslib: 2.4.0 @@ -6880,6 +6901,9 @@ packages: engines: {node: '>=16.14'} peerDependencies: '@docusaurus/types': '*' + peerDependenciesMeta: + '@docusaurus/types': + optional: true dependencies: '@docusaurus/logger': 2.2.0 '@docusaurus/types': 2.2.0_e04bad828ac717e6587f05c972df8358 @@ -6910,6 +6934,9 @@ packages: engines: {node: '>=16.14'} peerDependencies: '@docusaurus/types': '*' + peerDependenciesMeta: + '@docusaurus/types': + optional: true dependencies: '@docusaurus/logger': 2.2.0 '@docusaurus/types': 2.2.0_react-dom@17.0.2+react@17.0.2 @@ -6940,6 +6967,9 @@ packages: engines: {node: '>=16.14'} peerDependencies: '@docusaurus/types': '*' + peerDependenciesMeta: + '@docusaurus/types': + optional: true dependencies: '@docusaurus/logger': 2.2.0 '@svgr/webpack': 6.2.1 @@ -8615,11 +8645,6 @@ packages: react-dom: 18.2.0_react@18.2.0 dev: true - /@tootallnate/once/1.1.2: - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - dev: false - /@tootallnate/once/2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} @@ -9642,10 +9667,6 @@ packages: through: 2.3.8 dev: false - /abab/2.0.5: - resolution: {integrity: sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==} - dev: false - /abab/2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} dev: true @@ -9674,13 +9695,6 @@ packages: mime-types: 2.1.34 negotiator: 0.6.3 - /acorn-globals/6.0.0: - resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} - dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - dev: false - /acorn-globals/7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: @@ -9710,27 +9724,10 @@ packages: dependencies: acorn: 8.8.0 - /acorn-walk/7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - dev: false - /acorn-walk/8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} - /acorn/7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: false - - /acorn/8.4.1: - resolution: {integrity: sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: false - /acorn/8.7.1: resolution: {integrity: sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==} engines: {node: '>=0.4.0'} @@ -10090,6 +10087,7 @@ packages: /asynckit/0.4.0: resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=} + dev: true /at-least-node/1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} @@ -10757,10 +10755,6 @@ packages: wcwidth: 1.0.1 dev: true - /browser-process-hrtime/1.0.0: - resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} - dev: false - /browserslist/4.14.2: resolution: {integrity: sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -11291,6 +11285,7 @@ packages: engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 + dev: true /comma-separated-tokens/1.0.8: resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} @@ -11723,13 +11718,28 @@ packages: webpack: 5.74.0_esbuild@0.14.10 dev: false - /css-minimizer-webpack-plugin/4.0.0_webpack@5.74.0: + /css-minimizer-webpack-plugin/4.0.0_2868035f691d246a9a4674d398e4be11: resolution: {integrity: sha512-7ZXXRzRHvofv3Uac5Y+RkWRNo0ZMlcg8e9/OtrqUYmwDWJo+qs67GvdeFrXLsFb7czKNwjQhPkM0avlIYl+1nA==} engines: {node: '>= 14.15.0'} peerDependencies: + '@parcel/css': '*' + clean-css: '*' + csso: '*' + esbuild: '*' webpack: ^5.0.0 + peerDependenciesMeta: + '@parcel/css': + optional: true + clean-css: + optional: true + csso: + optional: true + esbuild: + optional: true dependencies: + clean-css: 5.3.0 cssnano: 5.1.12_postcss@8.4.18 + esbuild: 0.14.10 jest-worker: 27.5.1 postcss: 8.4.18 schema-utils: 4.0.0 @@ -11823,10 +11833,6 @@ packages: engines: {node: '>=4'} hasBin: true - /cssfilter/0.0.10: - resolution: {integrity: sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4=} - dev: true - /cssnano-preset-advanced/5.3.8_postcss@8.4.16: resolution: {integrity: sha512-xUlLLnEB1LjpEik+zgRNlk8Y/koBPPtONZjp7JKbXigeAmCrFvq9H0pXW5jJV45bQWAlmJ0sKy+IMr0XxLYQZg==} engines: {node: ^10 || ^12 || >=14.0} @@ -12039,15 +12045,18 @@ packages: /cssom/0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + dev: true /cssom/0.5.0: resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} + dev: true /cssstyle/2.3.0: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} dependencies: cssom: 0.3.8 + dev: true /csstype/2.6.13: resolution: {integrity: sha512-ul26pfSQTZW8dcOnD2iiJssfXw0gdNVX9IJDH/X3K5DGPfj+fUYe3kB+swUY6BF3oZDxaID3AJt+9/ojSAE05A==} @@ -12150,15 +12159,6 @@ packages: assert-plus: 1.0.0 dev: true - /data-urls/3.0.0: - resolution: {integrity: sha512-4AefxbTTdFtxDUdh0BuMBs2qJVL25Mow2zlcuuePegQwgD6GEmQao42LLEeksOui8nL4RcNEugIpFP7eRd33xg==} - engines: {node: '>=12'} - dependencies: - abab: 2.0.5 - whatwg-mimetype: 2.3.0 - whatwg-url: 9.1.0 - dev: false - /data-urls/3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} @@ -12257,6 +12257,7 @@ packages: optional: true dependencies: ms: 2.1.2 + dev: true /debug/4.3.3_supports-color@6.1.0: resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} @@ -12318,10 +12319,6 @@ packages: resolution: {integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=} engines: {node: '>=0.10.0'} - /decimal.js/10.3.1: - resolution: {integrity: sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==} - dev: false - /decimal.js/10.4.2: resolution: {integrity: sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==} dev: true @@ -12453,6 +12450,7 @@ packages: /delayed-stream/1.0.0: resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=} engines: {node: '>=0.4.0'} + dev: true /depd/1.1.2: resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=} @@ -12688,13 +12686,6 @@ packages: /domelementtype/2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - /domexception/2.0.1: - resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} - engines: {node: '>=8'} - dependencies: - webidl-conversions: 5.0.0 - dev: false - /domexception/4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} @@ -12717,7 +12708,7 @@ packages: /dompurify/2.4.0: resolution: {integrity: sha512-Be9tbQMZds4a3C6xTmz68NlMfeONA//4dOavl/1rNw50E+/QO0KVpbcU0PcaW0nsQxurXls9ZocqFxk8R2mWEA==} - dev: false + dev: true /domutils/1.7.0: resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} @@ -13286,6 +13277,7 @@ packages: optionator: 0.8.3 optionalDependencies: source-map: 0.6.1 + dev: true /eslint-config-google/0.14.0_eslint@8.26.0: resolution: {integrity: sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==} @@ -14377,6 +14369,11 @@ packages: typescript: '>= 2.7' vue-template-compiler: '*' webpack: '>= 4' + peerDependenciesMeta: + eslint: + optional: true + vue-template-compiler: + optional: true dependencies: '@babel/code-frame': 7.18.6 '@types/json-schema': 7.0.9 @@ -14429,6 +14426,7 @@ packages: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.34 + dev: true /formidable/2.0.1: resolution: {integrity: sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==} @@ -14616,10 +14614,6 @@ packages: assert-plus: 1.0.0 dev: true - /github-markdown-css/4.0.0: - resolution: {integrity: sha512-mH0bcIKv4XAN0mQVokfTdKo2OD5K8WJE9+lbMdM32/q0Ie5tXgVN/2o+zvToRMxSTUuiTRcLg5hzkFfOyBYreg==} - dev: true - /github-slugger/1.4.0: resolution: {integrity: sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==} @@ -14987,6 +14981,11 @@ packages: engines: {node: '>=8'} dev: true + /highlight.js/11.6.0: + resolution: {integrity: sha512-ig1eqDzJaB0pqEvlPVIpSSyMaO92bH1N2rJpLMN/nX396wTpDA4Eq0uK+7I/2XG17pFaaKE0kjV/XPeGt7Evjw==} + engines: {node: '>=12.0.0'} + dev: true + /history/4.10.1: resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} dependencies: @@ -15033,13 +15032,6 @@ packages: engines: {node: '>=14'} dev: false - /html-encoding-sniffer/2.0.1: - resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} - engines: {node: '>=10'} - dependencies: - whatwg-encoding: 1.0.5 - dev: false - /html-encoding-sniffer/3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} @@ -15197,17 +15189,6 @@ packages: /http-parser-js/0.5.2: resolution: {integrity: sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ==} - /http-proxy-agent/4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} - dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.3.3 - transitivePeerDependencies: - - supports-color - dev: false - /http-proxy-agent/5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} @@ -15236,6 +15217,9 @@ packages: engines: {node: '>=12.0.0'} peerDependencies: '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true dependencies: '@types/express': 4.17.14 '@types/http-proxy': 1.17.8 @@ -15285,16 +15269,6 @@ packages: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - /https-proxy-agent/5.0.0: - resolution: {integrity: sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==} - engines: {node: '>= 6'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - /https-proxy-agent/5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -15806,6 +15780,7 @@ packages: /is-potential-custom-element-name/1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + dev: true /is-promise/2.2.2: resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} @@ -16545,48 +16520,6 @@ packages: resolution: {integrity: sha1-peZUwuWi3rXyAdls77yoDA7y9RM=} dev: true - /jsdom/17.0.0: - resolution: {integrity: sha512-MUq4XdqwtNurZDVeKScENMPHnkgmdIvMzZ1r1NSwHkDuaqI6BouPjr+17COo4/19oLNnmdpFDPOHVpgIZmZ+VA==} - engines: {node: '>=12'} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - dependencies: - abab: 2.0.5 - acorn: 8.4.1 - acorn-globals: 6.0.0 - cssom: 0.5.0 - cssstyle: 2.3.0 - data-urls: 3.0.0 - decimal.js: 10.3.1 - domexception: 2.0.1 - escodegen: 2.0.0 - form-data: 4.0.0 - html-encoding-sniffer: 2.0.1 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.0 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.0 - parse5: 6.0.1 - saxes: 5.0.1 - symbol-tree: 3.2.4 - tough-cookie: 4.0.0 - w3c-hr-time: 1.0.2 - w3c-xmlserializer: 2.0.0 - webidl-conversions: 6.1.0 - whatwg-encoding: 1.0.5 - whatwg-mimetype: 2.3.0 - whatwg-url: 9.1.0 - ws: 8.2.1 - xml-name-validator: 3.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: false - /jsdom/20.0.1: resolution: {integrity: sha512-pksjj7Rqoa+wdpkKcLzQRHhJCEE42qQhl/xLMUKHgoSejaKOdaXEAnqs6uDNwMl/fciHTzKeR8Wm8cw7N+g98A==} engines: {node: '>=14'} @@ -16920,6 +16853,7 @@ packages: dependencies: prelude-ls: 1.1.2 type-check: 0.3.2 + dev: true /levn/0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} @@ -17291,17 +17225,17 @@ packages: resolution: {integrity: sha512-y8j3a5/DkJCmS5x4dMCQL+OR0+2EAq3DOtio1COSHsmW2BGXnNCK3v12hJt1LrUz5iZH5g0LmuYOjDdI+czghA==} dev: true - /marked/3.0.8: - resolution: {integrity: sha512-0gVrAjo5m0VZSJb4rpL59K1unJAMb/hm8HRXqasD8VeC8m91ytDPMritgFSlKonfdt+rRYYpP/JfLxgIX8yoSw==} - engines: {node: '>= 12'} - hasBin: true - dev: false - /marked/4.1.1: resolution: {integrity: sha512-0cNMnTcUJPxbA6uWmCmjWz4NJRe/0Xfk2NhXCUHjew9qJzFN20krFnsUe7QynwqOwa5m1fZ4UDg0ycKFVC0ccw==} engines: {node: '>= 12'} hasBin: true + /marked/4.2.2: + resolution: {integrity: sha512-JjBTFTAvuTgANXx82a5vzK9JLSMoV6V3LBVn4Uhdso6t7vXrGx7g1Cd2r6NYSsxrYbQGFCMqBDhFHyK5q2UvcQ==} + engines: {node: '>= 12'} + hasBin: true + dev: true + /mathml-tag-names/2.1.3: resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} dev: true @@ -18749,10 +18683,6 @@ packages: dependencies: boolbase: 1.0.0 - /nwsapi/2.2.0: - resolution: {integrity: sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==} - dev: false - /nwsapi/2.2.2: resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} dev: true @@ -18935,6 +18865,7 @@ packages: prelude-ls: 1.1.2 type-check: 0.3.2 word-wrap: 1.2.3 + dev: true /optionator/0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} @@ -20403,6 +20334,7 @@ packages: /prelude-ls/1.1.2: resolution: {integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=} engines: {node: '>= 0.8.0'} + dev: true /prelude-ls/1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -20566,6 +20498,7 @@ packages: /psl/1.8.0: resolution: {integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==} + dev: true /pstree.remy/1.1.8: resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} @@ -21847,13 +21780,6 @@ packages: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} dev: false - /saxes/5.0.1: - resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} - engines: {node: '>=10'} - dependencies: - xmlchars: 2.2.0 - dev: false - /saxes/6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} @@ -23002,6 +22928,7 @@ packages: /symbol-tree/3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + dev: true /table/6.8.0: resolution: {integrity: sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==} @@ -23301,15 +23228,6 @@ packages: punycode: 2.1.1 dev: true - /tough-cookie/4.0.0: - resolution: {integrity: sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==} - engines: {node: '>=6'} - dependencies: - psl: 1.8.0 - punycode: 2.1.1 - universalify: 0.1.2 - dev: false - /tough-cookie/4.1.2: resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} engines: {node: '>=6'} @@ -23323,13 +23241,6 @@ packages: /tr46/0.0.3: resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=} - /tr46/2.1.0: - resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} - engines: {node: '>=8'} - dependencies: - punycode: 2.1.1 - dev: false - /tr46/3.0.0: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} @@ -23466,6 +23377,7 @@ packages: engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 + dev: true /type-check/0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -23790,6 +23702,7 @@ packages: /universalify/0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} + dev: true /universalify/0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} @@ -24198,19 +24111,6 @@ packages: /vscode-textmate/6.0.0: resolution: {integrity: sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==} - /w3c-hr-time/1.0.2: - resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} - dependencies: - browser-process-hrtime: 1.0.0 - dev: false - - /w3c-xmlserializer/2.0.0: - resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} - engines: {node: '>=10'} - dependencies: - xml-name-validator: 3.0.0 - dev: false - /w3c-xmlserializer/3.0.0: resolution: {integrity: sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==} engines: {node: '>=12'} @@ -24290,16 +24190,6 @@ packages: /webidl-conversions/3.0.1: resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=} - /webidl-conversions/5.0.0: - resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} - engines: {node: '>=8'} - dev: false - - /webidl-conversions/6.1.0: - resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} - engines: {node: '>=10.4'} - dev: false - /webidl-conversions/7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} @@ -24555,6 +24445,10 @@ packages: hasBin: true peerDependencies: webpack: ^4.37.0 || ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true dependencies: '@types/bonjour': 3.5.10 '@types/connect-history-api-fallback': 1.3.5 @@ -24822,12 +24716,6 @@ packages: resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} engines: {node: '>=0.8.0'} - /whatwg-encoding/1.0.5: - resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} - dependencies: - iconv-lite: 0.4.24 - dev: false - /whatwg-encoding/2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} @@ -24839,10 +24727,6 @@ packages: resolution: {integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==} dev: true - /whatwg-mimetype/2.3.0: - resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} - dev: false - /whatwg-mimetype/3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} @@ -24862,14 +24746,6 @@ packages: tr46: 0.0.3 webidl-conversions: 3.0.1 - /whatwg-url/9.1.0: - resolution: {integrity: sha512-CQ0UcrPHyomtlOCot1TL77WyMIm/bCwrJ2D6AOKGwEczU9EpyoqAokfqrf/MioU9kHcMsmJZcg1egXix2KYEsA==} - engines: {node: '>=12'} - dependencies: - tr46: 2.1.0 - webidl-conversions: 6.1.0 - dev: false - /which-boxed-primitive/1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: @@ -25019,19 +24895,6 @@ packages: utf-8-validate: optional: true - /ws/8.2.1: - resolution: {integrity: sha512-XkgWpJU3sHU7gX8f13NqTn6KQ85bd1WU7noBHTT8fSohx7OS1TPY8k+cyRPCzFkia7C4mM229yeHr1qK9sM4JQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - /ws/8.9.0: resolution: {integrity: sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==} engines: {node: '>=10.0.0'} @@ -25055,10 +24918,6 @@ packages: sax: 1.2.4 dev: false - /xml-name-validator/3.0.0: - resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} - dev: false - /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -25070,14 +24929,6 @@ packages: /xmlchars/2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - - /xss/1.0.14: - resolution: {integrity: sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==} - engines: {node: '>= 0.10.0'} - hasBin: true - dependencies: - commander: 2.20.3 - cssfilter: 0.0.10 dev: true /xtend/4.0.2: