├── locales
├── en.json
├── de.json
├── nl.json
├── hu.json
├── ko.json
├── ar.json
├── fi.json
├── he.json
├── zh-hant.json
├── cs.json
├── el.json
├── es.json
├── eu.json
├── gl.json
├── it.json
├── lt.json
├── pl.json
├── pt.json
├── ru.json
├── sk.json
├── sl.json
├── sq.json
├── sv.json
├── th.json
├── ca.json
├── dsb.json
├── fr.json
├── hsb.json
├── ia.json
├── id.json
├── krc.json
├── mk.json
├── my.json
├── nb.json
├── pms.json
├── sd.json
├── ur.json
├── diq.json
├── kaa.json
├── oc.json
├── roa-tara.json
├── sc.json
├── scn.json
├── sw.json
├── ff.json
├── pt-br.json
├── zh-hans.json
├── uk.json
├── tr.json
├── bn.json
└── fa.json
├── .gitignore
├── CONTRIBUTING.md
├── templates
├── markdown_entry.ejs
└── exportcolumn.html
├── .eslintrc.cjs
├── .github
├── dependabot.yml
└── workflows
│ ├── test-and-release.yml
│ ├── npmpublish.yml
│ ├── backend-tests.yml
│ └── frontend-tests.yml
├── ep.json
├── express.ts
├── package.json
├── static
├── tests
│ ├── frontend
│ │ └── specs
│ │ │ └── test.js
│ └── backend
│ │ └── specs
│ │ └── api
│ │ └── exportHTML.ts
├── js
│ └── markdown.js
└── css
│ └── markdown.css
├── index.ts
├── README.md
├── .travis.yml
├── LICENSE
├── exportMarkdown.ts
└── pnpm-lock.yaml
/locales/en.json:
--------------------------------------------------------------------------------
1 | {
2 | "ep_markdown.showMarkdown" : "Show Markdown"
3 | }
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .cache.json
2 | .ep_initialized
3 | node_modules
4 | node_modules/
5 | .idea
--------------------------------------------------------------------------------
/locales/de.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": []
4 | },
5 | "ep_markdown.showMarkdown": "Markdown anzeigen"
6 | }
7 |
--------------------------------------------------------------------------------
/locales/nl.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": []
4 | },
5 | "ep_markdown.showMarkdown": "Toon Markdown"
6 | }
7 |
--------------------------------------------------------------------------------
/locales/hu.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": []
4 | },
5 | "ep_markdown.showMarkdown": "Markdown megjelenítése"
6 | }
7 |
--------------------------------------------------------------------------------
/locales/ko.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Ykhwong"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "마크다운 표시"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/ar.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Meno25"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "إظهار Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/fi.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Artnay"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Näytä Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/he.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "YaronSh"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "הצגת Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/zh-hant.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Kly"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "顯示 Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/cs.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Spotter"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Zobrazit Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/el.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Norhorn"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Εμφάνιση Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/es.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Ovruni"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Mostrar Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/eu.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Izendegi"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Erakutsi Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/gl.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Ghose"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Mostrar Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/it.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Albano"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Mostra Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/lt.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Nokeoo"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Rodyti žymėjimą"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/pl.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Usagi.02808"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Pokaż Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/pt.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Guilha"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Mostrar Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/ru.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Megakott"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Показать Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/sk.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Yardom78"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Zobraziť Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/sl.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Eleassar"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Prikaži Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/sq.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Besnik b"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Shfaq Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/sv.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Bengtsson96"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Visa Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/th.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Andibecker"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "แสดง Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/ca.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Mguix"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Visualització en Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/dsb.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Michawiki"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Markdown pokazaś"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/fr.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Verdy p"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Afficher en Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/hsb.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Michawiki"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Markdown pokazać"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/ia.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "McDutchie"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Monstrar Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/id.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Atriwidada"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Tampilkan Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/krc.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Къарачайлы"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Белгилеуню кёргюзт"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/mk.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Bjankuloski06"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Прикажи Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/my.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Andibecker"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Markdown ကိုပြပါ"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/nb.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Jon Harald Søby"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Vis markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/pms.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Borichèt"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Smon-e an Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/sd.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Mehtab ahmed"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "مارڪ ڊائون ڏيکاريو"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/ur.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Obaid Raza"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "مارک ڈاؤن دکھائیں"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/diq.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "1917 Ekim Devrimi"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Acêrê bımocne"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/kaa.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Inabat Allanova"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Belgini kórsetiw"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/oc.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Quentí"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Visualizacion en Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/roa-tara.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Joetaras"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "'Ndruche 'u markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/sc.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Adr mm"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Visualizatzione in Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/scn.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Ajeje Brazorf"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Ammustra Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/sw.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Andibecker"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Onyesha alama ya alama"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/ff.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Ibrahima Malal Sarr"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Hollu ɗaɗi ndernderei"
8 | }
9 |
--------------------------------------------------------------------------------
/locales/pt-br.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Duke of Wikipädia"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "Mostrar Markdown"
8 | }
9 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Auto publishing
2 | To publish a new version of this plugin to NPM just bump the version number in package.json and travis will auto publish for you.
3 |
--------------------------------------------------------------------------------
/locales/zh-hans.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Cosing",
5 | "列维劳德"
6 | ]
7 | },
8 | "ep_markdown.showMarkdown": "展示Markdown"
9 | }
10 |
--------------------------------------------------------------------------------
/locales/uk.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "DDPAT",
5 | "Ice bulldog"
6 | ]
7 | },
8 | "ep_markdown.showMarkdown": "Показати розмітку"
9 | }
10 |
--------------------------------------------------------------------------------
/locales/tr.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Hedda",
5 | "MuratTheTurkish"
6 | ]
7 | },
8 | "ep_markdown.showMarkdown": "İşaretlemeyi Göster"
9 | }
10 |
--------------------------------------------------------------------------------
/locales/bn.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Joysriramsarkar.manathetiger56",
5 | "জয়শ্রীরাম সরকার"
6 | ]
7 | },
8 | "ep_markdown.showMarkdown": "মার্কডাউন দেখুন"
9 | }
10 |
--------------------------------------------------------------------------------
/templates/markdown_entry.ejs:
--------------------------------------------------------------------------------
1 |
2 | >
3 |
4 |
5 |
--------------------------------------------------------------------------------
/locales/fa.json:
--------------------------------------------------------------------------------
1 | {
2 | "@metadata": {
3 | "authors": [
4 | "Darafsh"
5 | ]
6 | },
7 | "ep_markdown.showMarkdown": "پرونده خیلی بزرگ است. با مدیر سایت تماس بگیرید تا اندازهٔ مجاز برای وارد کردن پرونده را افزایش دهد."
8 | }
9 |
--------------------------------------------------------------------------------
/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | // This is a workaround for https://github.com/eslint/eslint/issues/3458
4 | require('eslint-config-etherpad/patch/modern-module-resolution');
5 |
6 | module.exports = {
7 | root: true,
8 | extends: 'etherpad/plugin',
9 | };
10 |
--------------------------------------------------------------------------------
/templates/exportcolumn.html:
--------------------------------------------------------------------------------
1 |
2 | Markdown
3 |
4 |
9 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: "github-actions"
4 | directory: "/"
5 | schedule:
6 | interval: "daily"
7 | - package-ecosystem: "npm"
8 | directory: "/"
9 | schedule:
10 | interval: "daily"
11 | versioning-strategy: "increase"
12 |
--------------------------------------------------------------------------------
/ep.json:
--------------------------------------------------------------------------------
1 | {
2 | "parts":[
3 | {
4 | "name": "markdown",
5 | "hooks":{
6 | "expressCreateServer": "ep_markdown/express",
7 | "eejsBlock_exportColumn": "ep_markdown/index",
8 | "eejsBlock_mySettings": "ep_markdown/index",
9 | "import": "ep_markdown/index"
10 | },
11 | "client_hooks": {
12 | "aceEditorCSS": "ep_markdown/static/js/markdown",
13 | "postAceInit": "ep_markdown/static/js/markdown"
14 | }
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/.github/workflows/test-and-release.yml:
--------------------------------------------------------------------------------
1 | name: Node.js Package
2 | on: [push]
3 |
4 |
5 | jobs:
6 | backend:
7 | uses: ./.github/workflows/backend-tests.yml
8 | secrets: inherit
9 | frontend:
10 | uses: ./.github/workflows/frontend-tests.yml
11 | secrets: inherit
12 | release:
13 | if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' }}
14 | needs:
15 | - backend
16 | - frontend
17 | uses: ./.github/workflows/npmpublish.yml
18 | secrets: inherit
19 |
--------------------------------------------------------------------------------
/express.ts:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const exportMarkdown = require('./exportMarkdown');
4 |
5 | exports.expressCreateServer = (hookName, {app}) => {
6 | app.get('/p/:padId/:revNum?/export/markdown', (req, res, next) => {
7 | (async () => {
8 | const {padId, revNum} = req.params;
9 | res.attachment(`${padId}.md`);
10 | res.contentType('plain/text');
11 | res.send(await exportMarkdown.getPadMarkdownDocument(padId, revNum));
12 | })().catch((err) => next(err || new Error(err)));
13 | });
14 | };
15 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ep_markdown",
3 | "description": "Edit and Export as Markdown in Etherpad",
4 | "version": "1.0.1",
5 | "author": {
6 | "name": "John McLear",
7 | "email": "john@mclear.co.uk",
8 | "url": "http://mclear.co.uk"
9 | },
10 | "repository": {
11 | "type": "git",
12 | "url": "https://github.com/ether/ep_markdown.git"
13 | },
14 | "dependencies": {
15 | "showdown": "*"
16 | },
17 | "contributors": [],
18 | "license": "Apache-2.0",
19 | "funding": {
20 | "type": "individual",
21 | "url": "https://etherpad.org/"
22 | },
23 | "devDependencies": {
24 | "eslint": "^8.57.0",
25 | "eslint-config-etherpad": "^4.0.4",
26 | "typescript": "^5.4.2",
27 | "@types/mocha": "^10.0.6",
28 | "@types/node": "^20.12.4"
29 | },
30 | "scripts": {
31 | "lint": "eslint .",
32 | "lint:fix": "eslint --fix ."
33 | },
34 | "engines": {
35 | "node": ">=18.0.0"
36 | },
37 | "peerDependenciesMeta": {
38 | "ep_headings2": {
39 | "optional": true
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/static/tests/frontend/specs/test.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | describe('Set formatting attributes and ensure ep_markdown displays properly', function () {
4 | // create a new pad before each test run
5 | beforeEach(async function () {
6 | this.timeout(60000);
7 | await helper.aNewPad();
8 | });
9 |
10 | it('Bold section is shown as **foo** when clicking Show Markdown', async function () {
11 | this.timeout(60000);
12 | const chrome$ = helper.padChrome$;
13 | const inner$ = helper.padInner$;
14 |
15 | const $editorContents = inner$('div');
16 |
17 | // clear pad
18 | $editorContents.sendkeys('{selectall}');
19 | inner$('div').first().sendkeys('bold');
20 | inner$('div').first().sendkeys('{selectall}');
21 | chrome$('.buttonicon-bold').click();
22 | chrome$('#options-markdown').click();
23 |
24 | await helper.waitForPromise(() => (inner$('div').first()[0].textContent === 'bold'));
25 |
26 | const hasMarkdown = inner$('body').hasClass('markdown');
27 | // TODO: Use a psuedo selector to ensure the value displayed to user is **bold**
28 | expect(hasMarkdown).to.be(true);
29 | });
30 | });
31 |
--------------------------------------------------------------------------------
/index.ts:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const eejs = require('ep_etherpad-lite/node/eejs');
4 | const settings = require('ep_etherpad-lite/node/utils/Settings');
5 | import {promises} from 'fs';
6 | const fsp = promises
7 |
8 | exports.eejsBlock_exportColumn = (hookName, context) => {
9 | context.content += eejs.require('./templates/exportcolumn.html', {}, module);
10 | };
11 |
12 | exports.eejsBlock_styles = (hookName, context) => {
13 | context.content += eejs.require('./templates/styles.html', {}, module);
14 | };
15 |
16 | exports.eejsBlock_mySettings = (hookName, context) => {
17 | let checkedState = 'unchecked';
18 | if (!settings.ep_markdown_default) {
19 | checkedState = 'unchecked';
20 | } else if (settings.ep_markdown_default === true) {
21 | checkedState = 'checked';
22 | }
23 | context.content +=
24 | eejs.require('./templates/markdown_entry.ejs', {checked: checkedState}, module);
25 | };
26 |
27 | exports.import = async (hookName, {destFile, fileEnding, srcFile}) => {
28 | if (fileEnding !== '.md') return;
29 |
30 | const markdown = await fsp.readFile(srcFile, 'utf8');
31 | const showdown = require('showdown');
32 | const converter = new showdown.Converter({completeHTMLDocument: true});
33 |
34 | const html = converter.makeHtml(markdown);
35 |
36 | await fsp.writeFile(destFile, html, 'utf8');
37 | return destFile;
38 | };
39 |
--------------------------------------------------------------------------------
/static/js/markdown.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | exports.postAceInit = (hookName, context) => {
4 | const padRootPath = new RegExp(/.*\/p\/[^/]+/)
5 | .exec(document.location.pathname) || clientVars.padId;
6 | $('#exportmarkdowna').attr('href', `${padRootPath}/export/markdown`);
7 |
8 | const enable = () => {
9 | // add css class markdown
10 | $('iframe[name="ace_outer"]').contents().find('iframe')
11 | .contents().find('#innerdocbody').addClass('markdown');
12 | $('#underline').hide(); // no markdown support for these
13 | $('#strikethrough').hide();
14 | };
15 | const disable = () => {
16 | // add css class markdown
17 | $('iframe[name="ace_outer"]').contents().find('iframe')
18 | .contents().find('#innerdocbody').removeClass('markdown');
19 | $('#underline').removeAttr('style'); // no markdown support for these
20 | $('#strikethrough').removeAttr('style');
21 | };
22 |
23 | /* init */
24 | if ($('#options-markdown').is(':checked')) {
25 | enable();
26 | } else {
27 | disable();
28 | }
29 | /* on click */
30 | $('#options-markdown').on('click', () => {
31 | if ($('#options-markdown').is(':checked')) {
32 | enable();
33 | } else {
34 | disable();
35 | }
36 | });
37 | };
38 |
39 | // inner pad CSS
40 | exports.aceEditorCSS = (hookName, context) => ['/ep_markdown/static/css/markdown.css'];
41 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |  
2 |
3 | Markdown editing in Etherpad
4 | ============================
5 |
6 | 
7 |
8 | Features
9 | ========
10 |
11 | * Use the normal editbar buttons to add markdown.
12 | * Import as Markdown (automatically applies styling / text attributes).
13 | * Export as Markdown.
14 | * Localizations.
15 |
16 | Usage
17 | =====
18 |
19 | To enable Markdown view click Settings -> Markdown
20 |
21 | Limitations
22 | ===========
23 | This plugin is not designed for you to write Markdown and it format that markdown with styling. So you can't expect to type \*\*blah\*\* and expect to see blah in bold. You can however type blah, set it as bold and then click "Show as Markdown" and it will show \*\*bold\*\*. I will not be adding support for supporting typing in markdown which will render to a style because it will be impossible to handle character control.
24 |
25 | Setting as default
26 | ==================
27 |
28 | Paste the below into your settings.
29 |
30 | "ep_markdown_default": true,
31 |
32 | Todo
33 | ====
34 | * Support ALL styles fully (please let me know what does / doesn't work)
35 | * Create markdown icon for export menu
36 | * Better code block support (currently it's line by line)
37 | * Import Markdown (and it applies formatting automatically)
38 |
39 | Requirements
40 | ============
41 |
42 | Etherpad 1.8.1
43 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 |
3 | node_js:
4 | - "lts/*"
5 |
6 | cache: false
7 |
8 | services:
9 | - docker
10 |
11 | install:
12 | - "export GIT_HASH=$(git rev-parse --verify --short HEAD)"
13 |
14 | #script:
15 | # - "tests/frontend/travis/runner.sh"
16 |
17 | env:
18 | global:
19 | - secure: "WMGxFkOeTTlhWB+ChMucRtIqVmMbwzYdNHuHQjKCcj8HBEPdZLfCuK/kf4rG\nVLcLQiIsyllqzNhBGVHG1nyqWr0/LTm8JRqSCDDVIhpyzp9KpCJQQJG2Uwjk\n6/HIJJh/wbxsEdLNV2crYU/EiVO3A4Bq0YTHUlbhUqG3mSCr5Ec="
20 | - secure: "gejXUAHYscbR6Bodw35XexpToqWkv2ifeECsbeEmjaLkYzXmUUNWJGknKSu7\nEUsSfQV8w+hxApr1Z+jNqk9aX3K1I4btL3cwk2trnNI8XRAvu1c1Iv60eerI\nkE82Rsd5lwUaMEh+/HoL8ztFCZamVndoNgX7HWp5J/NRZZMmh4g="
21 |
22 | jobs:
23 | include:
24 | - name: "Lint test package-lock"
25 | install:
26 | - "npm install lockfile-lint"
27 | script:
28 | - npx lockfile-lint --path package-lock.json --validate-https --allowed-hosts npm
29 | - name: "Run the Backend tests"
30 | before_install:
31 | - sudo add-apt-repository -y ppa:libreoffice/ppa
32 | - sudo apt-get update
33 | - sudo apt-get -y install libreoffice
34 | - sudo apt-get -y install libreoffice-pdfimport
35 | install:
36 | - "npm install"
37 | - "mkdir ep_markdown"
38 | - "mv !(ep_markdown) ep_markdown"
39 | - "git clone https://github.com/ether/etherpad-lite.git etherpad"
40 | - "cd etherpad"
41 | - "mkdir -p node_modules"
42 | - "mv ../ep_markdown node_modules"
43 | - "bin/installDeps.sh"
44 | - "export GIT_HASH=$(git rev-parse --verify --short HEAD)"
45 | - "cd src && npm install && cd -"
46 | script:
47 | - "tests/frontend/travis/runnerBackend.sh"
48 | - name: "Test the Frontend"
49 | before_script:
50 | - "tests/frontend/travis/sauce_tunnel.sh"
51 | install:
52 | - "npm install"
53 | - "mkdir ep_markdown"
54 | - "mv !(ep_markdown) ep_markdown"
55 | - "git clone https://github.com/ether/etherpad-lite.git etherpad"
56 | - "cd etherpad"
57 | - "mkdir -p node_modules"
58 | - "mv ../ep_markdown node_modules"
59 | - "bin/installDeps.sh"
60 | - "export GIT_HASH=$(git rev-parse --verify --short HEAD)"
61 | script:
62 | - "tests/frontend/travis/runner.sh"
63 |
64 | notifications:
65 | irc:
66 | channels:
67 | - "irc.freenode.org#etherpad-lite-dev"
68 |
69 | ##ETHERPAD_TRAVIS_V=9
70 | ## Travis configuration automatically created using bin/plugins/updateAllPluginsScript.sh
71 |
--------------------------------------------------------------------------------
/static/tests/backend/specs/api/exportHTML.ts:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const common = require('ep_etherpad-lite/tests/backend/common');
4 | const randomString = require('ep_etherpad-lite/static/js/pad_utils').randomString;
5 | import {generateJWTToken} from "ep_etherpad-lite/tests/backend/common";
6 |
7 | let agent;
8 | const apiVersion = 1;
9 |
10 | const getMarkdownEndPointFor = (padID: string) => `/p/${padID}/export/markdown`;
11 |
12 | const buildHTML = (body: string) => `${body}`;
13 |
14 | // Creates a pad and returns the pad id. Calls the callback when finished.
15 | const createPad = async (padID: string) => {
16 | const res = await agent.get(`/api/${apiVersion}/createPad?padID=${padID}`)
17 | .set("Authorization", await generateJWTToken())
18 | return new Promise((resolve, reject) => {
19 | if (res.body.code !== 0) {
20 | reject(new Error('Unable to create new Pad'));
21 | } else {
22 | resolve(padID);
23 | }
24 | })
25 | };
26 |
27 | const setHTML = async (padID: string, html: string) => {
28 | const newHtml = `/api/${apiVersion}/setHTML?padID=${padID}&html=${html}`
29 | console.log("New HTML is",newHtml)
30 | const res = await agent.get(newHtml)
31 | .set("Authorization", await generateJWTToken())
32 | console.log("Res is",res.body)
33 | return new Promise((resolve, reject) => {
34 | if (res.body.code !== 0) {
35 | reject(new Error('Unable to set pad HTML'));
36 | } else {
37 | resolve(padID);
38 | }
39 | })
40 | };
41 |
42 | describe('Import and Export markdown', function () {
43 | let padID: string;
44 | let html: Function;
45 |
46 | before(async function () { agent = await common.init(); });
47 |
48 | // create a new pad before each test run
49 | beforeEach(async function () {
50 | padID = randomString(5);
51 | await createPad(padID);
52 | await setHTML(padID, html());
53 | });
54 |
55 | describe('when text has formatting', function () {
56 | before(async function () {
57 | html = () => buildHTML(
58 | 'italicbold- derp2
underline');
59 | });
60 |
61 | it('returns ok', async function () {
62 | await agent
63 | .get(getMarkdownEndPointFor(padID))
64 | .set("Authorization", await generateJWTToken())
65 | .expect(200);
66 | });
67 |
68 | it('returns Markdown correctly', async function () {
69 | const res = await agent
70 | .get(getMarkdownEndPointFor(padID))
71 | .set("Authorization", await generateJWTToken())
72 | const markdown = res.text;
73 | if (markdown.indexOf('*italic*') === -1) throw new Error('Unable to export italic');
74 | if (markdown.indexOf('**bold**') === -1) throw new Error('Unable to export bold');
75 | if (markdown.indexOf('* derp') === -1) throw new Error('Unable to export UL');
76 | if (markdown.indexOf('[]underline[]') === -1) {
77 | throw new Error('Unable to export underline');
78 | }
79 | });
80 | });
81 | });
82 |
--------------------------------------------------------------------------------
/.github/workflows/npmpublish.yml:
--------------------------------------------------------------------------------
1 | # This workflow will run tests using node and then publish a package to the npm registry when a release is created
2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages
3 |
4 | name: Node.js Package
5 |
6 | on:
7 | workflow_call:
8 |
9 | jobs:
10 | publish-npm:
11 | runs-on: ubuntu-latest
12 | steps:
13 | - uses: actions/setup-node@v4
14 | with:
15 | node-version: 20
16 | registry-url: https://registry.npmjs.org/
17 | - name: Check out Etherpad core
18 | uses: actions/checkout@v3
19 | with:
20 | repository: ether/etherpad-lite
21 | - uses: pnpm/action-setup@v3
22 | name: Install pnpm
23 | with:
24 | version: 8
25 | run_install: false
26 | - name: Get pnpm store directory
27 | shell: bash
28 | run: |
29 | echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
30 | - uses: actions/cache@v4
31 | name: Setup pnpm cache
32 | with:
33 | path: ${{ env.STORE_PATH }}
34 | key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
35 | restore-keys: |
36 | ${{ runner.os }}-pnpm-store-
37 | -
38 | uses: actions/checkout@v3
39 | with:
40 | fetch-depth: 0
41 | -
42 | name: Bump version (patch)
43 | run: |
44 | LATEST_TAG=$(git describe --tags --abbrev=0) || exit 1
45 | NEW_COMMITS=$(git rev-list --count "${LATEST_TAG}"..) || exit 1
46 | [ "${NEW_COMMITS}" -gt 0 ] || exit 0
47 | git config user.name 'github-actions[bot]'
48 | git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
49 | pnpm i
50 | pnpm version patch
51 | git push --follow-tags
52 | # This is required if the package has a prepare script that uses something
53 | # in dependencies or devDependencies.
54 | -
55 | run: pnpm i
56 | # `npm publish` must come after `git push` otherwise there is a race
57 | # condition: If two PRs are merged back-to-back then master/main will be
58 | # updated with the commits from the second PR before the first PR's
59 | # workflow has a chance to push the commit generated by `npm version
60 | # patch`. This causes the first PR's `git push` step to fail after the
61 | # package has already been published, which in turn will cause all future
62 | # workflow runs to fail because they will all attempt to use the same
63 | # already-used version number. By running `npm publish` after `git push`,
64 | # back-to-back merges will cause the first merge's workflow to fail but
65 | # the second's will succeed.
66 | -
67 | run: pnpm publish
68 | env:
69 | NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
70 | #-
71 | # name: Add package to etherpad organization
72 | # run: pnpm access grant read-write etherpad:developers
73 | # env:
74 | # NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
75 |
--------------------------------------------------------------------------------
/.github/workflows/backend-tests.yml:
--------------------------------------------------------------------------------
1 | name: Backend Tests
2 |
3 | # any branch is useful for testing before a PR is submitted
4 | on:
5 | workflow_call:
6 |
7 | jobs:
8 | withplugins:
9 | # run on pushes to any branch
10 | # run on PRs from external forks
11 | if: |
12 | (github.event_name != 'pull_request')
13 | || (github.event.pull_request.head.repo.id != github.event.pull_request.base.repo.id)
14 | name: with Plugins
15 | runs-on: ubuntu-latest
16 | steps:
17 | -
18 | name: Install libreoffice
19 | uses: awalsh128/cache-apt-pkgs-action@v1.4.2
20 | with:
21 | packages: libreoffice libreoffice-pdfimport
22 | version: 1.0
23 | -
24 | name: Install etherpad core
25 | uses: actions/checkout@v3
26 | with:
27 | repository: ether/etherpad-lite
28 | path: etherpad-lite
29 | - uses: pnpm/action-setup@v3
30 | name: Install pnpm
31 | with:
32 | version: 8
33 | run_install: false
34 | - name: Get pnpm store directory
35 | shell: bash
36 | run: |
37 | echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
38 | - uses: actions/cache@v4
39 | name: Setup pnpm cache
40 | with:
41 | path: ${{ env.STORE_PATH }}
42 | key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
43 | restore-keys: |
44 | ${{ runner.os }}-pnpm-store-
45 | -
46 | name: Checkout plugin repository
47 | uses: actions/checkout@v3
48 | with:
49 | path: plugin
50 | -
51 | name: Determine plugin name
52 | id: plugin_name
53 | working-directory: ./plugin
54 | run: |
55 | npx -c 'printf %s\\n "::set-output name=plugin_name::${npm_package_name}"'
56 | -
57 | name: Link plugin directory
58 | working-directory: ./plugin
59 | run: |
60 | pnpm link --global
61 | - name: Remove tests
62 | working-directory: ./etherpad-lite
63 | run: rm -rf ./src/tests/backend/specs
64 | -
65 | name: Install Etherpad core dependencies
66 | working-directory: ./etherpad-lite
67 | run: bin/installDeps.sh
68 | - name: Link plugin to etherpad-lite
69 | working-directory: ./etherpad-lite
70 | run: |
71 | pnpm link --global $PLUGIN_NAME
72 | pnpm run install-plugins --path ../../plugin
73 | env:
74 | PLUGIN_NAME: ${{ steps.plugin_name.outputs.plugin_name }}
75 | - name: Link ep_etherpad-lite
76 | working-directory: ./etherpad-lite/src
77 | run: |
78 | pnpm link --global
79 | - name: Link etherpad to plugin
80 | working-directory: ./plugin
81 | run: |
82 | pnpm link --global ep_etherpad-lite
83 | -
84 | name: Run the backend tests
85 | working-directory: ./etherpad-lite
86 | run: |
87 | res=$(find .. -path "./node_modules/ep_*/static/tests/backend/specs/**" | wc -l)
88 | if [ $res -eq 0 ]; then
89 | echo "No backend tests found"
90 | else
91 | pnpm run test
92 | fi
93 |
--------------------------------------------------------------------------------
/.github/workflows/frontend-tests.yml:
--------------------------------------------------------------------------------
1 | # Publicly credit Sauce Labs because they generously support open source
2 | # projects.
3 | name: Frontend Tests
4 |
5 | on:
6 | workflow_call:
7 |
8 | jobs:
9 | test-frontend:
10 | runs-on: ubuntu-latest
11 |
12 | steps:
13 | -
14 | name: Check out Etherpad core
15 | uses: actions/checkout@v3
16 | with:
17 | repository: ether/etherpad-lite
18 | - uses: pnpm/action-setup@v3
19 | name: Install pnpm
20 | with:
21 | version: 8
22 | run_install: false
23 | - name: Get pnpm store directory
24 | shell: bash
25 | run: |
26 | echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
27 | - uses: actions/cache@v4
28 | name: Setup pnpm cache
29 | with:
30 | path: ${{ env.STORE_PATH }}
31 | key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
32 | restore-keys: |
33 | ${{ runner.os }}-pnpm-store-
34 | -
35 | name: Check out the plugin
36 | uses: actions/checkout@v3
37 | with:
38 | path: ./node_modules/__tmp
39 | -
40 | name: export GIT_HASH to env
41 | id: environment
42 | run: |
43 | cd ./node_modules/__tmp
44 | echo "::set-output name=sha_short::$(git rev-parse --short ${{ github.sha }})"
45 | -
46 | name: Determine plugin name
47 | id: plugin_name
48 | run: |
49 | cd ./node_modules/__tmp
50 | npx -c 'printf %s\\n "::set-output name=plugin_name::${npm_package_name}"'
51 | -
52 | name: Rename plugin directory
53 | env:
54 | PLUGIN_NAME: ${{ steps.plugin_name.outputs.plugin_name }}
55 | run: |
56 | mv ./node_modules/__tmp ./node_modules/"${PLUGIN_NAME}"
57 | -
58 | name: Install plugin dependencies
59 | env:
60 | PLUGIN_NAME: ${{ steps.plugin_name.outputs.plugin_name }}
61 | run: |
62 | cd ./node_modules/"${PLUGIN_NAME}"
63 | pnpm i
64 | # Etherpad core dependencies must be installed after installing the
65 | # plugin's dependencies, otherwise npm will try to hoist common
66 | # dependencies by removing them from src/node_modules and installing them
67 | # in the top-level node_modules. As of v6.14.10, npm's hoist logic appears
68 | # to be buggy, because it sometimes removes dependencies from
69 | # src/node_modules but fails to add them to the top-level node_modules.
70 | # Even if npm correctly hoists the dependencies, the hoisting seems to
71 | # confuse tools such as `npm outdated`, `npm update`, and some ESLint
72 | # rules.
73 | -
74 | name: Install Etherpad core dependencies
75 | run: bin/installDeps.sh
76 | - name: Create settings.json
77 | run: cp ./src/tests/settings.json settings.json
78 | - name: Run the frontend tests
79 | shell: bash
80 | run: |
81 | pnpm run dev &
82 | connected=false
83 | can_connect() {
84 | curl -sSfo /dev/null http://localhost:9001/ || return 1
85 | connected=true
86 | }
87 | now() { date +%s; }
88 | start=$(now)
89 | while [ $(($(now) - $start)) -le 15 ] && ! can_connect; do
90 | sleep 1
91 | done
92 | cd src
93 | pnpm exec playwright install chromium --with-deps
94 | pnpm run test-ui --project=chromium
95 |
--------------------------------------------------------------------------------
/static/css/markdown.css:
--------------------------------------------------------------------------------
1 | /* from https://raw.github.com/mrcoles/markdown-css/master/markdown.css */
2 |
3 | .markdown {
4 | word-wrap: break-word;
5 | }
6 | .markdown,
7 | .markdown h1,
8 | .markdown h2,
9 | .markdown h3,
10 | .markdown h4,
11 | .markdown h5,
12 | .markdown h6,
13 | .markdown pre,
14 | .markdown code,
15 | .markdown blockquote,
16 | .markdown em,
17 | .markdown strong,
18 | .markdown code {
19 | font-size: 14px;
20 | line-height: 20px;
21 | font-weight: normal;
22 | font-style: normal;
23 | font-family: consolas, monaco, courier, "courier new", fixed-width;
24 | color: #333333;
25 | }
26 | .markdown h1,
27 | .markdown h2,
28 | .markdown h3,
29 | .markdown h4,
30 | .markdown h5,
31 | .markdown h6,
32 | .markdown pre,
33 | .markdown code,
34 | .markdown blockquote,
35 | .markdown ol,
36 | .markdown ul,
37 | .markdown li,
38 | .markdown p,
39 | .markdown section,
40 | .markdown header,
41 | .markdown footer {
42 | float: none;
43 | margin: 0;
44 | padding: 0;
45 | }
46 | .markdown h1,
47 | .markdown p,
48 | .markdown ul,
49 | .markdown ol,
50 | .markdown pre,
51 | .markdown blockquote {
52 | margin-top: 20px;
53 | margin-bottom: 20px;
54 | }
55 | .markdown h1 {
56 | position: relative;
57 | display: inline-block;
58 | display: table-cell;
59 | padding: 20px 0 40px;
60 | margin: 0;
61 | overflow: hidden;
62 | }
63 | /*
64 | .markdown h1:after {
65 | content: "====================================================================================================";
66 | position: absolute;
67 | bottom: 20px;
68 | left: 0;
69 | }
70 | */
71 | .markdown h1 + * {
72 | margin-top: 0;
73 | }
74 | .markdown h2,
75 | .markdown h3,
76 | .markdown h4,
77 | .markdown h5,
78 | .markdown h6 {
79 | position: relative;
80 | margin-bottom: 20px;
81 | }
82 | .markdown h1:before{
83 | content: "# ";
84 | display: inline;
85 | }
86 | .markdown h2:before,
87 | .markdown h3:before,
88 | .markdown h4:before,
89 | .markdown h5:before,
90 | .markdown h6:before {
91 | content: "## ";
92 | display: inline;
93 | }
94 | .markdown h3:before {
95 | content: "### ";
96 | }
97 | .markdown h4:before {
98 | content: "#### ";
99 | }
100 | .markdown h5:before {
101 | content: "##### ";
102 | }
103 | .markdown h6:before {
104 | content: "###### ";
105 | }
106 | .markdown li {
107 | position: relative;
108 | display: block;
109 | padding-left: 34px;
110 | padding-left: 4ch;
111 | }
112 | .markdown li:after {
113 | position: absolute;
114 | top: 0;
115 | left: 0;
116 | }
117 | .markdown ul > li:after {
118 | content: "*";
119 | }
120 | .markdown ol {
121 | counter-reset: ol;
122 | }
123 | .markdown ol > li:after {
124 | content: counter(ol) ".";
125 | counter-increment: ol;
126 | }
127 | .markdown pre {
128 | margin-left: 34px;
129 | padding-left: 4ch;
130 | }
131 | .markdown blockquote {
132 | position: relative;
133 | padding-left: 17px;
134 | padding-left: 2ch;
135 | overflow: hidden;
136 | }
137 | .markdown blockquote:after {
138 | content: ">\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>";
139 | white-space: pre;
140 | position: absolute;
141 | top: 0;
142 | left: 0;
143 | font-size: 14px;
144 | line-height: 20px;
145 | }
146 | .markdown strong:before,
147 | .markdown strong:after {
148 | content: "__";
149 | display: inline;
150 | }
151 | .markdown em:before,
152 | .markdown em:after {
153 | content: "*";
154 | display: inline;
155 | }
156 | .markdown a {
157 | text-decoration: none;
158 | }
159 | .markdown a:before {
160 | content: "[";
161 | display: inline;
162 | color: #333333;
163 | }
164 | .markdown a:after {
165 | content: "](" attr(href) ")";
166 | display: inline;
167 | color: #333333;
168 | }
169 | .markdown code {
170 | font-weight: 100;
171 | }
172 | .markdown code:before{
173 | content: "\00a0\00a0\00a0\00a0";
174 | display: inline;
175 | }
176 | .markdown pre code:before,
177 | .markdown pre code:after {
178 | content: none;
179 | }
180 | .markdown hr {
181 | position: relative;
182 | height: 20px;
183 | font-size: 0;
184 | line-height: 0;
185 | overflow: hidden;
186 | border: 0;
187 | margin-bottom: 20px;
188 | }
189 | .markdown hr:after {
190 | content: "----------------------------------------------------------------------------------------------------";
191 | position: absolute;
192 | top: 0;
193 | left: 0;
194 | font-size: 14px;
195 | line-height: 20px;
196 | width: 100%;
197 | word-wrap: break-word;
198 | }
199 | @-moz-document url-prefix() {
200 | .markdown h1 {
201 | display: block;
202 | }
203 | }
204 | .markdown-ones ol > li:after {
205 | content: "1.";
206 | }
207 |
208 | /* Additional styles added by John McLear for Etherpad */
209 |
210 | .markdown b:before{
211 | content: "**"
212 | }
213 | .markdown b:after{
214 | content: "**"
215 | }
216 |
217 | .markdown i:before{
218 | content: "*"
219 | }
220 | .markdown i:after{
221 | content: "*"
222 | }
223 |
224 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 |
2 | Apache License, Version 2.0
3 |
4 | Apache License
5 | Version 2.0, January 2004
6 | http://www.apache.org/licenses/
7 |
8 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
9 |
10 | 1. Definitions.
11 |
12 | "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
13 |
14 | "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
15 |
16 | "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
17 |
18 | "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
19 |
20 | "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
21 |
22 | "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
23 |
24 | "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
25 |
26 | "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
27 |
28 | "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
29 |
30 | "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
31 |
32 | 2. Grant of Copyright License.
33 |
34 | Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
35 |
36 | 3. Grant of Patent License.
37 |
38 | Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
39 |
40 | 4. Redistribution.
41 |
42 | You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
43 |
44 | You must give any other recipients of the Work or Derivative Works a copy of this License; and
45 | You must cause any modified files to carry prominent notices stating that You changed the files; and
46 | You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
47 | If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
48 |
49 | You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
50 |
51 | 5. Submission of Contributions.
52 |
53 | Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
54 |
55 | 6. Trademarks.
56 |
57 | This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
58 |
59 | 7. Disclaimer of Warranty.
60 |
61 | Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
62 |
63 | 8. Limitation of Liability.
64 |
65 | In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
66 |
67 | 9. Accepting Warranty or Additional Liability.
68 |
69 | While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
70 |
71 | END OF TERMS AND CONDITIONS
72 |
73 | APPENDIX: How to apply the Apache License to your work
74 |
75 | To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
76 |
77 | Copyright [yyyy] [name of copyright owner]
78 |
79 | Licensed under the Apache License, Version 2.0 (the "License");
80 | you may not use this file except in compliance with the License.
81 | You may obtain a copy of the License at
82 |
83 | http://www.apache.org/licenses/LICENSE-2.0
84 |
85 | Unless required by applicable law or agreed to in writing, software
86 | distributed under the License is distributed on an "AS IS" BASIS,
87 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
88 | See the License for the specific language governing permissions and
89 | limitations under the License.
90 |
--------------------------------------------------------------------------------
/exportMarkdown.ts:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 |
4 | import {splitAttributionLines, opIterator,subattribution,eachAttribNumber, opAttributeValue} from 'ep_etherpad-lite/static/js/Changeset'
5 | import {StringIterator} from 'ep_etherpad-lite/static/js/StringIterator'
6 | import {StringAssembler} from 'ep_etherpad-lite/static/js/StringAssembler'
7 |
8 | const padManager = require('ep_etherpad-lite/node/db/PadManager');
9 |
10 | const getMarkdownFromAtext = (pad, atext) => {
11 | const apool = pad.apool();
12 | const textLines = atext.text.slice(0, -1).split('\n');
13 | const attribLines = splitAttributionLines(atext.attribs, atext.text);
14 | const tags = ['**', '*', '[]', '~~'];
15 | const props = ['bold', 'italic', 'underline', 'strikethrough'];
16 | const anumMap = {};
17 |
18 | props.forEach((propName, i) => {
19 | const propTrueNum = apool.putAttrib([propName, true], true);
20 | if (propTrueNum >= 0) {
21 | anumMap[propTrueNum] = i;
22 | }
23 | });
24 |
25 | const headingtags = ['# ', '## ', '### ', '#### ', '##### ', '###### ', ' '];
26 | const headingprops = [
27 | ['heading', 'h1'],
28 | ['heading', 'h2'],
29 | ['heading', 'h3'],
30 | ['heading', 'h4'],
31 | ['heading', 'h5'],
32 | ['heading', 'h6'],
33 | ['heading', 'code'],
34 | ];
35 | const headinganumMap = {};
36 |
37 | headingprops.forEach((prop, i) => {
38 | let name;
39 | let value;
40 | if (typeof prop === 'object') {
41 | name = prop[0];
42 | value = prop[1];
43 | } else {
44 | name = prop;
45 | value = true;
46 | }
47 | const propTrueNum = apool.putAttrib([name, value], true);
48 | if (propTrueNum >= 0) {
49 | headinganumMap[propTrueNum] = i;
50 | }
51 | });
52 |
53 | const getLineMarkdown = (text, attribs) => {
54 | const propVals = [false, false, false];
55 | const ENTER = 1;
56 | const STAY = 2;
57 | const LEAVE = 0;
58 |
59 | // Use order of tags (b/i/u) as order of nesting, for simplicity
60 | // and decent nesting. For example,
61 | // Just bold Bold and italics Just italics
62 | // becomes
63 | // Just bold Bold and italics Just italics
64 | const taker = new StringIterator(text);
65 | let assem = new StringAssembler();
66 |
67 | const openTags = [];
68 | const emitOpenTag = (i) => {
69 | openTags.unshift(i);
70 | assem.append(tags[i]);
71 | };
72 |
73 | const emitCloseTag = (i) => {
74 | openTags.shift();
75 | assem.append(tags[i]);
76 | };
77 |
78 | const orderdCloseTags = (tags2close) => {
79 | for (let i = 0; i < openTags.length; i++) {
80 | for (let j = 0; j < tags2close.length; j++) {
81 | if (tags2close[j] === openTags[i]) {
82 | emitCloseTag(tags2close[j]);
83 | i--;
84 | break;
85 | }
86 | }
87 | }
88 | };
89 |
90 | // start heading check
91 | let heading = false;
92 | let deletedAsterisk = false; // we need to delete * from the beginning of the heading line
93 | const iter2 = opIterator(subattribution(attribs, 0, 1));
94 | if (iter2.hasNext()) {
95 | const o2 = iter2.next();
96 |
97 | // iterate through attributes
98 | eachAttribNumber(o2.attribs, (a) => {
99 | if (a in headinganumMap) {
100 | const i = headinganumMap[a]; // i = 0 => bold, etc.
101 | heading = headingtags[i];
102 | }
103 | });
104 | }
105 |
106 | if (heading) {
107 | assem.append(heading);
108 | }
109 |
110 | const urls = _findURLs(text);
111 |
112 | let idx = 0;
113 |
114 | const processNextChars = (numChars) => {
115 | if (numChars <= 0) {
116 | return;
117 | }
118 |
119 | const iter = opIterator(subattribution(attribs, idx, idx + numChars));
120 | idx += numChars;
121 |
122 | while (iter.hasNext()) {
123 | const o = iter.next();
124 | let propChanged = false;
125 | eachAttribNumber(o.attribs, (a) => {
126 | if (a in anumMap) {
127 | const i = anumMap[a]; // i = 0 => bold, etc.
128 | if (!propVals[i]) {
129 | propVals[i] = ENTER;
130 | propChanged = true;
131 | } else {
132 | propVals[i] = STAY;
133 | }
134 | }
135 | });
136 | for (let i = 0; i < propVals.length; i++) {
137 | if (propVals[i] === true) {
138 | propVals[i] = LEAVE;
139 | propChanged = true;
140 | } else if (propVals[i] === STAY) {
141 | propVals[i] = true; // set it back
142 | }
143 | }
144 |
145 | // now each member of propVal is in {false,LEAVE,ENTER,true}
146 | // according to what happens at start of span
147 | if (propChanged) {
148 | // leaving bold (e.g.) also leaves italics, etc.
149 | let left = false;
150 | for (let i = 0; i < propVals.length; i++) {
151 | const v = propVals[i];
152 | if (!left) {
153 | if (v === LEAVE) {
154 | left = true;
155 | }
156 | } else if (v === true) {
157 | propVals[i] = STAY; // tag will be closed and re-opened
158 | }
159 | }
160 |
161 | const tags2close = [];
162 |
163 | for (let i = propVals.length - 1; i >= 0; i--) {
164 | if (propVals[i] === LEAVE) {
165 | // emitCloseTag(i);
166 | tags2close.push(i);
167 | propVals[i] = false;
168 | } else if (propVals[i] === STAY) {
169 | // emitCloseTag(i);
170 | tags2close.push(i);
171 | }
172 | }
173 |
174 | orderdCloseTags(tags2close);
175 |
176 | for (let i = 0; i < propVals.length; i++) {
177 | if (propVals[i] === ENTER || propVals[i] === STAY) {
178 | emitOpenTag(i);
179 | propVals[i] = true;
180 | }
181 | }
182 | // propVals is now all {true,false} again
183 | } // end if (propChanged)
184 | let chars = o.chars;
185 | if (o.lines) {
186 | chars--; // exclude newline at end of line, if present
187 | }
188 |
189 | let s = taker.take(chars);
190 |
191 | // removes the characters with the code 12. Don't know where they come
192 | // from but they break the abiword parser and are completly useless
193 | s = s.replace(String.fromCharCode(12), '');
194 |
195 | // delete * if this line is a heading
196 | if (heading && !deletedAsterisk) {
197 | s = s.substring(1);
198 | deletedAsterisk = true;
199 | }
200 |
201 | assem.append(s);
202 | } // end iteration over spans in line
203 |
204 | const tags2close = [];
205 | for (let i = propVals.length - 1; i >= 0; i--) {
206 | if (propVals[i]) {
207 | tags2close.push(i);
208 | propVals[i] = false;
209 | }
210 | }
211 |
212 | orderdCloseTags(tags2close);
213 | }; // end processNextChars
214 |
215 | if (urls) {
216 | urls.forEach((urlData) => {
217 | const startIndex = urlData[0];
218 | const url = urlData[1];
219 | const urlLength = url.length;
220 | processNextChars(startIndex - idx);
221 | assem.append(`[${url}](`);
222 | processNextChars(urlLength);
223 | assem.append(')');
224 | });
225 | }
226 |
227 | processNextChars(text.length - idx);
228 |
229 | // replace &, _
230 | assem = assem.toString();
231 | assem = assem.replace(/&/g, '\\&');
232 | // this breaks Markdown math mode: $\sum_i^j$ becomes $\sum\_i^j$
233 | assem = assem.replace(/_/g, '\\_');
234 |
235 | return assem;
236 | };
237 | // end getLineMarkdown
238 | const pieces = [];
239 |
240 | // Need to deal with constraints imposed on HTML lists; can
241 | // only gain one level of nesting at once, can't change type
242 | // mid-list, etc.
243 | // People might use weird indenting, e.g. skip a level,
244 | // so we want to do something reasonable there. We also
245 | // want to deal gracefully with blank lines.
246 | // => keeps track of the parents level of indentation
247 | const lists = []; // e.g. [[1,'bullet'], [3,'bullet'], ...]
248 | for (let i = 0; i < textLines.length; i++) {
249 | const line = _analyzeLine(textLines[i], attribLines[i], apool);
250 | const lineContent = getLineMarkdown(line.text, line.aline);
251 |
252 | // If we are inside a list
253 | if (line.listLevel) {
254 | // do list stuff
255 | let whichList = -1; // index into lists or -1
256 | if (line.listLevel) {
257 | whichList = lists.length;
258 | for (let j = lists.length - 1; j >= 0; j--) {
259 | if (line.listLevel <= lists[j][0]) {
260 | whichList = j;
261 | }
262 | }
263 | }
264 |
265 | // means we are on a deeper level of indentation than the
266 | // previous line
267 | if (whichList >= lists.length) {
268 | lists.push([line.listLevel, line.listTypeName]);
269 | }
270 |
271 | if (line.listTypeName === 'number') {
272 | pieces.push(`\n${(new Array(line.listLevel * 4))
273 | .join(' ')}1. `, lineContent || '\n'); // problem here
274 | } else {
275 | pieces.push(`\n${(new Array(line.listLevel * 4))
276 | .join(' ')}* `, lineContent || '\n'); // problem here
277 | }
278 | } else {
279 | // outside any list
280 | pieces.push('\n', lineContent, '\n');
281 | }
282 | }
283 | return pieces.join('');
284 | };
285 |
286 | const _analyzeLine = (text, aline, apool) => {
287 | const line = {};
288 |
289 | // identify list
290 | let lineMarker = 0;
291 | line.listLevel = 0;
292 | if (aline) {
293 | const opIter = opIterator(aline);
294 | if (opIter.hasNext()) {
295 | let listType = opAttributeValue(opIter.next(), 'list', apool);
296 | if (listType) {
297 | lineMarker = 1;
298 | listType = /([a-z]+)([12345678])/.exec(listType);
299 | if (listType) {
300 | line.listTypeName = listType[1];
301 | line.listLevel = Number(listType[2]);
302 | }
303 | }
304 | }
305 | }
306 | if (lineMarker) {
307 | line.text = text.substring(1);
308 | line.aline = subattribution(aline, 1);
309 | } else {
310 | line.text = text;
311 | line.aline = aline;
312 | }
313 |
314 | return line;
315 | };
316 |
317 | const getPadMarkdown = async (pad, revNum) => {
318 | const atext = revNum == null ? pad.atext : await pad.getInternalRevisionAText(revNum);
319 | return getMarkdownFromAtext(pad, atext);
320 | };
321 |
322 | exports.getPadMarkdownDocument =
323 | async (padId, revNum) => await getPadMarkdown(await padManager.getPad(padId), revNum);
324 |
325 | // copied from ACE
326 | const _REGEX_WORDCHAR = new RegExp([
327 | '[',
328 | '\u0030-\u0039',
329 | '\u0041-\u005A',
330 | '\u0061-\u007A',
331 | '\u00C0-\u00D6',
332 | '\u00D8-\u00F6',
333 | '\u00F8-\u00FF',
334 | '\u0100-\u1FFF',
335 | '\u3040-\u9FFF',
336 | '\uF900-\uFDFF',
337 | '\uFE70-\uFEFE',
338 | '\uFF10-\uFF19',
339 | '\uFF21-\uFF3A',
340 | '\uFF41-\uFF5A',
341 | '\uFF66-\uFFDC',
342 | ']',
343 | ].join(''));
344 | const _REGEX_URLCHAR = new RegExp(`([-:@a-zA-Z0-9_.,~%+/\\?=()$]|${_REGEX_WORDCHAR.source})`);
345 | const _REGEX_URL = new RegExp(
346 | '(?:(?:https?|s?ftp|ftps|file|smb|afp|nfs|(x-)?man|gopher|txmt)://|mailto:)' +
347 | `${_REGEX_URLCHAR.source}*(?![:.,;])${_REGEX_URLCHAR.source}`, 'g');
348 | // returns null if no URLs, or [[startIndex1, url1], [startIndex2, url2], ...]
349 | const _findURLs = (text) => {
350 | _REGEX_URL.lastIndex = 0;
351 | let urls = null;
352 | let execResult;
353 | while ((execResult = _REGEX_URL.exec(text))) {
354 | urls = (urls || []);
355 | const startIndex = execResult.index;
356 | const url = execResult[0];
357 | urls.push([startIndex, url]);
358 | }
359 | return urls;
360 | };
361 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | dependencies:
8 | showdown:
9 | specifier: '*'
10 | version: 2.1.0
11 |
12 | devDependencies:
13 | '@types/mocha':
14 | specifier: ^10.0.6
15 | version: 10.0.6
16 | '@types/node':
17 | specifier: ^20.12.4
18 | version: 20.12.5
19 | eslint:
20 | specifier: ^8.57.0
21 | version: 8.57.0
22 | eslint-config-etherpad:
23 | specifier: ^4.0.4
24 | version: 4.0.4(eslint@8.57.0)(typescript@5.4.2)
25 | typescript:
26 | specifier: ^5.4.2
27 | version: 5.4.2
28 |
29 | packages:
30 |
31 | /@aashutoshrathi/word-wrap@1.2.6:
32 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==}
33 | engines: {node: '>=0.10.0'}
34 | dev: true
35 |
36 | /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0):
37 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
38 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
39 | peerDependencies:
40 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
41 | dependencies:
42 | eslint: 8.57.0
43 | eslint-visitor-keys: 3.4.3
44 | dev: true
45 |
46 | /@eslint-community/regexpp@4.10.0:
47 | resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
48 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
49 | dev: true
50 |
51 | /@eslint/eslintrc@2.1.4:
52 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
53 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
54 | dependencies:
55 | ajv: 6.12.6
56 | debug: 4.3.4
57 | espree: 9.6.1
58 | globals: 13.24.0
59 | ignore: 5.3.1
60 | import-fresh: 3.3.0
61 | js-yaml: 4.1.0
62 | minimatch: 3.1.2
63 | strip-json-comments: 3.1.1
64 | transitivePeerDependencies:
65 | - supports-color
66 | dev: true
67 |
68 | /@eslint/js@8.57.0:
69 | resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
70 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
71 | dev: true
72 |
73 | /@humanwhocodes/config-array@0.11.14:
74 | resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
75 | engines: {node: '>=10.10.0'}
76 | dependencies:
77 | '@humanwhocodes/object-schema': 2.0.2
78 | debug: 4.3.4
79 | minimatch: 3.1.2
80 | transitivePeerDependencies:
81 | - supports-color
82 | dev: true
83 |
84 | /@humanwhocodes/module-importer@1.0.1:
85 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
86 | engines: {node: '>=12.22'}
87 | dev: true
88 |
89 | /@humanwhocodes/object-schema@2.0.2:
90 | resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==}
91 | dev: true
92 |
93 | /@nodelib/fs.scandir@2.1.5:
94 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
95 | engines: {node: '>= 8'}
96 | dependencies:
97 | '@nodelib/fs.stat': 2.0.5
98 | run-parallel: 1.2.0
99 | dev: true
100 |
101 | /@nodelib/fs.stat@2.0.5:
102 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
103 | engines: {node: '>= 8'}
104 | dev: true
105 |
106 | /@nodelib/fs.walk@1.2.8:
107 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
108 | engines: {node: '>= 8'}
109 | dependencies:
110 | '@nodelib/fs.scandir': 2.1.5
111 | fastq: 1.17.1
112 | dev: true
113 |
114 | /@rushstack/eslint-patch@1.7.2:
115 | resolution: {integrity: sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==}
116 | dev: true
117 |
118 | /@types/json-schema@7.0.15:
119 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
120 | dev: true
121 |
122 | /@types/json5@0.0.29:
123 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
124 | dev: true
125 |
126 | /@types/mocha@10.0.6:
127 | resolution: {integrity: sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==}
128 | dev: true
129 |
130 | /@types/node@20.12.5:
131 | resolution: {integrity: sha512-BD+BjQ9LS/D8ST9p5uqBxghlN+S42iuNxjsUGjeZobe/ciXzk2qb1B6IXc6AnRLS+yFJRpN2IPEHMzwspfDJNw==}
132 | dependencies:
133 | undici-types: 5.26.5
134 | dev: true
135 |
136 | /@types/semver@7.5.8:
137 | resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==}
138 | dev: true
139 |
140 | /@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0)(eslint@8.57.0)(typescript@5.4.2):
141 | resolution: {integrity: sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==}
142 | engines: {node: ^16.0.0 || >=18.0.0}
143 | peerDependencies:
144 | '@typescript-eslint/parser': ^7.0.0
145 | eslint: ^8.56.0
146 | typescript: '*'
147 | peerDependenciesMeta:
148 | typescript:
149 | optional: true
150 | dependencies:
151 | '@eslint-community/regexpp': 4.10.0
152 | '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.2)
153 | '@typescript-eslint/scope-manager': 7.2.0
154 | '@typescript-eslint/type-utils': 7.2.0(eslint@8.57.0)(typescript@5.4.2)
155 | '@typescript-eslint/utils': 7.2.0(eslint@8.57.0)(typescript@5.4.2)
156 | '@typescript-eslint/visitor-keys': 7.2.0
157 | debug: 4.3.4
158 | eslint: 8.57.0
159 | graphemer: 1.4.0
160 | ignore: 5.3.1
161 | natural-compare: 1.4.0
162 | semver: 7.6.0
163 | ts-api-utils: 1.3.0(typescript@5.4.2)
164 | typescript: 5.4.2
165 | transitivePeerDependencies:
166 | - supports-color
167 | dev: true
168 |
169 | /@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.2):
170 | resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==}
171 | engines: {node: ^16.0.0 || >=18.0.0}
172 | peerDependencies:
173 | eslint: ^8.56.0
174 | typescript: '*'
175 | peerDependenciesMeta:
176 | typescript:
177 | optional: true
178 | dependencies:
179 | '@typescript-eslint/scope-manager': 7.2.0
180 | '@typescript-eslint/types': 7.2.0
181 | '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.2)
182 | '@typescript-eslint/visitor-keys': 7.2.0
183 | debug: 4.3.4
184 | eslint: 8.57.0
185 | typescript: 5.4.2
186 | transitivePeerDependencies:
187 | - supports-color
188 | dev: true
189 |
190 | /@typescript-eslint/scope-manager@7.2.0:
191 | resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==}
192 | engines: {node: ^16.0.0 || >=18.0.0}
193 | dependencies:
194 | '@typescript-eslint/types': 7.2.0
195 | '@typescript-eslint/visitor-keys': 7.2.0
196 | dev: true
197 |
198 | /@typescript-eslint/type-utils@7.2.0(eslint@8.57.0)(typescript@5.4.2):
199 | resolution: {integrity: sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==}
200 | engines: {node: ^16.0.0 || >=18.0.0}
201 | peerDependencies:
202 | eslint: ^8.56.0
203 | typescript: '*'
204 | peerDependenciesMeta:
205 | typescript:
206 | optional: true
207 | dependencies:
208 | '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.2)
209 | '@typescript-eslint/utils': 7.2.0(eslint@8.57.0)(typescript@5.4.2)
210 | debug: 4.3.4
211 | eslint: 8.57.0
212 | ts-api-utils: 1.3.0(typescript@5.4.2)
213 | typescript: 5.4.2
214 | transitivePeerDependencies:
215 | - supports-color
216 | dev: true
217 |
218 | /@typescript-eslint/types@7.2.0:
219 | resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==}
220 | engines: {node: ^16.0.0 || >=18.0.0}
221 | dev: true
222 |
223 | /@typescript-eslint/typescript-estree@7.2.0(typescript@5.4.2):
224 | resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==}
225 | engines: {node: ^16.0.0 || >=18.0.0}
226 | peerDependencies:
227 | typescript: '*'
228 | peerDependenciesMeta:
229 | typescript:
230 | optional: true
231 | dependencies:
232 | '@typescript-eslint/types': 7.2.0
233 | '@typescript-eslint/visitor-keys': 7.2.0
234 | debug: 4.3.4
235 | globby: 11.1.0
236 | is-glob: 4.0.3
237 | minimatch: 9.0.3
238 | semver: 7.6.0
239 | ts-api-utils: 1.3.0(typescript@5.4.2)
240 | typescript: 5.4.2
241 | transitivePeerDependencies:
242 | - supports-color
243 | dev: true
244 |
245 | /@typescript-eslint/utils@7.2.0(eslint@8.57.0)(typescript@5.4.2):
246 | resolution: {integrity: sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==}
247 | engines: {node: ^16.0.0 || >=18.0.0}
248 | peerDependencies:
249 | eslint: ^8.56.0
250 | dependencies:
251 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
252 | '@types/json-schema': 7.0.15
253 | '@types/semver': 7.5.8
254 | '@typescript-eslint/scope-manager': 7.2.0
255 | '@typescript-eslint/types': 7.2.0
256 | '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.2)
257 | eslint: 8.57.0
258 | semver: 7.6.0
259 | transitivePeerDependencies:
260 | - supports-color
261 | - typescript
262 | dev: true
263 |
264 | /@typescript-eslint/visitor-keys@7.2.0:
265 | resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==}
266 | engines: {node: ^16.0.0 || >=18.0.0}
267 | dependencies:
268 | '@typescript-eslint/types': 7.2.0
269 | eslint-visitor-keys: 3.4.3
270 | dev: true
271 |
272 | /@ungap/structured-clone@1.2.0:
273 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
274 | dev: true
275 |
276 | /acorn-jsx@5.3.2(acorn@8.11.3):
277 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
278 | peerDependencies:
279 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
280 | dependencies:
281 | acorn: 8.11.3
282 | dev: true
283 |
284 | /acorn@8.11.3:
285 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
286 | engines: {node: '>=0.4.0'}
287 | hasBin: true
288 | dev: true
289 |
290 | /ajv@6.12.6:
291 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
292 | dependencies:
293 | fast-deep-equal: 3.1.3
294 | fast-json-stable-stringify: 2.1.0
295 | json-schema-traverse: 0.4.1
296 | uri-js: 4.4.1
297 | dev: true
298 |
299 | /ansi-regex@5.0.1:
300 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
301 | engines: {node: '>=8'}
302 | dev: true
303 |
304 | /ansi-styles@4.3.0:
305 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
306 | engines: {node: '>=8'}
307 | dependencies:
308 | color-convert: 2.0.1
309 | dev: true
310 |
311 | /argparse@2.0.1:
312 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
313 | dev: true
314 |
315 | /array-buffer-byte-length@1.0.1:
316 | resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==}
317 | engines: {node: '>= 0.4'}
318 | dependencies:
319 | call-bind: 1.0.7
320 | is-array-buffer: 3.0.4
321 | dev: true
322 |
323 | /array-includes@3.1.7:
324 | resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==}
325 | engines: {node: '>= 0.4'}
326 | dependencies:
327 | call-bind: 1.0.7
328 | define-properties: 1.2.1
329 | es-abstract: 1.22.5
330 | get-intrinsic: 1.2.4
331 | is-string: 1.0.7
332 | dev: true
333 |
334 | /array-union@2.1.0:
335 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
336 | engines: {node: '>=8'}
337 | dev: true
338 |
339 | /array.prototype.filter@1.0.3:
340 | resolution: {integrity: sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==}
341 | engines: {node: '>= 0.4'}
342 | dependencies:
343 | call-bind: 1.0.7
344 | define-properties: 1.2.1
345 | es-abstract: 1.22.5
346 | es-array-method-boxes-properly: 1.0.0
347 | is-string: 1.0.7
348 | dev: true
349 |
350 | /array.prototype.findlastindex@1.2.4:
351 | resolution: {integrity: sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==}
352 | engines: {node: '>= 0.4'}
353 | dependencies:
354 | call-bind: 1.0.7
355 | define-properties: 1.2.1
356 | es-abstract: 1.22.5
357 | es-errors: 1.3.0
358 | es-shim-unscopables: 1.0.2
359 | dev: true
360 |
361 | /array.prototype.flat@1.3.2:
362 | resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==}
363 | engines: {node: '>= 0.4'}
364 | dependencies:
365 | call-bind: 1.0.7
366 | define-properties: 1.2.1
367 | es-abstract: 1.22.5
368 | es-shim-unscopables: 1.0.2
369 | dev: true
370 |
371 | /array.prototype.flatmap@1.3.2:
372 | resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==}
373 | engines: {node: '>= 0.4'}
374 | dependencies:
375 | call-bind: 1.0.7
376 | define-properties: 1.2.1
377 | es-abstract: 1.22.5
378 | es-shim-unscopables: 1.0.2
379 | dev: true
380 |
381 | /arraybuffer.prototype.slice@1.0.3:
382 | resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==}
383 | engines: {node: '>= 0.4'}
384 | dependencies:
385 | array-buffer-byte-length: 1.0.1
386 | call-bind: 1.0.7
387 | define-properties: 1.2.1
388 | es-abstract: 1.22.5
389 | es-errors: 1.3.0
390 | get-intrinsic: 1.2.4
391 | is-array-buffer: 3.0.4
392 | is-shared-array-buffer: 1.0.3
393 | dev: true
394 |
395 | /available-typed-arrays@1.0.7:
396 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
397 | engines: {node: '>= 0.4'}
398 | dependencies:
399 | possible-typed-array-names: 1.0.0
400 | dev: true
401 |
402 | /balanced-match@1.0.2:
403 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
404 | dev: true
405 |
406 | /brace-expansion@1.1.11:
407 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
408 | dependencies:
409 | balanced-match: 1.0.2
410 | concat-map: 0.0.1
411 | dev: true
412 |
413 | /brace-expansion@2.0.1:
414 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
415 | dependencies:
416 | balanced-match: 1.0.2
417 | dev: true
418 |
419 | /braces@3.0.2:
420 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
421 | engines: {node: '>=8'}
422 | dependencies:
423 | fill-range: 7.0.1
424 | dev: true
425 |
426 | /builtin-modules@3.3.0:
427 | resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
428 | engines: {node: '>=6'}
429 | dev: true
430 |
431 | /builtins@5.0.1:
432 | resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==}
433 | dependencies:
434 | semver: 7.6.0
435 | dev: true
436 |
437 | /call-bind@1.0.7:
438 | resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
439 | engines: {node: '>= 0.4'}
440 | dependencies:
441 | es-define-property: 1.0.0
442 | es-errors: 1.3.0
443 | function-bind: 1.1.2
444 | get-intrinsic: 1.2.4
445 | set-function-length: 1.2.2
446 | dev: true
447 |
448 | /callsites@3.1.0:
449 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
450 | engines: {node: '>=6'}
451 | dev: true
452 |
453 | /chalk@4.1.2:
454 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
455 | engines: {node: '>=10'}
456 | dependencies:
457 | ansi-styles: 4.3.0
458 | supports-color: 7.2.0
459 | dev: true
460 |
461 | /color-convert@2.0.1:
462 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
463 | engines: {node: '>=7.0.0'}
464 | dependencies:
465 | color-name: 1.1.4
466 | dev: true
467 |
468 | /color-name@1.1.4:
469 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
470 | dev: true
471 |
472 | /commander@9.5.0:
473 | resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
474 | engines: {node: ^12.20.0 || >=14}
475 | dev: false
476 |
477 | /concat-map@0.0.1:
478 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
479 | dev: true
480 |
481 | /cross-spawn@7.0.3:
482 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
483 | engines: {node: '>= 8'}
484 | dependencies:
485 | path-key: 3.1.1
486 | shebang-command: 2.0.0
487 | which: 2.0.2
488 | dev: true
489 |
490 | /debug@3.2.7:
491 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
492 | peerDependencies:
493 | supports-color: '*'
494 | peerDependenciesMeta:
495 | supports-color:
496 | optional: true
497 | dependencies:
498 | ms: 2.1.3
499 | dev: true
500 |
501 | /debug@4.3.4:
502 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
503 | engines: {node: '>=6.0'}
504 | peerDependencies:
505 | supports-color: '*'
506 | peerDependenciesMeta:
507 | supports-color:
508 | optional: true
509 | dependencies:
510 | ms: 2.1.2
511 | dev: true
512 |
513 | /deep-is@0.1.4:
514 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
515 | dev: true
516 |
517 | /define-data-property@1.1.4:
518 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
519 | engines: {node: '>= 0.4'}
520 | dependencies:
521 | es-define-property: 1.0.0
522 | es-errors: 1.3.0
523 | gopd: 1.0.1
524 | dev: true
525 |
526 | /define-properties@1.2.1:
527 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
528 | engines: {node: '>= 0.4'}
529 | dependencies:
530 | define-data-property: 1.1.4
531 | has-property-descriptors: 1.0.2
532 | object-keys: 1.1.1
533 | dev: true
534 |
535 | /dir-glob@3.0.1:
536 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
537 | engines: {node: '>=8'}
538 | dependencies:
539 | path-type: 4.0.0
540 | dev: true
541 |
542 | /doctrine@2.1.0:
543 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
544 | engines: {node: '>=0.10.0'}
545 | dependencies:
546 | esutils: 2.0.3
547 | dev: true
548 |
549 | /doctrine@3.0.0:
550 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
551 | engines: {node: '>=6.0.0'}
552 | dependencies:
553 | esutils: 2.0.3
554 | dev: true
555 |
556 | /enhanced-resolve@5.16.0:
557 | resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==}
558 | engines: {node: '>=10.13.0'}
559 | dependencies:
560 | graceful-fs: 4.2.11
561 | tapable: 2.2.1
562 | dev: true
563 |
564 | /es-abstract@1.22.5:
565 | resolution: {integrity: sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==}
566 | engines: {node: '>= 0.4'}
567 | dependencies:
568 | array-buffer-byte-length: 1.0.1
569 | arraybuffer.prototype.slice: 1.0.3
570 | available-typed-arrays: 1.0.7
571 | call-bind: 1.0.7
572 | es-define-property: 1.0.0
573 | es-errors: 1.3.0
574 | es-set-tostringtag: 2.0.3
575 | es-to-primitive: 1.2.1
576 | function.prototype.name: 1.1.6
577 | get-intrinsic: 1.2.4
578 | get-symbol-description: 1.0.2
579 | globalthis: 1.0.3
580 | gopd: 1.0.1
581 | has-property-descriptors: 1.0.2
582 | has-proto: 1.0.3
583 | has-symbols: 1.0.3
584 | hasown: 2.0.2
585 | internal-slot: 1.0.7
586 | is-array-buffer: 3.0.4
587 | is-callable: 1.2.7
588 | is-negative-zero: 2.0.3
589 | is-regex: 1.1.4
590 | is-shared-array-buffer: 1.0.3
591 | is-string: 1.0.7
592 | is-typed-array: 1.1.13
593 | is-weakref: 1.0.2
594 | object-inspect: 1.13.1
595 | object-keys: 1.1.1
596 | object.assign: 4.1.5
597 | regexp.prototype.flags: 1.5.2
598 | safe-array-concat: 1.1.2
599 | safe-regex-test: 1.0.3
600 | string.prototype.trim: 1.2.8
601 | string.prototype.trimend: 1.0.7
602 | string.prototype.trimstart: 1.0.7
603 | typed-array-buffer: 1.0.2
604 | typed-array-byte-length: 1.0.1
605 | typed-array-byte-offset: 1.0.2
606 | typed-array-length: 1.0.5
607 | unbox-primitive: 1.0.2
608 | which-typed-array: 1.1.15
609 | dev: true
610 |
611 | /es-array-method-boxes-properly@1.0.0:
612 | resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==}
613 | dev: true
614 |
615 | /es-define-property@1.0.0:
616 | resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
617 | engines: {node: '>= 0.4'}
618 | dependencies:
619 | get-intrinsic: 1.2.4
620 | dev: true
621 |
622 | /es-errors@1.3.0:
623 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
624 | engines: {node: '>= 0.4'}
625 | dev: true
626 |
627 | /es-set-tostringtag@2.0.3:
628 | resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==}
629 | engines: {node: '>= 0.4'}
630 | dependencies:
631 | get-intrinsic: 1.2.4
632 | has-tostringtag: 1.0.2
633 | hasown: 2.0.2
634 | dev: true
635 |
636 | /es-shim-unscopables@1.0.2:
637 | resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==}
638 | dependencies:
639 | hasown: 2.0.2
640 | dev: true
641 |
642 | /es-to-primitive@1.2.1:
643 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
644 | engines: {node: '>= 0.4'}
645 | dependencies:
646 | is-callable: 1.2.7
647 | is-date-object: 1.0.5
648 | is-symbol: 1.0.4
649 | dev: true
650 |
651 | /escape-string-regexp@1.0.5:
652 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
653 | engines: {node: '>=0.8.0'}
654 | dev: true
655 |
656 | /escape-string-regexp@4.0.0:
657 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
658 | engines: {node: '>=10'}
659 | dev: true
660 |
661 | /eslint-compat-utils@0.1.2(eslint@8.57.0):
662 | resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==}
663 | engines: {node: '>=12'}
664 | peerDependencies:
665 | eslint: '>=6.0.0'
666 | dependencies:
667 | eslint: 8.57.0
668 | dev: true
669 |
670 | /eslint-config-etherpad@4.0.4(eslint@8.57.0)(typescript@5.4.2):
671 | resolution: {integrity: sha512-y1riT+lmFwd+TZR9LzTlF4ntcTWRUpjqspdJ8kekLY9gcwyBsKTaW/Jj8mO4DyfDR72/3o4t6v7A8d8SqXybUQ==}
672 | engines: {node: '>=12.17.0'}
673 | dependencies:
674 | '@rushstack/eslint-patch': 1.7.2
675 | '@typescript-eslint/eslint-plugin': 7.2.0(@typescript-eslint/parser@7.2.0)(eslint@8.57.0)(typescript@5.4.2)
676 | '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.2)
677 | eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0)
678 | eslint-plugin-cypress: 2.15.1(eslint@8.57.0)
679 | eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0)
680 | eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
681 | eslint-plugin-mocha: 10.4.1(eslint@8.57.0)
682 | eslint-plugin-n: 16.6.2(eslint@8.57.0)
683 | eslint-plugin-prefer-arrow: 1.2.3(eslint@8.57.0)
684 | eslint-plugin-promise: 6.1.1(eslint@8.57.0)
685 | eslint-plugin-you-dont-need-lodash-underscore: 6.13.0
686 | transitivePeerDependencies:
687 | - eslint
688 | - eslint-import-resolver-node
689 | - eslint-import-resolver-webpack
690 | - supports-color
691 | - typescript
692 | dev: true
693 |
694 | /eslint-import-resolver-node@0.3.9:
695 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
696 | dependencies:
697 | debug: 3.2.7
698 | is-core-module: 2.13.1
699 | resolve: 1.22.8
700 | transitivePeerDependencies:
701 | - supports-color
702 | dev: true
703 |
704 | /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0):
705 | resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==}
706 | engines: {node: ^14.18.0 || >=16.0.0}
707 | peerDependencies:
708 | eslint: '*'
709 | eslint-plugin-import: '*'
710 | dependencies:
711 | debug: 4.3.4
712 | enhanced-resolve: 5.16.0
713 | eslint: 8.57.0
714 | eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
715 | eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
716 | fast-glob: 3.3.2
717 | get-tsconfig: 4.7.3
718 | is-core-module: 2.13.1
719 | is-glob: 4.0.3
720 | transitivePeerDependencies:
721 | - '@typescript-eslint/parser'
722 | - eslint-import-resolver-node
723 | - eslint-import-resolver-webpack
724 | - supports-color
725 | dev: true
726 |
727 | /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
728 | resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==}
729 | engines: {node: '>=4'}
730 | peerDependencies:
731 | '@typescript-eslint/parser': '*'
732 | eslint: '*'
733 | eslint-import-resolver-node: '*'
734 | eslint-import-resolver-typescript: '*'
735 | eslint-import-resolver-webpack: '*'
736 | peerDependenciesMeta:
737 | '@typescript-eslint/parser':
738 | optional: true
739 | eslint:
740 | optional: true
741 | eslint-import-resolver-node:
742 | optional: true
743 | eslint-import-resolver-typescript:
744 | optional: true
745 | eslint-import-resolver-webpack:
746 | optional: true
747 | dependencies:
748 | '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.2)
749 | debug: 3.2.7
750 | eslint: 8.57.0
751 | eslint-import-resolver-node: 0.3.9
752 | eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0)
753 | transitivePeerDependencies:
754 | - supports-color
755 | dev: true
756 |
757 | /eslint-plugin-cypress@2.15.1(eslint@8.57.0):
758 | resolution: {integrity: sha512-eLHLWP5Q+I4j2AWepYq0PgFEei9/s5LvjuSqWrxurkg1YZ8ltxdvMNmdSf0drnsNo57CTgYY/NIHHLRSWejR7w==}
759 | peerDependencies:
760 | eslint: '>= 3.2.1'
761 | dependencies:
762 | eslint: 8.57.0
763 | globals: 13.24.0
764 | dev: true
765 |
766 | /eslint-plugin-es-x@7.5.0(eslint@8.57.0):
767 | resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==}
768 | engines: {node: ^14.18.0 || >=16.0.0}
769 | peerDependencies:
770 | eslint: '>=8'
771 | dependencies:
772 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
773 | '@eslint-community/regexpp': 4.10.0
774 | eslint: 8.57.0
775 | eslint-compat-utils: 0.1.2(eslint@8.57.0)
776 | dev: true
777 |
778 | /eslint-plugin-eslint-comments@3.2.0(eslint@8.57.0):
779 | resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==}
780 | engines: {node: '>=6.5.0'}
781 | peerDependencies:
782 | eslint: '>=4.19.1'
783 | dependencies:
784 | escape-string-regexp: 1.0.5
785 | eslint: 8.57.0
786 | ignore: 5.3.1
787 | dev: true
788 |
789 | /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
790 | resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==}
791 | engines: {node: '>=4'}
792 | peerDependencies:
793 | '@typescript-eslint/parser': '*'
794 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
795 | peerDependenciesMeta:
796 | '@typescript-eslint/parser':
797 | optional: true
798 | dependencies:
799 | '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.2)
800 | array-includes: 3.1.7
801 | array.prototype.findlastindex: 1.2.4
802 | array.prototype.flat: 1.3.2
803 | array.prototype.flatmap: 1.3.2
804 | debug: 3.2.7
805 | doctrine: 2.1.0
806 | eslint: 8.57.0
807 | eslint-import-resolver-node: 0.3.9
808 | eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
809 | hasown: 2.0.2
810 | is-core-module: 2.13.1
811 | is-glob: 4.0.3
812 | minimatch: 3.1.2
813 | object.fromentries: 2.0.7
814 | object.groupby: 1.0.2
815 | object.values: 1.1.7
816 | semver: 6.3.1
817 | tsconfig-paths: 3.15.0
818 | transitivePeerDependencies:
819 | - eslint-import-resolver-typescript
820 | - eslint-import-resolver-webpack
821 | - supports-color
822 | dev: true
823 |
824 | /eslint-plugin-mocha@10.4.1(eslint@8.57.0):
825 | resolution: {integrity: sha512-G85ALUgKaLzuEuHhoW3HVRgPTmia6njQC3qCG6CEvA8/Ja9PDZnRZOuzekMki+HaViEQXINuYsmhp5WR5/4MfA==}
826 | engines: {node: '>=14.0.0'}
827 | peerDependencies:
828 | eslint: '>=7.0.0'
829 | dependencies:
830 | eslint: 8.57.0
831 | eslint-utils: 3.0.0(eslint@8.57.0)
832 | globals: 13.24.0
833 | rambda: 7.5.0
834 | dev: true
835 |
836 | /eslint-plugin-n@16.6.2(eslint@8.57.0):
837 | resolution: {integrity: sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==}
838 | engines: {node: '>=16.0.0'}
839 | peerDependencies:
840 | eslint: '>=7.0.0'
841 | dependencies:
842 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
843 | builtins: 5.0.1
844 | eslint: 8.57.0
845 | eslint-plugin-es-x: 7.5.0(eslint@8.57.0)
846 | get-tsconfig: 4.7.3
847 | globals: 13.24.0
848 | ignore: 5.3.1
849 | is-builtin-module: 3.2.1
850 | is-core-module: 2.13.1
851 | minimatch: 3.1.2
852 | resolve: 1.22.8
853 | semver: 7.6.0
854 | dev: true
855 |
856 | /eslint-plugin-prefer-arrow@1.2.3(eslint@8.57.0):
857 | resolution: {integrity: sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==}
858 | peerDependencies:
859 | eslint: '>=2.0.0'
860 | dependencies:
861 | eslint: 8.57.0
862 | dev: true
863 |
864 | /eslint-plugin-promise@6.1.1(eslint@8.57.0):
865 | resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==}
866 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
867 | peerDependencies:
868 | eslint: ^7.0.0 || ^8.0.0
869 | dependencies:
870 | eslint: 8.57.0
871 | dev: true
872 |
873 | /eslint-plugin-you-dont-need-lodash-underscore@6.13.0:
874 | resolution: {integrity: sha512-6FkFLp/R/QlgfJl5NrxkIXMQ36jMVLczkWDZJvMd7/wr/M3K0DS7mtX7plZ3giTDcbDD7VBfNYUfUVaBCZOXKA==}
875 | engines: {node: '>=4.0'}
876 | dependencies:
877 | kebab-case: 1.0.2
878 | dev: true
879 |
880 | /eslint-scope@7.2.2:
881 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
882 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
883 | dependencies:
884 | esrecurse: 4.3.0
885 | estraverse: 5.3.0
886 | dev: true
887 |
888 | /eslint-utils@3.0.0(eslint@8.57.0):
889 | resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
890 | engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
891 | peerDependencies:
892 | eslint: '>=5'
893 | dependencies:
894 | eslint: 8.57.0
895 | eslint-visitor-keys: 2.1.0
896 | dev: true
897 |
898 | /eslint-visitor-keys@2.1.0:
899 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
900 | engines: {node: '>=10'}
901 | dev: true
902 |
903 | /eslint-visitor-keys@3.4.3:
904 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
905 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
906 | dev: true
907 |
908 | /eslint@8.57.0:
909 | resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
910 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
911 | hasBin: true
912 | dependencies:
913 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
914 | '@eslint-community/regexpp': 4.10.0
915 | '@eslint/eslintrc': 2.1.4
916 | '@eslint/js': 8.57.0
917 | '@humanwhocodes/config-array': 0.11.14
918 | '@humanwhocodes/module-importer': 1.0.1
919 | '@nodelib/fs.walk': 1.2.8
920 | '@ungap/structured-clone': 1.2.0
921 | ajv: 6.12.6
922 | chalk: 4.1.2
923 | cross-spawn: 7.0.3
924 | debug: 4.3.4
925 | doctrine: 3.0.0
926 | escape-string-regexp: 4.0.0
927 | eslint-scope: 7.2.2
928 | eslint-visitor-keys: 3.4.3
929 | espree: 9.6.1
930 | esquery: 1.5.0
931 | esutils: 2.0.3
932 | fast-deep-equal: 3.1.3
933 | file-entry-cache: 6.0.1
934 | find-up: 5.0.0
935 | glob-parent: 6.0.2
936 | globals: 13.24.0
937 | graphemer: 1.4.0
938 | ignore: 5.3.1
939 | imurmurhash: 0.1.4
940 | is-glob: 4.0.3
941 | is-path-inside: 3.0.3
942 | js-yaml: 4.1.0
943 | json-stable-stringify-without-jsonify: 1.0.1
944 | levn: 0.4.1
945 | lodash.merge: 4.6.2
946 | minimatch: 3.1.2
947 | natural-compare: 1.4.0
948 | optionator: 0.9.3
949 | strip-ansi: 6.0.1
950 | text-table: 0.2.0
951 | transitivePeerDependencies:
952 | - supports-color
953 | dev: true
954 |
955 | /espree@9.6.1:
956 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
957 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
958 | dependencies:
959 | acorn: 8.11.3
960 | acorn-jsx: 5.3.2(acorn@8.11.3)
961 | eslint-visitor-keys: 3.4.3
962 | dev: true
963 |
964 | /esquery@1.5.0:
965 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
966 | engines: {node: '>=0.10'}
967 | dependencies:
968 | estraverse: 5.3.0
969 | dev: true
970 |
971 | /esrecurse@4.3.0:
972 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
973 | engines: {node: '>=4.0'}
974 | dependencies:
975 | estraverse: 5.3.0
976 | dev: true
977 |
978 | /estraverse@5.3.0:
979 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
980 | engines: {node: '>=4.0'}
981 | dev: true
982 |
983 | /esutils@2.0.3:
984 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
985 | engines: {node: '>=0.10.0'}
986 | dev: true
987 |
988 | /fast-deep-equal@3.1.3:
989 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
990 | dev: true
991 |
992 | /fast-glob@3.3.2:
993 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
994 | engines: {node: '>=8.6.0'}
995 | dependencies:
996 | '@nodelib/fs.stat': 2.0.5
997 | '@nodelib/fs.walk': 1.2.8
998 | glob-parent: 5.1.2
999 | merge2: 1.4.1
1000 | micromatch: 4.0.5
1001 | dev: true
1002 |
1003 | /fast-json-stable-stringify@2.1.0:
1004 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
1005 | dev: true
1006 |
1007 | /fast-levenshtein@2.0.6:
1008 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
1009 | dev: true
1010 |
1011 | /fastq@1.17.1:
1012 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
1013 | dependencies:
1014 | reusify: 1.0.4
1015 | dev: true
1016 |
1017 | /file-entry-cache@6.0.1:
1018 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
1019 | engines: {node: ^10.12.0 || >=12.0.0}
1020 | dependencies:
1021 | flat-cache: 3.2.0
1022 | dev: true
1023 |
1024 | /fill-range@7.0.1:
1025 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
1026 | engines: {node: '>=8'}
1027 | dependencies:
1028 | to-regex-range: 5.0.1
1029 | dev: true
1030 |
1031 | /find-up@5.0.0:
1032 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
1033 | engines: {node: '>=10'}
1034 | dependencies:
1035 | locate-path: 6.0.0
1036 | path-exists: 4.0.0
1037 | dev: true
1038 |
1039 | /flat-cache@3.2.0:
1040 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
1041 | engines: {node: ^10.12.0 || >=12.0.0}
1042 | dependencies:
1043 | flatted: 3.3.1
1044 | keyv: 4.5.4
1045 | rimraf: 3.0.2
1046 | dev: true
1047 |
1048 | /flatted@3.3.1:
1049 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
1050 | dev: true
1051 |
1052 | /for-each@0.3.3:
1053 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
1054 | dependencies:
1055 | is-callable: 1.2.7
1056 | dev: true
1057 |
1058 | /fs.realpath@1.0.0:
1059 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
1060 | dev: true
1061 |
1062 | /function-bind@1.1.2:
1063 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
1064 | dev: true
1065 |
1066 | /function.prototype.name@1.1.6:
1067 | resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==}
1068 | engines: {node: '>= 0.4'}
1069 | dependencies:
1070 | call-bind: 1.0.7
1071 | define-properties: 1.2.1
1072 | es-abstract: 1.22.5
1073 | functions-have-names: 1.2.3
1074 | dev: true
1075 |
1076 | /functions-have-names@1.2.3:
1077 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
1078 | dev: true
1079 |
1080 | /get-intrinsic@1.2.4:
1081 | resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
1082 | engines: {node: '>= 0.4'}
1083 | dependencies:
1084 | es-errors: 1.3.0
1085 | function-bind: 1.1.2
1086 | has-proto: 1.0.3
1087 | has-symbols: 1.0.3
1088 | hasown: 2.0.2
1089 | dev: true
1090 |
1091 | /get-symbol-description@1.0.2:
1092 | resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==}
1093 | engines: {node: '>= 0.4'}
1094 | dependencies:
1095 | call-bind: 1.0.7
1096 | es-errors: 1.3.0
1097 | get-intrinsic: 1.2.4
1098 | dev: true
1099 |
1100 | /get-tsconfig@4.7.3:
1101 | resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==}
1102 | dependencies:
1103 | resolve-pkg-maps: 1.0.0
1104 | dev: true
1105 |
1106 | /glob-parent@5.1.2:
1107 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1108 | engines: {node: '>= 6'}
1109 | dependencies:
1110 | is-glob: 4.0.3
1111 | dev: true
1112 |
1113 | /glob-parent@6.0.2:
1114 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
1115 | engines: {node: '>=10.13.0'}
1116 | dependencies:
1117 | is-glob: 4.0.3
1118 | dev: true
1119 |
1120 | /glob@7.2.3:
1121 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1122 | dependencies:
1123 | fs.realpath: 1.0.0
1124 | inflight: 1.0.6
1125 | inherits: 2.0.4
1126 | minimatch: 3.1.2
1127 | once: 1.4.0
1128 | path-is-absolute: 1.0.1
1129 | dev: true
1130 |
1131 | /globals@13.24.0:
1132 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
1133 | engines: {node: '>=8'}
1134 | dependencies:
1135 | type-fest: 0.20.2
1136 | dev: true
1137 |
1138 | /globalthis@1.0.3:
1139 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
1140 | engines: {node: '>= 0.4'}
1141 | dependencies:
1142 | define-properties: 1.2.1
1143 | dev: true
1144 |
1145 | /globby@11.1.0:
1146 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
1147 | engines: {node: '>=10'}
1148 | dependencies:
1149 | array-union: 2.1.0
1150 | dir-glob: 3.0.1
1151 | fast-glob: 3.3.2
1152 | ignore: 5.3.1
1153 | merge2: 1.4.1
1154 | slash: 3.0.0
1155 | dev: true
1156 |
1157 | /gopd@1.0.1:
1158 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
1159 | dependencies:
1160 | get-intrinsic: 1.2.4
1161 | dev: true
1162 |
1163 | /graceful-fs@4.2.11:
1164 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
1165 | dev: true
1166 |
1167 | /graphemer@1.4.0:
1168 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
1169 | dev: true
1170 |
1171 | /has-bigints@1.0.2:
1172 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
1173 | dev: true
1174 |
1175 | /has-flag@4.0.0:
1176 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1177 | engines: {node: '>=8'}
1178 | dev: true
1179 |
1180 | /has-property-descriptors@1.0.2:
1181 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
1182 | dependencies:
1183 | es-define-property: 1.0.0
1184 | dev: true
1185 |
1186 | /has-proto@1.0.3:
1187 | resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
1188 | engines: {node: '>= 0.4'}
1189 | dev: true
1190 |
1191 | /has-symbols@1.0.3:
1192 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
1193 | engines: {node: '>= 0.4'}
1194 | dev: true
1195 |
1196 | /has-tostringtag@1.0.2:
1197 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
1198 | engines: {node: '>= 0.4'}
1199 | dependencies:
1200 | has-symbols: 1.0.3
1201 | dev: true
1202 |
1203 | /hasown@2.0.2:
1204 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
1205 | engines: {node: '>= 0.4'}
1206 | dependencies:
1207 | function-bind: 1.1.2
1208 | dev: true
1209 |
1210 | /ignore@5.3.1:
1211 | resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
1212 | engines: {node: '>= 4'}
1213 | dev: true
1214 |
1215 | /import-fresh@3.3.0:
1216 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
1217 | engines: {node: '>=6'}
1218 | dependencies:
1219 | parent-module: 1.0.1
1220 | resolve-from: 4.0.0
1221 | dev: true
1222 |
1223 | /imurmurhash@0.1.4:
1224 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
1225 | engines: {node: '>=0.8.19'}
1226 | dev: true
1227 |
1228 | /inflight@1.0.6:
1229 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1230 | dependencies:
1231 | once: 1.4.0
1232 | wrappy: 1.0.2
1233 | dev: true
1234 |
1235 | /inherits@2.0.4:
1236 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1237 | dev: true
1238 |
1239 | /internal-slot@1.0.7:
1240 | resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==}
1241 | engines: {node: '>= 0.4'}
1242 | dependencies:
1243 | es-errors: 1.3.0
1244 | hasown: 2.0.2
1245 | side-channel: 1.0.6
1246 | dev: true
1247 |
1248 | /is-array-buffer@3.0.4:
1249 | resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==}
1250 | engines: {node: '>= 0.4'}
1251 | dependencies:
1252 | call-bind: 1.0.7
1253 | get-intrinsic: 1.2.4
1254 | dev: true
1255 |
1256 | /is-bigint@1.0.4:
1257 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
1258 | dependencies:
1259 | has-bigints: 1.0.2
1260 | dev: true
1261 |
1262 | /is-boolean-object@1.1.2:
1263 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
1264 | engines: {node: '>= 0.4'}
1265 | dependencies:
1266 | call-bind: 1.0.7
1267 | has-tostringtag: 1.0.2
1268 | dev: true
1269 |
1270 | /is-builtin-module@3.2.1:
1271 | resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==}
1272 | engines: {node: '>=6'}
1273 | dependencies:
1274 | builtin-modules: 3.3.0
1275 | dev: true
1276 |
1277 | /is-callable@1.2.7:
1278 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
1279 | engines: {node: '>= 0.4'}
1280 | dev: true
1281 |
1282 | /is-core-module@2.13.1:
1283 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
1284 | dependencies:
1285 | hasown: 2.0.2
1286 | dev: true
1287 |
1288 | /is-date-object@1.0.5:
1289 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
1290 | engines: {node: '>= 0.4'}
1291 | dependencies:
1292 | has-tostringtag: 1.0.2
1293 | dev: true
1294 |
1295 | /is-extglob@2.1.1:
1296 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1297 | engines: {node: '>=0.10.0'}
1298 | dev: true
1299 |
1300 | /is-glob@4.0.3:
1301 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1302 | engines: {node: '>=0.10.0'}
1303 | dependencies:
1304 | is-extglob: 2.1.1
1305 | dev: true
1306 |
1307 | /is-negative-zero@2.0.3:
1308 | resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
1309 | engines: {node: '>= 0.4'}
1310 | dev: true
1311 |
1312 | /is-number-object@1.0.7:
1313 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
1314 | engines: {node: '>= 0.4'}
1315 | dependencies:
1316 | has-tostringtag: 1.0.2
1317 | dev: true
1318 |
1319 | /is-number@7.0.0:
1320 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1321 | engines: {node: '>=0.12.0'}
1322 | dev: true
1323 |
1324 | /is-path-inside@3.0.3:
1325 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
1326 | engines: {node: '>=8'}
1327 | dev: true
1328 |
1329 | /is-regex@1.1.4:
1330 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
1331 | engines: {node: '>= 0.4'}
1332 | dependencies:
1333 | call-bind: 1.0.7
1334 | has-tostringtag: 1.0.2
1335 | dev: true
1336 |
1337 | /is-shared-array-buffer@1.0.3:
1338 | resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==}
1339 | engines: {node: '>= 0.4'}
1340 | dependencies:
1341 | call-bind: 1.0.7
1342 | dev: true
1343 |
1344 | /is-string@1.0.7:
1345 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
1346 | engines: {node: '>= 0.4'}
1347 | dependencies:
1348 | has-tostringtag: 1.0.2
1349 | dev: true
1350 |
1351 | /is-symbol@1.0.4:
1352 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
1353 | engines: {node: '>= 0.4'}
1354 | dependencies:
1355 | has-symbols: 1.0.3
1356 | dev: true
1357 |
1358 | /is-typed-array@1.1.13:
1359 | resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==}
1360 | engines: {node: '>= 0.4'}
1361 | dependencies:
1362 | which-typed-array: 1.1.15
1363 | dev: true
1364 |
1365 | /is-weakref@1.0.2:
1366 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
1367 | dependencies:
1368 | call-bind: 1.0.7
1369 | dev: true
1370 |
1371 | /isarray@2.0.5:
1372 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
1373 | dev: true
1374 |
1375 | /isexe@2.0.0:
1376 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1377 | dev: true
1378 |
1379 | /js-yaml@4.1.0:
1380 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
1381 | hasBin: true
1382 | dependencies:
1383 | argparse: 2.0.1
1384 | dev: true
1385 |
1386 | /json-buffer@3.0.1:
1387 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
1388 | dev: true
1389 |
1390 | /json-schema-traverse@0.4.1:
1391 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
1392 | dev: true
1393 |
1394 | /json-stable-stringify-without-jsonify@1.0.1:
1395 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
1396 | dev: true
1397 |
1398 | /json5@1.0.2:
1399 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
1400 | hasBin: true
1401 | dependencies:
1402 | minimist: 1.2.8
1403 | dev: true
1404 |
1405 | /kebab-case@1.0.2:
1406 | resolution: {integrity: sha512-7n6wXq4gNgBELfDCpzKc+mRrZFs7D+wgfF5WRFLNAr4DA/qtr9Js8uOAVAfHhuLMfAcQ0pRKqbpjx+TcJVdE1Q==}
1407 | dev: true
1408 |
1409 | /keyv@4.5.4:
1410 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
1411 | dependencies:
1412 | json-buffer: 3.0.1
1413 | dev: true
1414 |
1415 | /levn@0.4.1:
1416 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
1417 | engines: {node: '>= 0.8.0'}
1418 | dependencies:
1419 | prelude-ls: 1.2.1
1420 | type-check: 0.4.0
1421 | dev: true
1422 |
1423 | /locate-path@6.0.0:
1424 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
1425 | engines: {node: '>=10'}
1426 | dependencies:
1427 | p-locate: 5.0.0
1428 | dev: true
1429 |
1430 | /lodash.merge@4.6.2:
1431 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1432 | dev: true
1433 |
1434 | /lru-cache@6.0.0:
1435 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
1436 | engines: {node: '>=10'}
1437 | dependencies:
1438 | yallist: 4.0.0
1439 | dev: true
1440 |
1441 | /merge2@1.4.1:
1442 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1443 | engines: {node: '>= 8'}
1444 | dev: true
1445 |
1446 | /micromatch@4.0.5:
1447 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
1448 | engines: {node: '>=8.6'}
1449 | dependencies:
1450 | braces: 3.0.2
1451 | picomatch: 2.3.1
1452 | dev: true
1453 |
1454 | /minimatch@3.1.2:
1455 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1456 | dependencies:
1457 | brace-expansion: 1.1.11
1458 | dev: true
1459 |
1460 | /minimatch@9.0.3:
1461 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
1462 | engines: {node: '>=16 || 14 >=14.17'}
1463 | dependencies:
1464 | brace-expansion: 2.0.1
1465 | dev: true
1466 |
1467 | /minimist@1.2.8:
1468 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
1469 | dev: true
1470 |
1471 | /ms@2.1.2:
1472 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
1473 | dev: true
1474 |
1475 | /ms@2.1.3:
1476 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1477 | dev: true
1478 |
1479 | /natural-compare@1.4.0:
1480 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
1481 | dev: true
1482 |
1483 | /object-inspect@1.13.1:
1484 | resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==}
1485 | dev: true
1486 |
1487 | /object-keys@1.1.1:
1488 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
1489 | engines: {node: '>= 0.4'}
1490 | dev: true
1491 |
1492 | /object.assign@4.1.5:
1493 | resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==}
1494 | engines: {node: '>= 0.4'}
1495 | dependencies:
1496 | call-bind: 1.0.7
1497 | define-properties: 1.2.1
1498 | has-symbols: 1.0.3
1499 | object-keys: 1.1.1
1500 | dev: true
1501 |
1502 | /object.fromentries@2.0.7:
1503 | resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==}
1504 | engines: {node: '>= 0.4'}
1505 | dependencies:
1506 | call-bind: 1.0.7
1507 | define-properties: 1.2.1
1508 | es-abstract: 1.22.5
1509 | dev: true
1510 |
1511 | /object.groupby@1.0.2:
1512 | resolution: {integrity: sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==}
1513 | dependencies:
1514 | array.prototype.filter: 1.0.3
1515 | call-bind: 1.0.7
1516 | define-properties: 1.2.1
1517 | es-abstract: 1.22.5
1518 | es-errors: 1.3.0
1519 | dev: true
1520 |
1521 | /object.values@1.1.7:
1522 | resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==}
1523 | engines: {node: '>= 0.4'}
1524 | dependencies:
1525 | call-bind: 1.0.7
1526 | define-properties: 1.2.1
1527 | es-abstract: 1.22.5
1528 | dev: true
1529 |
1530 | /once@1.4.0:
1531 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1532 | dependencies:
1533 | wrappy: 1.0.2
1534 | dev: true
1535 |
1536 | /optionator@0.9.3:
1537 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
1538 | engines: {node: '>= 0.8.0'}
1539 | dependencies:
1540 | '@aashutoshrathi/word-wrap': 1.2.6
1541 | deep-is: 0.1.4
1542 | fast-levenshtein: 2.0.6
1543 | levn: 0.4.1
1544 | prelude-ls: 1.2.1
1545 | type-check: 0.4.0
1546 | dev: true
1547 |
1548 | /p-limit@3.1.0:
1549 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1550 | engines: {node: '>=10'}
1551 | dependencies:
1552 | yocto-queue: 0.1.0
1553 | dev: true
1554 |
1555 | /p-locate@5.0.0:
1556 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1557 | engines: {node: '>=10'}
1558 | dependencies:
1559 | p-limit: 3.1.0
1560 | dev: true
1561 |
1562 | /parent-module@1.0.1:
1563 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1564 | engines: {node: '>=6'}
1565 | dependencies:
1566 | callsites: 3.1.0
1567 | dev: true
1568 |
1569 | /path-exists@4.0.0:
1570 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
1571 | engines: {node: '>=8'}
1572 | dev: true
1573 |
1574 | /path-is-absolute@1.0.1:
1575 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1576 | engines: {node: '>=0.10.0'}
1577 | dev: true
1578 |
1579 | /path-key@3.1.1:
1580 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1581 | engines: {node: '>=8'}
1582 | dev: true
1583 |
1584 | /path-parse@1.0.7:
1585 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1586 | dev: true
1587 |
1588 | /path-type@4.0.0:
1589 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
1590 | engines: {node: '>=8'}
1591 | dev: true
1592 |
1593 | /picomatch@2.3.1:
1594 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1595 | engines: {node: '>=8.6'}
1596 | dev: true
1597 |
1598 | /possible-typed-array-names@1.0.0:
1599 | resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
1600 | engines: {node: '>= 0.4'}
1601 | dev: true
1602 |
1603 | /prelude-ls@1.2.1:
1604 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
1605 | engines: {node: '>= 0.8.0'}
1606 | dev: true
1607 |
1608 | /punycode@2.3.1:
1609 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
1610 | engines: {node: '>=6'}
1611 | dev: true
1612 |
1613 | /queue-microtask@1.2.3:
1614 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1615 | dev: true
1616 |
1617 | /rambda@7.5.0:
1618 | resolution: {integrity: sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==}
1619 | dev: true
1620 |
1621 | /regexp.prototype.flags@1.5.2:
1622 | resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==}
1623 | engines: {node: '>= 0.4'}
1624 | dependencies:
1625 | call-bind: 1.0.7
1626 | define-properties: 1.2.1
1627 | es-errors: 1.3.0
1628 | set-function-name: 2.0.2
1629 | dev: true
1630 |
1631 | /resolve-from@4.0.0:
1632 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1633 | engines: {node: '>=4'}
1634 | dev: true
1635 |
1636 | /resolve-pkg-maps@1.0.0:
1637 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
1638 | dev: true
1639 |
1640 | /resolve@1.22.8:
1641 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
1642 | hasBin: true
1643 | dependencies:
1644 | is-core-module: 2.13.1
1645 | path-parse: 1.0.7
1646 | supports-preserve-symlinks-flag: 1.0.0
1647 | dev: true
1648 |
1649 | /reusify@1.0.4:
1650 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1651 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1652 | dev: true
1653 |
1654 | /rimraf@3.0.2:
1655 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
1656 | hasBin: true
1657 | dependencies:
1658 | glob: 7.2.3
1659 | dev: true
1660 |
1661 | /run-parallel@1.2.0:
1662 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1663 | dependencies:
1664 | queue-microtask: 1.2.3
1665 | dev: true
1666 |
1667 | /safe-array-concat@1.1.2:
1668 | resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==}
1669 | engines: {node: '>=0.4'}
1670 | dependencies:
1671 | call-bind: 1.0.7
1672 | get-intrinsic: 1.2.4
1673 | has-symbols: 1.0.3
1674 | isarray: 2.0.5
1675 | dev: true
1676 |
1677 | /safe-regex-test@1.0.3:
1678 | resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==}
1679 | engines: {node: '>= 0.4'}
1680 | dependencies:
1681 | call-bind: 1.0.7
1682 | es-errors: 1.3.0
1683 | is-regex: 1.1.4
1684 | dev: true
1685 |
1686 | /semver@6.3.1:
1687 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
1688 | hasBin: true
1689 | dev: true
1690 |
1691 | /semver@7.6.0:
1692 | resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==}
1693 | engines: {node: '>=10'}
1694 | hasBin: true
1695 | dependencies:
1696 | lru-cache: 6.0.0
1697 | dev: true
1698 |
1699 | /set-function-length@1.2.2:
1700 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
1701 | engines: {node: '>= 0.4'}
1702 | dependencies:
1703 | define-data-property: 1.1.4
1704 | es-errors: 1.3.0
1705 | function-bind: 1.1.2
1706 | get-intrinsic: 1.2.4
1707 | gopd: 1.0.1
1708 | has-property-descriptors: 1.0.2
1709 | dev: true
1710 |
1711 | /set-function-name@2.0.2:
1712 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
1713 | engines: {node: '>= 0.4'}
1714 | dependencies:
1715 | define-data-property: 1.1.4
1716 | es-errors: 1.3.0
1717 | functions-have-names: 1.2.3
1718 | has-property-descriptors: 1.0.2
1719 | dev: true
1720 |
1721 | /shebang-command@2.0.0:
1722 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1723 | engines: {node: '>=8'}
1724 | dependencies:
1725 | shebang-regex: 3.0.0
1726 | dev: true
1727 |
1728 | /shebang-regex@3.0.0:
1729 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1730 | engines: {node: '>=8'}
1731 | dev: true
1732 |
1733 | /showdown@2.1.0:
1734 | resolution: {integrity: sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==}
1735 | hasBin: true
1736 | dependencies:
1737 | commander: 9.5.0
1738 | dev: false
1739 |
1740 | /side-channel@1.0.6:
1741 | resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
1742 | engines: {node: '>= 0.4'}
1743 | dependencies:
1744 | call-bind: 1.0.7
1745 | es-errors: 1.3.0
1746 | get-intrinsic: 1.2.4
1747 | object-inspect: 1.13.1
1748 | dev: true
1749 |
1750 | /slash@3.0.0:
1751 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
1752 | engines: {node: '>=8'}
1753 | dev: true
1754 |
1755 | /string.prototype.trim@1.2.8:
1756 | resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==}
1757 | engines: {node: '>= 0.4'}
1758 | dependencies:
1759 | call-bind: 1.0.7
1760 | define-properties: 1.2.1
1761 | es-abstract: 1.22.5
1762 | dev: true
1763 |
1764 | /string.prototype.trimend@1.0.7:
1765 | resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==}
1766 | dependencies:
1767 | call-bind: 1.0.7
1768 | define-properties: 1.2.1
1769 | es-abstract: 1.22.5
1770 | dev: true
1771 |
1772 | /string.prototype.trimstart@1.0.7:
1773 | resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==}
1774 | dependencies:
1775 | call-bind: 1.0.7
1776 | define-properties: 1.2.1
1777 | es-abstract: 1.22.5
1778 | dev: true
1779 |
1780 | /strip-ansi@6.0.1:
1781 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1782 | engines: {node: '>=8'}
1783 | dependencies:
1784 | ansi-regex: 5.0.1
1785 | dev: true
1786 |
1787 | /strip-bom@3.0.0:
1788 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
1789 | engines: {node: '>=4'}
1790 | dev: true
1791 |
1792 | /strip-json-comments@3.1.1:
1793 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1794 | engines: {node: '>=8'}
1795 | dev: true
1796 |
1797 | /supports-color@7.2.0:
1798 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1799 | engines: {node: '>=8'}
1800 | dependencies:
1801 | has-flag: 4.0.0
1802 | dev: true
1803 |
1804 | /supports-preserve-symlinks-flag@1.0.0:
1805 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1806 | engines: {node: '>= 0.4'}
1807 | dev: true
1808 |
1809 | /tapable@2.2.1:
1810 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
1811 | engines: {node: '>=6'}
1812 | dev: true
1813 |
1814 | /text-table@0.2.0:
1815 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
1816 | dev: true
1817 |
1818 | /to-regex-range@5.0.1:
1819 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1820 | engines: {node: '>=8.0'}
1821 | dependencies:
1822 | is-number: 7.0.0
1823 | dev: true
1824 |
1825 | /ts-api-utils@1.3.0(typescript@5.4.2):
1826 | resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
1827 | engines: {node: '>=16'}
1828 | peerDependencies:
1829 | typescript: '>=4.2.0'
1830 | dependencies:
1831 | typescript: 5.4.2
1832 | dev: true
1833 |
1834 | /tsconfig-paths@3.15.0:
1835 | resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
1836 | dependencies:
1837 | '@types/json5': 0.0.29
1838 | json5: 1.0.2
1839 | minimist: 1.2.8
1840 | strip-bom: 3.0.0
1841 | dev: true
1842 |
1843 | /type-check@0.4.0:
1844 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
1845 | engines: {node: '>= 0.8.0'}
1846 | dependencies:
1847 | prelude-ls: 1.2.1
1848 | dev: true
1849 |
1850 | /type-fest@0.20.2:
1851 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
1852 | engines: {node: '>=10'}
1853 | dev: true
1854 |
1855 | /typed-array-buffer@1.0.2:
1856 | resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==}
1857 | engines: {node: '>= 0.4'}
1858 | dependencies:
1859 | call-bind: 1.0.7
1860 | es-errors: 1.3.0
1861 | is-typed-array: 1.1.13
1862 | dev: true
1863 |
1864 | /typed-array-byte-length@1.0.1:
1865 | resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==}
1866 | engines: {node: '>= 0.4'}
1867 | dependencies:
1868 | call-bind: 1.0.7
1869 | for-each: 0.3.3
1870 | gopd: 1.0.1
1871 | has-proto: 1.0.3
1872 | is-typed-array: 1.1.13
1873 | dev: true
1874 |
1875 | /typed-array-byte-offset@1.0.2:
1876 | resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==}
1877 | engines: {node: '>= 0.4'}
1878 | dependencies:
1879 | available-typed-arrays: 1.0.7
1880 | call-bind: 1.0.7
1881 | for-each: 0.3.3
1882 | gopd: 1.0.1
1883 | has-proto: 1.0.3
1884 | is-typed-array: 1.1.13
1885 | dev: true
1886 |
1887 | /typed-array-length@1.0.5:
1888 | resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==}
1889 | engines: {node: '>= 0.4'}
1890 | dependencies:
1891 | call-bind: 1.0.7
1892 | for-each: 0.3.3
1893 | gopd: 1.0.1
1894 | has-proto: 1.0.3
1895 | is-typed-array: 1.1.13
1896 | possible-typed-array-names: 1.0.0
1897 | dev: true
1898 |
1899 | /typescript@5.4.2:
1900 | resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==}
1901 | engines: {node: '>=14.17'}
1902 | hasBin: true
1903 | dev: true
1904 |
1905 | /unbox-primitive@1.0.2:
1906 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
1907 | dependencies:
1908 | call-bind: 1.0.7
1909 | has-bigints: 1.0.2
1910 | has-symbols: 1.0.3
1911 | which-boxed-primitive: 1.0.2
1912 | dev: true
1913 |
1914 | /undici-types@5.26.5:
1915 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
1916 | dev: true
1917 |
1918 | /uri-js@4.4.1:
1919 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1920 | dependencies:
1921 | punycode: 2.3.1
1922 | dev: true
1923 |
1924 | /which-boxed-primitive@1.0.2:
1925 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
1926 | dependencies:
1927 | is-bigint: 1.0.4
1928 | is-boolean-object: 1.1.2
1929 | is-number-object: 1.0.7
1930 | is-string: 1.0.7
1931 | is-symbol: 1.0.4
1932 | dev: true
1933 |
1934 | /which-typed-array@1.1.15:
1935 | resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==}
1936 | engines: {node: '>= 0.4'}
1937 | dependencies:
1938 | available-typed-arrays: 1.0.7
1939 | call-bind: 1.0.7
1940 | for-each: 0.3.3
1941 | gopd: 1.0.1
1942 | has-tostringtag: 1.0.2
1943 | dev: true
1944 |
1945 | /which@2.0.2:
1946 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1947 | engines: {node: '>= 8'}
1948 | hasBin: true
1949 | dependencies:
1950 | isexe: 2.0.0
1951 | dev: true
1952 |
1953 | /wrappy@1.0.2:
1954 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
1955 | dev: true
1956 |
1957 | /yallist@4.0.0:
1958 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
1959 | dev: true
1960 |
1961 | /yocto-queue@0.1.0:
1962 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
1963 | engines: {node: '>=10'}
1964 | dev: true
1965 |
--------------------------------------------------------------------------------