Merge branch 'develop'

This commit is contained in:
SamTV12345 2023-12-11 20:16:59 +01:00
commit 84ac439c9b
24 changed files with 250 additions and 388 deletions

View file

@ -18,7 +18,7 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
node: [16, 18, 20] node: [18, 20, 21]
steps: steps:
- -
name: Checkout repository name: Checkout repository
@ -55,7 +55,7 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
node: [16, 18, 20] node: [18, 20, 21]
steps: steps:
- -
name: Checkout repository name: Checkout repository

View file

@ -16,7 +16,7 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
node: [19, 20] node: [19, 20, 21]
steps: steps:
- -
@ -78,7 +78,7 @@ jobs:
name: Remove standard frontend test files, so only admin tests are run name: Remove standard frontend test files, so only admin tests are run
run: mv src/tests/frontend/specs/* /tmp && mv /tmp/admin*.js src/tests/frontend/specs run: mv src/tests/frontend/specs/* /tmp && mv /tmp/admin*.js src/tests/frontend/specs
- -
uses: saucelabs/sauce-connect-action@v2.3.5 uses: saucelabs/sauce-connect-action@v2.3.6
with: with:
username: ${{ secrets.SAUCE_USERNAME }} username: ${{ secrets.SAUCE_USERNAME }}
accessKey: ${{ secrets.SAUCE_ACCESS_KEY }} accessKey: ${{ secrets.SAUCE_ACCESS_KEY }}

View file

@ -45,7 +45,7 @@ jobs:
run: | run: |
sed -e '/^ *"importExportRateLimiting":/,/^ *\}/ s/"max":.*/"max": 100000000/' -i settings.json sed -e '/^ *"importExportRateLimiting":/,/^ *\}/ s/"max":.*/"max": 100000000/' -i settings.json
- -
uses: saucelabs/sauce-connect-action@v2.3.5 uses: saucelabs/sauce-connect-action@v2.3.6
with: with:
username: ${{ secrets.SAUCE_USERNAME }} username: ${{ secrets.SAUCE_USERNAME }}
accessKey: ${{ secrets.SAUCE_ACCESS_KEY }} accessKey: ${{ secrets.SAUCE_ACCESS_KEY }}
@ -133,7 +133,7 @@ jobs:
name: Remove standard frontend test files, so only plugin tests are run name: Remove standard frontend test files, so only plugin tests are run
run: rm src/tests/frontend/specs/* run: rm src/tests/frontend/specs/*
- -
uses: saucelabs/sauce-connect-action@v2.3.5 uses: saucelabs/sauce-connect-action@v2.3.6
with: with:
username: ${{ secrets.SAUCE_USERNAME }} username: ${{ secrets.SAUCE_USERNAME }}
accessKey: ${{ secrets.SAUCE_ACCESS_KEY }} accessKey: ${{ secrets.SAUCE_ACCESS_KEY }}

View file

@ -9,7 +9,7 @@ jobs:
stale: stale:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/stale@v8 - uses: actions/stale@v9
with: with:
close-issue-label: wontfix close-issue-label: wontfix
close-pr-label: wontfix close-pr-label: wontfix

View file

@ -18,7 +18,7 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
node: [16, 18, 20] node: [18, 20, 21]
steps: steps:
- -
name: Check out latest release name: Check out latest release

View file

@ -1,3 +1,15 @@
# 1.9.5
### Compability changes
* This version deprecates NodeJS16 as it reached its end of life and won't receive any updates. So to get started with Etherpad v1.9.5 you need NodeJS 18 and above.
* The bundled windows NodeJS version has been bumped to the current LTS version 20.
### Notable enhancements and fixes
* The support for the tidy program to tidy up HTML files has been removed. This decision was made because it hasn't been updated for years and also caused an incompability when exporting a pad with Abiword.
# 1.9.4 # 1.9.4
### Compability changes ### Compability changes

View file

@ -441,10 +441,6 @@ For the editor container, you can also make it full width by adding `full-width-
| This is the absolute path to the soffice executable. LibreOffice can be used in lieu of Abiword to export pads. Setting it to null disables LibreOffice exporting. | This is the absolute path to the soffice executable. LibreOffice can be used in lieu of Abiword to export pads. Setting it to null disables LibreOffice exporting.
| `null` | `null`
| `TIDY_HTML`
| Path to the Tidy executable. Tidy is used to improve the quality of exported pads. Setting it to null disables Tidy.
| `null`
| `ALLOW_UNKNOWN_FILE_ENDS` | `ALLOW_UNKNOWN_FILE_ENDS`
| Allow import of file types other than the supported ones: txt, doc, docx, rtf, odt, html & htm | Allow import of file types other than the supported ones: txt, doc, docx, rtf, odt, html & htm
| `true` | `true`

View file

@ -322,14 +322,6 @@
*/ */
"soffice": "${SOFFICE:null}", "soffice": "${SOFFICE:null}",
/*
* Path to the Tidy executable.
*
* Tidy is used to improve the quality of exported pads.
* Setting it to null disables Tidy.
*/
"tidyHtml": "${TIDY_HTML:null}",
/* /*
* Allow import of file types other than the supported ones: * Allow import of file types other than the supported ones:
* txt, doc, docx, rtf, odt, html & htm * txt, doc, docx, rtf, odt, html & htm

View file

@ -323,14 +323,6 @@
*/ */
"soffice": null, "soffice": null,
/*
* Path to the Tidy executable.
*
* Tidy is used to improve the quality of exported pads.
* Setting it to null disables Tidy.
*/
"tidyHtml": null,
/* /*
* Allow import of file types other than the supported ones: * Allow import of file types other than the supported ones:
* txt, doc, docx, rtf, odt, html & htm * txt, doc, docx, rtf, odt, html & htm

View file

@ -54,7 +54,7 @@ try rm -rf node_modules
try mv node_modules_resolved node_modules try mv node_modules_resolved node_modules
log "download windows node..." log "download windows node..."
try wget "https://nodejs.org/dist/latest-v16.x/win-x64/node.exe" -O node.exe try wget "https://nodejs.org/dist/latest-v20.x/win-x64/node.exe" -O node.exe
log "create the zip..." log "create the zip..."
try zip -9 -r "${OUTPUT}" ./* try zip -9 -r "${OUTPUT}" ./*

View file

@ -5,9 +5,9 @@
"requires": true, "requires": true,
"dependencies": { "dependencies": {
"marked": { "marked": {
"version": "9.1.2", "version": "11.0.1",
"resolved": "https://registry.npmjs.org/marked/-/marked-9.1.2.tgz", "resolved": "https://registry.npmjs.org/marked/-/marked-11.0.1.tgz",
"integrity": "sha512-qoKMJqK0w6vkLk8+KnKZAH6neUZSNaQqVZ/h2yZ9S7CbLuFHyS2viB0jnqcWF9UKjwsAbMrQtnQhdmdvOVOw9w==" "integrity": "sha512-P4kDhFEMlvLePBPRwOcMOv6+lYUbhfbSxJFs3Jb4Qx7v6K7l+k8Dxh9CEGfRvK71tL+qIFz5y7Pe4uzt4+/A3A=="
} }
} }
} }

View file

@ -7,7 +7,7 @@
"node": ">=12.17.0" "node": ">=12.17.0"
}, },
"dependencies": { "dependencies": {
"marked": "^9.1.2" "marked": "^11.0.1"
}, },
"devDependencies": {}, "devDependencies": {},
"optionalDependencies": {}, "optionalDependencies": {},

View file

@ -160,6 +160,7 @@ try {
run('git merge --no-ff --no-edit develop'); run('git merge --no-ff --no-edit develop');
console.log(`Creating ${newVersion} tag...`); console.log(`Creating ${newVersion} tag...`);
run(`git tag -s '${newVersion}' -m '${newVersion}'`); run(`git tag -s '${newVersion}' -m '${newVersion}'`);
run(`git tag -s 'v${newVersion}' -m 'v${newVersion}'`);
console.log('Switching back to develop...'); console.log('Switching back to develop...');
run('git checkout develop'); run('git checkout develop');
console.log('Merging master into develop...'); console.log('Merging master into develop...');
@ -176,6 +177,8 @@ try {
console.warn(`Deleting ${newVersion} tag...`); console.warn(`Deleting ${newVersion} tag...`);
run(`git rev-parse -q --verify refs/tags/'${newVersion}' >/dev/null || exit 0; ` + run(`git rev-parse -q --verify refs/tags/'${newVersion}' >/dev/null || exit 0; ` +
`git tag -d '${newVersion}'`); `git tag -d '${newVersion}'`);
run(`git rev-parse -q --verify refs/tags/'v${newVersion}' >/dev/null || exit 0; ` +
`git tag -d 'v${newVersion}'`);
throw err; throw err;
} }

View file

@ -28,7 +28,7 @@
"pad.colorpicker.save": "Guardar", "pad.colorpicker.save": "Guardar",
"pad.colorpicker.cancel": "Zarrar", "pad.colorpicker.cancel": "Zarrar",
"pad.loading": "Cargando...", "pad.loading": "Cargando...",
"pad.noCookie": "Nun pudo alcontrase la cookie. ¡Por favor, permite les cookies nel navegador! La sesión y preferencies nun se guarden ente visites. Esto pué debese a qu'Etherpad inclúyese nun iFrame en dalgunos restoladores. Asegúrate de qu'Etherpad tea nel mesmu subdominiu/dominiu que la iFrame padre", "pad.noCookie": "Nun pudo alcontrase la cookie. ¡Por favor, permite les cookies nel navegador! La sesión y preferencies nun se guarden ente visites. Esto pue debese a qu'Etherpad inclúyese nun iFrame en dalgunos restoladores. Asegúrate de qu'Etherpad tea nel mesmu subdominiu/dominiu que l'iFrame padre",
"pad.permissionDenied": "Nun tienes permisu pa entrar a esti bloc", "pad.permissionDenied": "Nun tienes permisu pa entrar a esti bloc",
"pad.settings.padSettings": "Configuración del bloc", "pad.settings.padSettings": "Configuración del bloc",
"pad.settings.myView": "la mio vista", "pad.settings.myView": "la mio vista",

View file

@ -3,11 +3,32 @@
"authors": [ "authors": [
"Aefgh39622", "Aefgh39622",
"Afaz", "Afaz",
"Chqaz",
"Omotecho", "Omotecho",
"Shirayuki", "Shirayuki",
"Torinky" "Torinky"
] ]
}, },
"admin.page-title": "管理者ダッシュボード - Etherpad",
"admin_plugins": "プラグインマネージャー",
"admin_plugins.available": "利用可能なプラグイン",
"admin_plugins.available_not-found": "プラグインが見つかりません。",
"admin_plugins.available_fetching": "読み込み中…",
"admin_plugins.available_install.value": "インストール",
"admin_plugins.available_search.placeholder": "インストールするプラグインを検索する",
"admin_plugins.description": "説明",
"admin_plugins.installed": "インストール済みプラグイン",
"admin_plugins.installed_fetching": "インストール済みのプラグインを読み込んでいます…",
"admin_plugins.installed_nothing": "まだプラグインをインストールしていません。",
"admin_plugins.installed_uninstall.value": "アンインストール",
"admin_plugins.last-update": "最終更新",
"admin_plugins.name": "名前",
"admin_plugins.page-title": "プラグインマネージャー - Etherpad",
"admin_plugins.version": "バージョン",
"admin_plugins_info": "トラブルシューティングの情報",
"admin_plugins_info.hooks": "インストール済みフック",
"admin_plugins_info.hooks_client": "クライアント側のフック",
"admin_plugins_info.hooks_server": "サーバー側のフック",
"index.newPad": "新規作成", "index.newPad": "新規作成",
"index.createOpenPad": "または作成/編集するパッド名を入力:", "index.createOpenPad": "または作成/編集するパッド名を入力:",
"index.openPad": "次の名称の既存の Pad を開く:", "index.openPad": "次の名称の既存の Pad を開く:",

View file

@ -1,9 +1,11 @@
{ {
"@metadata": { "@metadata": {
"authors": [ "authors": [
"Aue Nai" "Aue Nai",
"咽頭べさ"
] ]
}, },
"admin_plugins.description": "တၚ်ထမံက်ထ္ၜး",
"index.newPad": "တၞးတၟိ", "index.newPad": "တၞးတၟိ",
"pad.toolbar.bold.title": "လ္စံက် (Ctrl+B)", "pad.toolbar.bold.title": "လ္စံက် (Ctrl+B)",
"pad.toolbar.italic.title": "ဒစေၚ် (Ctrl+I)", "pad.toolbar.italic.title": "ဒစေၚ် (Ctrl+I)",

View file

@ -2,6 +2,7 @@
"@metadata": { "@metadata": {
"authors": [ "authors": [
"AmaryllisGardener", "AmaryllisGardener",
"CiphriusKane",
"John Reid", "John Reid",
"Nintendofan885" "Nintendofan885"
] ]
@ -50,7 +51,7 @@
"pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF", "pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)", "pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.abiword.innerHTML": "Ye can yinly import fae plain tex or HTML formats. Fer mair advanced import features please <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\">install abiword</a>.", "pad.importExport.abiword.innerHTML": "Ye can anely import fae plain tex or HTML formats. Fur mair advanced import features please <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\">install abiword</a>.",
"pad.modals.connected": "Connected.", "pad.modals.connected": "Connected.",
"pad.modals.reconnecting": "Reconnectin til yer pad..", "pad.modals.reconnecting": "Reconnectin til yer pad..",
"pad.modals.forcereconnect": "Force reconnect", "pad.modals.forcereconnect": "Force reconnect",
@ -70,13 +71,13 @@
"pad.modals.badChangeset.cause": "This coud be cause o ae wrang server confeeguration or some ither onexpected behavior. Please contact the service admeenistrator, gif ye feel that this is ae mistak. Try tae reconnect in order tae continue editing.", "pad.modals.badChangeset.cause": "This coud be cause o ae wrang server confeeguration or some ither onexpected behavior. Please contact the service admeenistrator, gif ye feel that this is ae mistak. Try tae reconnect in order tae continue editing.",
"pad.modals.corruptPad.explanation": "The pad ye'r trying te access is mingin.", "pad.modals.corruptPad.explanation": "The pad ye'r trying te access is mingin.",
"pad.modals.corruptPad.cause": "This micht be cause o ae wrang server confeeguration or some ither onexpected behavior. Please contact the service admeenistrater.", "pad.modals.corruptPad.cause": "This micht be cause o ae wrang server confeeguration or some ither onexpected behavior. Please contact the service admeenistrater.",
"pad.modals.deleted": "Delytit.", "pad.modals.deleted": "Deletit.",
"pad.modals.deleted.explanation": "This pad has been hif't.", "pad.modals.deleted.explanation": "This pad has been hif't.",
"pad.modals.disconnected": "Ye'v been disconnected.", "pad.modals.disconnected": "Ye'v been disconnected.",
"pad.modals.disconnected.explanation": "The connection til the server wis loast", "pad.modals.disconnected.explanation": "The connection til the server wis loast",
"pad.modals.disconnected.cause": "The server micht be onavailable. Please notify the service admeenistrater gif this continues tae happen.", "pad.modals.disconnected.cause": "The server micht be onavailable. Please notify the service admeenistrater gif this continues tae happen.",
"pad.share": "Share this pad", "pad.share": "Share this pad",
"pad.share.readonly": "Read yinly", "pad.share.readonly": "Read anely",
"pad.share.link": "Airtin", "pad.share.link": "Airtin",
"pad.share.emebdcode": "Embed URL", "pad.share.emebdcode": "Embed URL",
"pad.chat": "Chait", "pad.chat": "Chait",
@ -91,8 +92,8 @@
"timeslider.version": "Version {{version}}", "timeslider.version": "Version {{version}}",
"timeslider.saved": "Saved {{day}} {{month}}, {{year}}", "timeslider.saved": "Saved {{day}} {{month}}, {{year}}",
"timeslider.playPause": "Playback / Pause Pad Contents", "timeslider.playPause": "Playback / Pause Pad Contents",
"timeslider.backRevision": "Gae back a reveesion in this Pad", "timeslider.backRevision": "Gang back ae revision in this Pad",
"timeslider.forwardRevision": "Gae forwart a reveesion in this Pad", "timeslider.forwardRevision": "Gang forrit ae revision in this pad",
"timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}",
"timeslider.month.january": "Januair", "timeslider.month.january": "Januair",
"timeslider.month.february": "Febuair", "timeslider.month.february": "Febuair",

View file

@ -27,7 +27,6 @@ const fs = require('fs');
const settings = require('../utils/Settings'); const settings = require('../utils/Settings');
const os = require('os'); const os = require('os');
const hooks = require('../../static/js/pluginfw/hooks'); const hooks = require('../../static/js/pluginfw/hooks');
const TidyHtml = require('../utils/TidyHtml');
const util = require('util'); const util = require('util');
const { checkValidRev } = require('../utils/checkValidRev'); const { checkValidRev } = require('../utils/checkValidRev');
@ -93,10 +92,8 @@ exports.doExport = async (req, res, padId, readOnlyId, type) => {
const srcFile = `${tempDirectory}/etherpad_export_${randNum}.html`; const srcFile = `${tempDirectory}/etherpad_export_${randNum}.html`;
await fsp_writeFile(srcFile, html); await fsp_writeFile(srcFile, html);
// Tidy up the exported HTML
// ensure html can be collected by the garbage collector // ensure html can be collected by the garbage collector
html = null; html = null;
await TidyHtml.tidy(srcFile);
// send the convert job to the converter (abiword, libreoffice, ..) // send the convert job to the converter (abiword, libreoffice, ..)
const destFile = `${tempDirectory}/etherpad_export_${randNum}.${type}`; const destFile = `${tempDirectory}/etherpad_export_${randNum}.${type}`;

View file

@ -45,7 +45,7 @@ for (let i = 0; i < argv.length; i++) {
exports.argv.sessionkey = arg; exports.argv.sessionkey = arg;
} }
// Override location of settings.json file // Override location of APIKEY.txt file
if (prevArg === '--apikey') { if (prevArg === '--apikey') {
exports.argv.apikey = arg; exports.argv.apikey = arg;
} }

View file

@ -260,11 +260,6 @@ exports.abiword = null;
*/ */
exports.soffice = null; exports.soffice = null;
/**
* The path of the tidy executable
*/
exports.tidyHtml = null;
/** /**
* Should we support none natively supported file types on import? * Should we support none natively supported file types on import?
*/ */

