mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-01-19 14:13:34 +01:00
WIP: webpack
This commit is contained in:
parent
bf831576ea
commit
cb50156fe0
7 changed files with 470 additions and 101 deletions
|
@ -6,9 +6,11 @@ const fs = require('fs');
|
||||||
const fsp = fs.promises;
|
const fsp = fs.promises;
|
||||||
const toolbar = require('../../utils/toolbar');
|
const toolbar = require('../../utils/toolbar');
|
||||||
const hooks = require('../../../static/js/pluginfw/hooks');
|
const hooks = require('../../../static/js/pluginfw/hooks');
|
||||||
|
const plugins = require('../../../static/js/pluginfw/plugin_defs');
|
||||||
const settings = require('../../utils/Settings');
|
const settings = require('../../utils/Settings');
|
||||||
const util = require('util');
|
const util = require('util');
|
||||||
const webaccess = require('./webaccess');
|
const webaccess = require('./webaccess');
|
||||||
|
const webpack = require('webpack');
|
||||||
|
|
||||||
exports.expressPreSession = async (hookName, {app}) => {
|
exports.expressPreSession = async (hookName, {app}) => {
|
||||||
// This endpoint is intended to conform to:
|
// This endpoint is intended to conform to:
|
||||||
|
@ -69,12 +71,57 @@ exports.expressPreSession = async (hookName, {app}) => {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.expressCreateServer = (hookName, args, cb) => {
|
exports.expressCreateServer = async (hookName, args) => {
|
||||||
// serve index.html under /
|
// serve index.html under /
|
||||||
args.app.get('/', (req, res) => {
|
args.app.get('/', (req, res) => {
|
||||||
res.send(eejs.require('ep_etherpad-lite/templates/index.html', {req}));
|
res.send(eejs.require('ep_etherpad-lite/templates/index.html', {req}));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
await fsp.mkdir(path.join(settings.root, 'var/js'), {recursive: true});
|
||||||
|
await fsp.writeFile(
|
||||||
|
path.join(settings.root, 'var/js/padbootstrap.js'),
|
||||||
|
eejs.require('ep_etherpad-lite/templates/padbootstrap.js', {
|
||||||
|
pluginModules: (() => {
|
||||||
|
const pluginModules = new Set();
|
||||||
|
for (const part of plugins.parts) {
|
||||||
|
for (const [, hookFnName] of Object.entries(part.client_hooks || {})) {
|
||||||
|
pluginModules.add(hookFnName.split(':')[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [...pluginModules];
|
||||||
|
})(),
|
||||||
|
settings,
|
||||||
|
}));
|
||||||
|
|
||||||
|
console.log('Packaging client-side JavaScript...');
|
||||||
|
const compiler = webpack({
|
||||||
|
context: settings.root,
|
||||||
|
devtool: 'source-map',
|
||||||
|
entry: './var/js/padbootstrap.js',
|
||||||
|
mode: process.env.NODE_ENV || 'development',
|
||||||
|
module: {
|
||||||
|
parser: {
|
||||||
|
javascript: {
|
||||||
|
commonjsMagicComments: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
path: path.join(settings.root, 'var/js'),
|
||||||
|
filename: '[name]-[contenthash].js',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const stats = await util.promisify(compiler.run.bind(compiler))();
|
||||||
|
console.log(`webpack stats:\n${stats}`);
|
||||||
|
const mainName = stats.toJson('minimal').assetsByChunkName.main;
|
||||||
|
|
||||||
|
args.app.get(`/${mainName}`, (req, res, next) => {
|
||||||
|
res.sendFile(path.join(settings.root, `var/js/${mainName}`));
|
||||||
|
});
|
||||||
|
args.app.get(`/${mainName}.map`, (req, res, next) => {
|
||||||
|
res.sendFile(path.join(settings.root, `var/js/${mainName}.map`));
|
||||||
|
});
|
||||||
|
|
||||||
// serve pad.html under /p
|
// serve pad.html under /p
|
||||||
args.app.get('/p/:pad', (req, res, next) => {
|
args.app.get('/p/:pad', (req, res, next) => {
|
||||||
// The below might break for pads being rewritten
|
// The below might break for pads being rewritten
|
||||||
|
@ -91,6 +138,7 @@ exports.expressCreateServer = (hookName, args, cb) => {
|
||||||
req,
|
req,
|
||||||
toolbar,
|
toolbar,
|
||||||
isReadOnly,
|
isReadOnly,
|
||||||
|
entrypoint: `../${mainName}`,
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -112,6 +160,4 @@ exports.expressCreateServer = (hookName, args, cb) => {
|
||||||
// express-session automatically calls req.session.touch() so we don't need to do it here.
|
// express-session automatically calls req.session.touch() so we don't need to do it here.
|
||||||
res.json({status: 'ok'});
|
res.json({status: 'ok'});
|
||||||
});
|
});
|
||||||
|
|
||||||
return cb();
|
|
||||||
};
|
};
|
||||||
|
|
378
src/package-lock.json
generated
378
src/package-lock.json
generated
|
@ -654,6 +654,29 @@
|
||||||
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
|
||||||
"integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="
|
"integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="
|
||||||
},
|
},
|
||||||
|
"@types/eslint": {
|
||||||
|
"version": "8.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.0.tgz",
|
||||||
|
"integrity": "sha512-74hbvsnc+7TEDa1z5YLSe4/q8hGYB3USNvCuzHUJrjPV6hXaq8IXcngCrHkuvFt0+8rFz7xYXrHgNayIX0UZvQ==",
|
||||||
|
"requires": {
|
||||||
|
"@types/estree": "*",
|
||||||
|
"@types/json-schema": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@types/eslint-scope": {
|
||||||
|
"version": "3.7.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz",
|
||||||
|
"integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==",
|
||||||
|
"requires": {
|
||||||
|
"@types/eslint": "*",
|
||||||
|
"@types/estree": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@types/estree": {
|
||||||
|
"version": "0.0.50",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz",
|
||||||
|
"integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw=="
|
||||||
|
},
|
||||||
"@types/hast": {
|
"@types/hast": {
|
||||||
"version": "2.3.4",
|
"version": "2.3.4",
|
||||||
"resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
|
"resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
|
||||||
|
@ -735,11 +758,152 @@
|
||||||
"integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
|
"integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"@webassemblyjs/ast": {
|
||||||
|
"version": "1.11.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
|
||||||
|
"integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
|
||||||
|
"requires": {
|
||||||
|
"@webassemblyjs/helper-numbers": "1.11.1",
|
||||||
|
"@webassemblyjs/helper-wasm-bytecode": "1.11.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@webassemblyjs/floating-point-hex-parser": {
|
||||||
|
"version": "1.11.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
|
||||||
|
"integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ=="
|
||||||
|
},
|
||||||
|
"@webassemblyjs/helper-api-error": {
|
||||||
|
"version": "1.11.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
|
||||||
|
"integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg=="
|
||||||
|
},
|
||||||
|
"@webassemblyjs/helper-buffer": {
|
||||||
|
"version": "1.11.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
|
||||||
|
"integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA=="
|
||||||
|
},
|
||||||
|
"@webassemblyjs/helper-numbers": {
|
||||||
|
"version": "1.11.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
|
||||||
|
"integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
|
||||||
|
"requires": {
|
||||||
|
"@webassemblyjs/floating-point-hex-parser": "1.11.1",
|
||||||
|
"@webassemblyjs/helper-api-error": "1.11.1",
|
||||||
|
"@xtuc/long": "4.2.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@webassemblyjs/helper-wasm-bytecode": {
|
||||||
|
"version": "1.11.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
|
||||||
|
"integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q=="
|
||||||
|
},
|
||||||
|
"@webassemblyjs/helper-wasm-section": {
|
||||||
|
"version": "1.11.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
|
||||||
|
"integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
|
||||||
|
"requires": {
|
||||||
|
"@webassemblyjs/ast": "1.11.1",
|
||||||
|
"@webassemblyjs/helper-buffer": "1.11.1",
|
||||||
|
"@webassemblyjs/helper-wasm-bytecode": "1.11.1",
|
||||||
|
"@webassemblyjs/wasm-gen": "1.11.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@webassemblyjs/ieee754": {
|
||||||
|
"version": "1.11.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
|
||||||
|
"integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
|
||||||
|
"requires": {
|
||||||
|
"@xtuc/ieee754": "^1.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@webassemblyjs/leb128": {
|
||||||
|
"version": "1.11.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
|
||||||
|
"integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
|
||||||
|
"requires": {
|
||||||
|
"@xtuc/long": "4.2.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@webassemblyjs/utf8": {
|
||||||
|
"version": "1.11.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
|
||||||
|
"integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ=="
|
||||||
|
},
|
||||||
|
"@webassemblyjs/wasm-edit": {
|
||||||
|
"version": "1.11.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
|
||||||
|
"integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
|
||||||
|
"requires": {
|
||||||
|
"@webassemblyjs/ast": "1.11.1",
|
||||||
|
"@webassemblyjs/helper-buffer": "1.11.1",
|
||||||
|
"@webassemblyjs/helper-wasm-bytecode": "1.11.1",
|
||||||
|
"@webassemblyjs/helper-wasm-section": "1.11.1",
|
||||||
|
"@webassemblyjs/wasm-gen": "1.11.1",
|
||||||
|
"@webassemblyjs/wasm-opt": "1.11.1",
|
||||||
|
"@webassemblyjs/wasm-parser": "1.11.1",
|
||||||
|
"@webassemblyjs/wast-printer": "1.11.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@webassemblyjs/wasm-gen": {
|
||||||
|
"version": "1.11.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
|
||||||
|
"integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
|
||||||
|
"requires": {
|
||||||
|
"@webassemblyjs/ast": "1.11.1",
|
||||||
|
"@webassemblyjs/helper-wasm-bytecode": "1.11.1",
|
||||||
|
"@webassemblyjs/ieee754": "1.11.1",
|
||||||
|
"@webassemblyjs/leb128": "1.11.1",
|
||||||
|
"@webassemblyjs/utf8": "1.11.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@webassemblyjs/wasm-opt": {
|
||||||
|
"version": "1.11.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
|
||||||
|
"integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
|
||||||
|
"requires": {
|
||||||
|
"@webassemblyjs/ast": "1.11.1",
|
||||||
|
"@webassemblyjs/helper-buffer": "1.11.1",
|
||||||
|
"@webassemblyjs/wasm-gen": "1.11.1",
|
||||||
|
"@webassemblyjs/wasm-parser": "1.11.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@webassemblyjs/wasm-parser": {
|
||||||
|
"version": "1.11.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
|
||||||
|
"integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
|
||||||
|
"requires": {
|
||||||
|
"@webassemblyjs/ast": "1.11.1",
|
||||||
|
"@webassemblyjs/helper-api-error": "1.11.1",
|
||||||
|
"@webassemblyjs/helper-wasm-bytecode": "1.11.1",
|
||||||
|
"@webassemblyjs/ieee754": "1.11.1",
|
||||||
|
"@webassemblyjs/leb128": "1.11.1",
|
||||||
|
"@webassemblyjs/utf8": "1.11.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@webassemblyjs/wast-printer": {
|
||||||
|
"version": "1.11.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
|
||||||
|
"integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
|
||||||
|
"requires": {
|
||||||
|
"@webassemblyjs/ast": "1.11.1",
|
||||||
|
"@xtuc/long": "4.2.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@xmldom/xmldom": {
|
"@xmldom/xmldom": {
|
||||||
"version": "0.7.5",
|
"version": "0.7.5",
|
||||||
"resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.5.tgz",
|
"resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.5.tgz",
|
||||||
"integrity": "sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A=="
|
"integrity": "sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A=="
|
||||||
},
|
},
|
||||||
|
"@xtuc/ieee754": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="
|
||||||
|
},
|
||||||
|
"@xtuc/long": {
|
||||||
|
"version": "4.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
|
||||||
|
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
|
||||||
|
},
|
||||||
"abab": {
|
"abab": {
|
||||||
"version": "2.0.5",
|
"version": "2.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
|
||||||
|
@ -789,6 +953,11 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"acorn-import-assertions": {
|
||||||
|
"version": "1.8.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
|
||||||
|
"integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw=="
|
||||||
|
},
|
||||||
"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",
|
||||||
|
@ -894,6 +1063,11 @@
|
||||||
"ajv": "^8.0.0"
|
"ajv": "^8.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"ajv-keywords": {
|
||||||
|
"version": "3.5.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
|
||||||
|
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="
|
||||||
|
},
|
||||||
"ansi-colors": {
|
"ansi-colors": {
|
||||||
"version": "4.1.1",
|
"version": "4.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
|
||||||
|
@ -1209,6 +1383,18 @@
|
||||||
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
|
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"browserslist": {
|
||||||
|
"version": "4.18.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz",
|
||||||
|
"integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==",
|
||||||
|
"requires": {
|
||||||
|
"caniuse-lite": "^1.0.30001280",
|
||||||
|
"electron-to-chromium": "^1.3.896",
|
||||||
|
"escalade": "^3.1.1",
|
||||||
|
"node-releases": "^2.0.1",
|
||||||
|
"picocolors": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"bson": {
|
"bson": {
|
||||||
"version": "1.1.6",
|
"version": "1.1.6",
|
||||||
"resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz",
|
"resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz",
|
||||||
|
@ -1269,6 +1455,11 @@
|
||||||
"integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==",
|
"integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"caniuse-lite": {
|
||||||
|
"version": "1.0.30001282",
|
||||||
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001282.tgz",
|
||||||
|
"integrity": "sha512-YhF/hG6nqBEllymSIjLtR2iWDDnChvhnVJqp+vloyt2tEHFG1yBR+ac2B/rOw0qOK0m0lEXU2dv4E/sMk5P9Kg=="
|
||||||
|
},
|
||||||
"caseless": {
|
"caseless": {
|
||||||
"version": "0.12.0",
|
"version": "0.12.0",
|
||||||
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
|
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
|
||||||
|
@ -1332,6 +1523,11 @@
|
||||||
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
|
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
|
"chrome-trace-event": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg=="
|
||||||
|
},
|
||||||
"clean-css": {
|
"clean-css": {
|
||||||
"version": "5.2.2",
|
"version": "5.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.2.tgz",
|
||||||
|
@ -1698,6 +1894,11 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"electron-to-chromium": {
|
||||||
|
"version": "1.3.904",
|
||||||
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.904.tgz",
|
||||||
|
"integrity": "sha512-x5uZWXcVNYkTh4JubD7KSC1VMKz0vZwJUqVwY3ihsW0bst1BXDe494Uqbg3Y0fDGVjJqA8vEeGuvO5foyH2+qw=="
|
||||||
|
},
|
||||||
"emoji-regex": {
|
"emoji-regex": {
|
||||||
"version": "8.0.0",
|
"version": "8.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||||
|
@ -1800,6 +2001,15 @@
|
||||||
"has-binary2": "~1.0.2"
|
"has-binary2": "~1.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enhanced-resolve": {
|
||||||
|
"version": "5.8.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz",
|
||||||
|
"integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==",
|
||||||
|
"requires": {
|
||||||
|
"graceful-fs": "^4.2.4",
|
||||||
|
"tapable": "^2.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"enquirer": {
|
"enquirer": {
|
||||||
"version": "2.3.6",
|
"version": "2.3.6",
|
||||||
"resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
|
"resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
|
||||||
|
@ -1815,11 +2025,15 @@
|
||||||
"integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
|
"integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
|
"es-module-lexer": {
|
||||||
|
"version": "0.9.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
|
||||||
|
"integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ=="
|
||||||
|
},
|
||||||
"escalade": {
|
"escalade": {
|
||||||
"version": "3.1.1",
|
"version": "3.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
|
||||||
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
|
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"escape-html": {
|
"escape-html": {
|
||||||
"version": "1.0.3",
|
"version": "1.0.3",
|
||||||
|
@ -2191,7 +2405,6 @@
|
||||||
"version": "5.1.1",
|
"version": "5.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
|
||||||
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
|
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"esrecurse": "^4.3.0",
|
"esrecurse": "^4.3.0",
|
||||||
"estraverse": "^4.1.1"
|
"estraverse": "^4.1.1"
|
||||||
|
@ -2200,8 +2413,7 @@
|
||||||
"estraverse": {
|
"estraverse": {
|
||||||
"version": "4.3.0",
|
"version": "4.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
|
||||||
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
|
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
|
||||||
"dev": true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -2276,7 +2488,6 @@
|
||||||
"version": "4.3.0",
|
"version": "4.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
|
||||||
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
|
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"estraverse": "^5.2.0"
|
"estraverse": "^5.2.0"
|
||||||
}
|
}
|
||||||
|
@ -2695,6 +2906,11 @@
|
||||||
"is-glob": "^4.0.1"
|
"is-glob": "^4.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"glob-to-regexp": {
|
||||||
|
"version": "0.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
|
||||||
|
"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="
|
||||||
|
},
|
||||||
"globals": {
|
"globals": {
|
||||||
"version": "13.12.0",
|
"version": "13.12.0",
|
||||||
"resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
|
"resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
|
||||||
|
@ -2707,8 +2923,7 @@
|
||||||
"graceful-fs": {
|
"graceful-fs": {
|
||||||
"version": "4.2.8",
|
"version": "4.2.8",
|
||||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
|
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
|
||||||
"integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
|
"integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"growl": {
|
"growl": {
|
||||||
"version": "1.10.5",
|
"version": "1.10.5",
|
||||||
|
@ -3194,6 +3409,31 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"jest-worker": {
|
||||||
|
"version": "27.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz",
|
||||||
|
"integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==",
|
||||||
|
"requires": {
|
||||||
|
"@types/node": "*",
|
||||||
|
"merge-stream": "^2.0.0",
|
||||||
|
"supports-color": "^8.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"has-flag": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
|
||||||
|
},
|
||||||
|
"supports-color": {
|
||||||
|
"version": "8.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
|
||||||
|
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
|
||||||
|
"requires": {
|
||||||
|
"has-flag": "^4.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"js-cookie": {
|
"js-cookie": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.1.tgz",
|
||||||
|
@ -3292,6 +3532,11 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"json-parse-better-errors": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
|
||||||
|
},
|
||||||
"json-schema": {
|
"json-schema": {
|
||||||
"version": "0.2.3",
|
"version": "0.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
|
||||||
|
@ -3499,6 +3744,11 @@
|
||||||
"immediate": "~3.0.5"
|
"immediate": "~3.0.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"loader-runner": {
|
||||||
|
"version": "4.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
|
||||||
|
"integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw=="
|
||||||
|
},
|
||||||
"locate-path": {
|
"locate-path": {
|
||||||
"version": "6.0.0",
|
"version": "6.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
|
||||||
|
@ -3702,6 +3952,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
|
||||||
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
|
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
|
||||||
},
|
},
|
||||||
|
"merge-stream": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
|
||||||
|
},
|
||||||
"methods": {
|
"methods": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
|
||||||
|
@ -4018,6 +4273,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
|
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
|
||||||
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
|
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
|
||||||
},
|
},
|
||||||
|
"neo-async": {
|
||||||
|
"version": "2.6.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
|
||||||
|
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
|
||||||
|
},
|
||||||
"nise": {
|
"nise": {
|
||||||
"version": "5.1.0",
|
"version": "5.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/nise/-/nise-5.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/nise/-/nise-5.1.0.tgz",
|
||||||
|
@ -4126,6 +4386,11 @@
|
||||||
"which": "^2.0.2"
|
"which": "^2.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node-releases": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA=="
|
||||||
|
},
|
||||||
"nodeify": {
|
"nodeify": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/nodeify/-/nodeify-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/nodeify/-/nodeify-1.0.1.tgz",
|
||||||
|
@ -7549,6 +7814,11 @@
|
||||||
"split2": "^3.1.1"
|
"split2": "^3.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"picocolors": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
|
||||||
|
},
|
||||||
"picomatch": {
|
"picomatch": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
|
||||||
|
@ -7691,7 +7961,6 @@
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
|
||||||
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
|
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"safe-buffer": "^5.1.0"
|
"safe-buffer": "^5.1.0"
|
||||||
}
|
}
|
||||||
|
@ -7981,6 +8250,34 @@
|
||||||
"xmlchars": "^2.2.0"
|
"xmlchars": "^2.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"schema-utils": {
|
||||||
|
"version": "3.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
|
||||||
|
"integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
|
||||||
|
"requires": {
|
||||||
|
"@types/json-schema": "^7.0.8",
|
||||||
|
"ajv": "^6.12.5",
|
||||||
|
"ajv-keywords": "^3.5.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ajv": {
|
||||||
|
"version": "6.12.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
|
||||||
|
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
|
||||||
|
"requires": {
|
||||||
|
"fast-deep-equal": "^3.1.1",
|
||||||
|
"fast-json-stable-stringify": "^2.0.0",
|
||||||
|
"json-schema-traverse": "^0.4.1",
|
||||||
|
"uri-js": "^4.2.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"json-schema-traverse": {
|
||||||
|
"version": "0.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
|
||||||
|
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/security/-/security-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/security/-/security-1.0.0.tgz",
|
||||||
|
@ -8054,7 +8351,6 @@
|
||||||
"version": "6.0.0",
|
"version": "6.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
|
||||||
"integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
|
"integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"randombytes": "^2.1.0"
|
"randombytes": "^2.1.0"
|
||||||
}
|
}
|
||||||
|
@ -8656,6 +8952,11 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"tapable": {
|
||||||
|
"version": "2.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
|
||||||
|
"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="
|
||||||
|
},
|
||||||
"tar": {
|
"tar": {
|
||||||
"version": "6.1.11",
|
"version": "6.1.11",
|
||||||
"resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
|
"resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
|
||||||
|
@ -8854,6 +9155,18 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"terser-webpack-plugin": {
|
||||||
|
"version": "5.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz",
|
||||||
|
"integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==",
|
||||||
|
"requires": {
|
||||||
|
"jest-worker": "^27.0.6",
|
||||||
|
"schema-utils": "^3.1.1",
|
||||||
|
"serialize-javascript": "^6.0.0",
|
||||||
|
"source-map": "^0.6.1",
|
||||||
|
"terser": "^5.7.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"text-table": {
|
"text-table": {
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
|
||||||
|
@ -9162,6 +9475,15 @@
|
||||||
"xml-name-validator": "^4.0.0"
|
"xml-name-validator": "^4.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"watchpack": {
|
||||||
|
"version": "2.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz",
|
||||||
|
"integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==",
|
||||||
|
"requires": {
|
||||||
|
"glob-to-regexp": "^0.4.1",
|
||||||
|
"graceful-fs": "^4.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"web-namespaces": {
|
"web-namespaces": {
|
||||||
"version": "1.1.4",
|
"version": "1.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz",
|
||||||
|
@ -9172,6 +9494,42 @@
|
||||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
|
||||||
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="
|
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="
|
||||||
},
|
},
|
||||||
|
"webpack": {
|
||||||
|
"version": "5.64.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.64.2.tgz",
|
||||||
|
"integrity": "sha512-4KGc0+Ozi0aS3EaLNRvEppfZUer+CaORKqL6OBjDLZOPf9YfN8leagFzwe6/PoBdHFxc/utKArl8LMC0Ivtmdg==",
|
||||||
|
"requires": {
|
||||||
|
"@types/eslint-scope": "^3.7.0",
|
||||||
|
"@types/estree": "^0.0.50",
|
||||||
|
"@webassemblyjs/ast": "1.11.1",
|
||||||
|
"@webassemblyjs/wasm-edit": "1.11.1",
|
||||||
|
"@webassemblyjs/wasm-parser": "1.11.1",
|
||||||
|
"acorn": "^8.4.1",
|
||||||
|
"acorn-import-assertions": "^1.7.6",
|
||||||
|
"browserslist": "^4.14.5",
|
||||||
|
"chrome-trace-event": "^1.0.2",
|
||||||
|
"enhanced-resolve": "^5.8.3",
|
||||||
|
"es-module-lexer": "^0.9.0",
|
||||||
|
"eslint-scope": "5.1.1",
|
||||||
|
"events": "^3.2.0",
|
||||||
|
"glob-to-regexp": "^0.4.1",
|
||||||
|
"graceful-fs": "^4.2.4",
|
||||||
|
"json-parse-better-errors": "^1.0.2",
|
||||||
|
"loader-runner": "^4.2.0",
|
||||||
|
"mime-types": "^2.1.27",
|
||||||
|
"neo-async": "^2.6.2",
|
||||||
|
"schema-utils": "^3.1.0",
|
||||||
|
"tapable": "^2.1.1",
|
||||||
|
"terser-webpack-plugin": "^5.1.3",
|
||||||
|
"watchpack": "^2.2.0",
|
||||||
|
"webpack-sources": "^3.2.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"webpack-sources": {
|
||||||
|
"version": "3.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz",
|
||||||
|
"integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw=="
|
||||||
|
},
|
||||||
"whatwg-encoding": {
|
"whatwg-encoding": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
|
||||||
|
|
|
@ -71,6 +71,7 @@
|
||||||
"ueberdb2": "^2.0.1",
|
"ueberdb2": "^2.0.1",
|
||||||
"underscore": "1.13.1",
|
"underscore": "1.13.1",
|
||||||
"unorm": "1.6.0",
|
"unorm": "1.6.0",
|
||||||
|
"webpack": "^5.64.2",
|
||||||
"wtfnode": "^0.9.1"
|
"wtfnode": "^0.9.1"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
|
@ -131,6 +132,7 @@
|
||||||
{
|
{
|
||||||
"files": [
|
"files": [
|
||||||
"static/**/*",
|
"static/**/*",
|
||||||
|
"templates/**/*",
|
||||||
"tests/frontend/helper.js",
|
"tests/frontend/helper.js",
|
||||||
"tests/frontend/helper/**/*"
|
"tests/frontend/helper/**/*"
|
||||||
],
|
],
|
||||||
|
|
|
@ -5,22 +5,11 @@ const defs = require('./plugin_defs');
|
||||||
|
|
||||||
exports.baseURL = '';
|
exports.baseURL = '';
|
||||||
|
|
||||||
exports.update = (cb) => {
|
exports.update = async (modules) => {
|
||||||
// It appears that this response (see #620) may interrupt the current thread
|
const data = await jQuery.getJSON(
|
||||||
// of execution on Firefox. This schedules the response in the run-loop,
|
`${exports.baseURL}pluginfw/plugin-definitions.json?v=${clientVars.randomVersionString}`);
|
||||||
// which appears to fix the issue.
|
defs.plugins = data.plugins;
|
||||||
const callback = () => setTimeout(cb, 0);
|
defs.parts = data.parts;
|
||||||
|
defs.hooks = pluginUtils.extractHooks(defs.parts, 'client_hooks', null, modules);
|
||||||
jQuery.getJSON(
|
defs.loaded = true;
|
||||||
`${exports.baseURL}pluginfw/plugin-definitions.json?v=${clientVars.randomVersionString}`
|
|
||||||
).done((data) => {
|
|
||||||
defs.plugins = data.plugins;
|
|
||||||
defs.parts = data.parts;
|
|
||||||
defs.hooks = pluginUtils.extractHooks(defs.parts, 'client_hooks');
|
|
||||||
defs.loaded = true;
|
|
||||||
callback();
|
|
||||||
}).fail((err) => {
|
|
||||||
console.error(`Failed to load plugin-definitions: ${err}`);
|
|
||||||
callback();
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -9,7 +9,7 @@ const disabledHookReasons = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const loadFn = (path, hookName) => {
|
const loadFn = (path, hookName, modules) => {
|
||||||
let functionName;
|
let functionName;
|
||||||
const parts = path.split(':');
|
const parts = path.split(':');
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ const loadFn = (path, hookName) => {
|
||||||
functionName = parts[1];
|
functionName = parts[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
let fn = require(path);
|
let fn = modules ? modules.get(path) : require(/* webpackIgnore: true */ path);
|
||||||
functionName = functionName ? functionName : hookName;
|
functionName = functionName ? functionName : hookName;
|
||||||
|
|
||||||
for (const name of functionName.split('.')) {
|
for (const name of functionName.split('.')) {
|
||||||
|
@ -33,7 +33,7 @@ const loadFn = (path, hookName) => {
|
||||||
return fn;
|
return fn;
|
||||||
};
|
};
|
||||||
|
|
||||||
const extractHooks = (parts, hookSetName, normalizer) => {
|
const extractHooks = (parts, hookSetName, normalizer, modules) => {
|
||||||
const hooks = {};
|
const hooks = {};
|
||||||
for (const part of parts) {
|
for (const part of parts) {
|
||||||
for (const [hookName, regHookFnName] of Object.entries(part[hookSetName] || {})) {
|
for (const [hookName, regHookFnName] of Object.entries(part[hookSetName] || {})) {
|
||||||
|
@ -53,12 +53,12 @@ const extractHooks = (parts, hookSetName, normalizer) => {
|
||||||
}
|
}
|
||||||
let hookFn;
|
let hookFn;
|
||||||
try {
|
try {
|
||||||
hookFn = loadFn(hookFnName, hookName);
|
hookFn = loadFn(hookFnName, hookName, modules);
|
||||||
if (!hookFn) throw new Error('Not a function');
|
if (!hookFn) throw new Error('Not a function');
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`Failed to load hook function "${hookFnName}" for plugin "${part.plugin}" ` +
|
console.error(`Failed to load hook function "${hookFnName}" for plugin "${part.plugin}" ` +
|
||||||
`part "${part.name}" hook set "${hookSetName}" hook "${hookName}": ` +
|
`part "${part.name}" hook set "${hookSetName}" hook "${hookName}": ` +
|
||||||
`${err.stack || err}`);
|
`${err.stack || err}`, err);
|
||||||
}
|
}
|
||||||
if (hookFn) {
|
if (hookFn) {
|
||||||
if (hooks[hookName] == null) hooks[hookName] = [];
|
if (hooks[hookName] == null) hooks[hookName] = [];
|
||||||
|
|
|
@ -441,78 +441,14 @@
|
||||||
|
|
||||||
<% e.begin_block("scripts"); %>
|
<% e.begin_block("scripts"); %>
|
||||||
|
|
||||||
<script type="text/javascript" src="../static/js/require-kernel.js?v=<%=settings.randomVersionString%>"></script>
|
|
||||||
<script type="text/javascript" src="../socket.io/socket.io.js?v=<%=settings.randomVersionString%>"></script>
|
<script type="text/javascript" src="../socket.io/socket.io.js?v=<%=settings.randomVersionString%>"></script>
|
||||||
|
|
||||||
<!-- Include base packages manually (this help with debugging) -->
|
<script src="<%=entrypoint%>"></script>
|
||||||
<script type="text/javascript" src="../javascripts/lib/ep_etherpad-lite/static/js/pad.js?callback=require.define&v=<%=settings.randomVersionString%>"></script>
|
|
||||||
<script type="text/javascript" src="../javascripts/lib/ep_etherpad-lite/static/js/ace2_common.js?callback=require.define&v=<%=settings.randomVersionString%>"></script>
|
|
||||||
|
|
||||||
<% e.begin_block("customScripts"); %>
|
<% e.begin_block("customScripts"); %>
|
||||||
<script type="text/javascript" src="../static/skins/<%=encodeURI(settings.skinName)%>/pad.js?v=<%=settings.randomVersionString%>"></script>
|
<script type="text/javascript" src="../static/skins/<%=encodeURI(settings.skinName)%>/pad.js?v=<%=settings.randomVersionString%>"></script>
|
||||||
<% e.end_block(); %>
|
<% e.end_block(); %>
|
||||||
|
|
||||||
<!-- Bootstrap page -->
|
|
||||||
<script type="text/javascript">
|
|
||||||
// @license magnet:?xt=urn:btih:8e4f440f4c65981c5bf93c76d35135ba5064d8b7&dn=apache-2.0.txt
|
|
||||||
(() => {
|
|
||||||
'use strict';
|
|
||||||
window.clientVars = {
|
|
||||||
// This is needed to fetch /pluginfw/plugin-definitions.json, which happens before the
|
|
||||||
// server sends the CLIENT_VARS message.
|
|
||||||
randomVersionString: <%-JSON.stringify(settings.randomVersionString)%>,
|
|
||||||
};
|
|
||||||
const pathComponents = location.pathname.split('/');
|
|
||||||
|
|
||||||
// Strip 'p' and the padname from the pathname and set as baseURL
|
|
||||||
const baseURL = `${pathComponents.slice(0, pathComponents.length - 2).join('/')}/`;
|
|
||||||
|
|
||||||
require.setRootURI(`${baseURL}javascripts/src`);
|
|
||||||
require.setLibraryURI(`${baseURL}javascripts/lib`);
|
|
||||||
require.setGlobalKeyPath('require');
|
|
||||||
|
|
||||||
// Expose jQuery #HACK
|
|
||||||
window.$ = window.jQuery = require('ep_etherpad-lite/static/js/rjquery').jQuery;
|
|
||||||
window.browser = require('ep_etherpad-lite/static/js/vendors/browser');
|
|
||||||
|
|
||||||
const plugins = require('ep_etherpad-lite/static/js/pluginfw/client_plugins');
|
|
||||||
const hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
|
|
||||||
|
|
||||||
plugins.baseURL = baseURL;
|
|
||||||
plugins.update(() => {
|
|
||||||
// Mechanism for tests to register hook functions (install fake plugins).
|
|
||||||
window._postPluginUpdateForTestingDone = false;
|
|
||||||
if (window._postPluginUpdateForTesting != null) window._postPluginUpdateForTesting();
|
|
||||||
window._postPluginUpdateForTestingDone = true;
|
|
||||||
$(() => hooks.aCallAll('documentReady'));
|
|
||||||
|
|
||||||
// TODO: Delete these global variables once plugins have been updated to not use them.
|
|
||||||
const globals = {
|
|
||||||
pad: require('ep_etherpad-lite/static/js/pad').pad,
|
|
||||||
chat: require('ep_etherpad-lite/static/js/chat').chat,
|
|
||||||
padeditbar: require('ep_etherpad-lite/static/js/pad_editbar').padeditbar,
|
|
||||||
padimpexp: require('ep_etherpad-lite/static/js/pad_impexp').padimpexp,
|
|
||||||
};
|
|
||||||
// Wrap each of the above globals in a Proxy object that triggers an unhandled Promise
|
|
||||||
// rejection if the global is used (but otherwise forwards the access so that everything
|
|
||||||
// continues to work, just with an ugly error popup).
|
|
||||||
const proxyOp = (op, ...args) => {
|
|
||||||
Promise.reject(new Error('deprecated global variable accessed'));
|
|
||||||
return op(...args);
|
|
||||||
};
|
|
||||||
const proxyHandler = Object.fromEntries(
|
|
||||||
['get', 'set'].map((opName) => [opName, proxyOp.bind(null, Reflect[opName])]));
|
|
||||||
Object.assign(window, Object.fromEntries(
|
|
||||||
Object.entries(globals).map(([k, v]) => [k, new Proxy(v, proxyHandler)])));
|
|
||||||
|
|
||||||
require('ep_etherpad-lite/static/js/skin_variants');
|
|
||||||
const pad = require('ep_etherpad-lite/static/js/pad');
|
|
||||||
pad.baseURL = baseURL;
|
|
||||||
pad.init();
|
|
||||||
});
|
|
||||||
})();
|
|
||||||
// @license-end
|
|
||||||
</script>
|
|
||||||
<div style="display:none"><a href="/javascript" data-jslicense="1">JavaScript license information</a></div>
|
<div style="display:none"><a href="/javascript" data-jslicense="1">JavaScript license information</a></div>
|
||||||
<% e.end_block(); %>
|
<% e.end_block(); %>
|
||||||
</body>
|
</body>
|
||||||
|
|
38
src/templates/padbootstrap.js
Normal file
38
src/templates/padbootstrap.js
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
window.clientVars = {
|
||||||
|
// This is needed to fetch /pluginfw/plugin-definitions.json, which happens before the server
|
||||||
|
// sends the CLIENT_VARS message.
|
||||||
|
randomVersionString: <%-JSON.stringify(settings.randomVersionString)%>,
|
||||||
|
};
|
||||||
|
const basePath = new URL('..', window.location.href).pathname;
|
||||||
|
window.$ = window.jQuery = require('../../src/static/js/rjquery').jQuery;
|
||||||
|
window.browser = require('../../src/static/js/vendors/browser');
|
||||||
|
const pad = require('../../src/static/js/pad');
|
||||||
|
pad.baseURL = basePath;
|
||||||
|
window.plugins = require('../../src/static/js/pluginfw/client_plugins');
|
||||||
|
const hooks = require('../../src/static/js/pluginfw/hooks');
|
||||||
|
|
||||||
|
// TODO: These globals shouldn't exist.
|
||||||
|
window.pad = pad.pad;
|
||||||
|
window.chat = require('../../src/static/js/chat').chat;
|
||||||
|
window.padeditbar = require('../../src/static/js/pad_editbar').padeditbar;
|
||||||
|
window.padimpexp = require('../../src/static/js/pad_impexp').padimpexp;
|
||||||
|
require('../../src/static/js/skin_variants');
|
||||||
|
|
||||||
|
window.plugins.baseURL = basePath;
|
||||||
|
await window.plugins.update(new Map([
|
||||||
|
<% for (const module of pluginModules) { %>
|
||||||
|
[<%- JSON.stringify(module) %>, require(<%- JSON.stringify(module) %>)],
|
||||||
|
<% } %>
|
||||||
|
]));
|
||||||
|
// Mechanism for tests to register hook functions (install fake plugins).
|
||||||
|
window._postPluginUpdateForTestingDone = false;
|
||||||
|
if (window._postPluginUpdateForTesting != null) window._postPluginUpdateForTesting();
|
||||||
|
window._postPluginUpdateForTestingDone = true;
|
||||||
|
window.pluginDefs = require('../../src/static/js/pluginfw/plugin_defs');
|
||||||
|
pad.init();
|
||||||
|
await new Promise((resolve) => $(resolve));
|
||||||
|
await hooks.aCallAll('documentReady');
|
||||||
|
})();
|
Loading…
Reference in a new issue