diff --git a/apps/meteor/ee/server/services/package.json b/apps/meteor/ee/server/services/package.json index b8fe731d1ab..00a425ac60e 100644 --- a/apps/meteor/ee/server/services/package.json +++ b/apps/meteor/ee/server/services/package.json @@ -22,7 +22,7 @@ "@rocket.chat/core-services": "workspace:^", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/emitter": "~0.31.25", - "@rocket.chat/message-parser": "~0.31.28", + "@rocket.chat/message-parser": "workspace:^", "@rocket.chat/model-typings": "workspace:^", "@rocket.chat/models": "workspace:^", "@rocket.chat/rest-typings": "workspace:^", diff --git a/apps/meteor/package.json b/apps/meteor/package.json index 5cf08d8b2b0..de5e4eacb9b 100644 --- a/apps/meteor/package.json +++ b/apps/meteor/package.json @@ -257,7 +257,7 @@ "@rocket.chat/logger": "workspace:^", "@rocket.chat/logo": "^0.31.29", "@rocket.chat/memo": "~0.31.25", - "@rocket.chat/message-parser": "~0.31.28", + "@rocket.chat/message-parser": "workspace:^", "@rocket.chat/model-typings": "workspace:^", "@rocket.chat/models": "workspace:^", "@rocket.chat/mp3-encoder": "0.24.0", diff --git a/ee/apps/account-service/Dockerfile b/ee/apps/account-service/Dockerfile index a4b34c46510..c662d876530 100644 --- a/ee/apps/account-service/Dockerfile +++ b/ee/apps/account-service/Dockerfile @@ -16,6 +16,13 @@ COPY ./packages/core-typings/dist packages/core-typings/dist COPY ./packages/rest-typings/package.json packages/rest-typings/package.json COPY ./packages/rest-typings/dist packages/rest-typings/dist +COPY ./packages/message-parser/package.json packages/message-parser/package.json +COPY ./packages/message-parser/dist packages/message-parser/dist +COPY ./packages/message-parser/messageParser.js packages/message-parser/messageParser.js + +COPY ./packages/peggy-loader/package.json packages/peggy-loader/package.json +COPY ./packages/peggy-loader/dist packages/peggy-loader/dist + COPY ./packages/model-typings/package.json packages/model-typings/package.json COPY ./packages/model-typings/dist packages/model-typings/dist diff --git a/ee/apps/authorization-service/Dockerfile b/ee/apps/authorization-service/Dockerfile index a4b34c46510..c662d876530 100644 --- a/ee/apps/authorization-service/Dockerfile +++ b/ee/apps/authorization-service/Dockerfile @@ -16,6 +16,13 @@ COPY ./packages/core-typings/dist packages/core-typings/dist COPY ./packages/rest-typings/package.json packages/rest-typings/package.json COPY ./packages/rest-typings/dist packages/rest-typings/dist +COPY ./packages/message-parser/package.json packages/message-parser/package.json +COPY ./packages/message-parser/dist packages/message-parser/dist +COPY ./packages/message-parser/messageParser.js packages/message-parser/messageParser.js + +COPY ./packages/peggy-loader/package.json packages/peggy-loader/package.json +COPY ./packages/peggy-loader/dist packages/peggy-loader/dist + COPY ./packages/model-typings/package.json packages/model-typings/package.json COPY ./packages/model-typings/dist packages/model-typings/dist diff --git a/ee/apps/ddp-streamer/Dockerfile b/ee/apps/ddp-streamer/Dockerfile index 686a6c4183a..893fdcff858 100644 --- a/ee/apps/ddp-streamer/Dockerfile +++ b/ee/apps/ddp-streamer/Dockerfile @@ -16,6 +16,13 @@ COPY ./packages/core-typings/dist packages/core-typings/dist COPY ./packages/rest-typings/package.json packages/rest-typings/package.json COPY ./packages/rest-typings/dist packages/rest-typings/dist +COPY ./packages/message-parser/package.json packages/message-parser/package.json +COPY ./packages/message-parser/dist packages/message-parser/dist +COPY ./packages/message-parser/messageParser.js packages/message-parser/messageParser.js + +COPY ./packages/peggy-loader/package.json packages/peggy-loader/package.json +COPY ./packages/peggy-loader/dist packages/peggy-loader/dist + COPY ./packages/password-policies/package.json packages/password-policies/package.json COPY ./packages/password-policies/dist packages/password-policies/dist diff --git a/ee/apps/omnichannel-transcript/Dockerfile b/ee/apps/omnichannel-transcript/Dockerfile index c2c33aa5017..6a93a8e5e8b 100644 --- a/ee/apps/omnichannel-transcript/Dockerfile +++ b/ee/apps/omnichannel-transcript/Dockerfile @@ -16,6 +16,13 @@ COPY ./packages/core-typings/dist packages/core-typings/dist COPY ./packages/rest-typings/package.json packages/rest-typings/package.json COPY ./packages/rest-typings/dist packages/rest-typings/dist +COPY ./packages/message-parser/package.json packages/message-parser/package.json +COPY ./packages/message-parser/dist packages/message-parser/dist +COPY ./packages/message-parser/messageParser.js packages/message-parser/messageParser.js + +COPY ./packages/peggy-loader/package.json packages/peggy-loader/package.json +COPY ./packages/peggy-loader/dist packages/peggy-loader/dist + COPY ./packages/model-typings/package.json packages/model-typings/package.json COPY ./packages/model-typings/dist packages/model-typings/dist diff --git a/ee/apps/presence-service/Dockerfile b/ee/apps/presence-service/Dockerfile index 19a5cb57076..a6b6e641a39 100644 --- a/ee/apps/presence-service/Dockerfile +++ b/ee/apps/presence-service/Dockerfile @@ -19,6 +19,13 @@ COPY ./packages/core-typings/dist packages/core-typings/dist COPY ./packages/rest-typings/package.json packages/rest-typings/package.json COPY ./packages/rest-typings/dist packages/rest-typings/dist +COPY ./packages/message-parser/package.json packages/message-parser/package.json +COPY ./packages/message-parser/dist packages/message-parser/dist +COPY ./packages/message-parser/messageParser.js packages/message-parser/messageParser.js + +COPY ./packages/peggy-loader/package.json packages/peggy-loader/package.json +COPY ./packages/peggy-loader/dist packages/peggy-loader/dist + COPY ./packages/model-typings/package.json packages/model-typings/package.json COPY ./packages/model-typings/dist packages/model-typings/dist diff --git a/ee/apps/queue-worker/Dockerfile b/ee/apps/queue-worker/Dockerfile index c2c33aa5017..6a93a8e5e8b 100644 --- a/ee/apps/queue-worker/Dockerfile +++ b/ee/apps/queue-worker/Dockerfile @@ -16,6 +16,13 @@ COPY ./packages/core-typings/dist packages/core-typings/dist COPY ./packages/rest-typings/package.json packages/rest-typings/package.json COPY ./packages/rest-typings/dist packages/rest-typings/dist +COPY ./packages/message-parser/package.json packages/message-parser/package.json +COPY ./packages/message-parser/dist packages/message-parser/dist +COPY ./packages/message-parser/messageParser.js packages/message-parser/messageParser.js + +COPY ./packages/peggy-loader/package.json packages/peggy-loader/package.json +COPY ./packages/peggy-loader/dist packages/peggy-loader/dist + COPY ./packages/model-typings/package.json packages/model-typings/package.json COPY ./packages/model-typings/dist packages/model-typings/dist diff --git a/ee/apps/stream-hub-service/Dockerfile b/ee/apps/stream-hub-service/Dockerfile index a4b34c46510..c662d876530 100644 --- a/ee/apps/stream-hub-service/Dockerfile +++ b/ee/apps/stream-hub-service/Dockerfile @@ -16,6 +16,13 @@ COPY ./packages/core-typings/dist packages/core-typings/dist COPY ./packages/rest-typings/package.json packages/rest-typings/package.json COPY ./packages/rest-typings/dist packages/rest-typings/dist +COPY ./packages/message-parser/package.json packages/message-parser/package.json +COPY ./packages/message-parser/dist packages/message-parser/dist +COPY ./packages/message-parser/messageParser.js packages/message-parser/messageParser.js + +COPY ./packages/peggy-loader/package.json packages/peggy-loader/package.json +COPY ./packages/peggy-loader/dist packages/peggy-loader/dist + COPY ./packages/model-typings/package.json packages/model-typings/package.json COPY ./packages/model-typings/dist packages/model-typings/dist diff --git a/ee/packages/ddp-client/package.json b/ee/packages/ddp-client/package.json index b44e7b46b00..8ae25f9b443 100644 --- a/ee/packages/ddp-client/package.json +++ b/ee/packages/ddp-client/package.json @@ -12,7 +12,7 @@ "jest-environment-jsdom": "~29.6.4", "jest-websocket-mock": "^2.4.0", "ts-jest": "^29.1.2", - "typescript": "^5.3.3", + "typescript": "^5.3.2", "ws": "^8.13.0" }, "peerDependencies": { diff --git a/packages/core-services/package.json b/packages/core-services/package.json index fbe4af90182..868775a355f 100644 --- a/packages/core-services/package.json +++ b/packages/core-services/package.json @@ -37,7 +37,7 @@ "@rocket.chat/apps-engine": "1.41.0", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/icons": "^0.33.0", - "@rocket.chat/message-parser": "~0.31.28", + "@rocket.chat/message-parser": "workspace:^", "@rocket.chat/models": "workspace:^", "@rocket.chat/rest-typings": "workspace:^", "@rocket.chat/ui-kit": "workspace:~", diff --git a/packages/core-typings/package.json b/packages/core-typings/package.json index 462a4bb66ed..930fbc77717 100644 --- a/packages/core-typings/package.json +++ b/packages/core-typings/package.json @@ -25,7 +25,7 @@ "dependencies": { "@rocket.chat/apps-engine": "1.41.0", "@rocket.chat/icons": "^0.33.0", - "@rocket.chat/message-parser": "~0.31.28", + "@rocket.chat/message-parser": "workspace:^", "@rocket.chat/ui-kit": "workspace:~" }, "volta": { diff --git a/packages/gazzodown/package.json b/packages/gazzodown/package.json index 8618d7d8eb2..108329360d0 100644 --- a/packages/gazzodown/package.json +++ b/packages/gazzodown/package.json @@ -8,7 +8,7 @@ "@rocket.chat/css-in-js": "~0.31.25", "@rocket.chat/fuselage": "^0.47.0", "@rocket.chat/fuselage-tokens": "~0.32.0", - "@rocket.chat/message-parser": "~0.31.28", + "@rocket.chat/message-parser": "workspace:^", "@rocket.chat/styled": "~0.31.25", "@rocket.chat/ui-client": "workspace:^", "@rocket.chat/ui-contexts": "workspace:^", diff --git a/packages/livechat/package.json b/packages/livechat/package.json index 16fab448163..c5ce385f034 100644 --- a/packages/livechat/package.json +++ b/packages/livechat/package.json @@ -95,7 +95,7 @@ }, "dependencies": { "@rocket.chat/gazzodown": "workspace:^", - "@rocket.chat/message-parser": "~0.31.28", + "@rocket.chat/message-parser": "workspace:^", "@rocket.chat/random": "workspace:~", "@rocket.chat/sdk": "^1.0.0-alpha.42", "@rocket.chat/ui-kit": "workspace:~", diff --git a/packages/message-parser/.eslintignore b/packages/message-parser/.eslintignore new file mode 100644 index 00000000000..8225baa4a77 --- /dev/null +++ b/packages/message-parser/.eslintignore @@ -0,0 +1,2 @@ +/node_modules +/dist diff --git a/packages/message-parser/.eslintrc.js b/packages/message-parser/.eslintrc.js new file mode 100644 index 00000000000..e8b738ac42e --- /dev/null +++ b/packages/message-parser/.eslintrc.js @@ -0,0 +1,12 @@ +module.exports = { + extends: '@rocket.chat/eslint-config', + env: { + jest: true, + }, + overrides: [ + { + files: ['**/*.ts', '**/*.tsx'], + extends: '@rocket.chat/eslint-config', + }, + ], +}; diff --git a/packages/message-parser/.gitignore b/packages/message-parser/.gitignore new file mode 100644 index 00000000000..8225baa4a77 --- /dev/null +++ b/packages/message-parser/.gitignore @@ -0,0 +1,2 @@ +/node_modules +/dist diff --git a/packages/message-parser/.prettierrc.js b/packages/message-parser/.prettierrc.js new file mode 100644 index 00000000000..b57f474edb9 --- /dev/null +++ b/packages/message-parser/.prettierrc.js @@ -0,0 +1 @@ +module.exports = require('@rocket.chat/prettier-config/fuselage'); diff --git a/packages/message-parser/CHANGELOG.md b/packages/message-parser/CHANGELOG.md new file mode 100644 index 00000000000..1fd31e07f13 --- /dev/null +++ b/packages/message-parser/CHANGELOG.md @@ -0,0 +1,71 @@ +# Change Log + +## 0.31.28 + +### Patch Changes + +- [`7fdfdb1b7`](https://github.com/RocketChat/fuselage/commit/7fdfdb1b7737808585b95cc62c4f9af2bc152b41) Thanks [@dougfabris](https://github.com/dougfabris)! - fix(message-parser): Made changes in grammar.pegjs for the strikedown approach + +## 0.31.27 + +### Patch Changes + +- [`a029dce78`](https://github.com/RocketChat/fuselage/commit/a029dce78935d8bba5cb5b09e251483fe8eabcb3) Thanks [@yash-rajpal](https://github.com/yash-rajpal)! - Stop accepting `[` in link titles + +## 0.31.26 + +### Patch Changes + +- [#1215](https://github.com/RocketChat/fuselage/pull/1215) [`684b73ca3`](https://github.com/RocketChat/fuselage/commit/684b73ca3b1e7c72f21f6dff23bfe46981ba472a) Thanks [@brf153](https://github.com/brf153)! - Added ChannelMention in the markup inside message-parser + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [0.31.0](https://github.com/RocketChat/fuselage/compare/v0.30.1...v0.31.0) (2021-12-28) + +### Features + +- New hooks for element size tracking ([#413](https://github.com/RocketChat/fuselage/issues/413)) ([8ca682c](https://github.com/RocketChat/fuselage/commit/8ca682c636d2e4813f7d346cb881513382be63cf)) + +# [0.30.0](https://github.com/RocketChat/fuselage/compare/v0.29.0...v0.30.0) (2021-10-06) + +### Bug Fixes + +- **jest:** Adjust jest and ts-jest dependencies ([#547](https://github.com/RocketChat/fuselage/issues/547)) ([91a4fa1](https://github.com/RocketChat/fuselage/commit/91a4fa1365394001afe1bd46480bda3bafed5505)) +- **message-parser:** ([#546](https://github.com/RocketChat/fuselage/issues/546)) ([faca16f](https://github.com/RocketChat/fuselage/commit/faca16febe517e411dd377cae294f888f1199d40)) +- **message-parser:** Fix Url and Escaped Markdown ([#537](https://github.com/RocketChat/fuselage/issues/537)) ([bc0cbce](https://github.com/RocketChat/fuselage/commit/bc0cbce69589b9a056d797a03b78d7cd06423aaa)) + +# [0.29.0](https://github.com/RocketChat/fuselage/compare/v0.28.0...v0.29.0) (2021-08-31) + +**Note:** Version bump only for package @rocket.chat/message-parser + +# [0.28.0](https://github.com/RocketChat/fuselage/compare/v0.27.0...v0.28.0) (2021-07-30) + +### Features + +- **onboarding-ui:** Administrator information form and Organization information form ([#489](https://github.com/RocketChat/fuselage/issues/489)) ([b289f68](https://github.com/RocketChat/fuselage/commit/b289f68676954b91c792d8d97680314178bf2c60)) +- styled API; monorepo grooming ([#482](https://github.com/RocketChat/fuselage/issues/482)) ([1b6b70c](https://github.com/RocketChat/fuselage/commit/1b6b70cf67ec16927b1566adc2350295a8927223)) + +# [0.27.0](https://github.com/RocketChat/fuselage/compare/v0.26.0...v0.27.0) (2021-06-28) + +### Bug Fixes + +- **eslint:** Add missing ESLint rule for TypeScript ([#470](https://github.com/RocketChat/fuselage/issues/470)) ([cc0d498](https://github.com/RocketChat/fuselage/commit/cc0d4989bf37f7602d1d58d051824f1dd6c096b3)) + +# [0.26.0](https://github.com/RocketChat/fuselage/compare/v0.25.0...v0.26.0) (2021-05-28) + +**Note:** Version bump only for package @rocket.chat/message-parser + +# [0.25.0](https://github.com/RocketChat/fuselage/compare/v0.24.0...v0.25.0) (2021-05-19) + +### Bug Fixes + +- **fuselage:** fix duplicated values on paginated multi select ([#456](https://github.com/RocketChat/fuselage/issues/456)) ([4518a4e](https://github.com/RocketChat/fuselage/commit/4518a4e661cb525d957f6140d59a641a50fc7b20)) +- **message-parser:** Big emoji ([#451](https://github.com/RocketChat/fuselage/issues/451)) ([6d65343](https://github.com/RocketChat/fuselage/commit/6d653433d07edabaee821bd25ad07a5878b59a86)) +- **message-parser:** URL issues ([#448](https://github.com/RocketChat/fuselage/issues/448)) ([8ce6b91](https://github.com/RocketChat/fuselage/commit/8ce6b9110547b5adf3633e87d6bc655114d4cfb4)) +- message-parser Unordered List definition ([#445](https://github.com/RocketChat/fuselage/issues/445)) ([6c659b8](https://github.com/RocketChat/fuselage/commit/6c659b821fd6294eb8033dfe03e42db2dba1ca06)) + +### Features + +- [@rocket](https://github.com/rocket).chat/message-parser ([#443](https://github.com/RocketChat/fuselage/issues/443)) ([4722cdf](https://github.com/RocketChat/fuselage/commit/4722cdff46f5987f335d989be59649c7652bb12a)) +- Peggy loader ([#450](https://github.com/RocketChat/fuselage/issues/450)) ([0496cad](https://github.com/RocketChat/fuselage/commit/0496cad457d76f8a4d6a217209e4a55e315e8365)) diff --git a/packages/message-parser/README.md b/packages/message-parser/README.md new file mode 100644 index 00000000000..8d2d8f4056e --- /dev/null +++ b/packages/message-parser/README.md @@ -0,0 +1,57 @@ + + +

+ + Rocket.Chat + +

+ +# `@rocket.chat/message-parser` + +> Rocket.Chat parser for messages + +--- + +[![npm@latest](https://img.shields.io/npm/v/@rocket.chat/message-parser/latest?style=flat-square)](https://www.npmjs.com/package/@rocket.chat/message-parser/v/latest) [![npm@next](https://img.shields.io/npm/v/@rocket.chat/message-parser/next?style=flat-square)](https://www.npmjs.com/package/@rocket.chat/message-parser/v/next) ![npm downloads](https://img.shields.io/npm/dw/@rocket.chat/message-parser?style=flat-square) ![License: MIT](https://img.shields.io/npm/l/@rocket.chat/message-parser?style=flat-square) + +![deps](https://img.shields.io/librariesio/release/npm/@rocket.chat/message-parser?style=flat-square) ![npm bundle size](https://img.shields.io/bundlephobia/min/@rocket.chat/message-parser?style=flat-square) + + + +## Description + +Rocket.Chat grammar with the purpose of parsing the messages of the rocket chat, converting text to an AST tree. + +The grammar provides support for markdown, mentions and emojis. + +## Supported markup + +- quotes +- bold/italic/strike +- ordered lists +- unordered lists +- task lists +- phone numbers +- mentions +- emoji +- colors +- URI's +- mentions users/channels + +## Contributing + + + +Contributions, issues, and feature requests are welcome!
+Feel free to check the [issues](https://github.com/RocketChat/fuselage/issues). + + + +Whenever you find a grammar-related bug, start by inserting the test case. + +We are open to other tags/markups, as long as they don't generate unexpected behavior. + +## Observations and known issues + +- Nested lists are unsupported +- `URL` rule doesn't allow whitespace, `(`, or `)` diff --git a/packages/message-parser/babel.config.js b/packages/message-parser/babel.config.js new file mode 100644 index 00000000000..8456c191273 --- /dev/null +++ b/packages/message-parser/babel.config.js @@ -0,0 +1,18 @@ +module.exports = { + presets: [ + [ + '@babel/preset-env', + { + targets: { + browsers: [ + 'Chrome >= 59', + 'FireFox >= 44', + 'Safari >= 7', + 'Explorer 11', + 'last 4 Edge versions', + ], + }, + }, + ], + ], +}; diff --git a/packages/message-parser/jest.config.js b/packages/message-parser/jest.config.js new file mode 100644 index 00000000000..114260f819d --- /dev/null +++ b/packages/message-parser/jest.config.js @@ -0,0 +1,12 @@ +const path = require('path'); + +module.exports = { + coverageReporters: [], + transform: { + '\\.pegjs$': path.resolve(__dirname, './loaders/pegtransform.js'), + }, + preset: 'ts-jest', + errorOnDeprecated: true, + testMatch: ['/tests/**/*.(spec|test).ts'], + moduleFileExtensions: ['js', 'ts', 'pegjs'], +}; diff --git a/packages/message-parser/loaders/pegtransform.js b/packages/message-parser/loaders/pegtransform.js new file mode 100644 index 00000000000..9df49c61dfe --- /dev/null +++ b/packages/message-parser/loaders/pegtransform.js @@ -0,0 +1,10 @@ +const pegjs = require('peggy'); + +module.exports = { + process: (content) => ({ + code: pegjs.generate(content, { + output: 'source', + format: 'commonjs', + }), + }), +}; diff --git a/packages/message-parser/messageParser.js b/packages/message-parser/messageParser.js new file mode 100644 index 00000000000..c1dc1bda949 --- /dev/null +++ b/packages/message-parser/messageParser.js @@ -0,0 +1,7 @@ +/* eslint-disable import/no-unresolved */ + +if (process.env.NODE_ENV === 'production') { + module.exports = require('./dist/messageParser.production.js'); +} else { + module.exports = require('./dist/messageParser.development.js'); +} diff --git a/packages/message-parser/package.json b/packages/message-parser/package.json new file mode 100644 index 00000000000..5a4ff3ba8ba --- /dev/null +++ b/packages/message-parser/package.json @@ -0,0 +1,78 @@ +{ + "name": "@rocket.chat/message-parser", + "description": "Rocket.Chat parser for messages", + "version": "0.31.28", + "author": { + "name": "Rocket.Chat", + "url": "https://rocket.chat/" + }, + "license": "MIT", + "homepage": "https://github.com/RocketChat/fuselage#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/RocketChat/fuselage.git", + "directory": "packages/message-parser" + }, + "bugs": { + "url": "https://github.com/RocketChat/fuselage/issues" + }, + "main": "messageParser.js", + "exports": { + ".": { + "default": "./messageParser.js" + }, + "./index": { + "default": "./messageParser.js" + } + }, + "module": "dist/messageParser.mjs", + "unpkg": "dist/messageParser.umd.js", + "types": "dist/index.d.ts", + "files": [ + "/dist", + "/messageParser.js" + ], + "directories": { + "test": "test" + }, + "publishConfig": { + "access": "public" + }, + "scripts": { + "build": "run-s .:build:clean .:build:bundle", + ".:build:clean": "rimraf dist", + ".:build:bundle": "webpack", + "test": "jest --runInBand --coverage", + "watch": "jest --watch", + "lint": "eslint src", + "docs": "typedoc" + }, + "devDependencies": { + "@babel/core": "~7.21.4", + "@babel/eslint-parser": "~7.21.3", + "@babel/preset-env": "~7.21.4", + "@rocket.chat/eslint-config": "workspace:^", + "@rocket.chat/peggy-loader": "workspace:~", + "@rocket.chat/prettier-config": "~0.31.25", + "@types/jest": "~29.5.7", + "@types/node": "~14.18.42", + "@typescript-eslint/parser": "~5.58.0", + "babel-loader": "~9.1.2", + "eslint": "~8.45.0", + "jest": "~29.6.4", + "npm-run-all": "^4.1.5", + "peggy": "3.0.2", + "prettier": "~2.8.7", + "prettier-plugin-pegjs": "~0.5.4", + "rimraf": "^3.0.2", + "ts-jest": "~29.1.0", + "ts-loader": "~9.4.2", + "typedoc": "~0.24.1", + "typescript": "~5.0.4", + "webpack": "~5.78.0", + "webpack-cli": "~5.0.1" + }, + "dependencies": { + "tldts": "~5.7.112" + } +} diff --git a/packages/message-parser/src/definitions.ts b/packages/message-parser/src/definitions.ts new file mode 100644 index 00000000000..1db89bd2411 --- /dev/null +++ b/packages/message-parser/src/definitions.ts @@ -0,0 +1,249 @@ +export type Blockquote = { + type: 'BLOCKQUOTE'; + value: Paragraph[]; +}; + +export type OrderedList = { + type: 'ORDERED_LIST'; + value: ListItem[]; +}; + +export type UnorderedList = { + type: 'UNORDERED_LIST'; + value: ListItem[]; +}; + +export type ListItem = { + type: 'LIST_ITEM'; + value: Inlines[]; + number?: number; +}; + +export type Tasks = { + type: 'TASKS'; + value: Task[]; +}; +export type Task = { + type: 'TASK'; + status: boolean; + value: Inlines[]; +}; + +export type CodeLine = { + type: 'CODE_LINE'; + value: Plain; +}; + +export type Color = { + type: 'COLOR'; + value: { + r: number; + g: number; + b: number; + a: number; + }; +}; + +export type BigEmoji = { + type: 'BIG_EMOJI'; + value: [Emoji] | [Emoji, Emoji] | [Emoji, Emoji, Emoji]; +}; + +export type Emoji = + | { + type: 'EMOJI'; + value: Plain; + shortCode: string; + } + | { + type: 'EMOJI'; + value: undefined; + unicode: string; + }; + +export type Code = { + type: 'CODE'; + language: string | undefined; + value: CodeLine[]; +}; + +export type InlineCode = { + type: 'INLINE_CODE'; + value: Plain; +}; + +export type Heading = { + type: 'HEADING'; + level: 1 | 2 | 3 | 4; + value: Plain[]; +}; + +export type Quote = { + type: 'QUOTE'; + value: Paragraph[]; +}; + +export type Markup = Italic | Strike | Bold | Plain | ChannelMention; +export type MarkupExcluding = Exclude; + +export type Bold = { + type: 'BOLD'; + value: Array< + | MarkupExcluding + | Link + | Emoji + | UserMention + | ChannelMention + | InlineCode + >; +}; + +export type Italic = { + type: 'ITALIC'; + value: Array< + | MarkupExcluding + | Link + | Emoji + | UserMention + | ChannelMention + | InlineCode + >; +}; + +export type Strike = { + type: 'STRIKE'; + value: Array< + | MarkupExcluding + | Link + | Emoji + | UserMention + | ChannelMention + | InlineCode + | Italic + >; +}; + +export type Plain = { + type: 'PLAIN_TEXT'; + value: string; +}; + +export type LineBreak = { + type: 'LINE_BREAK'; + value: undefined; +}; + +export type KaTeX = { + type: 'KATEX'; + value: string; +}; + +export type InlineKaTeX = { + type: 'INLINE_KATEX'; + value: string; +}; + +export type Paragraph = { + type: 'PARAGRAPH'; + value: Array>; +}; + +export type Image = { + type: 'IMAGE'; + value: { + src: Plain; + label: Markup; + }; +}; + +export type Link = { + type: 'LINK'; + value: { + src: Plain; + label: Markup | Markup[]; + }; +}; + +export type UserMention = { + type: 'MENTION_USER'; + value: Plain; +}; + +export type ChannelMention = { + type: 'MENTION_CHANNEL'; + value: Plain; +}; + +export type Types = { + BOLD: Bold; + PARAGRAPH: Paragraph; + PLAIN_TEXT: Plain; + ITALIC: Italic; + STRIKE: Strike; + CODE: Code; + CODE_LINE: CodeLine; + INLINE_CODE: InlineCode; + HEADING: Heading; + QUOTE: Quote; + LINK: Link; + MENTION_USER: UserMention; + MENTION_CHANNEL: ChannelMention; + EMOJI: Emoji; + BIG_EMOJI: BigEmoji; + COLOR: Color; + TASKS: Tasks; + TASK: Task; + UNORDERED_LIST: UnorderedList; + ORDERED_LIST: OrderedList; + LIST_ITEM: ListItem; + IMAGE: Image; + LINE_BREAK: LineBreak; +}; + +export type ASTNode = + | BigEmoji + | Bold + | Paragraph + | Plain + | Italic + | Strike + | Code + | CodeLine + | InlineCode + | Heading + | Quote + | Link + | UserMention + | ChannelMention + | Emoji + | Color + | Tasks; + +export type TypesKeys = keyof Types; + +export type Inlines = + | Bold + | Plain + | Italic + | Strike + | InlineCode + | Image + | Link + | UserMention + | ChannelMention + | Emoji + | Color + | InlineKaTeX; + +export type Blocks = + | Code + | Heading + | Quote + | ListItem + | Tasks + | OrderedList + | UnorderedList + | LineBreak + | KaTeX; + +export type Root = Array | [BigEmoji]; diff --git a/packages/message-parser/src/grammar.pegjs b/packages/message-parser/src/grammar.pegjs new file mode 100644 index 00000000000..3445f8e1823 --- /dev/null +++ b/packages/message-parser/src/grammar.pegjs @@ -0,0 +1,705 @@ +{{ + const { + autoEmail, + autoLink, + bigEmoji, + bold, + code, + codeLine, + color, + emoji, + emojiUnicode, + emoticon, + heading, + image, + inlineCode, + inlineKatex, + italic, + katex, + lineBreak, + link, + listItem, + mentionChannel, + mentionUser, + orderedList, + paragraph, + phoneChecker, + plain, + quote, + reducePlainTexts, + strike, + task, + tasks, + unorderedList, + } = require('./utils'); +}} + +Start + = @BigEmoji !. + / (Blocks / Paragraph / EndOfLine { return paragraph([plain('')]); })+ + +/** + * + * Blocks + * + */ +Blocks + = Blockquote + / Code + / Heading + / Tasks + / OrderedList + / UnorderedList + / Katex + / LineBreak + +/** + * + * Blockquote + * e.g: > This is a blockquote + * + */ +Blockquote = b:BlockquoteLine+ { return quote(b); } + +BlockquoteLine = ">" [ \t]* @Paragraph + +/** + * + * Code Chunk + * e.g: + * ```js + * console.log('hello world'); + * ``` + */ +Code = "```" language:CodeLanguage? EndOfLine lines:CodeLine+ EndOfLine "```" { return code(lines, language); } + +CodeLanguage = $[a-zA-Z0-9 \_\-.]+ + +CodeLine + = chunk:CodeChunk { return codeLine(chunk); } + / "\n" chunk:CodeChunk { return codeLine(chunk); } + / "\n" !"```" { return codeLine(plain('')); } + +CodeChunk = text:$(!EndOfLine !"```" .)+ { return plain(text); } + +/** + * + * Heading: h1, h2, h3, h4 + * e.g: + * # Heading 1 + * ## Heading 2 + * ### Heading 3 + * #### Heading 4 + * +*/ +Heading = count:HeadingStart [ \t]+ text:HeadingChunk { return heading([text], count); } + +HeadingStart = value:"#" |1..4| { return value.length; } + +HeadingChunk = text:$(!EndOfLine .)+ { return plain(text); } + +/** + * + * Tasks + * e.g: + * - [x] Task One (checked) + * - [ ] Task two + * - [x] Task three (checked) + * + */ +Tasks = items:Task+ { return tasks(items); } + +Task = "- [" flag:TaskFlag "]" [ \t]+ text:Inline { return task(text, flag); } + +TaskFlag = "x" { return true; } / " " { return false; } + +/** + * + * Ordered List + * e.g: + * 1. Item One + * 2. Item Two + * 3. Item Three + * + */ +OrderedList = items:OrderedListItem+ { return orderedList(items); } + +OrderedListItem = number:Digits "." [ \t]+ text:Inline { return listItem(text, parseInt(number, 10)); } + +/** + * + * Unordered List + * e.g: + * - Item One + * - Item Two + * * Item Three + * * Item Four + * + */ +UnorderedList = items:(UnorderedListHyphenItem+ / UnorderedListAsteriskItem+) { return unorderedList(items); } + +UnorderedListHyphenItem = "-" [ \t]+ text:Inline { return listItem(text); } + +UnorderedListAsteriskItem = "*" [ \t]+ text:UnorderedListItemContent { return listItem(text); } + +UnorderedListItemContent = value:UnorderedListItemContentItem+ !"*" EndOfLine? { return reducePlainTexts(value); } + +UnorderedListItemContentItem = InlineItem / !"*" @Any + +/** + * + * KaTex + * e.g: \[ KATEX_HERE \] OR $$ KATEX_HERE $$ + * $$x = \begin{cases} + * a &\text{if } b \\ + * c &\text{if } d + * \end{cases}$$ + * + */ +Katex = KatexStart content:$(!KatexEnd .)* KatexEnd { return katex(content); } + +KatexStart + = & { return options.katex?.parenthesisSyntax; } "\\[" + / & { return options.katex?.dollarSyntax; } "$$" + +KatexEnd + = & { return options.katex?.parenthesisSyntax; } "\\]" + / & { return options.katex?.dollarSyntax; } "$$" + +KatexInline + = KatexInlineStart content:$(!KatexInlineEnd .)* KatexInlineEnd { + return inlineKatex(content); + } + +KatexInlineStart + = & { return options.katex?.parenthesisSyntax; } "\\(" + / & { return options.katex?.dollarSyntax; } "$" + +KatexInlineEnd + = & { return options.katex?.parenthesisSyntax; } "\\)" + / & { return options.katex?.dollarSyntax; } "$" + +/** + * + * LineBreak + * e.g: \n + * +*/ +LineBreak = Space* EndOfLine { return lineBreak(); } + +/** + * + * Paragraph + * e.g: This is a paragraph +*/ +Paragraph = value:Inline { return paragraph(value); } + +/** + * + * Inline + * +*/ +Inline = value:(InlineItem / Any)+ EndOfLine? { return reducePlainTexts(value); } + +InlineItem = Whitespace + / References + / AutolinkedPhone + / AutolinkedEmail + / AutolinkedURL + / EmphasisWithWhitespace + / Emphasis + / UserMention + / ChannelMention + / Emoji + / InlineCode + / Image + / Emoticon + / Color + / KatexInline + / Escaped + +/** + * + * URL + * e.g: + * Reference: [Rocket.Chat Website](https://rocket.chat), [](https://rocket.chat), + * Image: ![](https://rocket.chat/logo.png) + * + */ +References + = "[" title:LinkTitle* "](" href:LinkRef ")" { return title.length ? link(href, reducePlainTexts(title)) : link(href); } + / "<" href:LinkRef "|" title:LinkTitle2 ">" { return link(href, [plain(title)]); } + +LinkTitle = (Whitespace / EmphasisForReferences) / anyTitle:$(!("](" .) .) { return plain(anyTitle) } + +LinkTitle2 = $([\x20-\x3B\x3D\x3F-\x60\x61-\x7B\x7D-\xFF] / NonASCII)+ + +LinkRef = URL / FilePath / p:Phone { return 'tel:' + p.number; } // TODO: Accept parenthesis + +FilePath = $(URLScheme URLBody+) + +Image = "![" title:Line? "](" href:LinkRef ")" { return title ? image(href, title) : image(href); } + +URL + = $(URLScheme URLAuthority URLBody*) + / $(URLAuthorityHost URLBody*) + +URLScheme = $([A-Za-z0-9+-] |1..32| ":") + +URLBody + = ( + !(Extra+ (Whitespace / EndOfLine) / Whitespace) + (AnyText / [*\[\/\]\^_`{}~(]) + )+ + +URLAuthority = $("//" URLAuthorityUserInfo? URLAuthorityHost) + +URLAuthorityUserInfo = $(URLAuthorityUser (":" URLAuthorityPassword)? "@") + +URLAuthorityUser = $(AlphaDigit / ![@/] Safe)+ + +URLAuthorityPassword = $(AlphaDigit / ![@/] Safe)+ + +URLAuthorityHost = URLAuthorityHostName (":" URLAuthorityPort)? + +URLAuthorityHostName + = DomainName + / $(Digits |4, "."|) // TODO: IPv4 and IPv6 + +URLAuthorityPort + = Digits // TODO: from "0" to "65535" + +DomainName + = "localhost" + / $(DomainNameLabel ("." DomainChar DomainNameLabel*)+) + +DomainNameLabel = $(DomainChar+ ("-" DomainChar+)*) + +DomainChar = !Extra ([\__-] / !Safe) !EndOfLine !Space ![\\/|><%`] . + +/** + * + * Phone + * e.g: 075-63546725 + * + */ +Phone = "+" p:PhoneNumber { return { text: '+' + p.text, number: p.number }; } + +PhoneNumber + = p:PhonePrefix "-" d:Digits { + return { text: p.text + '-' + d, number: p.number + d }; + } + / p:PhonePrefix d1:Digits "-" d2:Digits { + return { text: p.text + d1 + '-' + d2, number: p.number + d1 + d2 }; + } + / p:PhonePrefix d:Digits { + return { text: p.text + d, number: p.number + d }; + } + / d:Digits { return { text: d, number: d }; } + +PhonePrefix + = d:Digits { return { text: d, number: d }; } + / "(" d:Digits ")" { return { text: '(' + d + ')', number: d }; } + +AutolinkedPhone = p:Phone { return phoneChecker(p.text, p.number); } + +/** + * + * Email + * e.g: contact@rocket.chat + * + */ +Email = "mailto:"? @$(LocalPart "@" DomainName) + +LocalPart = $(LocalPartChar+ ("." LocalPartChar+)*) + +LocalPartChar = AlphaNumericOrMarkChar+ LocalPartSpecialChars* + +LocalPartSpecialChars = [!#$%&'*+/=?^_\`{|}~-] + +AutolinkedEmail = e:Email { return autoEmail(e); } + +/** + * + * Auto Link URL + * e.g: rocket.chat, https://rocket.chat, + * with customDomains options as intranet: protocol://internaltool.intranet + * + */ +AutolinkedURL = u:AutoLinkURL { return autoLink(u, options.customDomains); } + +AutoLinkURL + = $(URLScheme URLAuthority AutoLinkURLBody*) + / $(URLAuthorityHost AutoLinkURLBody*) + +AutoLinkURLBody = !(Extra* (Whitespace / EndOfLine)) . + +/** + * + * Emphasis + * +*/ +Emphasis = Bold / Italic / Strikethrough + +/** + * + * Emphasis for References + * +*/ +EmphasisForReferences = BoldForReferences / ItalicForReferences / StrikethroughForReferences + +/** + * + * Italic, Bold and Strike + * e.g: __italic__, _italic_, **bold**, __*bold italic*__, ~~strikethrough~~ + * + */ + +/* Italic */ +Italic + = value:$([a-zA-Z0-9]+ [\x5F] [\x5F]?) { return plain(value); } + / [\x5F] [\x5F] i:ItalicContentItems [\x5F] [\x5F] t:$[a-zA-Z0-9]+ { + return reducePlainTexts([plain('__'), ...i, plain('__'), plain(t)])[0]; + } + / [\x5F] i:ItalicContentItems [\x5F] t:$[a-zA-Z]+ { + return reducePlainTexts([plain('_'), ...i, plain('_'), plain(t)])[0]; + } + / [\x5F] [\x5F] @ItalicContent [\x5F] [\x5F] + / [\x5F] @ItalicContent [\x5F] + +ItalicContent = text:ItalicContentItems { return italic(text); } + +ItalicContentItems = text:ItalicContentItem+ { return reducePlainTexts(text); } + +ItalicContentItem + = Whitespace + / InlineCode + / References + / UserMention + / ChannelMention + / Bold + / Strikethrough + / Emoji + / Emoticon + / AnyItalic + / Line + +/* Bold */ +Bold = [\x2A] [\x2A] @BoldContent [\x2A] [\x2A] / [\x2A] @BoldContent [\x2A] + +BoldContent = text:BoldContentItem+ { return bold(reducePlainTexts(text)); } + +BoldContentItem = Whitespace / InlineCode / References / UserMention / ChannelMention / Italic / Strikethrough / Emoji / Emoticon / AnyBold / Line + +/* Strike */ +Strikethrough = [\x7E] [\x7E] @StrikethroughContent [\x7E] [\x7E] / [\x7E] @StrikethroughContent [\x7E] + +StrikethroughContent = text:(InlineCode / Whitespace / References / UserMention / ChannelMention / Italic / Bold / Emoji / Emoticon / AnyStrike / Line)+ { + return strike(reducePlainTexts(text)); + } + +/* Italic for References */ +ItalicForReferences + = value:$([a-zA-Z0-9]+ [\x5F] [\x5F]?) { return plain(value); } + / [\x5F] [\x5F] i:ItalicContentItemsForReferences [\x5F] [\x5F] t:$[a-zA-Z0-9]+ { + return reducePlainTexts([plain('__'), ...i, plain('__'), plain(t)])[0]; + } + / [\x5F] i:ItalicContentItemsForReferences [\x5F] t:$[a-zA-Z]+ { + return reducePlainTexts([plain('_'), ...i, plain('_'), plain(t)])[0]; + } + / [\x5F] [\x5F] @ItalicContentForReferences [\x5F] [\x5F] + / [\x5F] @ItalicContentForReferences [\x5F] + +ItalicContentForReferences = text:ItalicContentItemsForReferences { return italic(text); } + +ItalicContentItemsForReferences = text:ItalicContentItemForReferences+ { return reducePlainTexts(text); } + +ItalicContentItemForReferences + = Whitespace + / UserMention + / ChannelMention + / BoldForReferences + / StrikethroughForReferences + / Emoji + / Emoticon + / AnyItalic + / Line + / InlineCode + +/* Bold for References */ +BoldForReferences = [\x2A] [\x2A] @BoldContentForReferences [\x2A] [\x2A] / [\x2A] @BoldContentForReferences [\x2A] + +BoldContentForReferences = text:(Whitespace / UserMention / ChannelMention / ItalicForReferences / StrikethroughForReferences / Emoji / Emoticon / AnyBold / Line / InlineCode)+ { return bold(reducePlainTexts(text)); } + +/* Strike for References */ +StrikethroughForReferences = [\x7E] [\x7E] @StrikethroughContentForReferences [\x7E] [\x7E] / [\x7E] @StrikethroughContentForReferences [\x7E] + +StrikethroughContentForReferences = text:(Whitespace / UserMention / ChannelMention / ItalicForReferences / BoldForReferences / Emoji / Emoticon / AnyStrike / Line / InlineCode)+ { + return strike(reducePlainTexts(text)); + } + +AnyBold = t:[^\x0a\* ] { return plain(t); } + +AnyStrike = t:[^\x0a\~ ] { return plain(t); } + +AnyItalic = t:[^\x0a\_ ] { return plain(t); } + +/** + * Emphasis with only whitespaces return plain text + * e.g: __ __, _ _, ** **, * *, ** *, ~~ ~~ +*/ +EmphasisWithWhitespace = AsteriskWithWhitespace / UnderscoreWithWhitespace / TildeWithWhitespace + +AsteriskWithWhitespace = first:Asterisk second:Whitespace third:Asterisk +{ + return reducePlainTexts([first,second,third])[0]; +} + +UnderscoreWithWhitespace = first:Underscore second:Whitespace third:Underscore +{ + return reducePlainTexts([first,second,third])[0]; +} + +TildeWithWhitespace = first:Tilde second:Whitespace third:Tilde +{ + return reducePlainTexts([first,second,third])[0]; +} + +Asterisk = t:"*"+ {return plain(t.join(""))} +Underscore = t:"_"+ {return plain(t.join(""))} +Tilde = t:"~"+ {return plain(t.join(""))} + +/** + * + * Mentions + * e.g: @user, #channel + * +*/ +UserMention + = t:Text "@"+ user:AlphaNumericChar { + return reducePlainTexts([t, plain('@' + user)])[0]; + } + / "@"+ user:$(UTF8NamesValidation ([:@] UTF8NamesValidation)?) { + return mentionUser(user); + } + +ChannelMention + = t:Text "#" channel:AlphaNumericChar { + return reducePlainTexts([t, plain('#' + channel)])[0]; + } + / "#" channel:UTF8NamesValidation { return mentionChannel(channel); } + +/** + * + * EMOJIS + * e.g: + * BigEmoji (min: 1 | max: 3 without text) and ShortCode :smile: :+1: :heart: + * Unicode: 😀 🚀 🌈 + * Emoticon: :D :P :( :/ + * + */ +BigEmoji = (EndOfLine / Space)* es:(@(Emoji / Emoticon) (EndOfLine / Space)*) |1..3| { return [bigEmoji(es)]; } + +Emoji = EmojiShortCode / ch:UnicodeEmoji { return emojiUnicode(ch); } + +EmojiShortCode = ":" shortCode:EmojiShortCodeName ":" { return emoji(shortCode); } + +EmojiShortCodeName = $[0-9a-zA-Z-_+.]+ + +/* Emoticons */ +Emoticon = & { return options.emoticons; } @EmoticonPattern + +EmoticonPattern + = e:$"<3" { return emoticon(e, 'heart'); } + / e:$":)" / ">;)" / ">:-)" / ">=)") { return emoticon(e, 'laughing'); } + / e:$("':)" / "':-)" / "'=)" / "':D" / "':-D" / "'=D") { + return emoticon(e, 'sweat_smile'); + } + / e:$(":')" / ":'-)") { return emoticon(e, 'joy'); } + / e:$( + "O:-)" + / "0:-3" + / "0:3" + / "0:-)" + / "0:)" + / "0;^)" + / "O:)" + / "O;-)" + / "O=)" + / "0;-)" + / "O:-3" + / "O:3" + ) { return emoticon(e, 'innocent'); } + / e:$(":)" / ":-)" / "=]" / "=)" / ":]") { + return emoticon(e, 'slight_smile'); + } + / e:$(";)" / ";-)" / "*-)" / "*)" / ";-]" / ";]" / ";D" / ";^)") { + return emoticon(e, 'wink'); + } + / e:$(":*" / ":-*" / "=*" / ":^*") { return emoticon(e, 'kissing_heart'); } + / e:$(":P" / ":-P" / "=P" / ":-\u00de" / ":\u00de" / ":-b" / ":b") { + return emoticon(e, 'stuck_out_tongue'); + } + / e:$(">:P" / "X-P") { return emoticon(e, 'stuck_out_tongue_winking_eye'); } + / e:$("B-)" / "B)" / "8)" / "8-)" / "B-D" / "8-D") { + return emoticon(e, 'sunglasses'); + } + / e:$(">:[" / ":-(" / ":(" / ":-[" / ":[" / "=(") { + return emoticon(e, 'disappointed'); + } + / e:$( + ">:\\" + / ">:\/" + / ":-\/" + / ":-." + / ":\/" + / ":\\" + / "=\/" + / "=\\" + / ":L" + / "=L" + ) { return emoticon(e, 'confused'); } + / e:$">.<" { return emoticon(e, 'persevere'); } + / e:$(":'(" / ":'-(" / ";(" / ";-(") { return emoticon(e, 'cry'); } + / e:$(">:(" / ">:-(" / ":@") { return emoticon(e, 'angry'); } + / e:$(":$" / "=$") { return emoticon(e, 'flushed'); } + / e:$"D:" { return emoticon(e, 'fearful'); } + / e:$("':(" / "':-(" / "'=(") { return emoticon(e, 'sweat'); } + / e:$(":-X" / ":X" / ":-#" / ":#" / "=X" / "=#") { + return emoticon(e, 'no_mouth'); + } + / e:$("-_-" / "-__-" / "-___-") { return emoticon(e, 'expressionless'); } + / e:$(":-O" / ":O" / "O_O" / ">:O") { return emoticon(e, 'open_mouth'); } + / e:$("#-)" / "#)" / "%-)" / "%)" / "X)" / "X-)") { + return emoticon(e, 'dizzy_face'); + } + / e:$"(y)" { return emoticon(e, 'thumbsup'); } + / e:$("*\\0\/*" / "\\0\/" / "*\\O\/*" / "\\O\/") { + return emoticon(e, 'person_gesturing_ok'); + } + +/* Unicode emojis */ +UnicodeEmoji + = UnicodeEmojiEmoticon + / $( + UnicodeEmojiSupplementalSymbolsAndPictographs + ( + UnicodeEmojiMiscellaneousSymbolsAndPictographs + ([\u200D] UnicodeEmojiMiscellaneousSymbolsAndPictographs)* + )? + ) + / $( + ( + UnicodeEmojiMiscellaneousSymbolsAndPictographs + UnicodeEmojiMiscellaneousSymbolsAndPictographsFitzpatrickModifiers? + [\u200D] + )* + UnicodeEmojiMiscellaneousSymbolsAndPictographs + UnicodeEmojiMiscellaneousSymbolsAndPictographsFitzpatrickModifiers? + ) + / UnicodeEmojiTransportAndMapSymbols + / UnicodeEmojiMiscellaneousTechnical + / UnicodeEmojiMiscellaneousSymbols + / UnicodeEmojiDingbats + / UnicodeEmojiFlags + +UnicodeEmojiEmoticon = $([\uD83D] [\uDE00-\uDE4F]) + +UnicodeEmojiSupplementalSymbolsAndPictographs = $([\uD83E] [\uDD00-\uDDFF]) + +UnicodeEmojiMiscellaneousSymbolsAndPictographs = $([\uD83C] [\uDF00-\uDFFF] [\uFE00-\uFE0F]?) / $([\uD83D] [\uDC00-\uDDFF] [\uFE00-\uFE0F]?) + +UnicodeEmojiMiscellaneousSymbolsAndPictographsFitzpatrickModifiers = $([\uD83C] [\uDFFB-\uDFFF]) + +UnicodeEmojiTransportAndMapSymbols = $([\uD83D] [\uDE80-\uDEFA]) + +UnicodeEmojiMiscellaneousTechnical = $([\u2300-\u23FF] [\uFE00-\uFE0F]?) + +UnicodeEmojiMiscellaneousSymbols = $([\u2600-\u26FF] [\uFE00-\uFE0F]?) + +UnicodeEmojiDingbats = $([\u2700-\u27BF] [\uFE00-\uFE0F]?) + +UnicodeEmojiFlags = $([\uD83C] [\uDD00-\uDDFF] [\uD83C] [\uDD00-\uDDFF]) + +/** + * + * Inline Code + * e.g: `console.log('hello world')` + * + */ +InlineCode = "`" text:$InlineCode__+ "`" { return inlineCode(plain(text)); } + +InlineCode__ = $(!"`" !"\n" .) + +/** + * + * Colors + * e.g: color:#ff0000 , color:#ff0 + * + */ +Color = & { return options.colors; } "color:#" rgba:ColorRGBATuple !AnyText { + return color(...rgba); + } + +ColorRGBATuple = HexByte|3..4| / HexNible|3..4| + +/** + * + * Macros + * + */ +Whitespace = w:$Space+ { return plain(w); } + +EndOfLine = "\r\n" / "\n" / "\r" + +Space = " " / "\t" + +Escaped = "\\" t:[*_~`#.] { return plain(t); } + +Any = !EndOfLine t:. p:$AutolinkedPhone? u:$URL? { return plain(t + p + u); } + +AnyText = [\x20-\x27\x2B-\x40\x41-\x5A\x61-\x7A] / NonASCII + +Text = text:AnyText { return plain(text); } + +Line = t:LineStructure { return plain(t); } + +LineStructure = head:$Space* text:$AnyText+ tail:$Space* { return head + text + tail; } + +UTF8NamesValidation = $([-_.] / AlphaNumericChar)+ + +NonASCII = [\x80-\uFFFF] + +Unicode = "\\" Digits:$(HexDigit |1..6|) ("\r\n" / [ \t\r\n\f])? { return String.fromCharCode(parseInt(Digits, 16)); } + +Digit = [0-9] + +Digits = $Digit+ + +Safe = [$@&+\__#?-] + +Extra = [.,!%~*\"':;()=~] + +HexDigit = [0-9A-Fa-f] + +HexNible = a:HexDigit { return parseInt(a + a, 16); } + +HexByte = a:HexDigit b:HexDigit { return parseInt(a + b, 16); } + +AlphaDigit = [a-zA-Z0-9] + +AlphaNumericOrMarkChar = AlphaOrMarkChar / DecimalNumberChar + +AlphaOrMarkChar = AlphaChar / EmojiChar / MarkChar + +AlphaNumericChar = AlphaChar / DecimalNumberChar + +AlphaChar = [A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC] + +DecimalNumberChar = [0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19] + +EmojiChar = [\u2700-\u27bf\udde6-\uddff\ud800-\udbff\udc00-\udfff\ufe0e\ufe0f\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0\ud83c\udffb-\udfff\u200d\u3299\u3297\u303d\u3030\u24c2\ud83c\udd70-\udd71\udd7e-\udd7f\udd8e\udd91-\udd9a\udde6-\uddff\ude01-\ude02\ude1a\ude2f\ude32-\ude3a\ude50-\ude51\u203c\u2049\u25aa-\u25ab\u25b6\u25c0\u25fb-\u25fe\u00a9\u00ae\u2122\u2139\udc04\u2600-\u26FF\u2b05\u2b06\u2b07\u2b1b\u2b1c\u2b50\u2b55\u231a\u231b\u2328\u23cf\u23e9-\u23f3\u23f8-\u23fa\udccf\u2935\u2934\u2190-\u21ff] + +MarkChar = [\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F] diff --git a/packages/message-parser/src/guards.ts b/packages/message-parser/src/guards.ts new file mode 100644 index 00000000000..f9d812f4945 --- /dev/null +++ b/packages/message-parser/src/guards.ts @@ -0,0 +1,10 @@ +import type { ASTNode } from './definitions'; + +export const isNodeOfType = ( + value: unknown, + type: N['type'] +): value is N => + typeof value === 'object' && + value !== null && + 'type' in value && + (value as { type: unknown }).type === type; diff --git a/packages/message-parser/src/index.ts b/packages/message-parser/src/index.ts new file mode 100644 index 00000000000..cbdae1382cb --- /dev/null +++ b/packages/message-parser/src/index.ts @@ -0,0 +1,26 @@ +import type { Root } from './definitions'; +import * as grammar from './grammar.pegjs'; + +export * from './definitions'; + +export { isNodeOfType } from './guards'; + +export type Options = { + colors?: boolean; + emoticons?: boolean; + katex?: { + dollarSyntax?: boolean; + parenthesisSyntax?: boolean; + }; + customDomains?: string[]; +}; + +export const parse = (input: string, options?: Options): Root => + grammar.parse(input, options); + +export { + /** @deprecated */ + parse as parser, + /** @deprecated */ + Root as MarkdownAST, +}; diff --git a/packages/message-parser/src/typings/peg.d.ts b/packages/message-parser/src/typings/peg.d.ts new file mode 100644 index 00000000000..9485bc0f0f8 --- /dev/null +++ b/packages/message-parser/src/typings/peg.d.ts @@ -0,0 +1,7 @@ +declare module '*.pegjs' { + import type { ParserOptions } from 'peggy'; + + import type { ASTMessage } from '../definitions'; + + export const parse: (input: string, options?: ParserOptions) => ASTMessage; +} diff --git a/packages/message-parser/src/utils.ts b/packages/message-parser/src/utils.ts new file mode 100644 index 00000000000..5902d8e33e7 --- /dev/null +++ b/packages/message-parser/src/utils.ts @@ -0,0 +1,235 @@ +import { parse as tldParse } from 'tldts'; + +import type { + BigEmoji, + Code, + Color, + Heading, + Markup, + Paragraph, + Types, + Task, + ListItem, + Inlines, + LineBreak, + Emoji, + KaTeX, + InlineKaTeX, + Link, +} from './definitions'; + +const generate = + (type: Type) => + (value: Types[Type]['value']): Types[Type] => + ({ type, value } as any); + +export const paragraph = generate('PARAGRAPH'); + +export const bold = generate('BOLD'); + +export const color = (r: number, g: number, b: number, a = 255): Color => ({ + type: 'COLOR', + value: { r, g, b, a }, +}); + +export const heading = ( + value: Heading['value'], + level: Heading['level'] = 1 +): Heading => ({ + type: 'HEADING', + level, + value, +}); + +export const code = ( + value: Code['value'], + language?: Code['language'] +): Code => ({ + type: 'CODE', + language: language || 'none', + value, +}); + +export const bigEmoji = (value: BigEmoji['value']): BigEmoji => ({ + type: 'BIG_EMOJI', + value, +}); + +export const task = (value: Task['value'], status: boolean): Task => ({ + type: 'TASK', + status, + value, +}); + +export const inlineCode = generate('INLINE_CODE'); +export const tasks = generate('TASKS'); + +export const italic = generate('ITALIC'); + +export const plain = generate('PLAIN_TEXT'); +export const strike = generate('STRIKE'); + +export const codeLine = generate('CODE_LINE'); + +const isValidLink = (link: string) => { + try { + return Boolean(new URL(link)); + } catch (error) { + return false; + } +}; + +export const link = (src: string, label?: Markup[]): Link => ({ + type: 'LINK', + value: { src: plain(src), label: label ?? [plain(src)] }, +}); + +export const autoLink = (src: string, customDomains?: string[]) => { + const validHosts = ['localhost', ...(customDomains ?? [])]; + const { isIcann, isIp, isPrivate, domain } = tldParse(src, { + detectIp: false, + allowPrivateDomains: true, + validHosts, + }); + + if ( + !(isIcann || isIp || isPrivate || (domain && validHosts.includes(domain))) + ) { + return plain(src); + } + + const href = isValidLink(src) || src.startsWith('//') ? src : `//${src}`; + + return link(href, [plain(src)]); +}; + +export const autoEmail = (src: string) => { + const href = `mailto:${src}`; + + const { isIcann, isIp, isPrivate } = tldParse(href, { + detectIp: false, + allowPrivateDomains: true, + }); + + if (!(isIcann || isIp || isPrivate)) { + return plain(src); + } + + return link(href, [plain(src)]); +}; + +export const image = (() => { + const fn = generate('IMAGE'); + return (src: string, label?: Markup) => + fn({ src: plain(src), label: label || plain(src) }); +})(); + +export const quote = generate('QUOTE'); + +export const mentionChannel = (() => { + const fn = generate('MENTION_CHANNEL'); + return (value: string) => fn(plain(value)); +})(); + +export const orderedList = generate('ORDERED_LIST'); + +export const unorderedList = generate('UNORDERED_LIST'); + +export const listItem = (text: Inlines[], number?: number): ListItem => ({ + type: 'LIST_ITEM', + value: text, + ...(number && { number }), +}); + +export const mentionUser = (() => { + const fn = generate('MENTION_USER'); + return (value: string) => fn(plain(value)); +})(); + +export const emoji = (shortCode: string): Emoji => ({ + type: 'EMOJI', + value: plain(shortCode), + shortCode, +}); + +export const emojiUnicode = (unicode: string): Emoji => ({ + type: 'EMOJI', + value: undefined, + unicode, +}); + +export const emoticon = (emoticon: string, shortCode: string): Emoji => ({ + type: 'EMOJI', + value: plain(emoticon), + shortCode, +}); + +const joinEmoji = ( + current: Inlines, + previous: Inlines | undefined, + next: Inlines | undefined +): Inlines => { + if (current.type !== 'EMOJI' || !current.value || (!previous && !next)) { + return current; + } + + const hasEmojiAsNeighbor = + previous?.type === current.type || current.type === next?.type; + const hasPlainAsNeighbor = + (previous?.type === 'PLAIN_TEXT' && previous.value.trim() !== '') || + (next?.type === 'PLAIN_TEXT' && next.value.trim() !== ''); + const isEmoticon = current.shortCode !== current.value.value; + + if (current.value && (hasEmojiAsNeighbor || hasPlainAsNeighbor)) { + if (isEmoticon) { + return current.value; + } + + return { + ...current.value, + value: `:${current.value.value}:`, + }; + } + + return current; +}; + +export const reducePlainTexts = ( + values: Paragraph['value'] +): Paragraph['value'] => + values.reduce((result, item, index) => { + const next = values[index + 1]; + const current = joinEmoji(item, values[index - 1], next); + const previous: Inlines = result[result.length - 1]; + + if (previous) { + if (current.type === 'PLAIN_TEXT' && current.type === previous.type) { + previous.value += current.value; + return result; + } + } + + return [...result, current]; + }, [] as Paragraph['value']); +export const lineBreak = (): LineBreak => ({ + type: 'LINE_BREAK', + value: undefined, +}); + +export const katex = (content: string): KaTeX => ({ + type: 'KATEX', + value: content, +}); + +export const inlineKatex = (content: string): InlineKaTeX => ({ + type: 'INLINE_KATEX', + value: content, +}); + +export const phoneChecker = (text: string, number: string) => { + if (number.length < 5) { + return plain(text); + } + + return link(`tel:${number}`, [plain(text)]); +}; diff --git a/packages/message-parser/tests/any.test.ts b/packages/message-parser/tests/any.test.ts new file mode 100644 index 00000000000..63e9a72c91b --- /dev/null +++ b/packages/message-parser/tests/any.test.ts @@ -0,0 +1,13 @@ +import { parse } from '../src'; +import { paragraph, plain } from '../src/utils'; + +test.each([ + ['free text', [paragraph([plain('free text')])]], + ['free text, with comma', [paragraph([plain('free text, with comma')])]], + [ + 'free text with unxpected/unfinished blocks *bold_', + [paragraph([plain('free text with unxpected/unfinished blocks *bold_')])], + ], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/blockquotes.test.ts b/packages/message-parser/tests/blockquotes.test.ts new file mode 100644 index 00000000000..835074ec7fa --- /dev/null +++ b/packages/message-parser/tests/blockquotes.test.ts @@ -0,0 +1,40 @@ +import { parse } from '../src'; +import { paragraph, plain, quote, bold } from '../src/utils'; + +test.each([ + [ + ` +As Rocket Cat said: +> meowww +> grr. +`.trim(), + [ + paragraph([plain('As Rocket Cat said:')]), + quote([paragraph([plain('meowww')]), paragraph([plain('grr.')])]), + ], + ], + [ + ` +As Rocket Cat said: +> *meowww* +> grr. +`.trim(), + [ + paragraph([plain('As Rocket Cat said:')]), + quote([paragraph([bold([plain('meowww')])]), paragraph([plain('grr.')])]), + ], + ], + [ + ` +As Rocket Cat said: +>meowww +>grr. +`.trim(), + [ + paragraph([plain('As Rocket Cat said:')]), + quote([paragraph([plain('meowww')]), paragraph([plain('grr.')])]), + ], + ], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/codeFence.test.ts b/packages/message-parser/tests/codeFence.test.ts new file mode 100644 index 00000000000..3c13ca3b8e6 --- /dev/null +++ b/packages/message-parser/tests/codeFence.test.ts @@ -0,0 +1,83 @@ +import { parse } from '../src'; +import { paragraph, plain, codeLine, code } from '../src/utils'; + +const multiply = (a: number, element: T): Array => + Array.from({ length: a }, () => element); + +test.each([ + [ + `\`\`\` +code + + + + +code +\`\`\``, + [ + code([ + codeLine(plain('code')), + ...multiply(4, codeLine(plain(''))), + codeLine(plain('code')), + ]), + ], + ], + [ + `\`\`\` +code + + +\`\`\``, + [code([codeLine(plain('code')), ...multiply(2, codeLine(plain('')))])], + ], + [ + `\`\`\` +code +\`\`\``, + [code([codeLine(plain('code'))])], + ], + [ + `\`\`\` +var a = "teste"; +\`\`\``, + [code([codeLine(plain('var a = "teste";'))])], + ], + [ + `\`\`\`javascript +code +\`\`\``, + [code([codeLine(plain('code'))], 'javascript')], + ], + [ + `\`\`\`bash c +code +\`\`\``, + [code([codeLine(plain('code'))], 'bash c')], + ], + [ + ` \`\`\` +code +\`\`\``, + [ + paragraph([plain(` \`\`\``)]), + paragraph([plain(`code`)]), + paragraph([plain(`\`\`\``)]), + ], + ], + [ + `\`\`\` +code +code +\`\`\``, + [code([codeLine(plain(`code`)), codeLine(plain(`code`))])], + ], + [ + `\`\`\` +# code +**code** +\`\`\``, + [code([codeLine(plain(`# code`)), codeLine(plain(`**code**`))])], + ], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/color.test.ts b/packages/message-parser/tests/color.test.ts new file mode 100644 index 00000000000..9e492dbcfb2 --- /dev/null +++ b/packages/message-parser/tests/color.test.ts @@ -0,0 +1,34 @@ +import { parse } from '../src'; +import { color, paragraph, plain } from '../src/utils'; + +test.each([ + [ + 'color:#ccc', + [paragraph([color(0xcc, 0xcc, 0xcc)])], + [paragraph([plain('color:#ccc')])], + ], + [ + 'color:#cccc', + [paragraph([color(0xcc, 0xcc, 0xcc, 0xcc)])], + [paragraph([plain('color:#cccc')])], + ], + [ + 'color:#c7c7c7', + [paragraph([color(0xc7, 0xc7, 0xc7)])], + [paragraph([plain('color:#c7c7c7')])], + ], + [ + 'color:#c7c7c7c7', + [paragraph([color(0xc7, 0xc7, 0xc7, 0xc7)])], + [paragraph([plain('color:#c7c7c7c7')])], + ], + ['color:#c7c7c7c7c7', [paragraph([plain('color:#c7c7c7c7c7')])], undefined], + ['color:#c7', [paragraph([plain('color:#c7')])], undefined], + ['color:#zzz', [paragraph([plain('color:#zzz')])], undefined], +])('parses %p', (input, output, disabledOutput) => { + expect(parse(input, { colors: true })).toMatchObject(output); + + if (disabledOutput) { + expect(parse(input, { colors: false })).toMatchObject(disabledOutput); + } +}); diff --git a/packages/message-parser/tests/email.test.ts b/packages/message-parser/tests/email.test.ts new file mode 100644 index 00000000000..4e841385a99 --- /dev/null +++ b/packages/message-parser/tests/email.test.ts @@ -0,0 +1,144 @@ +import { parse } from '../src'; +import { link, paragraph, plain } from '../src/utils'; + +test.each([ + [ + 'joe@joe.com', + [paragraph([link('mailto:joe@joe.com', [plain('joe@joe.com')])])], + ], + [ + "joe@joe.com is Joe's email", + [ + paragraph([ + link('mailto:joe@joe.com', [plain('joe@joe.com')]), + plain(" is Joe's email"), + ]), + ], + ], + [ + "Joe's email is joe@joe.com because it is", + [ + paragraph([ + plain("Joe's email is "), + link('mailto:joe@joe.com', [plain('joe@joe.com')]), + plain(' because it is'), + ]), + ], + ], + [ + "Joe's email is joe@joe.com", + [ + paragraph([ + plain("Joe's email is "), + link('mailto:joe@joe.com', [plain('joe@joe.com')]), + ]), + ], + ], + [ + "Joe's email is joe@joe.com. Try emailing him", + [ + paragraph([ + plain("Joe's email is "), + link('mailto:joe@joe.com', [plain('joe@joe.com')]), + plain('. Try emailing him'), + ]), + ], + ], + [ + "Joe's email is joe.smith@joe.com", + [ + paragraph([ + plain("Joe's email is "), + link('mailto:joe.smith@joe.com', [plain('joe.smith@joe.com')]), + ]), + ], + ], + [ + "Joe's email is JOE@JOE.COM", + [ + paragraph([ + plain("Joe's email is "), + link('mailto:JOE@JOE.COM', [plain('JOE@JOE.COM')]), + ]), + ], + ], + [ + "Joe's email is (joe@joe.com)", + [ + paragraph([ + plain("Joe's email is ("), + link('mailto:joe@joe.com', [plain('joe@joe.com')]), + plain(')'), + ]), + ], + ], + [ + "Joe's email is (joe_roe@joe.com)", + [ + paragraph([ + plain("Joe's email is ("), + link('mailto:joe_roe@joe.com', [plain('joe_roe@joe.com')]), + plain(')'), + ]), + ], + ], + [ + "Joe's email is (joe'roe@joe.com)", + [ + paragraph([ + plain("Joe's email is ("), + link("mailto:joe'roe@joe.com", [plain("joe'roe@joe.com")]), + plain(')'), + ]), + ], + ], + [ + "Joe's email is mañana@mañana.com", + [ + paragraph([ + plain("Joe's email is "), + link('mailto:mañana@mañana.com', [plain('mañana@mañana.com')]), + ]), + ], + ], + [ + "Joe's email is Кириллица@Кириллица.com", + [ + paragraph([ + plain("Joe's email is "), + link('mailto:Кириллица@Кириллица.com', [ + plain('Кириллица@Кириллица.com'), + ]), + ]), + ], + ], + ['Hi there@stuff', [paragraph([plain('Hi there@stuff')])]], + [ + 'My email is busueng.kim@aaa.com', + [ + paragraph([ + plain('My email is '), + link('mailto:busueng.kim@aaa.com', [plain('busueng.kim@aaa.com')]), + ]), + ], + ], + [ + 'My email is mailto:asdf@asdf.com', + [ + paragraph([ + plain('My email is '), + link('mailto:asdf@asdf.com', [plain('asdf@asdf.com')]), + ]), + ], + ], + [ + 'My email is fake@gmail.c', + [paragraph([plain('My email is fake@gmail.c')])], + ], + [ + 'My email is fake@gmail.comf', + [paragraph([plain('My email is fake@gmail.comf')])], + ], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/emoji.test.ts b/packages/message-parser/tests/emoji.test.ts new file mode 100644 index 00000000000..3d64e59a2c3 --- /dev/null +++ b/packages/message-parser/tests/emoji.test.ts @@ -0,0 +1,90 @@ +import { parse } from '../src'; +import { emoji, bigEmoji, paragraph, plain, emojiUnicode } from '../src/utils'; + +test.each([ + [':smile: asd', [paragraph([emoji('smile'), plain(' asd')])]], + ['text:inner:outer', [paragraph([plain('text:inner:outer')])]], + ['10:20:30', [paragraph([plain('10:20:30')])]], + ['10:20:30:', [paragraph([plain('10:20:30:')])]], + ['":smile:"', [paragraph([plain('":smile:"')])]], + ['":smile: "', [paragraph([plain('":smile: "')])]], + ['" :smile: "', [paragraph([plain('" '), emoji('smile'), plain(' "')])]], + [ + `:smile: + :smile: + `, + [bigEmoji([emoji('smile'), emoji('smile')])], + ], + [ + 'asdas :smile: asd', + [paragraph([plain('asdas '), emoji('smile'), plain(' asd')])], + ], + [ + 'normal emojis :smile: :smile: :smile:', + [ + paragraph([ + plain('normal emojis '), + emoji('smile'), + plain(' '), + emoji('smile'), + plain(' '), + emoji('smile'), + ]), + ], + ], + [ + ':smile::smile::smile:', + [bigEmoji([emoji('smile'), emoji('smile'), emoji('smile')])], + ], + [ + ' :smile::smile::smile: ', + [bigEmoji([emoji('smile'), emoji('smile'), emoji('smile')])], + ], + [ + '\n :smile::smile::smile: \n', + [bigEmoji([emoji('smile'), emoji('smile'), emoji('smile')])], + ], + [ + ':smile: :smile: :smile:', + [bigEmoji([emoji('smile'), emoji('smile'), emoji('smile')])], + ], + [':smile::smile:', [bigEmoji([emoji('smile'), emoji('smile')])]], + [':smile:', [bigEmoji([emoji('smile')])]], + ['Hi :+1:', [paragraph([plain('Hi '), emoji('+1')])]], + ['Hi :+1_tone4:', [paragraph([plain('Hi '), emoji('+1_tone4')])]], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); + +// Tests for unicode emojis +test.each([ + ['😀', [bigEmoji([emojiUnicode('😀')])]], + ['😃', [bigEmoji([emojiUnicode('😃')])]], + ['🥵', [bigEmoji([emojiUnicode('🥵')])]], + ['🧿', [bigEmoji([emojiUnicode('🧿')])]], + ['🐶', [bigEmoji([emojiUnicode('🐶')])]], + ['🍏', [bigEmoji([emojiUnicode('🍏')])]], + ['⚽', [bigEmoji([emojiUnicode('⚽')])]], + ['⚽️', [bigEmoji([emojiUnicode('⚽️')])]], + ['👨‍👩‍👧‍👦', [bigEmoji([emojiUnicode('👨‍👩‍👧‍👦')])]], + ['🚗', [bigEmoji([emojiUnicode('🚗')])]], + ['⌚️', [bigEmoji([emojiUnicode('⌚️')])]], + ['❤️', [bigEmoji([emojiUnicode('❤️')])]], + ['🏳️', [bigEmoji([emojiUnicode('🏳️')])]], + ['🧑🏾‍💻', [bigEmoji([emojiUnicode('🧑🏾‍💻')])]], + ['🧑🏾‍💻🧑🏾‍💻', [bigEmoji([emojiUnicode('🧑🏾‍💻'), emojiUnicode('🧑🏾‍💻')])]], + [ + '🧑🏾‍💻🧑🏾‍💻🧑🏾‍💻', + [bigEmoji([emojiUnicode('🧑🏾‍💻'), emojiUnicode('🧑🏾‍💻'), emojiUnicode('🧑🏾‍💻')])], + ], + ['👆🏽', [bigEmoji([emojiUnicode('👆🏽')])]], + ['👆🏽👆🏽', [bigEmoji([emojiUnicode('👆🏽'), emojiUnicode('👆🏽')])]], + [ + '👆🏽👆🏽👆🏽', + [bigEmoji([emojiUnicode('👆🏽'), emojiUnicode('👆🏽'), emojiUnicode('👆🏽')])], + ], + ['👆🏺', [bigEmoji([emojiUnicode('👆'), emojiUnicode('🏺')])]], + ['Hi 👍', [paragraph([plain('Hi '), emojiUnicode('👍')])]], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/emoticons.test.ts b/packages/message-parser/tests/emoticons.test.ts new file mode 100644 index 00000000000..9cf58187e03 --- /dev/null +++ b/packages/message-parser/tests/emoticons.test.ts @@ -0,0 +1,148 @@ +import { parse } from '../src'; +import { bigEmoji, paragraph, plain, emoticon } from '../src/utils'; + +test.each([ + // Should render normal Emojis + [ + `test + :) test`, + [ + paragraph([plain('test')]), + paragraph([ + plain(' '), + emoticon(':)', 'slight_smile'), + plain(' test'), + ]), + ], + ], + [':) asd', [paragraph([emoticon(':)', 'slight_smile'), plain(' asd')])]], + [':) asd', [paragraph([emoticon(':)', 'slight_smile'), plain(' asd')])]], + [ + ' :) asd', + [paragraph([plain(' '), emoticon(':)', 'slight_smile'), plain(' asd')])], + ], + ['Hi :)', [paragraph([plain('Hi '), emoticon(':)', 'slight_smile')])]], + [ + 'asdas :) asd', + [ + paragraph([ + plain('asdas '), + emoticon(':)', 'slight_smile'), + plain(' asd'), + ]), + ], + ], + [ + ':) :) :) :)', + [ + paragraph([ + emoticon(':)', 'slight_smile'), + plain(' '), + emoticon(':)', 'slight_smile'), + plain(' '), + emoticon(':)', 'slight_smile'), + plain(' '), + emoticon(':)', 'slight_smile'), + ]), + ], + ], + + // Should render BigEmojis + [ + `:) + :) + `, + [ + bigEmoji([ + emoticon(':)', 'slight_smile'), + emoticon(':)', 'slight_smile'), + ]), + ], + ], + [ + ':):):)', + [ + bigEmoji([ + emoticon(':)', 'slight_smile'), + emoticon(':)', 'slight_smile'), + emoticon(':)', 'slight_smile'), + ]), + ], + ], + + [ + ' :):):) ', + [ + bigEmoji([ + emoticon(':)', 'slight_smile'), + emoticon(':)', 'slight_smile'), + emoticon(':)', 'slight_smile'), + ]), + ], + ], + + [ + '\n :):):) \n', + [ + bigEmoji([ + emoticon(':)', 'slight_smile'), + emoticon(':)', 'slight_smile'), + emoticon(':)', 'slight_smile'), + ]), + ], + ], + [ + ':) :) :)', + [ + bigEmoji([ + emoticon(':)', 'slight_smile'), + emoticon(':)', 'slight_smile'), + emoticon(':)', 'slight_smile'), + ]), + ], + ], + + [ + ':) :)', + [ + bigEmoji([ + emoticon(':)', 'slight_smile'), + emoticon(':)', 'slight_smile'), + ]), + ], + ], + [':)', [bigEmoji([emoticon(':)', 'slight_smile')])]], + [' :)', [bigEmoji([emoticon(':)', 'slight_smile')])]], + [':) ', [bigEmoji([emoticon(':)', 'slight_smile')])]], + [' :) ', [bigEmoji([emoticon(':)', 'slight_smile')])]], + ['D:', [bigEmoji([emoticon('D:', 'fearful')])]], + ['D: D:', [bigEmoji([emoticon('D:', 'fearful'), emoticon('D:', 'fearful')])]], + [ + ' D: D: D: ', + [ + bigEmoji([ + emoticon('D:', 'fearful'), + emoticon('D:', 'fearful'), + emoticon('D:', 'fearful'), + ]), + ], + ], + ['Hi D:', [paragraph([plain('Hi '), emoticon('D:', 'fearful')])]], + + // Should not render Emojis or BigEmojis if they are not surrounded by spaces + ['normal emojis :):):)', [paragraph([plain('normal emojis :):):)')])]], + [':)10:30', [paragraph([plain(':)10:30')])]], + [':smile::)text', [paragraph([plain(':smile::)text')])]], + ['text:):smile:', [paragraph([plain('text:):smile:')])]], + ['text:):)', [paragraph([plain('text:):)')])]], + [':):):) normal emojis', [paragraph([plain(':):):) normal emojis')])]], + [':):):):)', [paragraph([plain(':):):):)')])]], + ['10:30', [paragraph([plain('10:30')])]], + ['he:)llo', [paragraph([plain('he:)llo')])]], + [':)Hi', [paragraph([plain(':)Hi')])]], + ['Hi:) Hi', [paragraph([plain('Hi:) Hi')])]], + ['Hi:)', [paragraph([plain('Hi:)')])]], + ['@#@#! :)@!@', [paragraph([plain('@#@#! :)@!@')])]], +])('parses %p', (input, output) => { + expect(parse(input, { emoticons: true })).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/emphasis.test.ts b/packages/message-parser/tests/emphasis.test.ts new file mode 100644 index 00000000000..bae05be7d15 --- /dev/null +++ b/packages/message-parser/tests/emphasis.test.ts @@ -0,0 +1,174 @@ +import { parse } from '../src'; +import { + italic, + paragraph, + plain, + strike, + bold, + emoji, + link, + bigEmoji, + emojiUnicode, + mentionChannel, + mentionUser, +} from '../src/utils'; + +test.each([ + ['_:smile:_', [paragraph([italic([emoji('smile')])])]], + ['_:slight_smile:_', [paragraph([italic([emoji('slight_smile')])])]], + [ + '_test :smile: test_', + [paragraph([italic([plain('test '), emoji('smile'), plain(' test')])])], + ], + [ + '_test :slight_smile: test_', + [ + paragraph([ + italic([plain('test '), emoji('slight_smile'), plain(' test')]), + ]), + ], + ], + ['_😀_', [paragraph([italic([emojiUnicode('😀')])])]], + ['_test 😀_', [paragraph([italic([plain('test '), emojiUnicode('😀')])])]], + [ + '_test @guilherme.gazzo test_', + [ + paragraph([ + italic([ + plain('test '), + mentionUser('guilherme.gazzo'), + plain(' test'), + ]), + ]), + ], + ], + [ + '_test #GENERAL test_', + [ + paragraph([ + italic([plain('test '), mentionChannel('GENERAL'), plain(' test')]), + ]), + ], + ], + [ + '_[A brand new Gist](https://gist.github.com/24dddfa97bef58f46ac2ce0f80c58ba4)_', + [ + paragraph([ + italic([ + link('https://gist.github.com/24dddfa97bef58f46ac2ce0f80c58ba4', [ + plain('A brand new Gist'), + ]), + ]), + ]), + ], + ], + ['__italic__', [paragraph([italic([plain('italic')])])]], + ['__italic__non', [paragraph([plain('__italic__non')])]], + ['__test__test__', [paragraph([plain('__test__test__')])]], + ['pre__italic__post', [paragraph([plain('pre__italic__post')])]], + [' pre__italic__post', [paragraph([plain(' pre__italic__post')])]], + [ + ' pre__**~~boldstrikeitalic~~**__post ', + [ + paragraph([ + plain(' pre__'), + bold([strike([plain('boldstrikeitalic')])]), + plain('__post '), + ]), + ], + ], + ['__', [paragraph([plain('__')])]], + ['_ _', [paragraph([plain('_ _')])]], + ['__ _', [paragraph([plain('__ _')])]], + ['__ __', [paragraph([plain('__ __')])]], + ['_ Hello_', [paragraph([italic([plain(' Hello')])])]], + ['_Hello _', [paragraph([italic([plain('Hello ')])])]], + [':custom_emoji_case:', [bigEmoji([emoji('custom_emoji_case')])]], + ['_Hel lo_', [paragraph([italic([plain('Hel lo')])])]], + ['_Hello_', [paragraph([italic([plain('Hello')])])]], + ['__Hello__', [paragraph([italic([plain('Hello')])])]], + ['__Hello_', [paragraph([plain('_'), italic([plain('Hello')])])]], + ['_Hello__', [paragraph([italic([plain('Hello')]), plain('_')])]], + ['_Hello', [paragraph([plain('_Hello')])]], + ['Hello_', [paragraph([plain('Hello_')])]], + ['He_llo', [paragraph([plain('He_llo')])]], + [ + '___Hello___', + [paragraph([plain('_'), italic([plain('Hello')]), plain('_')])], + ], + ['___Hello__', [paragraph([plain('_'), italic([plain('Hello')])])]], + [ + '_Hello_ this is dog', + [paragraph([italic([plain('Hello')]), plain(` this is dog`)])], + ], + [ + 'Rocket cat says _Hello_', + [paragraph([plain(`Rocket cat says `), italic([plain('Hello')])])], + ], + [ + 'He said _Hello_ to her', + [ + paragraph([ + plain(`He said `), + italic([plain('Hello')]), + plain(` to her`), + ]), + ], + ], + [ + '__Hello__ this is dog', + [paragraph([italic([plain('Hello')]), plain(` this is dog`)])], + ], + [ + 'Rocket cat says __Hello__', + [paragraph([plain(`Rocket cat says `), italic([plain('Hello')])])], + ], + [ + 'He said __Hello__ to her', + [ + paragraph([ + plain(`He said `), + italic([plain('Hello')]), + plain(` to her`), + ]), + ], + ], + ['text_hello_text', [paragraph([plain('text_hello_text')])]], + ['_hello_text', [paragraph([plain('_hello_text')])]], + ['text_hello_', [paragraph([plain('text_hello_')])]], + ['_italic@test_', [paragraph([italic([plain('italic@test')])])]], + ['_italic#test_', [paragraph([italic([plain('italic#test')])])]], + ['paragraph@test__', [paragraph([plain('paragraph@test__')])]], + [ + '_ @guilherme_gazzo_ _', + [ + paragraph([ + italic([plain(' '), mentionUser('guilherme_gazzo_'), plain(' ')]), + ]), + ], + ], + [ + '_ @guilherme.gazzo _', + [ + paragraph([ + italic([plain(' '), mentionUser('guilherme.gazzo'), plain(' ')]), + ]), + ], + ], + [ + '**reference link inside [emphasis with more [references](https://rocket.chat)](https://rocket.chat)**', + [ + paragraph([ + bold([ + plain('reference link inside '), + link('https://rocket.chat', [ + plain('emphasis with more [references'), + ]), + plain('](https://rocket.chat)'), + ]), + ]), + ], + ], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/escaped.test.ts b/packages/message-parser/tests/escaped.test.ts new file mode 100644 index 00000000000..ffe297aee29 --- /dev/null +++ b/packages/message-parser/tests/escaped.test.ts @@ -0,0 +1,38 @@ +import { parse } from '../src'; +import { paragraph, plain, bold } from '../src/utils'; + +test.each([ + ['¯\\\\_(ツ)_/¯', [paragraph([plain('¯\\_(ツ)_/¯')])]], + [ + '\\*escaped as*bold*escaped*', + [ + paragraph([ + plain('*escaped as'), + bold([plain('bold')]), + plain('escaped*'), + ]), + ], + ], + ['\\*not bold*', [paragraph([plain('*not bold*')])]], + ['*_~`#.'.split('').join('\\'), [paragraph([plain('*_~`#.')])]], + ['\\*not emphasized*', [paragraph([plain('*not emphasized*')])]], + ['\\
tag plain text', [paragraph([plain('\\
tag plain text')])]], + [ + '\\[it is not a link](/foo)', + [paragraph([plain('\\[it is not a link](/foo)')])], + ], + ['\\`not code`', [paragraph([plain('`not code`')])]], + ['1\\. not a list', [paragraph([plain('1. not a list')])]], + ['\\* not a list', [paragraph([plain('* not a list')])]], + ['\\# not a heading', [paragraph([plain('# not a heading')])]], + [ + '\\[foo]: /url "not a reference"', + [paragraph([plain('\\[foo]: /url "not a reference"')])], + ], + [ + '\\ö not a character entity', + [paragraph([plain('\\ö not a character entity')])], + ], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/heading.test.ts b/packages/message-parser/tests/heading.test.ts new file mode 100644 index 00000000000..84b9463bb63 --- /dev/null +++ b/packages/message-parser/tests/heading.test.ts @@ -0,0 +1,58 @@ +import { parse } from '../src'; +import { + heading, + lineBreak, + mentionChannel, + paragraph, + plain, +} from '../src/utils'; + +test.each([ + ['# h1', [heading([plain('h1')], 1)]], + ['# Hello', [heading([plain('Hello')], 1)]], + ['# Rocket.Cat', [heading([plain('Rocket.Cat')], 1)]], + ['# Hi', [heading([plain('Hi')], 1)]], + ['# Hello this is dog', [heading([plain('Hello this is dog')], 1)]], + ['# Rocket cat says Hello', [heading([plain('Rocket cat says Hello')], 1)]], + ['# He said Hello to her', [heading([plain('He said Hello to her')], 1)]], + ['#Hello', [paragraph([mentionChannel('Hello')])]], + ['#Hello#', [paragraph([mentionChannel('Hello'), plain('#')])]], + ['He#llo', [paragraph([plain('He#llo')])]], + + ['## Hello', [heading([plain('Hello')], 2)]], + ['## Rocket.Cat', [heading([plain('Rocket.Cat')], 2)]], + ['## Hi', [heading([plain('Hi')], 2)]], + ['## Hello this is dog', [heading([plain('Hello this is dog')], 2)]], + ['## Rocket cat says Hello', [heading([plain('Rocket cat says Hello')], 2)]], + ['## He said Hello to her', [heading([plain('He said Hello to her')], 2)]], + ['##Hello', [paragraph([plain('##Hello')])]], + ['##Hello##', [paragraph([plain('##Hello##')])]], + ['He##llo', [paragraph([plain('He##llo')])]], + + ['### Hello', [heading([plain('Hello')], 3)]], + ['### Rocket.Cat', [heading([plain('Rocket.Cat')], 3)]], + ['### Hi', [heading([plain('Hi')], 3)]], + ['### Hello this is dog', [heading([plain('Hello this is dog')], 3)]], + ['### Rocket cat says Hello', [heading([plain('Rocket cat says Hello')], 3)]], + ['### He said Hello to her', [heading([plain('He said Hello to her')], 3)]], + ['###Hello', [paragraph([plain('###Hello')])]], + ['###Hello###', [paragraph([plain('###Hello###')])]], + ['He###llo', [paragraph([plain('He###llo')])]], + + ['#### Hello', [heading([plain('Hello')], 4)]], + ['#### Rocket.Cat', [heading([plain('Rocket.Cat')], 4)]], + ['#### Hi', [heading([plain('Hi')], 4)]], + ['#### Hello this is dog', [heading([plain('Hello this is dog')], 4)]], + [ + '#### Rocket cat says Hello', + [heading([plain('Rocket cat says Hello')], 4)], + ], + ['#### He said Hello to her', [heading([plain('He said Hello to her')], 4)]], + ['####Hello', [paragraph([plain('####Hello')])]], + ['####Hello####', [paragraph([plain('####Hello####')])]], + ['He####llo', [paragraph([plain('He####llo')])]], + ['# Hello\n', [heading([plain('Hello')], 1), lineBreak()]], + ['# # Hello\n', [heading([plain('# Hello')], 1), lineBreak()]], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/image.test.ts b/packages/message-parser/tests/image.test.ts new file mode 100644 index 00000000000..a9e0306bbf2 --- /dev/null +++ b/packages/message-parser/tests/image.test.ts @@ -0,0 +1,19 @@ +import { parse } from '../src'; +import { image, paragraph, plain } from '../src/utils'; + +test.each([ + [ + '![image](https://rocket.chat/assets/img/header/logo.svg)', + [ + paragraph([ + image('https://rocket.chat/assets/img/header/logo.svg', plain('image')), + ]), + ], + ], + [ + '![](https://rocket.chat/assets/img/header/logo.svg)', + [paragraph([image('https://rocket.chat/assets/img/header/logo.svg')])], + ], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/inlineCode.test.ts b/packages/message-parser/tests/inlineCode.test.ts new file mode 100644 index 00000000000..72d86adcff3 --- /dev/null +++ b/packages/message-parser/tests/inlineCode.test.ts @@ -0,0 +1,27 @@ +import { parse } from '../src'; +import { inlineCode, paragraph, plain } from '../src/utils'; + +test.each([ + [ + '`[asd](https://localhost)`', + [paragraph([inlineCode(plain('[asd](https://localhost)'))])], + ], + [`\`code\``, [paragraph([inlineCode(plain('code'))])]], + [ + `File extension (\`.mov\`)`, + [ + paragraph([ + plain('File extension ('), + inlineCode(plain('.mov')), + plain(')'), + ]), + ], + ], + ['`@rocket.chat`', [paragraph([inlineCode(plain('@rocket.chat'))])]], + [ + '`@rocket.chat/message-parser`', + [paragraph([inlineCode(plain('@rocket.chat/message-parser'))])], + ], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/inlineCodeStrike.test.ts b/packages/message-parser/tests/inlineCodeStrike.test.ts new file mode 100644 index 00000000000..cdd3e039cd2 --- /dev/null +++ b/packages/message-parser/tests/inlineCodeStrike.test.ts @@ -0,0 +1,46 @@ +import { parse } from '../src'; +import { + bold, + inlineCode, + italic, + paragraph, + plain, + strike, +} from '../src/utils'; + +test.each([ + [ + '~~`Striking Inline Code`~~', + [paragraph([strike([inlineCode(plain('Striking Inline Code'))])])], + ], + [ + '~~_`Striking Inline Code with Italics`_~~', + [ + paragraph([ + strike([ + italic([inlineCode(plain('Striking Inline Code with Italics'))]), + ]), + ]), + ], + ], + [ + '~~**`Striking Inline Code with Bold`**~~', + [ + paragraph([ + strike([bold([inlineCode(plain('Striking Inline Code with Bold'))])]), + ]), + ], + ], + [ + '~~__*`Striking Inline Code with Bold`*__~~', + [ + paragraph([ + strike([ + italic([bold([inlineCode(plain('Striking Inline Code with Bold'))])]), + ]), + ]), + ], + ], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/katex.test.ts b/packages/message-parser/tests/katex.test.ts new file mode 100644 index 00000000000..2ffb3ec2f06 --- /dev/null +++ b/packages/message-parser/tests/katex.test.ts @@ -0,0 +1,33 @@ +import { parse } from '../src'; +import { inlineKatex, katex, paragraph, plain } from '../src/utils'; + +test.each([ + [ + `\\[ + \\f\\relax{x} = \\int_{-\\infty}^\\infty + \\f\\hat\\xi\\,e^{2 \\pi i \\xi x} + \\,d\\xi + \\]`, + [ + katex(` + \\f\\relax{x} = \\int_{-\\infty}^\\infty + \\f\\hat\\xi\\,e^{2 \\pi i \\xi x} + \\,d\\xi + `), + ], + ], + [ + 'Easy as \\(E = mc^2\\), right?', + [ + paragraph([ + plain('Easy as '), + inlineKatex('E = mc^2'), + plain(', right?'), + ]), + ], + ], +])('parses %p', (input, output) => { + expect(parse(input, { katex: { parenthesisSyntax: true } })).toMatchObject( + output + ); +}); diff --git a/packages/message-parser/tests/lineBreak.test.ts b/packages/message-parser/tests/lineBreak.test.ts new file mode 100644 index 00000000000..e4faf67b17f --- /dev/null +++ b/packages/message-parser/tests/lineBreak.test.ts @@ -0,0 +1,35 @@ +import { parse } from '../src'; +import { lineBreak, paragraph, plain } from '../src/utils'; + +test.each([ + [ + `test + +test2`, + [paragraph([plain('test')]), lineBreak(), paragraph([plain('test2')])], + ], + [ + `test + +test2 +`, + [paragraph([plain('test')]), lineBreak(), paragraph([plain('test2')])], + ], + [ + `test + + + +test2 +`, + [ + paragraph([plain('test')]), + lineBreak(), + lineBreak(), + lineBreak(), + paragraph([plain('test2')]), + ], + ], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/link.test.ts b/packages/message-parser/tests/link.test.ts new file mode 100644 index 00000000000..1e083fde5d7 --- /dev/null +++ b/packages/message-parser/tests/link.test.ts @@ -0,0 +1,589 @@ +import { parse } from '../src'; +import { + link, + paragraph, + plain, + bold, + strike, + italic, + quote, + lineBreak, + unorderedList, + listItem, + orderedList, +} from '../src/utils'; + +test.each([ + [ + '', + [paragraph([link('https://domain.com', [plain('Test')])])], + ], + + [ + ``, + [paragraph([plain('')])], + ], + [ + ` quote here`, + [ + paragraph([plain('', + [ + paragraph([ + link( + 'https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351', + [plain('Test')] + ), + ]), + ], + ], + [ + '[title](https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351)', + [ + paragraph([ + link( + 'https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351', + [plain('title')] + ), + ]), + ], + ], + [ + '[**title**](https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351)', + [ + paragraph([ + link( + 'https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351', + [bold([plain('title')])] + ), + ]), + ], + ], + [ + '[~~title~~](https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351)', + [ + paragraph([ + link( + 'https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351', + [strike([plain('title')])] + ), + ]), + ], + ], + [ + '[__title__](https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351)', + [ + paragraph([ + link( + 'https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351', + [italic([plain('title')])] + ), + ]), + ], + ], + [ + '[__**~~title~~**__](https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351)', + [ + paragraph([ + link( + 'https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351', + [italic([bold([strike([plain('title')])])])] + ), + ]), + ], + ], + [ + '[title](https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351?query=test12-34)', + [ + paragraph([ + link( + 'https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351?query=test12-34', + [plain('title')] + ), + ]), + ], + ], + [ + '[title](https://desk.rocket.chat/support/rocketchat/ShowHomePage.do?query=test12-34#Cases/dv/413244000073043351)', + [ + paragraph([ + link( + 'https://desk.rocket.chat/support/rocketchat/ShowHomePage.do?query=test12-34#Cases/dv/413244000073043351', + [plain('title')] + ), + ]), + ], + ], + [ + '[title](https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351?query=test12-34&query2=abc123)', + [ + paragraph([ + link( + 'https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351?query=test12-34&query2=abc123', + [plain('title')] + ), + ]), + ], + ], + [ + '[title](https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases?query=test12-34&query2=abcd!e/dv/413244000073043351)', + [ + paragraph([ + link( + 'https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases?query=test12-34&query2=abcd!e/dv/413244000073043351', + [plain('title')] + ), + ]), + ], + ], + [ + '[title](https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351?query=test12-34&query2=abcd!~-._%2B+)', + [ + paragraph([ + link( + 'https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351?query=test12-34&query2=abcd!~-._%2B+', + [plain('title')] + ), + ]), + ], + ], + ['google.com', [paragraph([link('//google.com', [plain('google.com')])])]], + [ + 'www.google.com', + [paragraph([link('//www.google.com', [plain('www.google.com')])])], + ], + ['rocket.chat:8080', [paragraph([link('rocket.chat:8080')])]], + ['ShouldNotBeALink', [paragraph([plain('ShouldNotBeALink')])]], + [ + 'http:/ google.com', + [ + paragraph([ + plain('http:/ '), + link('//google.com', [plain('google.com')]), + ]), + ], + ], + [ + '[custom](custom://google.com)', + [paragraph([link('custom://google.com', [plain('custom')])])], + ], + [ + '[thing](https://www.thingiverse.com/thing:5451684)', + [ + paragraph([ + link('https://www.thingiverse.com/thing:5451684', [plain('thing')]), + ]), + ], + ], + [ + 'https://t.me/joinchat/chatexample', + [paragraph([link('https://t.me/joinchat/chatexample')])], + ], + [ + '[telegram invite](https://t.me/joinchat/chatexample)', + [ + paragraph([ + link('https://t.me/joinchat/chatexample', [plain('telegram invite')]), + ]), + ], + ], + [ + '[Github link with hash](https://github.com/RocketChat/Rocket.Chat/pull/26751/files#diff-c87b108ecf1ede549f8ede68eca840fbb330180b927df0b8a0b4df5d06cbd89b)', + [ + paragraph([ + link( + 'https://github.com/RocketChat/Rocket.Chat/pull/26751/files#diff-c87b108ecf1ede549f8ede68eca840fbb330180b927df0b8a0b4df5d06cbd89b', + [plain('Github link with hash')] + ), + ]), + ], + ], + [ + '[Github link with hash](https://github.com/RocketChat/Rocket.Chat/pull/26751/files#diff)', + [ + paragraph([ + link( + 'https://github.com/RocketChat/Rocket.Chat/pull/26751/files#diff', + [plain('Github link with hash')] + ), + ]), + ], + ], + [ + '[Github link without hash](https://github.com/RocketChat/Rocket.Chat/pull/26751/files)', + [ + paragraph([ + link('https://github.com/RocketChat/Rocket.Chat/pull/26751/files', [ + plain('Github link without hash'), + ]), + ]), + ], + ], + [ + '[Link with special chars](https://github.com/RocketChat/Rocket.Chat*[/]^_`{}~)', + [ + paragraph([ + link('https://github.com/RocketChat/Rocket.Chat*[/]^_`{}~', [ + plain('Link with special chars'), + ]), + ]), + ], + ], + [ + '[Google complex Link](https://www.google.com/url?rct=j&sa=t&url=https://ga.de/freizeit/region-erleben/bonn-und-region-tipps-fuers-wochenende-flohmarkt-rheinaue-weltkindertag-stadtfest_aid-53876987&ct=ga&cd=CAIyHDQ0NzEyYWE3MDA1MGNhNTQ6Y29tOmRlOkRFOlI&usg=AOvVaw3ySYrO9lM0iNSnk43gPVwZ)', + [ + paragraph([ + link( + 'https://www.google.com/url?rct=j&sa=t&url=https://ga.de/freizeit/region-erleben/bonn-und-region-tipps-fuers-wochenende-flohmarkt-rheinaue-weltkindertag-stadtfest_aid-53876987&ct=ga&cd=CAIyHDQ0NzEyYWE3MDA1MGNhNTQ6Y29tOmRlOkRFOlI&usg=AOvVaw3ySYrO9lM0iNSnk43gPVwZ', + [plain('Google complex Link')] + ), + ]), + ], + ], + [ + '[Rocket.Chat](https://rocket.chat) Inline Text', + [ + paragraph([ + link('https://rocket.chat', [plain('Rocket.Chat')]), + plain(' Inline Text'), + ]), + ], + ], + [ + 'https://analytics.zoho.com/open-view/123456789 Same Line', + [ + paragraph([ + link('https://analytics.zoho.com/open-view/123456789', [ + plain('https://analytics.zoho.com/open-view/123456789'), + ]), + plain(' Same Line'), + ]), + ], + ], + [ + `[Rocket.Chat](https://rocket.chat) +Text after in a new line after link`, + [ + paragraph([link('https://rocket.chat', [plain('Rocket.Chat')])]), + paragraph([plain('Text after in a new line after link')]), + ], + ], + [ + `https://analytics.zoho.com/open-view/123456789 +Second line`, + [ + paragraph([ + link('https://analytics.zoho.com/open-view/123456789', [ + plain('https://analytics.zoho.com/open-view/123456789'), + ]), + ]), + paragraph([plain('Second line')]), + ], + ], + [ + `[Rocket.Chat](https://rocket.chat) + +Text after line break`, + [ + paragraph([link('https://rocket.chat', [plain('Rocket.Chat')])]), + lineBreak(), + paragraph([plain('Text after line break')]), + ], + ], + [ + ` +[List Header Link](https://rocket.chat) +- First item +- Second item +- Third item +- *Fourth item* +`.trim(), + [ + paragraph([link('https://rocket.chat', [plain('List Header Link')])]), + unorderedList([ + listItem([plain('First item')]), + listItem([plain('Second item')]), + listItem([plain('Third item')]), + listItem([bold([plain('Fourth item')])]), + ]), + ], + ], + [ + `[List Header Link](https://rocket.chat) +7. First item +2. Second item +8. Third item +4. *Fourth item* +15. *Fifteenth item* +`.trim(), + [ + paragraph([link('https://rocket.chat', [plain('List Header Link')])]), + orderedList([ + listItem([plain('First item')], 7), + listItem([plain('Second item')], 2), + listItem([plain('Third item')], 8), + listItem([bold([plain('Fourth item')])], 4), + listItem([bold([plain('Fifteenth item')])], 15), + ]), + ], + ], + [ + '[9gag](https://9gag.com/)', + [paragraph([link('https://9gag.com/', [plain('9gag')])])], + ], + ['[9gag](9gag.com)', [paragraph([link('9gag.com', [plain('9gag')])])]], + ['<9gag.com|9gag>', [paragraph([link('9gag.com', [plain('9gag')])])]], + ['9gag.com', [paragraph([link('//9gag.com', [plain('9gag.com')])])]], + [ + '[notes link](notes://Server/C3257116002CAD60/0/CCAF6BE2824A1F49432588D2001FA73E)', + [ + paragraph([ + link( + 'notes://Server/C3257116002CAD60/0/CCAF6BE2824A1F49432588D2001FA73E', + [plain('notes link')] + ), + ]), + ], + ], + [ + '[File Path](C:/Users/user1/Documents/projects/file.js)', + [ + paragraph([ + link('C:/Users/user1/Documents/projects/file.js', [plain('File Path')]), + ]), + ], + ], + [ + '[Test with **bold** element](https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351)', + [ + paragraph([ + link( + 'https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351', + [plain('Test with '), bold([plain('bold')]), plain(' element')] + ), + ]), + ], + ], + [ + '[Test with *bold* element](https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351)', + [ + paragraph([ + link( + 'https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351', + [plain('Test with '), bold([plain('bold')]), plain(' element')] + ), + ]), + ], + ], + [ + '[Test with _italic_ element](https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351)', + [ + paragraph([ + link( + 'https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351', + [plain('Test with '), italic([plain('italic')]), plain(' element')] + ), + ]), + ], + ], + [ + '[Test with ~strike~ element](https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351)', + [ + paragraph([ + link( + 'https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351', + [plain('Test with '), strike([plain('strike')]), plain(' element')] + ), + ]), + ], + ], + [ + '[Test with __**~~title~~**__ element](https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351)', + [ + paragraph([ + link( + 'https://desk.rocket.chat/support/rocketchat/ShowHomePage.do#Cases/dv/413244000073043351', + [ + plain('Test with '), + italic([bold([strike([plain('title')])])]), + plain(' element'), + ] + ), + ]), + ], + ], + [ + '([Github Issue: #24929](https://github.com/RocketChat/Rocket.Chat/issues/24929))', + [ + paragraph([ + plain('('), + link('https://github.com/RocketChat/Rocket.Chat/issues/24929', [ + plain('Github Issue: #24929'), + ]), + plain(')'), + ]), + ], + ], + [ + 'the [audio_url and video_url for post message attachments](https://developer.rocket.chat/reference/api/rest-api/endpoints/core-endpoints/chat-endpoints/postmessage)', + [ + paragraph([ + plain('the '), + link( + 'https://developer.rocket.chat/reference/api/rest-api/endpoints/core-endpoints/chat-endpoints/postmessage', + [plain('audio_url and video_url for post message attachments')] + ), + ]), + ], + ], + [ + 'the [Jira [Task] parentheses not working](rocket.chat)', + [ + paragraph([ + plain('the '), + link('rocket.chat', [plain('Jira [Task] parentheses not working')]), + ]), + ], + ], + [ + 'the [Jira (Task) parentheses not working](rocket.chat)', + [ + paragraph([ + plain('the '), + link('rocket.chat', [plain('Jira (Task) parentheses not working')]), + ]), + ], + ], + [ + '[Jira [Task] parentheses not working](rocket.chat)', + [ + paragraph([ + link('rocket.chat', [plain('Jira [Task] parentheses not working')]), + ]), + ], + ], + [ + '[Jira (Task) parentheses not working](rocket.chat)', + [ + paragraph([ + link('rocket.chat', [plain('Jira (Task) parentheses not working')]), + ]), + ], + ], + // Should not parse as link + ['77.77%', [paragraph([plain('77.77%')])]], + ['77.77', [paragraph([plain('77.77')])]], + ['https://77.77', [paragraph([plain('https://77.77')])]], + ['test.9gag', [paragraph([plain('test.9gag')])]], + [ + '[here](https://github.com/RocketChat/Rocket.Chat/releases/tag/6.0.0-rc.3)', + [ + paragraph([ + link( + 'https://github.com/RocketChat/Rocket.Chat/releases/tag/6.0.0-rc.3', + [plain('here')] + ), + ]), + ], + ], + [ + '[ ~ [ ~ [ ~ [ ~ [ ~ [ ~ [ ~ [ ~ [ ~ [ ~ [ ~ [ ~ [ ~ [ ~ [test](https://rocket.chat)', + [ + paragraph([ + link('https://rocket.chat', [ + plain(' '), + strike([plain(' [ ')]), + plain(' [ '), + strike([plain(' [ ')]), + plain(' [ '), + strike([plain(' [ ')]), + plain(' [ '), + strike([plain(' [ ')]), + plain(' [ '), + strike([plain(' [ ')]), + plain(' [ '), + strike([plain(' [ ')]), + plain(' [ '), + strike([plain(' [ ')]), + plain(' [test'), + ]), + ]), + ], + ], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/mention.test.ts b/packages/message-parser/tests/mention.test.ts new file mode 100644 index 00000000000..5a86d5587ac --- /dev/null +++ b/packages/message-parser/tests/mention.test.ts @@ -0,0 +1,34 @@ +import { parse } from '../src'; +import { paragraph, plain, mentionUser, mentionChannel } from '../src/utils'; + +test.each([ + ['@guilherme.gazzo', [paragraph([mentionUser('guilherme.gazzo')])]], + [ + '@guilherme.gazzo. ', + [paragraph([mentionUser('guilherme.gazzo.'), plain(' ')])], + ], + ['#GENERAL', [paragraph([mentionChannel('GENERAL')])]], + ['@user:server.com', [paragraph([mentionUser('user:server.com')])]], + [ + '@marcos.defendi:matrix.org', + [paragraph([mentionUser('marcos.defendi:matrix.org')])], + ], + ['@username@example.com', [paragraph([mentionUser('username@example.com')])]], + [ + '@099fnd2ee@example.com', + [paragraph([mentionUser('099fnd2ee@example.com')])], + ], + ['@téstãçâò', [paragraph([mentionUser('téstãçâò')])]], + ['@สมชาย', [paragraph([mentionUser('สมชาย')])]], + ['@李祖阳', [paragraph([mentionUser('李祖阳')])]], + ['@あおい', [paragraph([mentionUser('あおい')])]], + ['@アオイ', [paragraph([mentionUser('アオイ')])]], + ['@Владимир', [paragraph([mentionUser('Владимир')])]], + ['@Кириллица', [paragraph([mentionUser('Кириллица')])]], + [ + 'test @Кириллица test', + [paragraph([plain('test '), mentionUser('Кириллица'), plain(' test')])], + ], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/orderedList.test.ts b/packages/message-parser/tests/orderedList.test.ts new file mode 100644 index 00000000000..2939c4842e4 --- /dev/null +++ b/packages/message-parser/tests/orderedList.test.ts @@ -0,0 +1,25 @@ +import { parse } from '../src'; +import { bold, plain, orderedList, listItem } from '../src/utils'; + +test.each([ + [ + ` +7. First item +2. Second item +8. Third item +4. *Fourth item* +15. *Fifteenth item* +`.trim(), + [ + orderedList([ + listItem([plain('First item')], 7), + listItem([plain('Second item')], 2), + listItem([plain('Third item')], 8), + listItem([bold([plain('Fourth item')])], 4), + listItem([bold([plain('Fifteenth item')])], 15), + ]), + ], + ], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/phoneNumber.test.ts b/packages/message-parser/tests/phoneNumber.test.ts new file mode 100644 index 00000000000..781bae3fcfe --- /dev/null +++ b/packages/message-parser/tests/phoneNumber.test.ts @@ -0,0 +1,63 @@ +import { parse } from '../src'; +import { link, paragraph, plain, bold } from '../src/utils'; + +test.each([ + [ + '+07563546725', + [paragraph([link('tel:07563546725', [plain('+07563546725')])])], + ], + [ + '+075-63546725', + [paragraph([link('tel:07563546725', [plain('+075-63546725')])])], + ], + [ + '+(075)-63546725', + [paragraph([link('tel:07563546725', [plain('+(075)-63546725')])])], + ], + [ + '+(075)63546725', + [paragraph([link('tel:07563546725', [plain('+(075)63546725')])])], + ], + [ + '[here](+(075)63546725)', + [paragraph([link('tel:07563546725', [plain('here')])])], + ], + [ + '[**here**](+(075)63546725)', + [paragraph([link('tel:07563546725', [bold([plain('here')])])])], + ], + [ + '[**here**](+(075)63546725)', + [paragraph([link('tel:07563546725', [bold([plain('here')])])])], + ], + [ + '+(11)99999-9999', + [paragraph([link('tel:11999999999', [plain('+(11)99999-9999')])])], + ], + [ + '5 +51231', + [paragraph([plain('5 '), link('tel:51231', [plain('+51231')])])], + ], + [ + '5 +51231 5', + [ + paragraph([ + plain('5 '), + link('tel:51231', [plain('+51231')]), + plain(' 5'), + ]), + ], + ], + ['+(12)3-45', [paragraph([link('tel:12345', [plain('+(12)3-45')])])]], + ['+1.599123', [paragraph([plain('+1.599123')])]], + ['1+1=2', [paragraph([plain('1+1=2')])]], + ['1+1=2 text', [paragraph([plain('1+1=2 text')])]], + ['+1000,00', [paragraph([plain('+1000,00')])]], + ['+ 1199999999', [paragraph([plain('+ 1199999999')])]], + ['+1234', [paragraph([plain('+1234')])]], + ['+(12)3-4', [paragraph([plain('+(12)3-4')])]], + ['+123-4', [paragraph([plain('+123-4')])]], + ['5+51231', [paragraph([plain('5+51231')])]], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/strikethrough.test.ts b/packages/message-parser/tests/strikethrough.test.ts new file mode 100644 index 00000000000..36b3439168f --- /dev/null +++ b/packages/message-parser/tests/strikethrough.test.ts @@ -0,0 +1,122 @@ +import { parse } from '../src'; +import { + emoji, + emojiUnicode, + link, + mentionChannel, + mentionUser, + paragraph, + plain, + strike, +} from '../src/utils'; + +test.each([ + ['~:smile:~', [paragraph([strike([emoji('smile')])])]], + [ + '~test :smile: test~', + [paragraph([strike([plain('test '), emoji('smile'), plain(' test')])])], + ], + ['~😀~', [paragraph([strike([emojiUnicode('😀')])])]], + ['~test 😀~', [paragraph([strike([plain('test '), emojiUnicode('😀')])])]], + [ + '~@guilherme.gazzo~', + [paragraph([strike([mentionUser('guilherme.gazzo')])])], + ], + ['~#GENERAL~', [paragraph([strike([mentionChannel('GENERAL')])])]], + [ + '~test @guilherme.gazzo~', + [paragraph([strike([plain('test '), mentionUser('guilherme.gazzo')])])], + ], + [ + '~test #GENERAL~', + [paragraph([strike([plain('test '), mentionChannel('GENERAL')])])], + ], + [ + '~~[A brand new Gist](https://gist.github.com/24dddfa97bef58f46ac2ce0f80c58ba4)~~', + [ + paragraph([ + strike([ + link('https://gist.github.com/24dddfa97bef58f46ac2ce0f80c58ba4', [ + plain('A brand new Gist'), + ]), + ]), + ]), + ], + ], + ['~~strike~~', [paragraph([strike([plain('strike')])])]], + [ + 'pre~~strike~~post', + [paragraph([plain('pre'), strike([plain('strike')]), plain('post')])], + ], + [ + ' pre~~strike~~post ', + [paragraph([plain(' pre'), strike([plain('strike')]), plain('post ')])], + ], + ['~~', [paragraph([plain('~~')])]], + ['~ ~', [paragraph([plain('~ ~')])]], + ['~~ ~', [paragraph([plain('~~ ~')])]], + ['~~ ~~', [paragraph([plain('~~ ~~')])]], + ['~ Hello~', [paragraph([strike([plain(' Hello')])])]], + ['~Hello ~', [paragraph([strike([plain('Hello ')])])]], + [ + ':custom~emoji~case:', + [paragraph([plain(`:custom`), strike([plain('emoji')]), plain(`case:`)])], + ], + [ + 'text~hello~text', + [paragraph([plain(`text`), strike([plain('hello')]), plain(`text`)])], + ], + ['~hello~text', [paragraph([strike([plain('hello')]), plain(`text`)])]], + ['text~hello~', [paragraph([plain(`text`), strike([plain('hello')])])]], + ['~Hel lo~', [paragraph([strike([plain('Hel lo')])])]], + ['~Hello~', [paragraph([strike([plain('Hello')])])]], + ['~~Hello~~', [paragraph([strike([plain('Hello')])])]], + ['~~Hello~', [paragraph([plain(`~`), strike([plain('Hello')])])]], + ['~Hello~~', [paragraph([strike([plain('Hello')]), plain(`~`)])]], + ['~Hello', [paragraph([plain('~Hello')])]], + ['Hello~', [paragraph([plain('Hello~')])]], + ['He~llo', [paragraph([plain('He~llo')])]], + [ + '~~~Hello~~~', + [paragraph([plain(`~`), strike([plain('Hello')]), plain(`~`)])], + ], + ['~~~Hello~~', [paragraph([plain(`~`), strike([plain('Hello')])])]], + [ + '~Hello~ this is dog', + [paragraph([strike([plain('Hello')]), plain(` this is dog`)])], + ], + [ + 'Rocket cat says ~Hello~', + [paragraph([plain(`Rocket cat says `), strike([plain('Hello')])])], + ], + [ + 'He said ~Hello~ to her', + [ + paragraph([ + plain(`He said `), + strike([plain('Hello')]), + plain(` to her`), + ]), + ], + ], + [ + '~~Hello~~ this is dog', + [paragraph([strike([plain('Hello')]), plain(` this is dog`)])], + ], + [ + 'Rocket cat says ~~Hello~~', + [paragraph([plain(`Rocket cat says `), strike([plain('Hello')])])], + ], + [ + 'He said ~~Hello~~ to her', + [ + paragraph([ + plain(`He said `), + strike([plain('Hello')]), + plain(` to her`), + ]), + ], + ], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/strongEmphasis.test.ts b/packages/message-parser/tests/strongEmphasis.test.ts new file mode 100644 index 00000000000..8384030aa11 --- /dev/null +++ b/packages/message-parser/tests/strongEmphasis.test.ts @@ -0,0 +1,156 @@ +import { parse } from '../src'; +import { + bold, + link, + paragraph, + plain, + italic, + strike, + emoji, + emojiUnicode, + mentionChannel, + mentionUser, +} from '../src/utils'; + +test.each([ + ['*:smile:*', [paragraph([bold([emoji('smile')])])]], + [ + '*test :smile: test*', + [paragraph([bold([plain('test '), emoji('smile'), plain(' test')])])], + ], + ['*😀*', [paragraph([bold([emojiUnicode('😀')])])]], + ['*test 😀*', [paragraph([bold([plain('test '), emojiUnicode('😀')])])]], + ['*@guilherme.gazzo*', [paragraph([bold([mentionUser('guilherme.gazzo')])])]], + ['*#GENERAL*', [paragraph([bold([mentionChannel('GENERAL')])])]], + [ + '*test @guilherme.gazzo*', + [paragraph([bold([plain('test '), mentionUser('guilherme.gazzo')])])], + ], + [ + '*test #GENERAL*', + [paragraph([bold([plain('test '), mentionChannel('GENERAL')])])], + ], + [ + '*[A brand new Gist](https://gist.github.com/24dddfa97bef58f46ac2ce0f80c58ba4)*', + [ + paragraph([ + bold([ + link('https://gist.github.com/24dddfa97bef58f46ac2ce0f80c58ba4', [ + plain('A brand new Gist'), + ]), + ]), + ]), + ], + ], + ['**bold**', [paragraph([bold([plain('bold')])])]], + ['** bold**', [paragraph([bold([plain(' bold')])])]], + ['** bold **', [paragraph([bold([plain(' bold ')])])]], + ['** bo ld **', [paragraph([bold([plain(' bo ld ')])])]], + ['pre**bold**', [paragraph([plain('pre'), bold([plain('bold')])])]], + ['**bold**pos', [paragraph([bold([plain('bold')]), plain('pos')])]], + [ + '**bold****bold**', + [paragraph([bold([plain('bold')]), bold([plain('bold')])])], + ], + [ + '**bold** **bold**', + [paragraph([bold([plain('bold')]), plain(' '), bold([plain('bold')])])], + ], + [ + '**bold** __italic__', + [paragraph([bold([plain('bold')]), plain(' '), italic([plain('italic')])])], + ], + ['**__italicbold__**', [paragraph([bold([italic([plain('italicbold')])])])]], + [ + 'plain **__italicbold__**', + [paragraph([plain('plain '), bold([italic([plain('italicbold')])])])], + ], + [ + 'plain **__~~strikeitalicbold~~__**', + [ + paragraph([ + plain('plain '), + bold([italic([strike([plain('strikeitalicbold')])])]), + ]), + ], + ], + ['**', [paragraph([plain('**')])]], + ['* *', [paragraph([plain('* *')])]], + ['** *', [paragraph([plain('** *')])]], + ['** **', [paragraph([plain('** **')])]], + ['** **', [paragraph([plain('** **')])]], + ['* Hello*', [paragraph([bold([plain(' Hello')])])]], + ['*Hello *', [paragraph([bold([plain('Hello ')])])]], + [ + ':custom*emoji*case:', + [paragraph([plain(':custom'), bold([plain('emoji')]), plain('case:')])], + ], + [ + 'text*hello*text', + [paragraph([plain('text'), bold([plain('hello')]), plain('text')])], + ], + ['*hello*text', [paragraph([bold([plain('hello')]), plain('text')])]], + ['text*hello*', [paragraph([plain('text'), bold([plain('hello')])])]], + ['*Hel lo*', [paragraph([bold([plain('Hel lo')])])]], + ['*Hello*', [paragraph([bold([plain('Hello')])])]], + ['**Hello*', [paragraph([plain('*'), bold([plain('Hello')])])]], + ['*Hello**', [paragraph([bold([plain('Hello')]), plain('*')])]], + ['*Hello', [paragraph([plain('*Hello')])]], + ['Hello*', [paragraph([plain('Hello*')])]], + ['He*llo', [paragraph([plain('He*llo')])]], + [ + '***Hello***', + [paragraph([plain('*'), bold([plain('Hello')]), plain('*')])], + ], + ['***Hello**', [paragraph([plain('*'), bold([plain('Hello')])])]], + [ + '*Hello* this is dog', + [paragraph([bold([plain('Hello')]), plain(' this is dog')])], + ], + [ + 'Rocket cat says *Hello*', + [paragraph([plain('Rocket cat says '), bold([plain('Hello')])])], + ], + [ + 'He said *Hello* to her', + [paragraph([plain('He said '), bold([plain('Hello')]), plain(' to her')])], + ], + [ + '**Hello** this is dog', + [paragraph([bold([plain('Hello')]), plain(' this is dog')])], + ], + [ + 'Rocket cat says **Hello**', + [paragraph([plain('Rocket cat says '), bold([plain('Hello')])])], + ], + [ + 'He said **Hello** to her', + [paragraph([plain('He said '), bold([plain('Hello')]), plain(' to her')])], + ], + [ + 'He was a**nn**oyed', + [paragraph([plain('He was a'), bold([plain('nn')]), plain('oyed')])], + ], + [ + 'There are two o in f*oo*tball', + [ + paragraph([ + plain('There are two o in f'), + bold([plain('oo')]), + plain('tball'), + ]), + ], + ], + ['*(teste*', [paragraph([bold([plain('(teste')])])]], + ['*(teste)*', [paragraph([bold([plain('(teste)')])])]], + [ + '*__~bolditalicstrike~_*', + [ + paragraph([ + bold([plain('_'), italic([strike([plain('bolditalicstrike')])])]), + ]), + ], + ], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/tasks.test.ts b/packages/message-parser/tests/tasks.test.ts new file mode 100644 index 00000000000..ef6752bbfc0 --- /dev/null +++ b/packages/message-parser/tests/tasks.test.ts @@ -0,0 +1,49 @@ +import { parse } from '../src'; +import { + plain, + tasks, + task, + mentionUser, + mentionChannel, + link, + bold, +} from '../src/utils'; + +test.each([ + [ + ` +- [ ] this is an incomplete item +- [x] this is a complete item +- [x] @mentions, #refs, [links](http://localhost), **formatting** +- [x] list syntax required (any unordered or ordered list supported) +`.trim(), + [ + tasks([ + task([plain('this is an incomplete item')], false), + task([plain('this is a complete item')], true), + task( + [ + mentionUser('mentions'), + plain(', '), + mentionChannel('refs'), + plain(', '), + link('http://localhost', [plain('links')]), + plain(', '), + bold([plain('formatting')]), + ], + true + ), + task( + [ + plain( + 'list syntax required (any unordered or ordered list supported)' + ), + ], + true + ), + ]), + ], + ], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/unorderedList.test.ts b/packages/message-parser/tests/unorderedList.test.ts new file mode 100644 index 00000000000..771e0689271 --- /dev/null +++ b/packages/message-parser/tests/unorderedList.test.ts @@ -0,0 +1,78 @@ +import { parse } from '../src'; +import { unorderedList, plain, listItem, bold } from '../src/utils'; + +test.each([ + [ + ` +- First item +- Second item +- Third item +- *Fourth item* +`.trim(), + [ + unorderedList([ + listItem([plain('First item')]), + listItem([plain('Second item')]), + listItem([plain('Third item')]), + listItem([bold([plain('Fourth item')])]), + ]), + ], + ], + [ + ` +* First item +* Second item +* Third item +* *Fourth item* +`.trim(), + [ + unorderedList([ + listItem([plain('First item')]), + listItem([plain('Second item')]), + listItem([plain('Third item')]), + listItem([bold([plain('Fourth item')])]), + ]), + ], + ], + + [ + ` +- First item +* Second item +* Third item +* *Fourth item* +`.trim(), + [ + unorderedList([listItem([plain('First item')])]), + unorderedList([ + listItem([plain('Second item')]), + listItem([plain('Third item')]), + listItem([bold([plain('Fourth item')])]), + ]), + ], + ], + // [ + // ` + // * First item + // * Second item + // * Third item + // * Indented item + // * Indented item + // * Fourth item + // `.trim(), + // [paragraph([])], + // ], + // [ + // ` + // - First item + // - Second item + // - Third item + // - Indented item + // - Indented item + // - Fourth item + // `.trim(), + // [paragraph([])], + // ], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); diff --git a/packages/message-parser/tests/url.test.ts b/packages/message-parser/tests/url.test.ts new file mode 100644 index 00000000000..0c7c03d110d --- /dev/null +++ b/packages/message-parser/tests/url.test.ts @@ -0,0 +1,362 @@ +import { parse } from '../src'; +import { lineBreak, autoLink, paragraph, plain, link } from '../src/utils'; + +test.each([ + [ + 'https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%A3o_de_corrida#:~:text=Uma%20condi%C3%A7%C3%A3o%20de%20corrida%20%C3%A9,sequ%C3%AAncia%20ou%20sincronia%20doutros%20eventos', + [ + paragraph([ + autoLink( + 'https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%A3o_de_corrida#:~:text=Uma%20condi%C3%A7%C3%A3o%20de%20corrida%20%C3%A9,sequ%C3%AAncia%20ou%20sincronia%20doutros%20eventos' + ), + ]), + ], + ], + [ + 'https://pt.wikipedia.org/', + [paragraph([autoLink('https://pt.wikipedia.org/')])], + ], + [ + 'https://pt.wikipedia.org/with-hyphen', + [paragraph([autoLink('https://pt.wikipedia.org/with-hyphen')])], + ], + [ + 'https://pt.wikipedia.org/with_underscore', + [paragraph([autoLink('https://pt.wikipedia.org/with_underscore')])], + ], + [ + 'https://www.npmjs.com/package/@rocket.chat/message-parser', + [ + paragraph([ + autoLink('https://www.npmjs.com/package/@rocket.chat/message-parser'), + ]), + ], + ], + ['http:/rocket.chat/teste', [paragraph([plain('http:/rocket.chat/teste')])]], + ['https:/rocket.chat/', [paragraph([plain('https:/rocket.chat/')])]], + ['https://test', [paragraph([plain('https://test')])]], + [ + 'httpsss://rocket.chat/test', + [paragraph([autoLink('httpsss://rocket.chat/test')])], + ], + [ + 'https://rocket.chat:3000/test', + [paragraph([autoLink('https://rocket.chat:3000/test')])], + ], + [ + 'https://rocket.chat/test?search', + [paragraph([autoLink('https://rocket.chat/test?search')])], + ], + [ + 'https://rocket.chat/test?search=test', + [paragraph([autoLink('https://rocket.chat/test?search=test')])], + ], + ['https://rocket.chat', [paragraph([autoLink('https://rocket.chat')])]], + ['https://localhost', [paragraph([autoLink('https://localhost')])]], + ['https://localhost:3000', [paragraph([autoLink('https://localhost:3000')])]], + [ + 'https://localhost:3000#fragment', + [paragraph([autoLink('https://localhost:3000#fragment')])], + ], + [ + 'https://localhost:3000#', + [paragraph([autoLink('https://localhost:3000#')])], + ], + [ + 'https://localhost:3000?', + [paragraph([autoLink('https://localhost:3000?')])], + ], + [ + 'https://localhost:3000/', + [paragraph([autoLink('https://localhost:3000/')])], + ], + [ + 'ftp://user:pass@localhost:21/etc/hosts', + [paragraph([autoLink('ftp://user:pass@localhost:21/etc/hosts')])], + ], + ['ssh://test@example.com', [paragraph([autoLink('ssh://test@example.com')])]], + [ + 'custom://test@example.com', + [paragraph([autoLink('custom://test@example.com')])], + ], + ['ftp://example.com', [paragraph([autoLink('ftp://example.com')])]], + [ + 'https://www.thingiverse.com/thing:5451684', + [paragraph([autoLink('https://www.thingiverse.com/thing:5451684')])], + ], + ['http://📙.la/❤️', [paragraph([autoLink('http://📙.la/❤️')])]], + [ + 'https://developer.rocket.chat/reference/api/rest-api#production-security-concerns look at this', + [ + paragraph([ + autoLink( + 'https://developer.rocket.chat/reference/api/rest-api#production-security-concerns' + ), + plain(' look at this'), + ]), + ], + ], + [ + 'https://developer.rocket.chat/reference/api/rest-api look at this', + [ + paragraph([ + autoLink('https://developer.rocket.chat/reference/api/rest-api'), + plain(' look at this'), + ]), + ], + ], + + [ + 'https://developer.rocket.chat/reference/api/rest-api#fragment?query=query look at this', + [ + paragraph([ + autoLink( + 'https://developer.rocket.chat/reference/api/rest-api#fragment?query=query' + ), + plain(' look at this'), + ]), + ], + ], + [ + 'https://developer.rocket.chat look at this', + [ + paragraph([ + autoLink('https://developer.rocket.chat'), + plain(' look at this'), + ]), + ], + ], + [ + 'https://developer.rocket.chat?query=query look at this', + [ + paragraph([ + autoLink('https://developer.rocket.chat?query=query'), + plain(' look at this'), + ]), + ], + ], + [ + 'https://developer.rocket.chat?query=query\nline break', + [ + paragraph([autoLink('https://developer.rocket.chat?query=query')]), + paragraph([plain('line break')]), + ], + ], + [ + 'https://developer.rocket.chat?query=query\n\nline break', + [ + paragraph([autoLink('https://developer.rocket.chat?query=query')]), + lineBreak(), + paragraph([plain('line break')]), + ], + ], + [ + 'https://developer.rocket.chat?query=query_with_underscore look at this', + [ + paragraph([ + autoLink('https://developer.rocket.chat?query=query_with_underscore'), + plain(' look at this'), + ]), + ], + ], + [ + 'https://developer.rocket.chat/path_with_underscore look at this', + [ + paragraph([ + autoLink('https://developer.rocket.chat/path_with_underscore'), + plain(' look at this'), + ]), + ], + ], + [ + 'https://developer.rocket.chat#fragment_with_underscore look at this', + [ + paragraph([ + autoLink('https://developer.rocket.chat#fragment_with_underscore'), + plain(' look at this'), + ]), + ], + ], + [ + 'https://developer.rocket.chat followed by text', + [ + paragraph([ + autoLink('https://developer.rocket.chat'), + plain(' followed by text'), + ]), + ], + ], + [ + 'two urls https://developer.rocket.chat , https://rocket.chat', + [ + paragraph([ + plain('two urls '), + autoLink('https://developer.rocket.chat'), + plain(' , '), + autoLink('https://rocket.chat'), + ]), + ], + ], + [ + 'https://1developer.rocket.chat', + [paragraph([autoLink('https://1developer.rocket.chat')])], + ], + [ + 'https://en.m.wikipedia.org/wiki/Main_Page', + [paragraph([autoLink('https://en.m.wikipedia.org/wiki/Main_Page')])], + ], + ['test.1test.com', [paragraph([autoLink('test.1test.com')])]], + [ + 'http://test.e-xample.com', + [paragraph([autoLink('http://test.e-xample.com')])], + ], + ['www.n-tv.de', [paragraph([autoLink('www.n-tv.de')])]], + [ + 'www.n-tv.de/test, test', + [paragraph([autoLink('www.n-tv.de/test'), plain(', test')])], + ], + [ + 'www.n-tv.de/, test', + [paragraph([autoLink('www.n-tv.de/'), plain(', test')])], + ], + [ + 'www.n-tv.de, test', + [paragraph([autoLink('www.n-tv.de'), plain(', test')])], + ], + [ + 'https://www.n-tv.de, test', + [paragraph([autoLink('https://www.n-tv.de'), plain(', test')])], + ], + ['http://te_st.com', [paragraph([autoLink('http://te_st.com')])]], + ['www.te_st.com', [paragraph([autoLink('www.te_st.com')])]], + [ + '[google_search](http://google.com)', + [paragraph([link('http://google.com', [plain('google_search')])])], + ], + [ + 'app...https://rocket.chat https://rocket.chat', + [ + paragraph([ + plain('app...https://rocket.chat '), + autoLink('https://rocket.chat'), + ]), + ], + ], + [ + 'Hey check it out the best communication platform https://rocket.chat! There is not discussion about it.', + [ + paragraph([ + plain('Hey check it out the best communication platform '), + autoLink('https://rocket.chat'), + plain('! There is not discussion about it.'), + ]), + ], + ], + [ + 'This is a normal phrase.This in another phrase.', + [paragraph([plain('This is a normal phrase.This in another phrase.')])], + ], + [ + 'https://github.com/RocketChat/Rocket.Chat/releases/tag/6.0.0-rc.3', + [ + paragraph([ + autoLink( + 'https://github.com/RocketChat/Rocket.Chat/releases/tag/6.0.0-rc.3' + ), + ]), + ], + ], + [ + 'https://www.rocket.chat/(W(601))/Main?ScreenId=GI000027', + [ + paragraph([ + autoLink('https://www.rocket.chat/(W(601))/Main?ScreenId=GI000027'), + ]), + ], + ], + [ + 'https://rocketchat.atlassian.net/browse/OC-718?filter=10078&jql=%22Defect%20from%5BVersion%20Picker%20(multiple%20versions)%5D%22%20%3D%206.0.0%20AND%20%22Defect%20from%5BVersion%20Picker%20(multiple%20versions)%5D%22%20%3D%206.0.0%20AND%20created%20%3E%3D%20-48h%20ORDER%20BY%20cf%5B10070%5D%20ASC%2C%20status%20ASC%2C%20created%20DESC', + [ + paragraph([ + link( + 'https://rocketchat.atlassian.net/browse/OC-718?filter=10078&jql=%22Defect%20from%5BVersion%20Picker%20(multiple%20versions)%5D%22%20%3D%206.0.0%20AND%20%22Defect%20from%5BVersion%20Picker%20(multiple%20versions)%5D%22%20%3D%206.0.0%20AND%20created%20%3E%3D%20-48h%20ORDER%20BY%20cf%5B10070%5D%20ASC%2C%20status%20ASC%2C%20created%20DESC' + ), + ]), + ], + ], +])('parses %p', (input, output) => { + expect(parse(input)).toMatchObject(output); +}); + +describe('autoLink with custom hosts settings comming from Rocket.Chat', () => { + test.each([ + [ + 'http://gitlab.local', + [paragraph([autoLink('http://gitlab.local', ['local'])])], + ], + ['gitlab.local', [paragraph([autoLink('gitlab.local', ['local'])])]], + [ + 'internaltool.intranet', + [paragraph([autoLink('internaltool.intranet', ['local', 'intranet'])])], + ], + ])('parses %p', (input, output) => { + expect( + parse(input, { customDomains: ['local', 'intranet'] }) + ).toMatchObject(output); + }); +}); + +describe('autoLink WITHOUT custom hosts settings comming from Rocket.Chat', () => { + test.each([ + [ + 'https://internaltool.testt', + [paragraph([plain('https://internaltool.testt')])], + ], + ])('parses %p', (input, output) => { + expect(parse(input, { customDomains: ['local'] })).toMatchObject(output); + }); +}); + +describe('autoLink helper function', () => { + it('should preserve the original protocol if the protocol is http or https', () => { + expect(autoLink('https://rocket.chat/test')).toMatchObject( + link('https://rocket.chat/test') + ); + + expect(autoLink('http://rocket.chat/test')).toMatchObject( + link('http://rocket.chat/test') + ); + }); + + it('should preserve the original protocol even if for custom protocols', () => { + expect(autoLink('custom://rocket.chat/test')).toMatchObject( + link('custom://rocket.chat/test') + ); + }); + + it('should return // as the protocol if // is the protocol specified', () => { + expect(autoLink('//rocket.chat/test')).toMatchObject( + link('//rocket.chat/test') + ); + }); + + it("should return an url concatenated '//' if the url has no protocol", () => { + expect(autoLink('rocket.chat/test')).toMatchObject( + link('//rocket.chat/test', [plain('rocket.chat/test')]) + ); + }); + + it("should return an url concatenated '//' if the url has no protocol and has sub-domain", () => { + expect(autoLink('spark-public.s3.amazonaws.com')).toMatchObject( + link('//spark-public.s3.amazonaws.com', [ + plain('spark-public.s3.amazonaws.com'), + ]) + ); + }); + + it("should return an plain text url due to invalid TLD that's validate with the external library TLDTS", () => { + expect(autoLink('rocket.chattt/url_path')).toMatchObject( + plain('rocket.chattt/url_path') + ); + }); +}); diff --git a/packages/message-parser/tsconfig-bundle.json b/packages/message-parser/tsconfig-bundle.json new file mode 100644 index 00000000000..77caa2b8f6c --- /dev/null +++ b/packages/message-parser/tsconfig-bundle.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": ["./src"] +} diff --git a/packages/message-parser/tsconfig.json b/packages/message-parser/tsconfig.json new file mode 100644 index 00000000000..3e59aeae898 --- /dev/null +++ b/packages/message-parser/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "rootDir": ".", + "target": "es5", + "module": "ESNext", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "./dist", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "moduleResolution": "node", + "noImplicitThis": true, + "alwaysStrict": true + } +} diff --git a/packages/message-parser/typedoc.json b/packages/message-parser/typedoc.json new file mode 100644 index 00000000000..af0fd90acfc --- /dev/null +++ b/packages/message-parser/typedoc.json @@ -0,0 +1,4 @@ +{ + "entryPoints": ["src/index.ts"], + "out": "../../static/message-parser" +} diff --git a/packages/message-parser/webpack.config.js b/packages/message-parser/webpack.config.js new file mode 100644 index 00000000000..1bae39ea98a --- /dev/null +++ b/packages/message-parser/webpack.config.js @@ -0,0 +1,86 @@ +const path = require('path'); + +const config = (outputDeclarations = false) => ({ + entry: './src/index.ts', + module: { + rules: [ + { + test: /\.ts$/, + use: { + loader: 'ts-loader', + options: { + configFile: path.resolve(__dirname, './tsconfig-bundle.json'), + ...(!outputDeclarations && { + compilerOptions: { + declaration: false, + declarationMap: undefined, + }, + }), + }, + }, + include: [path.resolve(__dirname, './src')], + exclude: [path.resolve(__dirname, './tests')], + }, + { + test: /\.pegjs$/, + use: ['babel-loader', '@rocket.chat/peggy-loader'], + }, + ], + }, + resolve: { + extensions: ['.ts', '.js', '.pegjs'], + }, +}); + +module.exports = [ + { + ...config(), + mode: 'development', + output: { + path: path.resolve(__dirname, './dist'), + filename: 'messageParser.development.js', + library: { + type: 'commonjs2', + }, + }, + }, + { + ...config(), + mode: 'production', + output: { + path: path.resolve(__dirname, './dist'), + filename: 'messageParser.production.js', + library: { + type: 'commonjs2', + }, + }, + }, + { + ...config(), + mode: 'production', + experiments: { + outputModule: true, + }, + output: { + path: path.resolve(__dirname, './dist'), + filename: 'messageParser.mjs', + library: { + type: 'module', + }, + }, + }, + { + ...config(true), + mode: 'production', + output: { + path: path.resolve(__dirname, './dist'), + filename: 'messageParser.umd.js', + library: { + type: 'umd', + name: 'RocketChatMessageParser', + umdNamedDefine: true, + }, + globalObject: 'this', + }, + }, +]; diff --git a/packages/peggy-loader/.eslintignore b/packages/peggy-loader/.eslintignore new file mode 100644 index 00000000000..8225baa4a77 --- /dev/null +++ b/packages/peggy-loader/.eslintignore @@ -0,0 +1,2 @@ +/node_modules +/dist diff --git a/packages/peggy-loader/.eslintrc.json b/packages/peggy-loader/.eslintrc.json new file mode 100644 index 00000000000..6a4609388dd --- /dev/null +++ b/packages/peggy-loader/.eslintrc.json @@ -0,0 +1,8 @@ +{ + "extends": ["@rocket.chat/eslint-config"], + "plugins": ["jest"], + "env": { + "jest/globals": true + }, + "ignorePatterns": ["**/dist"] +} diff --git a/packages/peggy-loader/.gitignore b/packages/peggy-loader/.gitignore new file mode 100644 index 00000000000..9b1c8b133c9 --- /dev/null +++ b/packages/peggy-loader/.gitignore @@ -0,0 +1 @@ +/dist diff --git a/packages/peggy-loader/.prettierignore b/packages/peggy-loader/.prettierignore new file mode 100644 index 00000000000..8225baa4a77 --- /dev/null +++ b/packages/peggy-loader/.prettierignore @@ -0,0 +1,2 @@ +/node_modules +/dist diff --git a/packages/peggy-loader/.prettierrc.js b/packages/peggy-loader/.prettierrc.js new file mode 100644 index 00000000000..b57f474edb9 --- /dev/null +++ b/packages/peggy-loader/.prettierrc.js @@ -0,0 +1 @@ +module.exports = require('@rocket.chat/prettier-config/fuselage'); diff --git a/packages/peggy-loader/CHANGELOG.md b/packages/peggy-loader/CHANGELOG.md new file mode 100644 index 00000000000..0c1ace99d7d --- /dev/null +++ b/packages/peggy-loader/CHANGELOG.md @@ -0,0 +1,43 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [0.31.0](https://github.com/RocketChat/fuselage/compare/v0.30.1...v0.31.0) (2021-12-28) + +### Features + +- New hooks for element size tracking ([#413](https://github.com/RocketChat/fuselage/issues/413)) ([8ca682c](https://github.com/RocketChat/fuselage/commit/8ca682c636d2e4813f7d346cb881513382be63cf)) + +# [0.30.0](https://github.com/RocketChat/fuselage/compare/v0.29.0...v0.30.0) (2021-10-06) + +### Bug Fixes + +- **jest:** Adjust jest and ts-jest dependencies ([#547](https://github.com/RocketChat/fuselage/issues/547)) ([91a4fa1](https://github.com/RocketChat/fuselage/commit/91a4fa1365394001afe1bd46480bda3bafed5505)) + +# [0.29.0](https://github.com/RocketChat/fuselage/compare/v0.28.0...v0.29.0) (2021-08-31) + +**Note:** Version bump only for package @rocket.chat/peggy-loader + +# [0.28.0](https://github.com/RocketChat/fuselage/compare/v0.27.0...v0.28.0) (2021-07-30) + +### Features + +- **onboarding-ui:** Administrator information form and Organization information form ([#489](https://github.com/RocketChat/fuselage/issues/489)) ([b289f68](https://github.com/RocketChat/fuselage/commit/b289f68676954b91c792d8d97680314178bf2c60)) +- styled API; monorepo grooming ([#482](https://github.com/RocketChat/fuselage/issues/482)) ([1b6b70c](https://github.com/RocketChat/fuselage/commit/1b6b70cf67ec16927b1566adc2350295a8927223)) + +# [0.27.0](https://github.com/RocketChat/fuselage/compare/v0.26.0...v0.27.0) (2021-06-28) + +**Note:** Version bump only for package @rocket.chat/peggy-loader + +# [0.26.0](https://github.com/RocketChat/fuselage/compare/v0.25.0...v0.26.0) (2021-05-28) + +### Bug Fixes + +- Peggy loader options ([#459](https://github.com/RocketChat/fuselage/issues/459)) ([fc91054](https://github.com/RocketChat/fuselage/commit/fc91054abeb340718596b0c8f4ce8e14c87574af)) + +# [0.25.0](https://github.com/RocketChat/fuselage/compare/v0.24.0...v0.25.0) (2021-05-19) + +### Features + +- Peggy loader ([#450](https://github.com/RocketChat/fuselage/issues/450)) ([0496cad](https://github.com/RocketChat/fuselage/commit/0496cad457d76f8a4d6a217209e4a55e315e8365)) diff --git a/packages/peggy-loader/README.md b/packages/peggy-loader/README.md new file mode 100644 index 00000000000..4d2cf606c2d --- /dev/null +++ b/packages/peggy-loader/README.md @@ -0,0 +1,89 @@ + + +

+ + Rocket.Chat + +

+ +# `@rocket.chat/peggy-loader` + +> Peggy loader for webpack + +--- + +[![npm@latest](https://img.shields.io/npm/v/@rocket.chat/peggy-loader/latest?style=flat-square)](https://www.npmjs.com/package/@rocket.chat/peggy-loader/v/latest) [![npm@next](https://img.shields.io/npm/v/@rocket.chat/peggy-loader/next?style=flat-square)](https://www.npmjs.com/package/@rocket.chat/peggy-loader/v/next) ![npm downloads](https://img.shields.io/npm/dw/@rocket.chat/peggy-loader?style=flat-square) ![License: MIT](https://img.shields.io/npm/l/@rocket.chat/peggy-loader?style=flat-square) + +![deps](https://img.shields.io/librariesio/release/npm/@rocket.chat/peggy-loader?style=flat-square) ![npm bundle size](https://img.shields.io/bundlephobia/min/@rocket.chat/peggy-loader?style=flat-square) + + + +## Install + + + +Firstly, install the peer dependencies (prerequisites): + +```sh +npm i peggy webpack + +# or, if you are using yarn: + +yarn add peggy webpack +``` + +Add `@rocket.chat/peggy-loader` as a dependency: + +```sh +npm i @rocket.chat/peggy-loader + +# or, if you are using yarn: + +yarn add @rocket.chat/peggy-loader +``` + + + +## Contributing + + + +Contributions, issues, and feature requests are welcome!
+Feel free to check the [issues](https://github.com/RocketChat/fuselage/issues). + + + +### Building + +As this package dependends on others in this monorepo, before anything run the following at the root directory: + + + +```sh +yarn build +``` + + + +### Linting + +To ensure the source is matching our coding style, we perform [linting](). +Before commiting, check if your code fits our style by running: + + + +```sh +yarn lint +``` + + + +Some linter warnings and errors can be automatically fixed: + + + +```sh +yarn lint-and-fix +``` + + diff --git a/packages/peggy-loader/jest.config.js b/packages/peggy-loader/jest.config.js new file mode 100644 index 00000000000..21526c604f6 --- /dev/null +++ b/packages/peggy-loader/jest.config.js @@ -0,0 +1,5 @@ +module.exports = { + preset: 'ts-jest', + errorOnDeprecated: true, + testMatch: ['/src/**/*.spec.[jt]s?(x)'], +}; diff --git a/packages/peggy-loader/package.json b/packages/peggy-loader/package.json new file mode 100644 index 00000000000..eaa775d7c99 --- /dev/null +++ b/packages/peggy-loader/package.json @@ -0,0 +1,57 @@ +{ + "name": "@rocket.chat/peggy-loader", + "version": "0.31.25", + "description": "Peggy loader for webpack", + "keywords": [ + "peggy", + "loader", + "webpack" + ], + "author": { + "name": "Rocket.Chat", + "url": "https://rocket.chat/" + }, + "homepage": "https://github.com/RocketChat/fuselage#readme", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/RocketChat/fuselage.git", + "directory": "packages/peggy-loader" + }, + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", + "files": [ + "/dist" + ], + "scripts": { + "build": "run-s .:build:clean .:build:esm .:build:cjs", + ".:build:clean": "rimraf dist", + ".:build:esm": "tsc -p tsconfig.json", + ".:build:cjs": "tsc -p tsconfig-cjs.json", + "lint": "eslint src" + }, + "bugs": { + "url": "https://github.com/RocketChat/fuselage/issues" + }, + "peerDependencies": { + "peggy": "*", + "webpack": "*" + }, + "devDependencies": { + "@rocket.chat/eslint-config": "workspace:~", + "@rocket.chat/prettier-config": "~0.31.25", + "@types/node": "~14.18.42", + "eslint": "~8.45.0", + "npm-run-all": "^4.1.5", + "peggy": "3.0.2", + "prettier": "~2.8.7", + "rimraf": "^3.0.2", + "ts-jest": "~29.1.0", + "typescript": "~5.0.4", + "webpack": "~5.78.0" + } +} diff --git a/packages/peggy-loader/src/index.ts b/packages/peggy-loader/src/index.ts new file mode 100644 index 00000000000..4d805d2be14 --- /dev/null +++ b/packages/peggy-loader/src/index.ts @@ -0,0 +1,39 @@ +import type { + BuildOptionsBase, + OutputFormatAmdCommonjsEs, + OutputFormatBare, + OutputFormatGlobals, + OutputFormatUmd, + SourceOptionsBase, +} from 'peggy'; +import peggy from 'peggy'; +import type { LoaderContext } from 'webpack'; + +type Options = + | BuildOptionsBase & + ( + | Omit< + OutputFormatAmdCommonjsEs<'source'>, + keyof SourceOptionsBase<'source'> + > + | Omit, keyof SourceOptionsBase<'source'>> + | Omit, keyof SourceOptionsBase<'source'>> + | Omit, keyof SourceOptionsBase<'source'>> + ); + +function peggyLoader( + this: LoaderContext, + grammarContent: string +): string { + const options: Options = { + format: 'commonjs', + ...this.getOptions(), + }; + + return peggy.generate(grammarContent, { + output: 'source', + ...options, + }); +} + +export default peggyLoader; diff --git a/packages/peggy-loader/tsconfig-cjs.json b/packages/peggy-loader/tsconfig-cjs.json new file mode 100644 index 00000000000..44b902831e4 --- /dev/null +++ b/packages/peggy-loader/tsconfig-cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "commonjs", + "outDir": "./dist/cjs" + } +} diff --git a/packages/peggy-loader/tsconfig.json b/packages/peggy-loader/tsconfig.json new file mode 100644 index 00000000000..9d2804b0261 --- /dev/null +++ b/packages/peggy-loader/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "ESNext", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "./dist/esm", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "moduleResolution": "node", + "resolveJsonModule": true + } +} diff --git a/packages/rest-typings/package.json b/packages/rest-typings/package.json index 86c41231d61..34a2a79086a 100644 --- a/packages/rest-typings/package.json +++ b/packages/rest-typings/package.json @@ -27,7 +27,7 @@ "dependencies": { "@rocket.chat/apps-engine": "1.41.0", "@rocket.chat/core-typings": "workspace:^", - "@rocket.chat/message-parser": "~0.31.28", + "@rocket.chat/message-parser": "workspace:^", "@rocket.chat/ui-kit": "workspace:~", "ajv": "^8.11.0", "ajv-formats": "^2.1.1" diff --git a/packages/uikit-playground/vite.config.ts b/packages/uikit-playground/vite.config.ts index 97c59e3c022..a18e01b590e 100644 --- a/packages/uikit-playground/vite.config.ts +++ b/packages/uikit-playground/vite.config.ts @@ -7,11 +7,11 @@ export default defineConfig(() => ({ esbuild: {}, plugins: [react()], optimizeDeps: { - include: ['@rocket.chat/ui-contexts'], + include: ['@rocket.chat/ui-contexts', '@rocket.chat/message-parser'], }, build: { commonjsOptions: { - include: [/ui-contexts/, /node_modules/], + include: [/ui-contexts/, /message-parser/, /node_modules/], }, }, })); diff --git a/yarn.lock b/yarn.lock index a82a88ee415..066187e54b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -975,17 +975,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.5.5, @babel/code-frame@npm:^7.8.3": - version: 7.22.13 - resolution: "@babel/code-frame@npm:7.22.13" - dependencies: - "@babel/highlight": ^7.22.13 - chalk: ^2.4.2 - checksum: 22e342c8077c8b77eeb11f554ecca2ba14153f707b85294fcf6070b6f6150aae88a7b7436dd88d8c9289970585f3fe5b9b941c5aa3aa26a6d5a8ef3f292da058 - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.21.4, @babel/code-frame@npm:^7.23.5": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.21.4, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.23.5, @babel/code-frame@npm:^7.5.5, @babel/code-frame@npm:^7.8.3": version: 7.23.5 resolution: "@babel/code-frame@npm:7.23.5" dependencies: @@ -995,20 +985,13 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.21.5": +"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.21.5, @babel/compat-data@npm:^7.22.20, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": version: 7.23.5 resolution: "@babel/compat-data@npm:7.23.5" checksum: 06ce244cda5763295a0ea924728c09bae57d35713b675175227278896946f922a63edf803c322f855a3878323d48d0255a2a3023409d2a123483c8a69ebb4744 languageName: node linkType: hard -"@babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.22.20, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": - version: 7.22.20 - resolution: "@babel/compat-data@npm:7.22.20" - checksum: efedd1d18878c10fde95e4d82b1236a9aba41395ef798cbb651f58dbf5632dbff475736c507b8d13d4c8f44809d41c0eb2ef0d694283af9ba5dd8339b6dab451 - languageName: node - linkType: hard - "@babel/core@npm:7.12.9": version: 7.12.9 resolution: "@babel/core@npm:7.12.9" @@ -1079,6 +1062,20 @@ __metadata: languageName: node linkType: hard +"@babel/eslint-parser@npm:~7.21.3": + version: 7.21.8 + resolution: "@babel/eslint-parser@npm:7.21.8" + dependencies: + "@nicolo-ribaudo/eslint-scope-5-internals": 5.1.1-v1 + eslint-visitor-keys: ^2.1.0 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ">=7.11.0" + eslint: ^7.5.0 || ^8.0.0 + checksum: 6d870f53808682b9d7e3c2a69a832b2095963103bb2d686daee3fcf1df49a0b3dfe58e95c773cab8cf59f2657ec432dfd5e47b9f1835c264eb84d2ec5ab2ad35 + languageName: node + linkType: hard + "@babel/eslint-parser@npm:~7.23.3": version: 7.23.3 resolution: "@babel/eslint-parser@npm:7.23.3" @@ -1093,19 +1090,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.12.11, @babel/generator@npm:^7.12.5, @babel/generator@npm:^7.22.15, @babel/generator@npm:^7.23.0, @babel/generator@npm:^7.7.2": - version: 7.23.0 - resolution: "@babel/generator@npm:7.23.0" - dependencies: - "@babel/types": ^7.23.0 - "@jridgewell/gen-mapping": ^0.3.2 - "@jridgewell/trace-mapping": ^0.3.17 - jsesc: ^2.5.1 - checksum: 8efe24adad34300f1f8ea2add420b28171a646edc70f2a1b3e1683842f23b8b7ffa7e35ef0119294e1901f45bfea5b3dc70abe1f10a1917ccdfb41bed69be5f1 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.21.5, @babel/generator@npm:^7.23.5": +"@babel/generator@npm:^7.12.11, @babel/generator@npm:^7.12.5, @babel/generator@npm:^7.21.5, @babel/generator@npm:^7.22.15, @babel/generator@npm:^7.23.5, @babel/generator@npm:^7.7.2": version: 7.23.5 resolution: "@babel/generator@npm:7.23.5" dependencies: @@ -1135,16 +1120,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.5" - dependencies: - "@babel/types": ^7.22.5 - checksum: d753acac62399fc6dd354cf1b9441bde0c331c2fe792a4c14904c5e5eafc3cac79478f6aa038e8a51c1148b0af6710a2e619855e4b5d54497ac972eaffed5884 - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.13.0, @babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.21.5, @babel/helper-compilation-targets@npm:^7.22.15, @babel/helper-compilation-targets@npm:^7.22.5, @babel/helper-compilation-targets@npm:^7.22.6": +"@babel/helper-compilation-targets@npm:^7.13.0, @babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.21.5, @babel/helper-compilation-targets@npm:^7.22.15, @babel/helper-compilation-targets@npm:^7.22.6": version: 7.22.15 resolution: "@babel/helper-compilation-targets@npm:7.22.15" dependencies: @@ -1176,20 +1152,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.5" - dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - regexpu-core: ^5.3.1 - semver: ^6.3.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 94932145beeb1f91856be25fea8de30b4b81b63fbc7c5a207ed97a5ddc34cd1e9b04041ed28bd24ec09cdcfbb62e8d66f820e4fe864672afe0aa2f357c784e11 - languageName: node - linkType: hard - -"@babel/helper-create-regexp-features-plugin@npm:^7.22.15": +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.15, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": version: 7.22.15 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.15" dependencies: @@ -1286,7 +1249,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.21.4, @babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.22.5": +"@babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.21.4, @babel/helper-module-imports@npm:^7.22.15": version: 7.22.15 resolution: "@babel/helper-module-imports@npm:7.22.15" dependencies: @@ -1295,22 +1258,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.22.20, @babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/helper-module-transforms@npm:7.23.0" - dependencies: - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-module-imports": ^7.22.15 - "@babel/helper-simple-access": ^7.22.5 - "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/helper-validator-identifier": ^7.22.20 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 6e2afffb058cf3f8ce92f5116f710dda4341c81cfcd872f9a0197ea594f7ce0ab3cb940b0590af2fe99e60d2e5448bfba6bca8156ed70a2ed4be2adc8586c891 - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.21.5, @babel/helper-module-transforms@npm:^7.23.3": +"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.21.5, @babel/helper-module-transforms@npm:^7.22.20, @babel/helper-module-transforms@npm:^7.23.3": version: 7.23.3 resolution: "@babel/helper-module-transforms@npm:7.23.3" dependencies: @@ -1348,7 +1296,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.18.9, @babel/helper-remap-async-to-generator@npm:^7.22.20": +"@babel/helper-remap-async-to-generator@npm:^7.18.9, @babel/helper-remap-async-to-generator@npm:^7.22.20, @babel/helper-remap-async-to-generator@npm:^7.22.9": version: 7.22.20 resolution: "@babel/helper-remap-async-to-generator@npm:7.22.20" dependencies: @@ -1361,20 +1309,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.22.5, @babel/helper-remap-async-to-generator@npm:^7.22.9": - version: 7.22.9 - resolution: "@babel/helper-remap-async-to-generator@npm:7.22.9" - dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-environment-visitor": ^7.22.5 - "@babel/helper-wrap-function": ^7.22.9 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 05538079447829b13512157491cc77f9cf1ea7e1680e15cff0682c3ed9ee162de0c4862ece20a6d6b2df28177a1520bcfe45993fbeccf2747a81795a7c3f6290 - languageName: node - linkType: hard - -"@babel/helper-replace-supers@npm:^7.16.7, @babel/helper-replace-supers@npm:^7.22.20, @babel/helper-replace-supers@npm:^7.22.5, @babel/helper-replace-supers@npm:^7.22.9": +"@babel/helper-replace-supers@npm:^7.16.7, @babel/helper-replace-supers@npm:^7.22.20, @babel/helper-replace-supers@npm:^7.22.9": version: 7.22.20 resolution: "@babel/helper-replace-supers@npm:7.22.20" dependencies: @@ -1414,13 +1349,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-string-parser@npm:7.22.5" - checksum: 836851ca5ec813077bbb303acc992d75a360267aa3b5de7134d220411c852a6f17de7c0d0b8c8dcc0f567f67874c00f4528672b2a4f1bc978a3ada64c8c78467 - languageName: node - linkType: hard - "@babel/helper-string-parser@npm:^7.23.4": version: 7.23.4 resolution: "@babel/helper-string-parser@npm:7.23.4" @@ -1435,14 +1363,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.16.7, @babel/helper-validator-option@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/helper-validator-option@npm:7.22.15" - checksum: 68da52b1e10002a543161494c4bc0f4d0398c8fdf361d5f7f4272e95c45d5b32d974896d44f6a0ea7378c9204988879d73613ca683e13bd1304e46d25ff67a8d - languageName: node - linkType: hard - -"@babel/helper-validator-option@npm:^7.21.0": +"@babel/helper-validator-option@npm:^7.16.7, @babel/helper-validator-option@npm:^7.21.0, @babel/helper-validator-option@npm:^7.22.15": version: 7.23.5 resolution: "@babel/helper-validator-option@npm:7.23.5" checksum: 537cde2330a8aede223552510e8a13e9c1c8798afee3757995a7d4acae564124fe2bf7e7c3d90d62d3657434a74340a274b3b3b1c6f17e9a2be1f48af29cb09e @@ -1460,29 +1381,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-wrap-function@npm:^7.22.9": - version: 7.22.10 - resolution: "@babel/helper-wrap-function@npm:7.22.10" - dependencies: - "@babel/helper-function-name": ^7.22.5 - "@babel/template": ^7.22.5 - "@babel/types": ^7.22.10 - checksum: 854bd85fc1de1d4c633f04aa1f5b6b022fbc013b47d012b6a11a7a9125a1f4a2a4f13a3e0d7a7056fe7eda8a9ecd1ea3daf8af685685a2d1b16578768cfdd28f - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.12.5, @babel/helpers@npm:^7.22.15": - version: 7.23.2 - resolution: "@babel/helpers@npm:7.23.2" - dependencies: - "@babel/template": ^7.22.15 - "@babel/traverse": ^7.23.2 - "@babel/types": ^7.23.0 - checksum: aaf4828df75ec460eaa70e5c9f66e6dadc28dae3728ddb7f6c13187dbf38030e142194b83d81aa8a31bbc35a5529a5d7d3f3cf59d5d0b595f5dd7f9d8f1ced8e - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.21.5": +"@babel/helpers@npm:^7.12.5, @babel/helpers@npm:^7.21.5, @babel/helpers@npm:^7.22.15": version: 7.23.5 resolution: "@babel/helpers@npm:7.23.5" dependencies: @@ -1493,18 +1392,7 @@ __metadata: languageName: node linkType: hard -"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.22.13": - version: 7.22.20 - resolution: "@babel/highlight@npm:7.22.20" - dependencies: - "@babel/helper-validator-identifier": ^7.22.20 - chalk: ^2.4.2 - js-tokens: ^4.0.0 - checksum: 84bd034dca309a5e680083cd827a766780ca63cef37308404f17653d32366ea76262bd2364b2d38776232f2d01b649f26721417d507e8b4b6da3e4e739f6d134 - languageName: node - linkType: hard - -"@babel/highlight@npm:^7.23.4": +"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.23.4": version: 7.23.4 resolution: "@babel/highlight@npm:7.23.4" dependencies: @@ -1515,16 +1403,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.11, @babel/parser@npm:^7.12.7, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.22.16, @babel/parser@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/parser@npm:7.23.0" - bin: - parser: ./bin/babel-parser.js - checksum: 453fdf8b9e2c2b7d7b02139e0ce003d1af21947bbc03eb350fb248ee335c9b85e4ab41697ddbdd97079698de825a265e45a0846bb2ed47a2c7c1df833f42a354 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.21.8, @babel/parser@npm:^7.23.5": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.11, @babel/parser@npm:^7.12.7, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.8, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.22.16, @babel/parser@npm:^7.23.5": version: 7.23.5 resolution: "@babel/parser@npm:7.23.5" bin: @@ -1533,7 +1412,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6": +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6, @babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.22.15": version: 7.23.3 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.23.3" dependencies: @@ -1544,18 +1423,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.22.15" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 8910ca21a7ec7c06f7b247d4b86c97c5aa15ef321518f44f6f490c5912fdf82c605aaa02b90892e375d82ccbedeadfdeadd922c1b836c9dd4c596871bf654753 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.20.7": +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.20.7, @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.15": version: 7.23.3 resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.23.3" dependencies: @@ -1568,19 +1436,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.22.15" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 - "@babel/plugin-transform-optional-chaining": ^7.22.15 - peerDependencies: - "@babel/core": ^7.13.0 - checksum: fbefedc0da014c37f1a50a8094ce7dbbf2181ae93243f23d6ecba2499b5b20196c2124d6a4dfe3e9e0125798e80593103e456352a4beb4e5c6f7c75efb80fdac - languageName: node - linkType: hard - "@babel/plugin-proposal-async-generator-functions@npm:^7.20.7": version: 7.20.7 resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.20.7" @@ -1793,21 +1648,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-private-property-in-object@npm:^7.12.1": - version: 7.21.0 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-create-class-features-plugin": ^7.21.0 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/plugin-syntax-private-property-in-object": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: add881a6a836635c41d2710551fdf777e2c07c0b691bf2baacc5d658dd64107479df1038680d6e67c468bfc6f36fb8920025d6bac2a1df0a81b867537d40ae78 - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-property-in-object@npm:^7.21.0": +"@babel/plugin-proposal-private-property-in-object@npm:^7.12.1, @babel/plugin-proposal-private-property-in-object@npm:^7.21.0": version: 7.21.11 resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.11" dependencies: @@ -1932,7 +1773,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-assertions@npm:^7.20.0": +"@babel/plugin-syntax-import-assertions@npm:^7.20.0, @babel/plugin-syntax-import-assertions@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-syntax-import-assertions@npm:7.23.3" dependencies: @@ -1943,17 +1784,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-assertions@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.22.5" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2b8b5572db04a7bef1e6cd20debf447e4eef7cb012616f5eceb8fa3e23ce469b8f76ee74fd6d1e158ba17a8f58b0aec579d092fb67c5a30e83ccfbc5754916c1 - languageName: node - linkType: hard - "@babel/plugin-syntax-import-attributes@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-syntax-import-attributes@npm:7.22.5" @@ -2120,18 +1950,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.12.1, @babel/plugin-transform-arrow-functions@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.22.5" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 35abb6c57062802c7ce8bd96b2ef2883e3124370c688bbd67609f7d2453802fb73944df8808f893b6c67de978eb2bcf87bbfe325e46d6f39b5fcb09ece11d01a - languageName: node - linkType: hard - -"@babel/plugin-transform-arrow-functions@npm:^7.21.5": +"@babel/plugin-transform-arrow-functions@npm:^7.12.1, @babel/plugin-transform-arrow-functions@npm:^7.21.5, @babel/plugin-transform-arrow-functions@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-arrow-functions@npm:7.23.3" dependencies: @@ -2156,7 +1975,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.20.7": +"@babel/plugin-transform-async-to-generator@npm:^7.20.7, @babel/plugin-transform-async-to-generator@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-async-to-generator@npm:7.23.3" dependencies: @@ -2169,20 +1988,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.22.5" - dependencies: - "@babel/helper-module-imports": ^7.22.5 - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-remap-async-to-generator": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b95f23f99dcb379a9f0a1c2a3bbea3f8dc0e1b16dc1ac8b484fe378370169290a7a63d520959a9ba1232837cf74a80e23f6facbe14fd42a3cda6d3c2d7168e62 - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoped-functions@npm:^7.18.6": +"@babel/plugin-transform-block-scoped-functions@npm:^7.18.6, @babel/plugin-transform-block-scoped-functions@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.23.3" dependencies: @@ -2193,29 +1999,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.22.5" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 416b1341858e8ca4e524dee66044735956ced5f478b2c3b9bc11ec2285b0c25d7dbb96d79887169eb938084c95d0a89338c8b2fe70d473bd9dc92e5d9db1732c - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoping@npm:^7.12.12, @babel/plugin-transform-block-scoping@npm:^7.22.15": - version: 7.23.0 - resolution: "@babel/plugin-transform-block-scoping@npm:7.23.0" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 0cfe925cc3b5a3ad407e2253fab3ceeaa117a4b291c9cb245578880872999bca91bd83ffa0128ae9ca356330702e1ef1dcb26804f28d2cef678239caf629f73e - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoping@npm:^7.21.0": +"@babel/plugin-transform-block-scoping@npm:^7.12.12, @babel/plugin-transform-block-scoping@npm:^7.21.0, @babel/plugin-transform-block-scoping@npm:^7.22.15": version: 7.23.4 resolution: "@babel/plugin-transform-block-scoping@npm:7.23.4" dependencies: @@ -2251,26 +2035,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.12.1, @babel/plugin-transform-classes@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/plugin-transform-classes@npm:7.22.15" - dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-compilation-targets": ^7.22.15 - "@babel/helper-environment-visitor": ^7.22.5 - "@babel/helper-function-name": ^7.22.5 - "@babel/helper-optimise-call-expression": ^7.22.5 - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-replace-supers": ^7.22.9 - "@babel/helper-split-export-declaration": ^7.22.6 - globals: ^11.1.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d3f4d0c107dd8a3557ea3575cc777fab27efa92958b41e4a9822f7499725c1f554beae58855de16ddec0a7b694e45f59a26cea8fbde4275563f72f09c6e039a0 - languageName: node - linkType: hard - -"@babel/plugin-transform-classes@npm:^7.21.0": +"@babel/plugin-transform-classes@npm:^7.12.1, @babel/plugin-transform-classes@npm:^7.21.0, @babel/plugin-transform-classes@npm:^7.22.15": version: 7.23.5 resolution: "@babel/plugin-transform-classes@npm:7.23.5" dependencies: @@ -2289,7 +2054,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.21.5": +"@babel/plugin-transform-computed-properties@npm:^7.21.5, @babel/plugin-transform-computed-properties@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-computed-properties@npm:7.23.3" dependencies: @@ -2301,30 +2066,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-computed-properties@npm:7.22.5" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/template": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: c2a77a0f94ec71efbc569109ec14ea2aa925b333289272ced8b33c6108bdbb02caf01830ffc7e49486b62dec51911924d13f3a76f1149f40daace1898009e131 - languageName: node - linkType: hard - -"@babel/plugin-transform-destructuring@npm:^7.12.1, @babel/plugin-transform-destructuring@npm:^7.22.15": - version: 7.23.0 - resolution: "@babel/plugin-transform-destructuring@npm:7.23.0" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: cd6dd454ccc2766be551e4f8a04b1acc2aa539fa19e5c7501c56cc2f8cc921dd41a7ffb78455b4c4b2f954fcab8ca4561ba7c9c7bd5af9f19465243603d18cc3 - languageName: node - linkType: hard - -"@babel/plugin-transform-destructuring@npm:^7.21.3": +"@babel/plugin-transform-destructuring@npm:^7.12.1, @babel/plugin-transform-destructuring@npm:^7.21.3, @babel/plugin-transform-destructuring@npm:^7.22.15": version: 7.23.3 resolution: "@babel/plugin-transform-destructuring@npm:7.23.3" dependencies: @@ -2335,7 +2077,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.18.6, @babel/plugin-transform-dotall-regex@npm:^7.4.4": +"@babel/plugin-transform-dotall-regex@npm:^7.18.6, @babel/plugin-transform-dotall-regex@npm:^7.22.5, @babel/plugin-transform-dotall-regex@npm:^7.4.4": version: 7.23.3 resolution: "@babel/plugin-transform-dotall-regex@npm:7.23.3" dependencies: @@ -2347,19 +2089,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.22.5" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.22.5 - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 409b658d11e3082c8f69e9cdef2d96e4d6d11256f005772425fb230cc48fd05945edbfbcb709dab293a1a2f01f9c8a5bb7b4131e632b23264039d9f95864b453 - languageName: node - linkType: hard - -"@babel/plugin-transform-duplicate-keys@npm:^7.18.9": +"@babel/plugin-transform-duplicate-keys@npm:^7.18.9, @babel/plugin-transform-duplicate-keys@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-duplicate-keys@npm:7.23.3" dependencies: @@ -2370,17 +2100,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.22.5" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bb1280fbabaab6fab2ede585df34900712698210a3bd413f4df5bae6d8c24be36b496c92722ae676a7a67d060a4624f4d6c23b923485f906bfba8773c69f55b4 - languageName: node - linkType: hard - "@babel/plugin-transform-dynamic-import@npm:^7.22.11": version: 7.22.11 resolution: "@babel/plugin-transform-dynamic-import@npm:7.22.11" @@ -2393,7 +2112,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.18.6": +"@babel/plugin-transform-exponentiation-operator@npm:^7.18.6, @babel/plugin-transform-exponentiation-operator@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.23.3" dependencies: @@ -2405,18 +2124,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.22.5" - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor": ^7.22.5 - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f2d660c1b1d51ad5fec1cd5ad426a52187204068c4158f8c4aa977b31535c61b66898d532603eef21c15756827be8277f724c869b888d560f26d7fe848bb5eae - languageName: node - linkType: hard - "@babel/plugin-transform-export-namespace-from@npm:^7.22.11": version: 7.22.11 resolution: "@babel/plugin-transform-export-namespace-from@npm:7.22.11" @@ -2441,18 +2148,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.12.1, @babel/plugin-transform-for-of@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/plugin-transform-for-of@npm:7.22.15" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f395ae7bce31e14961460f56cf751b5d6e37dd27d7df5b1f4e49fec1c11b6f9cf71991c7ffbe6549878591e87df0d66af798cf26edfa4bfa6b4c3dba1fb2f73a - languageName: node - linkType: hard - -"@babel/plugin-transform-for-of@npm:^7.21.5": +"@babel/plugin-transform-for-of@npm:^7.12.1, @babel/plugin-transform-for-of@npm:^7.21.5, @babel/plugin-transform-for-of@npm:^7.22.15": version: 7.23.3 resolution: "@babel/plugin-transform-for-of@npm:7.23.3" dependencies: @@ -2463,7 +2159,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.18.9": +"@babel/plugin-transform-function-name@npm:^7.18.9, @babel/plugin-transform-function-name@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-function-name@npm:7.23.3" dependencies: @@ -2476,19 +2172,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-function-name@npm:7.22.5" - dependencies: - "@babel/helper-compilation-targets": ^7.22.5 - "@babel/helper-function-name": ^7.22.5 - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: cff3b876357999cb8ae30e439c3ec6b0491a53b0aa6f722920a4675a6dd5b53af97a833051df4b34791fe5b3dd326ccf769d5c8e45b322aa50ee11a660b17845 - languageName: node - linkType: hard - "@babel/plugin-transform-json-strings@npm:^7.22.11": version: 7.22.11 resolution: "@babel/plugin-transform-json-strings@npm:7.22.11" @@ -2501,7 +2184,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.18.9": +"@babel/plugin-transform-literals@npm:^7.18.9, @babel/plugin-transform-literals@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-literals@npm:7.23.3" dependencies: @@ -2512,17 +2195,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-literals@npm:7.22.5" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ec37cc2ffb32667af935ab32fe28f00920ec8a1eb999aa6dc6602f2bebd8ba205a558aeedcdccdebf334381d5c57106c61f52332045730393e73410892a9735b - languageName: node - linkType: hard - "@babel/plugin-transform-logical-assignment-operators@npm:^7.22.11": version: 7.22.11 resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.22.11" @@ -2535,7 +2207,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.18.6": +"@babel/plugin-transform-member-expression-literals@npm:^7.18.6, @babel/plugin-transform-member-expression-literals@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-member-expression-literals@npm:7.23.3" dependencies: @@ -2546,18 +2218,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.22.5" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ec4b0e07915ddd4fda0142fd104ee61015c208608a84cfa13643a95d18760b1dc1ceb6c6e0548898b8c49e5959a994e46367260176dbabc4467f729b21868504 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-amd@npm:^7.20.11": +"@babel/plugin-transform-modules-amd@npm:^7.20.11, @babel/plugin-transform-modules-amd@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-modules-amd@npm:7.23.3" dependencies: @@ -2569,19 +2230,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-modules-amd@npm:7.22.5" - dependencies: - "@babel/helper-module-transforms": ^7.22.5 - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7da4c4ebbbcf7d182abb59b2046b22d86eee340caf8a22a39ef6a727da2d8acfec1f714fcdcd5054110b280e4934f735e80a6848d192b6834c5d4459a014f04d - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-commonjs@npm:^7.21.5": +"@babel/plugin-transform-modules-commonjs@npm:^7.21.5, @babel/plugin-transform-modules-commonjs@npm:^7.22.15, @babel/plugin-transform-modules-commonjs@npm:^7.23.0": version: 7.23.3 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.3" dependencies: @@ -2594,20 +2243,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.22.15, @babel/plugin-transform-modules-commonjs@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.0" - dependencies: - "@babel/helper-module-transforms": ^7.23.0 - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-simple-access": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7fb25997194053e167c4207c319ff05362392da841bd9f42ddb3caf9c8798a5d203bd926d23ddf5830fdf05eddc82c2810f40d1287e3a4f80b07eff13d1024b5 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-systemjs@npm:^7.20.11": +"@babel/plugin-transform-modules-systemjs@npm:^7.20.11, @babel/plugin-transform-modules-systemjs@npm:^7.22.11": version: 7.23.3 resolution: "@babel/plugin-transform-modules-systemjs@npm:7.23.3" dependencies: @@ -2621,21 +2257,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.22.11": - version: 7.23.0 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.23.0" - dependencies: - "@babel/helper-hoist-variables": ^7.22.5 - "@babel/helper-module-transforms": ^7.23.0 - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-validator-identifier": ^7.22.20 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2d481458b22605046badea2317d5cc5c94ac3031c2293e34c96f02063f5b02af0979c4da6a8fbc67cc249541575dc9c6d710db6b919ede70b7337a22d9fd57a7 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-umd@npm:^7.18.6": +"@babel/plugin-transform-modules-umd@npm:^7.18.6, @babel/plugin-transform-modules-umd@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-modules-umd@npm:7.23.3" dependencies: @@ -2647,18 +2269,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-umd@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-modules-umd@npm:7.22.5" - dependencies: - "@babel/helper-module-transforms": ^7.22.5 - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 46622834c54c551b231963b867adbc80854881b3e516ff29984a8da989bd81665bd70e8cba6710345248e97166689310f544aee1a5773e262845a8f1b3e5b8b4 - languageName: node - linkType: hard - "@babel/plugin-transform-named-capturing-groups-regex@npm:^7.20.5, @babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.22.5" @@ -2671,7 +2281,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.18.6": +"@babel/plugin-transform-new-target@npm:^7.18.6, @babel/plugin-transform-new-target@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-new-target@npm:7.23.3" dependencies: @@ -2682,17 +2292,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-new-target@npm:7.22.5" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 6b72112773487a881a1d6ffa680afde08bad699252020e86122180ee7a88854d5da3f15d9bca3331cf2e025df045604494a8208a2e63b486266b07c14e2ffbf3 - languageName: node - linkType: hard - "@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.11": version: 7.22.11 resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.22.11" @@ -2732,7 +2331,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.18.6": +"@babel/plugin-transform-object-super@npm:^7.18.6, @babel/plugin-transform-object-super@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-object-super@npm:7.23.3" dependencies: @@ -2744,18 +2343,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-object-super@npm:7.22.5" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-replace-supers": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b71887877d74cb64dbccb5c0324fa67e31171e6a5311991f626650e44a4083e5436a1eaa89da78c0474fb095d4ec322d63ee778b202d33aa2e4194e1ed8e62d7 - languageName: node - linkType: hard - "@babel/plugin-transform-optional-catch-binding@npm:^7.22.11": version: 7.22.11 resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.22.11" @@ -2768,20 +2355,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.22.15": - version: 7.23.0 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.23.0" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f702634f2b97e5260dbec0d4bde05ccb6f4d96d7bfa946481aeacfa205ca846cb6e096a38312f9d51fdbdac1f258f211138c5f7075952e46a5bf8574de6a1329 - languageName: node - linkType: hard - -"@babel/plugin-transform-optional-chaining@npm:^7.23.3": +"@babel/plugin-transform-optional-chaining@npm:^7.22.15, @babel/plugin-transform-optional-chaining@npm:^7.23.3": version: 7.23.4 resolution: "@babel/plugin-transform-optional-chaining@npm:7.23.4" dependencies: @@ -2794,18 +2368,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.12.1, @babel/plugin-transform-parameters@npm:^7.20.7, @babel/plugin-transform-parameters@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/plugin-transform-parameters@npm:7.22.15" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 541188bb7d1876cad87687b5c7daf90f63d8208ae83df24acb1e2b05020ad1c78786b2723ca4054a83fcb74fb6509f30c4cacc5b538ee684224261ad5fb047c1 - languageName: node - linkType: hard - -"@babel/plugin-transform-parameters@npm:^7.21.3": +"@babel/plugin-transform-parameters@npm:^7.12.1, @babel/plugin-transform-parameters@npm:^7.20.7, @babel/plugin-transform-parameters@npm:^7.21.3, @babel/plugin-transform-parameters@npm:^7.22.15": version: 7.23.3 resolution: "@babel/plugin-transform-parameters@npm:7.23.3" dependencies: @@ -2842,7 +2405,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.18.6": +"@babel/plugin-transform-property-literals@npm:^7.18.6, @babel/plugin-transform-property-literals@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-property-literals@npm:7.23.3" dependencies: @@ -2853,17 +2416,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-property-literals@npm:7.22.5" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 796176a3176106f77fcb8cd04eb34a8475ce82d6d03a88db089531b8f0453a2fb8b0c6ec9a52c27948bc0ea478becec449893741fc546dfc3930ab927e3f9f2e - languageName: node - linkType: hard - "@babel/plugin-transform-react-display-name@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-react-display-name@npm:7.22.5" @@ -2935,7 +2487,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.21.5": +"@babel/plugin-transform-regenerator@npm:^7.21.5, @babel/plugin-transform-regenerator@npm:^7.22.10": version: 7.23.3 resolution: "@babel/plugin-transform-regenerator@npm:7.23.3" dependencies: @@ -2947,19 +2499,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/plugin-transform-regenerator@npm:7.22.10" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - regenerator-transform: ^0.15.2 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: e13678d62d6fa96f11cb8b863f00e8693491e7adc88bfca3f2820f80cbac8336e7dec3a596eee6a1c4663b7ececc3564f2cd7fb44ed6d4ce84ac2bb7f39ecc6e - languageName: node - linkType: hard - -"@babel/plugin-transform-reserved-words@npm:^7.18.6": +"@babel/plugin-transform-reserved-words@npm:^7.18.6, @babel/plugin-transform-reserved-words@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-reserved-words@npm:7.23.3" dependencies: @@ -2970,17 +2510,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-reserved-words@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-reserved-words@npm:7.22.5" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3ffd7dbc425fe8132bfec118b9817572799cab1473113a635d25ab606c1f5a2341a636c04cf6b22df3813320365ed5a965b5eeb3192320a10e4cc2c137bd8bfc - languageName: node - linkType: hard - "@babel/plugin-transform-runtime@npm:~7.21.4": version: 7.21.4 resolution: "@babel/plugin-transform-runtime@npm:7.21.4" @@ -2997,18 +2526,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.12.1, @babel/plugin-transform-shorthand-properties@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.22.5" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a5ac902c56ea8effa99f681340ee61bac21094588f7aef0bc01dff98246651702e677552fa6d10e548c4ac22a3ffad047dd2f8c8f0540b68316c2c203e56818b - languageName: node - linkType: hard - -"@babel/plugin-transform-shorthand-properties@npm:^7.18.6": +"@babel/plugin-transform-shorthand-properties@npm:^7.12.1, @babel/plugin-transform-shorthand-properties@npm:^7.18.6, @babel/plugin-transform-shorthand-properties@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-shorthand-properties@npm:7.23.3" dependencies: @@ -3019,19 +2537,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.12.1, @babel/plugin-transform-spread@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-spread@npm:7.22.5" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 5587f0deb60b3dfc9b274e269031cc45ec75facccf1933ea2ea71ced9fd3ce98ed91bb36d6cd26817c14474b90ed998c5078415f0eab531caf301496ce24c95c - languageName: node - linkType: hard - -"@babel/plugin-transform-spread@npm:^7.20.7": +"@babel/plugin-transform-spread@npm:^7.12.1, @babel/plugin-transform-spread@npm:^7.20.7, @babel/plugin-transform-spread@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-spread@npm:7.23.3" dependencies: @@ -3043,7 +2549,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.18.6": +"@babel/plugin-transform-sticky-regex@npm:^7.18.6, @babel/plugin-transform-sticky-regex@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-sticky-regex@npm:7.23.3" dependencies: @@ -3054,29 +2560,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.22.5" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 63b2c575e3e7f96c32d52ed45ee098fb7d354b35c2223b8c8e76840b32cc529ee0c0ceb5742fd082e56e91e3d82842a367ce177e82b05039af3d602c9627a729 - languageName: node - linkType: hard - -"@babel/plugin-transform-template-literals@npm:^7.12.1, @babel/plugin-transform-template-literals@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-template-literals@npm:7.22.5" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 27e9bb030654cb425381c69754be4abe6a7c75b45cd7f962cd8d604b841b2f0fb7b024f2efc1c25cc53f5b16d79d5e8cfc47cacbdaa983895b3aeefa3e7e24ff - languageName: node - linkType: hard - -"@babel/plugin-transform-template-literals@npm:^7.18.9": +"@babel/plugin-transform-template-literals@npm:^7.12.1, @babel/plugin-transform-template-literals@npm:^7.18.9, @babel/plugin-transform-template-literals@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-template-literals@npm:7.23.3" dependencies: @@ -3087,7 +2571,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.18.9": +"@babel/plugin-transform-typeof-symbol@npm:^7.18.9, @babel/plugin-transform-typeof-symbol@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-typeof-symbol@npm:7.23.3" dependencies: @@ -3098,17 +2582,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.22.5" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 82a53a63ffc3010b689ca9a54e5f53b2718b9f4b4a9818f36f9b7dba234f38a01876680553d2716a645a61920b5e6e4aaf8d4a0064add379b27ca0b403049512 - languageName: node - linkType: hard - "@babel/plugin-transform-typescript@npm:^7.22.15": version: 7.22.15 resolution: "@babel/plugin-transform-typescript@npm:7.22.15" @@ -3123,7 +2596,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.21.5": +"@babel/plugin-transform-unicode-escapes@npm:^7.21.5, @babel/plugin-transform-unicode-escapes@npm:^7.22.10": version: 7.23.3 resolution: "@babel/plugin-transform-unicode-escapes@npm:7.23.3" dependencies: @@ -3134,17 +2607,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.22.10" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 807f40ed1324c8cb107c45358f1903384ca3f0ef1d01c5a3c5c9b271c8d8eec66936a3dcc8d75ddfceea9421420368c2e77ae3adef0a50557e778dfe296bf382 - languageName: node - linkType: hard - "@babel/plugin-transform-unicode-property-regex@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.22.5" @@ -3157,7 +2619,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.18.6": +"@babel/plugin-transform-unicode-regex@npm:^7.18.6, @babel/plugin-transform-unicode-regex@npm:^7.22.5": version: 7.23.3 resolution: "@babel/plugin-transform-unicode-regex@npm:7.23.3" dependencies: @@ -3169,18 +2631,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.22.5" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.22.5 - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 6b5d1404c8c623b0ec9bd436c00d885a17d6a34f3f2597996343ddb9d94f6379705b21582dfd4cec2c47fd34068872e74ab6b9580116c0566b3f9447e2a7fa06 - languageName: node - linkType: hard - "@babel/plugin-transform-unicode-sets-regex@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.22.5" @@ -3514,7 +2964,7 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.12.7, @babel/template@npm:^7.20.7, @babel/template@npm:^7.22.15, @babel/template@npm:^7.22.5, @babel/template@npm:^7.3.3": +"@babel/template@npm:^7.12.7, @babel/template@npm:^7.20.7, @babel/template@npm:^7.22.15, @babel/template@npm:^7.3.3": version: 7.22.15 resolution: "@babel/template@npm:7.22.15" dependencies: @@ -3525,25 +2975,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.12.11, @babel/traverse@npm:^7.12.9, @babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.22.20, @babel/traverse@npm:^7.23.2": - version: 7.23.2 - resolution: "@babel/traverse@npm:7.23.2" - dependencies: - "@babel/code-frame": ^7.22.13 - "@babel/generator": ^7.23.0 - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-function-name": ^7.23.0 - "@babel/helper-hoist-variables": ^7.22.5 - "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/parser": ^7.23.0 - "@babel/types": ^7.23.0 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: 26a1eea0dde41ab99dde8b9773a013a0dc50324e5110a049f5d634e721ff08afffd54940b3974a20308d7952085ac769689369e9127dea655f868c0f6e1ab35d - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.21.5, @babel/traverse@npm:^7.23.5": +"@babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.12.11, @babel/traverse@npm:^7.12.9, @babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.21.5, @babel/traverse@npm:^7.22.20, @babel/traverse@npm:^7.23.5": version: 7.23.5 resolution: "@babel/traverse@npm:7.23.5" dependencies: @@ -3561,18 +2993,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.7, @babel/types@npm:^7.2.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.23.0 - resolution: "@babel/types@npm:7.23.0" - dependencies: - "@babel/helper-string-parser": ^7.22.5 - "@babel/helper-validator-identifier": ^7.22.20 - to-fast-properties: ^2.0.0 - checksum: 215fe04bd7feef79eeb4d33374b39909ce9cad1611c4135a4f7fdf41fe3280594105af6d7094354751514625ea92d0875aba355f53e86a92600f290e77b0e604 - languageName: node - linkType: hard - -"@babel/types@npm:^7.21.5, @babel/types@npm:^7.23.5": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.7, @babel/types@npm:^7.2.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.5, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.5, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.23.5 resolution: "@babel/types@npm:7.23.5" dependencies: @@ -5061,10 +4482,10 @@ __metadata: languageName: node linkType: hard -"@jridgewell/resolve-uri@npm:3.1.0, @jridgewell/resolve-uri@npm:^3.0.3": - version: 3.1.0 - resolution: "@jridgewell/resolve-uri@npm:3.1.0" - checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 +"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 83b85f72c59d1c080b4cbec0fef84528963a1b5db34e4370fa4bd1e3ff64a0d80e0cee7369d11d73c704e0286fb2865b530acac7a871088fbe92b5edf1000870 languageName: node linkType: hard @@ -5085,10 +4506,10 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10": - version: 1.4.14 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" - checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 languageName: node linkType: hard @@ -5102,13 +4523,13 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.18 - resolution: "@jridgewell/trace-mapping@npm:0.3.18" +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.20, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.22 + resolution: "@jridgewell/trace-mapping@npm:0.3.22" dependencies: - "@jridgewell/resolve-uri": 3.1.0 - "@jridgewell/sourcemap-codec": 1.4.14 - checksum: 0572669f855260808c16fe8f78f5f1b4356463b11d3f2c7c0b5580c8ba1cbf4ae53efe9f627595830856e57dbac2325ac17eb0c3dd0ec42102e6f227cc289c02 + "@jridgewell/resolve-uri": ^3.1.0 + "@jridgewell/sourcemap-codec": ^1.4.14 + checksum: ac7dd2cfe0b479aa1b81776d40d789243131cc792dc8b6b6a028c70fcd6171958ae1a71bf67b618ffe3c0c3feead9870c095ee46a5e30319410d92976b28f498 languageName: node linkType: hard @@ -5150,16 +4571,7 @@ __metadata: languageName: node linkType: hard -"@lezer/highlight@npm:^1.0.0, @lezer/highlight@npm:^1.1.3": - version: 1.1.6 - resolution: "@lezer/highlight@npm:1.1.6" - dependencies: - "@lezer/common": ^1.0.0 - checksum: 411a702394c4c996b7d7f145a38f3a85a8cc698b3918acc7121c629255bb76d4ab383753f69009e011dc415210c6acbbb5b27bde613259ab67e600b29397b03b - languageName: node - linkType: hard - -"@lezer/highlight@npm:^1.1.6": +"@lezer/highlight@npm:^1.0.0, @lezer/highlight@npm:^1.1.3, @lezer/highlight@npm:^1.1.6": version: 1.2.0 resolution: "@lezer/highlight@npm:1.2.0" dependencies: @@ -9009,7 +8421,7 @@ __metadata: "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/eslint-config": "workspace:^" "@rocket.chat/icons": ^0.33.0 - "@rocket.chat/message-parser": ~0.31.28 + "@rocket.chat/message-parser": "workspace:^" "@rocket.chat/models": "workspace:^" "@rocket.chat/rest-typings": "workspace:^" "@rocket.chat/ui-kit": "workspace:~" @@ -9034,7 +8446,7 @@ __metadata: "@rocket.chat/apps-engine": 1.41.0 "@rocket.chat/eslint-config": "workspace:^" "@rocket.chat/icons": ^0.33.0 - "@rocket.chat/message-parser": ~0.31.28 + "@rocket.chat/message-parser": "workspace:^" "@rocket.chat/ui-kit": "workspace:~" eslint: ~8.45.0 mongodb: ^4.17.2 @@ -9097,7 +8509,7 @@ __metadata: jest-environment-jsdom: ~29.6.4 jest-websocket-mock: ^2.4.0 ts-jest: ^29.1.2 - typescript: ^5.3.3 + typescript: ^5.3.2 ws: ^8.13.0 peerDependencies: "@rocket.chat/emitter": "*" @@ -9393,7 +8805,7 @@ __metadata: "@rocket.chat/css-in-js": ~0.31.25 "@rocket.chat/fuselage": ^0.47.0 "@rocket.chat/fuselage-tokens": ~0.32.0 - "@rocket.chat/message-parser": ~0.31.28 + "@rocket.chat/message-parser": "workspace:^" "@rocket.chat/styled": ~0.31.25 "@rocket.chat/ui-client": "workspace:^" "@rocket.chat/ui-contexts": "workspace:^" @@ -9543,7 +8955,7 @@ __metadata: "@rocket.chat/fuselage-tokens": ~0.32.0 "@rocket.chat/gazzodown": "workspace:^" "@rocket.chat/logo": ^0.31.29 - "@rocket.chat/message-parser": ~0.31.28 + "@rocket.chat/message-parser": "workspace:^" "@rocket.chat/random": "workspace:~" "@rocket.chat/sdk": ^1.0.0-alpha.42 "@rocket.chat/ui-kit": "workspace:~" @@ -9673,14 +9085,36 @@ __metadata: languageName: node linkType: hard -"@rocket.chat/message-parser@npm:~0.31.28": - version: 0.31.28 - resolution: "@rocket.chat/message-parser@npm:0.31.28" +"@rocket.chat/message-parser@workspace:^, @rocket.chat/message-parser@workspace:packages/message-parser": + version: 0.0.0-use.local + resolution: "@rocket.chat/message-parser@workspace:packages/message-parser" dependencies: + "@babel/core": ~7.21.4 + "@babel/eslint-parser": ~7.21.3 + "@babel/preset-env": ~7.21.4 + "@rocket.chat/eslint-config": "workspace:^" + "@rocket.chat/peggy-loader": "workspace:~" + "@rocket.chat/prettier-config": ~0.31.25 + "@types/jest": ~29.5.7 + "@types/node": ~14.18.42 + "@typescript-eslint/parser": ~5.58.0 + babel-loader: ~9.1.2 + eslint: ~8.45.0 + jest: ~29.6.4 + npm-run-all: ^4.1.5 + peggy: 3.0.2 + prettier: ~2.8.7 + prettier-plugin-pegjs: ~0.5.4 + rimraf: ^3.0.2 tldts: ~5.7.112 - checksum: 26a1a49318052201c0f4d2807ea740f69ffe741f7d51ea192bf56d2a9e1a19c8317232dff8f0b0f332a63035a3589683d41b1fb64503d76f8cd76122a5f6b0fe - languageName: node - linkType: hard + ts-jest: ~29.1.0 + ts-loader: ~9.4.2 + typedoc: ~0.24.1 + typescript: ~5.0.4 + webpack: ~5.78.0 + webpack-cli: ~5.0.1 + languageName: unknown + linkType: soft "@rocket.chat/meteor@workspace:apps/meteor": version: 0.0.0-use.local @@ -9742,7 +9176,7 @@ __metadata: "@rocket.chat/logger": "workspace:^" "@rocket.chat/logo": ^0.31.29 "@rocket.chat/memo": ~0.31.25 - "@rocket.chat/message-parser": ~0.31.28 + "@rocket.chat/message-parser": "workspace:^" "@rocket.chat/mock-providers": "workspace:^" "@rocket.chat/model-typings": "workspace:^" "@rocket.chat/models": "workspace:^" @@ -10261,6 +9695,27 @@ __metadata: languageName: unknown linkType: soft +"@rocket.chat/peggy-loader@workspace:packages/peggy-loader, @rocket.chat/peggy-loader@workspace:~": + version: 0.0.0-use.local + resolution: "@rocket.chat/peggy-loader@workspace:packages/peggy-loader" + dependencies: + "@rocket.chat/eslint-config": "workspace:~" + "@rocket.chat/prettier-config": ~0.31.25 + "@types/node": ~14.18.42 + eslint: ~8.45.0 + npm-run-all: ^4.1.5 + peggy: 3.0.2 + prettier: ~2.8.7 + rimraf: ^3.0.2 + ts-jest: ~29.1.0 + typescript: ~5.0.4 + webpack: ~5.78.0 + peerDependencies: + peggy: "*" + webpack: "*" + languageName: unknown + linkType: soft + "@rocket.chat/poplib@workspace:^, @rocket.chat/poplib@workspace:packages/node-poplib": version: 0.0.0-use.local resolution: "@rocket.chat/poplib@workspace:packages/node-poplib" @@ -10430,7 +9885,7 @@ __metadata: "@rocket.chat/apps-engine": 1.41.0 "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/eslint-config": "workspace:^" - "@rocket.chat/message-parser": ~0.31.28 + "@rocket.chat/message-parser": "workspace:^" "@rocket.chat/ui-kit": "workspace:~" "@types/jest": ~29.5.7 ajv: ^8.11.0 @@ -14027,17 +13482,7 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:*, @types/jest@npm:~29.5.7": - version: 29.5.7 - resolution: "@types/jest@npm:29.5.7" - dependencies: - expect: ^29.0.0 - pretty-format: ^29.0.0 - checksum: e28624ccb0ef1255a03fbbb4b5bc3e5cbcdc450d39e0739985ff679b124198f808c38c8c3e67859c6efc0e848196deeb8cfed028e12a821c511dfc1112a2d6e9 - languageName: node - linkType: hard - -"@types/jest@npm:^29.5.12": +"@types/jest@npm:*, @types/jest@npm:^29.5.12, @types/jest@npm:~29.5.0, @types/jest@npm:~29.5.7": version: 29.5.12 resolution: "@types/jest@npm:29.5.12" dependencies: @@ -14047,16 +13492,6 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:~29.5.0": - version: 29.5.10 - resolution: "@types/jest@npm:29.5.10" - dependencies: - expect: ^29.0.0 - pretty-format: ^29.0.0 - checksum: ef385905787db528de9b6beb2688865c0bb276e64256ed60b9a1a6ffc0b75737456cb5e27e952a3241c5845b6a1da487470010dd30f3ca59c8581624c564a823 - languageName: node - linkType: hard - "@types/jquery@npm:*": version: 3.5.14 resolution: "@types/jquery@npm:3.5.14" @@ -14375,7 +13810,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^14.0.26, @types/node@npm:^14.14.37, @types/node@npm:^14.18.63": +"@types/node@npm:^14.0.26, @types/node@npm:^14.14.37, @types/node@npm:^14.18.63, @types/node@npm:~14.18.42": version: 14.18.63 resolution: "@types/node@npm:14.18.63" checksum: be909061a54931778c71c49dc562586c32f909c4b6197e3d71e6dac726d8bd9fccb9f599c0df99f52742b68153712b5097c0f00cac4e279fa894b0ea6719a8fd @@ -14498,14 +13933,7 @@ __metadata: languageName: node linkType: hard -"@types/prop-types@npm:*": - version: 15.7.4 - resolution: "@types/prop-types@npm:15.7.4" - checksum: ef6e1899e59b876c273811b1bd845022fc66d5a3d11cb38a25b6c566b30514ae38fe20a40f67622f362a4f4f7f9224e22d8da101cff3d6e97e11d7b4c307cfc1 - languageName: node - linkType: hard - -"@types/prop-types@npm:^15.7.2": +"@types/prop-types@npm:*, @types/prop-types@npm:^15.7.2": version: 15.7.11 resolution: "@types/prop-types@npm:15.7.11" checksum: 7519ff11d06fbf6b275029fe03fff9ec377b4cb6e864cac34d87d7146c7f5a7560fd164bdc1d2dbe00b60c43713631251af1fd3d34d46c69cd354602bc0c7c54 @@ -15116,6 +14544,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/parser@npm:~5.58.0": + version: 5.58.0 + resolution: "@typescript-eslint/parser@npm:5.58.0" + dependencies: + "@typescript-eslint/scope-manager": 5.58.0 + "@typescript-eslint/types": 5.58.0 + "@typescript-eslint/typescript-estree": 5.58.0 + debug: ^4.3.4 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 38681da48a40132c0538579c818ceef9ba2793ab8f79236c3f64980ba1649bb87cb367cd79d37bf2982b8bfbc28f91846b8676f9bd333e8b691c9befffd8874a + languageName: node + linkType: hard + "@typescript-eslint/parser@npm:~5.60.1": version: 5.60.1 resolution: "@typescript-eslint/parser@npm:5.60.1" @@ -15133,6 +14578,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:5.58.0": + version: 5.58.0 + resolution: "@typescript-eslint/scope-manager@npm:5.58.0" + dependencies: + "@typescript-eslint/types": 5.58.0 + "@typescript-eslint/visitor-keys": 5.58.0 + checksum: f0d3df5cc3c461fe63ef89ad886b53c239cc7c1d9061d83d8a9d9c8e087e5501eac84bebff8a954728c17ccea191f235686373d54d2b8b6370af2bcf2b18e062 + languageName: node + linkType: hard + "@typescript-eslint/scope-manager@npm:5.60.1": version: 5.60.1 resolution: "@typescript-eslint/scope-manager@npm:5.60.1" @@ -15160,6 +14615,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:5.58.0": + version: 5.58.0 + resolution: "@typescript-eslint/types@npm:5.58.0" + checksum: 8622a73d73220c4a7111537825f488c0271272032a1d4e129dc722bc6e8b3ec84f64469b2ca3b8dae7da3a9c18953ce1449af51f5f757dad60835eb579ad1d2c + languageName: node + linkType: hard + "@typescript-eslint/types@npm:5.60.1": version: 5.60.1 resolution: "@typescript-eslint/types@npm:5.60.1" @@ -15167,6 +14629,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:5.58.0": + version: 5.58.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.58.0" + dependencies: + "@typescript-eslint/types": 5.58.0 + "@typescript-eslint/visitor-keys": 5.58.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 51b668ec858db0c040a71dff526273945cee4ba5a9b240528d503d02526685882d900cf071c6636a4d9061ed3fd4a7274f7f1a23fba55c4b48b143344b4009c7 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:5.60.1": version: 5.60.1 resolution: "@typescript-eslint/typescript-estree@npm:5.60.1" @@ -15203,6 +14683,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:5.58.0": + version: 5.58.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.58.0" + dependencies: + "@typescript-eslint/types": 5.58.0 + eslint-visitor-keys: ^3.3.0 + checksum: ab2d1f37660559954c840429ef78bbf71834063557e3e68e435005b4987970b9356fdf217ead53f7a57f66f5488dc478062c5c44bf17053a8bf041733539b98f + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:5.60.1": version: 5.60.1 resolution: "@typescript-eslint/visitor-keys@npm:5.60.1" @@ -15252,6 +14742,16 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/ast@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/ast@npm:1.11.1" + dependencies: + "@webassemblyjs/helper-numbers": 1.11.1 + "@webassemblyjs/helper-wasm-bytecode": 1.11.1 + checksum: 1eee1534adebeece635362f8e834ae03e389281972611408d64be7895fc49f48f98fddbbb5339bf8a72cb101bcb066e8bca3ca1bf1ef47dadf89def0395a8d87 + languageName: node + linkType: hard + "@webassemblyjs/ast@npm:1.11.6, @webassemblyjs/ast@npm:^1.11.5": version: 1.11.6 resolution: "@webassemblyjs/ast@npm:1.11.6" @@ -15273,6 +14773,13 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/floating-point-hex-parser@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.1" + checksum: b8efc6fa08e4787b7f8e682182d84dfdf8da9d9c77cae5d293818bc4a55c1f419a87fa265ab85252b3e6c1fd323d799efea68d825d341a7c365c64bc14750e97 + languageName: node + linkType: hard + "@webassemblyjs/floating-point-hex-parser@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.6" @@ -15287,6 +14794,13 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/helper-api-error@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/helper-api-error@npm:1.11.1" + checksum: 0792813f0ed4a0e5ee0750e8b5d0c631f08e927f4bdfdd9fe9105dc410c786850b8c61bff7f9f515fdfb149903bec3c976a1310573a4c6866a94d49bc7271959 + languageName: node + linkType: hard + "@webassemblyjs/helper-api-error@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/helper-api-error@npm:1.11.6" @@ -15301,6 +14815,13 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/helper-buffer@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/helper-buffer@npm:1.11.1" + checksum: a337ee44b45590c3a30db5a8b7b68a717526cf967ada9f10253995294dbd70a58b2da2165222e0b9830cd4fc6e4c833bf441a721128d1fe2e9a7ab26b36003ce + languageName: node + linkType: hard + "@webassemblyjs/helper-buffer@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/helper-buffer@npm:1.11.6" @@ -15340,6 +14861,17 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/helper-numbers@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/helper-numbers@npm:1.11.1" + dependencies: + "@webassemblyjs/floating-point-hex-parser": 1.11.1 + "@webassemblyjs/helper-api-error": 1.11.1 + "@xtuc/long": 4.2.2 + checksum: 44d2905dac2f14d1e9b5765cf1063a0fa3d57295c6d8930f6c59a36462afecc6e763e8a110b97b342a0f13376166c5d41aa928e6ced92e2f06b071fd0db59d3a + languageName: node + linkType: hard + "@webassemblyjs/helper-numbers@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/helper-numbers@npm:1.11.6" @@ -15351,6 +14883,13 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/helper-wasm-bytecode@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.1" + checksum: eac400113127832c88f5826bcc3ad1c0db9b3dbd4c51a723cfdb16af6bfcbceb608170fdaac0ab7731a7e18b291be7af68a47fcdb41cfe0260c10857e7413d97 + languageName: node + linkType: hard + "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6" @@ -15365,6 +14904,18 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/helper-wasm-section@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.11.1" + dependencies: + "@webassemblyjs/ast": 1.11.1 + "@webassemblyjs/helper-buffer": 1.11.1 + "@webassemblyjs/helper-wasm-bytecode": 1.11.1 + "@webassemblyjs/wasm-gen": 1.11.1 + checksum: 617696cfe8ecaf0532763162aaf748eb69096fb27950219bb87686c6b2e66e11cd0614d95d319d0ab1904bc14ebe4e29068b12c3e7c5e020281379741fe4bedf + languageName: node + linkType: hard + "@webassemblyjs/helper-wasm-section@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/helper-wasm-section@npm:1.11.6" @@ -15389,6 +14940,15 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/ieee754@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/ieee754@npm:1.11.1" + dependencies: + "@xtuc/ieee754": ^1.2.0 + checksum: 23a0ac02a50f244471631802798a816524df17e56b1ef929f0c73e3cde70eaf105a24130105c60aff9d64a24ce3b640dad443d6f86e5967f922943a7115022ec + languageName: node + linkType: hard + "@webassemblyjs/ieee754@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/ieee754@npm:1.11.6" @@ -15407,6 +14967,15 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/leb128@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/leb128@npm:1.11.1" + dependencies: + "@xtuc/long": 4.2.2 + checksum: 33ccc4ade2f24de07bf31690844d0b1ad224304ee2062b0e464a610b0209c79e0b3009ac190efe0e6bd568b0d1578d7c3047fc1f9d0197c92fc061f56224ff4a + languageName: node + linkType: hard + "@webassemblyjs/leb128@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/leb128@npm:1.11.6" @@ -15425,6 +14994,13 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/utf8@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/utf8@npm:1.11.1" + checksum: 972c5cfc769d7af79313a6bfb96517253a270a4bf0c33ba486aa43cac43917184fb35e51dfc9e6b5601548cd5931479a42e42c89a13bb591ffabebf30c8a6a0b + languageName: node + linkType: hard + "@webassemblyjs/utf8@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/utf8@npm:1.11.6" @@ -15439,6 +15015,22 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/wasm-edit@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/wasm-edit@npm:1.11.1" + dependencies: + "@webassemblyjs/ast": 1.11.1 + "@webassemblyjs/helper-buffer": 1.11.1 + "@webassemblyjs/helper-wasm-bytecode": 1.11.1 + "@webassemblyjs/helper-wasm-section": 1.11.1 + "@webassemblyjs/wasm-gen": 1.11.1 + "@webassemblyjs/wasm-opt": 1.11.1 + "@webassemblyjs/wasm-parser": 1.11.1 + "@webassemblyjs/wast-printer": 1.11.1 + checksum: 6d7d9efaec1227e7ef7585a5d7ff0be5f329f7c1c6b6c0e906b18ed2e9a28792a5635e450aca2d136770d0207225f204eff70a4b8fd879d3ac79e1dcc26dbeb9 + languageName: node + linkType: hard + "@webassemblyjs/wasm-edit@npm:1.9.0": version: 1.9.0 resolution: "@webassemblyjs/wasm-edit@npm:1.9.0" @@ -15471,6 +15063,19 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/wasm-gen@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/wasm-gen@npm:1.11.1" + dependencies: + "@webassemblyjs/ast": 1.11.1 + "@webassemblyjs/helper-wasm-bytecode": 1.11.1 + "@webassemblyjs/ieee754": 1.11.1 + "@webassemblyjs/leb128": 1.11.1 + "@webassemblyjs/utf8": 1.11.1 + checksum: 1f6921e640293bf99fb16b21e09acb59b340a79f986c8f979853a0ae9f0b58557534b81e02ea2b4ef11e929d946708533fd0693c7f3712924128fdafd6465f5b + languageName: node + linkType: hard + "@webassemblyjs/wasm-gen@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/wasm-gen@npm:1.11.6" @@ -15497,6 +15102,18 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/wasm-opt@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/wasm-opt@npm:1.11.1" + dependencies: + "@webassemblyjs/ast": 1.11.1 + "@webassemblyjs/helper-buffer": 1.11.1 + "@webassemblyjs/wasm-gen": 1.11.1 + "@webassemblyjs/wasm-parser": 1.11.1 + checksum: 21586883a20009e2b20feb67bdc451bbc6942252e038aae4c3a08e6f67b6bae0f5f88f20bfc7bd0452db5000bacaf5ab42b98cf9aa034a6c70e9fc616142e1db + languageName: node + linkType: hard + "@webassemblyjs/wasm-opt@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/wasm-opt@npm:1.11.6" @@ -15521,6 +15138,20 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/wasm-parser@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/wasm-parser@npm:1.11.1" + dependencies: + "@webassemblyjs/ast": 1.11.1 + "@webassemblyjs/helper-api-error": 1.11.1 + "@webassemblyjs/helper-wasm-bytecode": 1.11.1 + "@webassemblyjs/ieee754": 1.11.1 + "@webassemblyjs/leb128": 1.11.1 + "@webassemblyjs/utf8": 1.11.1 + checksum: 1521644065c360e7b27fad9f4bb2df1802d134dd62937fa1f601a1975cde56bc31a57b6e26408b9ee0228626ff3ba1131ae6f74ffb7d718415b6528c5a6dbfc2 + languageName: node + linkType: hard + "@webassemblyjs/wasm-parser@npm:1.11.6, @webassemblyjs/wasm-parser@npm:^1.11.5": version: 1.11.6 resolution: "@webassemblyjs/wasm-parser@npm:1.11.6" @@ -15563,6 +15194,16 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/wast-printer@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/wast-printer@npm:1.11.1" + dependencies: + "@webassemblyjs/ast": 1.11.1 + "@xtuc/long": 4.2.2 + checksum: f15ae4c2441b979a3b4fce78f3d83472fb22350c6dc3fd34bfe7c3da108e0b2360718734d961bba20e7716cb8578e964b870da55b035e209e50ec9db0378a3f7 + languageName: node + linkType: hard + "@webassemblyjs/wast-printer@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/wast-printer@npm:1.11.6" @@ -15584,7 +15225,7 @@ __metadata: languageName: node linkType: hard -"@webpack-cli/configtest@npm:^2.1.1": +"@webpack-cli/configtest@npm:^2.0.1, @webpack-cli/configtest@npm:^2.1.1": version: 2.1.1 resolution: "@webpack-cli/configtest@npm:2.1.1" peerDependencies: @@ -15594,7 +15235,7 @@ __metadata: languageName: node linkType: hard -"@webpack-cli/info@npm:^2.0.2": +"@webpack-cli/info@npm:^2.0.1, @webpack-cli/info@npm:^2.0.2": version: 2.0.2 resolution: "@webpack-cli/info@npm:2.0.2" peerDependencies: @@ -15604,7 +15245,7 @@ __metadata: languageName: node linkType: hard -"@webpack-cli/serve@npm:^2.0.5": +"@webpack-cli/serve@npm:^2.0.2, @webpack-cli/serve@npm:^2.0.5": version: 2.0.5 resolution: "@webpack-cli/serve@npm:2.0.5" peerDependencies: @@ -15719,7 +15360,7 @@ __metadata: languageName: node linkType: hard -"acorn-import-assertions@npm:^1.9.0": +"acorn-import-assertions@npm:^1.7.6, acorn-import-assertions@npm:^1.9.0": version: 1.9.0 resolution: "acorn-import-assertions@npm:1.9.0" peerDependencies: @@ -16062,6 +15703,13 @@ __metadata: languageName: node linkType: hard +"ansi-sequence-parser@npm:^1.1.0": + version: 1.1.1 + resolution: "ansi-sequence-parser@npm:1.1.1" + checksum: ead5b15c596e8e85ca02951a844366c6776769dcc9fd1bd3a0db11bb21364554822c6a439877fb599e7e1ffa0b5f039f1e5501423950457f3dcb2f480c30b188 + languageName: node + linkType: hard + "ansi-styles@npm:^2.2.1": version: 2.2.1 resolution: "ansi-styles@npm:2.2.1" @@ -17827,21 +17475,7 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.12.0, browserslist@npm:^4.14.5, browserslist@npm:^4.21.9": - version: 4.21.9 - resolution: "browserslist@npm:4.21.9" - dependencies: - caniuse-lite: ^1.0.30001503 - electron-to-chromium: ^1.4.431 - node-releases: ^2.0.12 - update-browserslist-db: ^1.0.11 - bin: - browserslist: cli.js - checksum: 80d3820584e211484ad1b1a5cfdeca1dd00442f47be87e117e1dda34b628c87e18b81ae7986fa5977b3e6a03154f6d13cd763baa6b8bf5dd9dd19f4926603698 - languageName: node - linkType: hard - -"browserslist@npm:^4.22.1": +"browserslist@npm:^4.0.0, browserslist@npm:^4.12.0, browserslist@npm:^4.14.5, browserslist@npm:^4.21.9, browserslist@npm:^4.22.1": version: 4.22.1 resolution: "browserslist@npm:4.22.1" dependencies: @@ -18341,7 +17975,7 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001503, caniuse-lite@npm:^1.0.30001541": +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001541": version: 1.0.30001577 resolution: "caniuse-lite@npm:1.0.30001577" checksum: 26d2b4a498a2a6ad5a33c44c18a32497b59a3bb1963b8b9221ddcbfe166ed7f7a1f75a3de040870cdc2467ce35199c643cfe8c45e7208d8bc033e7877214b0f9 @@ -19576,7 +19210,7 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.25.1": +"core-js-compat@npm:^3.25.1, core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.8.1": version: 3.33.3 resolution: "core-js-compat@npm:3.33.3" dependencies: @@ -19585,15 +19219,6 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.8.1": - version: 3.31.1 - resolution: "core-js-compat@npm:3.31.1" - dependencies: - browserslist: ^4.21.9 - checksum: 9a16d6992621f4e099169297381a28d5712cdef7df1fa85352a7c285a5885d5d7a117ec2eae9ad715ed88c7cc774787a22cdb8aceababf6775fbc8b0cbeccdb7 - languageName: node - linkType: hard - "core-js-pure@npm:^3.8.1": version: 3.21.1 resolution: "core-js-pure@npm:3.21.1" @@ -21644,13 +21269,6 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.431": - version: 1.4.433 - resolution: "electron-to-chromium@npm:1.4.433" - checksum: 106e3bc2fb4ee5eddd4b141363900d5cd731c7579aa6bebd02509c52d6b598a1684aba1b75791e838dfa54dec0a40ddd17ea01199041ea46310aafb206395e43 - languageName: node - linkType: hard - "electron-to-chromium@npm:^1.4.535": version: 1.4.597 resolution: "electron-to-chromium@npm:1.4.597" @@ -21848,7 +21466,7 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.0.0, enhanced-resolve@npm:^5.15.0": +"enhanced-resolve@npm:^5.0.0, enhanced-resolve@npm:^5.10.0, enhanced-resolve@npm:^5.15.0": version: 5.15.0 resolution: "enhanced-resolve@npm:5.15.0" dependencies: @@ -22037,6 +21655,13 @@ __metadata: languageName: node linkType: hard +"es-module-lexer@npm:^0.9.0": + version: 0.9.3 + resolution: "es-module-lexer@npm:0.9.3" + checksum: 84bbab23c396281db2c906c766af58b1ae2a1a2599844a504df10b9e8dc77ec800b3211fdaa133ff700f5703d791198807bba25d9667392d27a5e9feda344da8 + languageName: node + linkType: hard + "es-module-lexer@npm:^1.2.1": version: 1.3.0 resolution: "es-module-lexer@npm:1.3.0" @@ -24172,14 +23797,7 @@ __metadata: languageName: node linkType: hard -"function-bind@npm:^1.1.1": - version: 1.1.1 - resolution: "function-bind@npm:1.1.1" - checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a - languageName: node - linkType: hard - -"function-bind@npm:^1.1.2": +"function-bind@npm:^1.1.1, function-bind@npm:^1.1.2": version: 1.1.2 resolution: "function-bind@npm:1.1.2" checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 @@ -26745,16 +26363,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.11.0, is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": - version: 2.12.0 - resolution: "is-core-module@npm:2.12.0" - dependencies: - has: ^1.0.3 - checksum: f7f7eb2ab71fd769ee9fb2385c095d503aa4b5ce0028c04557de03f1e67a87c85e5bac1f215945fc3c955867a139a415a3ec4c4234a0bffdf715232660f440a6 - languageName: node - linkType: hard - -"is-core-module@npm:^2.13.0": +"is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": version: 2.13.1 resolution: "is-core-module@npm:2.13.1" dependencies: @@ -29606,6 +29215,13 @@ __metadata: languageName: node linkType: hard +"lunr@npm:^2.3.9": + version: 2.3.9 + resolution: "lunr@npm:2.3.9" + checksum: 176719e24fcce7d3cf1baccce9dd5633cd8bdc1f41ebe6a180112e5ee99d80373fe2454f5d4624d437e5a8319698ca6837b9950566e15d2cae5f2a543a3db4b8 + languageName: node + linkType: hard + "lz-string@npm:^1.4.4, lz-string@npm:^1.5.0": version: 1.5.0 resolution: "lz-string@npm:1.5.0" @@ -29786,12 +29402,12 @@ __metadata: languageName: node linkType: hard -"marked@npm:^4.2.5": - version: 4.2.5 - resolution: "marked@npm:4.2.5" +"marked@npm:^4.2.5, marked@npm:^4.3.0": + version: 4.3.0 + resolution: "marked@npm:4.3.0" bin: marked: bin/marked.js - checksum: dd7da20a3983c66b516463fad5dc8d15dc70e137d20b6dc491e134f671e84bd2ed5f859e2c35f21e56830a122e4356b9e574bcde49b72b7ad6bc121a215a1a98 + checksum: 0db6817893952c3ec710eb9ceafb8468bf5ae38cb0f92b7b083baa13d70b19774674be04db5b817681fa7c5c6a088f61300815e4dd75a59696f4716ad69f6260 languageName: node linkType: hard @@ -30521,6 +30137,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^9.0.0": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: ^2.0.1 + checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 + languageName: node + linkType: hard + "minimatch@npm:~3.0.4": version: 3.0.8 resolution: "minimatch@npm:3.0.8" @@ -30888,7 +30513,7 @@ __metadata: languageName: node linkType: hard -"mongodb@npm:^4.17.2": +"mongodb@npm:^4.17.2, mongodb@npm:^4.3.1": version: 4.17.2 resolution: "mongodb@npm:4.17.2" dependencies: @@ -30906,24 +30531,6 @@ __metadata: languageName: node linkType: hard -"mongodb@npm:^4.3.1": - version: 4.17.1 - resolution: "mongodb@npm:4.17.1" - dependencies: - "@aws-sdk/credential-providers": ^3.186.0 - "@mongodb-js/saslprep": ^1.1.0 - bson: ^4.7.2 - mongodb-connection-string-url: ^2.6.0 - socks: ^2.7.1 - dependenciesMeta: - "@aws-sdk/credential-providers": - optional: true - "@mongodb-js/saslprep": - optional: true - checksum: e7f280570d0f23d60c308b2a484ed55762ec8e523946c0de1a0b3b398f24efcf1916a745e5407f32cd1c105b2f19d8ac75474c92f73cdf651affe3430a963f54 - languageName: node - linkType: hard - "moo@npm:^0.5.0, moo@npm:^0.5.1": version: 0.5.1 resolution: "moo@npm:0.5.1" @@ -31334,7 +30941,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2": +"node-fetch@npm:^2, node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.11, node-fetch@npm:^2.6.7": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -31348,20 +30955,6 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.11, node-fetch@npm:^2.6.7": - version: 2.6.11 - resolution: "node-fetch@npm:2.6.11" - dependencies: - whatwg-url: ^5.0.0 - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 249d0666a9497553384d46b5ab296ba223521ac88fed4d8a17d6ee6c2efb0fc890f3e8091cafe7f9fba8151a5b8d925db2671543b3409a56c3cd522b468b47b3 - languageName: node - linkType: hard - "node-forge@npm:^0.7.1": version: 0.7.6 resolution: "node-forge@npm:0.7.6" @@ -31506,13 +31099,6 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.12": - version: 2.0.12 - resolution: "node-releases@npm:2.0.12" - checksum: b8c56db82c4642a0f443332b331a4396dae452a2ac5a65c8dbd93ef89ecb2fbb0da9d42ac5366d4764973febadca816cf7587dad492dce18d2a6b2af59cda260 - languageName: node - linkType: hard - "node-releases@npm:^2.0.13": version: 2.0.13 resolution: "node-releases@npm:2.0.13" @@ -33033,6 +32619,18 @@ __metadata: languageName: node linkType: hard +"peggy@npm:3.0.2": + version: 3.0.2 + resolution: "peggy@npm:3.0.2" + dependencies: + commander: ^10.0.0 + source-map-generator: 0.8.0 + bin: + peggy: bin/peggy.js + checksum: bdca2291a2453e35fb9499bd414f25d44093aecaeb992ef90151ab126514c053c30d4bf5b54f68cbce22a4420eef75219a6deb1209b300630bff38e7640115d9 + languageName: node + linkType: hard + "pend@npm:~1.2.0": version: 1.2.0 resolution: "pend@npm:1.2.0" @@ -34272,6 +33870,15 @@ __metadata: languageName: node linkType: hard +"prettier-plugin-pegjs@npm:~0.5.4": + version: 0.5.4 + resolution: "prettier-plugin-pegjs@npm:0.5.4" + dependencies: + prettier: ^2.8.4 + checksum: 25e89f6718601b232ddc6f6215f7222ede1bb3d756106635a73a24047f518771d36017dd8c2b8160809a49ad561fa155e4bcba9973d72951f6c6d2017787ba6f + languageName: node + linkType: hard + "prettier@npm:>=2.2.1 <=2.3.0": version: 2.3.0 resolution: "prettier@npm:2.3.0" @@ -34281,7 +33888,7 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^2.7.1, prettier@npm:~2.8.8": +"prettier@npm:^2.7.1, prettier@npm:^2.8.4, prettier@npm:~2.8.7, prettier@npm:~2.8.8": version: 2.8.8 resolution: "prettier@npm:2.8.8" bin: @@ -34412,16 +34019,7 @@ __metadata: languageName: node linkType: hard -"prom-client@npm:^14.0.0": - version: 14.0.1 - resolution: "prom-client@npm:14.0.1" - dependencies: - tdigest: ^0.1.1 - checksum: 864c19b7086eda8fae652385bc8b8aeb155f85922e58672d07a64918a603341e120e65e08f9d77ccab546518dc18930284da8743c2aac3c968f626d7063d6bba - languageName: node - linkType: hard - -"prom-client@npm:^14.2.0": +"prom-client@npm:^14.0.0, prom-client@npm:^14.2.0": version: 14.2.0 resolution: "prom-client@npm:14.2.0" dependencies: @@ -36372,20 +35970,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.6, resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.11.1, resolve@npm:^1.12.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.0, resolve@npm:^1.22.1, resolve@npm:^1.3.2": - version: 1.22.2 - resolution: "resolve@npm:1.22.2" - dependencies: - is-core-module: ^2.11.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: 7e5df75796ebd429445d102d5824482ee7e567f0070b2b45897b29bb4f613dcbc262e0257b8aeedb3089330ccaea0d6a0464df1a77b2992cf331dcda0f4cb549 - languageName: node - linkType: hard - -"resolve@npm:^1.22.2": +"resolve@npm:^1.1.6, resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.11.1, resolve@npm:^1.12.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.0, resolve@npm:^1.22.1, resolve@npm:^1.22.2, resolve@npm:^1.3.2": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -36411,20 +35996,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.1.7#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.11.1#~builtin, resolve@patch:resolve@^1.12.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@^1.3.2#~builtin": - version: 1.22.2 - resolution: "resolve@patch:resolve@npm%3A1.22.2#~builtin::version=1.22.2&hash=c3c19d" - dependencies: - is-core-module: ^2.11.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: 66cc788f13b8398de18eb4abb3aed90435c84bb8935953feafcf7231ba4cd191b2c10b4a87b1e9681afc34fb138c705f91f7330ff90bfa36f457e5584076a2b8 - languageName: node - linkType: hard - -"resolve@patch:resolve@^1.22.2#~builtin": +"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.1.7#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.11.1#~builtin, resolve@patch:resolve@^1.12.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@^1.22.2#~builtin, resolve@patch:resolve@^1.3.2#~builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -36614,7 +36186,7 @@ __metadata: "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/emitter": ~0.31.25 "@rocket.chat/icons": ^0.33.0 - "@rocket.chat/message-parser": ~0.31.28 + "@rocket.chat/message-parser": "workspace:^" "@rocket.chat/model-typings": "workspace:^" "@rocket.chat/models": "workspace:^" "@rocket.chat/rest-typings": "workspace:^" @@ -36975,7 +36547,7 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": +"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.0, schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": version: 3.3.0 resolution: "schema-utils@npm:3.3.0" dependencies: @@ -37444,6 +37016,18 @@ __metadata: languageName: node linkType: hard +"shiki@npm:^0.14.1": + version: 0.14.7 + resolution: "shiki@npm:0.14.7" + dependencies: + ansi-sequence-parser: ^1.1.0 + jsonc-parser: ^3.2.0 + vscode-oniguruma: ^1.7.0 + vscode-textmate: ^8.0.0 + checksum: 2aec3b3519df977c4391df9e1825cb496e9a4d7e11395f05a0da77e4fa2f7c3d9d6e6ee94029ac699533017f2b25637ee68f6d39f05f311535c2704d0329b520 + languageName: node + linkType: hard + "shimmer@npm:^1.1.0, shimmer@npm:^1.2.0": version: 1.2.1 resolution: "shimmer@npm:1.2.1" @@ -37763,6 +37347,13 @@ __metadata: languageName: node linkType: hard +"source-map-generator@npm:0.8.0": + version: 0.8.0 + resolution: "source-map-generator@npm:0.8.0" + checksum: 15e7854c04a4b1bc8a477664a65c58316d792fb24a7b427219ac597eed7f57a3905637c783126b123cf05f9d4fdc45a8fadb8bc2fbf010a82d92e35c193aba51 + languageName: node + linkType: hard + "source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.2": version: 1.0.2 resolution: "source-map-js@npm:1.0.2" @@ -39326,15 +38917,15 @@ __metadata: languageName: node linkType: hard -"terser-webpack-plugin@npm:^5.0.3, terser-webpack-plugin@npm:^5.3.7": - version: 5.3.9 - resolution: "terser-webpack-plugin@npm:5.3.9" +"terser-webpack-plugin@npm:^5.0.3, terser-webpack-plugin@npm:^5.1.3, terser-webpack-plugin@npm:^5.3.7": + version: 5.3.10 + resolution: "terser-webpack-plugin@npm:5.3.10" dependencies: - "@jridgewell/trace-mapping": ^0.3.17 + "@jridgewell/trace-mapping": ^0.3.20 jest-worker: ^27.4.5 schema-utils: ^3.1.1 serialize-javascript: ^6.0.1 - terser: ^5.16.8 + terser: ^5.26.0 peerDependencies: webpack: ^5.1.0 peerDependenciesMeta: @@ -39344,7 +38935,7 @@ __metadata: optional: true uglify-js: optional: true - checksum: 41705713d6f9cb83287936b21e27c658891c78c4392159f5148b5623f0e8c48559869779619b058382a4c9758e7820ea034695e57dc7c474b4962b79f553bc5f + checksum: bd6e7596cf815f3353e2a53e79cbdec959a1b0276f5e5d4e63e9d7c3c5bb5306df567729da287d1c7b39d79093e56863c569c42c6c24cc34c76aa313bd2cbcea languageName: node linkType: hard @@ -39361,9 +38952,9 @@ __metadata: languageName: node linkType: hard -"terser@npm:^5.10.0, terser@npm:^5.16.8, terser@npm:^5.3.4": - version: 5.18.0 - resolution: "terser@npm:5.18.0" +"terser@npm:^5.10.0, terser@npm:^5.26.0, terser@npm:^5.3.4": + version: 5.27.2 + resolution: "terser@npm:5.27.2" dependencies: "@jridgewell/source-map": ^0.3.3 acorn: ^8.8.2 @@ -39371,7 +38962,7 @@ __metadata: source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: d01eb9805a978b3338b68fd2d9e35c1cd4cad78ea093dc92c7b3c38965232f0af0f95e0c6d90920ecf600a74135c608aebae26302c036c01393a590e1918bb90 + checksum: 0da083942b10e79b2ed20947c8ebb8dbef729096afdcb82b2f0d730801fb416fd6b1fb4a2869b39679b06cb9b5f27be6d3ffac0c77f329822bd9a4e72016660a languageName: node linkType: hard @@ -39838,40 +39429,7 @@ __metadata: languageName: node linkType: hard -"ts-jest@npm:^29.1.1, ts-jest@npm:~29.1.1": - version: 29.1.1 - resolution: "ts-jest@npm:29.1.1" - dependencies: - bs-logger: 0.x - fast-json-stable-stringify: 2.x - jest-util: ^29.0.0 - json5: ^2.2.3 - lodash.memoize: 4.x - make-error: 1.x - semver: ^7.5.3 - yargs-parser: ^21.0.1 - peerDependencies: - "@babel/core": ">=7.0.0-beta.0 <8" - "@jest/types": ^29.0.0 - babel-jest: ^29.0.0 - jest: ^29.0.0 - typescript: ">=4.3 <6" - peerDependenciesMeta: - "@babel/core": - optional: true - "@jest/types": - optional: true - babel-jest: - optional: true - esbuild: - optional: true - bin: - ts-jest: cli.js - checksum: a8c9e284ed4f819526749f6e4dc6421ec666f20ab44d31b0f02b4ed979975f7580b18aea4813172d43e39b29464a71899f8893dd29b06b4a351a3af8ba47b402 - languageName: node - linkType: hard - -"ts-jest@npm:^29.1.2": +"ts-jest@npm:^29.1.1, ts-jest@npm:^29.1.2, ts-jest@npm:~29.1.0, ts-jest@npm:~29.1.1": version: 29.1.2 resolution: "ts-jest@npm:29.1.2" dependencies: @@ -40433,6 +39991,22 @@ __metadata: languageName: node linkType: hard +"typedoc@npm:~0.24.1": + version: 0.24.8 + resolution: "typedoc@npm:0.24.8" + dependencies: + lunr: ^2.3.9 + marked: ^4.3.0 + minimatch: ^9.0.0 + shiki: ^0.14.1 + peerDependencies: + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x + bin: + typedoc: bin/typedoc + checksum: a46a14497f789fb3594e6c3af2e45276934ac46df40b7ed15a504ee51dc7a8013a2ffb3a54fd73abca6a2b71f97d3ec9ad356fa9aa81d29743e4645a965a2ae0 + languageName: node + linkType: hard + "typescript@npm:^5.3.2, typescript@npm:~5.3.2": version: 5.3.2 resolution: "typescript@npm:5.3.2" @@ -40443,13 +40017,13 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.3.3": - version: 5.3.3 - resolution: "typescript@npm:5.3.3" +"typescript@npm:~5.0.4": + version: 5.0.4 + resolution: "typescript@npm:5.0.4" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 2007ccb6e51bbbf6fde0a78099efe04dc1c3dfbdff04ca3b6a8bc717991862b39fd6126c0c3ebf2d2d98ac5e960bcaa873826bb2bb241f14277034148f41f6a2 + checksum: 82b94da3f4604a8946da585f7d6c3025fff8410779e5bde2855ab130d05e4fd08938b9e593b6ebed165bda6ad9292b230984f10952cf82f0a0ca07bbeaa08172 languageName: node linkType: hard @@ -40463,13 +40037,13 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@^5.3.3#~builtin": - version: 5.3.3 - resolution: "typescript@patch:typescript@npm%3A5.3.3#~builtin::version=5.3.3&hash=85af82" +"typescript@patch:typescript@~5.0.4#~builtin": + version: 5.0.4 + resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin::version=5.0.4&hash=85af82" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: f61375590b3162599f0f0d5b8737877ac0a7bc52761dbb585d67e7b8753a3a4c42d9a554c4cc929f591ffcf3a2b0602f65ae3ce74714fd5652623a816862b610 + checksum: bb309d320c59a26565fb3793dba550576ab861018ff3fd1b7fccabbe46ae4a35546bc45f342c0a0b6f265c801ccdf64ffd68f548f117ceb7f0eac4b805cd52a9 languageName: node linkType: hard @@ -40903,20 +40477,6 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.0.11": - version: 1.0.11 - resolution: "update-browserslist-db@npm:1.0.11" - dependencies: - escalade: ^3.1.1 - picocolors: ^1.0.0 - peerDependencies: - browserslist: ">= 4.21.0" - bin: - update-browserslist-db: cli.js - checksum: b98327518f9a345c7cad5437afae4d2ae7d865f9779554baf2a200fdf4bac4969076b679b1115434bd6557376bdd37ca7583d0f9b8f8e302d7d4cc1e91b5f231 - languageName: node - linkType: hard - "update-browserslist-db@npm:^1.0.13": version: 1.0.13 resolution: "update-browserslist-db@npm:1.0.13" @@ -41555,6 +41115,20 @@ __metadata: languageName: node linkType: hard +"vscode-oniguruma@npm:^1.7.0": + version: 1.7.0 + resolution: "vscode-oniguruma@npm:1.7.0" + checksum: 53519d91d90593e6fb080260892e87d447e9b200c4964d766772b5053f5699066539d92100f77f1302c91e8fc5d9c772fbe40fe4c90f3d411a96d5a9b1e63f42 + languageName: node + linkType: hard + +"vscode-textmate@npm:^8.0.0": + version: 8.0.0 + resolution: "vscode-textmate@npm:8.0.0" + checksum: 127780dfea89559d70b8326df6ec344cfd701312dd7f3f591a718693812b7852c30b6715e3cfc8b3200a4e2515b4c96f0843c0eacc0a3020969b5de262c2a4bb + languageName: node + linkType: hard + "w3c-hr-time@npm:^1.0.2": version: 1.0.2 resolution: "w3c-hr-time@npm:1.0.2" @@ -41802,6 +41376,38 @@ __metadata: languageName: node linkType: hard +"webpack-cli@npm:~5.0.1": + version: 5.0.2 + resolution: "webpack-cli@npm:5.0.2" + dependencies: + "@discoveryjs/json-ext": ^0.5.0 + "@webpack-cli/configtest": ^2.0.1 + "@webpack-cli/info": ^2.0.1 + "@webpack-cli/serve": ^2.0.2 + colorette: ^2.0.14 + commander: ^10.0.1 + cross-spawn: ^7.0.3 + envinfo: ^7.7.3 + fastest-levenshtein: ^1.0.12 + import-local: ^3.0.2 + interpret: ^3.1.1 + rechoir: ^0.8.0 + webpack-merge: ^5.7.3 + peerDependencies: + webpack: 5.x.x + peerDependenciesMeta: + "@webpack-cli/generators": + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + bin: + webpack-cli: bin/cli.js + checksum: 98816d84c51487b90e1008ddbcda8827dcb7ae9ab7892f4d742f0d7b93f90a4a18a6ec2671b380e5a7ee4b0917cf0c43921119419d8ba9e1b14ea060115684fd + languageName: node + linkType: hard + "webpack-dev-middleware@npm:^3.7.3": version: 3.7.3 resolution: "webpack-dev-middleware@npm:3.7.3" @@ -42091,6 +41697,43 @@ __metadata: languageName: node linkType: hard +"webpack@npm:~5.78.0": + version: 5.78.0 + resolution: "webpack@npm:5.78.0" + dependencies: + "@types/eslint-scope": ^3.7.3 + "@types/estree": ^0.0.51 + "@webassemblyjs/ast": 1.11.1 + "@webassemblyjs/wasm-edit": 1.11.1 + "@webassemblyjs/wasm-parser": 1.11.1 + acorn: ^8.7.1 + acorn-import-assertions: ^1.7.6 + browserslist: ^4.14.5 + chrome-trace-event: ^1.0.2 + enhanced-resolve: ^5.10.0 + es-module-lexer: ^0.9.0 + eslint-scope: 5.1.1 + events: ^3.2.0 + glob-to-regexp: ^0.4.1 + graceful-fs: ^4.2.9 + json-parse-even-better-errors: ^2.3.1 + loader-runner: ^4.2.0 + mime-types: ^2.1.27 + neo-async: ^2.6.2 + schema-utils: ^3.1.0 + tapable: ^2.1.1 + terser-webpack-plugin: ^5.1.3 + watchpack: ^2.4.0 + webpack-sources: ^3.2.3 + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: 4213e5bcc23e54c2f2a589e8e96f1fb71a2c05d5033ffda6dd8bae32284abfa0eb6b6d0707806e8dcfa48a8fcda2448d3af6c4539061679251d94c0996bebf99 + languageName: node + linkType: hard + "websocket-driver@npm:>=0.5.1, websocket-driver@npm:^0.7.4": version: 0.7.4 resolution: "websocket-driver@npm:0.7.4"