View file

@ -1,43 +0,0 @@
'use strict';
/**
* Tidy up the HTML in a given file
*/
const log4js = require('log4js');
const settings = require('./Settings');
const spawn = require('child_process').spawn;
exports.tidy = (srcFile) => {
const logger = log4js.getLogger('TidyHtml');
return new Promise((resolve, reject) => {
// Don't do anything if Tidy hasn't been enabled
if (!settings.tidyHtml) {
logger.debug('tidyHtml has not been configured yet, ignoring tidy request');
return resolve(null);
}
let errMessage = '';
// Spawn a new tidy instance that cleans up the file inline
logger.debug(`Tidying ${srcFile}`);
const tidy = spawn(settings.tidyHtml, ['-modify', srcFile]);
// Keep track of any error messages
tidy.stderr.on('data', (data) => {
errMessage += data.toString();
});
tidy.on('close', (code) => {
// Tidy returns a 0 when no errors occur and a 1 exit code when
// the file could be tidied but a few warnings were generated
if (code === 0 || code === 1) {
logger.debug(`Tidied ${srcFile} successfully`);
resolve(null);
} else {
logger.error(`Failed to tidy ${srcFile}\n${errMessage}`);
reject(`Tidy died with exit code ${code}`);
}
});
});
};

397
src/package-lock.json generated
View file

@ -1,6 +1,6 @@
{ {
"name": "ep_etherpad-lite", "name": "ep_etherpad-lite",
"version": "1.9.4", "version": "1.9.5",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@ -38,9 +38,9 @@
"dev": true "dev": true
}, },
"@eslint/eslintrc": { "@eslint/eslintrc": {
"version": "2.1.2", "version": "2.1.4",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
"integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"ajv": "^6.12.4", "ajv": "^6.12.4",
@ -90,9 +90,9 @@
} }
}, },
"@eslint/js": { "@eslint/js": {
"version": "8.52.0", "version": "8.55.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz",
"integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==",
"dev": true "dev": true
}, },
"@humanwhocodes/config-array": { "@humanwhocodes/config-array": {
@ -170,9 +170,9 @@
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
}, },
"@jridgewell/trace-mapping": { "@jridgewell/trace-mapping": {
"version": "0.3.19", "version": "0.3.20",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
"integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
"requires": { "requires": {
"@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14" "@jridgewell/sourcemap-codec": "^1.4.14"
@ -261,11 +261,6 @@
"integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==",
"dev": true "dev": true
}, },
"@tootallnate/once": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
"integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A=="
},
"@types/hast": { "@types/hast": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.1.tgz", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.1.tgz",
@ -507,11 +502,6 @@
"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ=="
}, },
"abab": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
"integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA=="
},
"accepts": { "accepts": {
"version": "1.3.8", "version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@ -526,37 +516,23 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
"integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==" "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw=="
}, },
"acorn-globals": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz",
"integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==",
"requires": {
"acorn": "^8.1.0",
"acorn-walk": "^8.0.2"
}
},
"acorn-jsx": { "acorn-jsx": {
"version": "5.3.2", "version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true "dev": true
}, },
"acorn-walk": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
"integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA=="
},
"after": { "after": {
"version": "0.8.2", "version": "0.8.2",
"resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
"integrity": "sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA==" "integrity": "sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA=="
}, },
"agent-base": { "agent-base": {
"version": "6.0.2", "version": "7.1.0",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz",
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==",
"requires": { "requires": {
"debug": "4" "debug": "^4.3.4"
}, },
"dependencies": { "dependencies": {
"debug": { "debug": {
@ -724,9 +700,9 @@
"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
}, },
"async": { "async": {
"version": "3.2.4", "version": "3.2.5",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
"integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg=="
}, },
"asynckit": { "asynckit": {
"version": "0.4.0", "version": "0.4.0",
@ -740,9 +716,9 @@
"dev": true "dev": true
}, },
"axios": { "axios": {
"version": "1.6.0", "version": "1.6.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz",
"integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==",
"requires": { "requires": {
"follow-redirects": "^1.15.0", "follow-redirects": "^1.15.0",
"form-data": "^4.0.0", "form-data": "^4.0.0",
@ -928,9 +904,9 @@
} }
}, },
"clean-css": { "clean-css": {
"version": "5.3.2", "version": "5.3.3",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz",
"integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==",
"requires": { "requires": {
"source-map": "~0.6.0" "source-map": "~0.6.0"
} }
@ -1050,34 +1026,21 @@
"which": "^2.0.1" "which": "^2.0.1"
} }
}, },
"cssom": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
"integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw=="
},
"cssstyle": { "cssstyle": {
"version": "2.3.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz",
"integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==",
"requires": { "requires": {
"cssom": "~0.3.6" "rrweb-cssom": "^0.6.0"
},
"dependencies": {
"cssom": {
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
"integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
}
} }
}, },
"data-urls": { "data-urls": {
"version": "3.0.2", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
"integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
"requires": { "requires": {
"abab": "^2.0.6", "whatwg-mimetype": "^4.0.0",
"whatwg-mimetype": "^3.0.0", "whatwg-url": "^14.0.0"
"whatwg-url": "^11.0.0"
} }
}, },
"date-format": { "date-format": {
@ -1198,14 +1161,6 @@
"esutils": "^2.0.2" "esutils": "^2.0.2"
} }
}, },
"domexception": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
"integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==",
"requires": {
"webidl-conversions": "^7.0.0"
}
},
"ee-first": { "ee-first": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@ -1418,27 +1373,16 @@
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true "dev": true
}, },
"escodegen": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
"integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
"requires": {
"esprima": "^4.0.1",
"estraverse": "^5.2.0",
"esutils": "^2.0.2",
"source-map": "~0.6.1"
}
},
"eslint": { "eslint": {
"version": "8.52.0", "version": "8.55.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz",
"integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1", "@eslint-community/regexpp": "^4.6.1",
"@eslint/eslintrc": "^2.1.2", "@eslint/eslintrc": "^2.1.4",
"@eslint/js": "8.52.0", "@eslint/js": "8.55.0",
"@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/config-array": "^0.11.13",
"@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8", "@nodelib/fs.walk": "^1.2.8",
@ -1808,11 +1752,6 @@
"eslint-visitor-keys": "^3.4.1" "eslint-visitor-keys": "^3.4.1"
} }
}, },
"esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
},
"esquery": { "esquery": {
"version": "1.5.0", "version": "1.5.0",
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
@ -1834,12 +1773,14 @@
"estraverse": { "estraverse": {
"version": "5.3.0", "version": "5.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true
}, },
"esutils": { "esutils": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
}, },
"etag": { "etag": {
"version": "1.8.1", "version": "1.8.1",
@ -1990,9 +1931,9 @@
} }
}, },
"express-rate-limit": { "express-rate-limit": {
"version": "7.1.3", "version": "7.1.5",
"resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.1.3.tgz", "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.1.5.tgz",
"integrity": "sha512-BDes6WeNYSGRRGQU8QDNwUnwqaBro28HN/TTweM3RlxXRHDld8RLoH7tbfCxAc0hamQyn6aL0KrfR45+ZxknYg==" "integrity": "sha512-/iVogxu7ueadrepw1bS0X0kaRC/U0afwiYRSLg68Ts+p4Dc85Q5QKsOnPS/QUjPMHvOJQtBDrZgvkOzf8ejUYw=="
}, },
"express-session": { "express-session": {
"version": "npm:@etherpad/express-session@1.18.2", "version": "npm:@etherpad/express-session@1.18.2",
@ -2148,9 +2089,9 @@
"dev": true "dev": true
}, },
"flat-cache": { "flat-cache": {
"version": "3.1.1", "version": "3.2.0",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
"integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
"dev": true, "dev": true,
"requires": { "requires": {
"flatted": "^3.2.9", "flatted": "^3.2.9",
@ -2576,11 +2517,11 @@
"integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g=="
}, },
"html-encoding-sniffer": { "html-encoding-sniffer": {
"version": "3.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
"integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
"requires": { "requires": {
"whatwg-encoding": "^2.0.0" "whatwg-encoding": "^3.1.1"
} }
}, },
"html-void-elements": { "html-void-elements": {
@ -2601,13 +2542,12 @@
} }
}, },
"http-proxy-agent": { "http-proxy-agent": {
"version": "5.0.0", "version": "7.0.0",
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz",
"integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==",
"requires": { "requires": {
"@tootallnate/once": "2", "agent-base": "^7.1.0",
"agent-base": "6", "debug": "^4.3.4"
"debug": "4"
}, },
"dependencies": { "dependencies": {
"debug": { "debug": {
@ -2626,11 +2566,11 @@
} }
}, },
"https-proxy-agent": { "https-proxy-agent": {
"version": "5.0.1", "version": "7.0.2",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz",
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==",
"requires": { "requires": {
"agent-base": "6", "agent-base": "^7.0.2",
"debug": "4" "debug": "4"
}, },
"dependencies": { "dependencies": {
@ -2949,36 +2889,31 @@
} }
}, },
"jsdom": { "jsdom": {
"version": "20.0.3", "version": "23.0.1",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.0.1.tgz",
"integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", "integrity": "sha512-2i27vgvlUsGEBO9+/kJQRbtqtm+191b5zAZrU/UezVmnC2dlDAFLgDYJvAEi94T4kjsRKkezEtLQTgsNEsW2lQ==",
"requires": { "requires": {
"abab": "^2.0.6", "cssstyle": "^3.0.0",
"acorn": "^8.8.1", "data-urls": "^5.0.0",
"acorn-globals": "^7.0.0", "decimal.js": "^10.4.3",
"cssom": "^0.5.0",
"cssstyle": "^2.3.0",
"data-urls": "^3.0.2",
"decimal.js": "^10.4.2",
"domexception": "^4.0.0",
"escodegen": "^2.0.0",
"form-data": "^4.0.0", "form-data": "^4.0.0",
"html-encoding-sniffer": "^3.0.0", "html-encoding-sniffer": "^4.0.0",
"http-proxy-agent": "^5.0.0", "http-proxy-agent": "^7.0.0",
"https-proxy-agent": "^5.0.1", "https-proxy-agent": "^7.0.2",
"is-potential-custom-element-name": "^1.0.1", "is-potential-custom-element-name": "^1.0.1",
"nwsapi": "^2.2.2", "nwsapi": "^2.2.7",
"parse5": "^7.1.1", "parse5": "^7.1.2",
"rrweb-cssom": "^0.6.0",
"saxes": "^6.0.0", "saxes": "^6.0.0",
"symbol-tree": "^3.2.4", "symbol-tree": "^3.2.4",
"tough-cookie": "^4.1.2", "tough-cookie": "^4.1.3",
"w3c-xmlserializer": "^4.0.0", "w3c-xmlserializer": "^5.0.0",
"webidl-conversions": "^7.0.0", "webidl-conversions": "^7.0.0",
"whatwg-encoding": "^2.0.0", "whatwg-encoding": "^3.1.1",
"whatwg-mimetype": "^3.0.0", "whatwg-mimetype": "^4.0.0",
"whatwg-url": "^11.0.0", "whatwg-url": "^14.0.0",
"ws": "^8.11.0", "ws": "^8.14.2",
"xml-name-validator": "^4.0.0" "xml-name-validator": "^5.0.0"
} }
}, },
"json-buffer": { "json-buffer": {
@ -3042,44 +2977,6 @@
"pako": "~1.0.2", "pako": "~1.0.2",
"readable-stream": "~2.3.6", "readable-stream": "~2.3.6",
"setimmediate": "^1.0.5" "setimmediate": "^1.0.5"
},
"dependencies": {
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
"dev": true
},
"readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
"safe-buffer": "~5.1.0"
}
}
} }
}, },
"just-extend": { "just-extend": {
@ -7141,9 +7038,9 @@
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
}, },
"rate-limiter-flexible": { "rate-limiter-flexible": {
"version": "3.0.2", "version": "3.0.6",
"resolved": "https://registry.npmjs.org/rate-limiter-flexible/-/rate-limiter-flexible-3.0.2.tgz", "resolved": "https://registry.npmjs.org/rate-limiter-flexible/-/rate-limiter-flexible-3.0.6.tgz",
"integrity": "sha512-5kQnZBfQ025dBL7cjqLxrCk0ud8DWEMZJH06VJyhch+Es0gQ/lny9yiIRf6mcbBj8aMTSCn2Xp9KDDao3Raq6g==" "integrity": "sha512-tlvbee6lyse/XTWmsuBDS4MT8N65FyM151bPmQlFyfhv9+RIHs7d3rSTXoz0j35H910dM01mH0yTIeWYo8+aAw=="
}, },
"raw-body": { "raw-body": {
"version": "2.5.1", "version": "2.5.1",
@ -7156,6 +7053,35 @@
"unpipe": "1.0.0" "unpipe": "1.0.0"
} }
}, },
"readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
},
"dependencies": {
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
"dev": true
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
}
}
},
"readdirp": { "readdirp": {
"version": "3.6.0", "version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@ -7277,6 +7203,11 @@
"glob": "^7.1.3" "glob": "^7.1.3"
} }
}, },
"rrweb-cssom": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz",
"integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw=="
},
"run-parallel": { "run-parallel": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@ -7341,9 +7272,9 @@
"integrity": "sha512-5qfoAgfRWS1sUn+fUJtdbbqM1BD/LoQGa+smPTDjf9OqHyuJqi6ewtbYL0+V1S1RaU6OCOCMWGZocIfz2YK4uw==" "integrity": "sha512-5qfoAgfRWS1sUn+fUJtdbbqM1BD/LoQGa+smPTDjf9OqHyuJqi6ewtbYL0+V1S1RaU6OCOCMWGZocIfz2YK4uw=="
}, },
"selenium-webdriver": { "selenium-webdriver": {
"version": "4.14.0", "version": "4.16.0",
"resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.14.0.tgz", "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.16.0.tgz",
"integrity": "sha512-637rs8anqMKHbWxcBZpyG3Gcs+rBUtAUiqk0O/knUqH4Paj3MFUZrz88/pVGOLNryEVy2z92fZomT8p1ENl1gA==", "integrity": "sha512-IbqpRpfGE7JDGgXHJeWuCqT/tUqnLvZ14csSwt+S8o4nJo3RtQoE9VR4jB47tP/A8ArkYsh/THuMY6kyRP6kuA==",
"dev": true, "dev": true,
"requires": { "requires": {
"jszip": "^3.10.1", "jszip": "^3.10.1",
@ -7458,9 +7389,9 @@
} }
}, },
"sinon": { "sinon": {
"version": "17.0.0", "version": "17.0.1",
"resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.0.tgz", "resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.1.tgz",
"integrity": "sha512-p4lJiYKBoOEVUxxVIC9H1MM2znG1/c8gud++I2BauJA5hsz7hHsst35eurNWXTusBsIq66FzOQbZ/uMdpvbPIQ==", "integrity": "sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==",
"dev": true, "dev": true,
"requires": { "requires": {
"@sinonjs/commons": "^3.0.0", "@sinonjs/commons": "^3.0.0",
@ -7695,6 +7626,23 @@
"es-abstract": "^1.22.1" "es-abstract": "^1.22.1"
} }
}, },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
"safe-buffer": "~5.1.0"
},
"dependencies": {
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
}
}
},
"stringify-entities": { "stringify-entities": {
"version": "4.0.3", "version": "4.0.3",
"resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz",
@ -7822,9 +7770,9 @@
"dev": true "dev": true
}, },
"terser": { "terser": {
"version": "5.22.0", "version": "5.26.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.22.0.tgz", "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz",
"integrity": "sha512-hHZVLgRA2z4NWcN6aS5rQDc+7Dcy58HOf2zbYwmFcQ+ua3h6eEFf5lIDKTzbWwlazPyOZsFQO8V80/IjVNExEw==", "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==",
"requires": { "requires": {
"@jridgewell/source-map": "^0.3.3", "@jridgewell/source-map": "^0.3.3",
"acorn": "^8.8.2", "acorn": "^8.8.2",
@ -7919,11 +7867,18 @@
} }
}, },
"tr46": { "tr46": {
"version": "3.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
"integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
"requires": { "requires": {
"punycode": "^2.1.1" "punycode": "^2.3.1"
},
"dependencies": {
"punycode": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="
}
} }
}, },
"trim-lines": { "trim-lines": {
@ -8041,15 +7996,15 @@
} }
}, },
"typescript": { "typescript": {
"version": "4.9.5", "version": "5.3.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
"integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
"dev": true "dev": true
}, },
"ueberdb2": { "ueberdb2": {
"version": "4.2.32", "version": "4.2.44",
"resolved": "https://registry.npmjs.org/ueberdb2/-/ueberdb2-4.2.32.tgz", "resolved": "https://registry.npmjs.org/ueberdb2/-/ueberdb2-4.2.44.tgz",
"integrity": "sha512-Ob+jsHtAW/9RVrjKSNJuNudYQ60FRICeXx2CZvuaobi5J1eXXRnfv/SzOWhYEf07kd3stCu9qy2YtAxLDdgY4Q==" "integrity": "sha512-OeVKUtchoRg1O4/sza9PqU1igOfpifqaDyGNuotmG1J6q0uG+0BnUtGNeaOfgoYbDjlI0iPShy792Px6BHr1rw=="
}, },
"uid-safe": { "uid-safe": {
"version": "2.1.5", "version": "2.1.5",
@ -8210,11 +8165,11 @@
} }
}, },
"w3c-xmlserializer": { "w3c-xmlserializer": {
"version": "4.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
"integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
"requires": { "requires": {
"xml-name-validator": "^4.0.0" "xml-name-validator": "^5.0.0"
} }
}, },
"web-namespaces": { "web-namespaces": {
@ -8228,9 +8183,9 @@
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="
}, },
"whatwg-encoding": { "whatwg-encoding": {
"version": "2.0.0", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
"integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
"requires": { "requires": {
"iconv-lite": "0.6.3" "iconv-lite": "0.6.3"
}, },
@ -8246,16 +8201,16 @@
} }
}, },
"whatwg-mimetype": { "whatwg-mimetype": {
"version": "3.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
"integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==" "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg=="
}, },
"whatwg-url": { "whatwg-url": {
"version": "11.0.0", "version": "14.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz",
"integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==",
"requires": { "requires": {
"tr46": "^3.0.0", "tr46": "^5.0.0",
"webidl-conversions": "^7.0.0" "webidl-conversions": "^7.0.0"
} }
}, },
@ -8326,9 +8281,9 @@
"integrity": "sha512-Ip6C2KeQPl/F3aP1EfOnPoQk14Udd9lffpoqWDNH3Xt78svxPbv53ngtmtfI0q2Te3oTq79XKTnRNXVIn/GsPA==" "integrity": "sha512-Ip6C2KeQPl/F3aP1EfOnPoQk14Udd9lffpoqWDNH3Xt78svxPbv53ngtmtfI0q2Te3oTq79XKTnRNXVIn/GsPA=="
}, },
"xml-name-validator": { "xml-name-validator": {
"version": "4.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
"integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==" "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg=="
}, },
"xmlchars": { "xmlchars": {
"version": "2.2.0", "version": "2.2.0",

View file

@ -30,23 +30,23 @@
} }
], ],
"dependencies": { "dependencies": {
"async": "^3.2.4", "async": "^3.2.5",
"axios": "^1.6.0", "axios": "^1.6.2",
"clean-css": "^5.3.2", "clean-css": "^5.3.3",
"cookie-parser": "^1.4.6", "cookie-parser": "^1.4.6",
"cross-spawn": "^7.0.3", "cross-spawn": "^7.0.3",
"ejs": "^3.1.9", "ejs": "^3.1.9",
"etherpad-require-kernel": "^1.0.15", "etherpad-require-kernel": "^1.0.15",
"etherpad-yajsml": "0.0.12", "etherpad-yajsml": "0.0.12",
"express": "4.18.2", "express": "4.18.2",
"express-rate-limit": "^7.1.3", "express-rate-limit": "^7.1.5",
"express-session": "npm:@etherpad/express-session@^1.18.2", "express-session": "npm:@etherpad/express-session@^1.18.2",
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"find-root": "1.1.0", "find-root": "1.1.0",
"formidable": "^3.5.1", "formidable": "^3.5.1",
"http-errors": "^2.0.0", "http-errors": "^2.0.0",
"js-cookie": "^3.0.5", "js-cookie": "^3.0.5",
"jsdom": "^20.0.0", "jsdom": "^23.0.1",
"jsonminify": "0.4.2", "jsonminify": "0.4.2",
"languages4translatewiki": "0.1.3", "languages4translatewiki": "0.1.3",
"lodash.clonedeep": "4.5.0", "lodash.clonedeep": "4.5.0",
@ -56,7 +56,7 @@
"npm": "^6.14.18", "npm": "^6.14.18",
"openapi-backend": "^5.10.5", "openapi-backend": "^5.10.5",
"proxy-addr": "^2.0.7", "proxy-addr": "^2.0.7",
"rate-limiter-flexible": "^3.0.2", "rate-limiter-flexible": "^3.0.6",
"rehype": "^13.0.1", "rehype": "^13.0.1",
"rehype-minify-whitespace": "^6.0.0", "rehype-minify-whitespace": "^6.0.0",
"resolve": "1.22.8", "resolve": "1.22.8",
@ -64,10 +64,10 @@
"semver": "^7.5.4", "semver": "^7.5.4",
"socket.io": "^2.5.0", "socket.io": "^2.5.0",
"superagent": "^8.1.2", "superagent": "^8.1.2",
"terser": "^5.22.0", "terser": "^5.26.0",
"threads": "^1.7.0", "threads": "^1.7.0",
"tinycon": "0.6.8", "tinycon": "0.6.8",
"ueberdb2": "^4.2.32", "ueberdb2": "^4.2.44",
"underscore": "1.13.6", "underscore": "1.13.6",
"unorm": "1.6.0", "unorm": "1.6.0",
"wtfnode": "^0.9.1" "wtfnode": "^0.9.1"
@ -78,22 +78,22 @@
"etherpad-lite": "node/server.js" "etherpad-lite": "node/server.js"
}, },
"devDependencies": { "devDependencies": {
"eslint": "^8.52.0", "eslint": "^8.55.0",
"eslint-config-etherpad": "^3.0.22", "eslint-config-etherpad": "^3.0.22",
"etherpad-cli-client": "^2.0.2", "etherpad-cli-client": "^2.0.2",
"mocha": "^10.0.0", "mocha": "^10.0.0",
"mocha-froth": "^0.2.10", "mocha-froth": "^0.2.10",
"nodeify": "^1.0.1", "nodeify": "^1.0.1",
"openapi-schema-validation": "^0.4.2", "openapi-schema-validation": "^0.4.2",
"selenium-webdriver": "^4.14.0", "selenium-webdriver": "^4.16.0",
"set-cookie-parser": "^2.6.0", "set-cookie-parser": "^2.6.0",
"sinon": "^17.0.0", "sinon": "^17.0.1",
"split-grid": "^1.0.11", "split-grid": "^1.0.11",
"supertest": "^6.3.3", "supertest": "^6.3.3",
"typescript": "^4.9.5" "typescript": "^5.3.3"
}, },
"engines": { "engines": {
"node": ">=16.20.1", "node": ">=18.18.2",
"npm": ">=6.14.0" "npm": ">=6.14.0"
}, },
"repository": { "repository": {
@ -105,6 +105,6 @@
"test": "mocha --timeout 120000 --recursive tests/backend/specs ../node_modules/ep_*/static/tests/backend/specs", "test": "mocha --timeout 120000 --recursive tests/backend/specs ../node_modules/ep_*/static/tests/backend/specs",
"test-container": "mocha --timeout 5000 tests/container/specs/api" "test-container": "mocha --timeout 5000 tests/container/specs/api"
}, },
"version": "1.9.4", "version": "1.9.5",
"license": "Apache-2.0" "license": "Apache-2.0"
} }

View file

@ -1,61 +0,0 @@
'use strict';
const Settings = require('../../../../node/utils/Settings');
const TidyHtml = require('../../../../node/utils/TidyHtml');
const assert = require('assert');
const os = require('os');
const fs = require('fs');
const path = require('path');
const nodeify = require('nodeify');
describe(__filename, function () {
describe('tidyHtml', function () {
const tidy = (file, callback) => nodeify(TidyHtml.tidy(file), callback);
it('Tidies HTML', function (done) {
// If the user hasn't configured Tidy, we skip this tests as it's required for this test
if (!Settings.tidyHtml) {
this.skip();
}
// Try to tidy up a bad HTML file
const tmpDir = os.tmpdir();
const tmpFile = path.join(tmpDir, `tmp_${Math.floor(Math.random() * 1000000)}.html`);
fs.writeFileSync(tmpFile, '<html><body><p>a paragraph</p><li>List without outer UL</li>trailing closing p</p></body></html>');
tidy(tmpFile, (err) => {
assert.ok(!err);
// Read the file again
const cleanedHtml = fs.readFileSync(tmpFile).toString();
const expectedHtml = [
'<title></title>',
'</head>',
'<body>',
'<p>a paragraph</p>',
'<ul>',
'<li>List without outer UL</li>',
'<li style="list-style: none">trailing closing p</li>',
'</ul>',
'</body>',
'</html>',
].join('\n');
assert.notStrictEqual(cleanedHtml.indexOf(expectedHtml), -1);
done();
});
});
it('can deal with errors', function (done) {
// If the user hasn't configured Tidy, we skip this tests as it's required for this test
if (!Settings.tidyHtml) {
this.skip();
}
tidy('/some/none/existing/file.html', (err) => {
assert.ok(err);
done();
});
});
});
});