From 331cf3d79fe7c80cb0fb0ed2b1742be521e1344c Mon Sep 17 00:00:00 2001
From: SamTV12345 <40429738+samtv12345@users.noreply.github.com>
Date: Thu, 22 Jun 2023 22:54:02 +0200
Subject: [PATCH 01/11] Added typescript support for most backend files.
---
src/.gitignore | 1 +
src/node/db/{API.js => API.ts} | 161 +-
.../db/{AuthorManager.js => AuthorManager.ts} | 56 +-
src/node/db/{DB.js => DB.ts} | 23 +-
.../db/{GroupManager.js => GroupManager.ts} | 32 +-
src/node/db/{Pad.js => Pad.ts} | 61 +-
src/node/db/{PadManager.js => PadManager.ts} | 36 +-
...{ReadOnlyManager.js => ReadOnlyManager.ts} | 16 +-
...{SecurityManager.js => SecurityManager.ts} | 53 +-
.../{SessionManager.js => SessionManager.ts} | 19 +-
.../db/{SessionStore.js => SessionStore.ts} | 26 +-
src/node/eejs/{index.js => index.ts} | 67 +-
.../handler/{APIHandler.js => APIHandler.ts} | 25 +-
.../{ExportHandler.js => ExportHandler.ts} | 4 +-
.../{ImportHandler.js => ImportHandler.ts} | 48 +-
...MessageHandler.js => PadMessageHandler.ts} | 209 +-
.../{SocketIORouter.js => SocketIORouter.ts} | 15 +-
src/node/hooks/express/admin.js | 10 -
src/node/hooks/express/admin.ts | 10 +
.../{adminplugins.js => adminplugins.ts} | 35 +-
.../{adminsettings.js => adminsettings.ts} | 30 +-
.../express/{apicalls.js => apicalls.ts} | 19 +-
.../{errorhandling.js => errorhandling.ts} | 4 +-
.../{importexport.js => importexport.ts} | 38 +-
.../hooks/express/{openapi.js => openapi.ts} | 14 +-
src/node/models/APIResource.ts | 48 +
src/node/models/ErrorCaused.ts | 14 +
src/node/models/Plugin.ts | 6 +
src/node/models/ResponseSpec.ts | 43 +
src/node/models/Revision.ts | 7 +
src/node/models/SessionInfo.ts | 10 +
src/node/models/SessionModel.ts | 5 +
src/node/models/SessionSocketModel.ts | 8 +
src/node/{padaccess.js => padaccess.ts} | 8 +-
src/node/{server.js => server.ts} | 89 +-
src/node/stats.js | 9 -
src/node/stats.ts | 9 +
.../utils/{NodeVersion.js => NodeVersion.ts} | 10 +-
src/node/utils/{Settings.js => Settings.ts} | 196 +-
src/node/utils/UpdateCheck.js | 43 -
src/node/utils/UpdateCheck.ts | 59 +
src/node/utils/randomstring.js | 6 +-
src/package-lock.json | 25996 +++++++++++-----
src/package.json | 14 +-
.../js/{AttributePool.js => AttributePool.ts} | 5 +-
src/tsconfig.json | 11 +
46 files changed, 19794 insertions(+), 7814 deletions(-)
create mode 100644 src/.gitignore
rename src/node/db/{API.js => API.ts} (85%)
rename src/node/db/{AuthorManager.js => AuthorManager.ts} (80%)
rename src/node/db/{DB.js => DB.ts} (74%)
rename src/node/db/{GroupManager.js => GroupManager.ts} (84%)
rename src/node/db/{Pad.js => Pad.ts} (94%)
rename src/node/db/{PadManager.js => PadManager.ts} (86%)
rename src/node/db/{ReadOnlyManager.js => ReadOnlyManager.ts} (80%)
rename src/node/db/{SecurityManager.js => SecurityManager.ts} (79%)
rename src/node/db/{SessionManager.js => SessionManager.ts} (93%)
rename src/node/db/{SessionStore.js => SessionStore.ts} (88%)
rename src/node/eejs/{index.js => index.ts} (54%)
rename src/node/handler/{APIHandler.js => APIHandler.ts} (90%)
rename src/node/handler/{ExportHandler.js => ExportHandler.ts} (98%)
rename src/node/handler/{ImportHandler.js => ImportHandler.ts} (87%)
rename src/node/handler/{PadMessageHandler.js => PadMessageHandler.ts} (88%)
rename src/node/handler/{SocketIORouter.js => SocketIORouter.ts} (87%)
delete mode 100644 src/node/hooks/express/admin.js
create mode 100644 src/node/hooks/express/admin.ts
rename src/node/hooks/express/{adminplugins.js => adminplugins.ts} (81%)
rename src/node/hooks/express/{adminsettings.js => adminsettings.ts} (55%)
rename src/node/hooks/express/{apicalls.js => apicalls.ts} (80%)
rename src/node/hooks/express/{errorhandling.js => errorhandling.ts} (83%)
rename src/node/hooks/express/{importexport.js => importexport.ts} (67%)
rename src/node/hooks/express/{openapi.js => openapi.ts} (98%)
create mode 100644 src/node/models/APIResource.ts
create mode 100644 src/node/models/ErrorCaused.ts
create mode 100644 src/node/models/Plugin.ts
create mode 100644 src/node/models/ResponseSpec.ts
create mode 100644 src/node/models/Revision.ts
create mode 100644 src/node/models/SessionInfo.ts
create mode 100644 src/node/models/SessionModel.ts
create mode 100644 src/node/models/SessionSocketModel.ts
rename src/node/{padaccess.js => padaccess.ts} (62%)
rename src/node/{server.js => server.ts} (80%)
mode change 100755 => 100644
delete mode 100644 src/node/stats.js
create mode 100644 src/node/stats.ts
rename src/node/utils/{NodeVersion.js => NodeVersion.ts} (84%)
rename src/node/utils/{Settings.js => Settings.ts} (83%)
delete mode 100644 src/node/utils/UpdateCheck.js
create mode 100644 src/node/utils/UpdateCheck.ts
rename src/static/js/{AttributePool.js => AttributePool.ts} (98%)
create mode 100644 src/tsconfig.json
diff --git a/src/.gitignore b/src/.gitignore
new file mode 100644
index 00000000000..1521c8b7652
--- /dev/null
+++ b/src/.gitignore
@@ -0,0 +1 @@
+dist
diff --git a/src/node/db/API.js b/src/node/db/API.ts
similarity index 85%
rename from src/node/db/API.js
rename to src/node/db/API.ts
index 9b2ecadc74a..99b19498fb6 100644
--- a/src/node/db/API.js
+++ b/src/node/db/API.ts
@@ -19,59 +19,72 @@
* limitations under the License.
*/
-const Changeset = require('../../static/js/Changeset');
-const ChatMessage = require('../../static/js/ChatMessage');
-const CustomError = require('../utils/customError');
-const padManager = require('./PadManager');
-const padMessageHandler = require('../handler/PadMessageHandler');
-const readOnlyManager = require('./ReadOnlyManager');
-const groupManager = require('./GroupManager');
-const authorManager = require('./AuthorManager');
-const sessionManager = require('./SessionManager');
-const exportHtml = require('../utils/ExportHtml');
-const exportTxt = require('../utils/ExportTxt');
-const importHtml = require('../utils/ImportHtml');
+import Changeset from '../../static/js/Changeset';
+import ChatMessage from '../../static/js/ChatMessage';
+import CustomError from '../utils/customError';
+import {doesPadExist, getPad, isValidPadId, listAllPads} from './PadManager';
+import {
+ handleCustomMessage,
+ sendChatMessageToPadClients,
+ sessioninfos,
+ updatePadClients
+} from '../handler/PadMessageHandler';
+import {getPadId, getReadOnlyId} from './ReadOnlyManager';
+import {
+ createGroup,
+ createGroupIfNotExistsFor,
+ createGroupPad,
+ deleteGroup,
+ listAllGroups,
+ listPads
+} from './GroupManager';
+import {createAuthor, createAuthorIfNotExistsFor, getAuthorName, listPadsOfAuthor} from './AuthorManager';
+import {} from './SessionManager';
+import exportHtml from '../utils/ExportHtml';
+import exportTxt from '../utils/ExportTxt';
+import importHtml from '../utils/ImportHtml';
const cleanText = require('./Pad').cleanText;
-const PadDiff = require('../utils/padDiff');
+import PadDiff from '../utils/padDiff';
/* ********************
* GROUP FUNCTIONS ****
******************** */
-exports.listAllGroups = groupManager.listAllGroups;
-exports.createGroup = groupManager.createGroup;
-exports.createGroupIfNotExistsFor = groupManager.createGroupIfNotExistsFor;
-exports.deleteGroup = groupManager.deleteGroup;
-exports.listPads = groupManager.listPads;
-exports.createGroupPad = groupManager.createGroupPad;
-
+/*
+exports.listAllGroups = listAllGroups;
+exports.createGroup = createGroup;
+exports.createGroupIfNotExistsFor = createGroupIfNotExistsFor;
+exports.deleteGroup = deleteGroup;
+exports.listPads = listPads;
+exports.createGroupPad = createGroupPad;
+*/
/* ********************
* PADLIST FUNCTION ***
******************** */
-
+/*
exports.listAllPads = padManager.listAllPads;
-
+*/
/* ********************
* AUTHOR FUNCTIONS ***
******************** */
-
-exports.createAuthor = authorManager.createAuthor;
-exports.createAuthorIfNotExistsFor = authorManager.createAuthorIfNotExistsFor;
-exports.getAuthorName = authorManager.getAuthorName;
-exports.listPadsOfAuthor = authorManager.listPadsOfAuthor;
+/*
+exports.createAuthor = createAuthor;
+exports.createAuthorIfNotExistsFor = createAuthorIfNotExistsFor;
+exports.getAuthorName = getAuthorName;
+exports.listPadsOfAuthor = listPadsOfAuthor;
exports.padUsers = padMessageHandler.padUsers;
exports.padUsersCount = padMessageHandler.padUsersCount;
-
+*/
/* ********************
* SESSION FUNCTIONS **
******************** */
-
+/*
exports.createSession = sessionManager.createSession;
exports.deleteSession = sessionManager.deleteSession;
exports.getSessionInfo = sessionManager.getSessionInfo;
exports.listSessionsOfGroup = sessionManager.listSessionsOfGroup;
exports.listSessionsOfAuthor = sessionManager.listSessionsOfAuthor;
-
+*/
/* ***********************
* PAD CONTENT FUNCTIONS *
*********************** */
@@ -103,7 +116,7 @@ Example returns:
}
*/
-exports.getAttributePool = async (padID) => {
+export const getAttributePool = async (padID: string) => {
const pad = await getPadSafe(padID, true);
return {pool: pad.pool};
};
@@ -121,7 +134,7 @@ Example returns:
}
*/
-exports.getRevisionChangeset = async (padID, rev) => {
+export const getRevisionChangeset = async (padID, rev) => {
// try to parse the revision number
if (rev !== undefined) {
rev = checkValidRev(rev);
@@ -154,7 +167,7 @@ Example returns:
{code: 0, message:"ok", data: {text:"Welcome Text"}}
{code: 1, message:"padID does not exist", data: null}
*/
-exports.getText = async (padID, rev) => {
+export const getText = async (padID, rev) => {
// try to parse the revision number
if (rev !== undefined) {
rev = checkValidRev(rev);
@@ -192,7 +205,7 @@ Example returns:
{code: 1, message:"padID does not exist", data: null}
{code: 1, message:"text too long", data: null}
*/
-exports.setText = async (padID, text, authorId = '') => {
+export const setText = async (padID, text, authorId = '') => {
// text is required
if (typeof text !== 'string') {
throw new CustomError('text is not a string', 'apierror');
@@ -202,7 +215,7 @@ exports.setText = async (padID, text, authorId = '') => {
const pad = await getPadSafe(padID, true);
await pad.setText(text, authorId);
- await padMessageHandler.updatePadClients(pad);
+ await updatePadClients(pad);
};
/**
@@ -214,7 +227,7 @@ Example returns:
{code: 1, message:"padID does not exist", data: null}
{code: 1, message:"text too long", data: null}
*/
-exports.appendText = async (padID, text, authorId = '') => {
+export const appendText = async (padID, text, authorId = '') => {
// text is required
if (typeof text !== 'string') {
throw new CustomError('text is not a string', 'apierror');
@@ -222,7 +235,7 @@ exports.appendText = async (padID, text, authorId = '') => {
const pad = await getPadSafe(padID, true);
await pad.appendText(text, authorId);
- await padMessageHandler.updatePadClients(pad);
+ await updatePadClients(pad);
};
/**
@@ -233,7 +246,7 @@ Example returns:
{code: 0, message:"ok", data: {text:"Welcome Text "}}
{code: 1, message:"padID does not exist", data: null}
*/
-exports.getHTML = async (padID, rev) => {
+export const getHTML = async (padID, rev) => {
if (rev !== undefined) {
rev = checkValidRev(rev);
}
@@ -265,7 +278,7 @@ Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"padID does not exist", data: null}
*/
-exports.setHTML = async (padID, html, authorId = '') => {
+export const setHTML = async (padID, html, authorId = '') => {
// html string is required
if (typeof html !== 'string') {
throw new CustomError('html is not a string', 'apierror');
@@ -282,7 +295,7 @@ exports.setHTML = async (padID, html, authorId = '') => {
}
// update the clients on the pad
- padMessageHandler.updatePadClients(pad);
+ updatePadClients(pad);
};
/* ****************
@@ -303,7 +316,7 @@ Example returns:
{code: 1, message:"padID does not exist", data: null}
*/
-exports.getChatHistory = async (padID, start, end) => {
+export const getChatHistory = async (padID, start, end) => {
if (start && end) {
if (start < 0) {
throw new CustomError('start is below zero', 'apierror');
@@ -349,7 +362,7 @@ Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"padID does not exist", data: null}
*/
-exports.appendChatMessage = async (padID, text, authorID, time) => {
+export const appendChatMessage = async (padID, text, authorID, time) => {
// text is required
if (typeof text !== 'string') {
throw new CustomError('text is not a string', 'apierror');
@@ -363,7 +376,7 @@ exports.appendChatMessage = async (padID, text, authorID, time) => {
// @TODO - missing getPadSafe() call ?
// save chat message to database and send message to all connected clients
- await padMessageHandler.sendChatMessageToPadClients(new ChatMessage(text, authorID, time), padID);
+ await sendChatMessageToPadClients(new ChatMessage(text, authorID, time), padID);
};
/* ***************
@@ -378,7 +391,7 @@ Example returns:
{code: 0, message:"ok", data: {revisions: 56}}
{code: 1, message:"padID does not exist", data: null}
*/
-exports.getRevisionsCount = async (padID) => {
+export const getRevisionsCount = async (padID) => {
// get the pad
const pad = await getPadSafe(padID, true);
return {revisions: pad.getHeadRevisionNumber()};
@@ -392,7 +405,7 @@ Example returns:
{code: 0, message:"ok", data: {savedRevisions: 42}}
{code: 1, message:"padID does not exist", data: null}
*/
-exports.getSavedRevisionsCount = async (padID) => {
+export const getSavedRevisionsCount = async (padID) => {
// get the pad
const pad = await getPadSafe(padID, true);
return {savedRevisions: pad.getSavedRevisionsNumber()};
@@ -406,7 +419,7 @@ Example returns:
{code: 0, message:"ok", data: {savedRevisions: [2, 42, 1337]}}
{code: 1, message:"padID does not exist", data: null}
*/
-exports.listSavedRevisions = async (padID) => {
+export const listSavedRevisions = async (padID) => {
// get the pad
const pad = await getPadSafe(padID, true);
return {savedRevisions: pad.getSavedRevisionsList()};
@@ -420,7 +433,7 @@ Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"padID does not exist", data: null}
*/
-exports.saveRevision = async (padID, rev) => {
+export const saveRevision = async (padID, rev) => {
// check if rev is a number
if (rev !== undefined) {
rev = checkValidRev(rev);
@@ -439,7 +452,7 @@ exports.saveRevision = async (padID, rev) => {
rev = pad.getHeadRevisionNumber();
}
- const author = await authorManager.createAuthor('API');
+ const author = await createAuthor('API');
await pad.addSavedRevision(rev, author.authorID, 'Saved through API call');
};
@@ -451,7 +464,7 @@ Example returns:
{code: 0, message:"ok", data: {lastEdited: 1340815946602}}
{code: 1, message:"padID does not exist", data: null}
*/
-exports.getLastEdited = async (padID) => {
+export const getLastEdited = async (padID) => {
// get the pad
const pad = await getPadSafe(padID, true);
const lastEdited = await pad.getLastEdit();
@@ -466,7 +479,7 @@ Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"pad does already exist", data: null}
*/
-exports.createPad = async (padID, text, authorId = '') => {
+export const createPad = async (padID, text, authorId = '') => {
if (padID) {
// ensure there is no $ in the padID
if (padID.indexOf('$') !== -1) {
@@ -491,7 +504,7 @@ Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"padID does not exist", data: null}
*/
-exports.deletePad = async (padID) => {
+export const deletePad = async (padID) => {
const pad = await getPadSafe(padID, true);
await pad.remove();
};
@@ -504,7 +517,7 @@ exports.deletePad = async (padID) => {
{code:0, message:"ok", data:null}
{code: 1, message:"padID does not exist", data: null}
*/
-exports.restoreRevision = async (padID, rev, authorId = '') => {
+export const restoreRevision = async (padID, rev, authorId = '') => {
// check if rev is a number
if (rev === undefined) {
throw new CustomError('rev is not defined', 'apierror');
@@ -556,7 +569,7 @@ exports.restoreRevision = async (padID, rev, authorId = '') => {
const changeset = builder.toString();
await pad.appendRevision(changeset, authorId);
- await padMessageHandler.updatePadClients(pad);
+ await updatePadClients(pad);
};
/**
@@ -568,7 +581,7 @@ Example returns:
{code: 0, message:"ok", data: {padID: destinationID}}
{code: 1, message:"padID does not exist", data: null}
*/
-exports.copyPad = async (sourceID, destinationID, force) => {
+export const copyPad = async (sourceID, destinationID, force) => {
const pad = await getPadSafe(sourceID, true);
await pad.copy(destinationID, force);
};
@@ -582,7 +595,7 @@ Example returns:
{code: 0, message:"ok", data: {padID: destinationID}}
{code: 1, message:"padID does not exist", data: null}
*/
-exports.copyPadWithoutHistory = async (sourceID, destinationID, force, authorId = '') => {
+export const copyPadWithoutHistory = async (sourceID, destinationID, force, authorId = '') => {
const pad = await getPadSafe(sourceID, true);
await pad.copyPadWithoutHistory(destinationID, force, authorId);
};
@@ -596,7 +609,7 @@ Example returns:
{code: 0, message:"ok", data: {padID: destinationID}}
{code: 1, message:"padID does not exist", data: null}
*/
-exports.movePad = async (sourceID, destinationID, force) => {
+export const movePad = async (sourceID, destinationID, force) => {
const pad = await getPadSafe(sourceID, true);
await pad.copy(destinationID, force);
await pad.remove();
@@ -610,12 +623,12 @@ Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"padID does not exist", data: null}
*/
-exports.getReadOnlyID = async (padID) => {
+export const getReadOnlyID = async (padID) => {
// we don't need the pad object, but this function does all the security stuff for us
await getPadSafe(padID, true);
// get the readonlyId
- const readOnlyID = await readOnlyManager.getReadOnlyId(padID);
+ const readOnlyID = await getReadOnlyId(padID);
return {readOnlyID};
};
@@ -628,9 +641,9 @@ Example returns:
{code: 0, message:"ok", data: {padID: padID}}
{code: 1, message:"padID does not exist", data: null}
*/
-exports.getPadID = async (roID) => {
+export const getPadID = async (roID) => {
// get the PadId
- const padID = await readOnlyManager.getPadId(roID);
+ const padID = await getPadId(roID);
if (padID == null) {
throw new CustomError('padID does not exist', 'apierror');
}
@@ -646,7 +659,7 @@ Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"padID does not exist", data: null}
*/
-exports.setPublicStatus = async (padID, publicStatus) => {
+export const setPublicStatus = async (padID, publicStatus) => {
// ensure this is a group pad
checkGroupPad(padID, 'publicStatus');
@@ -669,7 +682,7 @@ Example returns:
{code: 0, message:"ok", data: {publicStatus: true}}
{code: 1, message:"padID does not exist", data: null}
*/
-exports.getPublicStatus = async (padID) => {
+export const getPublicStatus = async (padID) => {
// ensure this is a group pad
checkGroupPad(padID, 'publicStatus');
@@ -686,7 +699,7 @@ Example returns:
{code: 0, message:"ok", data: {authorIDs : ["a.s8oes9dhwrvt0zif", "a.akf8finncvomlqva"]}
{code: 1, message:"padID does not exist", data: null}
*/
-exports.listAuthorsOfPad = async (padID) => {
+export const listAuthorsOfPad = async (padID) => {
// get the pad
const pad = await getPadSafe(padID, true);
const authorIDs = pad.getAllAuthors();
@@ -716,9 +729,9 @@ Example returns:
{code: 1, message:"padID does not exist"}
*/
-exports.sendClientsMessage = async (padID, msg) => {
+export const sendClientsMessage = async (padID, msg) => {
await getPadSafe(padID, true); // Throw if the padID is invalid or if the pad does not exist.
- padMessageHandler.handleCustomMessage(padID, msg);
+ handleCustomMessage(padID, msg);
};
/**
@@ -740,7 +753,7 @@ Example returns:
{code: 0, message:"ok", data: {chatHead: 42}}
{code: 1, message:"padID does not exist", data: null}
*/
-exports.getChatHead = async (padID) => {
+export const getChatHead = async (padID) => {
// get the pad
const pad = await getPadSafe(padID, true);
return {chatHead: pad.chatHead};
@@ -764,7 +777,7 @@ Example returns:
{"code":4,"message":"no or wrong API Key","data":null}
*/
-exports.createDiffHTML = async (padID, startRev, endRev) => {
+export const createDiffHTML = async (padID, startRev, endRev) => {
// check if startRev is a number
if (startRev !== undefined) {
startRev = checkValidRev(startRev);
@@ -803,13 +816,13 @@ exports.createDiffHTML = async (padID, startRev, endRev) => {
{"code":4,"message":"no or wrong API Key","data":null}
*/
-exports.getStats = async () => {
- const sessionInfos = padMessageHandler.sessioninfos;
+export const getStats = async () => {
+ const sessionInfos = sessioninfos;
const sessionKeys = Object.keys(sessionInfos);
const activePads = new Set(Object.entries(sessionInfos).map((k) => k[1].padId));
- const {padIDs} = await padManager.listAllPads();
+ const {padIDs} = await listAllPads();
return {
totalPads: padIDs.length,
@@ -826,19 +839,19 @@ exports.getStats = async () => {
const isInt = (value) => (parseFloat(value) === parseInt(value, 10)) && !isNaN(value);
// gets a pad safe
-const getPadSafe = async (padID, shouldExist, text, authorId = '') => {
+const getPadSafe = async (padID, shouldExist, text?, authorId = '') => {
// check if padID is a string
if (typeof padID !== 'string') {
throw new CustomError('padID is not a string', 'apierror');
}
// check if the padID maches the requirements
- if (!padManager.isValidPadId(padID)) {
+ if (!isValidPadId(padID)) {
throw new CustomError('padID did not match requirements', 'apierror');
}
// check if the pad exists
- const exists = await padManager.doesPadExists(padID);
+ const exists = await doesPadExist(padID);
if (!exists && shouldExist) {
// does not exist, but should
@@ -851,7 +864,7 @@ const getPadSafe = async (padID, shouldExist, text, authorId = '') => {
}
// pad exists, let's get it
- return padManager.getPad(padID, text, authorId);
+ return getPad(padID, text, authorId);
};
// checks if a rev is a legal number
diff --git a/src/node/db/AuthorManager.js b/src/node/db/AuthorManager.ts
similarity index 80%
rename from src/node/db/AuthorManager.js
rename to src/node/db/AuthorManager.ts
index 7049be5dba3..fd825bba6d3 100644
--- a/src/node/db/AuthorManager.js
+++ b/src/node/db/AuthorManager.ts
@@ -19,12 +19,13 @@
* limitations under the License.
*/
-const db = require('./DB');
-const CustomError = require('../utils/customError');
-const hooks = require('../../static/js/pluginfw/hooks.js');
+import {db} from './DB';
+import CustomError from '../utils/customError';
+import hooks from '../../static/js/pluginfw/hooks.js';
+
const {randomString, padutils: {warnDeprecated}} = require('../../static/js/pad_utils');
-exports.getColorPalette = () => [
+export const getColorPalette = () => [
'#ffc7c7',
'#fff1c7',
'#e3ffc7',
@@ -94,26 +95,23 @@ exports.getColorPalette = () => [
/**
* Checks if the author exists
*/
-exports.doesAuthorExist = async (authorID) => {
+export const doesAuthorExist = async (authorID: string) => {
const author = await db.get(`globalAuthor:${authorID}`);
return author != null;
-};
-
-/* exported for backwards compatibility */
-exports.doesAuthorExists = exports.doesAuthorExist;
+}
-const getAuthor4Token = async (token) => {
+const getAuthor4Token2 = async (token: string) => {
const author = await mapAuthorWithDBKey('token2author', token);
// return only the sub value authorID
return author ? author.authorID : author;
};
-exports.getAuthorId = async (token, user) => {
+export const getAuthorId = async (token, user) => {
const context = {dbKey: token, token, user};
let [authorId] = await hooks.aCallFirst('getAuthorId', context);
- if (!authorId) authorId = await getAuthor4Token(context.dbKey);
+ if (!authorId) authorId = await getAuthor4Token2(context.dbKey);
return authorId;
};
@@ -123,18 +121,18 @@ exports.getAuthorId = async (token, user) => {
* @deprecated Use `getAuthorId` instead.
* @param {String} token The token
*/
-exports.getAuthor4Token = async (token) => {
+export const getAuthor4Token = async (token) => {
warnDeprecated(
'AuthorManager.getAuthor4Token() is deprecated; use AuthorManager.getAuthorId() instead');
- return await getAuthor4Token(token);
+ return await getAuthor4Token2(token);
};
/**
* Returns the AuthorID for a mapper.
- * @param {String} token The mapper
+ * @param authorMapper
* @param {String} name The name of the author (optional)
*/
-exports.createAuthorIfNotExistsFor = async (authorMapper, name) => {
+export const createAuthorIfNotExistsFor = async (authorMapper, name: string) => {
const author = await mapAuthorWithDBKey('mapper2author', authorMapper);
if (name) {
@@ -151,7 +149,7 @@ exports.createAuthorIfNotExistsFor = async (authorMapper, name) => {
* @param {String} mapperkey The database key name for this mapper
* @param {String} mapper The mapper
*/
-const mapAuthorWithDBKey = async (mapperkey, mapper) => {
+export const mapAuthorWithDBKey = async (mapperkey: string, mapper) => {
// try to map to an author
const author = await db.get(`${mapperkey}:${mapper}`);
@@ -178,7 +176,7 @@ const mapAuthorWithDBKey = async (mapperkey, mapper) => {
* Internal function that creates the database entry for an author
* @param {String} name The name of the author
*/
-exports.createAuthor = async (name) => {
+export const createAuthor = async (name) => {
// create the new author name
const author = `a.${randomString(16)}`;
@@ -199,41 +197,41 @@ exports.createAuthor = async (name) => {
* Returns the Author Obj of the author
* @param {String} author The id of the author
*/
-exports.getAuthor = async (author) => await db.get(`globalAuthor:${author}`);
+export const getAuthor = async (author: string) => await db.get(`globalAuthor:${author}`);
/**
* Returns the color Id of the author
* @param {String} author The id of the author
*/
-exports.getAuthorColorId = async (author) => await db.getSub(`globalAuthor:${author}`, ['colorId']);
+export const getAuthorColorId = async (author: string) => await db.getSub(`globalAuthor:${author}`, ['colorId']);
/**
* Sets the color Id of the author
* @param {String} author The id of the author
* @param {String} colorId The color id of the author
*/
-exports.setAuthorColorId = async (author, colorId) => await db.setSub(
+export const setAuthorColorId = async (author: string, colorId: string) => await db.setSub(
`globalAuthor:${author}`, ['colorId'], colorId);
/**
* Returns the name of the author
* @param {String} author The id of the author
*/
-exports.getAuthorName = async (author) => await db.getSub(`globalAuthor:${author}`, ['name']);
+export const getAuthorName = async (author: string) => await db.getSub(`globalAuthor:${author}`, ['name']);
/**
* Sets the name of the author
* @param {String} author The id of the author
* @param {String} name The name of the author
*/
-exports.setAuthorName = async (author, name) => await db.setSub(
+export const setAuthorName = async (author: string, name:string) => await db.setSub(
`globalAuthor:${author}`, ['name'], name);
/**
* Returns an array of all pads this author contributed to
- * @param {String} author The id of the author
+ * @param {String} authorID The id of the author
*/
-exports.listPadsOfAuthor = async (authorID) => {
+export const listPadsOfAuthor = async (authorID:string) => {
/* There are two other places where this array is manipulated:
* (1) When the author is added to a pad, the author object is also updated
* (2) When a pad is deleted, each author of that pad is also updated
@@ -255,10 +253,10 @@ exports.listPadsOfAuthor = async (authorID) => {
/**
* Adds a new pad to the list of contributions
- * @param {String} author The id of the author
+ * @param {String} authorID The id of the author
* @param {String} padID The id of the pad the author contributes to
*/
-exports.addPad = async (authorID, padID) => {
+export const addPad = async (authorID: string, padID: string) => {
// get the entry
const author = await db.get(`globalAuthor:${authorID}`);
@@ -282,10 +280,10 @@ exports.addPad = async (authorID, padID) => {
/**
* Removes a pad from the list of contributions
- * @param {String} author The id of the author
+ * @param {String} authorID The id of the author
* @param {String} padID The id of the pad the author contributes to
*/
-exports.removePad = async (authorID, padID) => {
+export const removePad = async (authorID: string, padID: string) => {
const author = await db.get(`globalAuthor:${authorID}`);
if (author == null) return;
diff --git a/src/node/db/DB.js b/src/node/db/DB.ts
similarity index 74%
rename from src/node/db/DB.js
rename to src/node/db/DB.ts
index 02e83f85de7..6eca386fe8e 100644
--- a/src/node/db/DB.js
+++ b/src/node/db/DB.ts
@@ -21,28 +21,29 @@
* limitations under the License.
*/
-const ueberDB = require('ueberdb2');
-const settings = require('../utils/Settings');
-const log4js = require('log4js');
-const stats = require('../stats');
-
+import ueberDB from 'ueberdb2';
+import {dbSettings, dbType} from '../utils/Settings';
+import log4js from 'log4js';
+import {shutdown as statsShutdown,createCollection} from '../stats';
+import {} from 'measured-core'
const logger = log4js.getLogger('ueberDB');
/**
* The UeberDB Object that provides the database functions
*/
-exports.db = null;
+const db = null;
/**
* Initializes the database with the settings provided by the settings module
*/
-exports.init = async () => {
- exports.db = new ueberDB.Database(settings.dbType, settings.dbSettings, null, logger);
+const init = async () => {
+ exports.db = new ueberDB.Database(dbType, dbSettings, null, logger);
await exports.db.init();
if (exports.db.metrics != null) {
for (const [metric, value] of Object.entries(exports.db.metrics)) {
if (typeof value !== 'number') continue;
- stats.gauge(`ueberdb_${metric}`, () => exports.db.metrics[metric]);
+ // FIXME find a better replacement for measure-core
+ createCollection.gauge(`ueberdb_${metric}`, () => exports.db.metrics[metric]);
}
}
for (const fn of ['get', 'set', 'findKeys', 'getSub', 'setSub', 'remove']) {
@@ -53,8 +54,10 @@ exports.init = async () => {
}
};
-exports.shutdown = async (hookName, context) => {
+const shutdown = async (hookName, context) => {
if (exports.db != null) await exports.db.close();
exports.db = null;
logger.log('Database closed');
};
+
+export {db,init,shutdown}
diff --git a/src/node/db/GroupManager.js b/src/node/db/GroupManager.ts
similarity index 84%
rename from src/node/db/GroupManager.js
rename to src/node/db/GroupManager.ts
index 4302048c409..6d4e2d0e1dc 100644
--- a/src/node/db/GroupManager.js
+++ b/src/node/db/GroupManager.ts
@@ -19,13 +19,13 @@
* limitations under the License.
*/
-const CustomError = require('../utils/customError');
+import CustomError from '../utils/customError';
const randomString = require('../../static/js/pad_utils').randomString;
-const db = require('./DB');
-const padManager = require('./PadManager');
-const sessionManager = require('./SessionManager');
+import {db} from './DB';
+import {doesPadExist, getPad} from './PadManager';
+import {deleteSession} from './SessionManager';
-exports.listAllGroups = async () => {
+export const listAllGroups = async () => {
let groups = await db.get('groups');
groups = groups || {};
@@ -33,7 +33,7 @@ exports.listAllGroups = async () => {
return {groupIDs};
};
-exports.deleteGroup = async (groupID) => {
+export const deleteGroup = async (groupID) => {
const group = await db.get(`group:${groupID}`);
// ensure group exists
@@ -44,7 +44,7 @@ exports.deleteGroup = async (groupID) => {
// iterate through all pads of this group and delete them (in parallel)
await Promise.all(Object.keys(group.pads).map(async (padId) => {
- const pad = await padManager.getPad(padId);
+ const pad = await getPad(padId);
await pad.remove();
}));
@@ -52,7 +52,7 @@ exports.deleteGroup = async (groupID) => {
// record because deleting a session updates the group2sessions record.
const {sessionIDs = {}} = await db.get(`group2sessions:${groupID}`) || {};
await Promise.all(Object.keys(sessionIDs).map(async (sessionId) => {
- await sessionManager.deleteSession(sessionId);
+ await deleteSession(sessionId);
}));
await Promise.all([
@@ -68,14 +68,14 @@ exports.deleteGroup = async (groupID) => {
await db.remove(`group:${groupID}`);
};
-exports.doesGroupExist = async (groupID) => {
+export const doesGroupExist = async (groupID) => {
// try to get the group entry
const group = await db.get(`group:${groupID}`);
return (group != null);
};
-exports.createGroup = async () => {
+export const createGroup = async () => {
const groupID = `g.${randomString(16)}`;
await db.set(`group:${groupID}`, {pads: {}, mappings: {}});
// Add the group to the `groups` record after the group's individual record is created so that
@@ -85,7 +85,7 @@ exports.createGroup = async () => {
return {groupID};
};
-exports.createGroupIfNotExistsFor = async (groupMapper) => {
+export const createGroupIfNotExistsFor = async (groupMapper) => {
if (typeof groupMapper !== 'string') {
throw new CustomError('groupMapper is not a string', 'apierror');
}
@@ -103,19 +103,19 @@ exports.createGroupIfNotExistsFor = async (groupMapper) => {
return result;
};
-exports.createGroupPad = async (groupID, padName, text, authorId = '') => {
+export const createGroupPad = async (groupID, padName, text, authorId = '') => {
// create the padID
const padID = `${groupID}$${padName}`;
// ensure group exists
- const groupExists = await exports.doesGroupExist(groupID);
+ const groupExists = await doesGroupExist(groupID);
if (!groupExists) {
throw new CustomError('groupID does not exist', 'apierror');
}
// ensure pad doesn't exist already
- const padExists = await padManager.doesPadExists(padID);
+ const padExists = await doesPadExist(padID);
if (padExists) {
// pad exists already
@@ -123,7 +123,7 @@ exports.createGroupPad = async (groupID, padName, text, authorId = '') => {
}
// create the pad
- await padManager.getPad(padID, text, authorId);
+ await getPad(padID, text, authorId);
// create an entry in the group for this pad
await db.setSub(`group:${groupID}`, ['pads', padID], 1);
@@ -131,7 +131,7 @@ exports.createGroupPad = async (groupID, padName, text, authorId = '') => {
return {padID};
};
-exports.listPads = async (groupID) => {
+export const listPads = async (groupID) => {
const exists = await exports.doesGroupExist(groupID);
// ensure the group exists
diff --git a/src/node/db/Pad.js b/src/node/db/Pad.ts
similarity index 94%
rename from src/node/db/Pad.js
rename to src/node/db/Pad.ts
index b692962f1c9..9f174270590 100644
--- a/src/node/db/Pad.js
+++ b/src/node/db/Pad.ts
@@ -3,15 +3,16 @@
* The pad object, defined with joose
*/
-const AttributeMap = require('../../static/js/AttributeMap');
-const Changeset = require('../../static/js/Changeset');
-const ChatMessage = require('../../static/js/ChatMessage');
-const AttributePool = require('../../static/js/AttributePool');
-const Stream = require('../utils/Stream');
-const assert = require('assert').strict;
-const db = require('./DB');
-const settings = require('../utils/Settings');
-const authorManager = require('./AuthorManager');
+import AttributeMap from '../../static/js/AttributeMap';
+import Changeset from '../../static/js/Changeset';
+import ChatMessage from '../../static/js/ChatMessage';
+import {AttributePool} from '../../static/js/AttributePool';
+import Stream from '../utils/Stream';
+import assert, {strict} from 'assert'
+import {db} from './DB';
+import {defaultPadText} from '../utils/Settings';
+import {addPad, getAuthorColorId, getAuthorName, getColorPalette, removePad} from './AuthorManager';
+import {Revision} from "../models/Revision";
const padManager = require('./PadManager');
const padMessageHandler = require('../handler/PadMessageHandler');
const groupManager = require('./GroupManager');
@@ -32,15 +33,24 @@ exports.cleanText = (txt) => txt.replace(/\r\n/g, '\n')
.replace(/\t/g, ' ')
.replace(/\xa0/g, ' ');
-class Pad {
+export class Pad {
+ private db: any;
+ private atext: any;
+ private pool: AttributePool;
+ private head: number;
+ private chatHead: number;
+ private publicStatus: boolean;
+ private id: string;
+ private savedRevisions: Revision[];
/**
+ * @param id the id of this pad
* @param [database] - Database object to access this pad's records (and only this pad's records;
* the shared global Etherpad database object is still used for all other pad accesses, such
* as copying the pad). Defaults to the shared global Etherpad database object. This parameter
* can be used to shard pad storage across multiple database backends, to put each pad in its
* own database table, or to validate imported pad data before it is written to the database.
*/
- constructor(id, database = db) {
+ constructor(id: string, database = db) {
this.db = database;
this.atext = Changeset.makeAText('\n');
this.pool = new AttributePool();
@@ -99,7 +109,7 @@ class Pad {
},
}),
this.saveToDatabase(),
- authorId && authorManager.addPad(authorId, this.id),
+ authorId && addPad(authorId, this.id),
hooks.aCallAll(hook, {
pad: this,
authorId,
@@ -121,7 +131,7 @@ class Pad {
}
toJSON() {
- const o = {...this, pool: this.pool.toJsonable()};
+ const o:{db: any, id: any} = {...this, pool: this.pool.toJsonable()}
delete o.db;
delete o.id;
return o;
@@ -190,10 +200,10 @@ class Pad {
async getAllAuthorColors() {
const authorIds = this.getAllAuthors();
const returnTable = {};
- const colorPalette = authorManager.getColorPalette();
+ const colorPalette = getColorPalette();
await Promise.all(
- authorIds.map((authorId) => authorManager.getAuthorColorId(authorId).then((colorId) => {
+ authorIds.map((authorId) => getAuthorColorId(authorId).then((colorId) => {
// colorId might be a hex color or an number out of the palette
returnTable[authorId] = colorPalette[colorId] || colorId;
})));
@@ -315,7 +325,7 @@ class Pad {
const entry = await this.db.get(`pad:${this.id}:chat:${entryNum}`);
if (entry == null) return null;
const message = ChatMessage.fromObject(entry);
- message.displayName = await authorManager.getAuthorName(message.authorId);
+ message.displayName = await getAuthorName(message.authorId);
return message;
}
@@ -352,7 +362,7 @@ class Pad {
if ('pool' in value) this.pool = new AttributePool().fromJsonable(value.pool);
} else {
if (text == null) {
- const context = {pad: this, authorId, type: 'text', content: settings.defaultPadText};
+ const context = {pad: this, authorId, type: 'text', content: defaultPadText};
await hooks.aCallAll('padDefaultContent', context);
if (context.type !== 'text') throw new Error(`unsupported content type: ${context.type}`);
text = exports.cleanText(context.content);
@@ -454,7 +464,7 @@ class Pad {
async copyAuthorInfoToDestinationPad(destinationID) {
// add the new sourcePad to all authors who contributed to the old one
await Promise.all(this.getAllAuthors().map(
- (authorID) => authorManager.addPad(authorID, destinationID)));
+ (authorID) => addPad(authorID, destinationID)));
}
async copyPadWithoutHistory(destinationID, force, authorId = '') {
@@ -557,7 +567,7 @@ class Pad {
// remove pad from all authors who contributed
this.getAllAuthors().forEach((authorId) => {
- p.push(authorManager.removePad(authorId, padID));
+ p.push(removePad(authorId, padID));
});
// delete the pad entry and delete pad from padManager
@@ -587,12 +597,13 @@ class Pad {
}
// build the saved revision object
- const savedRevision = {};
- savedRevision.revNum = revNum;
- savedRevision.savedById = savedById;
- savedRevision.label = label || `Revision ${revNum}`;
- savedRevision.timestamp = Date.now();
- savedRevision.id = randomString(10);
+ const savedRevision:Revision = {
+ label: label || `Revision ${revNum}`,
+ revNum: revNum,
+ savedById: savedById,
+ timestamp: Date.now(),
+ id: randomString(10)
+ }
// save this new saved revision
this.savedRevisions.push(savedRevision);
diff --git a/src/node/db/PadManager.js b/src/node/db/PadManager.ts
similarity index 86%
rename from src/node/db/PadManager.js
rename to src/node/db/PadManager.ts
index e419e839231..568c19f8388 100644
--- a/src/node/db/PadManager.js
+++ b/src/node/db/PadManager.ts
@@ -19,9 +19,9 @@
* limitations under the License.
*/
-const CustomError = require('../utils/customError');
-const Pad = require('../db/Pad');
-const db = require('./DB');
+import CustomError from '../utils/customError';
+import {Pad} from './Pad';
+import {db} from './DB';
/**
* A cache of all loaded Pads.
@@ -50,6 +50,9 @@ const globalPads = {
* Updated without db access as new pads are created/old ones removed.
*/
const padList = new class {
+ private _cachedList: any[];
+ private _list: Set;
+ private _loaded: Promise
constructor() {
this._cachedList = null;
this._list = new Set();
@@ -94,9 +97,9 @@ const padList = new class {
* @param {string} [authorId] - Optional author ID of the user that initiated the pad creation (if
* applicable).
*/
-exports.getPad = async (id, text, authorId = '') => {
+export const getPad = async (id, text?, authorId = '') => {
// check if this is a valid padId
- if (!exports.isValidPadId(id)) {
+ if (!isValidPadId(id)) {
throw new CustomError(`${id} is not a valid padId`, 'apierror');
}
@@ -121,7 +124,7 @@ exports.getPad = async (id, text, authorId = '') => {
}
// try to load pad
- pad = new Pad.Pad(id);
+ pad = new Pad(id);
// initialize the pad
await pad.init(text, authorId);
@@ -131,21 +134,18 @@ exports.getPad = async (id, text, authorId = '') => {
return pad;
};
-exports.listAllPads = async () => {
+export const listAllPads = async () => {
const padIDs = await padList.getPads();
return {padIDs};
};
// checks if a pad exists
-exports.doesPadExist = async (padId) => {
+export const doesPadExist = async (padId) => {
const value = await db.get(`pad:${padId}`);
return (value != null && value.atext);
-};
-
-// alias for backwards compatibility
-exports.doesPadExists = exports.doesPadExist;
+}
/**
* An array of padId transformations. These represent changes in pad name policy over
@@ -157,9 +157,9 @@ const padIdTransforms = [
];
// returns a sanitized padId, respecting legacy pad id formats
-exports.sanitizePadId = async (padId) => {
+export const sanitizePadId = async (padId) => {
for (let i = 0, n = padIdTransforms.length; i < n; ++i) {
- const exists = await exports.doesPadExist(padId);
+ const exists = await doesPadExist(padId);
if (exists) {
return padId;
@@ -174,19 +174,19 @@ exports.sanitizePadId = async (padId) => {
return padId;
};
-exports.isValidPadId = (padId) => /^(g.[a-zA-Z0-9]{16}\$)?[^$]{1,50}$/.test(padId);
+export const isValidPadId = (padId) => /^(g.[a-zA-Z0-9]{16}\$)?[^$]{1,50}$/.test(padId);
/**
* Removes the pad from database and unloads it.
*/
-exports.removePad = async (padId) => {
+export const removePad = async (padId) => {
const p = db.remove(`pad:${padId}`);
- exports.unloadPad(padId);
+ unloadPad(padId);
padList.removePad(padId);
await p;
};
// removes a pad from the cache
-exports.unloadPad = (padId) => {
+export const unloadPad = (padId) => {
globalPads.remove(padId);
};
diff --git a/src/node/db/ReadOnlyManager.js b/src/node/db/ReadOnlyManager.ts
similarity index 80%
rename from src/node/db/ReadOnlyManager.js
rename to src/node/db/ReadOnlyManager.ts
index 33ce2930a4b..fe763cd9a3a 100644
--- a/src/node/db/ReadOnlyManager.js
+++ b/src/node/db/ReadOnlyManager.ts
@@ -20,21 +20,21 @@
*/
-const db = require('./DB');
-const randomString = require('../utils/randomstring');
+import {db} from './DB';
+import randomString from '../utils/randomstring';
/**
* checks if the id pattern matches a read-only pad id
- * @param {String} the pad's id
+ * @param {String} id the pad's id
*/
-exports.isReadOnlyId = (id) => id.startsWith('r.');
+export const isReadOnlyId = (id: string) => id.startsWith('r.');
/**
* returns a read only id for a pad
* @param {String} padId the id of the pad
*/
-exports.getReadOnlyId = async (padId) => {
+export const getReadOnlyId = async (padId) => {
// check if there is a pad2readonly entry
let readOnlyId = await db.get(`pad2readonly:${padId}`);
@@ -54,13 +54,13 @@ exports.getReadOnlyId = async (padId) => {
* returns the padId for a read only id
* @param {String} readOnlyId read only id
*/
-exports.getPadId = async (readOnlyId) => await db.get(`readonly2pad:${readOnlyId}`);
+export const getPadId = async (readOnlyId) => await db.get(`readonly2pad:${readOnlyId}`);
/**
* returns the padId and readonlyPadId in an object for any id
- * @param {String} padIdOrReadonlyPadId read only id or real pad id
+ * @param {String} id padIdOrReadonlyPadId read only id or real pad id
*/
-exports.getIds = async (id) => {
+export const getIds = async (id: string) => {
const readonly = exports.isReadOnlyId(id);
// Might be null, if this is an unknown read-only id
diff --git a/src/node/db/SecurityManager.js b/src/node/db/SecurityManager.ts
similarity index 79%
rename from src/node/db/SecurityManager.js
rename to src/node/db/SecurityManager.ts
index 280c753bba4..dcebdb89793 100644
--- a/src/node/db/SecurityManager.js
+++ b/src/node/db/SecurityManager.ts
@@ -19,18 +19,29 @@
* limitations under the License.
*/
-const authorManager = require('./AuthorManager');
-const hooks = require('../../static/js/pluginfw/hooks.js');
-const padManager = require('./PadManager');
-const readOnlyManager = require('./ReadOnlyManager');
-const sessionManager = require('./SessionManager');
-const settings = require('../utils/Settings');
-const webaccess = require('../hooks/express/webaccess');
-const log4js = require('log4js');
+import {getAuthorId} from "./AuthorManager";
+
+import hooks from "../../static/js/pluginfw/hooks.js";
+
+import {doesPadExist, getPad} from "./PadManager";
+
+import {getPadId} from "./ReadOnlyManager";
+
+import {findAuthorID} from "./SessionManager";
+
+import {editOnly, loadTest, requireAuthentication, requireSession} from "../utils/Settings";
+
+import webaccess from "../hooks/express/webaccess";
+
+import log4js from "log4js";
+
+import {padutils} from "../../static/js/pad_utils";
+import {isReadOnlyId} from "./ReadOnlyManager.js";
+
const authLogger = log4js.getLogger('auth');
-const {padutils} = require('../../static/js/pad_utils');
-const DENY = Object.freeze({accessStatus: 'deny'});
+
+const DENY = Object.freeze({accessStatus: 'deny', authorID: null});
/**
* Determines whether the user can access a pad.
@@ -50,17 +61,17 @@ const DENY = Object.freeze({accessStatus: 'deny'});
* WARNING: Tokens and session IDs MUST be kept secret, otherwise users will be able to impersonate
* each other (which might allow them to gain privileges).
*/
-exports.checkAccess = async (padID, sessionCookie, token, userSettings) => {
+export const checkAccess = async (padID, sessionCookie, token, userSettings) => {
if (!padID) {
authLogger.debug('access denied: missing padID');
return DENY;
}
- let canCreate = !settings.editOnly;
+ let canCreate = !editOnly;
- if (readOnlyManager.isReadOnlyId(padID)) {
+ if (isReadOnlyId(padID)) {
canCreate = false;
- padID = await readOnlyManager.getPadId(padID);
+ padID = await getPadId(padID);
if (padID == null) {
authLogger.debug('access denied: read-only pad ID for a pad that does not exist');
return DENY;
@@ -68,10 +79,10 @@ exports.checkAccess = async (padID, sessionCookie, token, userSettings) => {
}
// Authentication and authorization checks.
- if (settings.loadTest) {
+ if (loadTest) {
console.warn(
'bypassing socket.io authentication and authorization checks due to settings.loadTest');
- } else if (settings.requireAuthentication) {
+ } else if (requireAuthentication) {
if (userSettings == null) {
authLogger.debug('access denied: authentication is required');
return DENY;
@@ -96,14 +107,14 @@ exports.checkAccess = async (padID, sessionCookie, token, userSettings) => {
return DENY;
}
- const padExists = await padManager.doesPadExist(padID);
+ const padExists = await doesPadExist(padID);
if (!padExists && !canCreate) {
authLogger.debug('access denied: user attempted to create a pad, which is prohibited');
return DENY;
}
- const sessionAuthorID = await sessionManager.findAuthorID(padID.split('$')[0], sessionCookie);
- if (settings.requireSession && !sessionAuthorID) {
+ const sessionAuthorID = await findAuthorID(padID.split('$')[0], sessionCookie);
+ if (requireSession && !sessionAuthorID) {
authLogger.debug('access denied: HTTP API session is required');
return DENY;
}
@@ -115,7 +126,7 @@ exports.checkAccess = async (padID, sessionCookie, token, userSettings) => {
const grant = {
accessStatus: 'grant',
- authorID: sessionAuthorID || await authorManager.getAuthorId(token, userSettings),
+ authorID: sessionAuthorID || await getAuthorId(token, userSettings),
};
if (!padID.includes('$')) {
@@ -132,7 +143,7 @@ exports.checkAccess = async (padID, sessionCookie, token, userSettings) => {
return grant;
}
- const pad = await padManager.getPad(padID);
+ const pad = await getPad(padID);
if (!pad.getPublicStatus() && sessionAuthorID == null) {
authLogger.debug('access denied: must have an HTTP API session to access private group pads');
diff --git a/src/node/db/SessionManager.js b/src/node/db/SessionManager.ts
similarity index 93%
rename from src/node/db/SessionManager.js
rename to src/node/db/SessionManager.ts
index 5ef75acfaf4..341252e26a0 100644
--- a/src/node/db/SessionManager.js
+++ b/src/node/db/SessionManager.ts
@@ -36,7 +36,7 @@ const authorManager = require('./AuthorManager');
* sessionCookie, and is bound to a group with the given ID, then this returns the author ID
* bound to the session. Otherwise, returns undefined.
*/
-exports.findAuthorID = async (groupID, sessionCookie) => {
+export const findAuthorID = async (groupID, sessionCookie) => {
if (!sessionCookie) return undefined;
/*
* Sometimes, RFC 6265-compliant web servers may send back a cookie whose
@@ -64,7 +64,7 @@ exports.findAuthorID = async (groupID, sessionCookie) => {
const sessionIDs = sessionCookie.replace(/^"|"$/g, '').split(',');
const sessionInfoPromises = sessionIDs.map(async (id) => {
try {
- return await exports.getSessionInfo(id);
+ return await getSessionInfo(id);
} catch (err) {
if (err.message === 'sessionID does not exist') {
console.debug(`SessionManager getAuthorID: no session exists with ID ${id}`);
@@ -81,7 +81,7 @@ exports.findAuthorID = async (groupID, sessionCookie) => {
return sessionInfo.authorID;
};
-exports.doesSessionExist = async (sessionID) => {
+export const doesSessionExist = async (sessionID) => {
// check if the database entry of this session exists
const session = await db.get(`session:${sessionID}`);
return (session != null);
@@ -90,7 +90,7 @@ exports.doesSessionExist = async (sessionID) => {
/**
* Creates a new session between an author and a group
*/
-exports.createSession = async (groupID, authorID, validUntil) => {
+export const createSession = async (groupID, authorID, validUntil) => {
// check if the group exists
const groupExists = await groupManager.doesGroupExist(groupID);
if (!groupExists) {
@@ -146,7 +146,7 @@ exports.createSession = async (groupID, authorID, validUntil) => {
return {sessionID};
};
-exports.getSessionInfo = async (sessionID) => {
+export const getSessionInfo = async (sessionID) => {
// check if the database entry of this session exists
const session = await db.get(`session:${sessionID}`);
@@ -162,7 +162,7 @@ exports.getSessionInfo = async (sessionID) => {
/**
* Deletes a session
*/
-exports.deleteSession = async (sessionID) => {
+export const deleteSession = async (sessionID) => {
// ensure that the session exists
const session = await db.get(`session:${sessionID}`);
if (session == null) {
@@ -186,7 +186,7 @@ exports.deleteSession = async (sessionID) => {
await db.remove(`session:${sessionID}`);
};
-exports.listSessionsOfGroup = async (groupID) => {
+export const listSessionsOfGroup = async (groupID) => {
// check that the group exists
const exists = await groupManager.doesGroupExist(groupID);
if (!exists) {
@@ -197,7 +197,7 @@ exports.listSessionsOfGroup = async (groupID) => {
return sessions;
};
-exports.listSessionsOfAuthor = async (authorID) => {
+export const listSessionsOfAuthor = async (authorID) => {
// check that the author exists
const exists = await authorManager.doesAuthorExist(authorID);
if (!exists) {
@@ -218,8 +218,7 @@ const listSessionsWithDBKey = async (dbkey) => {
// iterate through the sessions and get the sessioninfos
for (const sessionID of Object.keys(sessions || {})) {
try {
- const sessionInfo = await exports.getSessionInfo(sessionID);
- sessions[sessionID] = sessionInfo;
+ sessions[sessionID] = await getSessionInfo(sessionID);
} catch (err) {
if (err.name === 'apierror') {
console.warn(`Found bad session ${sessionID} in ${dbkey}`);
diff --git a/src/node/db/SessionStore.js b/src/node/db/SessionStore.ts
similarity index 88%
rename from src/node/db/SessionStore.js
rename to src/node/db/SessionStore.ts
index 40e5e90d069..bd6ab9d92e0 100644
--- a/src/node/db/SessionStore.js
+++ b/src/node/db/SessionStore.ts
@@ -1,13 +1,19 @@
'use strict';
-const DB = require('./DB');
-const Store = require('express-session').Store;
-const log4js = require('log4js');
-const util = require('util');
+import {db} from "./DB";
+
+import {Store} from "express-session";
+
+import log4js from "log4js";
+
+import util from "util";
+import {SessionModel} from "../models/SessionModel";
const logger = log4js.getLogger('SessionStore');
class SessionStore extends Store {
+ private _refresh: any;
+ private _expirations: Map;
/**
* @param {?number} [refresh] - How often (in milliseconds) `touch()` will update a session's
* database record with the cookie's latest expiration time. If the difference between the
@@ -34,10 +40,10 @@ class SessionStore extends Store {
for (const {timeout} of this._expirations.values()) clearTimeout(timeout);
}
- async _updateExpirations(sid, sess, updateDbExp = true) {
+ async _updateExpirations(sid, sess: SessionModel, updateDbExp = true) {
const exp = this._expirations.get(sid) || {};
clearTimeout(exp.timeout);
- const {cookie: {expires} = {}} = sess || {};
+ const {cookie: {expires} = {expires: sess.cookie.expires}} = sess || {cookie:{expires:undefined}};
if (expires) {
const sessExp = new Date(expires).getTime();
if (updateDbExp) exp.db = sessExp;
@@ -64,12 +70,12 @@ class SessionStore extends Store {
}
async _write(sid, sess) {
- await DB.set(`sessionstorage:${sid}`, sess);
+ await db.set(`sessionstorage:${sid}`, sess);
}
async _get(sid) {
logger.debug(`GET ${sid}`);
- const s = await DB.get(`sessionstorage:${sid}`);
+ const s = await db.get(`sessionstorage:${sid}`);
return await this._updateExpirations(sid, s);
}
@@ -83,7 +89,7 @@ class SessionStore extends Store {
logger.debug(`DESTROY ${sid}`);
clearTimeout((this._expirations.get(sid) || {}).timeout);
this._expirations.delete(sid);
- await DB.remove(`sessionstorage:${sid}`);
+ await db.remove(`sessionstorage:${sid}`);
}
// Note: express-session might call touch() before it calls set() for the first time. Ideally this
@@ -110,4 +116,4 @@ for (const m of ['get', 'set', 'destroy', 'touch']) {
SessionStore.prototype[m] = util.callbackify(SessionStore.prototype[`_${m}`]);
}
-module.exports = SessionStore;
+export default SessionStore;
diff --git a/src/node/eejs/index.js b/src/node/eejs/index.ts
similarity index 54%
rename from src/node/eejs/index.js
rename to src/node/eejs/index.ts
index 1bf29634b1b..42faa52a15a 100644
--- a/src/node/eejs/index.js
+++ b/src/node/eejs/index.ts
@@ -20,56 +20,61 @@
* require("./index").require("./path/to/template.ejs")
*/
-const ejs = require('ejs');
-const fs = require('fs');
-const hooks = require('../../static/js/pluginfw/hooks.js');
-const path = require('path');
-const resolve = require('resolve');
-const settings = require('../utils/Settings');
+import ejs from 'ejs';
+import fs from "fs";
+
+import hooks from "../../static/js/pluginfw/hooks.js";
+
+import path from "path";
+
+import resolve from "resolve";
+
+import {maxAge} from "../utils/Settings";
const templateCache = new Map();
-exports.info = {
+export const info = {
__output_stack: [],
block_stack: [],
file_stack: [],
- args: [],
+ args: [], __output: undefined
+
};
-const getCurrentFile = () => exports.info.file_stack[exports.info.file_stack.length - 1];
+const getCurrentFile = () => info.file_stack[info.file_stack.length - 1];
-exports._init = (b, recursive) => {
- exports.info.__output_stack.push(exports.info.__output);
- exports.info.__output = b;
+export const _init = (b, recursive) => {
+ info.__output_stack.push(info.__output)
+ info.__output = b
};
-exports._exit = (b, recursive) => {
- exports.info.__output = exports.info.__output_stack.pop();
+export const _exit = (b, recursive) => {
+ info.__output = info.__output_stack.pop();
};
-exports.begin_block = (name) => {
- exports.info.block_stack.push(name);
- exports.info.__output_stack.push(exports.info.__output.get());
- exports.info.__output.set('');
+export const begin_block = (name) => {
+ info.block_stack.push(name);
+ info.__output_stack.push(info.__output.get());
+ info.__output.set('');
};
-exports.end_block = () => {
- const name = exports.info.block_stack.pop();
- const renderContext = exports.info.args[exports.info.args.length - 1];
- const content = exports.info.__output.get();
- exports.info.__output.set(exports.info.__output_stack.pop());
+export const end_block = () => {
+ const name = info.block_stack.pop();
+ const renderContext = info.args[info.args.length - 1];
+ const content = info.__output.get();
+ info.__output.set(info.__output_stack.pop());
const args = {content, renderContext};
hooks.callAll(`eejsBlock_${name}`, args);
- exports.info.__output.set(exports.info.__output.get().concat(args.content));
+ info.__output.set(info.__output.get().concat(args.content));
};
-exports.require = (name, args, mod) => {
+export const required = (name, args?, mod?) => {
if (args == null) args = {};
let basedir = __dirname;
let paths = [];
- if (exports.info.file_stack.length) {
+ if (info.file_stack.length) {
basedir = path.dirname(getCurrentFile().path);
}
if (mod) {
@@ -82,18 +87,18 @@ exports.require = (name, args, mod) => {
args.e = exports;
args.require = require;
- const cache = settings.maxAge !== 0;
+ const cache = maxAge !== 0;
const template = cache && templateCache.get(ejspath) || ejs.compile(
'<% e._init({get: () => __output, set: (s) => { __output = s; }}); %>' +
`${fs.readFileSync(ejspath).toString()}<% e._exit(); %>`,
{filename: ejspath});
if (cache) templateCache.set(ejspath, template);
- exports.info.args.push(args);
- exports.info.file_stack.push({path: ejspath});
+ info.args.push(args);
+ info.file_stack.push({path: ejspath});
const res = template(args);
- exports.info.file_stack.pop();
- exports.info.args.pop();
+ info.file_stack.pop();
+ info.args.pop();
return res;
};
diff --git a/src/node/handler/APIHandler.js b/src/node/handler/APIHandler.ts
similarity index 90%
rename from src/node/handler/APIHandler.js
rename to src/node/handler/APIHandler.ts
index 2c060c23953..d1ed23fb328 100644
--- a/src/node/handler/APIHandler.js
+++ b/src/node/handler/APIHandler.ts
@@ -19,12 +19,12 @@
* limitations under the License.
*/
-const absolutePaths = require('../utils/AbsolutePaths');
-const fs = require('fs');
-const api = require('../db/API');
-const log4js = require('log4js');
-const padManager = require('../db/PadManager');
-const randomString = require('../utils/randomstring');
+import absolutePaths from '../utils/AbsolutePaths';
+import fs from 'fs';
+import * as api from '../db/API';
+import log4js from 'log4js';
+import {sanitizePadId} from '../db/PadManager';
+import randomString from '../utils/randomstring';
const argv = require('../utils/Cli').argv;
const createHTTPError = require('http-errors');
@@ -45,7 +45,7 @@ try {
}
// a list of all functions
-const version = {};
+export const version = {};
version['1'] = {
createGroup: [],
@@ -158,10 +158,9 @@ version['1.3.0'] = {
};
// set the latest available API version here
-exports.latestApiVersion = '1.3.0';
+export const latestApiVersion = '1.3.0';
// exports the versions so it can be used by the new Swagger endpoint
-exports.version = version;
/**
* Handles a HTTP API call
@@ -170,7 +169,7 @@ exports.version = version;
* @req express request object
* @res express response object
*/
-exports.handle = async function (apiVersion, functionName, fields, req, res) {
+export const handle = async function (apiVersion, functionName, fields, req, res) {
// say goodbye if this is an unknown API version
if (!(apiVersion in version)) {
throw new createHTTPError.NotFound('no such api version');
@@ -190,13 +189,13 @@ exports.handle = async function (apiVersion, functionName, fields, req, res) {
// sanitize any padIDs before continuing
if (fields.padID) {
- fields.padID = await padManager.sanitizePadId(fields.padID);
+ fields.padID = await sanitizePadId(fields.padID);
}
// there was an 'else' here before - removed it to ensure
// that this sanitize step can't be circumvented by forcing
// the first branch to be taken
if (fields.padName) {
- fields.padName = await padManager.sanitizePadId(fields.padName);
+ fields.padName = await sanitizePadId(fields.padName);
}
// put the function parameters in an array
@@ -206,6 +205,6 @@ exports.handle = async function (apiVersion, functionName, fields, req, res) {
return api[functionName].apply(this, functionParams);
};
-exports.exportedForTestingOnly = {
+export const exportedForTestingOnly = {
apiKey: apikey,
};
diff --git a/src/node/handler/ExportHandler.js b/src/node/handler/ExportHandler.ts
similarity index 98%
rename from src/node/handler/ExportHandler.js
rename to src/node/handler/ExportHandler.ts
index f3fde047cd5..a06c2839331 100644
--- a/src/node/handler/ExportHandler.js
+++ b/src/node/handler/ExportHandler.ts
@@ -38,7 +38,7 @@ const tempDirectory = os.tmpdir();
/**
* do a requested export
*/
-exports.doExport = async (req, res, padId, readOnlyId, type) => {
+export const doExport = async (req, res, padId, readOnlyId, type) => {
// avoid naming the read-only file as the original pad's id
let fileName = readOnlyId ? readOnlyId : padId;
@@ -114,4 +114,4 @@ exports.doExport = async (req, res, padId, readOnlyId, type) => {
await fsp_unlink(destFile);
}
-};
+}
diff --git a/src/node/handler/ImportHandler.js b/src/node/handler/ImportHandler.ts
similarity index 87%
rename from src/node/handler/ImportHandler.js
rename to src/node/handler/ImportHandler.ts
index c1fbc94d03a..8894225645f 100644
--- a/src/node/handler/ImportHandler.js
+++ b/src/node/handler/ImportHandler.ts
@@ -21,22 +21,24 @@
* limitations under the License.
*/
-const padManager = require('../db/PadManager');
-const padMessageHandler = require('./PadMessageHandler');
-const fs = require('fs').promises;
-const path = require('path');
-const settings = require('../utils/Settings');
-const {Formidable} = require('formidable');
-const os = require('os');
-const importHtml = require('../utils/ImportHtml');
-const importEtherpad = require('../utils/ImportEtherpad');
-const log4js = require('log4js');
-const hooks = require('../../static/js/pluginfw/hooks.js');
+import {getPad, unloadPad} from '../db/PadManager';
+import {updatePadClients} from './PadMessageHandler';
+import path from 'path';
+import {promises as fs} from "fs";
+
+import {abiword, allowUnknownFileEnds, importMaxFileSize, soffice} from '../utils/Settings';
+import {Formidable} from 'formidable';
+import os from 'os';
+import importHtml from '../utils/ImportHtml';
+import importEtherpad from '../utils/ImportEtherpad';
+import log4js from 'log4js';
+import hooks from '../../static/js/pluginfw/hooks.js';
const logger = log4js.getLogger('ImportHandler');
// `status` must be a string supported by `importErrorMessage()` in `src/static/js/pad_impexp.js`.
class ImportError extends Error {
+ public status: any;
constructor(status, ...args) {
super(...args);
if (Error.captureStackTrace) Error.captureStackTrace(this, ImportError);
@@ -59,12 +61,12 @@ let converter = null;
let exportExtension = 'htm';
// load abiword only if it is enabled and if soffice is disabled
-if (settings.abiword != null && settings.soffice == null) {
+if (abiword != null && soffice == null) {
converter = require('../utils/Abiword');
}
// load soffice only if it is enabled
-if (settings.soffice != null) {
+if (soffice != null) {
converter = require('../utils/LibreOffice');
exportExtension = 'html';
}
@@ -86,11 +88,11 @@ const doImport = async (req, res, padId, authorId) => {
const form = new Formidable({
keepExtensions: true,
uploadDir: tmpDirectory,
- maxFileSize: settings.importMaxFileSize,
+ maxFileSize: importMaxFileSize,
});
// locally wrapped Promise, since form.parse requires a callback
- let srcFile = await new Promise((resolve, reject) => {
+ let srcFile = await new Promise((resolve, reject) => {
form.parse(req, (err, fields, files) => {
if (err != null) {
logger.warn(`Import failed due to form error: ${err.stack || err}`);
@@ -118,7 +120,7 @@ const doImport = async (req, res, padId, authorId) => {
if (fileEndingUnknown) {
// the file ending is not known
- if (settings.allowUnknownFileEnds === true) {
+ if (allowUnknownFileEnds === true) {
// we need to rename this file with a .txt ending
const oldSrcFile = srcFile;
@@ -140,7 +142,7 @@ const doImport = async (req, res, padId, authorId) => {
let directDatabaseAccess = false;
if (fileIsEtherpad) {
// Use '\n' to avoid the default pad text if the pad doesn't yet exist.
- const pad = await padManager.getPad(padId, '\n', authorId);
+ const pad = await getPad(padId, '\n', authorId);
const headCount = pad.head;
if (headCount >= 10) {
logger.warn('Aborting direct database import attempt of a pad that already has content');
@@ -186,7 +188,7 @@ const doImport = async (req, res, padId, authorId) => {
}
// Use '\n' to avoid the default pad text if the pad doesn't yet exist.
- let pad = await padManager.getPad(padId, '\n', authorId);
+ let pad = await getPad(padId, '\n', authorId);
// read the text
let text;
@@ -215,16 +217,16 @@ const doImport = async (req, res, padId, authorId) => {
}
// Load the Pad into memory then broadcast updates to all clients
- padManager.unloadPad(padId);
- pad = await padManager.getPad(padId, '\n', authorId);
- padManager.unloadPad(padId);
+ unloadPad(padId);
+ pad = await getPad(padId, '\n', authorId);
+ unloadPad(padId);
// Direct database access means a pad user should reload the pad and not attempt to receive
// updated pad data.
if (directDatabaseAccess) return true;
// tell clients to update
- await padMessageHandler.updatePadClients(pad);
+ await updatePadClients(pad);
// clean up temporary files
rm(srcFile);
@@ -233,7 +235,7 @@ const doImport = async (req, res, padId, authorId) => {
return false;
};
-exports.doImport = async (req, res, padId, authorId = '') => {
+export const doImport2 = async (req, res, padId, authorId = '') => {
let httpStatus = 200;
let code = 0;
let message = 'ok';
diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.ts
similarity index 88%
rename from src/node/handler/PadMessageHandler.js
rename to src/node/handler/PadMessageHandler.ts
index 9a1885b736e..dfa80430d1d 100644
--- a/src/node/handler/PadMessageHandler.js
+++ b/src/node/handler/PadMessageHandler.ts
@@ -19,34 +19,62 @@
* limitations under the License.
*/
-const AttributeMap = require('../../static/js/AttributeMap');
-const padManager = require('../db/PadManager');
-const Changeset = require('../../static/js/Changeset');
-const ChatMessage = require('../../static/js/ChatMessage');
-const AttributePool = require('../../static/js/AttributePool');
-const AttributeManager = require('../../static/js/AttributeManager');
-const authorManager = require('../db/AuthorManager');
-const {padutils} = require('../../static/js/pad_utils');
-const readOnlyManager = require('../db/ReadOnlyManager');
-const settings = require('../utils/Settings');
+import AttributeMap from '../../static/js/AttributeMap';
+import {getPad} from '../db/PadManager';
+import Changeset from '../../static/js/Changeset';
+import ChatMessage from '../../static/js/ChatMessage';
+import {AttributePool} from '../../static/js/AttributePool';
+import AttributeManager from '../../static/js/AttributeManager';
+import {
+ getAuthor,
+ getAuthorColorId,
+ getAuthorName,
+ getColorPalette,
+ setAuthorColorId,
+ setAuthorName
+} from '../db/AuthorManager';
+import {padutils} from '../../static/js/pad_utils';
+import {getIds} from '../db/ReadOnlyManager';
+import {
+ abiwordAvailable,
+ automaticReconnectionTimeout,
+ commitRateLimiting,
+ cookie,
+ disableIPlogging,
+ exportAvailable,
+ indentationOnNewLine,
+ padOptions,
+ padShortcutEnabled,
+ randomVersionString,
+ scrollWhenFocusLineIsOutOfViewport,
+ skinName,
+ skinVariants,
+ sofficeAvailable
+} from '../utils/Settings';
+import plugins from '../../static/js/pluginfw/plugin_defs.js';
+import log4js from "log4js";
+import hooks from '../../static/js/pluginfw/hooks.js';
+import {createCollection} from '../stats';
+import {strict as assert} from "assert";
+
+import {RateLimiterMemory} from 'rate-limiter-flexible';
+import webaccess from '../hooks/express/webaccess';
+import {ErrorCaused} from "../models/ErrorCaused";
+import {Pad} from "../db/Pad";
+import {SessionInfo} from "../models/SessionInfo";
+
const securityManager = require('../db/SecurityManager');
-const plugins = require('../../static/js/pluginfw/plugin_defs.js');
-const log4js = require('log4js');
+
const messageLogger = log4js.getLogger('message');
const accessLogger = log4js.getLogger('access');
-const hooks = require('../../static/js/pluginfw/hooks.js');
-const stats = require('../stats');
-const assert = require('assert').strict;
-const {RateLimiterMemory} = require('rate-limiter-flexible');
-const webaccess = require('../hooks/express/webaccess');
let rateLimiter;
let socketio = null;
hooks.deprecationNotices.clientReady = 'use the userJoin hook instead';
-const addContextToError = (err, pfx) => {
- const newErr = new Error(`${pfx}${err.message}`, {cause: err});
+const addContextToError = (err: Error, pfx) => {
+ const newErr = new ErrorCaused(`${pfx}${err.message}`, err);
if (Error.captureStackTrace) Error.captureStackTrace(newErr, addContextToError);
// Check for https://github.com/tc39/proposal-error-cause support, available in Node.js >= v16.10.
if (newErr.cause === err) return newErr;
@@ -54,11 +82,11 @@ const addContextToError = (err, pfx) => {
return err;
};
-exports.socketio = () => {
+export const socketiofn = () => {
// The rate limiter is created in this hook so that restarting the server resets the limiter. The
// settings.commitRateLimiting object is passed directly to the rate limiter so that the limits
// can be dynamically changed during runtime by modifying its properties.
- rateLimiter = new RateLimiterMemory(settings.commitRateLimiting);
+ rateLimiter = new RateLimiterMemory(commitRateLimiting);
};
/**
@@ -79,11 +107,10 @@ exports.socketio = () => {
* - readonly: Whether the client has read-only access (true) or read/write access (false).
* - rev: The last revision that was sent to the client.
*/
-const sessioninfos = {};
-exports.sessioninfos = sessioninfos;
+export const sessioninfos: SessionInfo = {};
-stats.gauge('totalUsers', () => socketio ? Object.keys(socketio.sockets.sockets).length : 0);
-stats.gauge('activePads', () => {
+createCollection.gauge('totalUsers', () => socketio ? Object.keys(socketio.sockets.sockets).length : 0);
+createCollection.gauge('activePads', () => {
const padIds = new Set();
for (const {padId} of Object.values(sessioninfos)) {
if (!padId) continue;
@@ -96,6 +123,8 @@ stats.gauge('activePads', () => {
* Processes one task at a time per channel.
*/
class Channels {
+ private readonly _exec: (ch, task) => any;
+ private _promiseChains: Map;
/**
* @param {(ch, task) => any} [exec] - Task executor. If omitted, tasks are assumed to be
* functions that will be executed with the channel as the only argument.
@@ -144,10 +173,14 @@ exports.setSocketIO = (socket_io) => {
* @param socket the socket.io Socket object for the new connection from the client
*/
exports.handleConnect = (socket) => {
- stats.meter('connects').mark();
+ createCollection.meter('connects').mark();
// Initialize sessioninfos for this new session
- sessioninfos[socket.id] = {};
+ sessioninfos[socket.id] = {
+ rev: 0, time: undefined,
+ auth: {padID: undefined, sessionID: undefined, token: undefined},
+ readOnlyPadId: undefined,
+ padId:undefined,readonly:false,author:undefined};
};
/**
@@ -168,17 +201,17 @@ exports.kickSessionsFromPad = (padID) => {
* @param socket the socket.io Socket object for the client
*/
exports.handleDisconnect = async (socket) => {
- stats.meter('disconnects').mark();
+ createCollection.meter('disconnects').mark();
const session = sessioninfos[socket.id];
delete sessioninfos[socket.id];
// session.padId can be nullish if the user disconnects before sending CLIENT_READY.
if (!session || !session.author || !session.padId) return;
- const {session: {user} = {}} = socket.client.request;
+ const {session: {user} = {}}: SessionSocketModel = socket.client.request;
/* eslint-disable prefer-template -- it doesn't support breaking across multiple lines */
accessLogger.info('[LEAVE]' +
` pad:${session.padId}` +
` socket:${socket.id}` +
- ` IP:${settings.disableIPlogging ? 'ANONYMOUS' : socket.request.ip}` +
+ ` IP:${disableIPlogging ? 'ANONYMOUS' : socket.request.ip}` +
` authorID:${session.author}` +
(user && user.username ? ` username:${user.username}` : ''));
/* eslint-enable prefer-template */
@@ -187,7 +220,7 @@ exports.handleDisconnect = async (socket) => {
data: {
type: 'USER_LEAVE',
userInfo: {
- colorId: await authorManager.getAuthorColorId(session.author),
+ colorId: await getAuthorColorId(session.author),
userId: session.author,
},
},
@@ -214,7 +247,7 @@ exports.handleMessage = async (socket, message) => {
} catch (err) {
messageLogger.warn(`Rate limited IP ${socket.request.ip}. To reduce the amount of rate ` +
'limiting that happens edit the rateLimit values in settings.json');
- stats.meter('rateLimited').mark();
+ createCollection.meter('rateLimited').mark();
socket.json.send({disconnect: 'rateLimited'});
throw err;
}
@@ -235,7 +268,7 @@ exports.handleMessage = async (socket, message) => {
padID: message.padId,
token: message.token,
};
- const padIds = await readOnlyManager.getIds(thisSession.auth.padID);
+ const padIds = await getIds(thisSession.auth.padID);
thisSession.padId = padIds.padId;
thisSession.readOnlyPadId = padIds.readOnlyPadId;
thisSession.readonly =
@@ -252,12 +285,12 @@ exports.handleMessage = async (socket, message) => {
const auth = thisSession.auth;
if (!auth) {
- const ip = settings.disableIPlogging ? 'ANONYMOUS' : (socket.request.ip || '');
+ const ip = disableIPlogging ? 'ANONYMOUS' : (socket.request.ip || '');
const msg = JSON.stringify(message, null, 2);
throw new Error(`pre-CLIENT_READY message from IP ${ip}: ${msg}`);
}
- const {session: {user} = {}} = socket.client.request;
+ const {session: {user} = {}}:SessionSocketModel = socket.client.request;
const {accessStatus, authorID} =
await securityManager.checkAccess(auth.padID, auth.sessionID, auth.token, user);
if (accessStatus !== 'grant') {
@@ -269,7 +302,7 @@ exports.handleMessage = async (socket, message) => {
throw new Error([
'Author ID changed mid-session. Bad or missing token or sessionID?',
`socket:${socket.id}`,
- `IP:${settings.disableIPlogging ? 'ANONYMOUS' : socket.request.ip}`,
+ `IP:${disableIPlogging ? 'ANONYMOUS' : socket.request.ip}`,
`originalAuthorID:${thisSession.author}`,
`newAuthorID:${authorID}`,
...(user && user.username) ? [`username:${user.username}`] : [],
@@ -331,7 +364,7 @@ exports.handleMessage = async (socket, message) => {
try {
switch (type) {
case 'USER_CHANGES':
- stats.counter('pendingEdits').inc();
+ createCollection.counter('pendingEdits').inc();
await padChannels.enqueue(thisSession.padId, {socket, message});
break;
case 'USERINFO_UPDATE': await handleUserInfoUpdate(socket, message); break;
@@ -372,7 +405,7 @@ exports.handleMessage = async (socket, message) => {
*/
const handleSaveRevisionMessage = async (socket, message) => {
const {padId, author: authorId} = sessioninfos[socket.id];
- const pad = await padManager.getPad(padId, null, authorId);
+ const pad = await getPad(padId, null, authorId);
await pad.addSavedRevision(pad.head, authorId);
};
@@ -401,7 +434,7 @@ exports.handleCustomObjectMessage = (msg, sessionID) => {
* @param padID {Pad} the pad to which we're sending this message
* @param msgString {String} the message we're sending
*/
-exports.handleCustomMessage = (padID, msgString) => {
+export const handleCustomMessage = (padID, msgString) => {
const time = Date.now();
const msg = {
type: 'COLLABROOM',
@@ -424,7 +457,7 @@ const handleChatMessage = async (socket, message) => {
// Don't trust the user-supplied values.
chatMessage.time = Date.now();
chatMessage.authorId = authorId;
- await exports.sendChatMessageToPadClients(chatMessage, padId);
+ await sendChatMessageToPadClients(chatMessage, padId);
};
/**
@@ -438,15 +471,15 @@ const handleChatMessage = async (socket, message) => {
* @param {string} [padId] - The destination pad ID. Deprecated; pass a chat message
* object as the first argument and the destination pad ID as the second argument instead.
*/
-exports.sendChatMessageToPadClients = async (mt, puId, text = null, padId = null) => {
+export const sendChatMessageToPadClients = async (mt, puId, text = null, padId = null) => {
const message = mt instanceof ChatMessage ? mt : new ChatMessage(text, puId, mt);
padId = mt instanceof ChatMessage ? puId : padId;
- const pad = await padManager.getPad(padId, null, message.authorId);
+ const pad = await getPad(padId, null, message.authorId);
await hooks.aCallAll('chatNewMessage', {message, pad, padId});
// pad.appendChatMessage() ignores the displayName property so we don't need to wait for
// authorManager.getAuthorName() to resolve before saving the message to the database.
const promise = pad.appendChatMessage(message);
- message.displayName = await authorManager.getAuthorName(message.authorId);
+ message.displayName = await getAuthorName(message.authorId);
socketio.sockets.in(padId).json.send({
type: 'COLLABROOM',
data: {type: 'CHAT_MESSAGE', message},
@@ -465,7 +498,7 @@ const handleGetChatMessages = async (socket, {data: {start, end}}) => {
const count = end - start;
if (count < 0 || count > 100) throw new Error(`invalid number of messages: ${count}`);
const {padId, author: authorId} = sessioninfos[socket.id];
- const pad = await padManager.getPad(padId, null, authorId);
+ const pad = await getPad(padId, null, authorId);
const chatMessages = await pad.getChatMessages(start, end);
const infoMsg = {
@@ -517,8 +550,8 @@ const handleUserInfoUpdate = async (socket, {data: {userInfo: {name, colorId}}})
// Tell the authorManager about the new attributes
const p = Promise.all([
- authorManager.setAuthorColorId(author, colorId),
- authorManager.setAuthorName(author, name),
+ setAuthorColorId(author, colorId),
+ setAuthorName(author, name),
]);
const padId = session.padId;
@@ -555,7 +588,7 @@ const handleUserInfoUpdate = async (socket, {data: {userInfo: {name, colorId}}})
*/
const handleUserChanges = async (socket, message) => {
// This one's no longer pending, as we're gonna process it now
- stats.counter('pendingEdits').dec();
+ createCollection.counter('pendingEdits').dec();
// The client might disconnect between our callbacks. We should still
// finish processing the changeset, so keep a reference to the session.
@@ -567,14 +600,14 @@ const handleUserChanges = async (socket, message) => {
if (!thisSession) throw new Error('client disconnected');
// Measure time to process edit
- const stopWatch = stats.timer('edits').start();
+ const stopWatch = createCollection.timer('edits').start();
try {
const {data: {baseRev, apool, changeset}} = message;
if (baseRev == null) throw new Error('missing baseRev');
if (apool == null) throw new Error('missing apool');
if (changeset == null) throw new Error('missing changeset');
const wireApool = (new AttributePool()).fromJsonable(apool);
- const pad = await padManager.getPad(thisSession.padId, null, thisSession.author);
+ const pad = await getPad(thisSession.padId, null, thisSession.author);
// Verify that the changeset has valid syntax and is in canonical form
Changeset.checkRep(changeset);
@@ -654,7 +687,7 @@ const handleUserChanges = async (socket, message) => {
await exports.updatePadClients(pad);
} catch (err) {
socket.json.send({disconnect: 'badChangeset'});
- stats.meter('failedChangesets').mark();
+ createCollection.meter('failedChangesets').mark();
messageLogger.warn(`Failed to apply USER_CHANGES from author ${thisSession.author} ` +
`(socket ${socket.id}) on pad ${thisSession.padId}: ${err.stack || err}`);
} finally {
@@ -662,7 +695,7 @@ const handleUserChanges = async (socket, message) => {
}
};
-exports.updatePadClients = async (pad) => {
+export const updatePadClients = async (pad) => {
// skip this if no-one is on this pad
const roomSockets = _getRoomSockets(pad.id);
if (roomSockets.length === 0) return;
@@ -784,13 +817,13 @@ const handleClientReady = async (socket, message) => {
authorColorId = null;
}
await Promise.all([
- authorName && authorManager.setAuthorName(sessionInfo.author, authorName),
- authorColorId && authorManager.setAuthorColorId(sessionInfo.author, authorColorId),
+ authorName && setAuthorName(sessionInfo.author, authorName),
+ authorColorId && setAuthorColorId(sessionInfo.author, authorColorId),
]);
- ({colorId: authorColorId, name: authorName} = await authorManager.getAuthor(sessionInfo.author));
+ ({colorId: authorColorId, name: authorName} = await getAuthor(sessionInfo.author));
// load the pad-object from the database
- const pad = await padManager.getPad(sessionInfo.padId, null, sessionInfo.author);
+ const pad = await createCollection.getPad(sessionInfo.padId, null, sessionInfo.author);
// these db requests all need the pad object (timestamp of latest revision, author data)
const authors = pad.getAllAuthors();
@@ -801,7 +834,7 @@ const handleClientReady = async (socket, message) => {
// get all author data out of the database (in parallel)
const historicalAuthorData = {};
await Promise.all(authors.map(async (authorId) => {
- const author = await authorManager.getAuthor(authorId);
+ const author = await getAuthor(authorId);
if (!author) {
messageLogger.error(`There is no author for authorId: ${authorId}. ` +
'This is possibly related to https://github.com/ether/etherpad-lite/issues/2802');
@@ -825,18 +858,18 @@ const handleClientReady = async (socket, message) => {
const sinfo = sessioninfos[otherSocket.id];
if (sinfo && sinfo.author === sessionInfo.author) {
// fix user's counter, works on page refresh or if user closes browser window and then rejoins
- sessioninfos[otherSocket.id] = {};
+ sessioninfos[otherSocket.id] = undefined
otherSocket.leave(sessionInfo.padId);
otherSocket.json.send({disconnect: 'userdup'});
}
}
- const {session: {user} = {}} = socket.client.request;
+ const {session: {user} = {}}:SessionSocketModel = socket.client.request;
/* eslint-disable prefer-template -- it doesn't support breaking across multiple lines */
accessLogger.info(`[${pad.head > 0 ? 'ENTER' : 'CREATE'}]` +
` pad:${sessionInfo.padId}` +
` socket:${socket.id}` +
- ` IP:${settings.disableIPlogging ? 'ANONYMOUS' : socket.request.ip}` +
+ ` IP:${disableIPlogging ? 'ANONYMOUS' : socket.request.ip}` +
` authorID:${sessionInfo.author}` +
(user && user.username ? ` username:${user.username}` : ''));
/* eslint-enable prefer-template */
@@ -922,13 +955,13 @@ const handleClientReady = async (socket, message) => {
// Warning: never ever send sessionInfo.padId to the client. If the client is read only you
// would open a security hole 1 swedish mile wide...
const clientVars = {
- skinName: settings.skinName,
- skinVariants: settings.skinVariants,
- randomVersionString: settings.randomVersionString,
+ skinName: skinName,
+ skinVariants: skinVariants,
+ randomVersionString: randomVersionString,
accountPrivs: {
maxRevisions: 100,
},
- automaticReconnectionTimeout: settings.automaticReconnectionTimeout,
+ automaticReconnectionTimeout: automaticReconnectionTimeout,
initialRevisionList: [],
initialOptions: {},
savedRevisions: pad.getSavedRevisions(),
@@ -941,12 +974,12 @@ const handleClientReady = async (socket, message) => {
rev: pad.getHeadRevisionNumber(),
time: currentTime,
},
- colorPalette: authorManager.getColorPalette(),
+ colorPalette: getColorPalette(),
clientIp: '127.0.0.1',
userColor: authorColorId,
padId: sessionInfo.auth.padID,
- padOptions: settings.padOptions,
- padShortcutEnabled: settings.padShortcutEnabled,
+ padOptions: padOptions,
+ padShortcutEnabled: padShortcutEnabled,
initialTitle: `Pad: ${sessionInfo.auth.padID}`,
opts: {},
// tell the client the number of the latest chat-message, which will be
@@ -956,29 +989,30 @@ const handleClientReady = async (socket, message) => {
readOnlyId: sessionInfo.readOnlyPadId,
readonly: sessionInfo.readonly,
serverTimestamp: Date.now(),
- sessionRefreshInterval: settings.cookie.sessionRefreshInterval,
+ sessionRefreshInterval: cookie.sessionRefreshInterval,
userId: sessionInfo.author,
- abiwordAvailable: settings.abiwordAvailable(),
- sofficeAvailable: settings.sofficeAvailable(),
- exportAvailable: settings.exportAvailable(),
+ abiwordAvailable: abiwordAvailable(),
+ sofficeAvailable: sofficeAvailable(),
+ exportAvailable: exportAvailable(),
plugins: {
plugins: plugins.plugins,
parts: plugins.parts,
},
- indentationOnNewLine: settings.indentationOnNewLine,
+ indentationOnNewLine: indentationOnNewLine,
scrollWhenFocusLineIsOutOfViewport: {
percentage: {
editionAboveViewport:
- settings.scrollWhenFocusLineIsOutOfViewport.percentage.editionAboveViewport,
+ scrollWhenFocusLineIsOutOfViewport.percentage.editionAboveViewport,
editionBelowViewport:
- settings.scrollWhenFocusLineIsOutOfViewport.percentage.editionBelowViewport,
+ scrollWhenFocusLineIsOutOfViewport.percentage.editionBelowViewport,
},
- duration: settings.scrollWhenFocusLineIsOutOfViewport.duration,
+ duration: scrollWhenFocusLineIsOutOfViewport.duration,
scrollWhenCaretIsInTheLastLineOfViewport:
- settings.scrollWhenFocusLineIsOutOfViewport.scrollWhenCaretIsInTheLastLineOfViewport,
+ scrollWhenFocusLineIsOutOfViewport.scrollWhenCaretIsInTheLastLineOfViewport,
percentageToScrollWhenUserPressesArrowUp:
- settings.scrollWhenFocusLineIsOutOfViewport.percentageToScrollWhenUserPressesArrowUp,
+ scrollWhenFocusLineIsOutOfViewport.percentageToScrollWhenUserPressesArrowUp,
},
+ userName: undefined,
initialChangesets: [], // FIXME: REMOVE THIS SHIT
};
@@ -1034,7 +1068,7 @@ const handleClientReady = async (socket, message) => {
if (authorId == null) return;
// reuse previously created cache of author's data
- const authorInfo = historicalAuthorData[authorId] || await authorManager.getAuthor(authorId);
+ const authorInfo = historicalAuthorData[authorId] || await getAuthor(authorId);
if (authorInfo == null) {
messageLogger.error(
`Author ${authorId} connected via socket.io session ${roomSocket.id} is missing from ` +
@@ -1079,7 +1113,7 @@ const handleChangesetRequest = async (socket, {data: {granularity, start, reques
if (requestID == null) throw new Error('mising requestID');
const end = start + (100 * granularity);
const {padId, author: authorId} = sessioninfos[socket.id];
- const pad = await padManager.getPad(padId, null, authorId);
+ const pad = await createCollection.getPad(padId, null, authorId);
const data = await getChangesetInfo(pad, start, end, granularity);
data.requestID = requestID;
socket.json.send({type: 'CHANGESET_REQ', data});
@@ -1089,7 +1123,7 @@ const handleChangesetRequest = async (socket, {data: {granularity, start, reques
* Tries to rebuild the getChangestInfo function of the original Etherpad
* https://github.com/ether/pad/blob/master/etherpad/src/etherpad/control/pad/pad_changeset_control.js#L144
*/
-const getChangesetInfo = async (pad, startNum, endNum, granularity) => {
+const getChangesetInfo = async (pad: Pad, startNum: number, endNum: number, granularity: number) => {
const headRevision = pad.getHeadRevisionNumber();
// calculate the last full endnum
@@ -1120,8 +1154,7 @@ const getChangesetInfo = async (pad, startNum, endNum, granularity) => {
getPadLines(pad, startNum - 1),
// Get all needed composite Changesets.
...compositesChangesetNeeded.map(async (item) => {
- const changeset = await composePadChangesets(pad, item.start, item.end);
- composedChangesets[`${item.start}/${item.end}`] = changeset;
+ composedChangesets[`${item.start}/${item.end}`] = await composePadChangesets(pad, item.start, item.end);
}),
// Get all needed revision Dates.
...revTimesNeeded.map(async (revNum) => {
@@ -1159,7 +1192,9 @@ const getChangesetInfo = async (pad, startNum, endNum, granularity) => {
return {forwardsChangesets, backwardsChangesets,
apool: apool.toJsonable(), actualEndNum: endNum,
- timeDeltas, start: startNum, granularity};
+ timeDeltas, start: startNum, granularity, requestID: undefined
+
+ };
};
/**
@@ -1238,21 +1273,21 @@ const _getRoomSockets = (padID) => {
/**
* Get the number of users in a pad
*/
-exports.padUsersCount = (padID) => ({
+export const padUsersCount = (padID) => ({
padUsersCount: _getRoomSockets(padID).length,
});
/**
* Get the list of users in a pad
*/
-exports.padUsers = async (padID) => {
+export const padUsers = async (padID) => {
const padUsers = [];
// iterate over all clients (in parallel)
await Promise.all(_getRoomSockets(padID).map(async (roomSocket) => {
const s = sessioninfos[roomSocket.id];
if (s) {
- const author = await authorManager.getAuthor(s.author);
+ const author = await getAuthor(s.author);
// Fixes: https://github.com/ether/etherpad-lite/issues/4120
// On restart author might not be populated?
if (author) {
@@ -1263,6 +1298,4 @@ exports.padUsers = async (padID) => {
}));
return {padUsers};
-};
-
-exports.sessioninfos = sessioninfos;
+}
diff --git a/src/node/handler/SocketIORouter.js b/src/node/handler/SocketIORouter.ts
similarity index 87%
rename from src/node/handler/SocketIORouter.js
rename to src/node/handler/SocketIORouter.ts
index 863401aceb4..73594bfb095 100644
--- a/src/node/handler/SocketIORouter.js
+++ b/src/node/handler/SocketIORouter.ts
@@ -20,9 +20,10 @@
* limitations under the License.
*/
-const log4js = require('log4js');
-const settings = require('../utils/Settings');
-const stats = require('../stats');
+import log4js from 'log4js';
+import {disableIPlogging} from "../utils/Settings";
+
+import {createCollection} from '../stats';
const logger = log4js.getLogger('socket.io');
@@ -53,7 +54,7 @@ exports.setSocketIO = (_io) => {
io = _io;
io.sockets.on('connection', (socket) => {
- const ip = settings.disableIPlogging ? 'ANONYMOUS' : socket.request.ip;
+ const ip = disableIPlogging ? 'ANONYMOUS' : socket.request.ip;
logger.debug(`${socket.id} connected from IP ${ip}`);
// wrap the original send function to log the messages
@@ -68,14 +69,14 @@ exports.setSocketIO = (_io) => {
components[i].handleConnect(socket);
}
- socket.on('message', (message, ack = () => {}) => (async () => {
+ socket.on('message', (message, ack = (p: { name: any; message: any }) => {}) => (async () => {
if (!message.component || !components[message.component]) {
throw new Error(`unknown message component: ${message.component}`);
}
logger.debug(`from ${socket.id}:`, message);
return await components[message.component].handleMessage(socket, message);
})().then(
- (val) => ack(null, val),
+ (val) => ack({name: val.name, message: val.message}),
(err) => {
logger.error(
`Error handling ${message.component} message from ${socket.id}: ${err.stack || err}`);
@@ -88,7 +89,7 @@ exports.setSocketIO = (_io) => {
// when the last user disconnected. If your activePads is 0 and totalUsers is 0
// you can say, if there has been no active pads or active users for 10 minutes
// this instance can be brought out of a scaling cluster.
- stats.gauge('lastDisconnect', () => Date.now());
+ createCollection.gauge('lastDisconnect', () => Date.now());
// tell all components about this disconnect
for (const i of Object.keys(components)) {
components[i].handleDisconnect(socket);
diff --git a/src/node/hooks/express/admin.js b/src/node/hooks/express/admin.js
deleted file mode 100644
index 7636983327b..00000000000
--- a/src/node/hooks/express/admin.js
+++ /dev/null
@@ -1,10 +0,0 @@
-'use strict';
-const eejs = require('../../eejs');
-
-exports.expressCreateServer = (hookName, args, cb) => {
- args.app.get('/admin', (req, res) => {
- if ('/' !== req.path[req.path.length - 1]) return res.redirect('./admin/');
- res.send(eejs.require('ep_etherpad-lite/templates/admin/index.html', {req}));
- });
- return cb();
-};
diff --git a/src/node/hooks/express/admin.ts b/src/node/hooks/express/admin.ts
new file mode 100644
index 00000000000..d55f49ea572
--- /dev/null
+++ b/src/node/hooks/express/admin.ts
@@ -0,0 +1,10 @@
+'use strict';
+import {required} from '../../eejs';
+
+export const expressCreateServer = (hookName:string, args, cb) => {
+ args.app.get('/admin', (req, res) => {
+ if ('/' !== req.path[req.path.length - 1]) return res.redirect('./admin/');
+ res.send(required('ep_etherpad-lite/templates/admin/index.html', {req}));
+ });
+ return cb();
+};
diff --git a/src/node/hooks/express/adminplugins.js b/src/node/hooks/express/adminplugins.ts
similarity index 81%
rename from src/node/hooks/express/adminplugins.js
rename to src/node/hooks/express/adminplugins.ts
index 543f04c0fb9..02a9b1939de 100644
--- a/src/node/hooks/express/adminplugins.js
+++ b/src/node/hooks/express/adminplugins.ts
@@ -1,16 +1,21 @@
'use strict';
-const eejs = require('../../eejs');
-const settings = require('../../utils/Settings');
-const installer = require('../../../static/js/pluginfw/installer');
-const pluginDefs = require('../../../static/js/pluginfw/plugin_defs');
-const plugins = require('../../../static/js/pluginfw/plugins');
-const semver = require('semver');
-const UpdateCheck = require('../../utils/UpdateCheck');
-
-exports.expressCreateServer = (hookName, args, cb) => {
+import {required} from '../../eejs';
+import {getEpVersion, getGitCommit} from "../../utils/Settings";
+
+import installer from "../../../static/js/pluginfw/installer";
+
+import pluginDefs from "../../../static/js/pluginfw/plugin_defs";
+
+import plugins from "../../../static/js/pluginfw/plugins";
+
+import semver from "semver";
+
+import UpdateCheck from "../../utils/UpdateCheck";
+
+export const expressCreateServer = (hookName, args, cb) => {
args.app.get('/admin/plugins', (req, res) => {
- res.send(eejs.require('ep_etherpad-lite/templates/admin/plugins.html', {
+ res.send(required('ep_etherpad-lite/templates/admin/plugins.html', {
plugins: pluginDefs.plugins,
req,
errors: [],
@@ -18,10 +23,10 @@ exports.expressCreateServer = (hookName, args, cb) => {
});
args.app.get('/admin/plugins/info', (req, res) => {
- const gitCommit = settings.getGitCommit();
- const epVersion = settings.getEpVersion();
+ const gitCommit = getGitCommit();
+ const epVersion = getEpVersion();
- res.send(eejs.require('ep_etherpad-lite/templates/admin/plugins-info.html', {
+ res.send(required('ep_etherpad-lite/templates/admin/plugins-info.html', {
gitCommit,
epVersion,
installedPlugins: `${plugins.formatPlugins().replace(/, /g, '\n')} `,
@@ -36,10 +41,10 @@ exports.expressCreateServer = (hookName, args, cb) => {
return cb();
};
-exports.socketio = (hookName, args, cb) => {
+export const socketio = (hookName, args, cb) => {
const io = args.io.of('/pluginfw/installer');
io.on('connection', (socket) => {
- const {session: {user: {is_admin: isAdmin} = {}} = {}} = socket.conn.request;
+ const {session: {user: {is_admin: isAdmin} = {}} = {}}:SessionSocketModel = socket.conn.request;
if (!isAdmin) return;
socket.on('getInstalled', (query) => {
diff --git a/src/node/hooks/express/adminsettings.js b/src/node/hooks/express/adminsettings.ts
similarity index 55%
rename from src/node/hooks/express/adminsettings.js
rename to src/node/hooks/express/adminsettings.ts
index 792801dc72e..b55f2d05d3a 100644
--- a/src/node/hooks/express/adminsettings.js
+++ b/src/node/hooks/express/adminsettings.ts
@@ -1,14 +1,18 @@
'use strict';
-const eejs = require('../../eejs');
-const fsp = require('fs').promises;
-const hooks = require('../../../static/js/pluginfw/hooks');
-const plugins = require('../../../static/js/pluginfw/plugins');
-const settings = require('../../utils/Settings');
+import {required} from '../../eejs';
+import {promises as fsp} from "fs";
+
+import hooks from "../../../static/js/pluginfw/hooks";
+
+import plugins from "../../../static/js/pluginfw/plugins";
+
+import {reloadSettings, settingsFilename, showSettingsInAdminPage} from "../../utils/Settings";
+import * as settings from "../../utils/Settings";
exports.expressCreateServer = (hookName, {app}) => {
app.get('/admin/settings', (req, res) => {
- res.send(eejs.require('ep_etherpad-lite/templates/admin/settings.html', {
+ res.send(required('ep_etherpad-lite/templates/admin/settings.html', {
req,
settings: '',
errors: [],
@@ -18,18 +22,20 @@ exports.expressCreateServer = (hookName, {app}) => {
exports.socketio = (hookName, {io}) => {
io.of('/settings').on('connection', (socket) => {
- const {session: {user: {is_admin: isAdmin} = {}} = {}} = socket.conn.request;
+ const {session: {user: {is_admin: isAdmin} = {}} = {}}:SessionSocketModel = socket.conn.request;
if (!isAdmin) return;
socket.on('load', async (query) => {
let data;
try {
- data = await fsp.readFile(settings.settingsFilename, 'utf8');
+ data = await fsp.readFile(settingsFilename, 'utf8');
} catch (err) {
return console.log(err);
}
// if showSettingsInAdminPage is set to false, then return NOT_ALLOWED in the result
- if (settings.showSettingsInAdminPage === false) {
+ //FIXME Is this intentional to never change
+ // @ts-ignore
+ if (showSettingsInAdminPage === false) {
socket.emit('settings', {results: 'NOT_ALLOWED'});
} else {
socket.emit('settings', {results: data});
@@ -37,15 +43,15 @@ exports.socketio = (hookName, {io}) => {
});
socket.on('saveSettings', async (newSettings) => {
- await fsp.writeFile(settings.settingsFilename, newSettings);
+ await fsp.writeFile(settingsFilename, newSettings);
socket.emit('saveprogress', 'saved');
});
socket.on('restartServer', async () => {
console.log('Admin request to restart server through a socket on /admin/settings');
- settings.reloadSettings();
+ reloadSettings();
await plugins.update();
- await hooks.aCallAll('loadSettings', {settings});
+ await hooks.aCallAll('loadSettings', {});
await hooks.aCallAll('restartServer');
});
});
diff --git a/src/node/hooks/express/apicalls.js b/src/node/hooks/express/apicalls.ts
similarity index 80%
rename from src/node/hooks/express/apicalls.js
rename to src/node/hooks/express/apicalls.ts
index 010ab14e520..0c84864491a 100644
--- a/src/node/hooks/express/apicalls.js
+++ b/src/node/hooks/express/apicalls.ts
@@ -1,12 +1,15 @@
'use strict';
-const log4js = require('log4js');
-const clientLogger = log4js.getLogger('client');
-const {Formidable} = require('formidable');
-const apiHandler = require('../../handler/APIHandler');
-const util = require('util');
+import log4js from "log4js";
+
+import {Formidable} from "formidable";
+
+import {latestApiVersion} from "../../handler/APIHandler";
-exports.expressPreSession = async (hookName, {app}) => {
+import util from "util";
+
+const clientLogger = log4js.getLogger('client');
+export const expressPreSession = async (hookName, {app}) => {
// The Etherpad client side sends information about how a disconnect happened
app.post('/ep/pad/connection-diagnostic-info', (req, res) => {
new Formidable().parse(req, (err, fields, files) => {
@@ -26,7 +29,7 @@ exports.expressPreSession = async (hookName, {app}) => {
// The Etherpad client side sends information about client side javscript errors
app.post('/jserror', (req, res, next) => {
(async () => {
- const data = JSON.parse(await parseJserrorForm(req));
+ const data = JSON.parse(await parseJserrorForm(req));
clientLogger.warn(`${data.msg} --`, {
[util.inspect.custom]: (depth, options) => {
// Depth is forced to infinity to ensure that all of the provided data is logged.
@@ -40,6 +43,6 @@ exports.expressPreSession = async (hookName, {app}) => {
// Provide a possibility to query the latest available API version
app.get('/api', (req, res) => {
- res.json({currentVersion: apiHandler.latestApiVersion});
+ res.json({currentVersion: latestApiVersion});
});
};
diff --git a/src/node/hooks/express/errorhandling.js b/src/node/hooks/express/errorhandling.ts
similarity index 83%
rename from src/node/hooks/express/errorhandling.js
rename to src/node/hooks/express/errorhandling.ts
index 884ca9be0b6..0252a6dcb32 100644
--- a/src/node/hooks/express/errorhandling.js
+++ b/src/node/hooks/express/errorhandling.ts
@@ -1,6 +1,6 @@
'use strict';
-const stats = require('../../stats');
+import {createCollection} from '../../stats';
exports.expressCreateServer = (hook_name, args, cb) => {
exports.app = args.app;
@@ -12,7 +12,7 @@ exports.expressCreateServer = (hook_name, args, cb) => {
// allowing you to respond however you like
res.status(500).send({error: 'Sorry, something bad happened!'});
console.error(err.stack ? err.stack : err.toString());
- stats.meter('http500').mark();
+ createCollection.meter('http500').mark();
});
return cb();
diff --git a/src/node/hooks/express/importexport.js b/src/node/hooks/express/importexport.ts
similarity index 67%
rename from src/node/hooks/express/importexport.js
rename to src/node/hooks/express/importexport.ts
index 96f0efab484..5df1955993c 100644
--- a/src/node/hooks/express/importexport.js
+++ b/src/node/hooks/express/importexport.ts
@@ -1,23 +1,23 @@
'use strict';
-const hasPadAccess = require('../../padaccess');
-const settings = require('../../utils/Settings');
-const exportHandler = require('../../handler/ExportHandler');
-const importHandler = require('../../handler/ImportHandler');
-const padManager = require('../../db/PadManager');
-const readOnlyManager = require('../../db/ReadOnlyManager');
-const rateLimit = require('express-rate-limit');
-const securityManager = require('../../db/SecurityManager');
-const webaccess = require('./webaccess');
+import hasPadAccess from '../../padaccess';
+import {exportAvailable, importExportRateLimiting} from '../../utils/Settings';
+import {doExport} from '../../handler/ExportHandler';
+import {doImport2} from '../../handler/ImportHandler';
+import {doesPadExist} from '../../db/PadManager';
+import {getPadId, isReadOnlyId} from '../../db/ReadOnlyManager';
+import rateLimit from 'express-rate-limit';
+import {checkAccess} from '../../db/SecurityManager';
+import webaccess from './webaccess';
exports.expressCreateServer = (hookName, args, cb) => {
- settings.importExportRateLimiting.onLimitReached = (req, res, options) => {
+ importExportRateLimiting.onLimitReached = (req, res, options) => {
// when the rate limiter triggers, write a warning in the logs
console.warn('Import/Export rate limiter triggered on ' +
`"${req.originalUrl}" for IP address ${req.ip}`);
};
// The rate limiter is created in this hook so that restarting the server resets the limiter.
- const limiter = rateLimit(settings.importExportRateLimiting);
+ const limiter = rateLimit(importExportRateLimiting);
// handle export requests
args.app.use('/p/:pad/:rev?/export/:type', limiter);
@@ -30,7 +30,7 @@ exports.expressCreateServer = (hookName, args, cb) => {
}
// if abiword is disabled, and this is a format we only support with abiword, output a message
- if (settings.exportAvailable() === 'no' &&
+ if (exportAvailable() === 'no' &&
['odt', 'pdf', 'doc'].indexOf(req.params.type) !== -1) {
console.error(`Impossible to export pad "${req.params.pad}" in ${req.params.type} format.` +
' There is no converter configured');
@@ -48,19 +48,19 @@ exports.expressCreateServer = (hookName, args, cb) => {
let padId = req.params.pad;
let readOnlyId = null;
- if (readOnlyManager.isReadOnlyId(padId)) {
+ if (isReadOnlyId(padId)) {
readOnlyId = padId;
- padId = await readOnlyManager.getPadId(readOnlyId);
+ padId = await getPadId(readOnlyId);
}
- const exists = await padManager.doesPadExists(padId);
+ const exists = await doesPadExist(padId);
if (!exists) {
console.warn(`Someone tried to export a pad that doesn't exist (${padId})`);
return next();
}
console.log(`Exporting pad "${req.params.pad}" in ${req.params.type} format`);
- await exportHandler.doExport(req, res, padId, readOnlyId, req.params.type);
+ await doExport(req, res, padId, readOnlyId, req.params.type);
}
})().catch((err) => next(err || new Error(err)));
});
@@ -69,13 +69,13 @@ exports.expressCreateServer = (hookName, args, cb) => {
args.app.use('/p/:pad/import', limiter);
args.app.post('/p/:pad/import', (req, res, next) => {
(async () => {
- const {session: {user} = {}} = req;
- const {accessStatus, authorID: authorId} = await securityManager.checkAccess(
+ const {session: {user} = {}}:SessionSocketModel = req;
+ const {accessStatus, authorID: authorId} = await checkAccess(
req.params.pad, req.cookies.sessionID, req.cookies.token, user);
if (accessStatus !== 'grant' || !webaccess.userCanModify(req.params.pad, req)) {
return res.status(403).send('Forbidden');
}
- await importHandler.doImport(req, res, req.params.pad, authorId);
+ await doImport2(req, res, req.params.pad, authorId);
})().catch((err) => next(err || new Error(err)));
});
diff --git a/src/node/hooks/express/openapi.js b/src/node/hooks/express/openapi.ts
similarity index 98%
rename from src/node/hooks/express/openapi.js
rename to src/node/hooks/express/openapi.ts
index 0531854aa5b..4dde98e8fe1 100644
--- a/src/node/hooks/express/openapi.js
+++ b/src/node/hooks/express/openapi.ts
@@ -1,5 +1,8 @@
'use strict';
+import {ResponseSpec} from "../../models/ResponseSpec";
+import {APIResource} from "../../models/APIResource";
+
/**
* node/hooks/express/openapi.js
*
@@ -54,7 +57,7 @@ const APIPathStyle = {
};
// API resources - describe your API endpoints here
-const resources = {
+const resources: APIResource = {
// Group
group: {
create: {
@@ -375,7 +378,8 @@ const defaultResponses = {
const defaultResponseRefs = {
200: {
- $ref: '#/components/responses/Success',
+ $ref: '#/components/responses/Success', content: undefined
+
},
400: {
$ref: '#/components/responses/ApiError',
@@ -491,7 +495,11 @@ const generateDefinitionForVersion = (version, style = APIPathStyle.FLAT) => {
// build operations
for (const funcName of Object.keys(apiHandler.version[version])) {
- let operation = {};
+ let operation: ResponseSpec = {
+ parameters: undefined,
+ _restPath: "",
+ operationId: undefined
+ };
if (operations[funcName]) {
operation = {...operations[funcName]};
} else {
diff --git a/src/node/models/APIResource.ts b/src/node/models/APIResource.ts
new file mode 100644
index 00000000000..862e15aec5d
--- /dev/null
+++ b/src/node/models/APIResource.ts
@@ -0,0 +1,48 @@
+import {ResponseSpec} from "./ResponseSpec";
+
+export type APIResource = {
+ group:{
+ create:ResponseSpec,
+ createIfNotExistsFor: ResponseSpec,
+ delete: ResponseSpec,
+ listPads: ResponseSpec,
+ createPad: ResponseSpec,
+ listSessions: ResponseSpec,
+ list: ResponseSpec,
+ },
+ author: {
+ create: ResponseSpec,
+ createIfNotExistsFor: ResponseSpec,
+ listPads: ResponseSpec,
+ listSessions: ResponseSpec,
+ getName: ResponseSpec,
+ },
+ session:{
+ create: ResponseSpec,
+ delete: ResponseSpec,
+ info: ResponseSpec,
+ },
+ pad:{
+ listAll: ResponseSpec,
+ createDiffHTML: ResponseSpec,
+ create: ResponseSpec,
+ getText: ResponseSpec,
+ setText: ResponseSpec,
+ getHTML: ResponseSpec,
+ setHTML: ResponseSpec,
+ getRevisionsCount: ResponseSpec,
+ getLastEdited: ResponseSpec,
+ delete: ResponseSpec,
+ getReadOnlyID: ResponseSpec,
+ setPublicStatus: ResponseSpec,
+ getPublicStatus: ResponseSpec,
+ authors: ResponseSpec,
+ usersCount: ResponseSpec,
+ users: ResponseSpec,
+ sendClientsMessage: ResponseSpec,
+ checkToken: ResponseSpec,
+ getChatHistory: ResponseSpec,
+ getChatHead: ResponseSpec,
+ appendChatMessage: ResponseSpec,
+ }
+}
diff --git a/src/node/models/ErrorCaused.ts b/src/node/models/ErrorCaused.ts
new file mode 100644
index 00000000000..1b821bc9d68
--- /dev/null
+++ b/src/node/models/ErrorCaused.ts
@@ -0,0 +1,14 @@
+import ts from "typescript/lib/tsserverlibrary";
+
+export class ErrorCaused extends Error{
+ cause: Error;
+ constructor(message: string, cause: Error) {
+ super(message);
+ this.cause = cause;
+ this.name = "ErrorCaused";
+ }
+}
+
+type ErrorCause = {
+
+}
diff --git a/src/node/models/Plugin.ts b/src/node/models/Plugin.ts
new file mode 100644
index 00000000000..08abf0d6918
--- /dev/null
+++ b/src/node/models/Plugin.ts
@@ -0,0 +1,6 @@
+export type Plugin = {
+ package: {
+ name: string,
+ version: string
+ }
+}
diff --git a/src/node/models/ResponseSpec.ts b/src/node/models/ResponseSpec.ts
new file mode 100644
index 00000000000..db32008af14
--- /dev/null
+++ b/src/node/models/ResponseSpec.ts
@@ -0,0 +1,43 @@
+export type ResponseSpec = {
+ parameters?: ParameterSpec[],
+ _restPath?: string,
+ operationId?: string,
+ responses?: any
+ description?: string,
+ summary?: string,
+ responseSchema?:{
+ groupID?: APIResponseSpecType
+ groupIDs?: APIResponseSpecType
+ padIDs?: APIResponseSpecType,
+ sessions?: APIResponseSpecType,
+ authorID?: APIResponseSpecType,
+ info?: APIResponseSpecType,
+ sessionID?: APIResponseSpecType,
+ text?: APIResponseSpecType,
+ html?: APIResponseSpecType,
+ revisions?: APIResponseSpecType,
+ lastEdited?: APIResponseSpecType,
+ readOnlyID?: APIResponseSpecType,
+ publicStatus?: APIResponseSpecType,
+ authorIDs?: APIResponseSpecType,
+ padUsersCount?: APIResponseSpecType,
+ padUsers?: APIResponseSpecType,
+ messages?: APIResponseSpecType,
+ chatHead?: APIResponseSpecType,
+ }
+}
+
+
+export type APIResponseSpecType = {
+ type?:string,
+ items?: {
+ type?:string,
+ $ref?:string
+ },
+ $ref?:string
+}
+
+
+export type ParameterSpec = {
+ $ref?: string,
+}
diff --git a/src/node/models/Revision.ts b/src/node/models/Revision.ts
new file mode 100644
index 00000000000..a57be4e0fcb
--- /dev/null
+++ b/src/node/models/Revision.ts
@@ -0,0 +1,7 @@
+export type Revision = {
+ revNum: number,
+ savedById: string,
+ label: string,
+ timestamp: number,
+ id: string,
+}
diff --git a/src/node/models/SessionInfo.ts b/src/node/models/SessionInfo.ts
new file mode 100644
index 00000000000..520b21a2678
--- /dev/null
+++ b/src/node/models/SessionInfo.ts
@@ -0,0 +1,10 @@
+export type SessionInfo = {
+ [key: string]:{
+ time: any;
+ rev: number;
+ readOnlyPadId: any;
+ auth: { padID: any; sessionID: any; token: any };
+ readonly: boolean;
+ padId: string,
+ author: string
+ }}
diff --git a/src/node/models/SessionModel.ts b/src/node/models/SessionModel.ts
new file mode 100644
index 00000000000..2b2d5e80acb
--- /dev/null
+++ b/src/node/models/SessionModel.ts
@@ -0,0 +1,5 @@
+export type SessionModel = {
+ cookie: {
+ expires?: string
+ }
+}
diff --git a/src/node/models/SessionSocketModel.ts b/src/node/models/SessionSocketModel.ts
new file mode 100644
index 00000000000..d2713d11dc7
--- /dev/null
+++ b/src/node/models/SessionSocketModel.ts
@@ -0,0 +1,8 @@
+type SessionSocketModel = {
+ session:{
+ user?: {
+ username?: string,
+ is_admin?: boolean
+ }
+ }
+}
diff --git a/src/node/padaccess.js b/src/node/padaccess.ts
similarity index 62%
rename from src/node/padaccess.js
rename to src/node/padaccess.ts
index e9cc7cde5ec..a18bd83eda3 100644
--- a/src/node/padaccess.js
+++ b/src/node/padaccess.ts
@@ -1,10 +1,10 @@
'use strict';
-const securityManager = require('./db/SecurityManager');
+import {checkAccess} from './db/SecurityManager';
// checks for padAccess
-module.exports = async (req, res) => {
- const {session: {user} = {}} = req;
- const accessObj = await securityManager.checkAccess(
+export default async (req, res) => {
+ const {session: {user} = {}}:SessionSocketModel = req;
+ const accessObj = await checkAccess(
req.params.pad, req.cookies.sessionID, req.cookies.token, user);
if (accessObj.accessStatus === 'grant') {
diff --git a/src/node/server.js b/src/node/server.ts
old mode 100755
new mode 100644
similarity index 80%
rename from src/node/server.js
rename to src/node/server.ts
index 6a494fe1730..cc23c7b358a
--- a/src/node/server.js
+++ b/src/node/server.ts
@@ -24,10 +24,16 @@
* limitations under the License.
*/
-const log4js = require('log4js');
-log4js.replaceConsole();
-
-const settings = require('./utils/Settings');
+import log4js from 'log4js';
+import * as settings from "./utils/Settings";
+/*
+ * early check for version compatibility before calling
+ * any modules that require newer versions of NodeJS
+ */
+import {checkDeprecationStatus, enforceMinNodeVersion} from './utils/NodeVersion'
+import {Gate} from './utils/promises';
+import * as UpdateCheck from "./utils/UpdateCheck";
+import {Plugin} from "./models/Plugin";
let wtfnode;
if (settings.dumpOnUncleanExit) {
@@ -36,24 +42,20 @@ if (settings.dumpOnUncleanExit) {
wtfnode = require('wtfnode');
}
-/*
- * early check for version compatibility before calling
- * any modules that require newer versions of NodeJS
- */
-const NodeVersion = require('./utils/NodeVersion');
-NodeVersion.enforceMinNodeVersion('12.17.0');
-NodeVersion.checkDeprecationStatus('12.17.0', '1.9.0');
+enforceMinNodeVersion('12.17.0');
+checkDeprecationStatus('12.17.0', '1.9.0');
-const UpdateCheck = require('./utils/UpdateCheck');
-const db = require('./db/DB');
-const express = require('./hooks/express');
-const hooks = require('../static/js/pluginfw/hooks');
-const pluginDefs = require('../static/js/pluginfw/plugin_defs');
-const plugins = require('../static/js/pluginfw/plugins');
-const {Gate} = require('./utils/promises');
-const stats = require('./stats');
+import db = require('./db/DB');
+import {} from './db/DB'
+import express = require('./hooks/express');
+import hooks = require('../static/js/pluginfw/hooks');
+import pluginDefs = require('../static/js/pluginfw/plugin_defs');
+import plugins = require('../static/js/pluginfw/plugins');
+import stats = require('./stats');
+import {createCollection} from "./stats";
const logger = log4js.getLogger('server');
+console.log = logger.info.bind(logger); // do the same for others - console.debug, etc.
const State = {
INITIAL: 1,
@@ -70,20 +72,20 @@ let state = State.INITIAL;
const removeSignalListener = (signal, listener) => {
logger.debug(`Removing ${signal} listener because it might interfere with shutdown tasks. ` +
- `Function code:\n${listener.toString()}\n` +
- `Current stack:\n${(new Error()).stack.split('\n').slice(1).join('\n')}`);
+ `Function code:\n${listener.toString()}\n` +
+ `Current stack:\n${(new Error()).stack.split('\n').slice(1).join('\n')}`);
process.off(signal, listener);
};
let startDoneGate;
-exports.start = async () => {
+export const start = async () => {
switch (state) {
case State.INITIAL:
break;
case State.STARTING:
await startDoneGate;
// Retry. Don't fall through because it might have transitioned to STATE_TRANSITION_FAILED.
- return await exports.start();
+ return await start();
case State.RUNNING:
return express.server;
case State.STOPPING:
@@ -100,16 +102,16 @@ exports.start = async () => {
state = State.STARTING;
try {
// Check if Etherpad version is up-to-date
- UpdateCheck.check();
+ UpdateCheck.default.check();
- stats.gauge('memoryUsage', () => process.memoryUsage().rss);
- stats.gauge('memoryUsageHeap', () => process.memoryUsage().heapUsed);
+ createCollection.gauge('memoryUsage', () => process.memoryUsage().rss);
+ createCollection.gauge('memoryUsageHeap', () => process.memoryUsage().heapUsed);
process.on('uncaughtException', (err) => {
logger.debug(`uncaught exception: ${err.stack || err}`);
// eslint-disable-next-line promise/no-promise-in-callback
- exports.exit(err)
+ exit(err)
.catch((err) => {
logger.error('Error in process exit', err);
// eslint-disable-next-line n/no-process-exit
@@ -118,7 +120,8 @@ exports.start = async () => {
});
// As of v14, Node.js does not exit when there is an unhandled Promise rejection. Convert an
// unhandled rejection into an uncaught exception, which does cause Node.js to exit.
- process.on('unhandledRejection', (err) => {
+ process.on('unhandledRejection', (err:Error) => {
+
logger.debug(`unhandled rejection: ${err.stack || err}`);
throw err;
});
@@ -128,10 +131,10 @@ exports.start = async () => {
// done cleaning up. See https://github.com/andywer/threads.js/pull/329 for an example of a
// problematic listener. This means that exports.exit is solely responsible for performing all
// necessary cleanup tasks.
- for (const listener of process.listeners(signal)) {
+ for (const listener of process.listeners(signal as any)) {
removeSignalListener(signal, listener);
}
- process.on(signal, exports.exit);
+ process.on(signal, exit);
// Prevent signal listeners from being added in the future.
process.on('newListener', (event, listener) => {
if (event !== signal) return;
@@ -141,7 +144,7 @@ exports.start = async () => {
await db.init();
await plugins.update();
- const installedPlugins = Object.values(pluginDefs.plugins)
+ const installedPlugins = (Object.values(pluginDefs.plugins) as Plugin[])
.filter((plugin) => plugin.package.name !== 'ep_etherpad-lite')
.map((plugin) => `${plugin.package.name}@${plugin.package.version}`)
.join(', ');
@@ -154,7 +157,7 @@ exports.start = async () => {
logger.error('Error occurred while starting Etherpad');
state = State.STATE_TRANSITION_FAILED;
startDoneGate.resolve();
- return await exports.exit(err);
+ return await exit(err);
}
logger.info('Etherpad is running');
@@ -166,12 +169,12 @@ exports.start = async () => {
};
const stopDoneGate = new Gate();
-exports.stop = async () => {
+export const stop = async () => {
switch (state) {
case State.STARTING:
- await exports.start();
+ await start();
// Don't fall through to State.RUNNING in case another caller is also waiting for startup.
- return await exports.stop();
+ return await stop();
case State.RUNNING:
break;
case State.STOPPING:
@@ -201,7 +204,7 @@ exports.stop = async () => {
logger.error('Error occurred while stopping Etherpad');
state = State.STATE_TRANSITION_FAILED;
stopDoneGate.resolve();
- return await exports.exit(err);
+ return await exit(err);
}
logger.info('Etherpad stopped');
state = State.STOPPED;
@@ -210,14 +213,14 @@ exports.stop = async () => {
let exitGate;
let exitCalled = false;
-exports.exit = async (err = null) => {
+export const exit = async (err = null) => {
/* eslint-disable no-process-exit */
if (err === 'SIGTERM') {
// Termination from SIGTERM is not treated as an abnormal termination.
logger.info('Received SIGTERM signal');
err = null;
} else if (err != null) {
- logger.error(`Metrics at time of fatal error:\n${JSON.stringify(stats.toJSON(), null, 2)}`);
+ logger.error(`Metrics at time of fatal error:\n${JSON.stringify(createCollection.toJSON(), null, 2)}`);
logger.error(err.stack || err.toString());
process.exitCode = 1;
if (exitCalled) {
@@ -231,11 +234,11 @@ exports.exit = async (err = null) => {
case State.STARTING:
case State.RUNNING:
case State.STOPPING:
- await exports.stop();
+ await stop();
// Don't fall through to State.STOPPED in case another caller is also waiting for stop().
// Don't pass err to exports.exit() because this err has already been processed. (If err is
// passed again to exit() then exit() will think that a second error occurred while exiting.)
- return await exports.exit();
+ return await exit();
case State.INITIAL:
case State.STOPPED:
case State.STATE_TRANSITION_FAILED:
@@ -257,13 +260,13 @@ exports.exit = async (err = null) => {
// on the timeout so that the timeout itself does not prevent Node.js from exiting.
setTimeout(() => {
logger.error('Something that should have been cleaned up during the shutdown hook (such as ' +
- 'a timer, worker thread, or open connection) is preventing Node.js from exiting');
+ 'a timer, worker thread, or open connection) is preventing Node.js from exiting');
if (settings.dumpOnUncleanExit) {
wtfnode.dump();
} else {
logger.error('Enable `dumpOnUncleanExit` setting to get a dump of objects preventing a ' +
- 'clean exit');
+ 'clean exit');
}
logger.error('Forcing an unclean exit...');
@@ -275,4 +278,4 @@ exports.exit = async (err = null) => {
/* eslint-enable no-process-exit */
};
-if (require.main === module) exports.start();
+if (require.main === module) start();
diff --git a/src/node/stats.js b/src/node/stats.js
deleted file mode 100644
index cecaca20d16..00000000000
--- a/src/node/stats.js
+++ /dev/null
@@ -1,9 +0,0 @@
-'use strict';
-
-const measured = require('measured-core');
-
-module.exports = measured.createCollection();
-
-module.exports.shutdown = async (hookName, context) => {
- module.exports.end();
-};
diff --git a/src/node/stats.ts b/src/node/stats.ts
new file mode 100644
index 00000000000..9d35395d55f
--- /dev/null
+++ b/src/node/stats.ts
@@ -0,0 +1,9 @@
+'use strict';
+
+import measured from 'measured-core'
+
+export const createCollection = measured.createCollection();
+
+export const shutdown = async (hookName, context) => {
+ module.exports.end();
+}
diff --git a/src/node/utils/NodeVersion.js b/src/node/utils/NodeVersion.ts
similarity index 84%
rename from src/node/utils/NodeVersion.js
rename to src/node/utils/NodeVersion.ts
index ca5412f23c6..27de68d9b01 100644
--- a/src/node/utils/NodeVersion.js
+++ b/src/node/utils/NodeVersion.ts
@@ -26,19 +26,19 @@ const semver = require('semver');
*
* @param {String} minNodeVersion Minimum required Node version
*/
-exports.enforceMinNodeVersion = (minNodeVersion) => {
+const enforceMinNodeVersion = (minNodeVersion:string) => {
const currentNodeVersion = process.version;
// we cannot use template literals, since we still do not know if we are
// running under Node >= 4.0
if (semver.lt(currentNodeVersion, minNodeVersion)) {
console.error(`Running Etherpad on Node ${currentNodeVersion} is not supported. ` +
- `Please upgrade at least to Node ${minNodeVersion}`);
+ `Please upgrade at least to Node ${minNodeVersion}`);
process.exit(1);
}
console.debug(`Running on Node ${currentNodeVersion} ` +
- `(minimum required Node version: ${minNodeVersion})`);
+ `(minimum required Node version: ${minNodeVersion})`);
};
/**
@@ -49,7 +49,7 @@ exports.enforceMinNodeVersion = (minNodeVersion) => {
* @param {Function} epRemovalVersion Etherpad version that will remove support for deprecated
* Node releases
*/
-exports.checkDeprecationStatus = (lowestNonDeprecatedNodeVersion, epRemovalVersion) => {
+const checkDeprecationStatus = (lowestNonDeprecatedNodeVersion:string, epRemovalVersion:string) => {
const currentNodeVersion = process.version;
if (semver.lt(currentNodeVersion, lowestNonDeprecatedNodeVersion)) {
@@ -58,3 +58,5 @@ exports.checkDeprecationStatus = (lowestNonDeprecatedNodeVersion, epRemovalVersi
`Please consider updating at least to Node ${lowestNonDeprecatedNodeVersion}`);
}
};
+
+export {checkDeprecationStatus, enforceMinNodeVersion}
diff --git a/src/node/utils/Settings.js b/src/node/utils/Settings.ts
similarity index 83%
rename from src/node/utils/Settings.js
rename to src/node/utils/Settings.ts
index 51f48237aa8..0d5f1e53c01 100644
--- a/src/node/utils/Settings.js
+++ b/src/node/utils/Settings.ts
@@ -29,12 +29,12 @@
const absolutePaths = require('./AbsolutePaths');
const deepEqual = require('fast-deep-equal/es6');
-const fs = require('fs');
-const os = require('os');
-const path = require('path');
+import fs from 'fs';
+import os from 'os';
+import path from 'path';
const argv = require('./Cli').argv;
-const jsonminify = require('jsonminify');
-const log4js = require('log4js');
+import jsonminify from 'jsonminify';
+import log4js from 'log4js';
const randomString = require('./randomstring');
const suppressDisableMsg = ' -- To suppress these warning messages change ' +
'suppressErrorsInPadText to true in your settings.json\n';
@@ -57,8 +57,8 @@ const initLogging = (logLevel, config) => {
// log4js.configure() modifies exports.logconfig so check for equality first.
const logConfigIsDefault = deepEqual(config, defaultLogConfig());
log4js.configure(config);
- log4js.setGlobalLogLevel(logLevel);
- log4js.replaceConsole();
+ log4js.getLogger("console");
+ console.log = logger.info.bind(logger)
// Log the warning after configuring log4js to increase the chances the user will see it.
if (!logConfigIsDefault) logger.warn('The logconfig setting is deprecated.');
};
@@ -68,16 +68,16 @@ const initLogging = (logLevel, config) => {
initLogging(defaultLogLevel, defaultLogConfig());
/* Root path of the installation */
-exports.root = absolutePaths.findEtherpadRoot();
+export const root = absolutePaths.findEtherpadRoot();
logger.info('All relative paths will be interpreted relative to the identified ' +
- `Etherpad base dir: ${exports.root}`);
-exports.settingsFilename = absolutePaths.makeAbsolute(argv.settings || 'settings.json');
-exports.credentialsFilename = absolutePaths.makeAbsolute(argv.credentials || 'credentials.json');
+ `Etherpad base dir: ${exports.root}`);
+export const settingsFilename = absolutePaths.makeAbsolute(argv.settings || 'settings.json');
+export const credentialsFilename = absolutePaths.makeAbsolute(argv.credentials || 'credentials.json');
/**
* The app title, visible e.g. in the browser window
*/
-exports.title = 'Etherpad';
+export const title = 'Etherpad';
/**
* Pathname of the favicon you want to use. If null, the skin's favicon is
@@ -85,7 +85,7 @@ exports.title = 'Etherpad';
* is used. If this is a relative path it is interpreted as relative to the
* Etherpad root directory.
*/
-exports.favicon = null;
+export const favicon = null;
/*
* Skin name.
@@ -93,37 +93,37 @@ exports.favicon = null;
* Initialized to null, so we can spot an old configuration file and invite the
* user to update it before falling back to the default.
*/
-exports.skinName = null;
+export const skinName = null;
-exports.skinVariants = 'super-light-toolbar super-light-editor light-background';
+export const skinVariants = 'super-light-toolbar super-light-editor light-background';
/**
* The IP ep-lite should listen to
*/
-exports.ip = '0.0.0.0';
+export const ip = '0.0.0.0';
/**
* The Port ep-lite should listen to
*/
-exports.port = process.env.PORT || 9001;
+export const port = process.env.PORT || 9001;
/**
* Should we suppress Error messages from being in Pad Contents
*/
-exports.suppressErrorsInPadText = false;
+export const suppressErrorsInPadText = false;
/**
* The SSL signed server key and the Certificate Authority's own certificate
* default case: ep-lite does *not* use SSL. A signed server key is not required in this case.
*/
-exports.ssl = false;
+export const ssl = false;
/**
* socket.io transport methods
**/
-exports.socketTransportProtocols = ['xhr-polling', 'jsonp-polling', 'htmlfile'];
+export const socketTransportProtocols = ['xhr-polling', 'jsonp-polling', 'htmlfile'];
-exports.socketIo = {
+export const socketIo = {
/**
* Maximum permitted client message size (in bytes).
*
@@ -138,20 +138,20 @@ exports.socketIo = {
/*
* The Type of the database
*/
-exports.dbType = 'dirty';
+export const dbType = 'dirty';
/**
* This setting is passed with dbType to ueberDB to set up the database
*/
-exports.dbSettings = {filename: path.join(exports.root, 'var/dirty.db')};
+export const dbSettings = {filename: path.join(exports.root, 'var/dirty.db')};
/**
* The default Text of a new pad
*/
-exports.defaultPadText = [
+export const defaultPadText = [
'Welcome to Etherpad!',
'',
'This pad text is synchronized as you type, so that everyone viewing this page sees the same ' +
- 'text. This allows you to collaborate seamlessly on documents!',
+ 'text. This allows you to collaborate seamlessly on documents!',
'',
'Etherpad on Github: https://github.com/ether/etherpad-lite',
].join('\n');
@@ -159,7 +159,7 @@ exports.defaultPadText = [
/**
* The default Pad Settings for a user (Can be overridden by changing the setting
*/
-exports.padOptions = {
+export const padOptions = {
noColors: false,
showControls: true,
showChat: true,
@@ -176,7 +176,7 @@ exports.padOptions = {
/**
* Whether certain shortcut keys are enabled for a user in the pad
*/
-exports.padShortcutEnabled = {
+export const padShortcutEnabled = {
altF9: true,
altC: true,
delete: true,
@@ -204,7 +204,7 @@ exports.padShortcutEnabled = {
/**
* The toolbar buttons and order.
*/
-exports.toolbar = {
+export const toolbar = {
left: [
['bold', 'italic', 'underline', 'strikethrough'],
['orderedlist', 'unorderedlist', 'indent', 'outdent'],
@@ -224,92 +224,92 @@ exports.toolbar = {
/**
* A flag that requires any user to have a valid session (via the api) before accessing a pad
*/
-exports.requireSession = false;
+export const requireSession = false;
/**
* A flag that prevents users from creating new pads
*/
-exports.editOnly = false;
+export const editOnly = false;
/**
* Max age that responses will have (affects caching layer).
*/
-exports.maxAge = 1000 * 60 * 60 * 6; // 6 hours
+export const maxAge = 1000 * 60 * 60 * 6; // 6 hours
/**
* A flag that shows if minification is enabled or not
*/
-exports.minify = true;
+export const minify = true;
/**
* The path of the abiword executable
*/
-exports.abiword = null;
+export const abiword = null;
/**
* The path of the libreoffice executable
*/
-exports.soffice = null;
+export const soffice = null;
/**
* The path of the tidy executable
*/
-exports.tidyHtml = null;
+export const tidyHtml = null;
/**
* Should we support none natively supported file types on import?
*/
-exports.allowUnknownFileEnds = true;
+export const allowUnknownFileEnds = true;
/**
* The log level of log4js
*/
-exports.loglevel = defaultLogLevel;
+export const loglevel = defaultLogLevel;
/**
* Disable IP logging
*/
-exports.disableIPlogging = false;
+export const disableIPlogging = false;
/**
* Number of seconds to automatically reconnect pad
*/
-exports.automaticReconnectionTimeout = 0;
+export const automaticReconnectionTimeout = 0;
/**
* Disable Load Testing
*/
-exports.loadTest = false;
+export const loadTest = false;
/**
* Disable dump of objects preventing a clean exit
*/
-exports.dumpOnUncleanExit = false;
+export const dumpOnUncleanExit = false;
/**
* Enable indentation on new lines
*/
-exports.indentationOnNewLine = true;
+export const indentationOnNewLine = true;
/*
* log4js appender configuration
*/
-exports.logconfig = defaultLogConfig();
+export const logconfig = defaultLogConfig();
/*
* Session Key, do not sure this.
*/
-exports.sessionKey = false;
+export const sessionKey = false;
/*
* Trust Proxy, whether or not trust the x-forwarded-for header.
*/
-exports.trustProxy = false;
+export const trustProxy = false;
/*
* Settings controlling the session cookie issued by Etherpad.
*/
-exports.cookie = {
+export const cookie = {
/*
* Value of the SameSite cookie property. "Lax" is recommended unless
* Etherpad will be embedded in an iframe from another site, in which case
@@ -331,20 +331,20 @@ exports.cookie = {
* authorization. Note: /admin always requires authentication, and
* either authorization by a module, or a user with is_admin set
*/
-exports.requireAuthentication = false;
-exports.requireAuthorization = false;
-exports.users = {};
+export const requireAuthentication = false;
+export const requireAuthorization = false;
+export const users = {};
/*
* Show settings in admin page, by default it is true
*/
-exports.showSettingsInAdminPage = true;
+export const showSettingsInAdminPage = true;
/*
* By default, when caret is moved out of viewport, it scrolls the minimum
* height needed to make this line visible.
*/
-exports.scrollWhenFocusLineIsOutOfViewport = {
+export const scrollWhenFocusLineIsOutOfViewport = {
/*
* Percentage of viewport height to be additionally scrolled.
*/
@@ -377,12 +377,12 @@ exports.scrollWhenFocusLineIsOutOfViewport = {
*
* Do not enable on production machines.
*/
-exports.exposeVersion = false;
+export const exposeVersion = false;
/*
* Override any strings found in locale directories
*/
-exports.customLocaleStrings = {};
+export const customLocaleStrings = {};
/*
* From Etherpad 1.8.3 onwards, import and export of pads is always rate
@@ -393,12 +393,13 @@ exports.customLocaleStrings = {};
*
* See https://github.com/nfriedly/express-rate-limit for more options
*/
-exports.importExportRateLimiting = {
+export const importExportRateLimiting = {
// duration of the rate limit window (milliseconds)
windowMs: 90000,
// maximum number of requests per IP to allow during the rate limit window
- max: 10,
+ max: 10, onLimitReached: undefined
+
};
/*
@@ -409,7 +410,7 @@ exports.importExportRateLimiting = {
*
* See https://github.com/animir/node-rate-limiter-flexible/wiki/Overall-example#websocket-single-connection-prevent-flooding for more options
*/
-exports.commitRateLimiting = {
+export const commitRateLimiting = {
// duration of the rate limit window (seconds)
duration: 1,
@@ -423,16 +424,16 @@ exports.commitRateLimiting = {
*
* File size is specified in bytes. Default is 50 MB.
*/
-exports.importMaxFileSize = 50 * 1024 * 1024;
+export const importMaxFileSize = 50 * 1024 * 1024;
/*
* Disable Admin UI tests
*/
-exports.enableAdminUITests = false;
+export const enableAdminUITests = false;
// checks if abiword is avaiable
-exports.abiwordAvailable = () => {
+export const abiwordAvailable = () => {
if (exports.abiword != null) {
return os.type().indexOf('Windows') !== -1 ? 'withoutPDF' : 'yes';
} else {
@@ -440,7 +441,7 @@ exports.abiwordAvailable = () => {
}
};
-exports.sofficeAvailable = () => {
+export const sofficeAvailable = () => {
if (exports.soffice != null) {
return os.type().indexOf('Windows') !== -1 ? 'withoutPDF' : 'yes';
} else {
@@ -448,9 +449,9 @@ exports.sofficeAvailable = () => {
}
};
-exports.exportAvailable = () => {
+export const exportAvailable = () => {
const abiword = exports.abiwordAvailable();
- const soffice = exports.sofficeAvailable();
+ const soffice = sofficeAvailable();
if (abiword === 'no' && soffice === 'no') {
return 'no';
@@ -463,7 +464,7 @@ exports.exportAvailable = () => {
};
// Provide git version if available
-exports.getGitCommit = () => {
+export const getGitCommit = () => {
let version = '';
try {
let rootPath = exports.root;
@@ -482,13 +483,14 @@ exports.getGitCommit = () => {
}
version = version.substring(0, 7);
} catch (e) {
- logger.warn(`Can't get git version for server header\n${e.message}`);
+ const errorCast = e as Error
+ logger.warn(`Can't get git version for server header\n${errorCast.message}`);
}
return version;
};
// Return etherpad version from package.json
-exports.getEpVersion = () => require('../../package.json').version;
+export const getEpVersion = () => require('../../package.json').version;
/**
* Receives a settingsObj and, if the property name is a valid configuration
@@ -497,7 +499,8 @@ exports.getEpVersion = () => require('../../package.json').version;
* This code refactors a previous version that copied & pasted the same code for
* both "settings.json" and "credentials.json".
*/
-const storeSettings = (settingsObj) => {
+//FIXME find out what settingsObj is
+const storeSettings = (settingsObj: any) => {
for (const i of Object.keys(settingsObj || {})) {
if (nonSettings.includes(i)) {
logger.warn(`Ignoring setting: '${i}'`);
@@ -536,9 +539,10 @@ const storeSettings = (settingsObj) => {
* short syntax "${ABIWORD}", and not "${ABIWORD:null}": the latter would result
* in the literal string "null", instead.
*/
-const coerceValue = (stringValue) => {
+const coerceValue = (stringValue: string) => {
// cooked from https://stackoverflow.com/questions/175739/built-in-way-in-javascript-to-check-if-a-string-is-a-valid-number
- const isNumeric = !isNaN(stringValue) && !isNaN(parseFloat(stringValue) && isFinite(stringValue));
+ const numberToEvaluate = Number(stringValue)
+ const isNumeric = !isNaN(numberToEvaluate) && !isNaN(parseFloat(stringValue)) && isFinite(numberToEvaluate);
if (isNumeric) {
// detected numeric string. Coerce to a number
@@ -591,7 +595,7 @@ const coerceValue = (stringValue) => {
*
* see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The_replacer_parameter
*/
-const lookupEnvironmentVariables = (obj) => {
+const lookupEnvironmentVariables = (obj: any) => {
const stringifiedAndReplaced = JSON.stringify(obj, (key, value) => {
/*
* the first invocation of replacer() is with an empty key. Just go on, or
@@ -636,9 +640,9 @@ const lookupEnvironmentVariables = (obj) => {
if ((envVarValue === undefined) && (defaultValue === undefined)) {
logger.warn(`Environment variable "${envVarName}" does not contain any value for ` +
- `configuration key "${key}", and no default was given. Using null. ` +
- 'THIS BEHAVIOR MAY CHANGE IN A FUTURE VERSION OF ETHERPAD; you should ' +
- 'explicitly use "null" as the default if you want to continue to use null.');
+ `configuration key "${key}", and no default was given. Using null. ` +
+ 'THIS BEHAVIOR MAY CHANGE IN A FUTURE VERSION OF ETHERPAD; you should ' +
+ 'explicitly use "null" as the default if you want to continue to use null.');
/*
* We have to return null, because if we just returned undefined, the
@@ -649,9 +653,12 @@ const lookupEnvironmentVariables = (obj) => {
if ((envVarValue === undefined) && (defaultValue !== undefined)) {
logger.debug(`Environment variable "${envVarName}" not found for ` +
- `configuration key "${key}". Falling back to default value.`);
+ `configuration key "${key}". Falling back to default value.`);
return coerceValue(defaultValue);
+ } else if ((envVarValue === undefined))
+ {
+ return coerceValue("none")
}
// envVarName contained some value.
@@ -666,9 +673,7 @@ const lookupEnvironmentVariables = (obj) => {
return coerceValue(envVarValue);
});
- const newSettings = JSON.parse(stringifiedAndReplaced);
-
- return newSettings;
+ return JSON.parse(stringifiedAndReplaced);
};
/**
@@ -679,7 +684,7 @@ const lookupEnvironmentVariables = (obj) => {
*
* The isSettings variable only controls the error logging.
*/
-const parseSettings = (settingsFilename, isSettings) => {
+const parseSettings = (settingsFilename: string, isSettings:boolean) => {
let settingsStr = '';
let settingsType, notFoundMessage, notFoundFunction;
@@ -711,20 +716,22 @@ const parseSettings = (settingsFilename, isSettings) => {
logger.info(`${settingsType} loaded from: ${settingsFilename}`);
- const replacedSettings = lookupEnvironmentVariables(settings);
-
- return replacedSettings;
+ return lookupEnvironmentVariables(settings);
} catch (e) {
+ const error = e as Error
logger.error(`There was an error processing your ${settingsType} ` +
- `file from ${settingsFilename}: ${e.message}`);
+ `file from ${settingsFilename}: ${error.message}`);
process.exit(1);
}
};
-exports.reloadSettings = () => {
- const settings = parseSettings(exports.settingsFilename, true);
- const credentials = parseSettings(exports.credentialsFilename, false);
+export const randomVersionString = randomString(4);
+
+
+export const reloadSettings = () => {
+ const settings = parseSettings(settingsFilename, true);
+ const credentials = parseSettings(credentialsFilename, false);
storeSettings(settings);
storeSettings(credentials);
@@ -732,7 +739,7 @@ exports.reloadSettings = () => {
if (!exports.skinName) {
logger.warn('No "skinName" parameter found. Please check out settings.json.template and ' +
- 'update your settings.json. Falling back to the default "colibris".');
+ 'update your settings.json. Falling back to the default "colibris".');
exports.skinName = 'colibris';
}
@@ -743,7 +750,7 @@ exports.reloadSettings = () => {
if (countPieces !== 1) {
logger.error(`skinName must be the name of a directory under "${skinBasePath}". This is ` +
- `not valid: "${exports.skinName}". Falling back to the default "colibris".`);
+ `not valid: "${exports.skinName}". Falling back to the default "colibris".`);
exports.skinName = 'colibris';
}
@@ -754,7 +761,7 @@ exports.reloadSettings = () => {
// what if someone sets skinName == ".." or "."? We catch him!
if (absolutePaths.isSubdir(skinBasePath, skinPath) === false) {
logger.error(`Skin path ${skinPath} must be a subdirectory of ${skinBasePath}. ` +
- 'Falling back to the default "colibris".');
+ 'Falling back to the default "colibris".');
exports.skinName = 'colibris';
skinPath = path.join(skinBasePath, exports.skinName);
@@ -772,7 +779,7 @@ exports.reloadSettings = () => {
if (exports.abiword) {
// Check abiword actually exists
if (exports.abiword != null) {
- fs.exists(exports.abiword, (exists) => {
+ fs.exists(exports.abiword, (exists: boolean) => {
if (!exists) {
const abiwordError = 'Abiword does not exist at this path, check your settings file.';
if (!exports.suppressErrorsInPadText) {
@@ -786,7 +793,7 @@ exports.reloadSettings = () => {
}
if (exports.soffice) {
- fs.exists(exports.soffice, (exists) => {
+ fs.exists(exports.soffice, (exists: boolean) => {
if (!exists) {
const sofficeError =
'soffice (libreoffice) does not exist at this path, check your settings file.';
@@ -813,9 +820,9 @@ exports.reloadSettings = () => {
}
} else {
logger.warn('Declaring the sessionKey in the settings.json is deprecated. ' +
- 'This value is auto-generated now. Please remove the setting from the file. -- ' +
- 'If you are seeing this error after restarting using the Admin User ' +
- 'Interface then you can ignore this message.');
+ 'This value is auto-generated now. Please remove the setting from the file. -- ' +
+ 'If you are seeing this error after restarting using the Admin User ' +
+ 'Interface then you can ignore this message.');
}
if (exports.dbType === 'dirty') {
@@ -831,7 +838,7 @@ exports.reloadSettings = () => {
if (exports.ip === '') {
// using Unix socket for connectivity
logger.warn('The settings file contains an empty string ("") for the "ip" parameter. The ' +
- '"port" parameter will be interpreted as the path to a Unix socket to bind at.');
+ '"port" parameter will be interpreted as the path to a Unix socket to bind at.');
}
/*
@@ -845,7 +852,6 @@ exports.reloadSettings = () => {
* ACHTUNG: this may prevent caching HTTP proxies to work
* TODO: remove the "?v=randomstring" parameter, and replace with hashed filenames instead
*/
- exports.randomVersionString = randomString(4);
logger.info(`Random string used for versioning assets: ${exports.randomVersionString}`);
};
@@ -855,3 +861,5 @@ exports.exportedForTestingOnly = {
// initially load settings
exports.reloadSettings();
+
+
diff --git a/src/node/utils/UpdateCheck.js b/src/node/utils/UpdateCheck.js
deleted file mode 100644
index cfbd9dad9fc..00000000000
--- a/src/node/utils/UpdateCheck.js
+++ /dev/null
@@ -1,43 +0,0 @@
-'use strict';
-const semver = require('semver');
-const settings = require('./Settings');
-const request = require('request');
-
-let infos;
-
-const loadEtherpadInformations = () => new Promise((resolve, reject) => {
- request('https://static.etherpad.org/info.json', (er, response, body) => {
- if (er) return reject(er);
-
- try {
- infos = JSON.parse(body);
- return resolve(infos);
- } catch (err) {
- return reject(err);
- }
- });
-});
-
-exports.getLatestVersion = () => {
- exports.needsUpdate();
- return infos.latestVersion;
-};
-
-exports.needsUpdate = (cb) => {
- loadEtherpadInformations().then((info) => {
- if (semver.gt(info.latestVersion, settings.getEpVersion())) {
- if (cb) return cb(true);
- }
- }).catch((err) => {
- console.error(`Can not perform Etherpad update check: ${err}`);
- if (cb) return cb(false);
- });
-};
-
-exports.check = () => {
- exports.needsUpdate((needsUpdate) => {
- if (needsUpdate) {
- console.warn(`Update available: Download the actual version ${infos.latestVersion}`);
- }
- });
-};
diff --git a/src/node/utils/UpdateCheck.ts b/src/node/utils/UpdateCheck.ts
new file mode 100644
index 00000000000..d20219b285d
--- /dev/null
+++ b/src/node/utils/UpdateCheck.ts
@@ -0,0 +1,59 @@
+'use strict';
+import semver from 'semver';
+import {getEpVersion} from './Settings';
+import request from 'request';
+
+
+type InfoModel = {
+ latestVersion: string
+}
+
+let infos: InfoModel|undefined;
+
+const loadEtherpadInformations = () => new Promise((resolve, reject) => {
+ request('https://static.etherpad.org/info.json', (er, response, body) => {
+ if (er) reject(er);
+
+ try {
+ infos = JSON.parse(body);
+ if (infos === undefined|| infos === null){
+ reject("Could not retrieve current version")
+ return
+ }
+ resolve(infos);
+ } catch (err) {
+ reject(err);
+ }
+ });
+});
+
+const getLatestVersion = () => {
+ exports.needsUpdate();
+ if(infos === undefined){
+ throw new Error("Could not retrieve latest version")
+ }
+
+ return infos.latestVersion;
+}
+
+exports.needsUpdate = (cb?:(arg0: boolean)=>void) => {
+ loadEtherpadInformations().then((info) => {
+ if (semver.gt(info.latestVersion, getEpVersion())) {
+ if (cb) return cb(true);
+ }
+ }).catch((err) => {
+ console.error(`Can not perform Etherpad update check: ${err}`);
+ if (cb) return cb(false);
+ })
+}
+
+const check = () => {
+ const needsUpdate = ((needsUpdate: boolean) => {
+ if (needsUpdate && infos) {
+ console.warn(`Update available: Download the latest version ${infos.latestVersion}`);
+ }
+ })
+ needsUpdate(infos.latestVersion > getEpVersion());
+}
+
+export default {check, getLatestVersion}
diff --git a/src/node/utils/randomstring.js b/src/node/utils/randomstring.js
index 4ffd3e8ae77..152239a1955 100644
--- a/src/node/utils/randomstring.js
+++ b/src/node/utils/randomstring.js
@@ -3,8 +3,6 @@
* Generates a random String with the given length. Is needed to generate the
* Author, Group, readonly, session Ids
*/
-const crypto = require('crypto');
+import crypto from 'crypto'
-const randomString = (len) => crypto.randomBytes(len).toString('hex');
-
-module.exports = randomString;
+export const randomString = (len) => crypto.randomBytes(len).toString('hex');
diff --git a/src/package-lock.json b/src/package-lock.json
index abf18216eb6..34b69526548 100644
--- a/src/package-lock.json
+++ b/src/package-lock.json
@@ -1,55 +1,144 @@
{
"name": "ep_etherpad-lite",
"version": "1.9.0",
- "lockfileVersion": 1,
+ "lockfileVersion": 3,
"requires": true,
- "dependencies": {
- "@apidevtools/json-schema-ref-parser": {
+ "packages": {
+ "": {
+ "name": "ep_etherpad-lite",
+ "version": "1.9.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "async": "^3.2.2",
+ "clean-css": "^5.3.2",
+ "cookie-parser": "^1.4.6",
+ "cross-spawn": "^7.0.3",
+ "ejs": "^3.1.7",
+ "etherpad-require-kernel": "^1.0.15",
+ "etherpad-yajsml": "0.0.12",
+ "express": "4.18.2",
+ "express-rate-limit": "^6.7.0",
+ "express-session": "npm:@etherpad/express-session@^1.18.1",
+ "fast-deep-equal": "^3.1.3",
+ "find-root": "1.1.0",
+ "formidable": "^2.1.2",
+ "http-errors": "^2.0.0",
+ "js-cookie": "^3.0.5",
+ "jsdom": "^19.0.0",
+ "jsonminify": "0.4.2",
+ "languages4translatewiki": "0.1.3",
+ "lodash.clonedeep": "4.5.0",
+ "log4js": "^6.9.1",
+ "measured-core": "^2.0.0",
+ "mime-types": "^2.1.35",
+ "npm": "^6.14.15",
+ "openapi-backend": "^5.9.2",
+ "proxy-addr": "^2.0.7",
+ "rate-limiter-flexible": "^2.4.1",
+ "rehype": "^12.0.1",
+ "rehype-minify-whitespace": "^5.0.1",
+ "request": "2.88.2",
+ "resolve": "1.22.2",
+ "security": "1.0.0",
+ "semver": "^7.5.2",
+ "socket.io": "^2.4.1",
+ "superagent": "^8.0.9",
+ "terser": "^5.16.5",
+ "threads": "^1.7.0",
+ "tinycon": "0.6.8",
+ "ueberdb2": "^4.0.1",
+ "underscore": "1.13.3",
+ "unorm": "1.6.0",
+ "wtfnode": "^0.9.1"
+ },
+ "bin": {
+ "etherpad": "node/server.js",
+ "etherpad-healthcheck": "bin/etherpad-healthcheck",
+ "etherpad-lite": "node/server.js"
+ },
+ "devDependencies": {
+ "@types/express": "4.17.17",
+ "@types/node": "^20.3.1",
+ "concurrently": "^8.2.0",
+ "eslint": "^8.14.0",
+ "eslint-config-etherpad": "^3.0.13",
+ "etherpad-cli-client": "^2.0.1",
+ "mocha": "^9.2.2",
+ "mocha-froth": "^0.2.10",
+ "nodeify": "^1.0.1",
+ "nodemon": "^2.0.22",
+ "openapi-schema-validation": "^0.4.2",
+ "selenium-webdriver": "^4.10.0",
+ "set-cookie-parser": "^2.4.8",
+ "sinon": "^13.0.2",
+ "split-grid": "^1.0.11",
+ "supertest": "^6.3.3",
+ "typescript": "^4.9.5"
+ },
+ "engines": {
+ "node": ">=14.15.0",
+ "npm": ">=6.14.0"
+ }
+ },
+ "node_modules/@apidevtools/json-schema-ref-parser": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-10.1.0.tgz",
"integrity": "sha512-3e+viyMuXdrcK8v5pvP+SDoAQ77FH6OyRmuK48SZKmdHJRFm87RsSs8qm6kP39a/pOPURByJw+OXzQIqcfmKtA==",
- "requires": {
+ "dependencies": {
"@jsdevtools/ono": "^7.1.3",
"@types/json-schema": "^7.0.11",
"@types/lodash.clonedeep": "^4.5.7",
"js-yaml": "^4.1.0",
"lodash.clonedeep": "^4.5.0"
},
- "dependencies": {
- "@types/json-schema": {
- "version": "7.0.12",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
- "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA=="
- }
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/philsturgeon"
}
},
- "@azure/abort-controller": {
+ "node_modules/@apidevtools/json-schema-ref-parser/node_modules/@types/json-schema": {
+ "version": "7.0.12",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
+ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA=="
+ },
+ "node_modules/@azure/abort-controller": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz",
"integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==",
- "requires": {
+ "dependencies": {
"tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
}
},
- "@azure/core-asynciterator-polyfill": {
+ "node_modules/@azure/core-asynciterator-polyfill": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@azure/core-asynciterator-polyfill/-/core-asynciterator-polyfill-1.0.2.tgz",
- "integrity": "sha512-3rkP4LnnlWawl0LZptJOdXNrT/fHp2eQMadoasa6afspXdpGrtPZuAQc2PD0cpgyuoXtUWyC3tv7xfntjGS5Dw=="
+ "integrity": "sha512-3rkP4LnnlWawl0LZptJOdXNrT/fHp2eQMadoasa6afspXdpGrtPZuAQc2PD0cpgyuoXtUWyC3tv7xfntjGS5Dw==",
+ "engines": {
+ "node": ">=12.0.0"
+ }
},
- "@azure/core-auth": {
+ "node_modules/@azure/core-auth": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.3.2.tgz",
"integrity": "sha512-7CU6DmCHIZp5ZPiZ9r3J17lTKMmYsm/zGvNkjArQwPkrLlZ1TZ+EUYfGgh2X31OLMVAQCTJZW4cXHJi02EbJnA==",
- "requires": {
+ "dependencies": {
"@azure/abort-controller": "^1.0.0",
"tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
}
},
- "@azure/core-client": {
+ "node_modules/@azure/core-client": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.6.0.tgz",
"integrity": "sha512-YhSf4cb61ApSjItscp9XoaLq8KRnacPDAhmjAZSMnn/gs6FhFbZNfOBOErG2dDj7JRknVtCmJ5mLmfR2sLa11A==",
- "requires": {
+ "dependencies": {
"@azure/abort-controller": "^1.0.0",
"@azure/core-auth": "^1.3.0",
"@azure/core-rest-pipeline": "^1.5.0",
@@ -58,22 +147,26 @@
"@azure/logger": "^1.0.0",
"tslib": "^2.2.0"
},
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@azure/core-client/node_modules/@azure/core-tracing": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz",
+ "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==",
"dependencies": {
- "@azure/core-tracing": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz",
- "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==",
- "requires": {
- "tslib": "^2.2.0"
- }
- }
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
}
},
- "@azure/core-http": {
+ "node_modules/@azure/core-http": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-2.3.2.tgz",
"integrity": "sha512-Z4dfbglV9kNZO177CNx4bo5ekFuYwwsvjLiKdZI4r84bYGv3irrbQz7JC3/rUfFH2l4T/W6OFleJaa2X0IaQqw==",
- "requires": {
+ "dependencies": {
"@azure/abort-controller": "^1.0.0",
"@azure/core-auth": "^1.3.0",
"@azure/core-tracing": "1.0.0-preview.13",
@@ -90,57 +183,61 @@
"uuid": "^8.3.0",
"xml2js": "^0.5.0"
},
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@azure/core-http/node_modules/@azure/core-util": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.3.2.tgz",
+ "integrity": "sha512-2bECOUh88RvL1pMZTcc6OzfobBeWDBf5oBbhjIhT1MV9otMVWCzpOJkkiKtrnO88y5GGBelgY8At73KGAdbkeQ==",
"dependencies": {
- "@azure/core-util": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.3.2.tgz",
- "integrity": "sha512-2bECOUh88RvL1pMZTcc6OzfobBeWDBf5oBbhjIhT1MV9otMVWCzpOJkkiKtrnO88y5GGBelgY8At73KGAdbkeQ==",
- "requires": {
- "@azure/abort-controller": "^1.0.0",
- "tslib": "^2.2.0"
- }
- },
- "uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
- },
- "xml2js": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
- "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
- "requires": {
- "sax": ">=0.6.0",
- "xmlbuilder": "~11.0.0"
- }
- }
+ "@azure/abort-controller": "^1.0.0",
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@azure/core-http/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "bin": {
+ "uuid": "dist/bin/uuid"
}
},
- "@azure/core-lro": {
+ "node_modules/@azure/core-lro": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.2.4.tgz",
"integrity": "sha512-e1I2v2CZM0mQo8+RSix0x091Av493e4bnT22ds2fcQGslTHzM2oTbswkB65nP4iEpCxBrFxOSDPKExmTmjCVtQ==",
- "requires": {
+ "dependencies": {
"@azure/abort-controller": "^1.0.0",
"@azure/core-tracing": "1.0.0-preview.13",
"@azure/logger": "^1.0.0",
"tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
}
},
- "@azure/core-paging": {
+ "node_modules/@azure/core-paging": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.2.1.tgz",
"integrity": "sha512-UtH5iMlYsvg+nQYIl4UHlvvSrsBjOlRF4fs0j7mxd3rWdAStrKYrh2durOpHs5C9yZbVhsVDaisoyaf/lL1EVA==",
- "requires": {
+ "dependencies": {
"@azure/core-asynciterator-polyfill": "^1.0.0",
"tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
}
},
- "@azure/core-rest-pipeline": {
+ "node_modules/@azure/core-rest-pipeline": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.8.1.tgz",
"integrity": "sha512-R/XpxZcDgGbnneEifnsAcjLoR2NCmlDxKDmzd8oi5jx5YEnPE6gsxHQWAk2+uY55Ka717x/fdctyoCYKnumrqw==",
- "requires": {
+ "dependencies": {
"@azure/abort-controller": "^1.0.0",
"@azure/core-auth": "^1.3.0",
"@azure/core-tracing": "^1.0.1",
@@ -152,72 +249,99 @@
"tslib": "^2.2.0",
"uuid": "^8.3.0"
},
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@azure/core-rest-pipeline/node_modules/@azure/core-tracing": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz",
+ "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==",
"dependencies": {
- "@azure/core-tracing": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz",
- "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==",
- "requires": {
- "tslib": "^2.2.0"
- }
- },
- "@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
- "requires": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@azure/core-rest-pipeline/node_modules/@tootallnate/once": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@azure/core-rest-pipeline/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "@azure/core-tracing": {
+ "node_modules/@azure/core-rest-pipeline/node_modules/http-proxy-agent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+ "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+ "dependencies": {
+ "@tootallnate/once": "1",
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@azure/core-rest-pipeline/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/@azure/core-rest-pipeline/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/@azure/core-tracing": {
"version": "1.0.0-preview.13",
"resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz",
"integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==",
- "requires": {
+ "dependencies": {
"@opentelemetry/api": "^1.0.1",
"tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
}
},
- "@azure/core-util": {
+ "node_modules/@azure/core-util": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.0.0.tgz",
"integrity": "sha512-yWshY9cdPthlebnb3Zuz/j0Lv4kjU6u7PR5sW7A9FF7EX+0irMRJAtyTq5TPiDHJfjH8gTSlnIYFj9m7Ed76IQ==",
- "requires": {
+ "dependencies": {
"tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
}
},
- "@azure/identity": {
+ "node_modules/@azure/identity": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/@azure/identity/-/identity-2.0.4.tgz",
"integrity": "sha512-ZgFubAsmo7dji63NLPaot6O7pmDfceAUPY57uphSCr0hmRj+Cakqb4SUz5SohCHFtscrhcmejRU903Fowz6iXg==",
- "requires": {
+ "dependencies": {
"@azure/abort-controller": "^1.0.0",
"@azure/core-auth": "^1.3.0",
"@azure/core-client": "^1.4.0",
@@ -235,19 +359,23 @@
"tslib": "^2.2.0",
"uuid": "^8.3.0"
},
- "dependencies": {
- "uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
- }
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@azure/identity/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "bin": {
+ "uuid": "dist/bin/uuid"
}
},
- "@azure/keyvault-keys": {
+ "node_modules/@azure/keyvault-keys": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/@azure/keyvault-keys/-/keyvault-keys-4.4.0.tgz",
"integrity": "sha512-W9sPZebXYa3aar7BGIA+fAsq/sy1nf2TZAETbkv7DRawzVLrWv8QoVVceqNHjy3cigT4HNxXjaPYCI49ez5CUA==",
- "requires": {
+ "dependencies": {
"@azure/abort-controller": "^1.0.0",
"@azure/core-http": "^2.0.0",
"@azure/core-lro": "^2.2.0",
@@ -255,115 +383,247 @@
"@azure/core-tracing": "1.0.0-preview.13",
"@azure/logger": "^1.0.0",
"tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
}
},
- "@azure/logger": {
+ "node_modules/@azure/logger": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.3.tgz",
"integrity": "sha512-aK4s3Xxjrx3daZr3VylxejK3vG5ExXck5WOHDJ8in/k9AqlfIyFMMT1uG7u8mNjX+QRILTIn0/Xgschfh/dQ9g==",
- "requires": {
+ "dependencies": {
"tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@azure/ms-rest-azure-env": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@azure/ms-rest-azure-env/-/ms-rest-azure-env-2.0.0.tgz",
+ "integrity": "sha512-dG76W7ElfLi+fbTjnZVGj+M9e0BIEJmRxU6fHaUQ12bZBe8EJKYb2GV50YWNaP2uJiVQ5+7nXEVj1VN1UQtaEw==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@azure/ms-rest-js": {
+ "version": "2.6.6",
+ "resolved": "https://registry.npmjs.org/@azure/ms-rest-js/-/ms-rest-js-2.6.6.tgz",
+ "integrity": "sha512-WYIda8VvrkZE68xHgOxUXvjThxNf1nnGPPe0rAljqK5HJHIZ12Pi3YhEDOn3Ge7UnwaaM3eFO0VtAy4nGVI27Q==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@azure/core-auth": "^1.1.4",
+ "abort-controller": "^3.0.0",
+ "form-data": "^2.5.0",
+ "node-fetch": "^2.6.7",
+ "tough-cookie": "^3.0.1",
+ "tslib": "^1.10.0",
+ "tunnel": "0.0.6",
+ "uuid": "^8.3.2",
+ "xml2js": "^0.5.0"
}
},
- "@azure/msal-browser": {
+ "node_modules/@azure/ms-rest-js/node_modules/form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/@azure/ms-rest-js/node_modules/tough-cookie": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz",
+ "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "ip-regex": "^2.1.0",
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@azure/ms-rest-js/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@azure/ms-rest-js/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "dev": true,
+ "peer": true,
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/@azure/ms-rest-nodeauth": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@azure/ms-rest-nodeauth/-/ms-rest-nodeauth-3.1.1.tgz",
+ "integrity": "sha512-UA/8dgLy3+ZiwJjAZHxL4MUB14fFQPkaAOZ94jsTW/Z6WmoOeny2+cLk0+dyIX/iH6qSrEWKwbStEeB970B9pA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@azure/ms-rest-azure-env": "^2.0.0",
+ "@azure/ms-rest-js": "^2.0.4",
+ "adal-node": "^0.2.2"
+ }
+ },
+ "node_modules/@azure/msal-browser": {
"version": "2.24.0",
"resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.24.0.tgz",
"integrity": "sha512-P4Z8mQ6hTuA9ss3HCltso7fRmuX1raaU6444G35c0FhaD6hfqViFYRa7hk16AiAs9HkUQHbBaL3gLjKMpX3heA==",
- "requires": {
+ "dependencies": {
"@azure/msal-common": "^6.3.0"
},
- "dependencies": {
- "@azure/msal-common": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-6.3.0.tgz",
- "integrity": "sha512-ZyLq9GdnLBi/83YpysE86TFKbA0TuvfNAN5Psqu20cdAjLo/4rw4ttiItdh1G//XeGErHk9qn57gi2AYU1b5/Q=="
- }
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@azure/msal-browser/node_modules/@azure/msal-common": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-6.3.0.tgz",
+ "integrity": "sha512-ZyLq9GdnLBi/83YpysE86TFKbA0TuvfNAN5Psqu20cdAjLo/4rw4ttiItdh1G//XeGErHk9qn57gi2AYU1b5/Q==",
+ "engines": {
+ "node": ">=0.8.0"
}
},
- "@azure/msal-common": {
+ "node_modules/@azure/msal-common": {
"version": "4.5.1",
"resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-4.5.1.tgz",
"integrity": "sha512-/i5dXM+QAtO+6atYd5oHGBAx48EGSISkXNXViheliOQe+SIFMDo3gSq3lL54W0suOSAsVPws3XnTaIHlla0PIQ==",
- "requires": {
+ "dependencies": {
"debug": "^4.1.1"
},
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@azure/msal-common/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "@azure/msal-node": {
+ "node_modules/@azure/msal-common/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/@azure/msal-node": {
"version": "1.14.6",
"resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.14.6.tgz",
"integrity": "sha512-em/qqFL5tLMxMPl9vormAs13OgZpmQoJbiQ/GlWr+BA77eCLoL+Ehr5xRHowYo+LFe5b+p+PJVkRvT+mLvOkwA==",
- "requires": {
+ "dependencies": {
"@azure/msal-common": "^9.0.2",
"jsonwebtoken": "^9.0.0",
"uuid": "^8.3.0"
},
+ "engines": {
+ "node": "10 || 12 || 14 || 16 || 18"
+ }
+ },
+ "node_modules/@azure/msal-node/node_modules/@azure/msal-common": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-9.0.2.tgz",
+ "integrity": "sha512-qzwxuF8kZAp+rNUactMCgJh8fblq9D4lSqrrIxMDzLjgSZtjN32ix7r/HBe8QdOr76II9SVVPcMkX4sPzPfQ7w==",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@azure/msal-node/node_modules/jsonwebtoken": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz",
+ "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==",
+ "dependencies": {
+ "jws": "^3.2.2",
+ "lodash": "^4.17.21",
+ "ms": "^2.1.1",
+ "semver": "^7.3.8"
+ },
+ "engines": {
+ "node": ">=12",
+ "npm": ">=6"
+ }
+ },
+ "node_modules/@azure/msal-node/node_modules/jws": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+ "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
"dependencies": {
- "@azure/msal-common": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-9.0.2.tgz",
- "integrity": "sha512-qzwxuF8kZAp+rNUactMCgJh8fblq9D4lSqrrIxMDzLjgSZtjN32ix7r/HBe8QdOr76II9SVVPcMkX4sPzPfQ7w=="
- },
- "jsonwebtoken": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz",
- "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==",
- "requires": {
- "jws": "^3.2.2",
- "lodash": "^4.17.21",
- "ms": "^2.1.1",
- "semver": "^7.3.8"
- }
- },
- "jws": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
- "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
- "requires": {
- "jwa": "^1.4.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- },
- "semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
- }
+ "jwa": "^1.4.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/@azure/msal-node/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/@azure/msal-node/node_modules/semver": {
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@azure/msal-node/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz",
+ "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==",
+ "dev": true,
+ "dependencies": {
+ "regenerator-runtime": "^0.13.11"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "@eslint/eslintrc": {
+ "node_modules/@eslint/eslintrc": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz",
"integrity": "sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg==",
"dev": true,
- "requires": {
+ "dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
"espree": "^9.3.1",
@@ -374,169 +634,206 @@
"minimatch": "^3.0.4",
"strip-json-comments": "^3.1.1"
},
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
"dependencies": {
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "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"
- }
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.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==",
- "dev": true
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "@gar/promisify": {
+ "node_modules/@eslint/eslintrc/node_modules/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==",
+ "dev": true
+ },
+ "node_modules/@eslint/eslintrc/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/@gar/promisify": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
"integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
"optional": true
},
- "@humanwhocodes/config-array": {
+ "node_modules/@humanwhocodes/config-array": {
"version": "0.9.5",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
"integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
"dev": true,
- "requires": {
+ "dependencies": {
"@humanwhocodes/object-schema": "^1.2.1",
"debug": "^4.1.1",
"minimatch": "^3.0.4"
},
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
"dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "@humanwhocodes/object-schema": {
+ "node_modules/@humanwhocodes/config-array/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/@humanwhocodes/object-schema": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
"dev": true
},
- "@jridgewell/gen-mapping": {
+ "node_modules/@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
- "requires": {
+ "dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
}
},
- "@jridgewell/resolve-uri": {
+ "node_modules/@jridgewell/resolve-uri": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
- "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w=="
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
},
- "@jridgewell/set-array": {
+ "node_modules/@jridgewell/set-array": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw=="
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
},
- "@jridgewell/source-map": {
+ "node_modules/@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
- "requires": {
+ "dependencies": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
- "@jridgewell/sourcemap-codec": {
+ "node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
"integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
},
- "@jridgewell/trace-mapping": {
+ "node_modules/@jridgewell/trace-mapping": {
"version": "0.3.17",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
"integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
- "requires": {
+ "dependencies": {
"@jridgewell/resolve-uri": "3.1.0",
"@jridgewell/sourcemap-codec": "1.4.14"
}
},
- "@js-joda/core": {
+ "node_modules/@js-joda/core": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/@js-joda/core/-/core-4.3.1.tgz",
"integrity": "sha512-oeaetlodcqVsiZDxnEcqsbs+sXBkASxua0mXs5OXuPQXz3/wdPTMlxwfQ4z2HKcOik3S9voW3QJkp/KLWDhvRQ=="
},
- "@jsdevtools/ono": {
+ "node_modules/@jsdevtools/ono": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
"integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg=="
},
- "@kwsites/file-exists": {
+ "node_modules/@kwsites/file-exists": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
"integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
- "requires": {
+ "dependencies": {
"debug": "^4.1.1"
- },
+ }
+ },
+ "node_modules/@kwsites/file-exists/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "@kwsites/promise-deferred": {
+ "node_modules/@kwsites/file-exists/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/@kwsites/promise-deferred": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
"integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw=="
},
- "@mapbox/node-pre-gyp": {
+ "node_modules/@mapbox/node-pre-gyp": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz",
"integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==",
"optional": true,
- "requires": {
+ "dependencies": {
"detect-libc": "^2.0.0",
"https-proxy-agent": "^5.0.0",
"make-dir": "^3.1.0",
@@ -546,241 +843,380 @@
"rimraf": "^3.0.2",
"semver": "^7.3.5",
"tar": "^6.1.11"
+ },
+ "bin": {
+ "node-pre-gyp": "bin/node-pre-gyp"
}
},
- "@nodelib/fs.scandir": {
+ "node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"dev": true,
- "requires": {
+ "dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
}
},
- "@nodelib/fs.stat": {
+ "node_modules/@nodelib/fs.stat": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
},
- "@nodelib/fs.walk": {
+ "node_modules/@nodelib/fs.walk": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dev": true,
- "requires": {
+ "dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
}
},
- "@npmcli/fs": {
+ "node_modules/@npmcli/fs": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
"integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
"optional": true,
- "requires": {
+ "dependencies": {
"@gar/promisify": "^1.0.1",
"semver": "^7.3.5"
}
},
- "@npmcli/move-file": {
+ "node_modules/@npmcli/move-file": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
"integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
+ "deprecated": "This functionality has been moved to @npmcli/fs",
"optional": true,
- "requires": {
+ "dependencies": {
"mkdirp": "^1.0.4",
"rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "@opentelemetry/api": {
+ "node_modules/@opentelemetry/api": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.1.0.tgz",
- "integrity": "sha512-hf+3bwuBwtXsugA2ULBc95qxrOqP2pOekLz34BJhcAKawt94vfeNyUKpYc0lZQ/3sCP6LqRa7UAdHA7i5UODzQ=="
+ "integrity": "sha512-hf+3bwuBwtXsugA2ULBc95qxrOqP2pOekLz34BJhcAKawt94vfeNyUKpYc0lZQ/3sCP6LqRa7UAdHA7i5UODzQ==",
+ "engines": {
+ "node": ">=8.0.0"
+ }
},
- "@redis/bloom": {
+ "node_modules/@redis/bloom": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz",
- "integrity": "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg=="
+ "integrity": "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==",
+ "peerDependencies": {
+ "@redis/client": "^1.0.0"
+ }
},
- "@redis/client": {
+ "node_modules/@redis/client": {
"version": "1.5.8",
"resolved": "https://registry.npmjs.org/@redis/client/-/client-1.5.8.tgz",
"integrity": "sha512-xzElwHIO6rBAqzPeVnCzgvrnBEcFL1P0w8P65VNLRkdVW8rOE58f52hdj0BDgmsdOm4f1EoXPZtH4Fh7M/qUpw==",
- "requires": {
+ "dependencies": {
"cluster-key-slot": "1.1.2",
"generic-pool": "3.9.0",
"yallist": "4.0.0"
+ },
+ "engines": {
+ "node": ">=14"
}
},
- "@redis/graph": {
+ "node_modules/@redis/graph": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.1.0.tgz",
- "integrity": "sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg=="
+ "integrity": "sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg==",
+ "peerDependencies": {
+ "@redis/client": "^1.0.0"
+ }
},
- "@redis/json": {
+ "node_modules/@redis/json": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.4.tgz",
- "integrity": "sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw=="
+ "integrity": "sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==",
+ "peerDependencies": {
+ "@redis/client": "^1.0.0"
+ }
},
- "@redis/search": {
+ "node_modules/@redis/search": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@redis/search/-/search-1.1.3.tgz",
- "integrity": "sha512-4Dg1JjvCevdiCBTZqjhKkGoC5/BcB7k9j99kdMnaXFXg8x4eyOIVg9487CMv7/BUVkFLZCaIh8ead9mU15DNng=="
+ "integrity": "sha512-4Dg1JjvCevdiCBTZqjhKkGoC5/BcB7k9j99kdMnaXFXg8x4eyOIVg9487CMv7/BUVkFLZCaIh8ead9mU15DNng==",
+ "peerDependencies": {
+ "@redis/client": "^1.0.0"
+ }
},
- "@redis/time-series": {
+ "node_modules/@redis/time-series": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.4.tgz",
- "integrity": "sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng=="
+ "integrity": "sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng==",
+ "peerDependencies": {
+ "@redis/client": "^1.0.0"
+ }
},
- "@rushstack/eslint-patch": {
+ "node_modules/@rushstack/eslint-patch": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz",
"integrity": "sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw==",
"dev": true
},
- "@sinonjs/commons": {
+ "node_modules/@sinonjs/commons": {
"version": "1.8.3",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
"integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"type-detect": "4.0.8"
}
},
- "@sinonjs/fake-timers": {
+ "node_modules/@sinonjs/fake-timers": {
"version": "9.1.2",
"resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz",
"integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==",
"dev": true,
- "requires": {
+ "dependencies": {
"@sinonjs/commons": "^1.7.0"
}
},
- "@sinonjs/samsam": {
+ "node_modules/@sinonjs/samsam": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.1.tgz",
"integrity": "sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA==",
"dev": true,
- "requires": {
+ "dependencies": {
"@sinonjs/commons": "^1.6.0",
"lodash.get": "^4.4.2",
"type-detect": "^4.0.8"
}
},
- "@sinonjs/text-encoding": {
+ "node_modules/@sinonjs/text-encoding": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
"integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
"dev": true
},
- "@tediousjs/connection-string": {
+ "node_modules/@tediousjs/connection-string": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/@tediousjs/connection-string/-/connection-string-0.3.0.tgz",
"integrity": "sha512-d/keJiNKfpHo+GmSB8QcsAwBx8h+V1UbdozA5TD+eSLXprNY53JAYub47J9evsSKWDdNG5uVj0FiMozLKuzowQ=="
},
- "@tootallnate/once": {
+ "node_modules/@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/es-aggregate-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@types/es-aggregate-error/-/es-aggregate-error-1.0.2.tgz",
- "integrity": "sha512-erqUpFXksaeR2kejKnhnjZjbFxUpGZx4Z7ydNL9ie8tEhXPiZTsLeUDJ6aR1F8j5wWUAtOAQWUqkc7givBJbBA==",
- "requires": {
- "@types/node": "*"
+ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
+ "engines": {
+ "node": ">= 10"
}
},
- "@types/hast": {
+ "node_modules/@types/body-parser": {
+ "version": "1.19.2",
+ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
+ "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==",
+ "dev": true,
+ "dependencies": {
+ "@types/connect": "*",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/connect": {
+ "version": "3.4.35",
+ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
+ "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/es-aggregate-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@types/es-aggregate-error/-/es-aggregate-error-1.0.2.tgz",
+ "integrity": "sha512-erqUpFXksaeR2kejKnhnjZjbFxUpGZx4Z7ydNL9ie8tEhXPiZTsLeUDJ6aR1F8j5wWUAtOAQWUqkc7givBJbBA==",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/express": {
+ "version": "4.17.17",
+ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz",
+ "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==",
+ "dev": true,
+ "dependencies": {
+ "@types/body-parser": "*",
+ "@types/express-serve-static-core": "^4.17.33",
+ "@types/qs": "*",
+ "@types/serve-static": "*"
+ }
+ },
+ "node_modules/@types/express-serve-static-core": {
+ "version": "4.17.35",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz",
+ "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "@types/qs": "*",
+ "@types/range-parser": "*",
+ "@types/send": "*"
+ }
+ },
+ "node_modules/@types/hast": {
"version": "2.3.4",
"resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
"integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==",
- "requires": {
+ "dependencies": {
"@types/unist": "*"
}
},
- "@types/json-schema": {
+ "node_modules/@types/json-schema": {
"version": "7.0.9",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
"integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
"dev": true
},
- "@types/json5": {
+ "node_modules/@types/json5": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
"integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
"dev": true
},
- "@types/lodash": {
+ "node_modules/@types/lodash": {
"version": "4.14.195",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.195.tgz",
"integrity": "sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg=="
},
- "@types/lodash.clonedeep": {
+ "node_modules/@types/lodash.clonedeep": {
"version": "4.5.7",
"resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.7.tgz",
"integrity": "sha512-ccNqkPptFIXrpVqUECi60/DFxjNKsfoQxSQsgcBJCX/fuX1wgyQieojkcWH/KpE3xzLoWN/2k+ZeGqIN3paSvw==",
- "requires": {
+ "dependencies": {
"@types/lodash": "*"
}
},
- "@types/long": {
+ "node_modules/@types/long": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
"integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
},
- "@types/node": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz",
- "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q=="
+ "node_modules/@types/mime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
+ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==",
+ "dev": true
},
- "@types/node-fetch": {
+ "node_modules/@types/node": {
+ "version": "20.3.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz",
+ "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg=="
+ },
+ "node_modules/@types/node-fetch": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz",
"integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==",
- "requires": {
+ "dependencies": {
"@types/node": "*",
"form-data": "^3.0.0"
- },
+ }
+ },
+ "node_modules/@types/node-fetch/node_modules/form-data": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
+ "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
"dependencies": {
- "form-data": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
- "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- }
- }
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
}
},
- "@types/parse5": {
+ "node_modules/@types/parse5": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz",
"integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g=="
},
- "@types/tunnel": {
+ "node_modules/@types/qs": {
+ "version": "6.9.7",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
+ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==",
+ "dev": true
+ },
+ "node_modules/@types/range-parser": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz",
+ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==",
+ "dev": true
+ },
+ "node_modules/@types/send": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz",
+ "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==",
+ "dev": true,
+ "dependencies": {
+ "@types/mime": "^1",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/serve-static": {
+ "version": "1.15.1",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz",
+ "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/mime": "*",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/stoppable": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@types/stoppable/-/stoppable-1.1.1.tgz",
+ "integrity": "sha512-b8N+fCADRIYYrGZOcmOR8ZNBOqhktWTB/bMUl5LvGtT201QKJZOOH5UsFyI3qtteM6ZAJbJqZoBcLqqxKIwjhw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/tough-cookie": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz",
+ "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@types/tunnel": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.3.tgz",
"integrity": "sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==",
- "requires": {
+ "dependencies": {
"@types/node": "*"
}
},
- "@types/unist": {
+ "node_modules/@types/unist": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
"integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
},
- "@typescript-eslint/eslint-plugin": {
+ "node_modules/@typescript-eslint/eslint-plugin": {
"version": "5.22.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.22.0.tgz",
"integrity": "sha512-YCiy5PUzpAeOPGQ7VSGDEY2NeYUV1B0swde2e0HzokRsHBYjSdF6DZ51OuRZxVPHx0032lXGLvOMls91D8FXlg==",
"dev": true,
- "requires": {
+ "dependencies": {
"@typescript-eslint/scope-manager": "5.22.0",
"@typescript-eslint/type-utils": "5.22.0",
"@typescript-eslint/utils": "5.22.0",
@@ -791,103 +1227,181 @@
"semver": "^7.3.5",
"tsutils": "^3.21.0"
},
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^5.0.0",
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
"dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "@typescript-eslint/parser": {
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/@typescript-eslint/parser": {
"version": "5.22.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.22.0.tgz",
"integrity": "sha512-piwC4krUpRDqPaPbFaycN70KCP87+PC5WZmrWs+DlVOxxmF+zI6b6hETv7Quy4s9wbkV16ikMeZgXsvzwI3icQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"@typescript-eslint/scope-manager": "5.22.0",
"@typescript-eslint/types": "5.22.0",
"@typescript-eslint/typescript-estree": "5.22.0",
"debug": "^4.3.2"
},
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/parser/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
"dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "@typescript-eslint/scope-manager": {
+ "node_modules/@typescript-eslint/parser/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
"version": "5.22.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.22.0.tgz",
"integrity": "sha512-yA9G5NJgV5esANJCO0oF15MkBO20mIskbZ8ijfmlKIvQKg0ynVKfHZ15/nhAJN5m8Jn3X5qkwriQCiUntC9AbA==",
"dev": true,
- "requires": {
+ "dependencies": {
"@typescript-eslint/types": "5.22.0",
"@typescript-eslint/visitor-keys": "5.22.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "@typescript-eslint/type-utils": {
+ "node_modules/@typescript-eslint/type-utils": {
"version": "5.22.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.22.0.tgz",
"integrity": "sha512-iqfLZIsZhK2OEJ4cQ01xOq3NaCuG5FQRKyHicA3xhZxMgaxQazLUHbH/B2k9y5i7l3+o+B5ND9Mf1AWETeMISA==",
"dev": true,
- "requires": {
+ "dependencies": {
"@typescript-eslint/utils": "5.22.0",
"debug": "^4.3.2",
"tsutils": "^3.21.0"
},
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
"dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "@typescript-eslint/types": {
+ "node_modules/@typescript-eslint/type-utils/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/@typescript-eslint/types": {
"version": "5.22.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.22.0.tgz",
"integrity": "sha512-T7owcXW4l0v7NTijmjGWwWf/1JqdlWiBzPqzAWhobxft0SiEvMJB56QXmeCQjrPuM8zEfGUKyPQr/L8+cFUBLw==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
},
- "@typescript-eslint/typescript-estree": {
+ "node_modules/@typescript-eslint/typescript-estree": {
"version": "5.22.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.22.0.tgz",
"integrity": "sha512-EyBEQxvNjg80yinGE2xdhpDYm41so/1kOItl0qrjIiJ1kX/L/L8WWGmJg8ni6eG3DwqmOzDqOhe6763bF92nOw==",
"dev": true,
- "requires": {
+ "dependencies": {
"@typescript-eslint/types": "5.22.0",
"@typescript-eslint/visitor-keys": "5.22.0",
"debug": "^4.3.2",
@@ -896,30 +1410,48 @@
"semver": "^7.3.5",
"tsutils": "^3.21.0"
},
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
"dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "@typescript-eslint/utils": {
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/@typescript-eslint/utils": {
"version": "5.22.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.22.0.tgz",
"integrity": "sha512-HodsGb037iobrWSUMS7QH6Hl1kppikjA1ELiJlNSTYf/UdMEwzgj0WIp+lBNb6WZ3zTwb0tEz51j0Wee3iJ3wQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"@types/json-schema": "^7.0.9",
"@typescript-eslint/scope-manager": "5.22.0",
"@typescript-eslint/types": "5.22.0",
@@ -927,419 +1459,644 @@
"eslint-scope": "^5.1.1",
"eslint-utils": "^3.0.0"
},
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
"dependencies": {
- "eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- }
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true
- }
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/utils/node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
}
},
- "@typescript-eslint/visitor-keys": {
+ "node_modules/@typescript-eslint/visitor-keys": {
"version": "5.22.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.22.0.tgz",
"integrity": "sha512-DbgTqn2Dv5RFWluG88tn0pP6Ex0ROF+dpDO1TNNZdRtLjUr6bdznjA6f/qNqJLjd2PgguAES2Zgxh/JzwzETDg==",
"dev": true,
- "requires": {
+ "dependencies": {
"@typescript-eslint/types": "5.22.0",
"eslint-visitor-keys": "^3.0.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "@ungap/promise-all-settled": {
+ "node_modules/@ungap/promise-all-settled": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
"integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
"dev": true
},
- "abab": {
+ "node_modules/@xmldom/xmldom": {
+ "version": "0.8.8",
+ "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.8.tgz",
+ "integrity": "sha512-0LNz4EY8B/8xXY86wMrQ4tz6zEHZv9ehFMJPm8u2gq5lQ71cfRKdaKyxfJAx5aUoyzx0qzgURblTisPGgz3d+Q==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/abab": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
"integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q=="
},
- "abbrev": {
+ "node_modules/abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
- "optional": true
+ "devOptional": true
+ },
+ "node_modules/abort-controller": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
+ "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "event-target-shim": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=6.5"
+ }
},
- "accepts": {
+ "node_modules/accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
"integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
- "requires": {
+ "dependencies": {
"mime-types": "~2.1.34",
"negotiator": "0.6.3"
+ },
+ "engines": {
+ "node": ">= 0.6"
}
},
- "acorn": {
+ "node_modules/acorn": {
"version": "8.7.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ=="
+ "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
},
- "acorn-globals": {
+ "node_modules/acorn-globals": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
"integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
- "requires": {
+ "dependencies": {
"acorn": "^7.1.1",
"acorn-walk": "^7.1.1"
+ }
+ },
+ "node_modules/acorn-globals/node_modules/acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "bin": {
+ "acorn": "bin/acorn"
},
- "dependencies": {
- "acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
- }
+ "engines": {
+ "node": ">=0.4.0"
}
},
- "acorn-jsx": {
+ "node_modules/acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
},
- "acorn-walk": {
+ "node_modules/acorn-walk": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/adal-node": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/adal-node/-/adal-node-0.2.4.tgz",
+ "integrity": "sha512-zIcvbwQFKMUtKxxj8YMHeTT1o/TPXfVNsTXVgXD8sxwV6h4AFQgK77dRciGhuEF9/Sdm3UQPJVPc/6XxrccSeA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@xmldom/xmldom": "^0.8.3",
+ "async": "^2.6.3",
+ "axios": "^0.21.1",
+ "date-utils": "*",
+ "jws": "3.x.x",
+ "underscore": ">= 1.3.1",
+ "uuid": "^3.1.0",
+ "xpath.js": "~1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.6.15"
+ }
+ },
+ "node_modules/adal-node/node_modules/async": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
+ "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "node_modules/adal-node/node_modules/jws": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+ "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "jwa": "^1.4.1",
+ "safe-buffer": "^5.0.1"
+ }
},
- "adm-zip": {
+ "node_modules/adm-zip": {
"version": "0.5.9",
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.9.tgz",
- "integrity": "sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg=="
+ "integrity": "sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg==",
+ "engines": {
+ "node": ">=6.0"
+ }
},
- "after": {
+ "node_modules/after": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
"integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
},
- "agent-base": {
+ "node_modules/agent-base": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "requires": {
+ "dependencies": {
"debug": "4"
},
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/agent-base/node_modules/debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
"dependencies": {
- "debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "aggregate-error": {
+ "node_modules/agent-base/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/agentkeepalive": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz",
+ "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "humanize-ms": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/aggregate-error": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
"integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
"optional": true,
- "requires": {
+ "dependencies": {
"clean-stack": "^2.0.0",
"indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "ajv": {
+ "node_modules/ajv": {
"version": "8.12.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
- "requires": {
+ "dependencies": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
"uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
- "ajv-formats": {
+ "node_modules/ajv-formats": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
"integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
- "requires": {
+ "dependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependencies": {
"ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
}
},
- "ansi-colors": {
+ "node_modules/ansi-colors": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
"integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=8"
+ }
},
- "ansi-styles": {
+ "node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "requires": {
+ "dependencies": {
"color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "anymatch": {
+ "node_modules/anymatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
"dev": true,
- "requires": {
+ "dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
}
},
- "aproba": {
+ "node_modules/aproba": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
"integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
"optional": true
},
- "are-we-there-yet": {
+ "node_modules/are-we-there-yet": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
"integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
"optional": true,
- "requires": {
+ "dependencies": {
"delegates": "^1.0.0",
"readable-stream": "^3.6.0"
},
- "dependencies": {
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "optional": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "optional": true
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "optional": true,
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- }
+ "engines": {
+ "node": ">=10"
}
},
- "argparse": {
+ "node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
},
- "array-flatten": {
+ "node_modules/array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
},
- "array-includes": {
+ "node_modules/array-includes": {
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz",
"integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
"es-abstract": "^1.19.1",
"get-intrinsic": "^1.1.1",
"is-string": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "array-union": {
+ "node_modules/array-union": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
},
- "array.prototype.flat": {
+ "node_modules/array.prototype.flat": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz",
"integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
"es-abstract": "^1.19.2",
"es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "arraybuffer.slice": {
+ "node_modules/arraybuffer.slice": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
"integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog=="
},
- "asap": {
+ "node_modules/asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
},
- "asn1": {
+ "node_modules/asn1": {
"version": "0.2.6",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
"integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
- "requires": {
+ "dependencies": {
"safer-buffer": "~2.1.0"
}
},
- "assert-plus": {
+ "node_modules/assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "engines": {
+ "node": ">=0.8"
+ }
},
- "async": {
+ "node_modules/async": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
"integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g=="
},
- "asynckit": {
+ "node_modules/async-stacktrace": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/async-stacktrace/-/async-stacktrace-0.0.2.tgz",
+ "integrity": "sha512-7aRR7I8Vlo3qEqeLzkLzlZHdQFQvWbhDjxeWKKUDI1d3WA6DXqGOlYAHYe0E5dS/uc5Nldyul+Z3EhFcKkPauw==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
- "aws-sign2": {
+ "node_modules/aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "engines": {
+ "node": "*"
+ }
},
- "aws4": {
+ "node_modules/aws4": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
},
- "backo2": {
+ "node_modules/axios": {
+ "version": "0.21.4",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
+ "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "follow-redirects": "^1.14.0"
+ }
+ },
+ "node_modules/axios-cookiejar-support": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-1.0.1.tgz",
+ "integrity": "sha512-IZJxnAJ99XxiLqNeMOqrPbfR7fRyIfaoSLdPUf4AMQEGkH8URs0ghJK/xtqBsD+KsSr3pKl4DEQjCn834pHMig==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "is-redirect": "^1.0.0",
+ "pify": "^5.0.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "peerDependencies": {
+ "@types/tough-cookie": ">=2.3.3",
+ "axios": ">=0.16.2",
+ "tough-cookie": ">=2.3.3"
+ }
+ },
+ "node_modules/backo2": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
"integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
},
- "bail": {
+ "node_modules/bail": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
- "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
},
- "balanced-match": {
+ "node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
- "base64-arraybuffer": {
+ "node_modules/base64-arraybuffer": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz",
- "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI="
+ "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
},
- "base64-js": {
+ "node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
},
- "base64id": {
+ "node_modules/base64id": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
- "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="
+ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
+ "engines": {
+ "node": "^4.5.0 || >= 5.9"
+ }
},
- "bath-es5": {
+ "node_modules/bath-es5": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/bath-es5/-/bath-es5-3.0.3.tgz",
"integrity": "sha512-PdCioDToH3t84lP40kUFCKWCOCH389Dl1kbC8FGoqOwamxsmqxxnJSXdkTOsPoNHXjem4+sJ+bbNoQm5zeCqxg=="
},
- "bcrypt-pbkdf": {
+ "node_modules/bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "requires": {
+ "dependencies": {
"tweetnacl": "^0.14.3"
}
},
- "bignumber.js": {
+ "node_modules/bignumber.js": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
- "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
+ "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==",
+ "engines": {
+ "node": "*"
+ }
},
- "binary-extensions": {
+ "node_modules/binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
},
- "binary-search": {
+ "node_modules/binary-search": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/binary-search/-/binary-search-1.3.6.tgz",
"integrity": "sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA=="
},
- "bl": {
+ "node_modules/bl": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz",
"integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==",
- "requires": {
+ "dependencies": {
"readable-stream": "^2.3.5",
"safe-buffer": "^5.1.1"
- },
+ }
+ },
+ "node_modules/bl/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "node_modules/bl/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "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"
- }
- },
- "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==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
+ "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"
+ }
+ },
+ "node_modules/bl/node_modules/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==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
}
},
- "blob": {
+ "node_modules/blob": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
"integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig=="
},
- "bluebird": {
+ "node_modules/bluebird": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz",
"integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE="
},
- "body-parser": {
+ "node_modules/body-parser": {
"version": "1.20.1",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
"integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
- "requires": {
+ "dependencies": {
"bytes": "3.1.2",
"content-type": "~1.0.4",
"debug": "2.6.9",
@@ -1352,86 +2109,123 @@
"raw-body": "2.5.1",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
}
},
- "brace-expansion": {
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "requires": {
+ "dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
- "braces": {
+ "node_modules/braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
- "requires": {
+ "dependencies": {
"fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "browser-process-hrtime": {
+ "node_modules/browser-process-hrtime": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
"integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
},
- "browser-stdout": {
+ "node_modules/browser-stdout": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
"dev": true
},
- "bson": {
+ "node_modules/bson": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz",
- "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg=="
+ "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==",
+ "engines": {
+ "node": ">=0.6.19"
+ }
},
- "buffer": {
+ "node_modules/buffer": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
- "requires": {
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
"base64-js": "^1.3.1",
"ieee754": "^1.2.1"
}
},
- "buffer-equal-constant-time": {
+ "node_modules/buffer-equal-constant-time": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
"integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
},
- "buffer-from": {
+ "node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
},
- "buffer-writer": {
+ "node_modules/buffer-writer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz",
- "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw=="
+ "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==",
+ "engines": {
+ "node": ">=4"
+ }
},
- "builtins": {
+ "node_modules/builtins": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/builtins/-/builtins-4.1.0.tgz",
"integrity": "sha512-1bPRZQtmKaO6h7qV1YHXNtr6nCK28k0Zo95KM4dXfILcZZwoHJBN1m3lfLv9LPkcOZlrSr+J1bzMaZFO98Yq0w==",
"dev": true,
- "requires": {
+ "dependencies": {
"semver": "^7.0.0"
}
},
- "bytes": {
+ "node_modules/bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "cacache": {
+ "node_modules/cacache": {
"version": "15.3.0",
"resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
"integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
"optional": true,
- "requires": {
+ "dependencies": {
"@npmcli/fs": "^1.0.0",
"@npmcli/move-file": "^1.0.1",
"chownr": "^2.0.0",
@@ -1450,544 +2244,1049 @@
"ssri": "^8.0.1",
"tar": "^6.0.2",
"unique-filename": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 10"
}
},
- "call-bind": {
+ "node_modules/call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
- "requires": {
+ "dependencies": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "callsites": {
+ "node_modules/call-me-maybe": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
+ "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "engines": {
+ "node": ">=6"
+ }
},
- "camelcase": {
+ "node_modules/camelcase": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "caseless": {
+ "node_modules/caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
- "cassandra-driver": {
+ "node_modules/cassandra-driver": {
"version": "4.6.3",
"resolved": "https://registry.npmjs.org/cassandra-driver/-/cassandra-driver-4.6.3.tgz",
"integrity": "sha512-npW670TXjTHrdb15LUFN01wssb9vvz6SuNYcppesoKcUXx3Q29nXVhRtnvsnkG0BaSnDGvCCR4udrzYLsbh+sg==",
- "requires": {
+ "dependencies": {
"@types/long": "^4.0.0",
"@types/node": ">=8",
"adm-zip": "^0.5.3",
"long": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "ccount": {
+ "node_modules/ccount": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
- "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
},
- "chalk": {
+ "node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "requires": {
+ "dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "character-entities-html4": {
+ "node_modules/channels": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/channels/-/channels-0.0.4.tgz",
+ "integrity": "sha512-4zRxUJ/sN+GmA0NeB1wIBA8xzU6C30FsGkSIWob7OLIQVwMKE/ct9n3RLfq8XiLUpafK5gWg7+HuUVzXMXYqVw==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/character-entities-html4": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
- "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
},
- "character-entities-legacy": {
+ "node_modules/character-entities-legacy": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
- "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/cheerio": {
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
+ "integrity": "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "css-select": "~1.2.0",
+ "dom-serializer": "~0.1.0",
+ "entities": "~1.1.1",
+ "htmlparser2": "^3.9.1",
+ "lodash.assignin": "^4.0.9",
+ "lodash.bind": "^4.1.4",
+ "lodash.defaults": "^4.0.1",
+ "lodash.filter": "^4.4.0",
+ "lodash.flatten": "^4.2.0",
+ "lodash.foreach": "^4.3.0",
+ "lodash.map": "^4.4.0",
+ "lodash.merge": "^4.4.0",
+ "lodash.pick": "^4.2.1",
+ "lodash.reduce": "^4.4.0",
+ "lodash.reject": "^4.4.0",
+ "lodash.some": "^4.4.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "chokidar": {
+ "node_modules/chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"dev": true,
- "requires": {
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
- "fsevents": "~2.3.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
},
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
"dependencies": {
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- }
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
}
},
- "chownr": {
+ "node_modules/chownr": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
- "optional": true
+ "optional": true,
+ "engines": {
+ "node": ">=10"
+ }
},
- "clean-css": {
+ "node_modules/clean-css": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz",
"integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==",
- "requires": {
+ "dependencies": {
"source-map": "~0.6.0"
+ },
+ "engines": {
+ "node": ">= 10.0"
}
},
- "clean-stack": {
+ "node_modules/clean-stack": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
"integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "optional": true
+ "optional": true,
+ "engines": {
+ "node": ">=6"
+ }
},
- "cliui": {
+ "node_modules/cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
"integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^7.0.0"
- },
+ }
+ },
+ "node_modules/cliui/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
"dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "cluster-key-slot": {
+ "node_modules/cluster-key-slot": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz",
- "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA=="
+ "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "color-convert": {
+ "node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "requires": {
+ "dependencies": {
"color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
}
},
- "color-name": {
+ "node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
- "color-support": {
+ "node_modules/color-support": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
"integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
- "optional": true
+ "optional": true,
+ "bin": {
+ "color-support": "bin.js"
+ }
},
- "combined-stream": {
+ "node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "requires": {
+ "dependencies": {
"delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
}
},
- "comma-separated-tokens": {
+ "node_modules/comma-separated-tokens": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz",
- "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg=="
+ "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
},
- "commander": {
+ "node_modules/commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
},
- "component-bind": {
+ "node_modules/component-bind": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
"integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
},
- "component-emitter": {
+ "node_modules/component-emitter": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
},
- "component-inherit": {
+ "node_modules/component-inherit": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
"integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
},
- "concat-map": {
+ "node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
- "console-control-strings": {
+ "node_modules/concurrently": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.0.tgz",
+ "integrity": "sha512-nnLMxO2LU492mTUj9qX/az/lESonSZu81UznYDoXtz1IQf996ixVqPAgHXwvHiHCAef/7S8HIK+fTFK7Ifk8YA==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.2",
+ "date-fns": "^2.30.0",
+ "lodash": "^4.17.21",
+ "rxjs": "^7.8.1",
+ "shell-quote": "^1.8.1",
+ "spawn-command": "0.0.2",
+ "supports-color": "^8.1.1",
+ "tree-kill": "^1.2.2",
+ "yargs": "^17.7.2"
+ },
+ "bin": {
+ "conc": "dist/bin/concurrently.js",
+ "concurrently": "dist/bin/concurrently.js"
+ },
+ "engines": {
+ "node": "^14.13.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
+ }
+ },
+ "node_modules/concurrently/node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/concurrently/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/concurrently/node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/concurrently/node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/console-control-strings": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
"optional": true
},
- "content-disposition": {
+ "node_modules/content-disposition": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
- "requires": {
+ "dependencies": {
"safe-buffer": "5.2.1"
},
- "dependencies": {
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/content-disposition/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
}
- }
+ ]
},
- "content-type": {
+ "node_modules/content-type": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "cookie": {
+ "node_modules/cookie": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
- "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
+ "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "cookie-parser": {
+ "node_modules/cookie-parser": {
"version": "1.4.6",
"resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz",
"integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==",
- "requires": {
+ "dependencies": {
"cookie": "0.4.1",
"cookie-signature": "1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "cookie-signature": {
+ "node_modules/cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
- "cookiejar": {
+ "node_modules/cookiejar": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz",
"integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw=="
},
- "core-util-is": {
+ "node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
},
- "cross-spawn": {
+ "node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "requires": {
+ "dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
}
},
- "cssom": {
+ "node_modules/css-select": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "boolbase": "~1.0.0",
+ "css-what": "2.1",
+ "domutils": "1.5.1",
+ "nth-check": "~1.0.1"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
+ "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/cssom": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
"integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw=="
},
- "cssstyle": {
+ "node_modules/cssstyle": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
"integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
- "requires": {
+ "dependencies": {
"cssom": "~0.3.6"
},
- "dependencies": {
- "cssom": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
- }
+ "engines": {
+ "node": ">=8"
}
},
- "dashdash": {
+ "node_modules/cssstyle/node_modules/cssom": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
+ },
+ "node_modules/dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "requires": {
+ "dependencies": {
"assert-plus": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10"
}
},
- "data-urls": {
+ "node_modules/data-urls": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.1.tgz",
"integrity": "sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw==",
- "requires": {
+ "dependencies": {
"abab": "^2.0.3",
"whatwg-mimetype": "^3.0.0",
"whatwg-url": "^10.0.0"
+ },
+ "engines": {
+ "node": ">=12"
}
},
- "debug": {
+ "node_modules/date-fns": {
+ "version": "2.30.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
+ "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.21.0"
+ },
+ "engines": {
+ "node": ">=0.11"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/date-fns"
+ }
+ },
+ "node_modules/date-format": {
+ "version": "4.0.14",
+ "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz",
+ "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/date-utils": {
+ "version": "1.2.21",
+ "resolved": "https://registry.npmjs.org/date-utils/-/date-utils-1.2.21.tgz",
+ "integrity": "sha512-wJMBjqlwXR0Iv0wUo/lFbhSQ7MmG1hl36iuxuE91kW+5b5sWbase73manEqNH9sOLFAMG83B4ffNKq9/Iq0FVA==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">0.4.0"
+ }
+ },
+ "node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
+ "dependencies": {
"ms": "2.0.0"
}
},
- "decamelize": {
+ "node_modules/decamelize": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
"integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "decimal.js": {
+ "node_modules/decimal.js": {
"version": "10.3.1",
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
"integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ=="
},
- "deep-is": {
+ "node_modules/decompress-response": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
+ "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "mimic-response": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
},
- "define-lazy-prop": {
+ "node_modules/define-lazy-prop": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
- "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="
+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+ "engines": {
+ "node": ">=8"
+ }
},
- "define-properties": {
+ "node_modules/define-properties": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
"integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
- "requires": {
+ "dependencies": {
"has-property-descriptors": "^1.0.0",
"object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "delayed-stream": {
+ "node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "engines": {
+ "node": ">=0.4.0"
+ }
},
- "delegates": {
+ "node_modules/delegates": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
"optional": true
},
- "denque": {
+ "node_modules/denque": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz",
- "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw=="
+ "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==",
+ "engines": {
+ "node": ">=0.10"
+ }
},
- "depd": {
+ "node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "dereference-json-schema": {
+ "node_modules/dereference-json-schema": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/dereference-json-schema/-/dereference-json-schema-0.2.1.tgz",
"integrity": "sha512-uzJsrg225owJyRQ8FNTPHIuBOdSzIZlHhss9u6W8mp7jJldHqGuLv9cULagP/E26QVJDnjtG8U7Dw139mM1ydA=="
},
- "destroy": {
+ "node_modules/destroy": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
},
- "detect-libc": {
+ "node_modules/detect-libc": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz",
"integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==",
- "optional": true
+ "optional": true,
+ "engines": {
+ "node": ">=8"
+ }
},
- "dezalgo": {
+ "node_modules/dezalgo": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
"integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==",
- "requires": {
+ "dependencies": {
"asap": "^2.0.0",
"wrappy": "1"
}
},
- "diff": {
+ "node_modules/diff": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
"integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=0.3.1"
+ }
},
- "dir-glob": {
+ "node_modules/dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
"dev": true,
- "requires": {
+ "dependencies": {
"path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "dirty": {
+ "node_modules/dirty": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/dirty/-/dirty-1.1.3.tgz",
- "integrity": "sha512-PlnV9+KeJ6bh8o5qQZqRnD80Wegijyr47dpwxCIuJ6SzwJ6/deO+NRTEnq/mubIYtBvBBgWznlE6dZ+nQsS/og=="
+ "integrity": "sha512-PlnV9+KeJ6bh8o5qQZqRnD80Wegijyr47dpwxCIuJ6SzwJ6/deO+NRTEnq/mubIYtBvBBgWznlE6dZ+nQsS/og==",
+ "engines": {
+ "node": ">=12.13.0"
+ }
},
- "doctrine": {
+ "node_modules/doctrine": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
"integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
"dev": true,
- "requires": {
+ "dependencies": {
"esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/dom-serializer": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
+ "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "domelementtype": "^1.3.0",
+ "entities": "^1.1.1"
}
},
- "domexception": {
+ "node_modules/domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/domexception": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
"integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==",
- "requires": {
+ "dependencies": {
"webidl-conversions": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
}
},
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
+ "node_modules/domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "domelementtype": "1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "node_modules/ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "dependencies": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
}
},
- "ecdsa-sig-formatter": {
+ "node_modules/ecdsa-sig-formatter": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
"integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
- "requires": {
+ "dependencies": {
"safe-buffer": "^5.0.1"
}
},
- "ee-first": {
+ "node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
- "ejs": {
+ "node_modules/ejs": {
"version": "3.1.7",
"resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.7.tgz",
"integrity": "sha512-BIar7R6abbUxDA3bfXrO4DSgwo8I+fB5/1zgujl3HLLjwd6+9iOnrT+t3grn2qbk9vOgBubXOFwX2m9axoFaGw==",
- "requires": {
+ "dependencies": {
"jake": "^10.8.5"
+ },
+ "bin": {
+ "ejs": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/elasticsearch": {
+ "version": "16.7.3",
+ "resolved": "https://registry.npmjs.org/elasticsearch/-/elasticsearch-16.7.3.tgz",
+ "integrity": "sha512-e9kUNhwnIlu47fGAr4W6yZJbkpsgQJB0TqNK8rCANe1J4P65B1sGnbCFTgcKY3/dRgCWnuP1AJ4obvzW604xEQ==",
+ "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "agentkeepalive": "^3.4.1",
+ "chalk": "^1.0.0",
+ "lodash": "^4.17.10"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/elasticsearch/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/elasticsearch/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/elasticsearch/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/elasticsearch/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/elasticsearch/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.8.0"
}
},
- "elasticsearch7": {
- "version": "npm:@elastic/elasticsearch@7.17.0",
+ "node_modules/elasticsearch7": {
+ "name": "@elastic/elasticsearch",
+ "version": "7.17.0",
"resolved": "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-7.17.0.tgz",
"integrity": "sha512-5QLPCjd0uLmLj1lSuKSThjNpq39f6NmlTy9ROLFwG5gjyTgpwSqufDeYG/Fm43Xs05uF7WcscoO7eguI3HuuYA==",
- "requires": {
+ "dependencies": {
"debug": "^4.3.1",
"hpagent": "^0.1.1",
"ms": "^2.1.3",
"secure-json-parse": "^2.4.0"
- },
+ }
+ },
+ "node_modules/elasticsearch7/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "requires": {
- "ms": "2.1.2"
- },
- "dependencies": {
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- }
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "emoji-regex": {
+ "node_modules/elasticsearch7/node_modules/debug/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/elasticsearch7/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "devOptional": true
},
- "encodeurl": {
+ "node_modules/encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "encoding": {
+ "node_modules/encoding": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
"integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
"optional": true,
- "requires": {
+ "dependencies": {
"iconv-lite": "^0.6.2"
+ }
+ },
+ "node_modules/encoding/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "optional": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
},
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
"dependencies": {
- "iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "optional": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- }
- }
+ "once": "^1.4.0"
}
},
- "engine.io": {
+ "node_modules/engine.io": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz",
"integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==",
- "requires": {
+ "dependencies": {
"accepts": "~1.3.4",
"base64id": "2.0.0",
"cookie": "~0.4.1",
@@ -1995,32 +3294,15 @@
"engine.io-parser": "~2.2.0",
"ws": "~7.4.2"
},
- "dependencies": {
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- },
- "ws": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
- "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A=="
- }
+ "engines": {
+ "node": ">=8.0.0"
}
},
- "engine.io-client": {
+ "node_modules/engine.io-client": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz",
"integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==",
- "requires": {
+ "dependencies": {
"component-emitter": "~1.3.0",
"component-inherit": "0.0.3",
"debug": "~3.1.0",
@@ -2032,28 +3314,41 @@
"ws": "~7.4.2",
"xmlhttprequest-ssl": "~1.6.2",
"yeast": "0.1.2"
- },
+ }
+ },
+ "node_modules/engine.io-client/node_modules/debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
"dependencies": {
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "requires": {
- "ms": "2.0.0"
- }
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/engine.io-client/node_modules/ws": {
+ "version": "7.4.6",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
+ "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
+ "engines": {
+ "node": ">=8.3.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": "^5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
},
- "ws": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
- "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A=="
+ "utf-8-validate": {
+ "optional": true
}
}
},
- "engine.io-parser": {
+ "node_modules/engine.io-parser": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz",
"integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==",
- "requires": {
+ "dependencies": {
"after": "0.8.2",
"arraybuffer.slice": "~0.0.7",
"base64-arraybuffer": "0.1.4",
@@ -2061,5911 +3356,15257 @@
"has-binary2": "~1.0.2"
}
},
- "env-paths": {
+ "node_modules/engine.io/node_modules/debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/engine.io/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/engine.io/node_modules/ws": {
+ "version": "7.4.6",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
+ "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
+ "engines": {
+ "node": ">=8.3.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": "^5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/env-paths": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
"integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
- "optional": true
+ "optional": true,
+ "engines": {
+ "node": ">=6"
+ }
},
- "err-code": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
- "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
- "optional": true
+ "node_modules/ep_etherpad-lite": {
+ "version": "1.8.14",
+ "resolved": "https://registry.npmjs.org/ep_etherpad-lite/-/ep_etherpad-lite-1.8.14.tgz",
+ "integrity": "sha512-w3TRnwsozofewLCRkHV8/Afzyc4yXmQfoYSGEy/aGkGWFtgFYu/VDyPYDedvFQtANqPsHNArtmUPNVuw8nSLKg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "async": "^3.2.0",
+ "async-stacktrace": "0.0.2",
+ "channels": "0.0.4",
+ "cheerio": "0.22.0",
+ "clean-css": "4.2.3",
+ "cookie-parser": "1.4.5",
+ "cross-spawn": "^7.0.3",
+ "ejs": "^3.1.6",
+ "etherpad-require-kernel": "1.0.11",
+ "etherpad-yajsml": "0.0.4",
+ "express": "4.17.1",
+ "express-rate-limit": "5.2.6",
+ "express-session": "1.17.2",
+ "find-root": "1.1.0",
+ "formidable": "1.2.2",
+ "http-errors": "1.8.0",
+ "js-cookie": "^2.2.1",
+ "jsonminify": "0.4.1",
+ "languages4translatewiki": "0.1.3",
+ "lodash.clonedeep": "4.5.0",
+ "log4js": "0.6.38",
+ "measured-core": "1.51.1",
+ "mime-types": "^2.1.27",
+ "nodeify": "1.0.1",
+ "npm": "6.14.13",
+ "openapi-backend": "^3.9.1",
+ "proxy-addr": "^2.0.6",
+ "rate-limiter-flexible": "^2.1.4",
+ "rehype": "^10.0.0",
+ "rehype-minify-whitespace": "^4.0.5",
+ "request": "2.88.2",
+ "resolve": "1.20.0",
+ "security": "1.0.0",
+ "semver": "5.7.1",
+ "socket.io": "^2.4.1",
+ "terser": "^4.7.0",
+ "threads": "^1.4.0",
+ "tiny-worker": "^2.3.0",
+ "tinycon": "0.6.8",
+ "ueberdb2": "^1.4.7",
+ "underscore": "1.13.1",
+ "unorm": "1.6.0",
+ "wtfnode": "^0.9.0"
+ },
+ "bin": {
+ "etherpad-lite": "node/server.js"
+ },
+ "engines": {
+ "node": ">=12.13.0",
+ "npm": ">=5.5.1"
+ }
},
- "es-abstract": {
- "version": "1.19.5",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz",
- "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==",
- "requires": {
- "call-bind": "^1.0.2",
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.1.1",
- "get-symbol-description": "^1.0.0",
- "has": "^1.0.3",
- "has-symbols": "^1.0.3",
- "internal-slot": "^1.0.3",
- "is-callable": "^1.2.4",
- "is-negative-zero": "^2.0.2",
- "is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.2",
- "is-string": "^1.0.7",
- "is-weakref": "^1.0.2",
- "object-inspect": "^1.12.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.2",
- "string.prototype.trimend": "^1.0.4",
- "string.prototype.trimstart": "^1.0.4",
- "unbox-primitive": "^1.0.1"
+ "node_modules/ep_etherpad-lite/node_modules/@apidevtools/json-schema-ref-parser": {
+ "version": "9.1.2",
+ "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.1.2.tgz",
+ "integrity": "sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@jsdevtools/ono": "^7.1.3",
+ "@types/json-schema": "^7.0.6",
+ "call-me-maybe": "^1.0.1",
+ "js-yaml": "^4.1.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/@azure/core-tracing": {
+ "version": "1.0.0-preview.12",
+ "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.12.tgz",
+ "integrity": "sha512-nvo2Wc4EKZGN6eFu9n3U7OXmASmL8VxoPIH7xaD6OlQqi44bouF0YIi9ID5rEsKLiAU59IYx6M297nqWVMWPDg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@opentelemetry/api": "^1.0.0",
+ "tslib": "^2.2.0"
},
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/@azure/identity": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-1.5.2.tgz",
+ "integrity": "sha512-vqyeRbd2i0h9F4mqW5JbkP1xfabqKQ21l/81osKhpOQ2LtwaJW6nw4+0PsVYnxcbPHFCIZt6EWAk74a3OGYZJA==",
+ "dev": true,
+ "peer": true,
"dependencies": {
- "has-symbols": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
- }
+ "@azure/core-auth": "^1.3.0",
+ "@azure/core-client": "^1.0.0",
+ "@azure/core-rest-pipeline": "^1.1.0",
+ "@azure/core-tracing": "1.0.0-preview.12",
+ "@azure/logger": "^1.0.0",
+ "@azure/msal-node": "1.0.0-beta.6",
+ "@types/stoppable": "^1.1.0",
+ "axios": "^0.21.1",
+ "events": "^3.0.0",
+ "jws": "^4.0.0",
+ "msal": "^1.0.2",
+ "open": "^7.0.0",
+ "qs": "^6.7.0",
+ "stoppable": "^1.1.0",
+ "tslib": "^2.0.0",
+ "uuid": "^8.3.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "optionalDependencies": {
+ "keytar": "^7.3.0"
}
},
- "es-aggregate-error": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/es-aggregate-error/-/es-aggregate-error-1.0.8.tgz",
- "integrity": "sha512-AKUb5MKLWMozPlFRHOKqWD7yta5uaEhH21qwtnf6FlKjNjTJOoqFi0/G14+FfSkIQhhu6X68Af4xgRC6y8qG4A==",
- "requires": {
- "define-properties": "^1.1.4",
- "es-abstract": "^1.19.5",
- "function-bind": "^1.1.1",
- "functions-have-names": "^1.2.3",
- "get-intrinsic": "^1.1.1",
- "globalthis": "^1.0.2",
- "has-property-descriptors": "^1.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/@azure/identity/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "dev": true,
+ "peer": true,
+ "bin": {
+ "uuid": "dist/bin/uuid"
}
},
- "es-shim-unscopables": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
- "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "node_modules/ep_etherpad-lite/node_modules/@azure/msal-node": {
+ "version": "1.0.0-beta.6",
+ "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.0.0-beta.6.tgz",
+ "integrity": "sha512-ZQI11Uz1j0HJohb9JZLRD8z0moVcPks1AFW4Q/Gcl67+QvH4aKEJti7fjCcipEEZYb/qzLSO8U6IZgPYytsiJQ==",
"dev": true,
- "requires": {
- "has": "^1.0.3"
+ "peer": true,
+ "dependencies": {
+ "@azure/msal-common": "^4.0.0",
+ "axios": "^0.21.1",
+ "jsonwebtoken": "^8.5.1",
+ "uuid": "^8.3.0"
}
},
- "es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
+ "node_modules/ep_etherpad-lite/node_modules/@azure/msal-node/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "dev": true,
+ "peer": true,
+ "bin": {
+ "uuid": "dist/bin/uuid"
}
},
- "escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true
+ "node_modules/ep_etherpad-lite/node_modules/@js-joda/core": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-3.2.0.tgz",
+ "integrity": "sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg==",
+ "dev": true,
+ "peer": true
},
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+ "node_modules/ep_etherpad-lite/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
},
- "escape-string-regexp": {
+ "node_modules/ep_etherpad-lite/node_modules/bail": {
"version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
+ "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
+ "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==",
+ "dev": true,
+ "peer": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
},
- "escodegen": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
- "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
- "requires": {
- "esprima": "^4.0.1",
- "estraverse": "^5.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1",
- "source-map": "~0.6.1"
+ "node_modules/ep_etherpad-lite/node_modules/bl": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz",
+ "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "buffer": "^6.0.3",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
}
},
- "eslint": {
- "version": "8.14.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.14.0.tgz",
- "integrity": "sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==",
+ "node_modules/ep_etherpad-lite/node_modules/bl/node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true,
- "requires": {
- "@eslint/eslintrc": "^1.2.2",
- "@humanwhocodes/config-array": "^0.9.2",
- "ajv": "^6.10.0",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.1.1",
- "eslint-utils": "^3.0.0",
- "eslint-visitor-keys": "^3.3.0",
- "espree": "^9.3.1",
- "esquery": "^1.4.0",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^6.0.1",
- "globals": "^13.6.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.0.4",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
- "regexpp": "^3.2.0",
- "strip-ansi": "^6.0.1",
- "strip-json-comments": "^3.1.0",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
- },
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "dev": true,
+ "peer": true,
"dependencies": {
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "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"
- }
- },
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "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==",
- "dev": true
- },
- "levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "optionator": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
- "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
- "dev": true,
- "requires": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.3"
- }
- },
- "prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1"
- }
- }
+ "bytes": "3.1.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
+ },
+ "engines": {
+ "node": ">= 0.8"
}
},
- "eslint-config-etherpad": {
- "version": "3.0.13",
- "resolved": "https://registry.npmjs.org/eslint-config-etherpad/-/eslint-config-etherpad-3.0.13.tgz",
- "integrity": "sha512-Bwt1gDxThlXhY6wan1fb3Jy9kI+yFGctp7+JX6Xs+BwbOdrB4qObgnLKdcLYPKPqv9c4xTSKo3C4BdhTkg7WtQ==",
+ "node_modules/ep_etherpad-lite/node_modules/body-parser/node_modules/depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
"dev": true,
- "requires": {
- "@rushstack/eslint-patch": "^1.1.3",
- "@typescript-eslint/eslint-plugin": "^5.22.0",
- "@typescript-eslint/parser": "^5.22.0",
- "eslint-import-resolver-typescript": "^2.7.1",
- "eslint-plugin-cypress": "^2.12.1",
- "eslint-plugin-eslint-comments": "^3.2.0",
- "eslint-plugin-import": "^2.26.0",
- "eslint-plugin-mocha": "^10.0.4",
- "eslint-plugin-n": "^15.2.0",
- "eslint-plugin-prefer-arrow": "^1.2.3",
- "eslint-plugin-promise": "^6.0.0",
- "eslint-plugin-you-dont-need-lodash-underscore": "^6.12.0"
+ "peer": true,
+ "engines": {
+ "node": ">= 0.6"
}
},
- "eslint-import-resolver-node": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
- "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
+ "node_modules/ep_etherpad-lite/node_modules/body-parser/node_modules/http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
"dev": true,
- "requires": {
- "debug": "^3.2.7",
- "resolve": "^1.20.0"
- },
+ "peer": true,
"dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- }
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
}
},
- "eslint-import-resolver-typescript": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz",
- "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==",
+ "node_modules/ep_etherpad-lite/node_modules/body-parser/node_modules/qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
"dev": true,
- "requires": {
- "debug": "^4.3.4",
- "glob": "^7.2.0",
- "is-glob": "^4.0.3",
- "resolve": "^1.22.0",
- "tsconfig-paths": "^3.14.1"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- }
+ "peer": true,
+ "engines": {
+ "node": ">=0.6"
}
},
- "eslint-module-utils": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz",
- "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==",
+ "node_modules/ep_etherpad-lite/node_modules/body-parser/node_modules/setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
"dev": true,
- "requires": {
- "debug": "^3.2.7",
- "find-up": "^2.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- }
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">= 0.8"
}
},
- "eslint-plugin-cypress": {
- "version": "2.12.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.12.1.tgz",
- "integrity": "sha512-c2W/uPADl5kospNDihgiLc7n87t5XhUbFDoTl6CfVkmG+kDAb5Ux10V9PoLPu9N+r7znpc+iQlcmAqT1A/89HA==",
+ "node_modules/ep_etherpad-lite/node_modules/ccount": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz",
+ "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==",
"dev": true,
- "requires": {
- "globals": "^11.12.0"
- },
- "dependencies": {
- "globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true
- }
+ "peer": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
- "eslint-plugin-es": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz",
- "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==",
+ "node_modules/ep_etherpad-lite/node_modules/character-entities-html4": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz",
+ "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==",
"dev": true,
- "requires": {
- "eslint-utils": "^2.0.0",
- "regexpp": "^3.0.0"
- },
- "dependencies": {
- "eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^1.1.0"
- }
- },
- "eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true
- }
+ "peer": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
- "eslint-plugin-eslint-comments": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz",
- "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==",
+ "node_modules/ep_etherpad-lite/node_modules/character-entities-legacy": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
+ "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
"dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.5",
- "ignore": "^5.0.5"
+ "peer": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
- "eslint-plugin-import": {
- "version": "2.26.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
- "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==",
+ "node_modules/ep_etherpad-lite/node_modules/clean-css": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
+ "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
"dev": true,
- "requires": {
- "array-includes": "^3.1.4",
- "array.prototype.flat": "^1.2.5",
- "debug": "^2.6.9",
- "doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.6",
- "eslint-module-utils": "^2.7.3",
- "has": "^1.0.3",
- "is-core-module": "^2.8.1",
- "is-glob": "^4.0.3",
- "minimatch": "^3.1.2",
- "object.values": "^1.1.5",
- "resolve": "^1.22.0",
- "tsconfig-paths": "^3.14.1"
- },
+ "peer": true,
"dependencies": {
- "doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- }
+ "source-map": "~0.6.0"
+ },
+ "engines": {
+ "node": ">= 4.0"
}
},
- "eslint-plugin-mocha": {
- "version": "10.0.4",
- "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.0.4.tgz",
- "integrity": "sha512-8wzAeepVY027oBHz/TmBmUr7vhVqoC1KTFeDybFLhbaWKx+aQ7fJJVuUsqcUy+L+G+XvgQBJY+cbAf7hl5DF7Q==",
+ "node_modules/ep_etherpad-lite/node_modules/comma-separated-tokens": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
+ "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==",
"dev": true,
- "requires": {
- "eslint-utils": "^3.0.0",
- "ramda": "^0.28.0"
+ "peer": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
- "eslint-plugin-n": {
- "version": "15.2.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.2.0.tgz",
- "integrity": "sha512-lWLg++jGwC88GDGGBX3CMkk0GIWq0y41aH51lavWApOKcMQcYoL3Ayd0lEdtD3SnQtR+3qBvWQS3qGbR2BxRWg==",
+ "node_modules/ep_etherpad-lite/node_modules/content-disposition": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
"dev": true,
- "requires": {
- "builtins": "^4.0.0",
- "eslint-plugin-es": "^4.1.0",
- "eslint-utils": "^3.0.0",
- "ignore": "^5.1.1",
- "is-core-module": "^2.3.0",
- "minimatch": "^3.0.4",
- "resolve": "^1.10.1",
- "semver": "^6.3.0"
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "5.1.2"
},
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/cookie-parser": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz",
+ "integrity": "sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw==",
+ "dev": true,
+ "peer": true,
"dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
+ "cookie": "0.4.0",
+ "cookie-signature": "1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "eslint-plugin-prefer-arrow": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz",
- "integrity": "sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==",
- "dev": true
+ "node_modules/ep_etherpad-lite/node_modules/cookie-parser/node_modules/cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "eslint-plugin-promise": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.0.tgz",
- "integrity": "sha512-7GPezalm5Bfi/E22PnQxDWH2iW9GTvAlUNTztemeHb6c1BniSyoeTrM87JkC0wYdi6aQrZX9p2qEiAno8aTcbw==",
- "dev": true
+ "node_modules/ep_etherpad-lite/node_modules/destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==",
+ "dev": true,
+ "peer": true
},
- "eslint-plugin-you-dont-need-lodash-underscore": {
- "version": "6.12.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-you-dont-need-lodash-underscore/-/eslint-plugin-you-dont-need-lodash-underscore-6.12.0.tgz",
- "integrity": "sha512-WF4mNp+k2532iswT6iUd1BX6qjd3AV4cFy/09VC82GY9SsRtvkxhUIx7JNGSe0/bLyd57oTr4inPFiIaENXhGw==",
+ "node_modules/ep_etherpad-lite/node_modules/etherpad-require-kernel": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/etherpad-require-kernel/-/etherpad-require-kernel-1.0.11.tgz",
+ "integrity": "sha512-I03bkNiBMrcsJRSl0IqotUU70s9v6VISrITj/cQgAoVQSoRFbV/NUn2fPIF4LskysTpmwlmwJqgfL2FZpAtxEw==",
"dev": true,
- "requires": {
- "kebab-case": "^1.0.0"
- }
+ "peer": true
},
- "eslint-scope": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
- "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "node_modules/ep_etherpad-lite/node_modules/etherpad-yajsml": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/etherpad-yajsml/-/etherpad-yajsml-0.0.4.tgz",
+ "integrity": "sha512-rxpEOMZmv6DOCQeaDo6tztneaKF9ZxbLo/+hQcV+hn0lNrxJZ7MKIPD2pTWWnNLj6gFFfs6QQ67RfMNWIr3fSA==",
"dev": true,
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- }
+ "peer": true
},
- "eslint-utils": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
- "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "node_modules/ep_etherpad-lite/node_modules/express": {
+ "version": "4.17.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+ "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
"dev": true,
- "requires": {
- "eslint-visitor-keys": "^2.0.0"
- },
+ "peer": true,
"dependencies": {
- "eslint-visitor-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
- "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
- "dev": true
- }
+ "accepts": "~1.3.7",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.19.0",
+ "content-disposition": "0.5.3",
+ "content-type": "~1.0.4",
+ "cookie": "0.4.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "~1.1.2",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.5",
+ "qs": "6.7.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.1.2",
+ "send": "0.17.1",
+ "serve-static": "1.14.1",
+ "setprototypeof": "1.1.1",
+ "statuses": "~1.5.0",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
}
},
- "eslint-visitor-keys": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
- "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
- "dev": true
- },
- "esm": {
- "version": "3.2.25",
- "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
- "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
- "optional": true
+ "node_modules/ep_etherpad-lite/node_modules/express-rate-limit": {
+ "version": "5.2.6",
+ "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-5.2.6.tgz",
+ "integrity": "sha512-nE96xaxGfxiS5jP3tD3kIW1Jg9yQgX0rXCs3rCkZtmbWHEGyotwaezkLj7bnB41Z0uaOLM8W4AX6qHao4IZ2YA==",
+ "dev": true,
+ "peer": true
},
- "espree": {
- "version": "9.3.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz",
- "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==",
+ "node_modules/ep_etherpad-lite/node_modules/express-session": {
+ "version": "1.17.2",
+ "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.2.tgz",
+ "integrity": "sha512-mPcYcLA0lvh7D4Oqr5aNJFMtBMKPLl++OKKxkHzZ0U0oDq1rpKBnkR5f5vCHR26VeArlTOEF9td4x5IjICksRQ==",
"dev": true,
- "requires": {
- "acorn": "^8.7.0",
- "acorn-jsx": "^5.3.1",
- "eslint-visitor-keys": "^3.3.0"
+ "peer": true,
+ "dependencies": {
+ "cookie": "0.4.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~2.0.0",
+ "on-headers": "~1.0.2",
+ "parseurl": "~1.3.3",
+ "safe-buffer": "5.2.1",
+ "uid-safe": "~2.1.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ "node_modules/ep_etherpad-lite/node_modules/express-session/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "peer": true
},
- "esquery": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
- "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "node_modules/ep_etherpad-lite/node_modules/express/node_modules/cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
"dev": true,
- "requires": {
- "estraverse": "^5.1.0"
+ "peer": true,
+ "engines": {
+ "node": ">= 0.6"
}
},
- "esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "node_modules/ep_etherpad-lite/node_modules/express/node_modules/depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
"dev": true,
- "requires": {
- "estraverse": "^5.2.0"
+ "peer": true,
+ "engines": {
+ "node": ">= 0.6"
}
},
- "estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="
- },
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
+ "node_modules/ep_etherpad-lite/node_modules/express/node_modules/qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.6"
+ }
},
- "etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
+ "node_modules/ep_etherpad-lite/node_modules/express/node_modules/setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true,
+ "peer": true
},
- "etherpad-cli-client": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/etherpad-cli-client/-/etherpad-cli-client-2.0.1.tgz",
- "integrity": "sha512-cv7ep8NEkrebTIgWS/SBvpt6DhcMKSNu1zZNMFOWdoQkNRn3hVXZU8dedr4Xt5M1zBwPBSBTjisU436/TkEESA==",
+ "node_modules/ep_etherpad-lite/node_modules/finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
"dev": true,
- "requires": {
- "async": "^3.2.1",
- "socket.io-client": "^2.3.0",
- "superagent": "^7.1.1"
- },
+ "peer": true,
"dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "mime": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
- "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
- "dev": true
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- },
- "superagent": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.5.tgz",
- "integrity": "sha512-HQYyGuDRFGmZ6GNC4hq2f37KnsY9Lr0/R1marNZTgMweVDQLTLJJ6DGQ9Tj/xVVs5HEnop9EMmTbywb5P30aqw==",
- "dev": true,
- "requires": {
- "component-emitter": "^1.3.0",
- "cookiejar": "^2.1.3",
- "debug": "^4.3.4",
- "fast-safe-stringify": "^2.1.1",
- "form-data": "^4.0.0",
- "formidable": "^2.0.1",
- "methods": "^1.1.2",
- "mime": "^2.5.0",
- "qs": "^6.10.3",
- "readable-stream": "^3.6.0",
- "semver": "^7.3.7"
- }
- }
- }
- },
- "etherpad-require-kernel": {
- "version": "1.0.15",
- "resolved": "https://registry.npmjs.org/etherpad-require-kernel/-/etherpad-require-kernel-1.0.15.tgz",
- "integrity": "sha512-t8Z950sCfgS4ssex6SHhb3Ni8BQL0XdvZhMQWWDLhSWttyHgf+zPSMglBODyAUGh8mBX0XwGK7hpICGBHsvSGQ=="
- },
- "etherpad-yajsml": {
- "version": "0.0.12",
- "resolved": "https://registry.npmjs.org/etherpad-yajsml/-/etherpad-yajsml-0.0.12.tgz",
- "integrity": "sha512-lVCqsZYpFsuIz417h+O83I7eadNXJ3MnQavriFa52/KTwj6xPAzEYr0PvH7KTxcqyAFtW7ItoTNVXe2h7zGxlw==",
- "requires": {
- "mime": "^1.6.0"
- }
- },
- "events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
- },
- "express": {
- "version": "4.18.2",
- "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
- "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
- "requires": {
- "accepts": "~1.3.8",
- "array-flatten": "1.1.1",
- "body-parser": "1.20.1",
- "content-disposition": "0.5.4",
- "content-type": "~1.0.4",
- "cookie": "0.5.0",
- "cookie-signature": "1.0.6",
"debug": "2.6.9",
- "depd": "2.0.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "1.2.0",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "2.4.1",
+ "on-finished": "~2.3.0",
"parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.7",
- "qs": "6.11.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.2.1",
- "send": "0.18.0",
- "serve-static": "1.15.0",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
},
- "dependencies": {
- "cookie": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
- "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- }
+ "engines": {
+ "node": ">= 0.8"
}
},
- "express-rate-limit": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.7.0.tgz",
- "integrity": "sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA=="
+ "node_modules/ep_etherpad-lite/node_modules/formidable": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz",
+ "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==",
+ "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau",
+ "dev": true,
+ "peer": true,
+ "funding": {
+ "url": "https://ko-fi.com/tunnckoCore/commissions"
+ }
},
- "express-session": {
- "version": "npm:@etherpad/express-session@1.18.1",
- "resolved": "https://registry.npmjs.org/@etherpad/express-session/-/express-session-1.18.1.tgz",
- "integrity": "sha512-K+dYeES5iKPib+NRJ+/tX04IfTnCUnpV/aiuifI1ecQGnrWSVMuK5MrwDD0lYC/OBYWS5ovar5E+R4/IbjXknA==",
- "requires": {
- "cookie": "0.4.1",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "~2.0.0",
- "on-headers": "~1.0.2",
- "parseurl": "~1.3.3",
- "safe-buffer": "5.2.1",
- "uid-safe": "~2.1.5"
- },
+ "node_modules/ep_etherpad-lite/node_modules/hast-util-embedded": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-1.0.6.tgz",
+ "integrity": "sha512-JQMW+TJe0UAIXZMjCJ4Wf6ayDV9Yv3PBDPsHD4ExBpAspJ6MOcCX+nzVF+UJVv7OqPcg852WEMSHQPoRA+FVSw==",
+ "dev": true,
+ "peer": true,
"dependencies": {
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- }
+ "hast-util-is-element": "^1.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
- },
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
- "fast-glob": {
- "version": "3.2.11",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
- "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "node_modules/ep_etherpad-lite/node_modules/hast-util-from-parse5": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz",
+ "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==",
"dev": true,
- "requires": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
+ "peer": true,
"dependencies": {
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- }
+ "ccount": "^1.0.3",
+ "hastscript": "^5.0.0",
+ "property-information": "^5.0.0",
+ "web-namespaces": "^1.1.2",
+ "xtend": "^4.0.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+ "node_modules/ep_etherpad-lite/node_modules/hast-util-is-element": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz",
+ "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==",
+ "dev": true,
+ "peer": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
},
- "fast-safe-stringify": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
- "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
+ "node_modules/ep_etherpad-lite/node_modules/hast-util-parse-selector": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz",
+ "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==",
+ "dev": true,
+ "peer": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
},
- "fastq": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
- "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "node_modules/ep_etherpad-lite/node_modules/hast-util-to-html": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-6.1.0.tgz",
+ "integrity": "sha512-IlC+LG2HGv0Y8js3wqdhg9O2sO4iVpRDbHOPwXd7qgeagpGsnY49i8yyazwqS35RA35WCzrBQE/n0M6GG/ewxA==",
"dev": true,
- "requires": {
- "reusify": "^1.0.4"
+ "peer": true,
+ "dependencies": {
+ "ccount": "^1.0.0",
+ "comma-separated-tokens": "^1.0.1",
+ "hast-util-is-element": "^1.0.0",
+ "hast-util-whitespace": "^1.0.0",
+ "html-void-elements": "^1.0.0",
+ "property-information": "^5.2.0",
+ "space-separated-tokens": "^1.0.0",
+ "stringify-entities": "^2.0.0",
+ "unist-util-is": "^3.0.0",
+ "xtend": "^4.0.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "node_modules/ep_etherpad-lite/node_modules/hast-util-to-html/node_modules/unist-util-is": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz",
+ "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==",
"dev": true,
- "requires": {
- "flat-cache": "^3.0.4"
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/hast-util-whitespace": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz",
+ "integrity": "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==",
+ "dev": true,
+ "peer": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "filelist": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.3.tgz",
- "integrity": "sha512-LwjCsruLWQULGYKy7TX0OPtrL9kLpojOFKc5VCTxdFTV7w5zbsgqVKfnkKG7Qgjtq50gKfO56hJv88OfcGb70Q==",
- "requires": {
- "minimatch": "^5.0.1"
- },
+ "node_modules/ep_etherpad-lite/node_modules/hastscript": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz",
+ "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==",
+ "dev": true,
+ "peer": true,
"dependencies": {
- "brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- }
+ "comma-separated-tokens": "^1.0.0",
+ "hast-util-parse-selector": "^2.0.0",
+ "property-information": "^5.0.0",
+ "space-separated-tokens": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "node_modules/ep_etherpad-lite/node_modules/html-void-elements": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz",
+ "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==",
"dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
+ "peer": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
- "finalhandler": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
- "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "2.4.1",
- "parseurl": "~1.3.3",
- "statuses": "2.0.1",
- "unpipe": "~1.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/http-errors": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz",
+ "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
}
},
- "find-root": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
- "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
- },
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "node_modules/ep_etherpad-lite/node_modules/http-errors/node_modules/depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
"dev": true,
- "requires": {
- "locate-path": "^2.0.0"
+ "peer": true,
+ "engines": {
+ "node": ">= 0.6"
}
},
- "flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true
+ "node_modules/ep_etherpad-lite/node_modules/http-errors/node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true,
+ "peer": true
},
- "flat-cache": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
- "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "node_modules/ep_etherpad-lite/node_modules/is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
"dev": true,
- "requires": {
- "flatted": "^3.1.0",
- "rimraf": "^3.0.2"
+ "peer": true,
+ "engines": {
+ "node": ">=8"
}
},
- "flatted": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
- "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
- "dev": true
- },
- "follow-redirects": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz",
- "integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ=="
+ "node_modules/ep_etherpad-lite/node_modules/js-cookie": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz",
+ "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==",
+ "dev": true,
+ "peer": true
},
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+ "node_modules/ep_etherpad-lite/node_modules/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==",
+ "dev": true,
+ "peer": true
},
- "form-data": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
+ "node_modules/ep_etherpad-lite/node_modules/jsonminify": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/jsonminify/-/jsonminify-0.4.1.tgz",
+ "integrity": "sha512-pDzdcFAuojViJ1WFbK/Xosjcjo/avT8XVlntRAvUrna7ghYDrCfXafPsoyTiyEzfk6iOdclkUKH/+Q1+uuW8sA==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.8.0",
+ "npm": ">=1.1.0"
}
},
- "formidable": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz",
- "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==",
- "requires": {
- "dezalgo": "^1.0.4",
- "hexoid": "^1.0.0",
- "once": "^1.4.0",
- "qs": "^6.11.0"
+ "node_modules/ep_etherpad-lite/node_modules/log4js": {
+ "version": "0.6.38",
+ "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz",
+ "integrity": "sha512-Cd+klbx7lkiaamEId9/0odHxv/PFHDz2E12kEfd6/CzIOZD084DzysASR/Dot4i1dYPBQKC3r2XIER+dfbLOmw==",
+ "deprecated": "0.x is no longer supported. Please upgrade to 6.x or higher.",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "readable-stream": "~1.0.2",
+ "semver": "~4.3.3"
+ },
+ "engines": {
+ "node": ">=0.8"
}
},
- "forwarded": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
- "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
- },
- "fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
- },
- "fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
- "optional": true,
- "requires": {
- "minipass": "^3.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/log4js/node_modules/readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
}
},
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ "node_modules/ep_etherpad-lite/node_modules/log4js/node_modules/semver": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+ "integrity": "sha512-IrpJ+yoG4EOH8DFWuVg+8H1kW1Oaof0Wxe7cPcXW3x9BjkN/eVo54F15LyqemnDIUYskQWr9qvl/RihmSy6+xQ==",
+ "dev": true,
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
},
- "fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "node_modules/ep_etherpad-lite/node_modules/measured-core": {
+ "version": "1.51.1",
+ "resolved": "https://registry.npmjs.org/measured-core/-/measured-core-1.51.1.tgz",
+ "integrity": "sha512-DZQP9SEwdqqYRvT2slMK81D/7xwdxXosZZBtLVfPSo6y5P672FBTbzHVdN4IQyUkUpcVOR9pIvtUy5Ryl7NKyg==",
"dev": true,
- "optional": true
+ "peer": true,
+ "dependencies": {
+ "binary-search": "^1.3.3",
+ "optional-js": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 5.12"
+ }
},
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ "node_modules/ep_etherpad-lite/node_modules/ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true,
+ "peer": true
},
- "functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
- "dev": true
- },
- "functions-have-names": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
- "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="
- },
- "gauge": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
- "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
- "optional": true,
- "requires": {
- "aproba": "^1.0.3 || ^2.0.0",
- "color-support": "^1.1.2",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.1",
- "object-assign": "^4.1.1",
- "signal-exit": "^3.0.0",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "wide-align": "^1.1.2"
+ "node_modules/ep_etherpad-lite/node_modules/mssql": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/mssql/-/mssql-7.3.5.tgz",
+ "integrity": "sha512-LTOSQ3k8yZTBfO/5XwH7zC6fDPBx1sYgMXZyP/k+ErWrhZN8faAvDq+/gMlm9DaFG9yaOipHedF5JSPV17EHNw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@tediousjs/connection-string": "^0.3.0",
+ "debug": "^4.3.3",
+ "rfdc": "^1.3.0",
+ "tarn": "^3.0.1",
+ "tedious": "^11.4.0"
},
+ "bin": {
+ "mssql": "bin/mssql"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/mssql/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "peer": true,
"dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
"optional": true
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "optional": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
}
}
},
- "generic-pool": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz",
- "integrity": "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g=="
+ "node_modules/ep_etherpad-lite/node_modules/mssql/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true,
+ "peer": true
},
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
+ "node_modules/ep_etherpad-lite/node_modules/node-abort-controller": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-2.0.0.tgz",
+ "integrity": "sha512-L8RfEgjBTHAISTuagw51PprVAqNZoG6KSB6LQ6H1bskMVkFs5E71IyjauLBv3XbuomJlguWF/VnRHdJ1gqiAqA==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm": {
+ "version": "6.14.13",
+ "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.13.tgz",
+ "integrity": "sha512-SRl4jJi0EBHY2xKuu98FLRMo3VhYQSA6otyLnjSEiHoSG/9shXCFNJy9tivpUJvtkN9s6VDdItHa5Rn+fNBzag==",
+ "bundleDependencies": [
+ "abbrev",
+ "ansicolors",
+ "ansistyles",
+ "aproba",
+ "archy",
+ "bin-links",
+ "bluebird",
+ "byte-size",
+ "cacache",
+ "call-limit",
+ "chownr",
+ "ci-info",
+ "cli-columns",
+ "cli-table3",
+ "cmd-shim",
+ "columnify",
+ "config-chain",
+ "debuglog",
+ "detect-indent",
+ "detect-newline",
+ "dezalgo",
+ "editor",
+ "figgy-pudding",
+ "find-npm-prefix",
+ "fs-vacuum",
+ "fs-write-stream-atomic",
+ "gentle-fs",
+ "glob",
+ "graceful-fs",
+ "has-unicode",
+ "hosted-git-info",
+ "iferr",
+ "imurmurhash",
+ "infer-owner",
+ "inflight",
+ "inherits",
+ "ini",
+ "init-package-json",
+ "is-cidr",
+ "json-parse-better-errors",
+ "JSONStream",
+ "lazy-property",
+ "libcipm",
+ "libnpm",
+ "libnpmaccess",
+ "libnpmhook",
+ "libnpmorg",
+ "libnpmsearch",
+ "libnpmteam",
+ "libnpx",
+ "lock-verify",
+ "lockfile",
+ "lodash._baseindexof",
+ "lodash._baseuniq",
+ "lodash._bindcallback",
+ "lodash._cacheindexof",
+ "lodash._createcache",
+ "lodash._getnative",
+ "lodash.clonedeep",
+ "lodash.restparam",
+ "lodash.union",
+ "lodash.uniq",
+ "lodash.without",
+ "lru-cache",
+ "meant",
+ "mississippi",
+ "mkdirp",
+ "move-concurrently",
+ "node-gyp",
+ "nopt",
+ "normalize-package-data",
+ "npm-audit-report",
+ "npm-cache-filename",
+ "npm-install-checks",
+ "npm-lifecycle",
+ "npm-package-arg",
+ "npm-packlist",
+ "npm-pick-manifest",
+ "npm-profile",
+ "npm-registry-fetch",
+ "npm-user-validate",
+ "npmlog",
+ "once",
+ "opener",
+ "osenv",
+ "pacote",
+ "path-is-inside",
+ "promise-inflight",
+ "qrcode-terminal",
+ "query-string",
+ "qw",
+ "read-cmd-shim",
+ "read-installed",
+ "read-package-json",
+ "read-package-tree",
+ "read",
+ "readable-stream",
+ "readdir-scoped-modules",
+ "request",
+ "retry",
+ "rimraf",
+ "safe-buffer",
+ "semver",
+ "sha",
+ "slide",
+ "sorted-object",
+ "sorted-union-stream",
+ "ssri",
+ "stringify-package",
+ "tar",
+ "text-table",
+ "tiny-relative-date",
+ "uid-number",
+ "umask",
+ "unique-filename",
+ "unpipe",
+ "update-notifier",
+ "uuid",
+ "validate-npm-package-license",
+ "validate-npm-package-name",
+ "which",
+ "worker-farm",
+ "write-file-atomic"
+ ],
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "abbrev": "~1.1.1",
+ "ansicolors": "~0.3.2",
+ "ansistyles": "~0.1.3",
+ "aproba": "^2.0.0",
+ "archy": "~1.0.0",
+ "bin-links": "^1.1.8",
+ "bluebird": "^3.5.5",
+ "byte-size": "^5.0.1",
+ "cacache": "^12.0.3",
+ "call-limit": "^1.1.1",
+ "chownr": "^1.1.4",
+ "ci-info": "^2.0.0",
+ "cli-columns": "^3.1.2",
+ "cli-table3": "^0.5.1",
+ "cmd-shim": "^3.0.3",
+ "columnify": "~1.5.4",
+ "config-chain": "^1.1.12",
+ "debuglog": "*",
+ "detect-indent": "~5.0.0",
+ "detect-newline": "^2.1.0",
+ "dezalgo": "~1.0.3",
+ "editor": "~1.0.0",
+ "figgy-pudding": "^3.5.1",
+ "find-npm-prefix": "^1.0.2",
+ "fs-vacuum": "~1.2.10",
+ "fs-write-stream-atomic": "~1.0.10",
+ "gentle-fs": "^2.3.1",
+ "glob": "^7.1.6",
+ "graceful-fs": "^4.2.4",
+ "has-unicode": "~2.0.1",
+ "hosted-git-info": "^2.8.9",
+ "iferr": "^1.0.2",
+ "imurmurhash": "*",
+ "infer-owner": "^1.0.4",
+ "inflight": "~1.0.6",
+ "inherits": "^2.0.4",
+ "ini": "^1.3.8",
+ "init-package-json": "^1.10.3",
+ "is-cidr": "^3.0.0",
+ "json-parse-better-errors": "^1.0.2",
+ "JSONStream": "^1.3.5",
+ "lazy-property": "~1.0.0",
+ "libcipm": "^4.0.8",
+ "libnpm": "^3.0.1",
+ "libnpmaccess": "^3.0.2",
+ "libnpmhook": "^5.0.3",
+ "libnpmorg": "^1.0.1",
+ "libnpmsearch": "^2.0.2",
+ "libnpmteam": "^1.0.2",
+ "libnpx": "^10.2.4",
+ "lock-verify": "^2.1.0",
+ "lockfile": "^1.0.4",
+ "lodash._baseindexof": "*",
+ "lodash._baseuniq": "~4.6.0",
+ "lodash._bindcallback": "*",
+ "lodash._cacheindexof": "*",
+ "lodash._createcache": "*",
+ "lodash._getnative": "*",
+ "lodash.clonedeep": "~4.5.0",
+ "lodash.restparam": "*",
+ "lodash.union": "~4.6.0",
+ "lodash.uniq": "~4.5.0",
+ "lodash.without": "~4.4.0",
+ "lru-cache": "^5.1.1",
+ "meant": "^1.0.2",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.5",
+ "move-concurrently": "^1.0.1",
+ "node-gyp": "^5.1.0",
+ "nopt": "^4.0.3",
+ "normalize-package-data": "^2.5.0",
+ "npm-audit-report": "^1.3.3",
+ "npm-cache-filename": "~1.0.2",
+ "npm-install-checks": "^3.0.2",
+ "npm-lifecycle": "^3.1.5",
+ "npm-package-arg": "^6.1.1",
+ "npm-packlist": "^1.4.8",
+ "npm-pick-manifest": "^3.0.2",
+ "npm-profile": "^4.0.4",
+ "npm-registry-fetch": "^4.0.7",
+ "npm-user-validate": "^1.0.1",
+ "npmlog": "~4.1.2",
+ "once": "~1.4.0",
+ "opener": "^1.5.2",
+ "osenv": "^0.1.5",
+ "pacote": "^9.5.12",
+ "path-is-inside": "~1.0.2",
+ "promise-inflight": "~1.0.1",
+ "qrcode-terminal": "^0.12.0",
+ "query-string": "^6.8.2",
+ "qw": "~1.0.1",
+ "read": "~1.0.7",
+ "read-cmd-shim": "^1.0.5",
+ "read-installed": "~4.0.3",
+ "read-package-json": "^2.1.1",
+ "read-package-tree": "^5.3.1",
+ "readable-stream": "^3.6.0",
+ "readdir-scoped-modules": "^1.1.0",
+ "request": "^2.88.0",
+ "retry": "^0.12.0",
+ "rimraf": "^2.7.1",
+ "safe-buffer": "^5.1.2",
+ "semver": "^5.7.1",
+ "sha": "^3.0.0",
+ "slide": "~1.1.6",
+ "sorted-object": "~2.0.1",
+ "sorted-union-stream": "~2.1.3",
+ "ssri": "^6.0.2",
+ "stringify-package": "^1.0.1",
+ "tar": "^4.4.13",
+ "text-table": "~0.2.0",
+ "tiny-relative-date": "^1.3.0",
+ "uid-number": "0.0.6",
+ "umask": "~1.1.0",
+ "unique-filename": "^1.1.1",
+ "unpipe": "~1.0.0",
+ "update-notifier": "^2.5.0",
+ "uuid": "^3.3.3",
+ "validate-npm-package-license": "^3.0.4",
+ "validate-npm-package-name": "~3.0.0",
+ "which": "^1.3.1",
+ "worker-farm": "^1.7.0",
+ "write-file-atomic": "^2.4.3"
+ },
+ "bin": {
+ "npm": "bin/npm-cli.js",
+ "npx": "bin/npx-cli.js"
+ },
+ "engines": {
+ "node": "6 >=6.2.0 || 8 || >=9.3.0"
+ }
},
- "get-intrinsic": {
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/abbrev": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
- "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
- "requires": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1"
- }
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
},
- "get-symbol-description": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
- "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/agent-base": {
+ "version": "4.3.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "es6-promisify": "^5.0.0"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
}
},
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "requires": {
- "assert-plus": "^1.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/agentkeepalive": {
+ "version": "3.5.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "humanize-ms": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
}
},
- "glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ansi-align": {
+ "version": "2.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "string-width": "^2.0.0"
}
},
- "glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ansi-regex": {
+ "version": "2.1.1",
"dev": true,
- "requires": {
- "is-glob": "^4.0.3"
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "globals": {
- "version": "13.13.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz",
- "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==",
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ansi-styles": {
+ "version": "3.2.1",
"dev": true,
- "requires": {
- "type-fest": "^0.20.2"
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "globalthis": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz",
- "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==",
- "requires": {
- "define-properties": "^1.1.3"
- }
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ansicolors": {
+ "version": "0.3.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ansistyles": {
+ "version": "0.1.3",
"dev": true,
- "requires": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- }
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "graceful-fs": {
- "version": "4.2.10",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
- "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
- "optional": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/aproba": {
+ "version": "2.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
},
- "growl": {
- "version": "1.10.5",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
- "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
- "dev": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/archy": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/are-we-there-yet": {
+ "version": "1.1.4",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
},
- "har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "requires": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream": {
+ "version": "2.3.6",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
"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=="
- }
+ "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"
}
},
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "requires": {
- "function-bind": "^1.1.1"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/are-we-there-yet/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
}
},
- "has-bigints": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
- "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/asap": {
+ "version": "2.0.6",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "has-binary2": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
- "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
- "requires": {
- "isarray": "2.0.1"
- },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/asn1": {
+ "version": "0.2.4",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "isarray": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
- "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
- }
+ "safer-buffer": "~2.1.0"
}
},
- "has-cors": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
- "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/assert-plus": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.8"
+ }
},
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/asynckit": {
+ "version": "0.4.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "has-property-descriptors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
- "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
- "requires": {
- "get-intrinsic": "^1.1.1"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "engines": {
+ "node": "*"
}
},
- "has-symbols": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
- "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/aws4": {
+ "version": "1.8.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "has-tostringtag": {
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/balanced-match": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
- "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
- "requires": {
- "has-symbols": "^1.0.2"
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "BSD-3-Clause",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "tweetnacl": "^0.14.3"
}
},
- "has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
- "optional": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/bin-links": {
+ "version": "1.1.8",
+ "dev": true,
+ "inBundle": true,
+ "license": "Artistic-2.0",
+ "peer": true,
+ "dependencies": {
+ "bluebird": "^3.5.3",
+ "cmd-shim": "^3.0.0",
+ "gentle-fs": "^2.3.0",
+ "graceful-fs": "^4.1.15",
+ "npm-normalize-package-bin": "^1.0.0",
+ "write-file-atomic": "^2.3.0"
+ }
},
- "hast-util-embedded": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-2.0.0.tgz",
- "integrity": "sha512-vEr54rDu2CheBM4nLkWbW8Rycf8HhkA/KsrDnlyKnvBTyhyO+vAG6twHnfUbiRGo56YeUBNCI4HFfHg3Wu+tig==",
- "requires": {
- "hast-util-is-element": "^2.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/bluebird": {
+ "version": "3.5.5",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/boxen": {
+ "version": "1.3.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-align": "^2.0.0",
+ "camelcase": "^4.0.0",
+ "chalk": "^2.0.1",
+ "cli-boxes": "^1.0.0",
+ "string-width": "^2.0.0",
+ "term-size": "^1.2.0",
+ "widest-line": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "hast-util-from-parse5": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.0.tgz",
- "integrity": "sha512-m8yhANIAccpU4K6+121KpPP55sSl9/samzQSQGpb0mTExcNh2WlvjtMwSWFhg6uqD4Rr6Nfa8N6TMypQM51rzQ==",
- "requires": {
- "@types/hast": "^2.0.0",
- "@types/parse5": "^6.0.0",
- "@types/unist": "^2.0.0",
- "hastscript": "^7.0.0",
- "property-information": "^6.0.0",
- "vfile": "^5.0.0",
- "vfile-location": "^4.0.0",
- "web-namespaces": "^2.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
- "hast-util-is-element": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.2.tgz",
- "integrity": "sha512-thjnlGAnwP8ef/GSO1Q8BfVk2gundnc2peGQqEg2kUt/IqesiGg/5mSwN2fE7nLzy61pg88NG6xV+UrGOrx9EA==",
- "requires": {
- "@types/hast": "^2.0.0",
- "@types/unist": "^2.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/buffer-from": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/builtins": {
+ "version": "1.0.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/byline": {
+ "version": "5.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "hast-util-parse-selector": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.0.tgz",
- "integrity": "sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg==",
- "requires": {
- "@types/hast": "^2.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/byte-size": {
+ "version": "5.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6.0.0"
}
},
- "hast-util-to-html": {
- "version": "8.0.3",
- "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.3.tgz",
- "integrity": "sha512-/D/E5ymdPYhHpPkuTHOUkSatxr4w1ZKrZsG0Zv/3C2SRVT0JFJG53VS45AMrBtYk0wp5A7ksEhiC8QaOZM95+A==",
- "requires": {
- "@types/hast": "^2.0.0",
- "ccount": "^2.0.0",
- "comma-separated-tokens": "^2.0.0",
- "hast-util-is-element": "^2.0.0",
- "hast-util-whitespace": "^2.0.0",
- "html-void-elements": "^2.0.0",
- "property-information": "^6.0.0",
- "space-separated-tokens": "^2.0.0",
- "stringify-entities": "^4.0.2",
- "unist-util-is": "^5.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cacache": {
+ "version": "12.0.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "bluebird": "^3.5.5",
+ "chownr": "^1.1.1",
+ "figgy-pudding": "^3.5.1",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.1.15",
+ "infer-owner": "^1.0.3",
+ "lru-cache": "^5.1.1",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.6.3",
+ "ssri": "^6.0.1",
+ "unique-filename": "^1.1.1",
+ "y18n": "^4.0.0"
}
},
- "hast-util-whitespace": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz",
- "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/call-limit": {
+ "version": "1.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
},
- "hastscript": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.0.2.tgz",
- "integrity": "sha512-uA8ooUY4ipaBvKcMuPehTAB/YfFLSSzCwFSwT6ltJbocFUKH/GDHLN+tflq7lSRf9H86uOuxOFkh1KgIy3Gg2g==",
- "requires": {
- "@types/hast": "^2.0.0",
- "comma-separated-tokens": "^2.0.0",
- "hast-util-parse-selector": "^3.0.0",
- "property-information": "^6.0.0",
- "space-separated-tokens": "^2.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/camelcase": {
+ "version": "4.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
}
},
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true
- },
- "hexoid": {
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/capture-stack-trace": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
- "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g=="
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "hpagent": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-0.1.2.tgz",
- "integrity": "sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/caseless": {
+ "version": "0.12.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "peer": true
},
- "html-encoding-sniffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
- "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
- "requires": {
- "whatwg-encoding": "^2.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/chalk": {
+ "version": "2.4.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "html-void-elements": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz",
- "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A=="
- },
- "http-cache-semantics": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
- "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
- "optional": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/chownr": {
+ "version": "1.1.4",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
},
- "http-errors": {
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ci-info": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
- "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
- "requires": {
- "depd": "2.0.0",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "toidentifier": "1.0.1"
- },
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cidr-regex": {
+ "version": "2.0.10",
+ "dev": true,
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
- "depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
- },
- "statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
- },
- "toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
- }
+ "ip-regex": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "http-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
- "requires": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
- },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cli-boxes": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cli-columns": {
+ "version": "3.1.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- }
+ "string-width": "^2.0.0",
+ "strip-ansi": "^3.0.1"
+ },
+ "engines": {
+ "node": ">= 4"
}
},
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cli-table3": {
+ "version": "0.5.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "object-assign": "^4.1.0",
+ "string-width": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "optionalDependencies": {
+ "colors": "^1.1.2"
}
},
- "https-proxy-agent": {
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cliui": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
- "requires": {
- "agent-base": "6",
- "debug": "4"
- },
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
"dependencies": {
- "debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- }
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
}
},
- "humanize-ms": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
- "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=",
- "optional": true,
- "requires": {
- "ms": "^2.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cliui/node_modules/ansi-regex": {
+ "version": "4.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
}
},
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cliui/node_modules/is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
}
},
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cliui/node_modules/string-width": {
+ "version": "3.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
},
- "ignore": {
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cliui/node_modules/strip-ansi": {
"version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
- "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
- "dev": true
- },
- "immediate": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
- "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
- "dev": true
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
},
- "import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/clone": {
+ "version": "1.0.4",
"dev": true,
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.8"
}
},
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cmd-shim": {
+ "version": "3.0.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "mkdirp": "~0.5.0"
+ }
},
- "indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "optional": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/code-point-at": {
+ "version": "1.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "indexof": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
- "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/color-convert": {
+ "version": "1.9.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "color-name": "^1.1.1"
+ }
},
- "infer-owner": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
- "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
- "optional": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/color-name": {
+ "version": "1.1.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/colors": {
+ "version": "1.3.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.1.90"
}
},
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- },
- "internal-slot": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
- "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
- "requires": {
- "get-intrinsic": "^1.1.0",
- "has": "^1.0.3",
- "side-channel": "^1.0.4"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/columnify": {
+ "version": "1.5.4",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "strip-ansi": "^3.0.0",
+ "wcwidth": "^1.0.0"
}
},
- "ip": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
- "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==",
- "optional": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/combined-stream": {
+ "version": "1.0.6",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/concat-map": {
+ "version": "0.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "is-bigint": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
- "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
- "requires": {
- "has-bigints": "^1.0.1"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/concat-stream": {
+ "version": "1.6.2",
+ "dev": true,
+ "engines": [
+ "node >= 0.8"
+ ],
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
}
},
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream": {
+ "version": "2.3.6",
"dev": true,
- "requires": {
- "binary-extensions": "^2.0.0"
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "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"
}
},
- "is-boolean-object": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
- "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
- "requires": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/concat-stream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
}
},
- "is-buffer": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
- "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
- },
- "is-callable": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
- "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/config-chain": {
+ "version": "1.1.12",
+ "dev": true,
+ "inBundle": true,
+ "peer": true,
+ "dependencies": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
},
- "is-core-module": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
- "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/configstore": {
+ "version": "3.1.5",
"dev": true,
- "requires": {
- "has": "^1.0.3"
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "dot-prop": "^4.2.1",
+ "graceful-fs": "^4.1.2",
+ "make-dir": "^1.0.0",
+ "unique-string": "^1.0.0",
+ "write-file-atomic": "^2.0.0",
+ "xdg-basedir": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "is-date-object": {
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/console-control-strings": {
+ "version": "1.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/copy-concurrently": {
"version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
- "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
- "requires": {
- "has-tostringtag": "^1.0.0"
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "aproba": "^1.1.1",
+ "fs-write-stream-atomic": "^1.0.8",
+ "iferr": "^0.1.5",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.0"
}
},
- "is-docker": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
- "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/copy-concurrently/node_modules/aproba": {
+ "version": "1.2.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
},
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/copy-concurrently/node_modules/iferr": {
+ "version": "0.1.5",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "optional": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/core-util-is": {
+ "version": "1.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/create-error-class": {
+ "version": "3.0.2",
"dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "capture-stack-trace": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "is-lambda": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
- "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
- "optional": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cross-spawn": {
+ "version": "5.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
},
- "is-negative-zero": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
- "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cross-spawn/node_modules/lru-cache": {
+ "version": "4.1.5",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
},
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cross-spawn/node_modules/yallist": {
+ "version": "2.1.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
},
- "is-number-object": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
- "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
- "requires": {
- "has-tostringtag": "^1.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/crypto-random-string": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
}
},
- "is-observable": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-2.1.0.tgz",
- "integrity": "sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cyclist": {
+ "version": "0.2.2",
+ "dev": true,
+ "inBundle": true,
+ "peer": true
},
- "is-plain-obj": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
- "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/dashdash": {
+ "version": "1.14.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
},
- "is-potential-custom-element-name": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
- "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/debug": {
+ "version": "3.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/debug/node_modules/ms": {
+ "version": "2.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "is-promise": {
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/debuglog": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz",
- "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=",
- "dev": true
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": "*"
+ }
},
- "is-regex": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
- "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
- "requires": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/decamelize": {
+ "version": "1.2.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "is-shared-array-buffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
- "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
- "requires": {
- "call-bind": "^1.0.2"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/decode-uri-component": {
+ "version": "0.2.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10"
}
},
- "is-string": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
- "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
- "requires": {
- "has-tostringtag": "^1.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/deep-extend": {
+ "version": "0.6.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4.0.0"
}
},
- "is-symbol": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
- "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
- "requires": {
- "has-symbols": "^1.0.2"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/defaults": {
+ "version": "1.0.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "clone": "^1.0.2"
}
},
- "is-typedarray": {
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/define-properties": {
+ "version": "1.1.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "object-keys": "^1.0.12"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/delayed-stream": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
},
- "is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/delegates": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "is-weakref": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
- "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
- "requires": {
- "call-bind": "^1.0.2"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/detect-indent": {
+ "version": "5.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
}
},
- "is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
- "requires": {
- "is-docker": "^2.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/detect-newline": {
+ "version": "2.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/dezalgo": {
+ "version": "1.0.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "asap": "^2.0.0",
+ "wrappy": "1"
+ }
},
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/dot-prop": {
+ "version": "4.2.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "is-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
},
- "jake": {
- "version": "10.8.5",
- "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz",
- "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==",
- "requires": {
- "async": "^3.2.3",
- "chalk": "^4.0.2",
- "filelist": "^1.0.1",
- "minimatch": "^3.0.4"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/dotenv": {
+ "version": "5.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "engines": {
+ "node": ">=4.6.0"
}
},
- "js-cookie": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz",
- "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/duplexer3": {
+ "version": "0.1.4",
+ "dev": true,
+ "inBundle": true,
+ "license": "BSD-3-Clause",
+ "peer": true
},
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "requires": {
- "argparse": "^2.0.1"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/duplexify": {
+ "version": "3.6.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
}
},
- "jsbi": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-3.2.5.tgz",
- "integrity": "sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ=="
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/duplexify/node_modules/readable-stream": {
+ "version": "2.3.6",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "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"
+ }
},
- "jsdom": {
- "version": "19.0.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz",
- "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==",
- "requires": {
- "abab": "^2.0.5",
- "acorn": "^8.5.0",
- "acorn-globals": "^6.0.0",
- "cssom": "^0.5.0",
- "cssstyle": "^2.3.0",
- "data-urls": "^3.0.1",
- "decimal.js": "^10.3.1",
- "domexception": "^4.0.0",
- "escodegen": "^2.0.0",
- "form-data": "^4.0.0",
- "html-encoding-sniffer": "^3.0.0",
- "http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
- "is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.0",
- "parse5": "6.0.1",
- "saxes": "^5.0.1",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^4.0.0",
- "w3c-hr-time": "^1.0.2",
- "w3c-xmlserializer": "^3.0.0",
- "webidl-conversions": "^7.0.0",
- "whatwg-encoding": "^2.0.0",
- "whatwg-mimetype": "^3.0.0",
- "whatwg-url": "^10.0.0",
- "ws": "^8.2.3",
- "xml-name-validator": "^4.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/duplexify/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
}
},
- "json-schema": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
- "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ecc-jsbn": {
+ "version": "0.1.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
},
- "json-schema-traverse": {
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/editor": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
- },
- "json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
- "dev": true
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/emoji-regex": {
+ "version": "7.0.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/encoding": {
+ "version": "0.1.12",
"dev": true,
- "requires": {
- "minimist": "^1.2.0"
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "iconv-lite": "~0.4.13"
}
},
- "jsonminify": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/jsonminify/-/jsonminify-0.4.2.tgz",
- "integrity": "sha512-mEtP5ECD0293D+s45JhDutqF5mFCkWY8ClrPFxjSFR2KUoantofky7noSzyKnAnD9Gd8pXHZSUd5bgzLDUBbfA=="
- },
- "jsonschema": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
- "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
- "dev": true
- },
- "jsonschema-draft4": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/jsonschema-draft4/-/jsonschema-draft4-1.0.0.tgz",
- "integrity": "sha1-8K8gBQVPDwrefqIRhhS2ncUS2GU=",
- "dev": true
- },
- "jsprim": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
- "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.4.0",
- "verror": "1.10.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/end-of-stream": {
+ "version": "1.4.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "once": "^1.4.0"
}
},
- "jszip": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
- "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/env-paths": {
+ "version": "2.2.0",
"dev": true,
- "requires": {
- "lie": "~3.3.0",
- "pako": "~1.0.2",
- "readable-stream": "~2.3.6",
- "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"
- }
- },
- "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"
- }
- }
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
}
},
- "just-extend": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
- "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
- "dev": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/err-code": {
+ "version": "1.1.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "jwa": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
- "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
- "requires": {
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/errno": {
+ "version": "0.1.7",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "prr": "~1.0.1"
+ },
+ "bin": {
+ "errno": "cli.js"
}
},
- "jws": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
- "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
- "requires": {
- "jwa": "^2.0.0",
- "safe-buffer": "^5.0.1"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/es-abstract": {
+ "version": "1.12.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "es-to-primitive": "^1.1.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.1",
+ "is-callable": "^1.1.3",
+ "is-regex": "^1.0.4"
},
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/es-to-primitive": {
+ "version": "1.2.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "jwa": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
- "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
- "requires": {
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- }
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
- "kebab-case": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/kebab-case/-/kebab-case-1.0.1.tgz",
- "integrity": "sha512-txPHx6nVLhv8PHGXIlAk0nYoh894SpAqGPXNvbg2hh8spvHXIah3+vT87DLoa59nKgC6scD3u3xAuRIgiMqbfQ==",
- "dev": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/es6-promise": {
+ "version": "4.2.8",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "languages4translatewiki": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/languages4translatewiki/-/languages4translatewiki-0.1.3.tgz",
- "integrity": "sha1-xDYgbgUtIUkLEQF6RNURj5Ih5ds="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/es6-promisify": {
+ "version": "5.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "es6-promise": "^4.0.3"
+ }
},
- "levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "requires": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.8.0"
}
},
- "lie": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
- "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/execa": {
+ "version": "0.7.0",
"dev": true,
- "requires": {
- "immediate": "~3.0.5"
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/execa/node_modules/get-stream": {
+ "version": "3.0.0",
"dev": true,
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
}
},
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/extend": {
+ "version": "3.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "lodash.clonedeep": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/extsprintf": {
+ "version": "1.3.0",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
- "dev": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/figgy-pudding": {
+ "version": "3.5.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
},
- "lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/find-npm-prefix": {
+ "version": "1.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
},
- "log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/flush-write-stream": {
+ "version": "1.0.3",
"dev": true,
- "requires": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.4"
}
},
- "log4js": {
- "version": "0.6.38",
- "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz",
- "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=",
- "requires": {
- "readable-stream": "~1.0.2",
- "semver": "~4.3.3"
- },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream": {
+ "version": "2.3.6",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "semver": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
- "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto="
- }
+ "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"
}
},
- "long": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/long/-/long-2.4.0.tgz",
- "integrity": "sha1-n6GAux2VAM3CnEFWdmoZleH0Uk8="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/flush-write-stream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
},
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "requires": {
- "yallist": "^4.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/forever-agent": {
+ "version": "0.6.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "engines": {
+ "node": "*"
}
},
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "optional": true,
- "requires": {
- "semver": "^6.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/form-data": {
+ "version": "2.3.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "^2.1.12"
},
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/from2": {
+ "version": "2.3.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "optional": true
- }
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
}
},
- "make-fetch-happen": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
- "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==",
- "optional": true,
- "requires": {
- "agentkeepalive": "^4.1.3",
- "cacache": "^15.2.0",
- "http-cache-semantics": "^4.1.0",
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "^5.0.0",
- "is-lambda": "^1.0.1",
- "lru-cache": "^6.0.0",
- "minipass": "^3.1.3",
- "minipass-collect": "^1.0.2",
- "minipass-fetch": "^1.3.2",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "negotiator": "^0.6.2",
- "promise-retry": "^2.0.1",
- "socks-proxy-agent": "^6.0.0",
- "ssri": "^8.0.0"
- },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/from2/node_modules/readable-stream": {
+ "version": "2.3.6",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
- "optional": true
- },
- "agentkeepalive": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz",
- "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==",
- "optional": true,
- "requires": {
- "debug": "^4.1.0",
- "depd": "^2.0.0",
- "humanize-ms": "^1.2.1"
- }
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "optional": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
- "optional": true,
- "requires": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "optional": true
- }
+ "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"
}
},
- "measured-core": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/measured-core/-/measured-core-2.0.0.tgz",
- "integrity": "sha512-SIzGtX1WGDvR59FqcJaGEAqDueBvLBh6W4T/gQaHr5ufcqvQkUHGcfQhlmq77mkeF5Mo+UpD+8hm69CwUVibGw==",
- "requires": {
- "binary-search": "^1.3.3",
- "optional-js": "^2.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/from2/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
}
},
- "media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-minipass": {
+ "version": "1.2.7",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "minipass": "^2.6.0"
+ }
},
- "memory-pager": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
- "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
- "optional": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-minipass/node_modules/minipass": {
+ "version": "2.9.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
},
- "merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-vacuum": {
+ "version": "1.2.10",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "path-is-inside": "^1.0.1",
+ "rimraf": "^2.5.2"
+ }
},
- "merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
+ }
},
- "methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/iferr": {
+ "version": "0.1.5",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream": {
+ "version": "2.3.6",
"dev": true,
- "requires": {
- "braces": "^3.0.2",
- "picomatch": "^2.3.1"
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "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"
}
},
- "mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
},
- "mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
},
- "mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "requires": {
- "mime-db": "1.52.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/function-bind": {
+ "version": "1.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gauge": {
+ "version": "2.7.4",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
}
},
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "requires": {
- "brace-expansion": "^1.1.7"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gauge/node_modules/aproba": {
+ "version": "1.2.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gauge/node_modules/string-width": {
+ "version": "1.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "minimist": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/genfun": {
+ "version": "5.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "minipass": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz",
- "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==",
- "optional": true,
- "requires": {
- "yallist": "^4.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gentle-fs": {
+ "version": "2.3.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "Artistic-2.0",
+ "peer": true,
+ "dependencies": {
+ "aproba": "^1.1.2",
+ "chownr": "^1.1.2",
+ "cmd-shim": "^3.0.3",
+ "fs-vacuum": "^1.2.10",
+ "graceful-fs": "^4.1.11",
+ "iferr": "^0.1.5",
+ "infer-owner": "^1.0.4",
+ "mkdirp": "^0.5.1",
+ "path-is-inside": "^1.0.2",
+ "read-cmd-shim": "^1.0.1",
+ "slide": "^1.1.6"
}
},
- "minipass-collect": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
- "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
- "optional": true,
- "requires": {
- "minipass": "^3.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gentle-fs/node_modules/aproba": {
+ "version": "1.2.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gentle-fs/node_modules/iferr": {
+ "version": "0.1.5",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
}
},
- "minipass-fetch": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz",
- "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==",
- "optional": true,
- "requires": {
- "encoding": "^0.1.12",
- "minipass": "^3.1.0",
- "minipass-sized": "^1.0.3",
- "minizlib": "^2.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/get-stream": {
+ "version": "4.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "minipass-flush": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
- "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
- "optional": true,
- "requires": {
- "minipass": "^3.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/getpass": {
+ "version": "0.1.7",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0"
}
},
- "minipass-pipeline": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
- "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
- "optional": true,
- "requires": {
- "minipass": "^3.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/glob": {
+ "version": "7.1.6",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "minipass-sized": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
- "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
- "optional": true,
- "requires": {
- "minipass": "^3.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/global-dirs": {
+ "version": "0.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ini": "^1.3.4"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "minizlib": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
- "optional": true,
- "requires": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/got": {
+ "version": "6.7.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "create-error-class": "^3.0.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^3.0.0",
+ "is-redirect": "^1.0.0",
+ "is-retry-allowed": "^1.0.0",
+ "is-stream": "^1.0.0",
+ "lowercase-keys": "^1.0.0",
+ "safe-buffer": "^5.0.1",
+ "timed-out": "^4.0.0",
+ "unzip-response": "^2.0.1",
+ "url-parse-lax": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "optional": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/got/node_modules/get-stream": {
+ "version": "3.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
},
- "mocha": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz",
- "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==",
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/graceful-fs": {
+ "version": "4.2.4",
"dev": true,
- "requires": {
- "@ungap/promise-all-settled": "1.1.2",
- "ansi-colors": "4.1.1",
- "browser-stdout": "1.3.1",
- "chokidar": "3.5.3",
- "debug": "4.3.3",
- "diff": "5.0.0",
- "escape-string-regexp": "4.0.0",
- "find-up": "5.0.0",
- "glob": "7.2.0",
- "growl": "1.10.5",
- "he": "1.2.0",
- "js-yaml": "4.1.0",
- "log-symbols": "4.1.0",
- "minimatch": "4.2.1",
- "ms": "2.1.3",
- "nanoid": "3.3.1",
- "serialize-javascript": "6.0.0",
- "strip-json-comments": "3.1.1",
- "supports-color": "8.1.1",
- "which": "2.0.2",
- "workerpool": "6.2.0",
- "yargs": "16.2.0",
- "yargs-parser": "20.2.4",
- "yargs-unparser": "2.0.0"
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/har-schema": {
+ "version": "2.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/har-validator": {
+ "version": "5.1.5",
+ "deprecated": "this library is no longer supported",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
},
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/har-validator/node_modules/ajv": {
+ "version": "6.12.6",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- },
- "dependencies": {
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- }
- }
- },
- "escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true
- },
- "find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "requires": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "requires": {
- "p-locate": "^5.0.0"
- }
- },
- "minimatch": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz",
- "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
- "p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "requires": {
- "p-limit": "^3.0.2"
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true
- },
- "supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
- "mocha-froth": {
- "version": "0.2.10",
- "resolved": "https://registry.npmjs.org/mocha-froth/-/mocha-froth-0.2.10.tgz",
- "integrity": "sha512-xyJqAYtm2zjrkG870hjeSVvGgS4Dc9tRokmN6R7XLgBKhdtAJ1ytU6zL045djblfHaPyTkSerQU4wqcjsv7Aew==",
- "dev": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/har-validator/node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
},
- "mock-json-schema": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/mock-json-schema/-/mock-json-schema-1.1.1.tgz",
- "integrity": "sha512-YV23vlsLP1EEOy0EviUvZTluXjLR+rhMzeayP2rcDiezj3RW01MhOSQkbQskdtg0K2fnGas5LKbSXgNjAOSX4A==",
- "requires": {
- "lodash": "^4.17.21"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/har-validator/node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/has": {
+ "version": "1.0.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
}
},
- "mongodb": {
- "version": "3.7.3",
- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz",
- "integrity": "sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw==",
- "requires": {
- "bl": "^2.2.1",
- "bson": "^1.1.4",
- "denque": "^1.4.1",
- "optional-require": "^1.1.8",
- "safe-buffer": "^5.1.2",
- "saslprep": "^1.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/has-flag": {
+ "version": "3.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
}
},
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/has-symbols": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
},
- "mssql": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/mssql/-/mssql-8.1.0.tgz",
- "integrity": "sha512-S7j4MoanTCLM09I+wMI9thTS2342mgxCpOQ9kpnFiG3P1NStuQMhPILLOgOt6hwMa/ctfTUKl7eJpB5XGPoe6A==",
- "requires": {
- "@tediousjs/connection-string": "^0.3.0",
- "commander": "^9.1.0",
- "debug": "^4.3.3",
- "rfdc": "^1.3.0",
- "tarn": "^3.0.2",
- "tedious": "^14.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/has-unicode": {
+ "version": "2.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/http-cache-semantics": {
+ "version": "3.8.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/http-proxy-agent": {
+ "version": "2.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "agent-base": "4",
+ "debug": "3.1.0"
},
+ "engines": {
+ "node": ">= 4.5.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/http-signature": {
+ "version": "1.2.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "commander": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz",
- "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w=="
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- }
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.8",
+ "npm": ">=1.3.7"
}
},
- "mysql": {
- "version": "2.18.1",
- "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
- "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
- "requires": {
- "bignumber.js": "9.0.0",
- "readable-stream": "2.3.7",
- "safe-buffer": "5.1.2",
- "sqlstring": "2.3.1"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/https-proxy-agent": {
+ "version": "2.2.4",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "agent-base": "^4.3.0",
+ "debug": "^3.1.0"
},
+ "engines": {
+ "node": ">= 4.5.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/humanize-ms": {
+ "version": "1.2.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "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"
- }
- },
- "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==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
+ "ms": "^2.0.0"
}
},
- "nanoid": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz",
- "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==",
- "dev": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/iconv-lite": {
+ "version": "0.4.23",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "native-duplexpair": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/native-duplexpair/-/native-duplexpair-1.0.0.tgz",
- "integrity": "sha1-eJkHjmS/PIo9cyYBs9QP8F21j6A="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/iferr": {
+ "version": "1.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
},
- "natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
- "dev": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ignore-walk": {
+ "version": "3.0.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "minimatch": "^3.0.4"
+ }
},
- "negotiator": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/import-lazy": {
+ "version": "2.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
},
- "nise": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.1.tgz",
- "integrity": "sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A==",
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/imurmurhash": {
+ "version": "0.1.4",
"dev": true,
- "requires": {
- "@sinonjs/commons": "^1.8.3",
- "@sinonjs/fake-timers": ">=5",
- "@sinonjs/text-encoding": "^0.7.1",
- "just-extend": "^4.0.2",
- "path-to-regexp": "^1.7.0"
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/infer-owner": {
+ "version": "1.0.4",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/inflight": {
+ "version": "1.0.6",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/inherits": {
+ "version": "2.0.4",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ini": {
+ "version": "1.3.8",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/init-package-json": {
+ "version": "1.10.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "glob": "^7.1.1",
+ "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0",
+ "promzard": "^0.3.0",
+ "read": "~1.0.1",
+ "read-package-json": "1 || 2",
+ "semver": "2.x || 3.x || 4 || 5",
+ "validate-npm-package-license": "^3.0.1",
+ "validate-npm-package-name": "^3.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ip": {
+ "version": "1.1.5",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ip-regex": {
+ "version": "2.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-callable": {
+ "version": "1.1.4",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-ci": {
+ "version": "1.2.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ci-info": "^1.5.0"
},
+ "bin": {
+ "is-ci": "bin.js"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-ci/node_modules/ci-info": {
+ "version": "1.6.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-cidr": {
+ "version": "3.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
- "path-to-regexp": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
- "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
- "dev": true,
- "requires": {
- "isarray": "0.0.1"
- }
- }
+ "cidr-regex": "^2.0.10"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "node-abort-controller": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.0.1.tgz",
- "integrity": "sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw=="
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-date-object": {
+ "version": "1.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
},
- "node-fetch": {
- "version": "2.6.7",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
- "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
- "requires": {
- "whatwg-url": "^5.0.0"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "number-is-nan": "^1.0.0"
},
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-installed-globally": {
+ "version": "0.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
- },
- "webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
- },
- "whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
- "requires": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- }
+ "global-dirs": "^0.1.0",
+ "is-path-inside": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-npm": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "nodeify": {
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-obj": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/nodeify/-/nodeify-1.0.1.tgz",
- "integrity": "sha1-ZKtpp7268DzhB7TwM1yHwLnpGx0=",
"dev": true,
- "requires": {
- "is-promise": "~1.0.0",
- "promise": "~1.3.0"
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "nopt": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
- "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
- "optional": true,
- "requires": {
- "abbrev": "1"
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-path-inside": {
+ "version": "1.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "path-is-inside": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-redirect": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "npm": {
- "version": "6.14.16",
- "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.16.tgz",
- "integrity": "sha512-LMiLGYsVNJfVPlQg7v2NYjG7iRIapcLv+oMunlq7fkXVx0BATCjRu7XyWl0G+iuZzHy4CjtM32QB8ox8juTgaw==",
- "requires": {
- "JSONStream": "^1.3.5",
- "abbrev": "~1.1.1",
- "ansicolors": "~0.3.2",
- "ansistyles": "~0.1.3",
- "aproba": "^2.0.0",
- "archy": "~1.0.0",
- "bin-links": "^1.1.8",
- "bluebird": "^3.5.5",
- "byte-size": "^5.0.1",
- "cacache": "^12.0.3",
- "call-limit": "^1.1.1",
- "chownr": "^1.1.4",
- "ci-info": "^2.0.0",
- "cli-columns": "^3.1.2",
- "cli-table3": "^0.5.1",
- "cmd-shim": "^3.0.3",
- "columnify": "~1.5.4",
- "config-chain": "^1.1.12",
- "debuglog": "*",
- "detect-indent": "~5.0.0",
- "detect-newline": "^2.1.0",
- "dezalgo": "~1.0.3",
- "editor": "~1.0.0",
- "figgy-pudding": "^3.5.1",
- "find-npm-prefix": "^1.0.2",
- "fs-vacuum": "~1.2.10",
- "fs-write-stream-atomic": "~1.0.10",
- "gentle-fs": "^2.3.1",
- "glob": "^7.1.6",
- "graceful-fs": "^4.2.4",
- "has-unicode": "~2.0.1",
- "hosted-git-info": "^2.8.9",
- "iferr": "^1.0.2",
- "imurmurhash": "*",
- "infer-owner": "^1.0.4",
- "inflight": "~1.0.6",
- "inherits": "^2.0.4",
- "ini": "^1.3.8",
- "init-package-json": "^1.10.3",
- "is-cidr": "^3.0.0",
- "json-parse-better-errors": "^1.0.2",
- "lazy-property": "~1.0.0",
- "libcipm": "^4.0.8",
- "libnpm": "^3.0.1",
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-regex": {
+ "version": "1.0.4",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "has": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-retry-allowed": {
+ "version": "1.2.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-stream": {
+ "version": "1.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-symbol": {
+ "version": "1.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "has-symbols": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/isexe": {
+ "version": "2.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/isstream": {
+ "version": "0.1.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/jsbn": {
+ "version": "0.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/json-parse-better-errors": {
+ "version": "1.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/json-schema": {
+ "version": "0.2.3",
+ "dev": true,
+ "inBundle": true,
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/jsonparse": {
+ "version": "1.3.1",
+ "dev": true,
+ "engines": [
+ "node >= 0.2.0"
+ ],
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/JSONStream": {
+ "version": "1.3.5",
+ "dev": true,
+ "inBundle": true,
+ "license": "(MIT OR Apache-2.0)",
+ "peer": true,
+ "dependencies": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ },
+ "bin": {
+ "JSONStream": "bin.js"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/jsprim": {
+ "version": "1.4.1",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/latest-version": {
+ "version": "3.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "package-json": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lazy-property": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libcipm": {
+ "version": "4.0.8",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "bin-links": "^1.1.2",
+ "bluebird": "^3.5.1",
+ "figgy-pudding": "^3.5.1",
+ "find-npm-prefix": "^1.0.2",
+ "graceful-fs": "^4.1.11",
+ "ini": "^1.3.5",
+ "lock-verify": "^2.1.0",
+ "mkdirp": "^0.5.1",
+ "npm-lifecycle": "^3.0.0",
+ "npm-logical-tree": "^1.2.1",
+ "npm-package-arg": "^6.1.0",
+ "pacote": "^9.1.0",
+ "read-package-json": "^2.0.13",
+ "rimraf": "^2.6.2",
+ "worker-farm": "^1.6.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpm": {
+ "version": "3.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "bin-links": "^1.1.2",
+ "bluebird": "^3.5.3",
+ "find-npm-prefix": "^1.0.2",
"libnpmaccess": "^3.0.2",
+ "libnpmconfig": "^1.2.1",
"libnpmhook": "^5.0.3",
"libnpmorg": "^1.0.1",
+ "libnpmpublish": "^1.1.2",
"libnpmsearch": "^2.0.2",
"libnpmteam": "^1.0.2",
- "libnpx": "^10.2.4",
- "lock-verify": "^2.1.0",
- "lockfile": "^1.0.4",
- "lodash._baseindexof": "*",
- "lodash._baseuniq": "~4.6.0",
- "lodash._bindcallback": "*",
- "lodash._cacheindexof": "*",
- "lodash._createcache": "*",
- "lodash._getnative": "*",
- "lodash.clonedeep": "~4.5.0",
- "lodash.restparam": "*",
- "lodash.union": "~4.6.0",
- "lodash.uniq": "~4.5.0",
- "lodash.without": "~4.4.0",
- "lru-cache": "^5.1.1",
- "meant": "^1.0.2",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.5",
- "move-concurrently": "^1.0.1",
- "node-gyp": "^5.1.0",
- "nopt": "^4.0.3",
- "normalize-package-data": "^2.5.0",
- "npm-audit-report": "^1.3.3",
- "npm-cache-filename": "~1.0.2",
- "npm-install-checks": "^3.0.2",
- "npm-lifecycle": "^3.1.5",
- "npm-package-arg": "^6.1.1",
- "npm-packlist": "^1.4.8",
- "npm-pick-manifest": "^3.0.2",
- "npm-profile": "^4.0.4",
- "npm-registry-fetch": "^4.0.7",
- "npm-user-validate": "^1.0.1",
- "npmlog": "~4.1.2",
- "once": "~1.4.0",
- "opener": "^1.5.2",
- "osenv": "^0.1.5",
- "pacote": "^9.5.12",
- "path-is-inside": "~1.0.2",
- "promise-inflight": "~1.0.1",
- "qrcode-terminal": "^0.12.0",
- "query-string": "^6.8.2",
- "qw": "~1.0.1",
- "read": "~1.0.7",
- "read-cmd-shim": "^1.0.5",
- "read-installed": "~4.0.3",
- "read-package-json": "^2.1.1",
- "read-package-tree": "^5.3.1",
- "readable-stream": "^3.6.0",
- "readdir-scoped-modules": "^1.1.0",
- "request": "^2.88.0",
- "retry": "^0.12.0",
- "rimraf": "^2.7.1",
- "safe-buffer": "^5.1.2",
- "semver": "^5.7.1",
- "sha": "^3.0.0",
- "slide": "~1.1.6",
- "sorted-object": "~2.0.1",
- "sorted-union-stream": "~2.1.3",
- "ssri": "^6.0.2",
- "stringify-package": "^1.0.1",
- "tar": "^4.4.19",
- "text-table": "~0.2.0",
- "tiny-relative-date": "^1.3.0",
- "uid-number": "0.0.6",
- "umask": "~1.1.0",
- "unique-filename": "^1.1.1",
- "unpipe": "~1.0.0",
- "update-notifier": "^2.5.0",
- "uuid": "^3.3.3",
- "validate-npm-package-license": "^3.0.4",
- "validate-npm-package-name": "~3.0.0",
- "which": "^1.3.1",
- "worker-farm": "^1.7.0",
- "write-file-atomic": "^2.4.3"
+ "lock-verify": "^2.0.2",
+ "npm-lifecycle": "^3.0.0",
+ "npm-logical-tree": "^1.2.1",
+ "npm-package-arg": "^6.1.0",
+ "npm-profile": "^4.0.2",
+ "npm-registry-fetch": "^4.0.0",
+ "npmlog": "^4.1.2",
+ "pacote": "^9.5.3",
+ "read-package-json": "^2.0.13",
+ "stringify-package": "^1.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmaccess": {
+ "version": "3.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "aproba": "^2.0.0",
+ "get-stream": "^4.0.0",
+ "npm-package-arg": "^6.1.0",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig": {
+ "version": "1.2.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "figgy-pudding": "^3.5.1",
+ "find-up": "^3.0.0",
+ "ini": "^1.3.5"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig/node_modules/find-up": {
+ "version": "3.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "locate-path": "^3.0.0"
},
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig/node_modules/locate-path": {
+ "version": "3.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "JSONStream": {
- "version": "1.3.5",
- "bundled": true,
- "requires": {
- "jsonparse": "^1.2.0",
- "through": ">=2.2.7 <3"
- }
- },
- "abbrev": {
- "version": "1.1.1",
- "bundled": true
- },
- "agent-base": {
- "version": "4.3.0",
- "bundled": true,
- "requires": {
- "es6-promisify": "^5.0.0"
- }
- },
- "agentkeepalive": {
- "version": "3.5.2",
- "bundled": true,
- "requires": {
- "humanize-ms": "^1.2.1"
- }
- },
- "ansi-align": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "string-width": "^2.0.0"
- }
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "bundled": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "ansicolors": {
- "version": "0.3.2",
- "bundled": true
- },
- "ansistyles": {
- "version": "0.1.3",
- "bundled": true
- },
- "aproba": {
- "version": "2.0.0",
- "bundled": true
- },
- "archy": {
- "version": "1.0.0",
- "bundled": true
- },
- "are-we-there-yet": {
- "version": "1.1.4",
- "bundled": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": 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"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "asap": {
- "version": "2.0.6",
- "bundled": true
- },
- "asn1": {
- "version": "0.2.4",
- "bundled": true,
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "bundled": true
- },
- "asynckit": {
- "version": "0.4.0",
- "bundled": true
- },
- "aws-sign2": {
- "version": "0.7.0",
- "bundled": true
- },
- "aws4": {
- "version": "1.8.0",
- "bundled": true
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true,
- "requires": {
- "tweetnacl": "^0.14.3"
- }
- },
- "bin-links": {
- "version": "1.1.8",
- "bundled": true,
- "requires": {
- "bluebird": "^3.5.3",
- "cmd-shim": "^3.0.0",
- "gentle-fs": "^2.3.0",
- "graceful-fs": "^4.1.15",
- "npm-normalize-package-bin": "^1.0.0",
- "write-file-atomic": "^2.3.0"
- }
- },
- "bluebird": {
- "version": "3.5.5",
- "bundled": true
- },
- "boxen": {
- "version": "1.3.0",
- "bundled": true,
- "requires": {
- "ansi-align": "^2.0.0",
- "camelcase": "^4.0.0",
- "chalk": "^2.0.1",
- "cli-boxes": "^1.0.0",
- "string-width": "^2.0.0",
- "term-size": "^1.2.0",
- "widest-line": "^2.0.0"
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "buffer-from": {
- "version": "1.0.0",
- "bundled": true
- },
- "builtins": {
- "version": "1.0.3",
- "bundled": true
- },
- "byline": {
- "version": "5.0.0",
- "bundled": true
- },
- "byte-size": {
- "version": "5.0.1",
- "bundled": true
- },
- "cacache": {
- "version": "12.0.3",
- "bundled": true,
- "requires": {
- "bluebird": "^3.5.5",
- "chownr": "^1.1.1",
- "figgy-pudding": "^3.5.1",
- "glob": "^7.1.4",
- "graceful-fs": "^4.1.15",
- "infer-owner": "^1.0.3",
- "lru-cache": "^5.1.1",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.6.3",
- "ssri": "^6.0.1",
- "unique-filename": "^1.1.1",
- "y18n": "^4.0.0"
- }
- },
- "call-limit": {
- "version": "1.1.1",
- "bundled": true
- },
- "camelcase": {
- "version": "4.1.0",
- "bundled": true
- },
- "capture-stack-trace": {
- "version": "1.0.0",
- "bundled": true
- },
- "caseless": {
- "version": "0.12.0",
- "bundled": true
- },
- "chalk": {
- "version": "2.4.1",
- "bundled": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "chownr": {
- "version": "1.1.4",
- "bundled": true
- },
- "ci-info": {
- "version": "2.0.0",
- "bundled": true
- },
- "cidr-regex": {
- "version": "2.0.10",
- "bundled": true,
- "requires": {
- "ip-regex": "^2.1.0"
- }
- },
- "cli-boxes": {
- "version": "1.0.0",
- "bundled": true
- },
- "cli-columns": {
- "version": "3.1.2",
- "bundled": true,
- "requires": {
- "string-width": "^2.0.0",
- "strip-ansi": "^3.0.1"
- }
- },
- "cli-table3": {
- "version": "0.5.1",
- "bundled": true,
- "requires": {
- "colors": "^1.1.2",
- "object-assign": "^4.1.0",
- "string-width": "^2.1.1"
- }
- },
- "cliui": {
- "version": "5.0.0",
- "bundled": true,
- "requires": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "bundled": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "bundled": true
- },
- "string-width": {
- "version": "3.1.0",
- "bundled": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "bundled": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- }
- }
- },
- "clone": {
- "version": "1.0.4",
- "bundled": true
- },
- "cmd-shim": {
- "version": "3.0.3",
- "bundled": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "mkdirp": "~0.5.0"
- }
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true
- },
- "color-convert": {
- "version": "1.9.1",
- "bundled": true,
- "requires": {
- "color-name": "^1.1.1"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "bundled": true
- },
- "colors": {
- "version": "1.3.3",
- "bundled": true,
- "optional": true
- },
- "columnify": {
- "version": "1.5.4",
- "bundled": true,
- "requires": {
- "strip-ansi": "^3.0.0",
- "wcwidth": "^1.0.0"
- }
- },
- "combined-stream": {
- "version": "1.0.6",
- "bundled": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true
- },
- "concat-stream": {
- "version": "1.6.2",
- "bundled": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": 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"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "config-chain": {
- "version": "1.1.12",
- "bundled": true,
- "requires": {
- "ini": "^1.3.4",
- "proto-list": "~1.2.1"
- }
- },
- "configstore": {
- "version": "3.1.5",
- "bundled": true,
- "requires": {
- "dot-prop": "^4.2.1",
- "graceful-fs": "^4.1.2",
- "make-dir": "^1.0.0",
- "unique-string": "^1.0.0",
- "write-file-atomic": "^2.0.0",
- "xdg-basedir": "^3.0.0"
- }
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true
- },
- "copy-concurrently": {
- "version": "1.0.5",
- "bundled": true,
- "requires": {
- "aproba": "^1.1.1",
- "fs-write-stream-atomic": "^1.0.8",
- "iferr": "^0.1.5",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.0"
- },
- "dependencies": {
- "aproba": {
- "version": "1.2.0",
- "bundled": true
- },
- "iferr": {
- "version": "0.1.5",
- "bundled": true
- }
- }
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true
- },
- "create-error-class": {
- "version": "3.0.2",
- "bundled": true,
- "requires": {
- "capture-stack-trace": "^1.0.0"
- }
- },
- "cross-spawn": {
- "version": "5.1.0",
- "bundled": true,
- "requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "dependencies": {
- "lru-cache": {
- "version": "4.1.5",
- "bundled": true,
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "yallist": {
- "version": "2.1.2",
- "bundled": true
- }
- }
- },
- "crypto-random-string": {
- "version": "1.0.0",
- "bundled": true
- },
- "cyclist": {
- "version": "0.2.2",
- "bundled": true
- },
- "dashdash": {
- "version": "1.14.1",
- "bundled": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "debug": {
- "version": "3.1.0",
- "bundled": true,
- "requires": {
- "ms": "2.0.0"
- },
- "dependencies": {
- "ms": {
- "version": "2.0.0",
- "bundled": true
- }
- }
- },
- "debuglog": {
- "version": "1.0.1",
- "bundled": true
- },
- "decamelize": {
- "version": "1.2.0",
- "bundled": true
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "bundled": true
- },
- "deep-extend": {
- "version": "0.6.0",
- "bundled": true
- },
- "defaults": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "clone": "^1.0.2"
- }
- },
- "define-properties": {
- "version": "1.1.3",
- "bundled": true,
- "requires": {
- "object-keys": "^1.0.12"
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "bundled": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true
- },
- "detect-indent": {
- "version": "5.0.0",
- "bundled": true
- },
- "detect-newline": {
- "version": "2.1.0",
- "bundled": true
- },
- "dezalgo": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "asap": "^2.0.0",
- "wrappy": "1"
- }
- },
- "dot-prop": {
- "version": "4.2.1",
- "bundled": true,
- "requires": {
- "is-obj": "^1.0.0"
- }
- },
- "dotenv": {
- "version": "5.0.1",
- "bundled": true
- },
- "duplexer3": {
- "version": "0.1.4",
- "bundled": true
- },
- "duplexify": {
- "version": "3.6.0",
- "bundled": true,
- "requires": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "stream-shift": "^1.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": 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"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "bundled": true,
- "optional": true,
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "editor": {
- "version": "1.0.0",
- "bundled": true
- },
- "emoji-regex": {
- "version": "7.0.3",
- "bundled": true
- },
- "encoding": {
- "version": "0.1.12",
- "bundled": true,
- "requires": {
- "iconv-lite": "~0.4.13"
- }
- },
- "end-of-stream": {
- "version": "1.4.1",
- "bundled": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "env-paths": {
- "version": "2.2.0",
- "bundled": true
- },
- "err-code": {
- "version": "1.1.2",
- "bundled": true
- },
- "errno": {
- "version": "0.1.7",
- "bundled": true,
- "requires": {
- "prr": "~1.0.1"
- }
- },
- "es-abstract": {
- "version": "1.12.0",
- "bundled": true,
- "requires": {
- "es-to-primitive": "^1.1.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.1",
- "is-callable": "^1.1.3",
- "is-regex": "^1.0.4"
- }
- },
- "es-to-primitive": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- }
- },
- "es6-promise": {
- "version": "4.2.8",
- "bundled": true
- },
- "es6-promisify": {
- "version": "5.0.0",
- "bundled": true,
- "requires": {
- "es6-promise": "^4.0.3"
- }
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "bundled": true
- },
- "execa": {
- "version": "0.7.0",
- "bundled": true,
- "requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- },
- "dependencies": {
- "get-stream": {
- "version": "3.0.0",
- "bundled": true
- }
- }
- },
- "extend": {
- "version": "3.0.2",
- "bundled": true
- },
- "extsprintf": {
- "version": "1.3.0",
- "bundled": true
- },
- "fast-json-stable-stringify": {
- "version": "2.0.0",
- "bundled": true
- },
- "figgy-pudding": {
- "version": "3.5.1",
- "bundled": true
- },
- "find-npm-prefix": {
- "version": "1.0.2",
- "bundled": true
- },
- "flush-write-stream": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.4"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": 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"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "forever-agent": {
- "version": "0.6.1",
- "bundled": true
- },
- "form-data": {
- "version": "2.3.2",
- "bundled": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "from2": {
- "version": "2.3.0",
- "bundled": true,
- "requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": 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"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "fs-minipass": {
- "version": "1.2.7",
- "bundled": true,
- "requires": {
- "minipass": "^2.6.0"
- },
- "dependencies": {
- "minipass": {
- "version": "2.9.0",
- "bundled": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- }
- }
- },
- "fs-vacuum": {
- "version": "1.2.10",
- "bundled": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "path-is-inside": "^1.0.1",
- "rimraf": "^2.5.2"
- }
- },
- "fs-write-stream-atomic": {
- "version": "1.0.10",
- "bundled": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "iferr": "^0.1.5",
- "imurmurhash": "^0.1.4",
- "readable-stream": "1 || 2"
- },
- "dependencies": {
- "iferr": {
- "version": "0.1.5",
- "bundled": true
- },
- "readable-stream": {
- "version": "2.3.6",
- "bundled": 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"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true
- },
- "function-bind": {
- "version": "1.1.1",
- "bundled": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- },
- "dependencies": {
- "aproba": {
- "version": "1.2.0",
- "bundled": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
- }
- },
- "genfun": {
- "version": "5.0.0",
- "bundled": true
- },
- "gentle-fs": {
- "version": "2.3.1",
- "bundled": true,
- "requires": {
- "aproba": "^1.1.2",
- "chownr": "^1.1.2",
- "cmd-shim": "^3.0.3",
- "fs-vacuum": "^1.2.10",
- "graceful-fs": "^4.1.11",
- "iferr": "^0.1.5",
- "infer-owner": "^1.0.4",
- "mkdirp": "^0.5.1",
- "path-is-inside": "^1.0.2",
- "read-cmd-shim": "^1.0.1",
- "slide": "^1.1.6"
- },
- "dependencies": {
- "aproba": {
- "version": "1.2.0",
- "bundled": true
- },
- "iferr": {
- "version": "0.1.5",
- "bundled": true
- }
- }
- },
- "get-caller-file": {
- "version": "2.0.5",
- "bundled": true
- },
- "get-stream": {
- "version": "4.1.0",
- "bundled": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "getpass": {
- "version": "0.1.7",
- "bundled": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "glob": {
- "version": "7.1.6",
- "bundled": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "global-dirs": {
- "version": "0.1.1",
- "bundled": true,
- "requires": {
- "ini": "^1.3.4"
- }
- },
- "got": {
- "version": "6.7.1",
- "bundled": true,
- "requires": {
- "create-error-class": "^3.0.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^3.0.0",
- "is-redirect": "^1.0.0",
- "is-retry-allowed": "^1.0.0",
- "is-stream": "^1.0.0",
- "lowercase-keys": "^1.0.0",
- "safe-buffer": "^5.0.1",
- "timed-out": "^4.0.0",
- "unzip-response": "^2.0.1",
- "url-parse-lax": "^1.0.0"
- },
- "dependencies": {
- "get-stream": {
- "version": "3.0.0",
- "bundled": true
- }
- }
- },
- "graceful-fs": {
- "version": "4.2.4",
- "bundled": true
- },
- "har-schema": {
- "version": "2.0.0",
- "bundled": true
- },
- "har-validator": {
- "version": "5.1.5",
- "bundled": true,
- "requires": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- },
- "dependencies": {
- "ajv": {
- "version": "6.12.6",
- "bundled": true,
- "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"
- }
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "bundled": true
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "bundled": true
- }
- }
- },
- "has": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "bundled": true
- },
- "has-symbols": {
- "version": "1.0.0",
- "bundled": true
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true
- },
- "hosted-git-info": {
- "version": "2.8.9",
- "bundled": true
- },
- "http-cache-semantics": {
- "version": "3.8.1",
- "bundled": true
- },
- "http-proxy-agent": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "agent-base": "4",
- "debug": "3.1.0"
- }
- },
- "http-signature": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
- "https-proxy-agent": {
- "version": "2.2.4",
- "bundled": true,
- "requires": {
- "agent-base": "^4.3.0",
- "debug": "^3.1.0"
- }
- },
- "humanize-ms": {
- "version": "1.2.1",
- "bundled": true,
- "requires": {
- "ms": "^2.0.0"
- }
- },
- "iconv-lite": {
- "version": "0.4.23",
- "bundled": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "iferr": {
- "version": "1.0.2",
- "bundled": true
- },
- "ignore-walk": {
- "version": "3.0.3",
- "bundled": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "import-lazy": {
- "version": "2.1.0",
- "bundled": true
- },
- "imurmurhash": {
- "version": "0.1.4",
- "bundled": true
- },
- "infer-owner": {
- "version": "1.0.4",
- "bundled": true
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "bundled": true
- },
- "ini": {
- "version": "1.3.8",
- "bundled": true
- },
- "init-package-json": {
- "version": "1.10.3",
- "bundled": true,
- "requires": {
- "glob": "^7.1.1",
- "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0",
- "promzard": "^0.3.0",
- "read": "~1.0.1",
- "read-package-json": "1 || 2",
- "semver": "2.x || 3.x || 4 || 5",
- "validate-npm-package-license": "^3.0.1",
- "validate-npm-package-name": "^3.0.0"
- }
- },
- "ip": {
- "version": "1.1.5",
- "bundled": true
- },
- "ip-regex": {
- "version": "2.1.0",
- "bundled": true
- },
- "is-callable": {
- "version": "1.1.4",
- "bundled": true
- },
- "is-ci": {
- "version": "1.2.1",
- "bundled": true,
- "requires": {
- "ci-info": "^1.5.0"
- },
- "dependencies": {
- "ci-info": {
- "version": "1.6.0",
- "bundled": true
- }
- }
- },
- "is-cidr": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "cidr-regex": "^2.0.10"
- }
- },
- "is-date-object": {
- "version": "1.0.1",
- "bundled": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "is-installed-globally": {
- "version": "0.1.0",
- "bundled": true,
- "requires": {
- "global-dirs": "^0.1.0",
- "is-path-inside": "^1.0.0"
- }
- },
- "is-npm": {
- "version": "1.0.0",
- "bundled": true
- },
- "is-obj": {
- "version": "1.0.1",
- "bundled": true
- },
- "is-path-inside": {
- "version": "1.0.1",
- "bundled": true,
- "requires": {
- "path-is-inside": "^1.0.1"
- }
- },
- "is-redirect": {
- "version": "1.0.0",
- "bundled": true
- },
- "is-regex": {
- "version": "1.0.4",
- "bundled": true,
- "requires": {
- "has": "^1.0.1"
- }
- },
- "is-retry-allowed": {
- "version": "1.2.0",
- "bundled": true
- },
- "is-stream": {
- "version": "1.1.0",
- "bundled": true
- },
- "is-symbol": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "has-symbols": "^1.0.0"
- }
- },
- "is-typedarray": {
- "version": "1.0.0",
- "bundled": true
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true
- },
- "isexe": {
- "version": "2.0.0",
- "bundled": true
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig/node_modules/p-limit": {
+ "version": "2.2.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig/node_modules/p-locate": {
+ "version": "3.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig/node_modules/p-try": {
+ "version": "2.2.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmhook": {
+ "version": "5.0.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "aproba": "^2.0.0",
+ "figgy-pudding": "^3.4.1",
+ "get-stream": "^4.0.0",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmorg": {
+ "version": "1.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "aproba": "^2.0.0",
+ "figgy-pudding": "^3.4.1",
+ "get-stream": "^4.0.0",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmpublish": {
+ "version": "1.1.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "aproba": "^2.0.0",
+ "figgy-pudding": "^3.5.1",
+ "get-stream": "^4.0.0",
+ "lodash.clonedeep": "^4.5.0",
+ "normalize-package-data": "^2.4.0",
+ "npm-package-arg": "^6.1.0",
+ "npm-registry-fetch": "^4.0.0",
+ "semver": "^5.5.1",
+ "ssri": "^6.0.1"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmsearch": {
+ "version": "2.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "figgy-pudding": "^3.5.1",
+ "get-stream": "^4.0.0",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmteam": {
+ "version": "1.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "aproba": "^2.0.0",
+ "figgy-pudding": "^3.4.1",
+ "get-stream": "^4.0.0",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpx": {
+ "version": "10.2.4",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "dotenv": "^5.0.1",
+ "npm-package-arg": "^6.0.0",
+ "rimraf": "^2.6.2",
+ "safe-buffer": "^5.1.0",
+ "update-notifier": "^2.3.0",
+ "which": "^1.3.0",
+ "y18n": "^4.0.0",
+ "yargs": "^14.2.3"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lock-verify": {
+ "version": "2.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "npm-package-arg": "^6.1.0",
+ "semver": "^5.4.1"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lockfile": {
+ "version": "1.0.4",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._baseindexof": {
+ "version": "3.1.0",
+ "extraneous": true,
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._baseuniq": {
+ "version": "4.6.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "lodash._createset": "~4.0.0",
+ "lodash._root": "~3.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._bindcallback": {
+ "version": "3.0.1",
+ "extraneous": true,
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._cacheindexof": {
+ "version": "3.0.2",
+ "extraneous": true,
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._createcache": {
+ "version": "3.1.2",
+ "extraneous": true,
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "lodash._getnative": "^3.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._createset": {
+ "version": "4.0.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._getnative": {
+ "version": "3.9.1",
+ "extraneous": true,
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._root": {
+ "version": "3.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.clonedeep": {
+ "version": "4.5.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.restparam": {
+ "version": "3.6.1",
+ "extraneous": true,
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.union": {
+ "version": "4.6.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.uniq": {
+ "version": "4.5.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.without": {
+ "version": "4.4.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lowercase-keys": {
+ "version": "1.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lru-cache": {
+ "version": "5.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/make-dir": {
+ "version": "1.3.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "pify": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/make-fetch-happen": {
+ "version": "5.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "agentkeepalive": "^3.4.1",
+ "cacache": "^12.0.0",
+ "http-cache-semantics": "^3.8.1",
+ "http-proxy-agent": "^2.1.0",
+ "https-proxy-agent": "^2.2.3",
+ "lru-cache": "^5.1.1",
+ "mississippi": "^3.0.0",
+ "node-fetch-npm": "^2.0.2",
+ "promise-retry": "^1.1.1",
+ "socks-proxy-agent": "^4.0.0",
+ "ssri": "^6.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/meant": {
+ "version": "1.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mime-db": {
+ "version": "1.35.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mime-types": {
+ "version": "2.1.19",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "mime-db": "~1.35.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/minimatch": {
+ "version": "3.0.4",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/minimist": {
+ "version": "1.2.5",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/minizlib": {
+ "version": "1.3.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "minipass": "^2.9.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/minizlib/node_modules/minipass": {
+ "version": "2.9.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mississippi": {
+ "version": "3.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "concat-stream": "^1.5.0",
+ "duplexify": "^3.4.2",
+ "end-of-stream": "^1.1.0",
+ "flush-write-stream": "^1.0.0",
+ "from2": "^2.1.0",
+ "parallel-transform": "^1.1.0",
+ "pump": "^3.0.0",
+ "pumpify": "^1.3.3",
+ "stream-each": "^1.1.0",
+ "through2": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mkdirp": {
+ "version": "0.5.5",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "minimist": "^1.2.5"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mkdirp/node_modules/minimist": {
+ "version": "1.2.5",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/move-concurrently": {
+ "version": "1.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "aproba": "^1.1.1",
+ "copy-concurrently": "^1.0.0",
+ "fs-write-stream-atomic": "^1.0.8",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.3"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/move-concurrently/node_modules/aproba": {
+ "version": "1.2.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ms": {
+ "version": "2.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mute-stream": {
+ "version": "0.0.7",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/node-fetch-npm": {
+ "version": "2.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "encoding": "^0.1.11",
+ "json-parse-better-errors": "^1.0.0",
+ "safe-buffer": "^5.1.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/node-gyp": {
+ "version": "5.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "env-paths": "^2.2.0",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.2",
+ "mkdirp": "^0.5.1",
+ "nopt": "^4.0.1",
+ "npmlog": "^4.1.2",
+ "request": "^2.88.0",
+ "rimraf": "^2.6.3",
+ "semver": "^5.7.1",
+ "tar": "^4.4.12",
+ "which": "^1.3.1"
+ },
+ "bin": {
+ "node-gyp": "bin/node-gyp.js"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/nopt": {
+ "version": "4.0.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve": {
+ "version": "1.10.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-audit-report": {
+ "version": "1.3.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "cli-table3": "^0.5.0",
+ "console-control-strings": "^1.1.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-bundled": {
+ "version": "1.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-cache-filename": {
+ "version": "1.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-install-checks": {
+ "version": "3.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "semver": "^2.3.0 || 3.x || 4 || 5"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-lifecycle": {
+ "version": "3.1.5",
+ "dev": true,
+ "inBundle": true,
+ "license": "Artistic-2.0",
+ "peer": true,
+ "dependencies": {
+ "byline": "^5.0.0",
+ "graceful-fs": "^4.1.15",
+ "node-gyp": "^5.0.2",
+ "resolve-from": "^4.0.0",
+ "slide": "^1.1.6",
+ "uid-number": "0.0.6",
+ "umask": "^1.1.0",
+ "which": "^1.3.1"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-logical-tree": {
+ "version": "1.2.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-normalize-package-bin": {
+ "version": "1.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-package-arg": {
+ "version": "6.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "hosted-git-info": "^2.7.1",
+ "osenv": "^0.1.5",
+ "semver": "^5.6.0",
+ "validate-npm-package-name": "^3.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-packlist": {
+ "version": "1.4.8",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1",
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-pick-manifest": {
+ "version": "3.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "figgy-pudding": "^3.5.1",
+ "npm-package-arg": "^6.0.0",
+ "semver": "^5.4.1"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-profile": {
+ "version": "4.0.4",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "aproba": "^1.1.2 || 2",
+ "figgy-pudding": "^3.4.1",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-registry-fetch": {
+ "version": "4.0.7",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "bluebird": "^3.5.1",
+ "figgy-pudding": "^3.4.1",
+ "JSONStream": "^1.3.4",
+ "lru-cache": "^5.1.1",
+ "make-fetch-happen": "^5.0.0",
+ "npm-package-arg": "^6.1.0",
+ "safe-buffer": "^5.2.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-run-path": {
+ "version": "2.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "path-key": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-user-validate": {
+ "version": "1.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npmlog": {
+ "version": "4.1.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/number-is-nan": {
+ "version": "1.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/oauth-sign": {
+ "version": "0.9.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/object-assign": {
+ "version": "4.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/object-keys": {
+ "version": "1.0.12",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/object.getownpropertydescriptors": {
+ "version": "2.0.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.5.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/once": {
+ "version": "1.4.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/opener": {
+ "version": "1.5.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "(WTFPL OR MIT)",
+ "peer": true,
+ "bin": {
+ "opener": "bin/opener-bin.js"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/os-homedir": {
+ "version": "1.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/os-tmpdir": {
+ "version": "1.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/osenv": {
+ "version": "0.1.5",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/p-finally": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/package-json": {
+ "version": "4.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "got": "^6.7.1",
+ "registry-auth-token": "^3.0.1",
+ "registry-url": "^3.0.3",
+ "semver": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pacote": {
+ "version": "9.5.12",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "bluebird": "^3.5.3",
+ "cacache": "^12.0.2",
+ "chownr": "^1.1.2",
+ "figgy-pudding": "^3.5.1",
+ "get-stream": "^4.1.0",
+ "glob": "^7.1.3",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^5.1.1",
+ "make-fetch-happen": "^5.0.0",
+ "minimatch": "^3.0.4",
+ "minipass": "^2.3.5",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "normalize-package-data": "^2.4.0",
+ "npm-normalize-package-bin": "^1.0.0",
+ "npm-package-arg": "^6.1.0",
+ "npm-packlist": "^1.1.12",
+ "npm-pick-manifest": "^3.0.0",
+ "npm-registry-fetch": "^4.0.0",
+ "osenv": "^0.1.5",
+ "promise-inflight": "^1.0.1",
+ "promise-retry": "^1.1.1",
+ "protoduck": "^5.0.1",
+ "rimraf": "^2.6.2",
+ "safe-buffer": "^5.1.2",
+ "semver": "^5.6.0",
+ "ssri": "^6.0.1",
+ "tar": "^4.4.10",
+ "unique-filename": "^1.1.1",
+ "which": "^1.3.1"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pacote/node_modules/minipass": {
+ "version": "2.9.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/parallel-transform": {
+ "version": "1.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "cyclist": "~0.2.2",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.1.5"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream": {
+ "version": "2.3.6",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/parallel-transform/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/path-exists": {
+ "version": "3.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/path-is-inside": {
+ "version": "1.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "(WTFPL OR MIT)",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/path-key": {
+ "version": "2.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/path-parse": {
+ "version": "1.0.6",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/performance-now": {
+ "version": "2.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pify": {
+ "version": "3.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/prepend-http": {
+ "version": "1.0.4",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/process-nextick-args": {
+ "version": "2.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/promise-inflight": {
+ "version": "1.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/promise-retry": {
+ "version": "1.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "err-code": "^1.0.0",
+ "retry": "^0.10.0"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/promise-retry/node_modules/retry": {
+ "version": "0.10.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/promzard": {
+ "version": "0.3.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "read": "1"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/proto-list": {
+ "version": "1.2.4",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/protoduck": {
+ "version": "5.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "genfun": "^5.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/prr": {
+ "version": "1.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pseudomap": {
+ "version": "1.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/psl": {
+ "version": "1.1.29",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pump": {
+ "version": "3.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pumpify": {
+ "version": "1.5.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pumpify/node_modules/pump": {
+ "version": "2.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/punycode": {
+ "version": "1.4.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/qrcode-terminal": {
+ "version": "0.12.0",
+ "dev": true,
+ "inBundle": true,
+ "peer": true,
+ "bin": {
+ "qrcode-terminal": "bin/qrcode-terminal.js"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/qs": {
+ "version": "6.5.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/query-string": {
+ "version": "6.8.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "decode-uri-component": "^0.2.0",
+ "split-on-first": "^1.0.0",
+ "strict-uri-encode": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/qw": {
+ "version": "1.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/rc": {
+ "version": "1.2.8",
+ "dev": true,
+ "inBundle": true,
+ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
+ "peer": true,
+ "dependencies": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/read": {
+ "version": "1.0.7",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "mute-stream": "~0.0.4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/read-cmd-shim": {
+ "version": "1.0.5",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/read-installed": {
+ "version": "4.0.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "debuglog": "^1.0.1",
+ "read-package-json": "^2.0.0",
+ "readdir-scoped-modules": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "slide": "~1.1.3",
+ "util-extend": "^1.0.1"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/read-package-json": {
+ "version": "2.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "glob": "^7.1.1",
+ "json-parse-better-errors": "^1.0.1",
+ "normalize-package-data": "^2.0.0",
+ "npm-normalize-package-bin": "^1.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/read-package-tree": {
+ "version": "5.3.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "read-package-json": "^2.0.0",
+ "readdir-scoped-modules": "^1.0.0",
+ "util-promisify": "^2.1.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/readable-stream": {
+ "version": "3.6.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/readdir-scoped-modules": {
+ "version": "1.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "debuglog": "^1.0.1",
+ "dezalgo": "^1.0.0",
+ "graceful-fs": "^4.1.2",
+ "once": "^1.3.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/registry-auth-token": {
+ "version": "3.4.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "rc": "^1.1.6",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/registry-url": {
+ "version": "3.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "rc": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/request": {
+ "version": "2.88.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "dependencies": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/require-directory": {
+ "version": "2.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/require-main-filename": {
+ "version": "2.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/resolve-from": {
+ "version": "4.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/retry": {
+ "version": "0.12.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/rimraf": {
+ "version": "2.7.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/run-queue": {
+ "version": "1.0.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "aproba": "^1.1.1"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/run-queue/node_modules/aproba": {
+ "version": "1.2.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/semver": {
+ "version": "5.7.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/semver-diff": {
+ "version": "2.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "semver": "^5.0.3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/set-blocking": {
+ "version": "2.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sha": {
+ "version": "3.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "(BSD-2-Clause OR MIT)",
+ "peer": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/shebang-command": {
+ "version": "1.2.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "shebang-regex": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/shebang-regex": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/signal-exit": {
+ "version": "3.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/slide": {
+ "version": "1.1.6",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/smart-buffer": {
+ "version": "4.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/socks": {
+ "version": "2.3.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ip": "1.1.5",
+ "smart-buffer": "^4.1.0"
+ },
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/socks-proxy-agent": {
+ "version": "4.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "agent-base": "~4.2.1",
+ "socks": "~2.3.2"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/socks-proxy-agent/node_modules/agent-base": {
+ "version": "4.2.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "es6-promisify": "^5.0.0"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-object": {
+ "version": "2.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "(WTFPL OR MIT)",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-union-stream": {
+ "version": "2.1.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "from2": "^1.3.0",
+ "stream-iterate": "^1.1.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-union-stream/node_modules/from2": {
+ "version": "1.3.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "inherits": "~2.0.1",
+ "readable-stream": "~1.1.10"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-union-stream/node_modules/isarray": {
+ "version": "0.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream": {
+ "version": "1.1.14",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-union-stream/node_modules/string_decoder": {
+ "version": "0.10.31",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/spdx-correct": {
+ "version": "3.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/spdx-exceptions": {
+ "version": "2.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "CC-BY-3.0",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/spdx-expression-parse": {
+ "version": "3.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/spdx-license-ids": {
+ "version": "3.0.5",
+ "dev": true,
+ "inBundle": true,
+ "license": "CC0-1.0",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/split-on-first": {
+ "version": "1.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sshpk": {
+ "version": "1.14.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "getpass": "^0.1.1",
+ "safer-buffer": "^2.0.2"
+ },
+ "bin": {
+ "sshpk-conv": "bin/sshpk-conv",
+ "sshpk-sign": "bin/sshpk-sign",
+ "sshpk-verify": "bin/sshpk-verify"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "optionalDependencies": {
+ "bcrypt-pbkdf": "^1.0.0",
+ "ecc-jsbn": "~0.1.1",
+ "jsbn": "~0.1.0",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ssri": {
+ "version": "6.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "figgy-pudding": "^3.5.1"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stream-each": {
+ "version": "1.2.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stream-iterate": {
+ "version": "1.2.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "readable-stream": "^2.1.5",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream": {
+ "version": "2.3.6",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stream-iterate/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stream-shift": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/strict-uri-encode": {
+ "version": "2.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string_decoder": {
+ "version": "1.3.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string_decoder/node_modules/safe-buffer": {
+ "version": "5.2.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string-width": {
+ "version": "2.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string-width/node_modules/ansi-regex": {
+ "version": "3.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string-width/node_modules/is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string-width/node_modules/strip-ansi": {
+ "version": "4.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stringify-package": {
+ "version": "1.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/strip-eof": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/supports-color": {
+ "version": "5.4.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tar": {
+ "version": "4.4.13",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "chownr": "^1.1.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.8.6",
+ "minizlib": "^1.2.1",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.3"
+ },
+ "engines": {
+ "node": ">=4.5"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tar/node_modules/minipass": {
+ "version": "2.9.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/term-size": {
+ "version": "1.2.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "execa": "^0.7.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/text-table": {
+ "version": "0.2.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/through": {
+ "version": "2.3.8",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/through2": {
+ "version": "2.0.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/through2/node_modules/readable-stream": {
+ "version": "2.3.6",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/through2/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/timed-out": {
+ "version": "4.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tiny-relative-date": {
+ "version": "1.3.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tough-cookie": {
+ "version": "2.4.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "dependencies": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tweetnacl": {
+ "version": "0.14.5",
+ "dev": true,
+ "inBundle": true,
+ "license": "Unlicense",
+ "optional": true,
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/typedarray": {
+ "version": "0.0.6",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/uid-number": {
+ "version": "0.0.6",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/umask": {
+ "version": "1.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/unique-filename": {
+ "version": "1.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/unique-slug": {
+ "version": "2.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/unique-string": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "crypto-random-string": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/unpipe": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/unzip-response": {
+ "version": "2.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/update-notifier": {
+ "version": "2.5.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "boxen": "^1.2.1",
+ "chalk": "^2.0.1",
+ "configstore": "^3.0.0",
+ "import-lazy": "^2.1.0",
+ "is-ci": "^1.0.10",
+ "is-installed-globally": "^0.1.0",
+ "is-npm": "^1.0.0",
+ "latest-version": "^3.0.0",
+ "semver-diff": "^2.0.0",
+ "xdg-basedir": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/uri-js": {
+ "version": "4.4.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/uri-js/node_modules/punycode": {
+ "version": "2.1.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/url-parse-lax": {
+ "version": "1.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "prepend-http": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/util-extend": {
+ "version": "1.0.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/util-promisify": {
+ "version": "2.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/uuid": {
+ "version": "3.3.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "dev": true,
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/validate-npm-package-name": {
+ "version": "3.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "builtins": "^1.0.3"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/verror": {
+ "version": "1.10.0",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wcwidth": {
+ "version": "1.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/which": {
+ "version": "1.3.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/which-module": {
+ "version": "2.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wide-align": {
+ "version": "1.1.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "string-width": "^1.0.2"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wide-align/node_modules/string-width": {
+ "version": "1.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/widest-line": {
+ "version": "2.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "string-width": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/worker-farm": {
+ "version": "1.7.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "errno": "~0.1.7"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrap-ansi": {
+ "version": "5.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": {
+ "version": "4.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": {
+ "version": "3.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": {
+ "version": "5.2.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrappy": {
+ "version": "1.0.2",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/write-file-atomic": {
+ "version": "2.4.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/xdg-basedir": {
+ "version": "3.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/xtend": {
+ "version": "4.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/y18n": {
+ "version": "4.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yallist": {
+ "version": "3.0.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs": {
+ "version": "14.2.3",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "cliui": "^5.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^15.0.1"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs-parser": {
+ "version": "15.0.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs-parser/node_modules/camelcase": {
+ "version": "5.3.1",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/ansi-regex": {
+ "version": "4.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/find-up": {
+ "version": "3.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "locate-path": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/locate-path": {
+ "version": "3.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/p-limit": {
+ "version": "2.3.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/p-locate": {
+ "version": "3.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/p-try": {
+ "version": "2.2.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/string-width": {
+ "version": "3.1.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/strip-ansi": {
+ "version": "5.2.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/open": {
+ "version": "7.4.2",
+ "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
+ "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "is-docker": "^2.0.0",
+ "is-wsl": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/openapi-backend": {
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/openapi-backend/-/openapi-backend-3.9.2.tgz",
+ "integrity": "sha512-+IqhtObMGeRf4aDB6L5Lc3nZYPHB9JRkTiOaNHKx26SDWcaMAof6RnABbgLDNVRRiz+fbJPmizWcFSkCPX8qeQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@apidevtools/json-schema-ref-parser": "^9.0.7",
+ "ajv": "^6.10.0",
+ "bath-es5": "^3.0.3",
+ "cookie": "^0.4.0",
+ "lodash": "^4.17.15",
+ "mock-json-schema": "^1.0.7",
+ "openapi-schema-validator": "^7.0.1",
+ "openapi-types": "^7.0.1",
+ "qs": "^6.9.3"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/openapi-schema-validator": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/openapi-schema-validator/-/openapi-schema-validator-7.2.3.tgz",
+ "integrity": "sha512-XT8NM5e/zBBa/cydTS1IeYkCPzJp9oixvt9Y1lEx+2gsCTOooNxw9x/KEivtWMSokne7X1aR+VtsYHQtNNOSyA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "ajv": "^6.5.2",
+ "lodash.merge": "^4.6.1",
+ "openapi-types": "^7.2.3",
+ "swagger-schema-official": "2.0.0-bab6bed"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/openapi-types": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-7.2.3.tgz",
+ "integrity": "sha512-olbaNxz12R27+mTyJ/ZAFEfUruauHH27AkeQHDHRq5AF0LdNkK1SSV7EourXQDK+4aX7dv2HtyirAGK06WMAsA==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/parse5": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
+ "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/property-information": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
+ "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "xtend": "^4.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/raw-body": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/raw-body/node_modules/depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/raw-body/node_modules/http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/raw-body/node_modules/setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/rehype": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/rehype/-/rehype-10.0.0.tgz",
+ "integrity": "sha512-0W8M4Y91b2QuzDSTjkZgBOJo79bP089YbSQNPMqebuUVrp6iveoi+Ra6/H7fJwUxq8FCHGCGzkLaq3fvO9XnVg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "rehype-parse": "^6.0.0",
+ "rehype-stringify": "^6.0.0",
+ "unified": "^9.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/rehype-minify-whitespace": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/rehype-minify-whitespace/-/rehype-minify-whitespace-4.0.5.tgz",
+ "integrity": "sha512-QC3Z+bZ5wbv+jGYQewpAAYhXhzuH/TVRx7z08rurBmh9AbG8Nu8oJnvs9LWj43Fd/C7UIhXoQ7Wddgt+ThWK5g==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "hast-util-embedded": "^1.0.0",
+ "hast-util-is-element": "^1.0.0",
+ "hast-util-whitespace": "^1.0.4",
+ "unist-util-is": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/rehype-parse": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz",
+ "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "hast-util-from-parse5": "^5.0.0",
+ "parse5": "^5.0.0",
+ "xtend": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/rehype-stringify": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-6.0.1.tgz",
+ "integrity": "sha512-JfEPRDD4DiG7jet4md7sY07v6ACeb2x+9HWQtRPm2iA6/ic31hCv1SNBUtpolJASxQ/D8gicXiviW4TJKEMPKQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "hast-util-to-html": "^6.0.0",
+ "xtend": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/resolve": {
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
+ "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "is-core-module": "^2.2.0",
+ "path-parse": "^1.0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/send": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.7.2",
+ "mime": "1.6.0",
+ "ms": "2.1.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.1",
+ "statuses": "~1.5.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/send/node_modules/depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/send/node_modules/http-errors": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
+ "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/send/node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/send/node_modules/setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/serve-static": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/simple-git": {
+ "version": "2.48.0",
+ "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.48.0.tgz",
+ "integrity": "sha512-z4qtrRuaAFJS4PUd0g+xy7aN4y+RvEt/QTJpR184lhJguBA1S/LsVlvE/CM95RsYMOFJG3NGGDjqFCzKU19S/A==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@kwsites/file-exists": "^1.1.1",
+ "@kwsites/promise-deferred": "^1.1.1",
+ "debug": "^4.3.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/steveukx/"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/simple-git/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/simple-git/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/space-separated-tokens": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
+ "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==",
+ "dev": true,
+ "peer": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/stringify-entities": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-2.0.0.tgz",
+ "integrity": "sha512-fqqhZzXyAM6pGD9lky/GOPq6V4X0SeTAFBl0iXb/BzOegl40gpf/bV3QQP7zULNYvjr6+Dx8SCaDULjVoOru0A==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "character-entities-html4": "^1.0.0",
+ "character-entities-legacy": "^1.0.0",
+ "is-alphanumerical": "^1.0.0",
+ "is-decimal": "^1.0.2",
+ "is-hexadecimal": "^1.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/tedious": {
+ "version": "11.8.0",
+ "resolved": "https://registry.npmjs.org/tedious/-/tedious-11.8.0.tgz",
+ "integrity": "sha512-GtFrO694x/7CRiUBt0AI4jrMtrkXV+ywifiOrDy4K0ufJLeKB4rgmPjy5Ws366fCaBaKlqQ9RnJ+sCJ1Jbd1lw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@azure/identity": "^1.3.0",
+ "@azure/keyvault-keys": "^4.1.0",
+ "@azure/ms-rest-nodeauth": "^3.0.6",
+ "@js-joda/core": "^3.2.0",
+ "adal-node": "^0.2.1",
+ "bl": "^5.0.0",
+ "depd": "^2.0.0",
+ "iconv-lite": "^0.6.3",
+ "jsbi": "^3.1.5",
+ "native-duplexpair": "^1.0.0",
+ "node-abort-controller": "^2.0.0",
+ "punycode": "^2.1.0",
+ "sprintf-js": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/tedious/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/terser": {
+ "version": "4.8.1",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz",
+ "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "commander": "^2.20.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.12"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/trough": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz",
+ "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==",
+ "dev": true,
+ "peer": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/ueberdb2": {
+ "version": "1.4.19",
+ "resolved": "https://registry.npmjs.org/ueberdb2/-/ueberdb2-1.4.19.tgz",
+ "integrity": "sha512-9D4C9Lpb4fIHf7mdGOd24oYmrE/snEiz907rgWjVOTH/cN4O1kOuRW7VEaUatj9zDUdbne6W9wwypat/CYtZDQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "async": "^3.2.2",
+ "cassandra-driver": "^4.6.3",
+ "dirty": "^1.1.3",
+ "elasticsearch": "^16.7.2",
+ "mongodb": "^3.7.3",
+ "mssql": "^7.3.0",
+ "mysql": "2.18.1",
+ "nano": "^9.0.5",
+ "pg": "^8.7.1",
+ "redis": "^3.1.2",
+ "rethinkdb": "^2.4.2",
+ "simple-git": "^2.47.0"
+ },
+ "engines": {
+ "node": "^10.17.0 || >=11.14.0"
+ },
+ "optionalDependencies": {
+ "sqlite3": "github:mapbox/node-sqlite3#593c9d498be2510d286349134537e3bf89401c4a"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/underscore": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
+ "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/ep_etherpad-lite/node_modules/unified": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz",
+ "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "bail": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-buffer": "^2.0.0",
+ "is-plain-obj": "^2.0.0",
+ "trough": "^1.0.0",
+ "vfile": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/unist-util-is": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
+ "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==",
+ "dev": true,
+ "peer": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/unist-util-stringify-position": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
+ "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@types/unist": "^2.0.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/vfile": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
+ "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "is-buffer": "^2.0.0",
+ "unist-util-stringify-position": "^2.0.0",
+ "vfile-message": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/vfile-message": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz",
+ "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-stringify-position": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/ep_etherpad-lite/node_modules/web-namespaces": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz",
+ "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==",
+ "dev": true,
+ "peer": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/err-code": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
+ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
+ "optional": true
+ },
+ "node_modules/es-abstract": {
+ "version": "1.19.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz",
+ "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.1.1",
+ "get-symbol-description": "^1.0.0",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.2",
+ "string.prototype.trimend": "^1.0.4",
+ "string.prototype.trimstart": "^1.0.4",
+ "unbox-primitive": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-abstract/node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-aggregate-error": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/es-aggregate-error/-/es-aggregate-error-1.0.8.tgz",
+ "integrity": "sha512-AKUb5MKLWMozPlFRHOKqWD7yta5uaEhH21qwtnf6FlKjNjTJOoqFi0/G14+FfSkIQhhu6X68Af4xgRC6y8qG4A==",
+ "dependencies": {
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5",
+ "function-bind": "^1.1.1",
+ "functions-have-names": "^1.2.3",
+ "get-intrinsic": "^1.1.1",
+ "globalthis": "^1.0.2",
+ "has-property-descriptors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-shim-unscopables": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/escodegen": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
+ "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
+ "dependencies": {
+ "esprima": "^4.0.1",
+ "estraverse": "^5.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1"
+ },
+ "bin": {
+ "escodegen": "bin/escodegen.js",
+ "esgenerate": "bin/esgenerate.js"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "optionalDependencies": {
+ "source-map": "~0.6.1"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.14.0.tgz",
+ "integrity": "sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==",
+ "dev": true,
+ "dependencies": {
+ "@eslint/eslintrc": "^1.2.2",
+ "@humanwhocodes/config-array": "^0.9.2",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.1",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.3.1",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^6.0.1",
+ "globals": "^13.6.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.0.4",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-config-etherpad": {
+ "version": "3.0.13",
+ "resolved": "https://registry.npmjs.org/eslint-config-etherpad/-/eslint-config-etherpad-3.0.13.tgz",
+ "integrity": "sha512-Bwt1gDxThlXhY6wan1fb3Jy9kI+yFGctp7+JX6Xs+BwbOdrB4qObgnLKdcLYPKPqv9c4xTSKo3C4BdhTkg7WtQ==",
+ "dev": true,
+ "dependencies": {
+ "@rushstack/eslint-patch": "^1.1.3",
+ "@typescript-eslint/eslint-plugin": "^5.22.0",
+ "@typescript-eslint/parser": "^5.22.0",
+ "eslint-import-resolver-typescript": "^2.7.1",
+ "eslint-plugin-cypress": "^2.12.1",
+ "eslint-plugin-eslint-comments": "^3.2.0",
+ "eslint-plugin-import": "^2.26.0",
+ "eslint-plugin-mocha": "^10.0.4",
+ "eslint-plugin-n": "^15.2.0",
+ "eslint-plugin-prefer-arrow": "^1.2.3",
+ "eslint-plugin-promise": "^6.0.0",
+ "eslint-plugin-you-dont-need-lodash-underscore": "^6.12.0"
+ },
+ "engines": {
+ "node": ">=12.17.0"
+ },
+ "peerDependencies": {
+ "eslint": "^8.14.0",
+ "typescript": "^4.5.5"
+ }
+ },
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
+ "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.2.7",
+ "resolve": "^1.20.0"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "node_modules/eslint-import-resolver-typescript": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz",
+ "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.4",
+ "glob": "^7.2.0",
+ "is-glob": "^4.0.3",
+ "resolve": "^1.22.0",
+ "tsconfig-paths": "^3.14.1"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "*",
+ "eslint-plugin-import": "*"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/eslint-module-utils": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz",
+ "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.2.7",
+ "find-up": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "node_modules/eslint-plugin-cypress": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.12.1.tgz",
+ "integrity": "sha512-c2W/uPADl5kospNDihgiLc7n87t5XhUbFDoTl6CfVkmG+kDAb5Ux10V9PoLPu9N+r7znpc+iQlcmAqT1A/89HA==",
+ "dev": true,
+ "dependencies": {
+ "globals": "^11.12.0"
+ },
+ "peerDependencies": {
+ "eslint": ">= 3.2.1"
+ }
+ },
+ "node_modules/eslint-plugin-cypress/node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-plugin-es": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz",
+ "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==",
+ "dev": true,
+ "dependencies": {
+ "eslint-utils": "^2.0.0",
+ "regexpp": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=4.19.1"
+ }
+ },
+ "node_modules/eslint-plugin-es/node_modules/eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-plugin-eslint-comments": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz",
+ "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^1.0.5",
+ "ignore": "^5.0.5"
+ },
+ "engines": {
+ "node": ">=6.5.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=4.19.1"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.26.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
+ "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.4",
+ "array.prototype.flat": "^1.2.5",
+ "debug": "^2.6.9",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-module-utils": "^2.7.3",
+ "has": "^1.0.3",
+ "is-core-module": "^2.8.1",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.values": "^1.1.5",
+ "resolve": "^1.22.0",
+ "tsconfig-paths": "^3.14.1"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-mocha": {
+ "version": "10.0.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.0.4.tgz",
+ "integrity": "sha512-8wzAeepVY027oBHz/TmBmUr7vhVqoC1KTFeDybFLhbaWKx+aQ7fJJVuUsqcUy+L+G+XvgQBJY+cbAf7hl5DF7Q==",
+ "dev": true,
+ "dependencies": {
+ "eslint-utils": "^3.0.0",
+ "ramda": "^0.28.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-n": {
+ "version": "15.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.2.0.tgz",
+ "integrity": "sha512-lWLg++jGwC88GDGGBX3CMkk0GIWq0y41aH51lavWApOKcMQcYoL3Ayd0lEdtD3SnQtR+3qBvWQS3qGbR2BxRWg==",
+ "dev": true,
+ "dependencies": {
+ "builtins": "^4.0.0",
+ "eslint-plugin-es": "^4.1.0",
+ "eslint-utils": "^3.0.0",
+ "ignore": "^5.1.1",
+ "is-core-module": "^2.3.0",
+ "minimatch": "^3.0.4",
+ "resolve": "^1.10.1",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=12.22.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-n/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-prefer-arrow": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz",
+ "integrity": "sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==",
+ "dev": true,
+ "peerDependencies": {
+ "eslint": ">=2.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-promise": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.0.tgz",
+ "integrity": "sha512-7GPezalm5Bfi/E22PnQxDWH2iW9GTvAlUNTztemeHb6c1BniSyoeTrM87JkC0wYdi6aQrZX9p2qEiAno8aTcbw==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-you-dont-need-lodash-underscore": {
+ "version": "6.12.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-you-dont-need-lodash-underscore/-/eslint-plugin-you-dont-need-lodash-underscore-6.12.0.tgz",
+ "integrity": "sha512-WF4mNp+k2532iswT6iUd1BX6qjd3AV4cFy/09VC82GY9SsRtvkxhUIx7JNGSe0/bLyd57oTr4inPFiIaENXhGw==",
+ "dev": true,
+ "dependencies": {
+ "kebab-case": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=5"
+ }
+ },
+ "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/eslint/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/eslint/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/eslint/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/eslint/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/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==",
+ "dev": true
+ },
+ "node_modules/eslint/node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/eslint/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/eslint/node_modules/optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/eslint/node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/eslint/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/esm": {
+ "version": "3.2.25",
+ "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
+ "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz",
+ "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.7.0",
+ "acorn-jsx": "^5.3.1",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/etherpad-cli-client": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/etherpad-cli-client/-/etherpad-cli-client-2.0.1.tgz",
+ "integrity": "sha512-cv7ep8NEkrebTIgWS/SBvpt6DhcMKSNu1zZNMFOWdoQkNRn3hVXZU8dedr4Xt5M1zBwPBSBTjisU436/TkEESA==",
+ "dev": true,
+ "dependencies": {
+ "async": "^3.2.1",
+ "socket.io-client": "^2.3.0",
+ "superagent": "^7.1.1"
+ },
+ "bin": {
+ "etherpad-cli": "cli.js"
+ },
+ "engines": {
+ "node": ">=12.17.0"
+ },
+ "funding": {
+ "type": "individual",
+ "url": "https://etherpad.org/"
+ },
+ "peerDependencies": {
+ "ep_etherpad-lite": ">=1.8.6"
+ }
+ },
+ "node_modules/etherpad-cli-client/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/etherpad-cli-client/node_modules/mime": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
+ "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
+ "dev": true,
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/etherpad-cli-client/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/etherpad-cli-client/node_modules/superagent": {
+ "version": "7.1.5",
+ "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.5.tgz",
+ "integrity": "sha512-HQYyGuDRFGmZ6GNC4hq2f37KnsY9Lr0/R1marNZTgMweVDQLTLJJ6DGQ9Tj/xVVs5HEnop9EMmTbywb5P30aqw==",
+ "dev": true,
+ "dependencies": {
+ "component-emitter": "^1.3.0",
+ "cookiejar": "^2.1.3",
+ "debug": "^4.3.4",
+ "fast-safe-stringify": "^2.1.1",
+ "form-data": "^4.0.0",
+ "formidable": "^2.0.1",
+ "methods": "^1.1.2",
+ "mime": "^2.5.0",
+ "qs": "^6.10.3",
+ "readable-stream": "^3.6.0",
+ "semver": "^7.3.7"
+ },
+ "engines": {
+ "node": ">=6.4.0 <13 || >=14"
+ }
+ },
+ "node_modules/etherpad-require-kernel": {
+ "version": "1.0.15",
+ "resolved": "https://registry.npmjs.org/etherpad-require-kernel/-/etherpad-require-kernel-1.0.15.tgz",
+ "integrity": "sha512-t8Z950sCfgS4ssex6SHhb3Ni8BQL0XdvZhMQWWDLhSWttyHgf+zPSMglBODyAUGh8mBX0XwGK7hpICGBHsvSGQ==",
+ "engines": {
+ "node": ">=12.13.0"
+ }
+ },
+ "node_modules/etherpad-yajsml": {
+ "version": "0.0.12",
+ "resolved": "https://registry.npmjs.org/etherpad-yajsml/-/etherpad-yajsml-0.0.12.tgz",
+ "integrity": "sha512-lVCqsZYpFsuIz417h+O83I7eadNXJ3MnQavriFa52/KTwj6xPAzEYr0PvH7KTxcqyAFtW7ItoTNVXe2h7zGxlw==",
+ "engines": {
+ "node": ">=12.13.0"
+ },
+ "optionalDependencies": {
+ "mime": "^1.6.0"
+ }
+ },
+ "node_modules/event-target-shim": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
+ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/expand-template": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
+ "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/express": {
+ "version": "4.18.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
+ "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
+ "dependencies": {
+ "accepts": "~1.3.8",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.20.1",
+ "content-disposition": "0.5.4",
+ "content-type": "~1.0.4",
+ "cookie": "0.5.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.2.0",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.11.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.2.1",
+ "send": "0.18.0",
+ "serve-static": "1.15.0",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/express-rate-limit": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.7.0.tgz",
+ "integrity": "sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA==",
+ "engines": {
+ "node": ">= 12.9.0"
+ },
+ "peerDependencies": {
+ "express": "^4 || ^5"
+ }
+ },
+ "node_modules/express-session": {
+ "name": "@etherpad/express-session",
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/@etherpad/express-session/-/express-session-1.18.1.tgz",
+ "integrity": "sha512-K+dYeES5iKPib+NRJ+/tX04IfTnCUnpV/aiuifI1ecQGnrWSVMuK5MrwDD0lYC/OBYWS5ovar5E+R4/IbjXknA==",
+ "dependencies": {
+ "cookie": "0.4.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~2.0.0",
+ "on-headers": "~1.0.2",
+ "parseurl": "~1.3.3",
+ "safe-buffer": "5.2.1",
+ "uid-safe": "~2.1.5"
+ }
+ },
+ "node_modules/express-session/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
},
- "isstream": {
- "version": "0.1.2",
- "bundled": true
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
},
- "jsbn": {
- "version": "0.1.1",
- "bundled": true,
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/express/node_modules/cookie": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/express/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "node_modules/extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "engines": [
+ "node >=0.6.0"
+ ]
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "node_modules/fast-glob": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+ },
+ "node_modules/fast-safe-stringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
+ },
+ "node_modules/fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/filelist": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.3.tgz",
+ "integrity": "sha512-LwjCsruLWQULGYKy7TX0OPtrL9kLpojOFKc5VCTxdFTV7w5zbsgqVKfnkKG7Qgjtq50gKfO56hJv88OfcGb70Q==",
+ "dependencies": {
+ "minimatch": "^5.0.1"
+ }
+ },
+ "node_modules/filelist/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/filelist/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/finalhandler": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
+ "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "statuses": "2.0.1",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
+ },
+ "node_modules/find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+ "dev": true,
+ "bin": {
+ "flat": "cli.js"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ=="
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz",
+ "integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/formidable": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz",
+ "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==",
+ "dependencies": {
+ "dezalgo": "^1.0.4",
+ "hexoid": "^1.0.0",
+ "once": "^1.4.0",
+ "qs": "^6.11.0"
+ },
+ "funding": {
+ "url": "https://ko-fi.com/tunnckoCore/commissions"
+ }
+ },
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fs-constants": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
+ "node_modules/fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=6 <7 || >=8"
+ }
+ },
+ "node_modules/fs-minipass": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "devOptional": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "node_modules/functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gauge": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
+ "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
+ "optional": true,
+ "dependencies": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.2",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.1",
+ "object-assign": "^4.1.1",
+ "signal-exit": "^3.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/generic-pool": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz",
+ "integrity": "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
+ "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "node_modules/github-from-package": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
+ "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
+ "node_modules/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "devOptional": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "13.13.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz",
+ "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz",
+ "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==",
+ "dependencies": {
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
+ },
+ "node_modules/growl": {
+ "version": "1.10.5",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
+ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.x"
+ }
+ },
+ "node_modules/har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "deprecated": "this library is no longer supported",
+ "dependencies": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/har-validator/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/har-validator/node_modules/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=="
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-ansi/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-binary2": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
+ "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
+ "dependencies": {
+ "isarray": "2.0.1"
+ }
+ },
+ "node_modules/has-binary2/node_modules/isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
+ },
+ "node_modules/has-cors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+ "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "dependencies": {
+ "get-intrinsic": "^1.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
+ "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "optional": true
+ },
+ "node_modules/hast-util-embedded": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-2.0.0.tgz",
+ "integrity": "sha512-vEr54rDu2CheBM4nLkWbW8Rycf8HhkA/KsrDnlyKnvBTyhyO+vAG6twHnfUbiRGo56YeUBNCI4HFfHg3Wu+tig==",
+ "dependencies": {
+ "hast-util-is-element": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-from-parse5": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.0.tgz",
+ "integrity": "sha512-m8yhANIAccpU4K6+121KpPP55sSl9/samzQSQGpb0mTExcNh2WlvjtMwSWFhg6uqD4Rr6Nfa8N6TMypQM51rzQ==",
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "@types/parse5": "^6.0.0",
+ "@types/unist": "^2.0.0",
+ "hastscript": "^7.0.0",
+ "property-information": "^6.0.0",
+ "vfile": "^5.0.0",
+ "vfile-location": "^4.0.0",
+ "web-namespaces": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-is-element": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.2.tgz",
+ "integrity": "sha512-thjnlGAnwP8ef/GSO1Q8BfVk2gundnc2peGQqEg2kUt/IqesiGg/5mSwN2fE7nLzy61pg88NG6xV+UrGOrx9EA==",
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-parse-selector": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.0.tgz",
+ "integrity": "sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg==",
+ "dependencies": {
+ "@types/hast": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-html": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.3.tgz",
+ "integrity": "sha512-/D/E5ymdPYhHpPkuTHOUkSatxr4w1ZKrZsG0Zv/3C2SRVT0JFJG53VS45AMrBtYk0wp5A7ksEhiC8QaOZM95+A==",
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "ccount": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-is-element": "^2.0.0",
+ "hast-util-whitespace": "^2.0.0",
+ "html-void-elements": "^2.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "stringify-entities": "^4.0.2",
+ "unist-util-is": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-whitespace": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz",
+ "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hastscript": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.0.2.tgz",
+ "integrity": "sha512-uA8ooUY4ipaBvKcMuPehTAB/YfFLSSzCwFSwT6ltJbocFUKH/GDHLN+tflq7lSRf9H86uOuxOFkh1KgIy3Gg2g==",
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-parse-selector": "^3.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true,
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/hexoid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
+ "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/hpagent": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-0.1.2.tgz",
+ "integrity": "sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ=="
+ },
+ "node_modules/html-encoding-sniffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
+ "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
+ "dependencies": {
+ "whatwg-encoding": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/html-void-elements": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz",
+ "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/htmlparser2": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "domelementtype": "^1.3.1",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.1.1"
+ }
+ },
+ "node_modules/http-cache-semantics": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
+ "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
+ "optional": true
+ },
+ "node_modules/http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/http-errors/node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/http-errors/node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/http-errors/node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+ },
+ "node_modules/http-errors/node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/http-errors/node_modules/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
+ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
+ "dependencies": {
+ "@tootallnate/once": "2",
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/http-proxy-agent/node_modules/debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/http-proxy-agent/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.8",
+ "npm": ">=1.3.7"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
+ "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/https-proxy-agent/node_modules/debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/https-proxy-agent/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/humanize-ms": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
+ "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=",
+ "devOptional": true,
+ "dependencies": {
+ "ms": "^2.0.0"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/ignore": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/ignore-by-default": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
+ "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==",
+ "dev": true
+ },
+ "node_modules/immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
+ "dev": true
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "devOptional": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "optional": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
+ },
+ "node_modules/infer-owner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
+ "optional": true
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "devOptional": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
+ "node_modules/internal-slot": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
+ "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
+ "dependencies": {
+ "get-intrinsic": "^1.1.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ip": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
+ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==",
+ "optional": true
+ },
+ "node_modules/ip-regex": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+ "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/is-alphabetical": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
+ "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
+ "dev": true,
+ "peer": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-alphanumerical": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
+ "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "is-alphabetical": "^1.0.0",
+ "is-decimal": "^1.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-buffer": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
+ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
+ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
+ "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-decimal": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
+ "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
+ "dev": true,
+ "peer": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-hexadecimal": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
+ "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
+ "dev": true,
+ "peer": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-lambda": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
+ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
+ "optional": true
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-observable": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-2.1.0.tgz",
+ "integrity": "sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
+ "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-potential-custom-element-name": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="
+ },
+ "node_modules/is-promise": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz",
+ "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=",
+ "dev": true
+ },
+ "node_modules/is-redirect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
+ "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "dependencies": {
+ "is-docker": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "node_modules/isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ },
+ "node_modules/jake": {
+ "version": "10.8.5",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz",
+ "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==",
+ "dependencies": {
+ "async": "^3.2.3",
+ "chalk": "^4.0.2",
+ "filelist": "^1.0.1",
+ "minimatch": "^3.0.4"
+ },
+ "bin": {
+ "jake": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/js-cookie": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz",
+ "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsbi": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-3.2.5.tgz",
+ "integrity": "sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ=="
+ },
+ "node_modules/jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
+ },
+ "node_modules/jsdom": {
+ "version": "19.0.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz",
+ "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==",
+ "dependencies": {
+ "abab": "^2.0.5",
+ "acorn": "^8.5.0",
+ "acorn-globals": "^6.0.0",
+ "cssom": "^0.5.0",
+ "cssstyle": "^2.3.0",
+ "data-urls": "^3.0.1",
+ "decimal.js": "^10.3.1",
+ "domexception": "^4.0.0",
+ "escodegen": "^2.0.0",
+ "form-data": "^4.0.0",
+ "html-encoding-sniffer": "^3.0.0",
+ "http-proxy-agent": "^5.0.0",
+ "https-proxy-agent": "^5.0.0",
+ "is-potential-custom-element-name": "^1.0.1",
+ "nwsapi": "^2.2.0",
+ "parse5": "6.0.1",
+ "saxes": "^5.0.1",
+ "symbol-tree": "^3.2.4",
+ "tough-cookie": "^4.0.0",
+ "w3c-hr-time": "^1.0.2",
+ "w3c-xmlserializer": "^3.0.0",
+ "webidl-conversions": "^7.0.0",
+ "whatwg-encoding": "^2.0.0",
+ "whatwg-mimetype": "^3.0.0",
+ "whatwg-url": "^10.0.0",
+ "ws": "^8.2.3",
+ "xml-name-validator": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "canvas": "^2.5.0"
+ },
+ "peerDependenciesMeta": {
+ "canvas": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+ },
+ "node_modules/json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/jsonminify": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/jsonminify/-/jsonminify-0.4.2.tgz",
+ "integrity": "sha512-mEtP5ECD0293D+s45JhDutqF5mFCkWY8ClrPFxjSFR2KUoantofky7noSzyKnAnD9Gd8pXHZSUd5bgzLDUBbfA==",
+ "engines": {
+ "node": ">=0.8.0",
+ "npm": ">=1.1.0"
+ }
+ },
+ "node_modules/jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/jsonschema-draft4": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/jsonschema-draft4/-/jsonschema-draft4-1.0.0.tgz",
+ "integrity": "sha1-8K8gBQVPDwrefqIRhhS2ncUS2GU=",
+ "dev": true
+ },
+ "node_modules/jsonwebtoken": {
+ "version": "8.5.1",
+ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
+ "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "jws": "^3.2.2",
+ "lodash.includes": "^4.3.0",
+ "lodash.isboolean": "^3.0.3",
+ "lodash.isinteger": "^4.0.4",
+ "lodash.isnumber": "^3.0.3",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.isstring": "^4.0.1",
+ "lodash.once": "^4.0.0",
+ "ms": "^2.1.1",
+ "semver": "^5.6.0"
+ },
+ "engines": {
+ "node": ">=4",
+ "npm": ">=1.4.28"
+ }
+ },
+ "node_modules/jsonwebtoken/node_modules/jws": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+ "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "jwa": "^1.4.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/jsonwebtoken/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/jsonwebtoken/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/jsprim": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
+ "dependencies": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/jszip": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
+ "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
+ "dev": true,
+ "dependencies": {
+ "lie": "~3.3.0",
+ "pako": "~1.0.2",
+ "readable-stream": "~2.3.6",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/jszip/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
+ "node_modules/jszip/node_modules/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,
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/jszip/node_modules/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,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/just-extend": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
+ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
+ "dev": true
+ },
+ "node_modules/jwa": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
+ "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
+ "dependencies": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/jws": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
+ "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
+ "dependencies": {
+ "jwa": "^2.0.0",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/jws/node_modules/jwa": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
+ "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
+ "dependencies": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/kebab-case": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/kebab-case/-/kebab-case-1.0.1.tgz",
+ "integrity": "sha512-txPHx6nVLhv8PHGXIlAk0nYoh894SpAqGPXNvbg2hh8spvHXIah3+vT87DLoa59nKgC6scD3u3xAuRIgiMqbfQ==",
+ "dev": true
+ },
+ "node_modules/keytar": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz",
+ "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "node-addon-api": "^4.3.0",
+ "prebuild-install": "^7.0.1"
+ }
+ },
+ "node_modules/keytar/node_modules/node-addon-api": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
+ "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
+ "node_modules/languages4translatewiki": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/languages4translatewiki/-/languages4translatewiki-0.1.3.tgz",
+ "integrity": "sha1-xDYgbgUtIUkLEQF6RNURj5Ih5ds="
+ },
+ "node_modules/levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dependencies": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lie": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+ "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+ "dev": true,
+ "dependencies": {
+ "immediate": "~3.0.5"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "node_modules/lodash.assignin": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
+ "integrity": "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/lodash.bind": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
+ "integrity": "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
+ },
+ "node_modules/lodash.defaults": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+ "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/lodash.filter": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz",
+ "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/lodash.flatten": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+ "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/lodash.foreach": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
+ "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+ "dev": true
+ },
+ "node_modules/lodash.includes": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
+ "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/lodash.isboolean": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
+ "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/lodash.isinteger": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
+ "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/lodash.isnumber": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
+ "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/lodash.map": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
+ "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
+ },
+ "node_modules/lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/lodash.pick": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
+ "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/lodash.reduce": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
+ "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/lodash.reject": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
+ "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/lodash.some": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
+ "integrity": "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-symbols/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/log-symbols/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/log-symbols/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/log-symbols/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/log-symbols/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/log-symbols/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/log4js": {
+ "version": "6.9.1",
+ "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz",
+ "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==",
+ "dependencies": {
+ "date-format": "^4.0.14",
+ "debug": "^4.3.4",
+ "flatted": "^3.2.7",
+ "rfdc": "^1.3.0",
+ "streamroller": "^3.1.5"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/log4js/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/log4js/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/long": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/long/-/long-2.4.0.tgz",
+ "integrity": "sha1-n6GAux2VAM3CnEFWdmoZleH0Uk8=",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "optional": true,
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "optional": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/make-fetch-happen": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
+ "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==",
+ "optional": true,
+ "dependencies": {
+ "agentkeepalive": "^4.1.3",
+ "cacache": "^15.2.0",
+ "http-cache-semantics": "^4.1.0",
+ "http-proxy-agent": "^4.0.1",
+ "https-proxy-agent": "^5.0.0",
+ "is-lambda": "^1.0.1",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.3",
+ "minipass-collect": "^1.0.2",
+ "minipass-fetch": "^1.3.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "negotiator": "^0.6.2",
+ "promise-retry": "^2.0.1",
+ "socks-proxy-agent": "^6.0.0",
+ "ssri": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/make-fetch-happen/node_modules/@tootallnate/once": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+ "optional": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/make-fetch-happen/node_modules/agentkeepalive": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz",
+ "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==",
+ "optional": true,
+ "dependencies": {
+ "debug": "^4.1.0",
+ "depd": "^2.0.0",
+ "humanize-ms": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 8.0.0"
+ }
+ },
+ "node_modules/make-fetch-happen/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "optional": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/make-fetch-happen/node_modules/http-proxy-agent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+ "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+ "optional": true,
+ "dependencies": {
+ "@tootallnate/once": "1",
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/make-fetch-happen/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "optional": true
+ },
+ "node_modules/measured-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/measured-core/-/measured-core-2.0.0.tgz",
+ "integrity": "sha512-SIzGtX1WGDvR59FqcJaGEAqDueBvLBh6W4T/gQaHr5ufcqvQkUHGcfQhlmq77mkeF5Mo+UpD+8hm69CwUVibGw==",
+ "dependencies": {
+ "binary-search": "^1.3.3",
+ "optional-js": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 5.12"
+ }
+ },
+ "node_modules/media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/memory-pager": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
+ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
+ "optional": true
+ },
+ "node_modules/merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-response": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
+ "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+ "dev": true
+ },
+ "node_modules/minipass": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz",
+ "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==",
+ "optional": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-collect": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+ "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minipass-fetch": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz",
+ "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.1.0",
+ "minipass-sized": "^1.0.3",
+ "minizlib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "optionalDependencies": {
+ "encoding": "^0.1.12"
+ }
+ },
+ "node_modules/minipass-flush": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minipass-pipeline": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+ "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-sized": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
+ "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minizlib": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "optional": true,
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mkdirp-classic": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
+ "node_modules/mocha": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz",
+ "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==",
+ "dev": true,
+ "dependencies": {
+ "@ungap/promise-all-settled": "1.1.2",
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.5.3",
+ "debug": "4.3.3",
+ "diff": "5.0.0",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.2.0",
+ "growl": "1.10.5",
+ "he": "1.2.0",
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
+ "minimatch": "4.2.1",
+ "ms": "2.1.3",
+ "nanoid": "3.3.1",
+ "serialize-javascript": "6.0.0",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "which": "2.0.2",
+ "workerpool": "6.2.0",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
+ },
+ "bin": {
+ "_mocha": "bin/_mocha",
+ "mocha": "bin/mocha"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mochajs"
+ }
+ },
+ "node_modules/mocha-froth": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/mocha-froth/-/mocha-froth-0.2.10.tgz",
+ "integrity": "sha512-xyJqAYtm2zjrkG870hjeSVvGgS4Dc9tRokmN6R7XLgBKhdtAJ1ytU6zL045djblfHaPyTkSerQU4wqcjsv7Aew==",
+ "dev": true
+ },
+ "node_modules/mocha/node_modules/debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/mocha/node_modules/debug/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/mocha/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mocha/node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mocha/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mocha/node_modules/minimatch": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz",
+ "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mocha/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "node_modules/mocha/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mocha/node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mocha/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mocha/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/mock-json-schema": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/mock-json-schema/-/mock-json-schema-1.1.1.tgz",
+ "integrity": "sha512-YV23vlsLP1EEOy0EviUvZTluXjLR+rhMzeayP2rcDiezj3RW01MhOSQkbQskdtg0K2fnGas5LKbSXgNjAOSX4A==",
+ "dependencies": {
+ "lodash": "^4.17.21"
+ }
+ },
+ "node_modules/mongodb": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz",
+ "integrity": "sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw==",
+ "dependencies": {
+ "bl": "^2.2.1",
+ "bson": "^1.1.4",
+ "denque": "^1.4.1",
+ "optional-require": "^1.1.8",
+ "safe-buffer": "^5.1.2"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "optionalDependencies": {
+ "saslprep": "^1.0.0"
+ },
+ "peerDependenciesMeta": {
+ "aws4": {
"optional": true
},
- "json-parse-better-errors": {
- "version": "1.0.2",
- "bundled": true
- },
- "json-schema": {
- "version": "0.4.0",
- "bundled": true
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "bundled": true
- },
- "jsonparse": {
- "version": "1.3.1",
- "bundled": true
- },
- "jsprim": {
- "version": "1.4.2",
- "bundled": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.4.0",
- "verror": "1.10.0"
- }
- },
- "latest-version": {
- "version": "3.1.0",
- "bundled": true,
- "requires": {
- "package-json": "^4.0.0"
- }
- },
- "lazy-property": {
- "version": "1.0.0",
- "bundled": true
- },
- "libcipm": {
- "version": "4.0.8",
- "bundled": true,
- "requires": {
- "bin-links": "^1.1.2",
- "bluebird": "^3.5.1",
- "figgy-pudding": "^3.5.1",
- "find-npm-prefix": "^1.0.2",
- "graceful-fs": "^4.1.11",
- "ini": "^1.3.5",
- "lock-verify": "^2.1.0",
- "mkdirp": "^0.5.1",
- "npm-lifecycle": "^3.0.0",
- "npm-logical-tree": "^1.2.1",
- "npm-package-arg": "^6.1.0",
- "pacote": "^9.1.0",
- "read-package-json": "^2.0.13",
- "rimraf": "^2.6.2",
- "worker-farm": "^1.6.0"
- }
- },
- "libnpm": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "bin-links": "^1.1.2",
- "bluebird": "^3.5.3",
- "find-npm-prefix": "^1.0.2",
- "libnpmaccess": "^3.0.2",
- "libnpmconfig": "^1.2.1",
- "libnpmhook": "^5.0.3",
- "libnpmorg": "^1.0.1",
- "libnpmpublish": "^1.1.2",
- "libnpmsearch": "^2.0.2",
- "libnpmteam": "^1.0.2",
- "lock-verify": "^2.0.2",
- "npm-lifecycle": "^3.0.0",
- "npm-logical-tree": "^1.2.1",
- "npm-package-arg": "^6.1.0",
- "npm-profile": "^4.0.2",
- "npm-registry-fetch": "^4.0.0",
- "npmlog": "^4.1.2",
- "pacote": "^9.5.3",
- "read-package-json": "^2.0.13",
- "stringify-package": "^1.0.0"
- }
- },
- "libnpmaccess": {
- "version": "3.0.2",
- "bundled": true,
- "requires": {
- "aproba": "^2.0.0",
- "get-stream": "^4.0.0",
- "npm-package-arg": "^6.1.0",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "libnpmconfig": {
- "version": "1.2.1",
- "bundled": true,
- "requires": {
- "figgy-pudding": "^3.5.1",
- "find-up": "^3.0.0",
- "ini": "^1.3.5"
- },
- "dependencies": {
- "find-up": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "2.2.0",
- "bundled": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "bundled": true
- }
- }
- },
- "libnpmhook": {
- "version": "5.0.3",
- "bundled": true,
- "requires": {
- "aproba": "^2.0.0",
- "figgy-pudding": "^3.4.1",
- "get-stream": "^4.0.0",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "libnpmorg": {
- "version": "1.0.1",
- "bundled": true,
- "requires": {
- "aproba": "^2.0.0",
- "figgy-pudding": "^3.4.1",
- "get-stream": "^4.0.0",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "libnpmpublish": {
- "version": "1.1.2",
- "bundled": true,
- "requires": {
- "aproba": "^2.0.0",
- "figgy-pudding": "^3.5.1",
- "get-stream": "^4.0.0",
- "lodash.clonedeep": "^4.5.0",
- "normalize-package-data": "^2.4.0",
- "npm-package-arg": "^6.1.0",
- "npm-registry-fetch": "^4.0.0",
- "semver": "^5.5.1",
- "ssri": "^6.0.1"
- }
- },
- "libnpmsearch": {
- "version": "2.0.2",
- "bundled": true,
- "requires": {
- "figgy-pudding": "^3.5.1",
- "get-stream": "^4.0.0",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "libnpmteam": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "aproba": "^2.0.0",
- "figgy-pudding": "^3.4.1",
- "get-stream": "^4.0.0",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "libnpx": {
- "version": "10.2.4",
- "bundled": true,
- "requires": {
- "dotenv": "^5.0.1",
- "npm-package-arg": "^6.0.0",
- "rimraf": "^2.6.2",
- "safe-buffer": "^5.1.0",
- "update-notifier": "^2.3.0",
- "which": "^1.3.0",
- "y18n": "^4.0.0",
- "yargs": "^14.2.3"
- }
- },
- "lock-verify": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "npm-package-arg": "^6.1.0",
- "semver": "^5.4.1"
- }
- },
- "lockfile": {
- "version": "1.0.4",
- "bundled": true,
- "requires": {
- "signal-exit": "^3.0.2"
- }
- },
- "lodash._baseindexof": {
- "version": "3.1.0",
- "bundled": true
- },
- "lodash._baseuniq": {
- "version": "4.6.0",
- "bundled": true,
- "requires": {
- "lodash._createset": "~4.0.0",
- "lodash._root": "~3.0.0"
- }
- },
- "lodash._bindcallback": {
- "version": "3.0.1",
- "bundled": true
- },
- "lodash._cacheindexof": {
- "version": "3.0.2",
- "bundled": true
- },
- "lodash._createcache": {
- "version": "3.1.2",
- "bundled": true,
- "requires": {
- "lodash._getnative": "^3.0.0"
- }
- },
- "lodash._createset": {
- "version": "4.0.3",
- "bundled": true
- },
- "lodash._getnative": {
- "version": "3.9.1",
- "bundled": true
- },
- "lodash._root": {
- "version": "3.0.1",
- "bundled": true
- },
- "lodash.clonedeep": {
- "version": "4.5.0",
- "bundled": true
- },
- "lodash.restparam": {
- "version": "3.6.1",
- "bundled": true
- },
- "lodash.union": {
- "version": "4.6.0",
- "bundled": true
- },
- "lodash.uniq": {
- "version": "4.5.0",
- "bundled": true
- },
- "lodash.without": {
- "version": "4.4.0",
- "bundled": true
- },
- "lowercase-keys": {
- "version": "1.0.1",
- "bundled": true
- },
- "lru-cache": {
- "version": "5.1.1",
- "bundled": true,
- "requires": {
- "yallist": "^3.0.2"
- }
- },
- "make-dir": {
- "version": "1.3.0",
- "bundled": true,
- "requires": {
- "pify": "^3.0.0"
- }
- },
- "make-fetch-happen": {
- "version": "5.0.2",
- "bundled": true,
- "requires": {
- "agentkeepalive": "^3.4.1",
- "cacache": "^12.0.0",
- "http-cache-semantics": "^3.8.1",
- "http-proxy-agent": "^2.1.0",
- "https-proxy-agent": "^2.2.3",
- "lru-cache": "^5.1.1",
- "mississippi": "^3.0.0",
- "node-fetch-npm": "^2.0.2",
- "promise-retry": "^1.1.1",
- "socks-proxy-agent": "^4.0.0",
- "ssri": "^6.0.0"
- }
- },
- "meant": {
- "version": "1.0.2",
- "bundled": true
- },
- "mime-db": {
- "version": "1.35.0",
- "bundled": true
- },
- "mime-types": {
- "version": "2.1.19",
- "bundled": true,
- "requires": {
- "mime-db": "~1.35.0"
- }
- },
- "minizlib": {
- "version": "1.3.3",
- "bundled": true,
- "requires": {
- "minipass": "^2.9.0"
- },
- "dependencies": {
- "minipass": {
- "version": "2.9.0",
- "bundled": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- }
- }
- },
- "mississippi": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "concat-stream": "^1.5.0",
- "duplexify": "^3.4.2",
- "end-of-stream": "^1.1.0",
- "flush-write-stream": "^1.0.0",
- "from2": "^2.1.0",
- "parallel-transform": "^1.1.0",
- "pump": "^3.0.0",
- "pumpify": "^1.3.3",
- "stream-each": "^1.1.0",
- "through2": "^2.0.0"
- }
- },
- "mkdirp": {
- "version": "0.5.5",
- "bundled": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "move-concurrently": {
- "version": "1.0.1",
- "bundled": true,
- "requires": {
- "aproba": "^1.1.1",
- "copy-concurrently": "^1.0.0",
- "fs-write-stream-atomic": "^1.0.8",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.3"
- },
- "dependencies": {
- "aproba": {
- "version": "1.2.0",
- "bundled": true
- }
- }
- },
- "ms": {
- "version": "2.1.1",
- "bundled": true
- },
- "mute-stream": {
- "version": "0.0.7",
- "bundled": true
- },
- "node-fetch-npm": {
- "version": "2.0.2",
- "bundled": true,
- "requires": {
- "encoding": "^0.1.11",
- "json-parse-better-errors": "^1.0.0",
- "safe-buffer": "^5.1.1"
- }
- },
- "node-gyp": {
- "version": "5.1.0",
- "bundled": true,
- "requires": {
- "env-paths": "^2.2.0",
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.2",
- "mkdirp": "^0.5.1",
- "nopt": "^4.0.1",
- "npmlog": "^4.1.2",
- "request": "^2.88.0",
- "rimraf": "^2.6.3",
- "semver": "^5.7.1",
- "tar": "^4.4.12",
- "which": "^1.3.1"
- }
- },
- "nopt": {
- "version": "4.0.3",
- "bundled": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "bundled": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- },
- "dependencies": {
- "resolve": {
- "version": "1.10.0",
- "bundled": true,
- "requires": {
- "path-parse": "^1.0.6"
- }
- }
- }
- },
- "npm-audit-report": {
- "version": "1.3.3",
- "bundled": true,
- "requires": {
- "cli-table3": "^0.5.0",
- "console-control-strings": "^1.1.0"
- }
- },
- "npm-bundled": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npm-cache-filename": {
- "version": "1.0.2",
- "bundled": true
- },
- "npm-install-checks": {
- "version": "3.0.2",
- "bundled": true,
- "requires": {
- "semver": "^2.3.0 || 3.x || 4 || 5"
- }
- },
- "npm-lifecycle": {
- "version": "3.1.5",
- "bundled": true,
- "requires": {
- "byline": "^5.0.0",
- "graceful-fs": "^4.1.15",
- "node-gyp": "^5.0.2",
- "resolve-from": "^4.0.0",
- "slide": "^1.1.6",
- "uid-number": "0.0.6",
- "umask": "^1.1.0",
- "which": "^1.3.1"
- }
- },
- "npm-logical-tree": {
- "version": "1.2.1",
- "bundled": true
- },
- "npm-normalize-package-bin": {
- "version": "1.0.1",
- "bundled": true
- },
- "npm-package-arg": {
- "version": "6.1.1",
- "bundled": true,
- "requires": {
- "hosted-git-info": "^2.7.1",
- "osenv": "^0.1.5",
- "semver": "^5.6.0",
- "validate-npm-package-name": "^3.0.0"
- }
- },
- "npm-packlist": {
- "version": "1.4.8",
- "bundled": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1",
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npm-pick-manifest": {
- "version": "3.0.2",
- "bundled": true,
- "requires": {
- "figgy-pudding": "^3.5.1",
- "npm-package-arg": "^6.0.0",
- "semver": "^5.4.1"
- }
- },
- "npm-profile": {
- "version": "4.0.4",
- "bundled": true,
- "requires": {
- "aproba": "^1.1.2 || 2",
- "figgy-pudding": "^3.4.1",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "npm-registry-fetch": {
- "version": "4.0.7",
- "bundled": true,
- "requires": {
- "JSONStream": "^1.3.4",
- "bluebird": "^3.5.1",
- "figgy-pudding": "^3.4.1",
- "lru-cache": "^5.1.1",
- "make-fetch-happen": "^5.0.0",
- "npm-package-arg": "^6.1.0",
- "safe-buffer": "^5.2.0"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.2.1",
- "bundled": true
- }
- }
- },
- "npm-run-path": {
- "version": "2.0.2",
- "bundled": true,
- "requires": {
- "path-key": "^2.0.0"
- }
- },
- "npm-user-validate": {
- "version": "1.0.1",
- "bundled": true
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true
- },
- "oauth-sign": {
- "version": "0.9.0",
- "bundled": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true
- },
- "object-keys": {
- "version": "1.0.12",
- "bundled": true
- },
- "object.getownpropertydescriptors": {
- "version": "2.0.3",
- "bundled": true,
- "requires": {
- "define-properties": "^1.1.2",
- "es-abstract": "^1.5.1"
- }
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "opener": {
- "version": "1.5.2",
- "bundled": true
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "p-finally": {
- "version": "1.0.0",
- "bundled": true
- },
- "package-json": {
- "version": "4.0.1",
- "bundled": true,
- "requires": {
- "got": "^6.7.1",
- "registry-auth-token": "^3.0.1",
- "registry-url": "^3.0.3",
- "semver": "^5.1.0"
- }
- },
- "pacote": {
- "version": "9.5.12",
- "bundled": true,
- "requires": {
- "bluebird": "^3.5.3",
- "cacache": "^12.0.2",
- "chownr": "^1.1.2",
- "figgy-pudding": "^3.5.1",
- "get-stream": "^4.1.0",
- "glob": "^7.1.3",
- "infer-owner": "^1.0.4",
- "lru-cache": "^5.1.1",
- "make-fetch-happen": "^5.0.0",
- "minimatch": "^3.0.4",
- "minipass": "^2.3.5",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "normalize-package-data": "^2.4.0",
- "npm-normalize-package-bin": "^1.0.0",
- "npm-package-arg": "^6.1.0",
- "npm-packlist": "^1.1.12",
- "npm-pick-manifest": "^3.0.0",
- "npm-registry-fetch": "^4.0.0",
- "osenv": "^0.1.5",
- "promise-inflight": "^1.0.1",
- "promise-retry": "^1.1.1",
- "protoduck": "^5.0.1",
- "rimraf": "^2.6.2",
- "safe-buffer": "^5.1.2",
- "semver": "^5.6.0",
- "ssri": "^6.0.1",
- "tar": "^4.4.10",
- "unique-filename": "^1.1.1",
- "which": "^1.3.1"
- },
- "dependencies": {
- "minipass": {
- "version": "2.9.0",
- "bundled": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- }
- }
- },
- "parallel-transform": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "cyclist": "~0.2.2",
- "inherits": "^2.0.3",
- "readable-stream": "^2.1.5"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": 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"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "path-exists": {
- "version": "3.0.0",
- "bundled": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true
- },
- "path-is-inside": {
- "version": "1.0.2",
- "bundled": true
- },
- "path-key": {
- "version": "2.0.1",
- "bundled": true
- },
- "path-parse": {
- "version": "1.0.7",
- "bundled": true
- },
- "performance-now": {
- "version": "2.1.0",
- "bundled": true
- },
- "pify": {
- "version": "3.0.0",
- "bundled": true
- },
- "prepend-http": {
- "version": "1.0.4",
- "bundled": true
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "bundled": true
- },
- "promise-inflight": {
- "version": "1.0.1",
- "bundled": true
- },
- "promise-retry": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "err-code": "^1.0.0",
- "retry": "^0.10.0"
- },
- "dependencies": {
- "retry": {
- "version": "0.10.1",
- "bundled": true
- }
- }
- },
- "promzard": {
- "version": "0.3.0",
- "bundled": true,
- "requires": {
- "read": "1"
- }
- },
- "proto-list": {
- "version": "1.2.4",
- "bundled": true
- },
- "protoduck": {
- "version": "5.0.1",
- "bundled": true,
- "requires": {
- "genfun": "^5.0.0"
- }
- },
- "prr": {
- "version": "1.0.1",
- "bundled": true
- },
- "pseudomap": {
- "version": "1.0.2",
- "bundled": true
- },
- "psl": {
- "version": "1.1.29",
- "bundled": true
- },
- "pump": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "pumpify": {
- "version": "1.5.1",
- "bundled": true,
- "requires": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
- },
- "dependencies": {
- "pump": {
- "version": "2.0.1",
- "bundled": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- }
- }
- },
- "punycode": {
- "version": "1.4.1",
- "bundled": true
- },
- "qrcode-terminal": {
- "version": "0.12.0",
- "bundled": true
- },
- "qs": {
- "version": "6.5.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
- "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
- },
- "query-string": {
- "version": "6.8.2",
- "bundled": true,
- "requires": {
- "decode-uri-component": "^0.2.0",
- "split-on-first": "^1.0.0",
- "strict-uri-encode": "^2.0.0"
- }
- },
- "qw": {
- "version": "1.0.1",
- "bundled": true
- },
- "rc": {
- "version": "1.2.8",
- "bundled": true,
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- }
- },
- "read": {
- "version": "1.0.7",
- "bundled": true,
- "requires": {
- "mute-stream": "~0.0.4"
- }
- },
- "read-cmd-shim": {
- "version": "1.0.5",
- "bundled": true,
- "requires": {
- "graceful-fs": "^4.1.2"
- }
- },
- "read-installed": {
- "version": "4.0.3",
- "bundled": true,
- "requires": {
- "debuglog": "^1.0.1",
- "graceful-fs": "^4.1.2",
- "read-package-json": "^2.0.0",
- "readdir-scoped-modules": "^1.0.0",
- "semver": "2 || 3 || 4 || 5",
- "slide": "~1.1.3",
- "util-extend": "^1.0.1"
- }
- },
- "read-package-json": {
- "version": "2.1.1",
- "bundled": true,
- "requires": {
- "glob": "^7.1.1",
- "graceful-fs": "^4.1.2",
- "json-parse-better-errors": "^1.0.1",
- "normalize-package-data": "^2.0.0",
- "npm-normalize-package-bin": "^1.0.0"
- }
- },
- "read-package-tree": {
- "version": "5.3.1",
- "bundled": true,
- "requires": {
- "read-package-json": "^2.0.0",
- "readdir-scoped-modules": "^1.0.0",
- "util-promisify": "^2.1.0"
- }
- },
- "readable-stream": {
- "version": "3.6.0",
- "bundled": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "readdir-scoped-modules": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "debuglog": "^1.0.1",
- "dezalgo": "^1.0.0",
- "graceful-fs": "^4.1.2",
- "once": "^1.3.0"
- }
- },
- "registry-auth-token": {
- "version": "3.4.0",
- "bundled": true,
- "requires": {
- "rc": "^1.1.6",
- "safe-buffer": "^5.0.1"
- }
- },
- "registry-url": {
- "version": "3.1.0",
- "bundled": true,
- "requires": {
- "rc": "^1.0.1"
- }
- },
- "request": {
- "version": "2.88.0",
- "bundled": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.0",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.4.3",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "bundled": true
- },
- "require-main-filename": {
- "version": "2.0.0",
- "bundled": true
- },
- "resolve-from": {
- "version": "4.0.0",
- "bundled": true
- },
- "retry": {
- "version": "0.12.0",
- "bundled": true
- },
- "rimraf": {
- "version": "2.7.1",
- "bundled": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "run-queue": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "aproba": "^1.1.1"
- },
- "dependencies": {
- "aproba": {
- "version": "1.2.0",
- "bundled": true
- }
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "bundled": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true
- },
- "semver": {
- "version": "5.7.1",
- "bundled": true
- },
- "semver-diff": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "semver": "^5.0.3"
- }
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true
- },
- "sha": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "graceful-fs": "^4.1.2"
- }
- },
- "shebang-command": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "bundled": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true
- },
- "slide": {
- "version": "1.1.6",
- "bundled": true
- },
- "smart-buffer": {
- "version": "4.1.0",
- "bundled": true
- },
- "socks": {
- "version": "2.3.3",
- "bundled": true,
- "requires": {
- "ip": "1.1.5",
- "smart-buffer": "^4.1.0"
- }
- },
- "socks-proxy-agent": {
- "version": "4.0.2",
- "bundled": true,
- "requires": {
- "agent-base": "~4.2.1",
- "socks": "~2.3.2"
- },
- "dependencies": {
- "agent-base": {
- "version": "4.2.1",
- "bundled": true,
- "requires": {
- "es6-promisify": "^5.0.0"
- }
- }
- }
- },
- "sorted-object": {
- "version": "2.0.1",
- "bundled": true
- },
- "sorted-union-stream": {
- "version": "2.1.3",
- "bundled": true,
- "requires": {
- "from2": "^1.3.0",
- "stream-iterate": "^1.1.0"
- },
- "dependencies": {
- "from2": {
- "version": "1.3.0",
- "bundled": true,
- "requires": {
- "inherits": "~2.0.1",
- "readable-stream": "~1.1.10"
- }
- },
- "isarray": {
- "version": "0.0.1",
- "bundled": true
- },
- "readable-stream": {
- "version": "1.1.14",
- "bundled": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "bundled": true
- }
- }
- },
- "spdx-correct": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.1.0",
- "bundled": true
- },
- "spdx-expression-parse": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.5",
- "bundled": true
- },
- "split-on-first": {
- "version": "1.1.0",
- "bundled": true
- },
- "sshpk": {
- "version": "1.14.2",
- "bundled": true,
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- }
- },
- "ssri": {
- "version": "6.0.2",
- "bundled": true,
- "requires": {
- "figgy-pudding": "^3.5.1"
- }
- },
- "stream-each": {
- "version": "1.2.2",
- "bundled": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "stream-shift": "^1.0.0"
- }
- },
- "stream-iterate": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "readable-stream": "^2.1.5",
- "stream-shift": "^1.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": 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"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "stream-shift": {
- "version": "1.0.0",
- "bundled": true
- },
- "strict-uri-encode": {
- "version": "2.0.0",
- "bundled": true
- },
- "string-width": {
- "version": "2.1.1",
- "bundled": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "bundled": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "bundled": true
- },
- "strip-ansi": {
- "version": "4.0.0",
- "bundled": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "string_decoder": {
- "version": "1.3.0",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.2.0"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.2.0",
- "bundled": true
- }
- }
- },
- "stringify-package": {
- "version": "1.0.1",
- "bundled": true
+ "bson-ext": {
+ "optional": true
},
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
+ "kerberos": {
+ "optional": true
},
- "strip-eof": {
- "version": "1.0.0",
- "bundled": true
+ "mongodb-client-encryption": {
+ "optional": true
},
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true
+ "mongodb-extjson": {
+ "optional": true
},
+ "snappy": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "node_modules/msal": {
+ "version": "1.4.18",
+ "resolved": "https://registry.npmjs.org/msal/-/msal-1.4.18.tgz",
+ "integrity": "sha512-QyWMWrZqpwtK6LEqhwtbikxIWqA1EOcdMvDeIDjIXdGU29wM4orwq538sPe1+JfKDIgPmJj1Fgi5B7luaw/IyA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "tslib": "^1.9.3"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/msal/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/mssql": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/mssql/-/mssql-8.1.0.tgz",
+ "integrity": "sha512-S7j4MoanTCLM09I+wMI9thTS2342mgxCpOQ9kpnFiG3P1NStuQMhPILLOgOt6hwMa/ctfTUKl7eJpB5XGPoe6A==",
+ "dependencies": {
+ "@tediousjs/connection-string": "^0.3.0",
+ "commander": "^9.1.0",
+ "debug": "^4.3.3",
+ "rfdc": "^1.3.0",
+ "tarn": "^3.0.2",
+ "tedious": "^14.0.0"
+ },
+ "bin": {
+ "mssql": "bin/mssql"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mssql/node_modules/commander": {
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz",
+ "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==",
+ "engines": {
+ "node": "^12.20.0 || >=14"
+ }
+ },
+ "node_modules/mssql/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
"supports-color": {
- "version": "5.4.0",
- "bundled": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "tar": {
- "version": "4.4.19",
- "bundled": true,
- "requires": {
- "chownr": "^1.1.4",
- "fs-minipass": "^1.2.7",
- "minipass": "^2.9.0",
- "minizlib": "^1.3.3",
- "mkdirp": "^0.5.5",
- "safe-buffer": "^5.2.1",
- "yallist": "^3.1.1"
- },
- "dependencies": {
- "minipass": {
- "version": "2.9.0",
- "bundled": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "bundled": true
- },
- "yallist": {
- "version": "3.1.1",
- "bundled": true
- }
- }
- },
- "term-size": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "execa": "^0.7.0"
- }
- },
- "text-table": {
- "version": "0.2.0",
- "bundled": true
- },
- "through": {
- "version": "2.3.8",
- "bundled": true
- },
- "through2": {
- "version": "2.0.3",
- "bundled": true,
- "requires": {
- "readable-stream": "^2.1.5",
- "xtend": "~4.0.1"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": 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"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "timed-out": {
- "version": "4.0.1",
- "bundled": true
- },
- "tiny-relative-date": {
- "version": "1.3.0",
- "bundled": true
- },
- "tough-cookie": {
- "version": "2.4.3",
- "bundled": true,
- "requires": {
- "psl": "^1.1.24",
- "punycode": "^1.4.1"
- }
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "bundled": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "bundled": true,
"optional": true
+ }
+ }
+ },
+ "node_modules/mssql/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/mysql": {
+ "version": "2.18.1",
+ "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
+ "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
+ "dependencies": {
+ "bignumber.js": "9.0.0",
+ "readable-stream": "2.3.7",
+ "safe-buffer": "5.1.2",
+ "sqlstring": "2.3.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mysql/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "node_modules/mysql/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/mysql/node_modules/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==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/nano": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/nano/-/nano-9.0.5.tgz",
+ "integrity": "sha512-fEAhwAdXh4hDDnC8cYJtW6D8ivOmpvFAqT90+zEuQREpRkzA/mJPcI4EKv15JUdajaqiLTXNoKK6PaRF+/06DQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@types/tough-cookie": "^4.0.0",
+ "axios": "^0.21.1",
+ "axios-cookiejar-support": "^1.0.1",
+ "qs": "^6.9.4",
+ "tough-cookie": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz",
+ "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==",
+ "dev": true,
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/napi-build-utils": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
+ "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
+ "node_modules/native-duplexpair": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/native-duplexpair/-/native-duplexpair-1.0.0.tgz",
+ "integrity": "sha1-eJkHjmS/PIo9cyYBs9QP8F21j6A="
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/nise": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.1.tgz",
+ "integrity": "sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^1.8.3",
+ "@sinonjs/fake-timers": ">=5",
+ "@sinonjs/text-encoding": "^0.7.1",
+ "just-extend": "^4.0.2",
+ "path-to-regexp": "^1.7.0"
+ }
+ },
+ "node_modules/nise/node_modules/path-to-regexp": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+ "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
+ "dev": true,
+ "dependencies": {
+ "isarray": "0.0.1"
+ }
+ },
+ "node_modules/node-abi": {
+ "version": "3.45.0",
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.45.0.tgz",
+ "integrity": "sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-abort-controller": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.0.1.tgz",
+ "integrity": "sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw=="
+ },
+ "node_modules/node-addon-api": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz",
+ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
+ "node_modules/node-fetch": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/node-fetch/node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
+ },
+ "node_modules/node-fetch/node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
+ },
+ "node_modules/node-fetch/node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/node-gyp": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz",
+ "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "env-paths": "^2.2.0",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.3",
+ "nopt": "^5.0.0",
+ "npmlog": "^4.1.2",
+ "request": "^2.88.2",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.2",
+ "tar": "^6.0.2",
+ "which": "^2.0.2"
+ },
+ "bin": {
+ "node-gyp": "bin/node-gyp.js"
+ },
+ "engines": {
+ "node": ">= 10.12.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
+ "node_modules/node-gyp/node_modules/are-we-there-yet": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz",
+ "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "node_modules/node-gyp/node_modules/gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "number-is-nan": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
+ "node_modules/node-gyp/node_modules/npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/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,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/node-gyp/node_modules/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,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nodeify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/nodeify/-/nodeify-1.0.1.tgz",
+ "integrity": "sha1-ZKtpp7268DzhB7TwM1yHwLnpGx0=",
+ "dev": true,
+ "dependencies": {
+ "is-promise": "~1.0.0",
+ "promise": "~1.3.0"
+ }
+ },
+ "node_modules/nodemon": {
+ "version": "2.0.22",
+ "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz",
+ "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==",
+ "dev": true,
+ "dependencies": {
+ "chokidar": "^3.5.2",
+ "debug": "^3.2.7",
+ "ignore-by-default": "^1.0.1",
+ "minimatch": "^3.1.2",
+ "pstree.remy": "^1.1.8",
+ "semver": "^5.7.1",
+ "simple-update-notifier": "^1.0.7",
+ "supports-color": "^5.5.0",
+ "touch": "^3.1.0",
+ "undefsafe": "^2.0.5"
+ },
+ "bin": {
+ "nodemon": "bin/nodemon.js"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/nodemon"
+ }
+ },
+ "node_modules/nodemon/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/nodemon/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/nodemon/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "node_modules/nodemon/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/nodemon/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/nopt": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
+ "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+ "optional": true,
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm": {
+ "version": "6.14.16",
+ "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.16.tgz",
+ "integrity": "sha512-LMiLGYsVNJfVPlQg7v2NYjG7iRIapcLv+oMunlq7fkXVx0BATCjRu7XyWl0G+iuZzHy4CjtM32QB8ox8juTgaw==",
+ "bundleDependencies": [
+ "abbrev",
+ "ansicolors",
+ "ansistyles",
+ "aproba",
+ "archy",
+ "bin-links",
+ "bluebird",
+ "byte-size",
+ "cacache",
+ "call-limit",
+ "chownr",
+ "ci-info",
+ "cli-columns",
+ "cli-table3",
+ "cmd-shim",
+ "columnify",
+ "config-chain",
+ "debuglog",
+ "detect-indent",
+ "detect-newline",
+ "dezalgo",
+ "editor",
+ "figgy-pudding",
+ "find-npm-prefix",
+ "fs-vacuum",
+ "fs-write-stream-atomic",
+ "gentle-fs",
+ "glob",
+ "graceful-fs",
+ "has-unicode",
+ "hosted-git-info",
+ "iferr",
+ "imurmurhash",
+ "infer-owner",
+ "inflight",
+ "inherits",
+ "ini",
+ "init-package-json",
+ "is-cidr",
+ "json-parse-better-errors",
+ "JSONStream",
+ "lazy-property",
+ "libcipm",
+ "libnpm",
+ "libnpmaccess",
+ "libnpmhook",
+ "libnpmorg",
+ "libnpmsearch",
+ "libnpmteam",
+ "libnpx",
+ "lock-verify",
+ "lockfile",
+ "lodash._baseindexof",
+ "lodash._baseuniq",
+ "lodash._bindcallback",
+ "lodash._cacheindexof",
+ "lodash._createcache",
+ "lodash._getnative",
+ "lodash.clonedeep",
+ "lodash.restparam",
+ "lodash.union",
+ "lodash.uniq",
+ "lodash.without",
+ "lru-cache",
+ "meant",
+ "mississippi",
+ "mkdirp",
+ "move-concurrently",
+ "node-gyp",
+ "nopt",
+ "normalize-package-data",
+ "npm-audit-report",
+ "npm-cache-filename",
+ "npm-install-checks",
+ "npm-lifecycle",
+ "npm-package-arg",
+ "npm-packlist",
+ "npm-pick-manifest",
+ "npm-profile",
+ "npm-registry-fetch",
+ "npm-user-validate",
+ "npmlog",
+ "once",
+ "opener",
+ "osenv",
+ "pacote",
+ "path-is-inside",
+ "promise-inflight",
+ "qrcode-terminal",
+ "query-string",
+ "qw",
+ "read-cmd-shim",
+ "read-installed",
+ "read-package-json",
+ "read-package-tree",
+ "read",
+ "readable-stream",
+ "readdir-scoped-modules",
+ "request",
+ "retry",
+ "rimraf",
+ "safe-buffer",
+ "semver",
+ "sha",
+ "slide",
+ "sorted-object",
+ "sorted-union-stream",
+ "ssri",
+ "stringify-package",
+ "tar",
+ "text-table",
+ "tiny-relative-date",
+ "uid-number",
+ "umask",
+ "unique-filename",
+ "unpipe",
+ "update-notifier",
+ "uuid",
+ "validate-npm-package-license",
+ "validate-npm-package-name",
+ "which",
+ "worker-farm",
+ "write-file-atomic"
+ ],
+ "dependencies": {
+ "abbrev": "~1.1.1",
+ "ansicolors": "~0.3.2",
+ "ansistyles": "~0.1.3",
+ "aproba": "^2.0.0",
+ "archy": "~1.0.0",
+ "bin-links": "^1.1.8",
+ "bluebird": "^3.5.5",
+ "byte-size": "^5.0.1",
+ "cacache": "^12.0.3",
+ "call-limit": "^1.1.1",
+ "chownr": "^1.1.4",
+ "ci-info": "^2.0.0",
+ "cli-columns": "^3.1.2",
+ "cli-table3": "^0.5.1",
+ "cmd-shim": "^3.0.3",
+ "columnify": "~1.5.4",
+ "config-chain": "^1.1.12",
+ "debuglog": "*",
+ "detect-indent": "~5.0.0",
+ "detect-newline": "^2.1.0",
+ "dezalgo": "~1.0.3",
+ "editor": "~1.0.0",
+ "figgy-pudding": "^3.5.1",
+ "find-npm-prefix": "^1.0.2",
+ "fs-vacuum": "~1.2.10",
+ "fs-write-stream-atomic": "~1.0.10",
+ "gentle-fs": "^2.3.1",
+ "glob": "^7.1.6",
+ "graceful-fs": "^4.2.4",
+ "has-unicode": "~2.0.1",
+ "hosted-git-info": "^2.8.9",
+ "iferr": "^1.0.2",
+ "imurmurhash": "*",
+ "infer-owner": "^1.0.4",
+ "inflight": "~1.0.6",
+ "inherits": "^2.0.4",
+ "ini": "^1.3.8",
+ "init-package-json": "^1.10.3",
+ "is-cidr": "^3.0.0",
+ "json-parse-better-errors": "^1.0.2",
+ "JSONStream": "^1.3.5",
+ "lazy-property": "~1.0.0",
+ "libcipm": "^4.0.8",
+ "libnpm": "^3.0.1",
+ "libnpmaccess": "^3.0.2",
+ "libnpmhook": "^5.0.3",
+ "libnpmorg": "^1.0.1",
+ "libnpmsearch": "^2.0.2",
+ "libnpmteam": "^1.0.2",
+ "libnpx": "^10.2.4",
+ "lock-verify": "^2.1.0",
+ "lockfile": "^1.0.4",
+ "lodash._baseindexof": "*",
+ "lodash._baseuniq": "~4.6.0",
+ "lodash._bindcallback": "*",
+ "lodash._cacheindexof": "*",
+ "lodash._createcache": "*",
+ "lodash._getnative": "*",
+ "lodash.clonedeep": "~4.5.0",
+ "lodash.restparam": "*",
+ "lodash.union": "~4.6.0",
+ "lodash.uniq": "~4.5.0",
+ "lodash.without": "~4.4.0",
+ "lru-cache": "^5.1.1",
+ "meant": "^1.0.2",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.5",
+ "move-concurrently": "^1.0.1",
+ "node-gyp": "^5.1.0",
+ "nopt": "^4.0.3",
+ "normalize-package-data": "^2.5.0",
+ "npm-audit-report": "^1.3.3",
+ "npm-cache-filename": "~1.0.2",
+ "npm-install-checks": "^3.0.2",
+ "npm-lifecycle": "^3.1.5",
+ "npm-package-arg": "^6.1.1",
+ "npm-packlist": "^1.4.8",
+ "npm-pick-manifest": "^3.0.2",
+ "npm-profile": "^4.0.4",
+ "npm-registry-fetch": "^4.0.7",
+ "npm-user-validate": "^1.0.1",
+ "npmlog": "~4.1.2",
+ "once": "~1.4.0",
+ "opener": "^1.5.2",
+ "osenv": "^0.1.5",
+ "pacote": "^9.5.12",
+ "path-is-inside": "~1.0.2",
+ "promise-inflight": "~1.0.1",
+ "qrcode-terminal": "^0.12.0",
+ "query-string": "^6.8.2",
+ "qw": "~1.0.1",
+ "read": "~1.0.7",
+ "read-cmd-shim": "^1.0.5",
+ "read-installed": "~4.0.3",
+ "read-package-json": "^2.1.1",
+ "read-package-tree": "^5.3.1",
+ "readable-stream": "^3.6.0",
+ "readdir-scoped-modules": "^1.1.0",
+ "request": "^2.88.0",
+ "retry": "^0.12.0",
+ "rimraf": "^2.7.1",
+ "safe-buffer": "^5.1.2",
+ "semver": "^5.7.1",
+ "sha": "^3.0.0",
+ "slide": "~1.1.6",
+ "sorted-object": "~2.0.1",
+ "sorted-union-stream": "~2.1.3",
+ "ssri": "^6.0.2",
+ "stringify-package": "^1.0.1",
+ "tar": "^4.4.19",
+ "text-table": "~0.2.0",
+ "tiny-relative-date": "^1.3.0",
+ "uid-number": "0.0.6",
+ "umask": "~1.1.0",
+ "unique-filename": "^1.1.1",
+ "unpipe": "~1.0.0",
+ "update-notifier": "^2.5.0",
+ "uuid": "^3.3.3",
+ "validate-npm-package-license": "^3.0.4",
+ "validate-npm-package-name": "~3.0.0",
+ "which": "^1.3.1",
+ "worker-farm": "^1.7.0",
+ "write-file-atomic": "^2.4.3"
+ },
+ "bin": {
+ "npm": "bin/npm-cli.js",
+ "npx": "bin/npx-cli.js"
+ },
+ "engines": {
+ "node": "6 >=6.2.0 || 8 || >=9.3.0"
+ }
+ },
+ "node_modules/npm/node_modules/abbrev": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/agent-base": {
+ "version": "4.3.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "es6-promisify": "^5.0.0"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/agentkeepalive": {
+ "version": "3.5.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "humanize-ms": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/ansi-align": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^2.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/ansicolors": {
+ "version": "0.3.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/ansistyles": {
+ "version": "0.1.3",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/aproba": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/archy": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/are-we-there-yet": {
+ "version": "1.1.4",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream": {
+ "version": "2.3.6",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/npm/node_modules/are-we-there-yet/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/npm/node_modules/asap": {
+ "version": "2.0.6",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/asn1": {
+ "version": "0.2.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "node_modules/npm/node_modules/assert-plus": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/npm/node_modules/asynckit": {
+ "version": "0.4.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/npm/node_modules/aws4": {
+ "version": "1.8.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/balanced-match": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "inBundle": true,
+ "optional": true,
+ "dependencies": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "node_modules/npm/node_modules/bin-links": {
+ "version": "1.1.8",
+ "inBundle": true,
+ "license": "Artistic-2.0",
+ "dependencies": {
+ "bluebird": "^3.5.3",
+ "cmd-shim": "^3.0.0",
+ "gentle-fs": "^2.3.0",
+ "graceful-fs": "^4.1.15",
+ "npm-normalize-package-bin": "^1.0.0",
+ "write-file-atomic": "^2.3.0"
+ }
+ },
+ "node_modules/npm/node_modules/bluebird": {
+ "version": "3.5.5",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/boxen": {
+ "version": "1.3.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-align": "^2.0.0",
+ "camelcase": "^4.0.0",
+ "chalk": "^2.0.1",
+ "cli-boxes": "^1.0.0",
+ "string-width": "^2.0.0",
+ "term-size": "^1.2.0",
+ "widest-line": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/npm/node_modules/buffer-from": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/builtins": {
+ "version": "1.0.3",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/byline": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/byte-size": {
+ "version": "5.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/cacache": {
+ "version": "12.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "bluebird": "^3.5.5",
+ "chownr": "^1.1.1",
+ "figgy-pudding": "^3.5.1",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.1.15",
+ "infer-owner": "^1.0.3",
+ "lru-cache": "^5.1.1",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.6.3",
+ "ssri": "^6.0.1",
+ "unique-filename": "^1.1.1",
+ "y18n": "^4.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/call-limit": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/camelcase": {
+ "version": "4.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/capture-stack-trace": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/caseless": {
+ "version": "0.12.0",
+ "inBundle": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/npm/node_modules/chalk": {
+ "version": "2.4.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/chownr": {
+ "version": "1.1.4",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/ci-info": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/cidr-regex": {
+ "version": "2.0.10",
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "ip-regex": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/cli-boxes": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/cli-columns": {
+ "version": "3.1.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "string-width": "^2.0.0",
+ "strip-ansi": "^3.0.1"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/npm/node_modules/cli-table3": {
+ "version": "0.5.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "object-assign": "^4.1.0",
+ "string-width": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "optionalDependencies": {
+ "colors": "^1.1.2"
+ }
+ },
+ "node_modules/npm/node_modules/cliui": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ }
+ },
+ "node_modules/npm/node_modules/cliui/node_modules/ansi-regex": {
+ "version": "4.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/cliui/node_modules/is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/cliui/node_modules/string-width": {
+ "version": "3.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/cliui/node_modules/strip-ansi": {
+ "version": "5.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/clone": {
+ "version": "1.0.4",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/npm/node_modules/cmd-shim": {
+ "version": "3.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "mkdirp": "~0.5.0"
+ }
+ },
+ "node_modules/npm/node_modules/code-point-at": {
+ "version": "1.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/color-convert": {
+ "version": "1.9.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "^1.1.1"
+ }
+ },
+ "node_modules/npm/node_modules/color-name": {
+ "version": "1.1.3",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/colors": {
+ "version": "1.3.3",
+ "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==",
+ "inBundle": true,
+ "optional": true,
+ "engines": {
+ "node": ">=0.1.90"
+ }
+ },
+ "node_modules/npm/node_modules/columnify": {
+ "version": "1.5.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "strip-ansi": "^3.0.0",
+ "wcwidth": "^1.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/combined-stream": {
+ "version": "1.0.6",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/npm/node_modules/concat-map": {
+ "version": "0.0.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/concat-stream": {
+ "version": "1.6.2",
+ "engines": [
+ "node >= 0.8"
+ ],
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "node_modules/npm/node_modules/concat-stream/node_modules/readable-stream": {
+ "version": "2.3.6",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/npm/node_modules/concat-stream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/npm/node_modules/config-chain": {
+ "version": "1.1.12",
+ "inBundle": true,
+ "dependencies": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "node_modules/npm/node_modules/configstore": {
+ "version": "3.1.5",
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "dot-prop": "^4.2.1",
+ "graceful-fs": "^4.1.2",
+ "make-dir": "^1.0.0",
+ "unique-string": "^1.0.0",
+ "write-file-atomic": "^2.0.0",
+ "xdg-basedir": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/console-control-strings": {
+ "version": "1.1.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/copy-concurrently": {
+ "version": "1.0.5",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^1.1.1",
+ "fs-write-stream-atomic": "^1.0.8",
+ "iferr": "^0.1.5",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/copy-concurrently/node_modules/aproba": {
+ "version": "1.2.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/copy-concurrently/node_modules/iferr": {
+ "version": "0.1.5",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/core-util-is": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/create-error-class": {
+ "version": "3.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "capture-stack-trace": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/cross-spawn": {
+ "version": "5.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "node_modules/npm/node_modules/cross-spawn/node_modules/lru-cache": {
+ "version": "4.1.5",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "node_modules/npm/node_modules/cross-spawn/node_modules/yallist": {
+ "version": "2.1.2",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/crypto-random-string": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/cyclist": {
+ "version": "0.2.2",
+ "inBundle": true
+ },
+ "node_modules/npm/node_modules/dashdash": {
+ "version": "1.14.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/npm/node_modules/debug": {
+ "version": "3.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/debug/node_modules/ms": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/debuglog": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/npm/node_modules/decamelize": {
+ "version": "1.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/decode-uri-component": {
+ "version": "0.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/npm/node_modules/deep-extend": {
+ "version": "0.6.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/defaults": {
+ "version": "1.0.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "clone": "^1.0.2"
+ }
+ },
+ "node_modules/npm/node_modules/define-properties": {
+ "version": "1.1.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "object-keys": "^1.0.12"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/npm/node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/npm/node_modules/delegates": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/detect-indent": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/detect-newline": {
+ "version": "2.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/dezalgo": {
+ "version": "1.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "asap": "^2.0.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/npm/node_modules/dot-prop": {
+ "version": "4.2.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/dotenv": {
+ "version": "5.0.1",
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.6.0"
+ }
+ },
+ "node_modules/npm/node_modules/duplexer3": {
+ "version": "0.1.4",
+ "inBundle": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/npm/node_modules/duplexify": {
+ "version": "3.6.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/duplexify/node_modules/readable-stream": {
+ "version": "2.3.6",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/npm/node_modules/duplexify/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/npm/node_modules/ecc-jsbn": {
+ "version": "0.1.2",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "inBundle": true,
+ "optional": true,
+ "dependencies": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "node_modules/npm/node_modules/editor": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/emoji-regex": {
+ "version": "7.0.3",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/encoding": {
+ "version": "0.1.12",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "iconv-lite": "~0.4.13"
+ }
+ },
+ "node_modules/npm/node_modules/end-of-stream": {
+ "version": "1.4.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/npm/node_modules/env-paths": {
+ "version": "2.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/err-code": {
+ "version": "1.1.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/errno": {
+ "version": "0.1.7",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "prr": "~1.0.1"
+ },
+ "bin": {
+ "errno": "cli.js"
+ }
+ },
+ "node_modules/npm/node_modules/es-abstract": {
+ "version": "1.12.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-to-primitive": "^1.1.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.1",
+ "is-callable": "^1.1.3",
+ "is-regex": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/npm/node_modules/es-to-primitive": {
+ "version": "1.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/npm/node_modules/es6-promise": {
+ "version": "4.2.8",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/es6-promisify": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "es6-promise": "^4.0.3"
+ }
+ },
+ "node_modules/npm/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/npm/node_modules/execa": {
+ "version": "0.7.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/execa/node_modules/get-stream": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/extend": {
+ "version": "3.0.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/extsprintf": {
+ "version": "1.3.0",
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/figgy-pudding": {
+ "version": "3.5.1",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/find-npm-prefix": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/flush-write-stream": {
+ "version": "1.0.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.4"
+ }
+ },
+ "node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream": {
+ "version": "2.3.6",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/npm/node_modules/flush-write-stream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/npm/node_modules/forever-agent": {
+ "version": "0.6.1",
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/npm/node_modules/form-data": {
+ "version": "2.3.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/npm/node_modules/from2": {
+ "version": "2.3.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/from2/node_modules/readable-stream": {
+ "version": "2.3.6",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/npm/node_modules/from2/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/npm/node_modules/fs-minipass": {
+ "version": "1.2.7",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^2.6.0"
+ }
+ },
+ "node_modules/npm/node_modules/fs-minipass/node_modules/minipass": {
+ "version": "2.9.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/fs-vacuum": {
+ "version": "1.2.10",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "path-is-inside": "^1.0.1",
+ "rimraf": "^2.5.2"
+ }
+ },
+ "node_modules/npm/node_modules/fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
+ }
+ },
+ "node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/iferr": {
+ "version": "0.1.5",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream": {
+ "version": "2.3.6",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/npm/node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/function-bind": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/gauge": {
+ "version": "2.7.4",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "node_modules/npm/node_modules/gauge/node_modules/aproba": {
+ "version": "1.2.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/gauge/node_modules/string-width": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/genfun": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/gentle-fs": {
+ "version": "2.3.1",
+ "inBundle": true,
+ "license": "Artistic-2.0",
+ "dependencies": {
+ "aproba": "^1.1.2",
+ "chownr": "^1.1.2",
+ "cmd-shim": "^3.0.3",
+ "fs-vacuum": "^1.2.10",
+ "graceful-fs": "^4.1.11",
+ "iferr": "^0.1.5",
+ "infer-owner": "^1.0.4",
+ "mkdirp": "^0.5.1",
+ "path-is-inside": "^1.0.2",
+ "read-cmd-shim": "^1.0.1",
+ "slide": "^1.1.6"
+ }
+ },
+ "node_modules/npm/node_modules/gentle-fs/node_modules/aproba": {
+ "version": "1.2.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/gentle-fs/node_modules/iferr": {
+ "version": "0.1.5",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/npm/node_modules/get-stream": {
+ "version": "4.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/getpass": {
+ "version": "0.1.7",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/glob": {
+ "version": "7.1.6",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/npm/node_modules/global-dirs": {
+ "version": "0.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "ini": "^1.3.4"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/got": {
+ "version": "6.7.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "create-error-class": "^3.0.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^3.0.0",
+ "is-redirect": "^1.0.0",
+ "is-retry-allowed": "^1.0.0",
+ "is-stream": "^1.0.0",
+ "lowercase-keys": "^1.0.0",
+ "safe-buffer": "^5.0.1",
+ "timed-out": "^4.0.0",
+ "unzip-response": "^2.0.1",
+ "url-parse-lax": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/got/node_modules/get-stream": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/graceful-fs": {
+ "version": "4.2.4",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/har-schema": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/har-validator": {
+ "version": "5.1.5",
+ "deprecated": "this library is no longer supported",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/har-validator/node_modules/ajv": {
+ "version": "6.12.6",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/npm/node_modules/har-validator/node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/har-validator/node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/has": {
+ "version": "1.0.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/npm/node_modules/has-flag": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/has-symbols": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/npm/node_modules/has-unicode": {
+ "version": "2.0.1",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/http-cache-semantics": {
+ "version": "3.8.1",
+ "inBundle": true,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/npm/node_modules/http-proxy-agent": {
+ "version": "2.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "4",
+ "debug": "3.1.0"
+ },
+ "engines": {
+ "node": ">= 4.5.0"
+ }
+ },
+ "node_modules/npm/node_modules/http-signature": {
+ "version": "1.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.8",
+ "npm": ">=1.3.7"
+ }
+ },
+ "node_modules/npm/node_modules/https-proxy-agent": {
+ "version": "2.2.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^4.3.0",
+ "debug": "^3.1.0"
+ },
+ "engines": {
+ "node": ">= 4.5.0"
+ }
+ },
+ "node_modules/npm/node_modules/humanize-ms": {
+ "version": "1.2.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/iconv-lite": {
+ "version": "0.4.23",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/iferr": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/ignore-walk": {
+ "version": "3.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "node_modules/npm/node_modules/import-lazy": {
+ "version": "2.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/npm/node_modules/infer-owner": {
+ "version": "1.0.4",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/inflight": {
+ "version": "1.0.6",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/npm/node_modules/inherits": {
+ "version": "2.0.4",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/ini": {
+ "version": "1.3.8",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/init-package-json": {
+ "version": "1.10.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.1",
+ "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0",
+ "promzard": "^0.3.0",
+ "read": "~1.0.1",
+ "read-package-json": "1 || 2",
+ "semver": "2.x || 3.x || 4 || 5",
+ "validate-npm-package-license": "^3.0.1",
+ "validate-npm-package-name": "^3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/ip": {
+ "version": "1.1.5",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/ip-regex": {
+ "version": "2.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/is-callable": {
+ "version": "1.1.4",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/npm/node_modules/is-ci": {
+ "version": "1.2.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "ci-info": "^1.5.0"
+ },
+ "bin": {
+ "is-ci": "bin.js"
+ }
+ },
+ "node_modules/npm/node_modules/is-ci/node_modules/ci-info": {
+ "version": "1.6.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/is-cidr": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "cidr-regex": "^2.0.10"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/is-date-object": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/npm/node_modules/is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "number-is-nan": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/is-installed-globally": {
+ "version": "0.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "global-dirs": "^0.1.0",
+ "is-path-inside": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/is-npm": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/is-obj": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/is-path-inside": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-is-inside": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/is-redirect": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/is-regex": {
+ "version": "1.0.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "has": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/npm/node_modules/is-retry-allowed": {
+ "version": "1.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/is-stream": {
+ "version": "1.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/is-symbol": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/npm/node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/isarray": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/isexe": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/isstream": {
+ "version": "0.1.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/jsbn": {
+ "version": "0.1.1",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
+ "inBundle": true,
+ "optional": true
+ },
+ "node_modules/npm/node_modules/json-parse-better-errors": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/json-schema": {
+ "version": "0.4.0",
+ "inBundle": true,
+ "license": "(AFL-2.1 OR BSD-3-Clause)"
+ },
+ "node_modules/npm/node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/jsonparse": {
+ "version": "1.3.1",
+ "engines": [
+ "node >= 0.2.0"
+ ],
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/JSONStream": {
+ "version": "1.3.5",
+ "inBundle": true,
+ "license": "(MIT OR Apache-2.0)",
+ "dependencies": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ },
+ "bin": {
+ "JSONStream": "bin.js"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/npm/node_modules/jsprim": {
+ "version": "1.4.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/npm/node_modules/latest-version": {
+ "version": "3.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "package-json": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/lazy-property": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/libcipm": {
+ "version": "4.0.8",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "bin-links": "^1.1.2",
+ "bluebird": "^3.5.1",
+ "figgy-pudding": "^3.5.1",
+ "find-npm-prefix": "^1.0.2",
+ "graceful-fs": "^4.1.11",
+ "ini": "^1.3.5",
+ "lock-verify": "^2.1.0",
+ "mkdirp": "^0.5.1",
+ "npm-lifecycle": "^3.0.0",
+ "npm-logical-tree": "^1.2.1",
+ "npm-package-arg": "^6.1.0",
+ "pacote": "^9.1.0",
+ "read-package-json": "^2.0.13",
+ "rimraf": "^2.6.2",
+ "worker-farm": "^1.6.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpm": {
+ "version": "3.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "bin-links": "^1.1.2",
+ "bluebird": "^3.5.3",
+ "find-npm-prefix": "^1.0.2",
+ "libnpmaccess": "^3.0.2",
+ "libnpmconfig": "^1.2.1",
+ "libnpmhook": "^5.0.3",
+ "libnpmorg": "^1.0.1",
+ "libnpmpublish": "^1.1.2",
+ "libnpmsearch": "^2.0.2",
+ "libnpmteam": "^1.0.2",
+ "lock-verify": "^2.0.2",
+ "npm-lifecycle": "^3.0.0",
+ "npm-logical-tree": "^1.2.1",
+ "npm-package-arg": "^6.1.0",
+ "npm-profile": "^4.0.2",
+ "npm-registry-fetch": "^4.0.0",
+ "npmlog": "^4.1.2",
+ "pacote": "^9.5.3",
+ "read-package-json": "^2.0.13",
+ "stringify-package": "^1.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmaccess": {
+ "version": "3.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^2.0.0",
+ "get-stream": "^4.0.0",
+ "npm-package-arg": "^6.1.0",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmconfig": {
+ "version": "1.2.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "figgy-pudding": "^3.5.1",
+ "find-up": "^3.0.0",
+ "ini": "^1.3.5"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmconfig/node_modules/find-up": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmconfig/node_modules/locate-path": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmconfig/node_modules/p-limit": {
+ "version": "2.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmconfig/node_modules/p-locate": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmconfig/node_modules/p-try": {
+ "version": "2.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmhook": {
+ "version": "5.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^2.0.0",
+ "figgy-pudding": "^3.4.1",
+ "get-stream": "^4.0.0",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmorg": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^2.0.0",
+ "figgy-pudding": "^3.4.1",
+ "get-stream": "^4.0.0",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmpublish": {
+ "version": "1.1.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^2.0.0",
+ "figgy-pudding": "^3.5.1",
+ "get-stream": "^4.0.0",
+ "lodash.clonedeep": "^4.5.0",
+ "normalize-package-data": "^2.4.0",
+ "npm-package-arg": "^6.1.0",
+ "npm-registry-fetch": "^4.0.0",
+ "semver": "^5.5.1",
+ "ssri": "^6.0.1"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmsearch": {
+ "version": "2.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "figgy-pudding": "^3.5.1",
+ "get-stream": "^4.0.0",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmteam": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^2.0.0",
+ "figgy-pudding": "^3.4.1",
+ "get-stream": "^4.0.0",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpx": {
+ "version": "10.2.4",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "dotenv": "^5.0.1",
+ "npm-package-arg": "^6.0.0",
+ "rimraf": "^2.6.2",
+ "safe-buffer": "^5.1.0",
+ "update-notifier": "^2.3.0",
+ "which": "^1.3.0",
+ "y18n": "^4.0.0",
+ "yargs": "^14.2.3"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/lock-verify": {
+ "version": "2.1.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "npm-package-arg": "^6.1.0",
+ "semver": "^5.4.1"
+ }
+ },
+ "node_modules/npm/node_modules/lockfile": {
+ "version": "1.0.4",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "node_modules/npm/node_modules/lodash._baseindexof": {
+ "version": "3.1.0",
+ "extraneous": true,
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/lodash._baseuniq": {
+ "version": "4.6.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "lodash._createset": "~4.0.0",
+ "lodash._root": "~3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/lodash._bindcallback": {
+ "version": "3.0.1",
+ "extraneous": true,
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/lodash._cacheindexof": {
+ "version": "3.0.2",
+ "extraneous": true,
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/lodash._createcache": {
+ "version": "3.1.2",
+ "extraneous": true,
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "lodash._getnative": "^3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/lodash._createset": {
+ "version": "4.0.3",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/lodash._getnative": {
+ "version": "3.9.1",
+ "extraneous": true,
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/lodash._root": {
+ "version": "3.0.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/lodash.clonedeep": {
+ "version": "4.5.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/lodash.restparam": {
+ "version": "3.6.1",
+ "extraneous": true,
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/lodash.union": {
+ "version": "4.6.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/lodash.uniq": {
+ "version": "4.5.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/lodash.without": {
+ "version": "4.4.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/lowercase-keys": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/lru-cache": {
+ "version": "5.1.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/npm/node_modules/make-dir": {
+ "version": "1.3.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "pify": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/make-fetch-happen": {
+ "version": "5.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "agentkeepalive": "^3.4.1",
+ "cacache": "^12.0.0",
+ "http-cache-semantics": "^3.8.1",
+ "http-proxy-agent": "^2.1.0",
+ "https-proxy-agent": "^2.2.3",
+ "lru-cache": "^5.1.1",
+ "mississippi": "^3.0.0",
+ "node-fetch-npm": "^2.0.2",
+ "promise-retry": "^1.1.1",
+ "socks-proxy-agent": "^4.0.0",
+ "ssri": "^6.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/meant": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/mime-db": {
+ "version": "1.35.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/npm/node_modules/mime-types": {
+ "version": "2.1.19",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "~1.35.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/npm/node_modules/minimatch": {
+ "version": "3.0.4",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/npm/node_modules/minimist": {
+ "version": "1.2.5",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/minizlib": {
+ "version": "1.3.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "minipass": "^2.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/minizlib/node_modules/minipass": {
+ "version": "2.9.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/mississippi": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "concat-stream": "^1.5.0",
+ "duplexify": "^3.4.2",
+ "end-of-stream": "^1.1.0",
+ "flush-write-stream": "^1.0.0",
+ "from2": "^2.1.0",
+ "parallel-transform": "^1.1.0",
+ "pump": "^3.0.0",
+ "pumpify": "^1.3.3",
+ "stream-each": "^1.1.0",
+ "through2": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/mkdirp": {
+ "version": "0.5.5",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.5"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/npm/node_modules/mkdirp/node_modules/minimist": {
+ "version": "1.2.5",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/move-concurrently": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^1.1.1",
+ "copy-concurrently": "^1.0.0",
+ "fs-write-stream-atomic": "^1.0.8",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.3"
+ }
+ },
+ "node_modules/npm/node_modules/move-concurrently/node_modules/aproba": {
+ "version": "1.2.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/ms": {
+ "version": "2.1.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/mute-stream": {
+ "version": "0.0.7",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/node-fetch-npm": {
+ "version": "2.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "encoding": "^0.1.11",
+ "json-parse-better-errors": "^1.0.0",
+ "safe-buffer": "^5.1.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/node-gyp": {
+ "version": "5.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "env-paths": "^2.2.0",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.2",
+ "mkdirp": "^0.5.1",
+ "nopt": "^4.0.1",
+ "npmlog": "^4.1.2",
+ "request": "^2.88.0",
+ "rimraf": "^2.6.3",
+ "semver": "^5.7.1",
+ "tar": "^4.4.12",
+ "which": "^1.3.1"
+ },
+ "bin": {
+ "node-gyp": "bin/node-gyp.js"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/nopt": {
+ "version": "4.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ }
+ },
+ "node_modules/npm/node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "node_modules/npm/node_modules/normalize-package-data/node_modules/resolve": {
+ "version": "1.10.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "node_modules/npm/node_modules/npm-audit-report": {
+ "version": "1.3.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "cli-table3": "^0.5.0",
+ "console-control-strings": "^1.1.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-bundled": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "node_modules/npm/node_modules/npm-cache-filename": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/npm-install-checks": {
+ "version": "3.0.2",
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "semver": "^2.3.0 || 3.x || 4 || 5"
+ }
+ },
+ "node_modules/npm/node_modules/npm-lifecycle": {
+ "version": "3.1.5",
+ "inBundle": true,
+ "license": "Artistic-2.0",
+ "dependencies": {
+ "byline": "^5.0.0",
+ "graceful-fs": "^4.1.15",
+ "node-gyp": "^5.0.2",
+ "resolve-from": "^4.0.0",
+ "slide": "^1.1.6",
+ "uid-number": "0.0.6",
+ "umask": "^1.1.0",
+ "which": "^1.3.1"
+ }
+ },
+ "node_modules/npm/node_modules/npm-logical-tree": {
+ "version": "1.2.1",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/npm-normalize-package-bin": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/npm-package-arg": {
+ "version": "6.1.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "hosted-git-info": "^2.7.1",
+ "osenv": "^0.1.5",
+ "semver": "^5.6.0",
+ "validate-npm-package-name": "^3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-packlist": {
+ "version": "1.4.8",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1",
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "node_modules/npm/node_modules/npm-pick-manifest": {
+ "version": "3.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "figgy-pudding": "^3.5.1",
+ "npm-package-arg": "^6.0.0",
+ "semver": "^5.4.1"
+ }
+ },
+ "node_modules/npm/node_modules/npm-profile": {
+ "version": "4.0.4",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^1.1.2 || 2",
+ "figgy-pudding": "^3.4.1",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-registry-fetch": {
+ "version": "4.0.7",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "bluebird": "^3.5.1",
+ "figgy-pudding": "^3.4.1",
+ "JSONStream": "^1.3.4",
+ "lru-cache": "^5.1.1",
+ "make-fetch-happen": "^5.0.0",
+ "npm-package-arg": "^6.1.0",
+ "safe-buffer": "^5.2.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
},
- "typedarray": {
- "version": "0.0.6",
- "bundled": true
- },
- "uid-number": {
- "version": "0.0.6",
- "bundled": true
- },
- "umask": {
- "version": "1.1.0",
- "bundled": true
- },
- "unique-filename": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "unique-slug": "^2.0.0"
- }
- },
- "unique-slug": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "imurmurhash": "^0.1.4"
- }
- },
- "unique-string": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "crypto-random-string": "^1.0.0"
- }
- },
- "unpipe": {
- "version": "1.0.0",
- "bundled": true
- },
- "unzip-response": {
- "version": "2.0.1",
- "bundled": true
- },
- "update-notifier": {
- "version": "2.5.0",
- "bundled": true,
- "requires": {
- "boxen": "^1.2.1",
- "chalk": "^2.0.1",
- "configstore": "^3.0.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^1.0.10",
- "is-installed-globally": "^0.1.0",
- "is-npm": "^1.0.0",
- "latest-version": "^3.0.0",
- "semver-diff": "^2.0.0",
- "xdg-basedir": "^3.0.0"
- }
- },
- "uri-js": {
- "version": "4.4.0",
- "bundled": true,
- "requires": {
- "punycode": "^2.1.0"
- },
- "dependencies": {
- "punycode": {
- "version": "2.1.1",
- "bundled": true
- }
- }
- },
- "url-parse-lax": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "prepend-http": "^1.0.1"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true
- },
- "util-extend": {
- "version": "1.0.3",
- "bundled": true
- },
- "util-promisify": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "object.getownpropertydescriptors": "^2.0.3"
- }
- },
- "uuid": {
- "version": "3.3.3",
- "bundled": true
- },
- "validate-npm-package-license": {
- "version": "3.0.4",
- "bundled": true,
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "validate-npm-package-name": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "builtins": "^1.0.3"
- }
- },
- "verror": {
- "version": "1.10.0",
- "bundled": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "wcwidth": {
- "version": "1.0.1",
- "bundled": true,
- "requires": {
- "defaults": "^1.0.3"
- }
- },
- "which": {
- "version": "1.3.1",
- "bundled": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "bundled": true
- },
- "wide-align": {
- "version": "1.1.2",
- "bundled": true,
- "requires": {
- "string-width": "^1.0.2"
- },
- "dependencies": {
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
- }
- },
- "widest-line": {
- "version": "2.0.1",
- "bundled": true,
- "requires": {
- "string-width": "^2.1.1"
- }
- },
- "worker-farm": {
- "version": "1.7.0",
- "bundled": true,
- "requires": {
- "errno": "~0.1.7"
- }
- },
- "wrap-ansi": {
- "version": "5.1.0",
- "bundled": true,
- "requires": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "bundled": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "bundled": true
- },
- "string-width": {
- "version": "3.1.0",
- "bundled": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "bundled": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true
- },
- "write-file-atomic": {
- "version": "2.4.3",
- "bundled": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
- }
- },
- "xdg-basedir": {
- "version": "3.0.0",
- "bundled": true
- },
- "xtend": {
- "version": "4.0.1",
- "bundled": true
- },
- "y18n": {
- "version": "4.0.1",
- "bundled": true
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
},
- "yallist": {
- "version": "3.0.3",
- "bundled": true
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/npm-run-path": {
+ "version": "2.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/npm-user-validate": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/npm/node_modules/npmlog": {
+ "version": "4.1.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/number-is-nan": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/oauth-sign": {
+ "version": "0.9.0",
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/npm/node_modules/object-assign": {
+ "version": "4.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/object-keys": {
+ "version": "1.0.12",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/npm/node_modules/object.getownpropertydescriptors": {
+ "version": "2.0.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.5.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/npm/node_modules/once": {
+ "version": "1.4.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/npm/node_modules/opener": {
+ "version": "1.5.2",
+ "inBundle": true,
+ "license": "(WTFPL OR MIT)",
+ "bin": {
+ "opener": "bin/opener-bin.js"
+ }
+ },
+ "node_modules/npm/node_modules/os-homedir": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/os-tmpdir": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/osenv": {
+ "version": "0.1.5",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/p-finally": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/package-json": {
+ "version": "4.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "got": "^6.7.1",
+ "registry-auth-token": "^3.0.1",
+ "registry-url": "^3.0.3",
+ "semver": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/pacote": {
+ "version": "9.5.12",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "bluebird": "^3.5.3",
+ "cacache": "^12.0.2",
+ "chownr": "^1.1.2",
+ "figgy-pudding": "^3.5.1",
+ "get-stream": "^4.1.0",
+ "glob": "^7.1.3",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^5.1.1",
+ "make-fetch-happen": "^5.0.0",
+ "minimatch": "^3.0.4",
+ "minipass": "^2.3.5",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "normalize-package-data": "^2.4.0",
+ "npm-normalize-package-bin": "^1.0.0",
+ "npm-package-arg": "^6.1.0",
+ "npm-packlist": "^1.1.12",
+ "npm-pick-manifest": "^3.0.0",
+ "npm-registry-fetch": "^4.0.0",
+ "osenv": "^0.1.5",
+ "promise-inflight": "^1.0.1",
+ "promise-retry": "^1.1.1",
+ "protoduck": "^5.0.1",
+ "rimraf": "^2.6.2",
+ "safe-buffer": "^5.1.2",
+ "semver": "^5.6.0",
+ "ssri": "^6.0.1",
+ "tar": "^4.4.10",
+ "unique-filename": "^1.1.1",
+ "which": "^1.3.1"
+ }
+ },
+ "node_modules/npm/node_modules/pacote/node_modules/minipass": {
+ "version": "2.9.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/parallel-transform": {
+ "version": "1.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "cyclist": "~0.2.2",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.1.5"
+ }
+ },
+ "node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream": {
+ "version": "2.3.6",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/npm/node_modules/parallel-transform/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/npm/node_modules/path-exists": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/path-is-inside": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "(WTFPL OR MIT)"
+ },
+ "node_modules/npm/node_modules/path-key": {
+ "version": "2.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/path-parse": {
+ "version": "1.0.7",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/performance-now": {
+ "version": "2.1.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/pify": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/prepend-http": {
+ "version": "1.0.4",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/process-nextick-args": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/promise-inflight": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/promise-retry": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "err-code": "^1.0.0",
+ "retry": "^0.10.0"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/npm/node_modules/promise-retry/node_modules/retry": {
+ "version": "0.10.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/npm/node_modules/promzard": {
+ "version": "0.3.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "read": "1"
+ }
+ },
+ "node_modules/npm/node_modules/proto-list": {
+ "version": "1.2.4",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/protoduck": {
+ "version": "5.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "genfun": "^5.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/prr": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/pseudomap": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/psl": {
+ "version": "1.1.29",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/pump": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/npm/node_modules/pumpify": {
+ "version": "1.5.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/pumpify/node_modules/pump": {
+ "version": "2.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/npm/node_modules/punycode": {
+ "version": "1.4.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/qrcode-terminal": {
+ "version": "0.12.0",
+ "inBundle": true,
+ "bin": {
+ "qrcode-terminal": "bin/qrcode-terminal.js"
+ }
+ },
+ "node_modules/npm/node_modules/qs": {
+ "version": "6.5.2",
+ "inBundle": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/npm/node_modules/query-string": {
+ "version": "6.8.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "decode-uri-component": "^0.2.0",
+ "split-on-first": "^1.0.0",
+ "strict-uri-encode": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/qw": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/rc": {
+ "version": "1.2.8",
+ "inBundle": true,
+ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
+ "dependencies": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
+ }
+ },
+ "node_modules/npm/node_modules/read": {
+ "version": "1.0.7",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "mute-stream": "~0.0.4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/npm/node_modules/read-cmd-shim": {
+ "version": "1.0.5",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "node_modules/npm/node_modules/read-installed": {
+ "version": "4.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "debuglog": "^1.0.1",
+ "read-package-json": "^2.0.0",
+ "readdir-scoped-modules": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "slide": "~1.1.3",
+ "util-extend": "^1.0.1"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "node_modules/npm/node_modules/read-package-json": {
+ "version": "2.1.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.1",
+ "json-parse-better-errors": "^1.0.1",
+ "normalize-package-data": "^2.0.0",
+ "npm-normalize-package-bin": "^1.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "node_modules/npm/node_modules/read-package-tree": {
+ "version": "5.3.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "read-package-json": "^2.0.0",
+ "readdir-scoped-modules": "^1.0.0",
+ "util-promisify": "^2.1.0"
+ }
+ },
+ "node_modules/npm/node_modules/readable-stream": {
+ "version": "3.6.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/npm/node_modules/readdir-scoped-modules": {
+ "version": "1.1.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "debuglog": "^1.0.1",
+ "dezalgo": "^1.0.0",
+ "graceful-fs": "^4.1.2",
+ "once": "^1.3.0"
+ }
+ },
+ "node_modules/npm/node_modules/registry-auth-token": {
+ "version": "3.4.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "rc": "^1.1.6",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/npm/node_modules/registry-url": {
+ "version": "3.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "rc": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/request": {
+ "version": "2.88.0",
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/npm/node_modules/require-directory": {
+ "version": "2.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/require-main-filename": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/resolve-from": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/retry": {
+ "version": "0.12.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/npm/node_modules/rimraf": {
+ "version": "2.7.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/npm/node_modules/run-queue": {
+ "version": "1.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^1.1.1"
+ }
+ },
+ "node_modules/npm/node_modules/run-queue/node_modules/aproba": {
+ "version": "1.2.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/semver": {
+ "version": "5.7.1",
+ "inBundle": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/npm/node_modules/semver-diff": {
+ "version": "2.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^5.0.3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/set-blocking": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/sha": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "(BSD-2-Clause OR MIT)",
+ "dependencies": {
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "node_modules/npm/node_modules/shebang-command": {
+ "version": "1.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/shebang-regex": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/signal-exit": {
+ "version": "3.0.2",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/slide": {
+ "version": "1.1.6",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/npm/node_modules/smart-buffer": {
+ "version": "4.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/socks": {
+ "version": "2.3.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "ip": "1.1.5",
+ "smart-buffer": "^4.1.0"
+ },
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/socks-proxy-agent": {
+ "version": "4.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "~4.2.1",
+ "socks": "~2.3.2"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/npm/node_modules/socks-proxy-agent/node_modules/agent-base": {
+ "version": "4.2.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "es6-promisify": "^5.0.0"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/sorted-object": {
+ "version": "2.0.1",
+ "inBundle": true,
+ "license": "(WTFPL OR MIT)"
+ },
+ "node_modules/npm/node_modules/sorted-union-stream": {
+ "version": "2.1.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "from2": "^1.3.0",
+ "stream-iterate": "^1.1.0"
+ }
+ },
+ "node_modules/npm/node_modules/sorted-union-stream/node_modules/from2": {
+ "version": "1.3.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "~2.0.1",
+ "readable-stream": "~1.1.10"
+ }
+ },
+ "node_modules/npm/node_modules/sorted-union-stream/node_modules/isarray": {
+ "version": "0.0.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream": {
+ "version": "1.1.14",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "node_modules/npm/node_modules/sorted-union-stream/node_modules/string_decoder": {
+ "version": "0.10.31",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/spdx-correct": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/spdx-exceptions": {
+ "version": "2.1.0",
+ "inBundle": true,
+ "license": "CC-BY-3.0"
+ },
+ "node_modules/npm/node_modules/spdx-expression-parse": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/spdx-license-ids": {
+ "version": "3.0.5",
+ "inBundle": true,
+ "license": "CC0-1.0"
+ },
+ "node_modules/npm/node_modules/split-on-first": {
+ "version": "1.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/sshpk": {
+ "version": "1.14.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "getpass": "^0.1.1",
+ "safer-buffer": "^2.0.2"
+ },
+ "bin": {
+ "sshpk-conv": "bin/sshpk-conv",
+ "sshpk-sign": "bin/sshpk-sign",
+ "sshpk-verify": "bin/sshpk-verify"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "optionalDependencies": {
+ "bcrypt-pbkdf": "^1.0.0",
+ "ecc-jsbn": "~0.1.1",
+ "jsbn": "~0.1.0",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "node_modules/npm/node_modules/ssri": {
+ "version": "6.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "figgy-pudding": "^3.5.1"
+ }
+ },
+ "node_modules/npm/node_modules/stream-each": {
+ "version": "1.2.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/stream-iterate": {
+ "version": "1.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "^2.1.5",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream": {
+ "version": "2.3.6",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/npm/node_modules/stream-iterate/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/npm/node_modules/stream-shift": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/strict-uri-encode": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/string_decoder": {
+ "version": "1.3.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/npm/node_modules/string_decoder/node_modules/safe-buffer": {
+ "version": "5.2.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/string-width": {
+ "version": "2.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/string-width/node_modules/ansi-regex": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/string-width/node_modules/is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/string-width/node_modules/strip-ansi": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/stringify-package": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/strip-eof": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/supports-color": {
+ "version": "5.4.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/tar": {
+ "version": "4.4.19",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "chownr": "^1.1.4",
+ "fs-minipass": "^1.2.7",
+ "minipass": "^2.9.0",
+ "minizlib": "^1.3.3",
+ "mkdirp": "^0.5.5",
+ "safe-buffer": "^5.2.1",
+ "yallist": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=4.5"
+ }
+ },
+ "node_modules/npm/node_modules/tar/node_modules/minipass": {
+ "version": "2.9.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/tar/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
},
- "yargs": {
- "version": "14.2.3",
- "bundled": true,
- "requires": {
- "cliui": "^5.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^3.0.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^15.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "bundled": true
- },
- "find-up": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "bundled": true
- },
- "locate-path": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "bundled": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "bundled": true
- },
- "string-width": {
- "version": "3.1.0",
- "bundled": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "bundled": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- }
- }
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
},
- "yargs-parser": {
- "version": "15.0.1",
- "bundled": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "5.3.1",
- "bundled": true
- }
- }
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
}
+ ],
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/tar/node_modules/yallist": {
+ "version": "3.1.1",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/term-size": {
+ "version": "1.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "execa": "^0.7.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/text-table": {
+ "version": "0.2.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/through": {
+ "version": "2.3.8",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/through2": {
+ "version": "2.0.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/npm/node_modules/through2/node_modules/readable-stream": {
+ "version": "2.3.6",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/npm/node_modules/through2/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/npm/node_modules/timed-out": {
+ "version": "4.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/tiny-relative-date": {
+ "version": "1.3.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/tough-cookie": {
+ "version": "2.4.3",
+ "inBundle": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/npm/node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/npm/node_modules/tweetnacl": {
+ "version": "0.14.5",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
+ "inBundle": true,
+ "optional": true
+ },
+ "node_modules/npm/node_modules/typedarray": {
+ "version": "0.0.6",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/uid-number": {
+ "version": "0.0.6",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/npm/node_modules/umask": {
+ "version": "1.1.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/unique-filename": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/unique-slug": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "node_modules/npm/node_modules/unique-string": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "crypto-random-string": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/unpipe": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/npm/node_modules/unzip-response": {
+ "version": "2.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/update-notifier": {
+ "version": "2.5.0",
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boxen": "^1.2.1",
+ "chalk": "^2.0.1",
+ "configstore": "^3.0.0",
+ "import-lazy": "^2.1.0",
+ "is-ci": "^1.0.10",
+ "is-installed-globally": "^0.1.0",
+ "is-npm": "^1.0.0",
+ "latest-version": "^3.0.0",
+ "semver-diff": "^2.0.0",
+ "xdg-basedir": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/uri-js": {
+ "version": "4.4.0",
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/npm/node_modules/uri-js/node_modules/punycode": {
+ "version": "2.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/url-parse-lax": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "prepend-http": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/util-extend": {
+ "version": "1.0.3",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/util-promisify": {
+ "version": "2.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
+ },
+ "node_modules/npm/node_modules/uuid": {
+ "version": "3.3.3",
+ "inBundle": true,
+ "license": "MIT",
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/npm/node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/validate-npm-package-name": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "builtins": "^1.0.3"
+ }
+ },
+ "node_modules/npm/node_modules/verror": {
+ "version": "1.10.0",
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "node_modules/npm/node_modules/wcwidth": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "node_modules/npm/node_modules/which": {
+ "version": "1.3.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/npm/node_modules/which-module": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/wide-align": {
+ "version": "1.1.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^1.0.2"
+ }
+ },
+ "node_modules/npm/node_modules/wide-align/node_modules/string-width": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/widest-line": {
+ "version": "2.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "string-width": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/worker-farm": {
+ "version": "1.7.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "errno": "~0.1.7"
+ }
+ },
+ "node_modules/npm/node_modules/wrap-ansi": {
+ "version": "5.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": {
+ "version": "4.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": {
+ "version": "3.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": {
+ "version": "5.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/wrappy": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/write-file-atomic": {
+ "version": "2.4.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "node_modules/npm/node_modules/xdg-basedir": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/xtend": {
+ "version": "4.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/npm/node_modules/y18n": {
+ "version": "4.0.1",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/yallist": {
+ "version": "3.0.3",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/yargs": {
+ "version": "14.2.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^5.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^15.0.1"
+ }
+ },
+ "node_modules/npm/node_modules/yargs-parser": {
+ "version": "15.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ },
+ "node_modules/npm/node_modules/yargs-parser/node_modules/camelcase": {
+ "version": "5.3.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/yargs/node_modules/ansi-regex": {
+ "version": "4.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/yargs/node_modules/find-up": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/yargs/node_modules/is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/yargs/node_modules/locate-path": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/yargs/node_modules/p-limit": {
+ "version": "2.3.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/npm/node_modules/yargs/node_modules/p-locate": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/yargs/node_modules/p-try": {
+ "version": "2.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/yargs/node_modules/string-width": {
+ "version": "3.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/yargs/node_modules/strip-ansi": {
+ "version": "5.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "npmlog": {
+ "node_modules/npmlog": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
"integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
"optional": true,
- "requires": {
+ "dependencies": {
"are-we-there-yet": "^2.0.0",
"console-control-strings": "^1.1.0",
"gauge": "^3.0.0",
"set-blocking": "^2.0.0"
}
},
- "nwsapi": {
+ "node_modules/nth-check": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "boolbase": "~1.0.0"
+ }
+ },
+ "node_modules/number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nwsapi": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
"integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ=="
},
- "oauth-sign": {
+ "node_modules/oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "engines": {
+ "node": "*"
+ }
},
- "object-assign": {
+ "node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "optional": true
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "object-inspect": {
+ "node_modules/object-inspect": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
- "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g=="
+ "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "object-keys": {
+ "node_modules/object-keys": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "engines": {
+ "node": ">= 0.4"
+ }
},
- "object.assign": {
+ "node_modules/object.assign": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
"integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.0",
"define-properties": "^1.1.3",
"has-symbols": "^1.0.1",
"object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "object.values": {
+ "node_modules/object.values": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
"integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
"es-abstract": "^1.19.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "observable-fns": {
+ "node_modules/observable-fns": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/observable-fns/-/observable-fns-0.6.1.tgz",
"integrity": "sha512-9gRK4+sRWzeN6AOewNBTLXir7Zl/i3GB6Yl26gK4flxz8BXVpD3kt8amREmWNb0mxYOGDotvE5a4N+PtGGKdkg=="
},
- "on-finished": {
+ "node_modules/on-finished": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
- "requires": {
+ "dependencies": {
"ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
}
},
- "on-headers": {
+ "node_modules/on-headers": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "once": {
+ "node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "requires": {
+ "dependencies": {
"wrappy": "1"
}
},
- "open": {
+ "node_modules/open": {
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
"integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
- "requires": {
+ "dependencies": {
"define-lazy-prop": "^2.0.0",
"is-docker": "^2.1.1",
"is-wsl": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "openapi-backend": {
+ "node_modules/openapi-backend": {
"version": "5.9.2",
"resolved": "https://registry.npmjs.org/openapi-backend/-/openapi-backend-5.9.2.tgz",
"integrity": "sha512-x49QIeqwsty0v5BGzjXsEnx4Hm3cYYU9LOOc2+wWtF0ksMiCBdoZlwk/FQ2bvuZaECSoeCT8wc1iZArP3klwuA==",
- "requires": {
+ "dependencies": {
"@apidevtools/json-schema-ref-parser": "^10.1.0",
"ajv": "^8.6.2",
"bath-es5": "^3.0.3",
@@ -7977,182 +18618,229 @@
"openapi-types": "^12.0.2",
"qs": "^6.9.3"
},
- "dependencies": {
- "cookie": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
- "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
- }
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/anttiviljami"
+ }
+ },
+ "node_modules/openapi-backend/node_modules/cookie": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+ "engines": {
+ "node": ">= 0.6"
}
},
- "openapi-schema-validation": {
+ "node_modules/openapi-schema-validation": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/openapi-schema-validation/-/openapi-schema-validation-0.4.2.tgz",
"integrity": "sha512-K8LqLpkUf2S04p2Nphq9L+3bGFh/kJypxIG2NVGKX0ffzT4NQI9HirhiY6Iurfej9lCu7y4Ndm4tv+lm86Ck7w==",
"dev": true,
- "requires": {
+ "dependencies": {
"jsonschema": "1.2.4",
"jsonschema-draft4": "^1.0.0",
"swagger-schema-official": "2.0.0-bab6bed"
}
},
- "openapi-schema-validator": {
+ "node_modules/openapi-schema-validator": {
"version": "12.1.3",
"resolved": "https://registry.npmjs.org/openapi-schema-validator/-/openapi-schema-validator-12.1.3.tgz",
"integrity": "sha512-xTHOmxU/VQGUgo7Cm0jhwbklOKobXby+/237EG967+3TQEYJztMgX9Q5UE2taZKwyKPUq0j11dngpGjUuxz1hQ==",
- "requires": {
+ "dependencies": {
"ajv": "^8.1.0",
"ajv-formats": "^2.0.2",
"lodash.merge": "^4.6.1",
"openapi-types": "^12.1.3"
}
},
- "openapi-types": {
+ "node_modules/openapi-types": {
"version": "12.1.3",
"resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz",
"integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw=="
},
- "optional-js": {
+ "node_modules/optional-js": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/optional-js/-/optional-js-2.3.0.tgz",
"integrity": "sha512-B0LLi+Vg+eko++0z/b8zIv57kp7HKEzaPJo7LowJXMUKYdf+3XJGu/cw03h/JhIOsLnP+cG5QnTHAuicjA5fMw=="
},
- "optional-require": {
+ "node_modules/optional-require": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz",
"integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==",
- "requires": {
+ "dependencies": {
"require-at": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "optionator": {
+ "node_modules/optionator": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
"integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "requires": {
+ "dependencies": {
"deep-is": "~0.1.3",
"fast-levenshtein": "~2.0.6",
"levn": "~0.3.0",
"prelude-ls": "~1.1.2",
"type-check": "~0.3.2",
"word-wrap": "~1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "p-limit": {
+ "node_modules/p-limit": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
"integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
"dev": true,
- "requires": {
+ "dependencies": {
"p-try": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "p-locate": {
+ "node_modules/p-locate": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
"integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
"dev": true,
- "requires": {
+ "dependencies": {
"p-limit": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "p-map": {
+ "node_modules/p-map": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
"integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
"optional": true,
- "requires": {
+ "dependencies": {
"aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "p-try": {
+ "node_modules/p-try": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
},
- "packet-reader": {
+ "node_modules/packet-reader": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz",
"integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="
},
- "pako": {
+ "node_modules/pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
"dev": true
},
- "parent-module": {
+ "node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dev": true,
- "requires": {
+ "dependencies": {
"callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "parse5": {
+ "node_modules/parse5": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
},
- "parseqs": {
+ "node_modules/parseqs": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz",
"integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w=="
},
- "parseuri": {
+ "node_modules/parseuri": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz",
"integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow=="
},
- "parseurl": {
+ "node_modules/parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "path-exists": {
+ "node_modules/path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
},
- "path-is-absolute": {
+ "node_modules/path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "devOptional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "path-key": {
+ "node_modules/path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "engines": {
+ "node": ">=8"
+ }
},
- "path-parse": {
+ "node_modules/path-parse": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
- "path-to-regexp": {
+ "node_modules/path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
},
- "path-type": {
+ "node_modules/path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
},
- "performance-now": {
+ "node_modules/performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
- "pg": {
+ "node_modules/pg": {
"version": "8.7.3",
"resolved": "https://registry.npmjs.org/pg/-/pg-8.7.3.tgz",
"integrity": "sha512-HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw==",
- "requires": {
+ "dependencies": {
"buffer-writer": "2.0.0",
"packet-reader": "1.0.0",
"pg-connection-string": "^2.5.0",
@@ -8160,277 +18848,538 @@
"pg-protocol": "^1.5.0",
"pg-types": "^2.1.0",
"pgpass": "1.x"
+ },
+ "engines": {
+ "node": ">= 8.0.0"
+ },
+ "peerDependencies": {
+ "pg-native": ">=2.0.0"
+ },
+ "peerDependenciesMeta": {
+ "pg-native": {
+ "optional": true
+ }
}
},
- "pg-connection-string": {
+ "node_modules/pg-connection-string": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz",
"integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ=="
},
- "pg-int8": {
+ "node_modules/pg-int8": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
- "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="
+ "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==",
+ "engines": {
+ "node": ">=4.0.0"
+ }
},
- "pg-pool": {
+ "node_modules/pg-pool": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.1.tgz",
- "integrity": "sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ=="
+ "integrity": "sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ==",
+ "peerDependencies": {
+ "pg": ">=8.0"
+ }
},
- "pg-protocol": {
+ "node_modules/pg-protocol": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz",
"integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ=="
},
- "pg-types": {
+ "node_modules/pg-types": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz",
"integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
- "requires": {
+ "dependencies": {
"pg-int8": "1.0.1",
"postgres-array": "~2.0.0",
"postgres-bytea": "~1.0.0",
"postgres-date": "~1.0.4",
"postgres-interval": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "pgpass": {
+ "node_modules/pgpass": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz",
"integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==",
- "requires": {
+ "dependencies": {
"split2": "^4.1.0"
}
},
- "picomatch": {
+ "node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz",
+ "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "postgres-array": {
+ "node_modules/postgres-array": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
- "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="
+ "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==",
+ "engines": {
+ "node": ">=4"
+ }
},
- "postgres-bytea": {
+ "node_modules/postgres-bytea": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz",
- "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU="
+ "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "postgres-date": {
+ "node_modules/postgres-date": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz",
- "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="
+ "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "postgres-interval": {
+ "node_modules/postgres-interval": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
"integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
- "requires": {
+ "dependencies": {
"xtend": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/prebuild-install": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz",
+ "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "detect-libc": "^2.0.0",
+ "expand-template": "^2.0.3",
+ "github-from-package": "0.0.0",
+ "minimist": "^1.2.3",
+ "mkdirp-classic": "^0.5.3",
+ "napi-build-utils": "^1.0.1",
+ "node-abi": "^3.3.0",
+ "pump": "^3.0.0",
+ "rc": "^1.2.7",
+ "simple-get": "^4.0.0",
+ "tar-fs": "^2.0.0",
+ "tunnel-agent": "^0.6.0"
+ },
+ "bin": {
+ "prebuild-install": "bin.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "prelude-ls": {
+ "node_modules/prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
},
- "process": {
+ "node_modules/process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
},
- "process-nextick-args": {
+ "node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
- "promise": {
+ "node_modules/promise": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/promise/-/promise-1.3.0.tgz",
"integrity": "sha1-5cyaTIJ45GZP/twBx9qEhCsEAXU=",
"dev": true,
- "requires": {
+ "dependencies": {
"is-promise": "~1"
}
},
- "promise-inflight": {
+ "node_modules/promise-inflight": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
"integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
"optional": true
},
- "promise-retry": {
+ "node_modules/promise-retry": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
"integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
"optional": true,
- "requires": {
+ "dependencies": {
"err-code": "^2.0.2",
"retry": "^0.12.0"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "property-information": {
+ "node_modules/property-information": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/property-information/-/property-information-6.1.1.tgz",
- "integrity": "sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w=="
+ "integrity": "sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
},
- "proxy-addr": {
+ "node_modules/proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
- "requires": {
+ "dependencies": {
"forwarded": "0.2.0",
"ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "proxy-from-env": {
+ "node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
},
- "psl": {
+ "node_modules/psl": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
"integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
},
- "punycode": {
+ "node_modules/pstree.remy": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
+ "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
+ "dev": true
+ },
+ "node_modules/pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "engines": {
+ "node": ">=6"
+ }
},
- "qs": {
+ "node_modules/qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
- "requires": {
+ "dependencies": {
"side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "queue-microtask": {
+ "node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
},
- "ramda": {
+ "node_modules/ramda": {
"version": "0.28.0",
"resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz",
"integrity": "sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==",
- "dev": true
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/ramda"
+ }
},
- "random-bytes": {
+ "node_modules/random-bytes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
- "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ=="
+ "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "randombytes": {
+ "node_modules/randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"safe-buffer": "^5.1.0"
}
},
- "range-parser": {
+ "node_modules/range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "rate-limiter-flexible": {
+ "node_modules/rate-limiter-flexible": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/rate-limiter-flexible/-/rate-limiter-flexible-2.4.1.tgz",
"integrity": "sha512-dgH4T44TzKVO9CLArNto62hJOwlWJMLUjVVr/ii0uUzZXEXthDNr7/yefW5z/1vvHAfycc1tnuiYyNJ8CTRB3g=="
},
- "raw-body": {
+ "node_modules/raw-body": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
"integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
- "requires": {
+ "dependencies": {
"bytes": "3.1.2",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
}
},
- "readable-stream": {
- "version": "1.0.34",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
+ "node_modules/rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
+ }
+ },
+ "node_modules/rc/node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
}
},
- "readdirp": {
+ "node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
- "requires": {
+ "dependencies": {
"picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/redis": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/redis/-/redis-3.1.2.tgz",
+ "integrity": "sha512-grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "denque": "^1.5.0",
+ "redis-commands": "^1.7.0",
+ "redis-errors": "^1.2.0",
+ "redis-parser": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/node-redis"
+ }
+ },
+ "node_modules/redis-commands": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz",
+ "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/redis-errors": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz",
+ "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/redis-parser": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz",
+ "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "redis-errors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "regexpp": {
+ "node_modules/regenerator-runtime": {
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
+ "dev": true
+ },
+ "node_modules/regexpp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
"integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
},
- "rehype": {
+ "node_modules/rehype": {
"version": "12.0.1",
"resolved": "https://registry.npmjs.org/rehype/-/rehype-12.0.1.tgz",
"integrity": "sha512-ey6kAqwLM3X6QnMDILJthGvG1m1ULROS9NT4uG9IDCuv08SFyLlreSuvOa//DgEvbXx62DS6elGVqusWhRUbgw==",
- "requires": {
+ "dependencies": {
"@types/hast": "^2.0.0",
"rehype-parse": "^8.0.0",
"rehype-stringify": "^9.0.0",
"unified": "^10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "rehype-minify-whitespace": {
+ "node_modules/rehype-minify-whitespace": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/rehype-minify-whitespace/-/rehype-minify-whitespace-5.0.1.tgz",
"integrity": "sha512-PPp4lWJiBPlePI/dv1BeYktbwkfgXkrK59MUa+tYbMPgleod+4DvFK2PLU0O0O60/xuhHfiR9GUIUlXTU8sRIQ==",
- "requires": {
+ "dependencies": {
"@types/hast": "^2.0.0",
"hast-util-embedded": "^2.0.0",
"hast-util-is-element": "^2.0.0",
"hast-util-whitespace": "^2.0.0",
"unified": "^10.0.0",
"unist-util-is": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "rehype-parse": {
+ "node_modules/rehype-parse": {
"version": "8.0.4",
"resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-8.0.4.tgz",
"integrity": "sha512-MJJKONunHjoTh4kc3dsM1v3C9kGrrxvA3U8PxZlP2SjH8RNUSrb+lF7Y0KVaUDnGH2QZ5vAn7ulkiajM9ifuqg==",
- "requires": {
+ "dependencies": {
"@types/hast": "^2.0.0",
"hast-util-from-parse5": "^7.0.0",
"parse5": "^6.0.0",
"unified": "^10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "rehype-stringify": {
+ "node_modules/rehype-stringify": {
"version": "9.0.3",
"resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.3.tgz",
"integrity": "sha512-kWiZ1bgyWlgOxpqD5HnxShKAdXtb2IUljn3hQAhySeak6IOQPPt6DeGnsIh4ixm7yKJWzm8TXFuC/lPfcWHJqw==",
- "requires": {
+ "dependencies": {
"@types/hast": "^2.0.0",
"hast-util-to-html": "^8.0.0",
"unified": "^10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "request": {
+ "node_modules/request": {
"version": "2.88.2",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
"integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "requires": {
+ "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
+ "dependencies": {
"aws-sign2": "~0.7.0",
"aws4": "^1.8.0",
"caseless": "~0.12.0",
@@ -8452,191 +19401,291 @@
"tunnel-agent": "^0.6.0",
"uuid": "^3.3.2"
},
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/request/node_modules/form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/request/node_modules/qs": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/request/node_modules/tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
"dependencies": {
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "qs": {
- "version": "6.5.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
- "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
- },
- "tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "requires": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- }
- }
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.8"
}
},
- "require-at": {
+ "node_modules/require-at": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz",
- "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g=="
+ "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==",
+ "engines": {
+ "node": ">=4"
+ }
},
- "require-directory": {
+ "node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "require-from-string": {
+ "node_modules/require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "resolve": {
+ "node_modules/resolve": {
"version": "1.22.2",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
"integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
- "requires": {
+ "dependencies": {
"is-core-module": "^2.11.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
- "dependencies": {
- "is-core-module": {
- "version": "2.12.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
- "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
- "requires": {
- "has": "^1.0.3"
- }
- }
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "resolve-from": {
+ "node_modules/resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve/node_modules/is-core-module": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
+ "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "rethinkdb": {
+ "node_modules/rethinkdb": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/rethinkdb/-/rethinkdb-2.4.2.tgz",
"integrity": "sha512-6DzwqEpFc8cqesAdo07a845oBRxLiHvWzopTKBo/uY2ypGWIsJQFJk3wjRDtSEhczxJqLS0jnf37rwgzYAw8NQ==",
- "requires": {
+ "dependencies": {
"bluebird": ">= 2.3.2 < 3"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
}
},
- "retry": {
+ "node_modules/retry": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
"integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
- "optional": true
+ "optional": true,
+ "engines": {
+ "node": ">= 4"
+ }
},
- "reusify": {
+ "node_modules/reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
},
- "rfdc": {
+ "node_modules/rfdc": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
"integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="
},
- "rimraf": {
+ "node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "requires": {
+ "devOptional": true,
+ "dependencies": {
"glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "run-parallel": {
+ "node_modules/run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
"dev": true,
- "requires": {
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
"queue-microtask": "^1.2.2"
}
},
- "safe-buffer": {
+ "node_modules/rxjs": {
+ "version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+ "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/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=="
},
- "safer-buffer": {
+ "node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
- "saslprep": {
+ "node_modules/saslprep": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
"integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
"optional": true,
- "requires": {
+ "dependencies": {
"sparse-bitfield": "^3.0.3"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "sax": {
+ "node_modules/sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
},
- "saxes": {
+ "node_modules/saxes": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
"integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
- "requires": {
+ "dependencies": {
"xmlchars": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "secure-json-parse": {
+ "node_modules/secure-json-parse": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz",
"integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="
},
- "security": {
+ "node_modules/security": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/security/-/security-1.0.0.tgz",
- "integrity": "sha1-gRwwAxNoYTPvAAcSXjsO1wCXiBU="
+ "integrity": "sha1-gRwwAxNoYTPvAAcSXjsO1wCXiBU=",
+ "engines": {
+ "node": "*"
+ }
},
- "selenium-webdriver": {
+ "node_modules/selenium-webdriver": {
"version": "4.10.0",
"resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.10.0.tgz",
"integrity": "sha512-hSQPw6jgc+ej/UEcdQPG/iBwwMeCEgZr9HByY/J8ToyXztEqXzU9aLsIyrlj1BywBcStO4JQK/zMUWWrV8+riA==",
"dev": true,
- "requires": {
+ "dependencies": {
"jszip": "^3.10.1",
"tmp": "^0.2.1",
"ws": ">=8.13.0"
},
- "dependencies": {
- "ws": {
- "version": "8.13.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
- "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
- "dev": true
+ "engines": {
+ "node": ">= 14.20.0"
+ }
+ },
+ "node_modules/selenium-webdriver/node_modules/ws": {
+ "version": "8.13.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
+ "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
}
}
},
- "semver": {
+ "node_modules/semver": {
"version": "7.5.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz",
"integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==",
- "requires": {
+ "dependencies": {
"lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "send": {
+ "node_modules/send": {
"version": "0.18.0",
"resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
"integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
- "requires": {
+ "dependencies": {
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
@@ -8651,117 +19700,219 @@
"range-parser": "~1.2.1",
"statuses": "2.0.1"
},
- "dependencies": {
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- }
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "serialize-javascript": {
+ "node_modules/send/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/serialize-javascript": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
"integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
"dev": true,
- "requires": {
+ "dependencies": {
"randombytes": "^2.1.0"
}
},
- "serve-static": {
+ "node_modules/serve-static": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
"integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
- "requires": {
+ "dependencies": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
"send": "0.18.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "set-blocking": {
+ "node_modules/set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
"optional": true
},
- "set-cookie-parser": {
+ "node_modules/set-cookie-parser": {
"version": "2.4.8",
"resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz",
"integrity": "sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg==",
"dev": true
},
- "setimmediate": {
+ "node_modules/setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
"dev": true
},
- "setprototypeof": {
+ "node_modules/setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
},
- "shebang-command": {
+ "node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "requires": {
+ "dependencies": {
"shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "shebang-regex": {
+ "node_modules/shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shell-quote": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
+ "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "side-channel": {
+ "node_modules/side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
"integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
"object-inspect": "^1.9.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "signal-exit": {
+ "node_modules/signal-exit": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"optional": true
},
- "simple-git": {
+ "node_modules/simple-concat": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
+ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "optional": true,
+ "peer": true
+ },
+ "node_modules/simple-get": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
+ "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "decompress-response": "^6.0.0",
+ "once": "^1.3.1",
+ "simple-concat": "^1.0.0"
+ }
+ },
+ "node_modules/simple-git": {
"version": "3.16.0",
"resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.16.0.tgz",
"integrity": "sha512-zuWYsOLEhbJRWVxpjdiXl6eyAyGo/KzVW+KFhhw9MqEEJttcq+32jTWSGyxTdf9e/YCohxRE+9xpWFj9FdiJNw==",
- "requires": {
+ "dependencies": {
"@kwsites/file-exists": "^1.1.1",
"@kwsites/promise-deferred": "^1.1.1",
"debug": "^4.3.4"
},
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/steveukx/git-js?sponsor=1"
+ }
+ },
+ "node_modules/simple-git/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "sinon": {
+ "node_modules/simple-git/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/simple-update-notifier": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz",
+ "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==",
+ "dev": true,
+ "dependencies": {
+ "semver": "~7.0.0"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/simple-update-notifier/node_modules/semver": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
+ "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/sinon": {
"version": "13.0.2",
"resolved": "https://registry.npmjs.org/sinon/-/sinon-13.0.2.tgz",
"integrity": "sha512-KvOrztAVqzSJWMDoxM4vM+GPys1df2VBoXm+YciyB/OLMamfS3VXh3oGh5WtrAGSzrgczNWFFY22oKb7Fi5eeA==",
"dev": true,
- "requires": {
+ "dependencies": {
"@sinonjs/commons": "^1.8.3",
"@sinonjs/fake-timers": "^9.1.2",
"@sinonjs/samsam": "^6.1.1",
@@ -8769,74 +19920,74 @@
"nise": "^5.1.1",
"supports-color": "^7.2.0"
},
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/sinon"
+ }
+ },
+ "node_modules/sinon/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sinon/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
"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==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "slash": {
+ "node_modules/slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
},
- "smart-buffer": {
+ "node_modules/smart-buffer": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
"integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
- "optional": true
+ "optional": true,
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
},
- "socket.io": {
+ "node_modules/socket.io": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz",
"integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==",
- "requires": {
+ "dependencies": {
"debug": "~4.1.0",
"engine.io": "~3.5.0",
"has-binary2": "~1.0.2",
"socket.io-adapter": "~1.1.0",
"socket.io-client": "2.4.0",
"socket.io-parser": "~3.4.0"
- },
- "dependencies": {
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- }
}
},
- "socket.io-adapter": {
+ "node_modules/socket.io-adapter": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz",
"integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g=="
},
- "socket.io-client": {
+ "node_modules/socket.io-client": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz",
"integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==",
- "requires": {
+ "dependencies": {
"backo2": "1.0.2",
"component-bind": "1.0.0",
"component-emitter": "~1.3.0",
@@ -8848,160 +19999,231 @@
"parseuri": "0.0.6",
"socket.io-parser": "~3.3.0",
"to-array": "0.1.4"
- },
+ }
+ },
+ "node_modules/socket.io-client/node_modules/debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
"dependencies": {
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "isarray": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
- "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
- },
- "socket.io-parser": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.3.tgz",
- "integrity": "sha512-qOg87q1PMWWTeO01768Yh9ogn7chB9zkKtQnya41Y355S0UmpXgpcrFwAgjYJxu9BdKug5r5e9YtVSeWhKBUZg==",
- "requires": {
- "component-emitter": "~1.3.0",
- "debug": "~3.1.0",
- "isarray": "2.0.1"
- }
- }
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/socket.io-client/node_modules/isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
+ },
+ "node_modules/socket.io-client/node_modules/socket.io-parser": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.3.tgz",
+ "integrity": "sha512-qOg87q1PMWWTeO01768Yh9ogn7chB9zkKtQnya41Y355S0UmpXgpcrFwAgjYJxu9BdKug5r5e9YtVSeWhKBUZg==",
+ "dependencies": {
+ "component-emitter": "~1.3.0",
+ "debug": "~3.1.0",
+ "isarray": "2.0.1"
}
},
- "socket.io-parser": {
+ "node_modules/socket.io-parser": {
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.3.tgz",
"integrity": "sha512-1rE4dZN3kCI/E5wixd393hmbqa78vVpkKmnEJhLeWoS/C5hbFYAbcSfnWoaVH43u9ToUVtzKjguxEZq+1XZfCQ==",
- "requires": {
+ "dependencies": {
"component-emitter": "1.2.1",
"debug": "~4.1.0",
"isarray": "2.0.1"
},
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/socket.io-parser/node_modules/component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA=="
+ },
+ "node_modules/socket.io-parser/node_modules/debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
"dependencies": {
- "component-emitter": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
- "integrity": "sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA=="
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "isarray": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
- "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ=="
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- }
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/socket.io-parser/node_modules/isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ=="
+ },
+ "node_modules/socket.io-parser/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/socket.io/node_modules/debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
+ "dependencies": {
+ "ms": "^2.1.1"
}
},
- "socks": {
+ "node_modules/socket.io/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/socks": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
"integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
"optional": true,
- "requires": {
+ "dependencies": {
"ip": "^2.0.0",
"smart-buffer": "^4.2.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0",
+ "npm": ">= 3.0.0"
}
},
- "socks-proxy-agent": {
+ "node_modules/socks-proxy-agent": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz",
"integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==",
"optional": true,
- "requires": {
+ "dependencies": {
"agent-base": "^6.0.2",
"debug": "^4.3.3",
"socks": "^2.6.2"
},
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/socks-proxy-agent/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "optional": true,
"dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "optional": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
"optional": true
}
}
},
- "source-map": {
+ "node_modules/socks-proxy-agent/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "optional": true
+ },
+ "node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "source-map-support": {
+ "node_modules/source-map-support": {
"version": "0.5.21",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "requires": {
+ "dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
}
},
- "space-separated-tokens": {
+ "node_modules/space-separated-tokens": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz",
- "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw=="
+ "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
},
- "sparse-bitfield": {
+ "node_modules/sparse-bitfield": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
"integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
"optional": true,
- "requires": {
+ "dependencies": {
"memory-pager": "^1.0.2"
}
},
- "split-grid": {
+ "node_modules/spawn-command": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz",
+ "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==",
+ "dev": true
+ },
+ "node_modules/split-grid": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/split-grid/-/split-grid-1.0.11.tgz",
"integrity": "sha512-ELtFtxc3r5we5GZfe6Fi0BFFxIi2M6BY1YEntBscKRDD3zx4JVHqx2VnTRSQu1BixCYSTH3MTjKd4esI2R7EgQ==",
"dev": true
},
- "split2": {
+ "node_modules/split2": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz",
- "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ=="
+ "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==",
+ "engines": {
+ "node": ">= 10.x"
+ }
},
- "sprintf-js": {
+ "node_modules/sprintf-js": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
"integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug=="
},
- "sqlstring": {
+ "node_modules/sqlite3": {
+ "version": "5.0.2",
+ "resolved": "git+ssh://git@github.com/mapbox/node-sqlite3.git#593c9d498be2510d286349134537e3bf89401c4a",
+ "integrity": "sha512-RPVUQfADvyk8Ahx8RQWmdf5trtV4GCB8lgeZqSlNNd2YQB92YTMeQlamqycYhgtwLZZa3iYQPwXC9C0X5YnNLw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "BSD-3-Clause",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "@mapbox/node-pre-gyp": "^1.0.0",
+ "node-addon-api": "^3.0.0"
+ },
+ "optionalDependencies": {
+ "node-gyp": "7.x"
+ },
+ "peerDependencies": {
+ "node-gyp": "7.x"
+ },
+ "peerDependenciesMeta": {
+ "node-gyp": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/sqlstring": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
- "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A="
+ "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "sshpk": {
+ "node_modules/sshpk": {
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
"integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
- "requires": {
+ "dependencies": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
"bcrypt-pbkdf": "^1.0.0",
@@ -9011,104 +20233,195 @@
"jsbn": "~0.1.0",
"safer-buffer": "^2.0.2",
"tweetnacl": "~0.14.0"
+ },
+ "bin": {
+ "sshpk-conv": "bin/sshpk-conv",
+ "sshpk-sign": "bin/sshpk-sign",
+ "sshpk-verify": "bin/sshpk-verify"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "ssri": {
+ "node_modules/ssri": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
"integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
"optional": true,
- "requires": {
+ "dependencies": {
"minipass": "^3.1.1"
+ },
+ "engines": {
+ "node": ">= 8"
}
},
- "statuses": {
+ "node_modules/statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "stoppable": {
+ "node_modules/stoppable": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz",
- "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw=="
+ "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==",
+ "engines": {
+ "node": ">=4",
+ "npm": ">=6"
+ }
},
- "string-width": {
+ "node_modules/streamroller": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz",
+ "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==",
+ "dependencies": {
+ "date-format": "^4.0.14",
+ "debug": "^4.3.4",
+ "fs-extra": "^8.1.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/streamroller/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/streamroller/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/string_decoder/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "optional": true,
- "requires": {
+ "devOptional": true,
+ "dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
},
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "optional": true
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "optional": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
+ "engines": {
+ "node": ">=8"
}
},
- "string.prototype.trimend": {
+ "node_modules/string.prototype.trimend": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
"integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "string.prototype.trimstart": {
+ "node_modules/string.prototype.trimstart": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
"integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
- },
- "stringify-entities": {
+ "node_modules/stringify-entities": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.2.tgz",
"integrity": "sha512-MTxTVcEkorNtBbNpoFJPEh0kKdM6+QbMjLbaxmvaPMmayOXdr/AIVIIJX7FReUVweRBFJfZepK4A4AKgwuFpMQ==",
- "requires": {
+ "dependencies": {
"character-entities-html4": "^2.0.0",
"character-entities-legacy": "^3.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "devOptional": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "strip-bom": {
+ "node_modules/strip-bom": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
"integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
},
- "strip-json-comments": {
+ "node_modules/strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "superagent": {
+ "node_modules/superagent": {
"version": "8.0.9",
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz",
"integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==",
- "requires": {
+ "dependencies": {
"component-emitter": "^1.3.0",
"cookiejar": "^2.1.4",
"debug": "^4.3.4",
@@ -9120,121 +20433,256 @@
"qs": "^6.11.0",
"semver": "^7.3.8"
},
+ "engines": {
+ "node": ">=6.4.0 <13 || >=14"
+ }
+ },
+ "node_modules/superagent/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "dezalgo": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
- "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==",
- "requires": {
- "asap": "^2.0.0",
- "wrappy": "1"
- }
- },
- "formidable": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz",
- "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==",
- "requires": {
- "dezalgo": "^1.0.4",
- "hexoid": "^1.0.0",
- "once": "^1.4.0",
- "qs": "^6.11.0"
- }
- },
- "mime": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
- "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg=="
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "qs": {
- "version": "6.11.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
- "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
- "requires": {
- "side-channel": "^1.0.4"
- }
- },
- "semver": {
- "version": "7.5.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz",
- "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==",
- "requires": {
- "lru-cache": "^6.0.0"
- }
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "supertest": {
+ "node_modules/superagent/node_modules/dezalgo": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
+ "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==",
+ "dependencies": {
+ "asap": "^2.0.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/superagent/node_modules/formidable": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz",
+ "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==",
+ "dependencies": {
+ "dezalgo": "^1.0.4",
+ "hexoid": "^1.0.0",
+ "once": "^1.4.0",
+ "qs": "^6.11.0"
+ },
+ "funding": {
+ "url": "https://ko-fi.com/tunnckoCore/commissions"
+ }
+ },
+ "node_modules/superagent/node_modules/mime": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
+ "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/superagent/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/superagent/node_modules/qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/superagent/node_modules/semver": {
+ "version": "7.5.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz",
+ "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/supertest": {
"version": "6.3.3",
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz",
"integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==",
"dev": true,
- "requires": {
+ "dependencies": {
"methods": "^1.1.2",
"superagent": "^8.0.5"
+ },
+ "engines": {
+ "node": ">=6.4.0"
}
},
- "supports-color": {
+ "node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "requires": {
+ "dependencies": {
"has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "supports-preserve-symlinks-flag": {
+ "node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "swagger-schema-official": {
+ "node_modules/swagger-schema-official": {
"version": "2.0.0-bab6bed",
"resolved": "https://registry.npmjs.org/swagger-schema-official/-/swagger-schema-official-2.0.0-bab6bed.tgz",
"integrity": "sha1-cAcEaNbSl3ylI3suUZyn0Gouo/0=",
"dev": true
},
- "symbol-tree": {
+ "node_modules/symbol-tree": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
},
- "tar": {
+ "node_modules/tar": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
"integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
"optional": true,
- "requires": {
+ "dependencies": {
"chownr": "^2.0.0",
"fs-minipass": "^2.0.0",
"minipass": "^3.0.0",
"minizlib": "^2.1.1",
"mkdirp": "^1.0.3",
"yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/tar-fs": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
+ "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "chownr": "^1.1.1",
+ "mkdirp-classic": "^0.5.2",
+ "pump": "^3.0.0",
+ "tar-stream": "^2.1.4"
+ }
+ },
+ "node_modules/tar-fs/node_modules/chownr": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
+ "node_modules/tar-stream": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
+ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "bl": "^4.0.3",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "tarn": {
+ "node_modules/tar-stream/node_modules/bl": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
+ "node_modules/tar-stream/node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/tar-stream/node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
+ "node_modules/tarn": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz",
- "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ=="
+ "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==",
+ "engines": {
+ "node": ">=8.0.0"
+ }
},
- "tedious": {
+ "node_modules/tedious": {
"version": "14.5.0",
"resolved": "https://registry.npmjs.org/tedious/-/tedious-14.5.0.tgz",
"integrity": "sha512-Mr/ku6J0yku9MvWKO7e//awwI52122jS5AYRz/VOI2jZZawv84iHPKF/FnHBoIEKlRjzahrtevfpNktw/eBAEw==",
- "requires": {
+ "dependencies": {
"@azure/identity": "^2.0.1",
"@azure/keyvault-keys": "^4.3.0",
"@js-joda/core": "^4.0.0",
@@ -9248,251 +20696,343 @@
"punycode": "^2.1.0",
"sprintf-js": "^1.1.2"
},
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/tedious/node_modules/bl": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-5.0.0.tgz",
+ "integrity": "sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==",
"dependencies": {
- "bl": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-5.0.0.tgz",
- "integrity": "sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==",
- "requires": {
- "buffer": "^6.0.3",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
- "iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- }
+ "buffer": "^6.0.3",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
+ "node_modules/tedious/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "terser": {
+ "node_modules/tedious/node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/terser": {
"version": "5.16.5",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.16.5.tgz",
"integrity": "sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==",
- "requires": {
+ "dependencies": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map-support": "~0.5.20"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "text-table": {
+ "node_modules/text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
"dev": true
},
- "threads": {
+ "node_modules/threads": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/threads/-/threads-1.7.0.tgz",
"integrity": "sha512-Mx5NBSHX3sQYR6iI9VYbgHKBLisyB+xROCBGjjWm1O9wb9vfLxdaGtmT/KCjUqMsSNW6nERzCW3T6H43LqjDZQ==",
- "requires": {
+ "dependencies": {
"callsites": "^3.1.0",
"debug": "^4.2.0",
"is-observable": "^2.1.0",
- "observable-fns": "^0.6.1",
- "tiny-worker": ">= 2"
+ "observable-fns": "^0.6.1"
},
+ "funding": {
+ "url": "https://github.com/andywer/threads.js?sponsor=1"
+ },
+ "optionalDependencies": {
+ "tiny-worker": ">= 2"
+ }
+ },
+ "node_modules/threads/node_modules/debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
"dependencies": {
- "debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "tiny-worker": {
+ "node_modules/threads/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/tiny-worker": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/tiny-worker/-/tiny-worker-2.3.0.tgz",
"integrity": "sha512-pJ70wq5EAqTAEl9IkGzA+fN0836rycEuz2Cn6yeZ6FRzlVS5IDOkFHpIoEsksPRQV34GDqXm65+OlnZqUSyK2g==",
- "optional": true,
- "requires": {
+ "devOptional": true,
+ "dependencies": {
"esm": "^3.2.25"
}
},
- "tinycon": {
+ "node_modules/tinycon": {
"version": "0.6.8",
"resolved": "https://registry.npmjs.org/tinycon/-/tinycon-0.6.8.tgz",
"integrity": "sha1-59oiPj7gy/nbeWP6M1aZuyF3enM="
},
- "tmp": {
+ "node_modules/tmp": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
"integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"rimraf": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8.17.0"
}
},
- "to-array": {
+ "node_modules/to-array": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
"integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
},
- "to-regex-range": {
+ "node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.6"
}
},
- "tough-cookie": {
+ "node_modules/touch": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
+ "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
+ "dev": true,
+ "dependencies": {
+ "nopt": "~1.0.10"
+ },
+ "bin": {
+ "nodetouch": "bin/nodetouch.js"
+ }
+ },
+ "node_modules/touch/node_modules/nopt": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
+ "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==",
+ "dev": true,
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/tough-cookie": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
"integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
- "requires": {
+ "dependencies": {
"psl": "^1.1.33",
"punycode": "^2.1.1",
"universalify": "^0.1.2"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "tr46": {
+ "node_modules/tr46": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
"integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
- "requires": {
+ "dependencies": {
"punycode": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/tree-kill": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+ "dev": true,
+ "bin": {
+ "tree-kill": "cli.js"
}
},
- "trough": {
+ "node_modules/trough": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz",
- "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w=="
+ "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
},
- "tsconfig-paths": {
+ "node_modules/tsconfig-paths": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
"integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"@types/json5": "^0.0.29",
"json5": "^1.0.1",
"minimist": "^1.2.6",
"strip-bom": "^3.0.0"
}
},
- "tslib": {
+ "node_modules/tslib": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
"integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
},
- "tsutils": {
+ "node_modules/tsutils": {
"version": "3.21.0",
"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
"integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
"dev": true,
- "requires": {
+ "dependencies": {
"tslib": "^1.8.1"
},
- "dependencies": {
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true
- }
+ "engines": {
+ "node": ">= 6"
+ },
+ "peerDependencies": {
+ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
}
},
- "tunnel": {
+ "node_modules/tsutils/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "node_modules/tunnel": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
- "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
+ "engines": {
+ "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
+ }
},
- "tunnel-agent": {
+ "node_modules/tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "requires": {
+ "dependencies": {
"safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
}
},
- "tweetnacl": {
+ "node_modules/tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
},
- "type-check": {
+ "node_modules/type-check": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
"integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "requires": {
+ "dependencies": {
"prelude-ls": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "type-detect": {
+ "node_modules/type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
},
- "type-fest": {
+ "node_modules/type-fest": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "type-is": {
+ "node_modules/type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "requires": {
+ "dependencies": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
}
},
- "typescript": {
+ "node_modules/typescript": {
"version": "4.9.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
"integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
- "dev": true
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=4.2.0"
+ }
},
- "ueberdb2": {
+ "node_modules/ueberdb2": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/ueberdb2/-/ueberdb2-4.0.1.tgz",
"integrity": "sha512-wo377quP2M/g3j7LoTMMVVX7ED3gj1sk8bkFR1plNEh/TLEgumdjfJl5KmpkXfIj2j6VYmQY4yEhwszpyRRRFg==",
- "requires": {
+ "dependencies": {
"async": "^3.2.3",
"cassandra-driver": "^4.6.3",
"dirty": "^1.1.3",
@@ -9504,196 +21044,203 @@
"pg": "^8.7.3",
"redis": "^4.1.0",
"rethinkdb": "^2.4.2",
- "simple-git": "^3.7.1",
+ "simple-git": "^3.7.1"
+ },
+ "engines": {
+ "node": ">=14.15.0"
+ },
+ "optionalDependencies": {
"sqlite3": "^5.0.6"
+ }
+ },
+ "node_modules/ueberdb2/node_modules/are-we-there-yet": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz",
+ "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==",
+ "optional": true,
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^3.6.0"
},
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/ueberdb2/node_modules/axios": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz",
+ "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==",
"dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "optional": true
- },
- "are-we-there-yet": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz",
- "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==",
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^3.6.0"
- }
- },
- "axios": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz",
- "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==",
- "requires": {
- "follow-redirects": "^1.15.0",
- "form-data": "^4.0.0",
- "proxy-from-env": "^1.1.0"
- }
- },
- "gauge": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
- "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
- "optional": true,
- "requires": {
- "aproba": "^1.0.3 || ^2.0.0",
- "color-support": "^1.1.3",
- "console-control-strings": "^1.1.0",
- "has-unicode": "^2.0.1",
- "signal-exit": "^3.0.7",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "wide-align": "^1.1.5"
- }
- },
- "nano": {
- "version": "10.1.2",
- "resolved": "https://registry.npmjs.org/nano/-/nano-10.1.2.tgz",
- "integrity": "sha512-P3zSoD/sxAgDs/IE9eqpeAXqTdQ/gA9e9dnzaltr4A3WUo/n+eh66T873L+md5v8lXOutX/7dvcHFOO22f5hDw==",
- "requires": {
- "axios": "^1.2.2",
- "node-abort-controller": "^3.0.1",
- "qs": "^6.11.0"
- }
- },
- "node-addon-api": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
- "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==",
- "optional": true
- },
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/ueberdb2/node_modules/gauge": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
+ "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
+ "optional": true,
+ "dependencies": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.3",
+ "console-control-strings": "^1.1.0",
+ "has-unicode": "^2.0.1",
+ "signal-exit": "^3.0.7",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.5"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/ueberdb2/node_modules/nano": {
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/nano/-/nano-10.1.2.tgz",
+ "integrity": "sha512-P3zSoD/sxAgDs/IE9eqpeAXqTdQ/gA9e9dnzaltr4A3WUo/n+eh66T873L+md5v8lXOutX/7dvcHFOO22f5hDw==",
+ "dependencies": {
+ "axios": "^1.2.2",
+ "node-abort-controller": "^3.0.1",
+ "qs": "^6.11.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/ueberdb2/node_modules/node-addon-api": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
+ "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==",
+ "optional": true
+ },
+ "node_modules/ueberdb2/node_modules/node-gyp": {
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz",
+ "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==",
+ "optional": true,
+ "dependencies": {
+ "env-paths": "^2.2.0",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.6",
+ "make-fetch-happen": "^9.1.0",
+ "nopt": "^5.0.0",
+ "npmlog": "^6.0.0",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.5",
+ "tar": "^6.1.2",
+ "which": "^2.0.2"
+ },
+ "bin": {
+ "node-gyp": "bin/node-gyp.js"
+ },
+ "engines": {
+ "node": ">= 10.12.0"
+ }
+ },
+ "node_modules/ueberdb2/node_modules/npmlog": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
+ "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
+ "optional": true,
+ "dependencies": {
+ "are-we-there-yet": "^3.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^4.0.3",
+ "set-blocking": "^2.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/ueberdb2/node_modules/redis": {
+ "version": "4.6.7",
+ "resolved": "https://registry.npmjs.org/redis/-/redis-4.6.7.tgz",
+ "integrity": "sha512-KrkuNJNpCwRm5vFJh0tteMxW8SaUzkm5fBH7eL5hd/D0fAkzvapxbfGPP/r+4JAXdQuX7nebsBkBqA2RHB7Usw==",
+ "dependencies": {
+ "@redis/bloom": "1.2.0",
+ "@redis/client": "1.5.8",
+ "@redis/graph": "1.1.0",
+ "@redis/json": "1.0.4",
+ "@redis/search": "1.1.3",
+ "@redis/time-series": "1.0.4"
+ }
+ },
+ "node_modules/ueberdb2/node_modules/sqlite3": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz",
+ "integrity": "sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==",
+ "hasInstallScript": true,
+ "optional": true,
+ "dependencies": {
+ "@mapbox/node-pre-gyp": "^1.0.0",
+ "node-addon-api": "^4.2.0",
+ "tar": "^6.1.11"
+ },
+ "optionalDependencies": {
+ "node-gyp": "8.x"
+ },
+ "peerDependencies": {
+ "node-gyp": "8.x"
+ },
+ "peerDependenciesMeta": {
"node-gyp": {
- "version": "8.4.1",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz",
- "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==",
- "optional": true,
- "requires": {
- "env-paths": "^2.2.0",
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.6",
- "make-fetch-happen": "^9.1.0",
- "nopt": "^5.0.0",
- "npmlog": "^6.0.0",
- "rimraf": "^3.0.2",
- "semver": "^7.3.5",
- "tar": "^6.1.2",
- "which": "^2.0.2"
- }
- },
- "npmlog": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
- "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
- "optional": true,
- "requires": {
- "are-we-there-yet": "^3.0.0",
- "console-control-strings": "^1.1.0",
- "gauge": "^4.0.3",
- "set-blocking": "^2.0.0"
- }
- },
- "readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "optional": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "redis": {
- "version": "4.6.7",
- "resolved": "https://registry.npmjs.org/redis/-/redis-4.6.7.tgz",
- "integrity": "sha512-KrkuNJNpCwRm5vFJh0tteMxW8SaUzkm5fBH7eL5hd/D0fAkzvapxbfGPP/r+4JAXdQuX7nebsBkBqA2RHB7Usw==",
- "requires": {
- "@redis/bloom": "1.2.0",
- "@redis/client": "1.5.8",
- "@redis/graph": "1.1.0",
- "@redis/json": "1.0.4",
- "@redis/search": "1.1.3",
- "@redis/time-series": "1.0.4"
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"optional": true
- },
- "sqlite3": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz",
- "integrity": "sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==",
- "optional": true,
- "requires": {
- "@mapbox/node-pre-gyp": "^1.0.0",
- "node-addon-api": "^4.2.0",
- "node-gyp": "8.x",
- "tar": "^6.1.11"
- }
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "optional": true,
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "optional": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
}
}
},
- "uid-safe": {
+ "node_modules/uid-safe": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
"integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
- "requires": {
+ "dependencies": {
"random-bytes": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
}
},
- "unbox-primitive": {
+ "node_modules/unbox-primitive": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
"integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"has-bigints": "^1.0.2",
"has-symbols": "^1.0.3",
"which-boxed-primitive": "^1.0.2"
},
- "dependencies": {
- "has-symbols": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
- }
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/unbox-primitive/node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "underscore": {
+ "node_modules/undefsafe": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
+ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
+ "dev": true
+ },
+ "node_modules/underscore": {
"version": "1.13.3",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.3.tgz",
"integrity": "sha512-QvjkYpiD+dJJraRA8+dGAU4i7aBbb2s0S3jA45TFOvg2VgqvdCDd/3N6CqA8gluk1W91GLoXg5enMUx560QzuA=="
},
- "unified": {
+ "node_modules/unified": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/unified/-/unified-10.1.1.tgz",
"integrity": "sha512-v4ky1+6BN9X3pQrOdkFIPWAaeDsHPE1svRDxq7YpTc2plkIqFMwukfqM+l0ewpP9EfwARlt9pPFAeWYhHm8X9w==",
- "requires": {
+ "dependencies": {
"@types/unist": "^2.0.0",
"bail": "^2.0.0",
"extend": "^3.0.0",
@@ -9701,358 +21248,494 @@
"is-plain-obj": "^4.0.0",
"trough": "^2.0.0",
"vfile": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "unique-filename": {
+ "node_modules/unique-filename": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
"integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
"optional": true,
- "requires": {
+ "dependencies": {
"unique-slug": "^2.0.0"
}
},
- "unique-slug": {
+ "node_modules/unique-slug": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
"integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
"optional": true,
- "requires": {
+ "dependencies": {
"imurmurhash": "^0.1.4"
}
},
- "unist-util-is": {
+ "node_modules/unist-util-is": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz",
- "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ=="
+ "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
},
- "unist-util-stringify-position": {
+ "node_modules/unist-util-stringify-position": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz",
"integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==",
- "requires": {
+ "dependencies": {
"@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "universalify": {
+ "node_modules/universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "engines": {
+ "node": ">= 4.0.0"
+ }
},
- "unorm": {
+ "node_modules/unorm": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz",
- "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA=="
+ "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
},
- "unpipe": {
+ "node_modules/unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "uri-js": {
+ "node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "requires": {
+ "dependencies": {
"punycode": "^2.1.0"
}
},
- "util-deprecate": {
+ "node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
- "utils-merge": {
+ "node_modules/utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
},
- "uuid": {
+ "node_modules/uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "bin": {
+ "uuid": "bin/uuid"
+ }
},
- "v8-compile-cache": {
+ "node_modules/v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
"integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
"dev": true
},
- "vary": {
+ "node_modules/vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "verror": {
+ "node_modules/verror": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "requires": {
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "dependencies": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "^1.2.0"
- },
- "dependencies": {
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- }
}
},
- "vfile": {
+ "node_modules/verror/node_modules/core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "node_modules/vfile": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.0.tgz",
"integrity": "sha512-Tj44nY/48OQvarrE4FAjUfrv7GZOYzPbl5OD65HxVKwLJKMPU7zmfV8cCgCnzKWnSfYG2f3pxu+ALqs7j22xQQ==",
- "requires": {
+ "dependencies": {
"@types/unist": "^2.0.0",
"is-buffer": "^2.0.0",
"unist-util-stringify-position": "^3.0.0",
"vfile-message": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "vfile-location": {
+ "node_modules/vfile-location": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz",
"integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==",
- "requires": {
+ "dependencies": {
"@types/unist": "^2.0.0",
"vfile": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "vfile-message": {
+ "node_modules/vfile-message": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.0.tgz",
"integrity": "sha512-4QJbBk+DkPEhBXq3f260xSaWtjE4gPKOfulzfMFF8ZNwaPZieWsg3iVlcmF04+eebzpcpeXOOFMfrYzJHVYg+g==",
- "requires": {
+ "dependencies": {
"@types/unist": "^2.0.0",
"unist-util-stringify-position": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "w3c-hr-time": {
+ "node_modules/w3c-hr-time": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
"integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "requires": {
+ "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.",
+ "dependencies": {
"browser-process-hrtime": "^1.0.0"
}
},
- "w3c-xmlserializer": {
+ "node_modules/w3c-xmlserializer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
"integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
- "requires": {
+ "dependencies": {
"xml-name-validator": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
}
},
- "web-namespaces": {
+ "node_modules/web-namespaces": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
- "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="
+ "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
},
- "webidl-conversions": {
+ "node_modules/webidl-conversions": {
"version": "7.0.0",
"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==",
+ "engines": {
+ "node": ">=12"
+ }
},
- "whatwg-encoding": {
+ "node_modules/whatwg-encoding": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
"integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
- "requires": {
+ "dependencies": {
"iconv-lite": "0.6.3"
},
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/whatwg-encoding/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"dependencies": {
- "iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- }
- }
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "whatwg-mimetype": {
+ "node_modules/whatwg-mimetype": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz",
- "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q=="
+ "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==",
+ "engines": {
+ "node": ">=12"
+ }
},
- "whatwg-url": {
+ "node_modules/whatwg-url": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
"integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==",
- "requires": {
+ "dependencies": {
"tr46": "^3.0.0",
"webidl-conversions": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
}
},
- "which": {
+ "node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "requires": {
+ "dependencies": {
"isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
}
},
- "which-boxed-primitive": {
+ "node_modules/which-boxed-primitive": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
"integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
- "requires": {
+ "dependencies": {
"is-bigint": "^1.0.1",
"is-boolean-object": "^1.1.0",
"is-number-object": "^1.0.4",
"is-string": "^1.0.5",
"is-symbol": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "wide-align": {
+ "node_modules/wide-align": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
"integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
"optional": true,
- "requires": {
+ "dependencies": {
"string-width": "^1.0.2 || 2 || 3 || 4"
}
},
- "word-wrap": {
+ "node_modules/word-wrap": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "workerpool": {
+ "node_modules/workerpool": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz",
"integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==",
"dev": true
},
- "wrap-ansi": {
+ "node_modules/wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
- "requires": {
+ "dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
"dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "wrappy": {
+ "node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
- "ws": {
+ "node_modules/ws": {
"version": "8.5.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
- "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg=="
+ "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": "^5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
},
- "wtfnode": {
+ "node_modules/wtfnode": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/wtfnode/-/wtfnode-0.9.1.tgz",
- "integrity": "sha512-Ip6C2KeQPl/F3aP1EfOnPoQk14Udd9lffpoqWDNH3Xt78svxPbv53ngtmtfI0q2Te3oTq79XKTnRNXVIn/GsPA=="
+ "integrity": "sha512-Ip6C2KeQPl/F3aP1EfOnPoQk14Udd9lffpoqWDNH3Xt78svxPbv53ngtmtfI0q2Te3oTq79XKTnRNXVIn/GsPA==",
+ "bin": {
+ "wtfnode": "proxy.js"
+ }
},
- "xml-name-validator": {
+ "node_modules/xml-name-validator": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
- "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw=="
+ "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/xml2js": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
+ "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
+ "dependencies": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~11.0.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
},
- "xmlbuilder": {
+ "node_modules/xmlbuilder": {
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
- "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
+ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
+ "engines": {
+ "node": ">=4.0"
+ }
},
- "xmlchars": {
+ "node_modules/xmlchars": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
},
- "xmlhttprequest-ssl": {
+ "node_modules/xmlhttprequest-ssl": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz",
- "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q=="
+ "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/xpath.js": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/xpath.js/-/xpath.js-1.1.0.tgz",
+ "integrity": "sha512-jg+qkfS4K8E7965sqaUl8mRngXiKb3WZGfONgE18pr03FUQiuSV6G+Ej4tS55B+rIQSFEIw3phdVAQ4pPqNWfQ==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
},
- "xtend": {
+ "node_modules/xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "engines": {
+ "node": ">=0.4"
+ }
},
- "y18n": {
+ "node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
},
- "yallist": {
+ "node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
- "yargs": {
+ "node_modules/yargs": {
"version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"dev": true,
- "requires": {
+ "dependencies": {
"cliui": "^7.0.2",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
@@ -10061,77 +21744,82 @@
"y18n": "^5.0.5",
"yargs-parser": "^20.2.2"
},
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
+ "engines": {
+ "node": ">=10"
}
},
- "yargs-parser": {
+ "node_modules/yargs-parser": {
"version": "20.2.4",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
"integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
},
- "yargs-unparser": {
+ "node_modules/yargs-unparser": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
"integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
"dev": true,
- "requires": {
+ "dependencies": {
"camelcase": "^6.0.0",
"decamelize": "^4.0.0",
"flat": "^5.0.2",
"is-plain-obj": "^2.1.0"
},
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs-unparser/node_modules/is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
"dependencies": {
- "is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true
- }
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "yeast": {
+ "node_modules/yeast": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
"integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
},
- "yocto-queue": {
+ "node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
}
}
}
diff --git a/src/package.json b/src/package.json
index ca9ef5a8a4e..b1062eb7b73 100644
--- a/src/package.json
+++ b/src/package.json
@@ -49,7 +49,7 @@
"jsonminify": "0.4.2",
"languages4translatewiki": "0.1.3",
"lodash.clonedeep": "4.5.0",
- "log4js": "0.6.38",
+ "log4js": "^6.9.1",
"measured-core": "^2.0.0",
"mime-types": "^2.1.35",
"npm": "^6.14.15",
@@ -90,7 +90,11 @@
"sinon": "^13.0.2",
"split-grid": "^1.0.11",
"supertest": "^6.3.3",
- "typescript": "^4.9.5"
+ "typescript": "^4.9.5",
+ "@types/node": "^20.3.1",
+ "@types/express": "4.17.17",
+ "concurrently": "^8.2.0",
+ "nodemon": "^2.0.22"
},
"engines": {
"node": ">=14.15.0",
@@ -103,8 +107,10 @@
"scripts": {
"lint": "eslint .",
"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",
+ "dev": "concurrently \"npx tsc --watch\" \"nodemon -q dist/server.js\""
},
"version": "1.9.0",
- "license": "Apache-2.0"
+ "license": "Apache-2.0",
+ "type": "module"
}
diff --git a/src/static/js/AttributePool.js b/src/static/js/AttributePool.ts
similarity index 98%
rename from src/static/js/AttributePool.js
rename to src/static/js/AttributePool.ts
index ccdd2eb35ca..3f7691db345 100644
--- a/src/static/js/AttributePool.js
+++ b/src/static/js/AttributePool.ts
@@ -54,7 +54,10 @@
* There is one attribute pool per pad, and it includes every current and historical attribute used
* in the pad.
*/
-class AttributePool {
+export class AttributePool {
+ numToAttrib: {};
+ private attribToNum: {};
+ private nextNum: number;
constructor() {
/**
* Maps an attribute identifier to the attribute's `[key, value]` string pair.
diff --git a/src/tsconfig.json b/src/tsconfig.json
new file mode 100644
index 00000000000..d58a717dccd
--- /dev/null
+++ b/src/tsconfig.json
@@ -0,0 +1,11 @@
+{
+ "compilerOptions": {
+ "module": "commonjs",
+ "esModuleInterop": true,
+ "target": "es6",
+ "moduleResolution": "node",
+ "sourceMap": true,
+ "outDir": "dist"
+ },
+ "lib": ["es2015"]
+}
From 3c2129b1ccd14817f28b39b2d5c30a1297aa66b2 Mon Sep 17 00:00:00 2001
From: SamTV12345 <40429738+samtv12345@users.noreply.github.com>
Date: Fri, 23 Jun 2023 18:57:36 +0200
Subject: [PATCH 02/11] Rewrote server in typescript.
---
src/.gitignore | 3 +-
src/node/db/API.ts | 16 +-
src/node/db/AuthorManager.ts | 4 +-
src/node/db/GroupManager.ts | 2 +-
src/node/db/Pad.ts | 55 ++++---
src/node/db/PadManager.ts | 2 +-
src/node/db/ReadOnlyManager.ts | 2 +-
src/node/db/SecurityManager.ts | 4 +-
src/node/handler/APIHandler.ts | 6 +-
src/node/handler/ImportHandler.ts | 8 +-
src/node/handler/PadMessageHandler.ts | 18 +--
src/node/handler/SocketIORouter.ts | 8 +-
src/node/hooks/{express.js => express.ts} | 142 +++++++++++-------
src/node/hooks/express/importexport.ts | 4 +-
.../{padurlsanitize.js => padurlsanitize.ts} | 6 +-
.../express/{socketio.js => socketio.ts} | 30 ++--
.../{specialpages.js => specialpages.ts} | 42 +++---
.../hooks/express/{static.js => static.ts} | 12 +-
src/node/hooks/express/{tests.js => tests.ts} | 22 +--
.../express/{webaccess.js => webaccess.ts} | 60 ++++----
src/node/hooks/{i18n.js => i18n.ts} | 36 ++---
src/node/models/CMDOptions.ts | 11 ++
src/node/models/LogLevel.ts | 1 +
src/node/models/PadDiffModel.ts | 3 +
src/node/models/Presession.ts | 5 +
src/node/models/SessionSocketModel.ts | 2 +
src/node/models/UserIndexedModel.ts | 5 +
src/node/server.ts | 2 +
src/node/utils/{Abiword.js => Abiword.ts} | 25 +--
.../{AbsolutePaths.js => AbsolutePaths.ts} | 15 +-
src/node/utils/{Cli.js => Cli.ts} | 3 +-
.../{ExportEtherpad.js => ExportEtherpad.ts} | 19 ++-
.../{ExportHelper.js => ExportHelper.ts} | 19 ++-
.../utils/{ExportHtml.js => ExportHtml.ts} | 36 ++---
src/node/utils/{ExportTxt.js => ExportTxt.ts} | 7 +-
.../{ImportEtherpad.js => ImportEtherpad.ts} | 26 ++--
.../utils/{ImportHtml.js => ImportHtml.ts} | 12 +-
.../utils/{LibreOffice.js => LibreOffice.ts} | 23 +--
src/node/utils/{Minify.js => Minify.ts} | 43 +++---
.../{MinifyWorker.js => MinifyWorker.ts} | 13 +-
src/node/utils/Settings.ts | 121 ++++++++-------
src/node/utils/{Stream.js => Stream.ts} | 6 +-
src/node/utils/{TidyHtml.js => TidyHtml.ts} | 11 +-
...ng_middleware.js => caching_middleware.ts} | 42 ++++--
.../utils/{customError.js => customError.ts} | 6 +-
src/node/utils/{padDiff.js => padDiff.ts} | 31 ++--
.../utils/{path_exists.js => path_exists.ts} | 8 +-
src/node/utils/{promises.js => promises.ts} | 10 +-
.../{randomstring.js => randomstring.ts} | 0
src/node/utils/{run_cmd.js => run_cmd.ts} | 53 ++++---
...anitizePathname.js => sanitizePathname.ts} | 6 +-
src/node/utils/{toolbar.js => toolbar.ts} | 6 +-
src/package-lock.json | 23 +++
src/package.json | 12 +-
.../js/{ace2_common.js => ace2_common.ts} | 19 +--
src/static/js/{pad_utils.js => pad_utils.ts} | 50 +++---
src/tsconfig.json | 2 +
57 files changed, 668 insertions(+), 490 deletions(-)
rename src/node/hooks/{express.js => express.ts} (71%)
rename src/node/hooks/express/{padurlsanitize.js => padurlsanitize.ts} (83%)
rename src/node/hooks/express/{socketio.js => socketio.ts} (88%)
rename src/node/hooks/express/{specialpages.js => specialpages.ts} (63%)
rename src/node/hooks/express/{static.js => static.ts} (86%)
rename src/node/hooks/express/{tests.js => tests.ts} (81%)
rename src/node/hooks/express/{webaccess.js => webaccess.ts} (85%)
rename src/node/hooks/{i18n.js => i18n.ts} (79%)
create mode 100644 src/node/models/CMDOptions.ts
create mode 100644 src/node/models/LogLevel.ts
create mode 100644 src/node/models/PadDiffModel.ts
create mode 100644 src/node/models/Presession.ts
create mode 100644 src/node/models/UserIndexedModel.ts
rename src/node/utils/{Abiword.js => Abiword.ts} (80%)
rename src/node/utils/{AbsolutePaths.js => AbsolutePaths.ts} (94%)
rename src/node/utils/{Cli.js => Cli.ts} (96%)
rename src/node/utils/{ExportEtherpad.js => ExportEtherpad.ts} (84%)
rename src/node/utils/{ExportHelper.js => ExportHelper.ts} (85%)
rename src/node/utils/{ExportHtml.js => ExportHtml.ts} (95%)
rename src/node/utils/{ExportTxt.js => ExportTxt.ts} (97%)
rename src/node/utils/{ImportEtherpad.js => ImportEtherpad.ts} (86%)
rename src/node/utils/{ImportHtml.js => ImportHtml.ts} (92%)
rename src/node/utils/{LibreOffice.js => LibreOffice.ts} (91%)
rename src/node/utils/{Minify.js => Minify.ts} (91%)
rename src/node/utils/{MinifyWorker.js => MinifyWorker.ts} (80%)
rename src/node/utils/{Stream.js => Stream.ts} (98%)
rename src/node/utils/{TidyHtml.js => TidyHtml.ts} (83%)
rename src/node/utils/{caching_middleware.js => caching_middleware.ts} (90%)
rename src/node/utils/{customError.js => customError.ts} (87%)
rename src/node/utils/{padDiff.js => padDiff.ts} (94%)
rename src/node/utils/{path_exists.js => path_exists.ts} (71%)
rename src/node/utils/{promises.js => promises.ts} (93%)
rename src/node/utils/{randomstring.js => randomstring.ts} (100%)
rename src/node/utils/{run_cmd.js => run_cmd.ts} (81%)
rename src/node/utils/{sanitizePathname.js => sanitizePathname.ts} (94%)
rename src/node/utils/{toolbar.js => toolbar.ts} (98%)
rename src/static/js/{ace2_common.js => ace2_common.ts} (78%)
rename src/static/js/{pad_utils.js => pad_utils.ts} (92%)
diff --git a/src/.gitignore b/src/.gitignore
index 1521c8b7652..81cd8b481cc 100644
--- a/src/.gitignore
+++ b/src/.gitignore
@@ -1 +1,2 @@
-dist
+dist/
+node_modules
diff --git a/src/node/db/API.ts b/src/node/db/API.ts
index 99b19498fb6..d434eb556f7 100644
--- a/src/node/db/API.ts
+++ b/src/node/db/API.ts
@@ -21,7 +21,7 @@
import Changeset from '../../static/js/Changeset';
import ChatMessage from '../../static/js/ChatMessage';
-import CustomError from '../utils/customError';
+import {CustomError} from '../utils/customError';
import {doesPadExist, getPad, isValidPadId, listAllPads} from './PadManager';
import {
handleCustomMessage,
@@ -40,11 +40,11 @@ import {
} from './GroupManager';
import {createAuthor, createAuthorIfNotExistsFor, getAuthorName, listPadsOfAuthor} from './AuthorManager';
import {} from './SessionManager';
-import exportHtml from '../utils/ExportHtml';
-import exportTxt from '../utils/ExportTxt';
-import importHtml from '../utils/ImportHtml';
+import {getTXTFromAtext} from '../utils/ExportTxt';
+import {setPadHTML} from '../utils/ImportHtml';
const cleanText = require('./Pad').cleanText;
-import PadDiff from '../utils/padDiff';
+import {PadDiff} from '../utils/padDiff';
+import {getPadHTMLDocument} from "../utils/ExportHtml";
/* ********************
* GROUP FUNCTIONS ****
@@ -192,7 +192,7 @@ export const getText = async (padID, rev) => {
}
// the client wants the latest text, lets return it to him
- const text = exportTxt.getTXTFromAtext(pad, pad.atext);
+ const text = getTXTFromAtext(pad, pad.atext);
return {text};
};
@@ -263,7 +263,7 @@ export const getHTML = async (padID, rev) => {
}
// get the html of this revision
- let html = await exportHtml.getPadHTML(pad, rev);
+ let html = await getPadHTMLDocument(pad, rev);
// wrap the HTML
html = `${html}`;
@@ -289,7 +289,7 @@ export const setHTML = async (padID, html, authorId = '') => {
// add a new changeset with the new html to the pad
try {
- await importHtml.setPadHTML(pad, cleanText(html), authorId);
+ await setPadHTML(pad, cleanText(html), authorId);
} catch (e) {
throw new CustomError('HTML is malformed', 'apierror');
}
diff --git a/src/node/db/AuthorManager.ts b/src/node/db/AuthorManager.ts
index fd825bba6d3..a3f5db0dc55 100644
--- a/src/node/db/AuthorManager.ts
+++ b/src/node/db/AuthorManager.ts
@@ -20,7 +20,7 @@
*/
import {db} from './DB';
-import CustomError from '../utils/customError';
+import {CustomError} from '../utils/customError';
import hooks from '../../static/js/pluginfw/hooks.js';
const {randomString, padutils: {warnDeprecated}} = require('../../static/js/pad_utils');
@@ -283,7 +283,7 @@ export const addPad = async (authorID: string, padID: string) => {
* @param {String} authorID The id of the author
* @param {String} padID The id of the pad the author contributes to
*/
-export const removePad = async (authorID: string, padID: string) => {
+export const removePad = async (authorID: string, padID?: string) => {
const author = await db.get(`globalAuthor:${authorID}`);
if (author == null) return;
diff --git a/src/node/db/GroupManager.ts b/src/node/db/GroupManager.ts
index 6d4e2d0e1dc..0be2205d828 100644
--- a/src/node/db/GroupManager.ts
+++ b/src/node/db/GroupManager.ts
@@ -19,7 +19,7 @@
* limitations under the License.
*/
-import CustomError from '../utils/customError';
+import {CustomError} from '../utils/customError';
const randomString = require('../../static/js/pad_utils').randomString;
import {db} from './DB';
import {doesPadExist, getPad} from './PadManager';
diff --git a/src/node/db/Pad.ts b/src/node/db/Pad.ts
index 9f174270590..be7ac015509 100644
--- a/src/node/db/Pad.ts
+++ b/src/node/db/Pad.ts
@@ -7,22 +7,21 @@ import AttributeMap from '../../static/js/AttributeMap';
import Changeset from '../../static/js/Changeset';
import ChatMessage from '../../static/js/ChatMessage';
import {AttributePool} from '../../static/js/AttributePool';
-import Stream from '../utils/Stream';
+import {Stream} from '../utils/Stream';
import assert, {strict} from 'assert'
import {db} from './DB';
import {defaultPadText} from '../utils/Settings';
import {addPad, getAuthorColorId, getAuthorName, getColorPalette, removePad} from './AuthorManager';
import {Revision} from "../models/Revision";
-const padManager = require('./PadManager');
-const padMessageHandler = require('../handler/PadMessageHandler');
-const groupManager = require('./GroupManager');
-const CustomError = require('../utils/customError');
-const readOnlyManager = require('./ReadOnlyManager');
-const randomString = require('../utils/randomstring');
-const hooks = require('../../static/js/pluginfw/hooks');
-const {padutils: {warnDeprecated}} = require('../../static/js/pad_utils');
-const promises = require('../utils/promises');
-
+import {doesPadExist, getPad} from './PadManager';
+import {kickSessionsFromPad} from '../handler/PadMessageHandler';
+import {doesGroupExist} from './GroupManager';
+import {CustomError} from '../utils/customError';
+import {getReadOnlyId} from './ReadOnlyManager';
+import {randomString} from '../utils/randomstring';
+import hooks from '../../static/js/pluginfw/hooks';
+import {timesLimit} from '../utils/promises';
+import {padutils} from '../../static/js/pad_utils';
/**
* Copied from the Etherpad source code. It converts Windows line breaks to Unix
* line breaks and convert Tabs to spaces
@@ -114,11 +113,11 @@ export class Pad {
pad: this,
authorId,
get author() {
- warnDeprecated(`${hook} hook author context is deprecated; use authorId instead`);
+ padutils.warnDeprecated(`${hook} hook author context is deprecated; use authorId instead`);
return this.authorId;
},
set author(authorId) {
- warnDeprecated(`${hook} hook author context is deprecated; use authorId instead`);
+ padutils.warnDeprecated(`${hook} hook author context is deprecated; use authorId instead`);
this.authorId = authorId;
},
...this.head === 0 ? {} : {
@@ -403,16 +402,16 @@ export class Pad {
for (const p of new Stream(promises).batch(100).buffer(99)) await p;
// Initialize the new pad (will update the listAllPads cache)
- const dstPad = await padManager.getPad(destinationID, null);
+ const dstPad = await getPad(destinationID, null);
// let the plugins know the pad was copied
await hooks.aCallAll('padCopy', {
get originalPad() {
- warnDeprecated('padCopy originalPad context property is deprecated; use srcPad instead');
+ padutils.warnDeprecated('padCopy originalPad context property is deprecated; use srcPad instead');
return this.srcPad;
},
get destinationID() {
- warnDeprecated(
+ padutils.warnDeprecated(
'padCopy destinationID context property is deprecated; use dstPad.id instead');
return this.dstPad.id;
},
@@ -428,7 +427,7 @@ export class Pad {
if (destinationID.indexOf('$') >= 0) {
destGroupID = destinationID.split('$')[0];
- const groupExists = await groupManager.doesGroupExist(destGroupID);
+ const groupExists = await doesGroupExist(destGroupID);
// group does not exist
if (!groupExists) {
@@ -440,7 +439,7 @@ export class Pad {
async removePadIfForceIsTrueAndAlreadyExist(destinationID, force) {
// if the pad exists, we should abort, unless forced.
- const exists = await padManager.doesPadExist(destinationID);
+ const exists = await doesPadExist(destinationID);
// allow force to be a string
if (typeof force === 'string') {
@@ -456,7 +455,7 @@ export class Pad {
}
// exists and forcing
- const pad = await padManager.getPad(destinationID);
+ const pad = await getPad(destinationID);
await pad.remove();
}
}
@@ -485,7 +484,7 @@ export class Pad {
}
// initialize the pad with a new line to avoid getting the defaultText
- const dstPad = await padManager.getPad(destinationID, '\n', authorId);
+ const dstPad = await getPad(destinationID, '\n', authorId);
dstPad.pool = this.pool.clone();
const oldAText = this.atext;
@@ -509,11 +508,11 @@ export class Pad {
await hooks.aCallAll('padCopy', {
get originalPad() {
- warnDeprecated('padCopy originalPad context property is deprecated; use srcPad instead');
+ padutils.warnDeprecated('padCopy originalPad context property is deprecated; use srcPad instead');
return this.srcPad;
},
get destinationID() {
- warnDeprecated(
+ padutils.warnDeprecated(
'padCopy destinationID context property is deprecated; use dstPad.id instead');
return this.dstPad.id;
},
@@ -529,7 +528,7 @@ export class Pad {
const p = [];
// kick everyone from this pad
- padMessageHandler.kickSessionsFromPad(padID);
+ kickSessionsFromPad(padID);
// delete all relations - the original code used async.parallel but
// none of the operations except getting the group depended on callbacks
@@ -550,18 +549,18 @@ export class Pad {
}
// remove the readonly entries
- p.push(readOnlyManager.getReadOnlyId(padID).then(async (readonlyID) => {
+ p.push(getReadOnlyId(padID).then(async (readonlyID) => {
await db.remove(`readonly2pad:${readonlyID}`);
}));
p.push(db.remove(`pad2readonly:${padID}`));
// delete all chat messages
- p.push(promises.timesLimit(this.chatHead + 1, 500, async (i) => {
+ p.push(timesLimit(this.chatHead + 1, 500, async (i) => {
await this.db.remove(`pad:${this.id}:chat:${i}`, null);
}));
// delete all revisions
- p.push(promises.timesLimit(this.head + 1, 500, async (i) => {
+ p.push(timesLimit(this.head + 1, 500, async (i) => {
await this.db.remove(`pad:${this.id}:revs:${i}`, null);
}));
@@ -571,10 +570,10 @@ export class Pad {
});
// delete the pad entry and delete pad from padManager
- p.push(padManager.removePad(padID));
+ p.push(removePad(padID));
p.push(hooks.aCallAll('padRemove', {
get padID() {
- warnDeprecated('padRemove padID context property is deprecated; use pad.id instead');
+ padutils.warnDeprecated('padRemove padID context property is deprecated; use pad.id instead');
return this.pad.id;
},
pad: this,
diff --git a/src/node/db/PadManager.ts b/src/node/db/PadManager.ts
index 568c19f8388..a48473546d8 100644
--- a/src/node/db/PadManager.ts
+++ b/src/node/db/PadManager.ts
@@ -19,7 +19,7 @@
* limitations under the License.
*/
-import CustomError from '../utils/customError';
+import {CustomError} from '../utils/customError';
import {Pad} from './Pad';
import {db} from './DB';
diff --git a/src/node/db/ReadOnlyManager.ts b/src/node/db/ReadOnlyManager.ts
index fe763cd9a3a..8d5a036c8fe 100644
--- a/src/node/db/ReadOnlyManager.ts
+++ b/src/node/db/ReadOnlyManager.ts
@@ -21,7 +21,7 @@
import {db} from './DB';
-import randomString from '../utils/randomstring';
+import {randomString} from '../utils/randomstring';
/**
diff --git a/src/node/db/SecurityManager.ts b/src/node/db/SecurityManager.ts
index dcebdb89793..ca894b5e5de 100644
--- a/src/node/db/SecurityManager.ts
+++ b/src/node/db/SecurityManager.ts
@@ -31,7 +31,7 @@ import {findAuthorID} from "./SessionManager";
import {editOnly, loadTest, requireAuthentication, requireSession} from "../utils/Settings";
-import webaccess from "../hooks/express/webaccess";
+import {normalizeAuthzLevel} from "../hooks/express/webaccess";
import log4js from "log4js";
@@ -92,7 +92,7 @@ export const checkAccess = async (padID, sessionCookie, token, userSettings) =>
// Note: userSettings.padAuthorizations should still be populated even if
// settings.requireAuthorization is false.
const padAuthzs = userSettings.padAuthorizations || {};
- const level = webaccess.normalizeAuthzLevel(padAuthzs[padID]);
+ const level = normalizeAuthzLevel(padAuthzs[padID]);
if (!level) {
authLogger.debug('access denied: unauthorized');
return DENY;
diff --git a/src/node/handler/APIHandler.ts b/src/node/handler/APIHandler.ts
index d1ed23fb328..5b485f33a4a 100644
--- a/src/node/handler/APIHandler.ts
+++ b/src/node/handler/APIHandler.ts
@@ -19,12 +19,12 @@
* limitations under the License.
*/
-import absolutePaths from '../utils/AbsolutePaths';
+import {makeAbsolute} from '../utils/AbsolutePaths';
import fs from 'fs';
import * as api from '../db/API';
import log4js from 'log4js';
import {sanitizePadId} from '../db/PadManager';
-import randomString from '../utils/randomstring';
+import {randomString} from '../utils/randomstring';
const argv = require('../utils/Cli').argv;
const createHTTPError = require('http-errors');
@@ -32,7 +32,7 @@ const apiHandlerLogger = log4js.getLogger('APIHandler');
// ensure we have an apikey
let apikey = null;
-const apikeyFilename = absolutePaths.makeAbsolute(argv.apikey || './APIKEY.txt');
+const apikeyFilename = makeAbsolute(argv.apikey || './APIKEY.txt');
try {
apikey = fs.readFileSync(apikeyFilename, 'utf8');
diff --git a/src/node/handler/ImportHandler.ts b/src/node/handler/ImportHandler.ts
index 8894225645f..92f5e38a778 100644
--- a/src/node/handler/ImportHandler.ts
+++ b/src/node/handler/ImportHandler.ts
@@ -29,8 +29,8 @@ import {promises as fs} from "fs";
import {abiword, allowUnknownFileEnds, importMaxFileSize, soffice} from '../utils/Settings';
import {Formidable} from 'formidable';
import os from 'os';
-import importHtml from '../utils/ImportHtml';
-import importEtherpad from '../utils/ImportEtherpad';
+import {setPadHTML} from '../utils/ImportHtml';
+import {setPadRaw} from '../utils/ImportEtherpad';
import log4js from 'log4js';
import hooks from '../../static/js/pluginfw/hooks.js';
@@ -150,7 +150,7 @@ const doImport = async (req, res, padId, authorId) => {
}
const text = await fs.readFile(srcFile, 'utf8');
directDatabaseAccess = true;
- await importEtherpad.setPadRaw(padId, text, authorId);
+ await setPadRaw(padId, text, authorId);
}
// convert file to html if necessary
@@ -207,7 +207,7 @@ const doImport = async (req, res, padId, authorId) => {
if (!directDatabaseAccess) {
if (importHandledByPlugin || useConverter || fileIsHTML) {
try {
- await importHtml.setPadHTML(pad, text, authorId);
+ await setPadHTML(pad, text, authorId);
} catch (err) {
logger.warn(`Error importing, possibly caused by malformed HTML: ${err.stack || err}`);
}
diff --git a/src/node/handler/PadMessageHandler.ts b/src/node/handler/PadMessageHandler.ts
index dfa80430d1d..5e9f0665ddd 100644
--- a/src/node/handler/PadMessageHandler.ts
+++ b/src/node/handler/PadMessageHandler.ts
@@ -58,7 +58,7 @@ import {createCollection} from '../stats';
import {strict as assert} from "assert";
import {RateLimiterMemory} from 'rate-limiter-flexible';
-import webaccess from '../hooks/express/webaccess';
+import {userCanModify} from '../hooks/express/webaccess';
import {ErrorCaused} from "../models/ErrorCaused";
import {Pad} from "../db/Pad";
import {SessionInfo} from "../models/SessionInfo";
@@ -164,7 +164,7 @@ const padChannels = new Channels((ch, {socket, message}) => handleUserChanges(so
* This Method is called by server.js to tell the message handler on which socket it should send
* @param socket_io The Socket
*/
-exports.setSocketIO = (socket_io) => {
+export const setSocketIO = (socket_io) => {
socketio = socket_io;
};
@@ -172,7 +172,7 @@ exports.setSocketIO = (socket_io) => {
* Handles the connection of a new user
* @param socket the socket.io Socket object for the new connection from the client
*/
-exports.handleConnect = (socket) => {
+export const handleConnect = (socket) => {
createCollection.meter('connects').mark();
// Initialize sessioninfos for this new session
@@ -186,7 +186,7 @@ exports.handleConnect = (socket) => {
/**
* Kicks all sessions from a pad
*/
-exports.kickSessionsFromPad = (padID) => {
+export const kickSessionsFromPad = (padID) => {
if (typeof socketio.sockets.clients !== 'function') return;
// skip if there is nobody on this pad
@@ -200,7 +200,7 @@ exports.kickSessionsFromPad = (padID) => {
* Handles the disconnection of a user
* @param socket the socket.io Socket object for the client
*/
-exports.handleDisconnect = async (socket) => {
+export const handleDisconnect = async (socket) => {
createCollection.meter('disconnects').mark();
const session = sessioninfos[socket.id];
delete sessioninfos[socket.id];
@@ -238,7 +238,7 @@ exports.handleDisconnect = async (socket) => {
* @param socket the socket.io Socket object for the client
* @param message the message from the client
*/
-exports.handleMessage = async (socket, message) => {
+export const handleMessage = async (socket, message) => {
const env = process.env.NODE_ENV || 'development';
if (env === 'production') {
@@ -272,7 +272,7 @@ exports.handleMessage = async (socket, message) => {
thisSession.padId = padIds.padId;
thisSession.readOnlyPadId = padIds.readOnlyPadId;
thisSession.readonly =
- padIds.readonly || !webaccess.userCanModify(thisSession.auth.padID, socket.client.request);
+ padIds.readonly || !userCanModify(thisSession.auth.padID, socket.client.request);
}
// Outside of the checks done by this function, message.padId must not be accessed because it is
// too easy to introduce a security vulnerability that allows malicious users to read or modify
@@ -416,7 +416,7 @@ const handleSaveRevisionMessage = async (socket, message) => {
* @param msg {Object} the message we're sending
* @param sessionID {string} the socketIO session to which we're sending this message
*/
-exports.handleCustomObjectMessage = (msg, sessionID) => {
+export const handleCustomObjectMessage = (msg, sessionID) => {
if (msg.data.type === 'CUSTOM') {
if (sessionID) {
// a sessionID is targeted: directly to this sessionID
@@ -684,7 +684,7 @@ const handleUserChanges = async (socket, message) => {
socket.json.send({type: 'COLLABROOM', data: {type: 'ACCEPT_COMMIT', newRev}});
thisSession.rev = newRev;
if (newRev !== r) thisSession.time = await pad.getRevisionDate(newRev);
- await exports.updatePadClients(pad);
+ await updatePadClients(pad);
} catch (err) {
socket.json.send({disconnect: 'badChangeset'});
createCollection.meter('failedChangesets').mark();
diff --git a/src/node/handler/SocketIORouter.ts b/src/node/handler/SocketIORouter.ts
index 73594bfb095..9f7875566b1 100644
--- a/src/node/handler/SocketIORouter.ts
+++ b/src/node/handler/SocketIORouter.ts
@@ -39,18 +39,18 @@ let io;
/**
* adds a component
*/
-exports.addComponent = (moduleName, module) => {
- if (module == null) return exports.deleteComponent(moduleName);
+export const addComponent = (moduleName, module) => {
+ if (module == null) return deleteComponent(moduleName);
components[moduleName] = module;
module.setSocketIO(io);
};
-exports.deleteComponent = (moduleName) => { delete components[moduleName]; };
+export const deleteComponent = (moduleName) => { delete components[moduleName]; };
/**
* sets the socket.io and adds event functions for routing
*/
-exports.setSocketIO = (_io) => {
+export const setSocketIO = (_io) => {
io = _io;
io.sockets.on('connection', (socket) => {
diff --git a/src/node/hooks/express.js b/src/node/hooks/express.ts
similarity index 71%
rename from src/node/hooks/express.js
rename to src/node/hooks/express.ts
index 9c42fd6d867..74f5834d2b1 100644
--- a/src/node/hooks/express.js
+++ b/src/node/hooks/express.ts
@@ -1,34 +1,57 @@
'use strict';
-const _ = require('underscore');
-const cookieParser = require('cookie-parser');
-const events = require('events');
-const express = require('express');
-const expressSession = require('express-session');
-const fs = require('fs');
-const hooks = require('../../static/js/pluginfw/hooks');
-const log4js = require('log4js');
-const SessionStore = require('../db/SessionStore');
-const settings = require('../utils/Settings');
-const stats = require('../stats');
-const util = require('util');
-const webaccess = require('./express/webaccess');
+import _ from 'underscore';
+import cookieParser from 'cookie-parser';
+import events from "events";
+
+import express from "express";
+
+import fs from "fs";
+
+import expressSession from "express-session";
+
+import hooks from "../../static/js/pluginfw/hooks";
+
+import log4js from "log4js";
+
+import SessionStore from "../db/SessionStore";
+
+import {
+ cookie,
+ exposeVersion,
+ getEpVersion,
+ getGitCommit,
+ ip,
+ loglevel,
+ port,
+ sessionKey,
+ ssl, sslKeys,
+ trustProxy,
+ users
+} from "../utils/Settings";
+
+import {createCollection} from "../stats";
+
+import util from "util";
+
+import {checkAccess, checkAccess2} from "./express/webaccess";
+import {Socket} from "net";
const logger = log4js.getLogger('http');
let serverName;
let sessionStore;
-const sockets = new Set();
+const sockets = new Set();
const socketsEvents = new events.EventEmitter();
-const startTime = stats.settableGauge('httpStartTime');
-
-exports.server = null;
+const startTime = createCollection.settableGauge('httpStartTime');
+export let server = null;
+export let sessionMiddleware;
const closeServer = async () => {
- if (exports.server != null) {
+ if (server != null) {
logger.info('Closing HTTP server...');
// Call exports.server.close() to reject new connections but don't await just yet because the
// Promise won't resolve until all preexisting connections are closed.
- const p = util.promisify(exports.server.close.bind(exports.server))();
+ const p = util.promisify(server.close.bind(server))();
await hooks.aCallAll('expressCloseServer');
// Give existing connections some time to close on their own before forcibly terminating. The
// time should be long enough to avoid interrupting most preexisting transmissions but short
@@ -47,7 +70,7 @@ const closeServer = async () => {
}
await p;
clearTimeout(timeout);
- exports.server = null;
+ server = null;
startTime.setValue(0);
logger.info('HTTP server closed');
}
@@ -55,24 +78,24 @@ const closeServer = async () => {
sessionStore = null;
};
-exports.createServer = async () => {
+export const createServer = async () => {
console.log('Report bugs at https://github.com/ether/etherpad-lite/issues');
- serverName = `Etherpad ${settings.getGitCommit()} (https://etherpad.org)`;
+ serverName = `Etherpad ${getGitCommit()} (https://etherpad.org)`;
- console.log(`Your Etherpad version is ${settings.getEpVersion()} (${settings.getGitCommit()})`);
+ console.log(`Your Etherpad version is ${getEpVersion()} (${getGitCommit()})`);
- await exports.restartServer();
+ await restartServer();
- if (settings.ip === '') {
+ if (ip.length===0) {
// using Unix socket for connectivity
- console.log(`You can access your Etherpad instance using the Unix socket at ${settings.port}`);
+ console.log(`You can access your Etherpad instance using the Unix socket at ${port}`);
} else {
- console.log(`You can access your Etherpad instance at http://${settings.ip}:${settings.port}/`);
+ console.log(`You can access your Etherpad instance at http://${ip}:${port}/`);
}
- if (!_.isEmpty(settings.users)) {
- console.log(`The plugin admin page is at http://${settings.ip}:${settings.port}/admin/plugins`);
+ if (!_.isEmpty(users)) {
+ console.log(`The plugin admin page is at http://${ip}:${port}/admin/plugins`);
} else {
console.warn('Admin username and password not set in settings.json. ' +
'To access admin please uncomment and edit "users" in settings.json');
@@ -87,39 +110,40 @@ exports.createServer = async () => {
}
};
-exports.restartServer = async () => {
+export const restartServer = async () => {
await closeServer();
const app = express(); // New syntax for express v3
- if (settings.ssl) {
+ if (ssl) {
console.log('SSL -- enabled');
- console.log(`SSL -- server key file: ${settings.ssl.key}`);
- console.log(`SSL -- Certificate Authority's certificate file: ${settings.ssl.cert}`);
+ console.log(`SSL -- server key file: ${sslKeys.key}`);
+ console.log(`SSL -- Certificate Authority's certificate file: ${sslKeys.cert}`);
const options = {
- key: fs.readFileSync(settings.ssl.key),
- cert: fs.readFileSync(settings.ssl.cert),
+ key: fs.readFileSync(sslKeys.key),
+ cert: fs.readFileSync(sslKeys.cert),
+ ca: undefined
};
- if (settings.ssl.ca) {
+ if (sslKeys.ca) {
options.ca = [];
- for (let i = 0; i < settings.ssl.ca.length; i++) {
- const caFileName = settings.ssl.ca[i];
+ for (let i = 0; i < sslKeys.ca.length; i++) {
+ const caFileName = sslKeys.ca[i];
options.ca.push(fs.readFileSync(caFileName));
}
}
const https = require('https');
- exports.server = https.createServer(options, app);
+ server = https.createServer(options, app);
} else {
const http = require('http');
- exports.server = http.createServer(app);
+ server = http.createServer(app);
}
app.use((req, res, next) => {
// res.header("X-Frame-Options", "deny"); // breaks embedded pads
- if (settings.ssl) {
+ if (ssl) {
// we use SSL
res.header('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
}
@@ -138,14 +162,14 @@ exports.restartServer = async () => {
res.header('Referrer-Policy', 'same-origin');
// send git version in the Server response header if exposeVersion is true.
- if (settings.exposeVersion) {
+ if (exposeVersion) {
res.header('Server', serverName);
}
next();
});
- if (settings.trustProxy) {
+ if (trustProxy) {
/*
* If 'trust proxy' === true, the client’s IP address in req.ip will be the
* left-most entry in the X-Forwarded-* header.
@@ -157,8 +181,10 @@ exports.restartServer = async () => {
// Measure response time
app.use((req, res, next) => {
- const stopWatch = stats.timer('httpRequests').start();
+ const stopWatch = createCollection.timer('httpRequests').start();
const sendFn = res.send.bind(res);
+ // FIXME Check if this is still needed
+ // @ts-ignore
res.send = (...args) => { stopWatch.end(); sendFn(...args); };
next();
});
@@ -167,20 +193,20 @@ exports.restartServer = async () => {
// starts listening to requests as reported in issue #158. Not installing the log4js connect
// logger when the log level has a higher severity than INFO since it would not log at that level
// anyway.
- if (!(settings.loglevel === 'WARN' && settings.loglevel === 'ERROR')) {
+ if (!(loglevel === 'WARN') && loglevel === 'ERROR') {
app.use(log4js.connectLogger(logger, {
- level: log4js.levels.DEBUG,
+ level: loglevel,
format: ':status, :method :url',
}));
}
- app.use(cookieParser(settings.sessionKey, {}));
+ app.use(cookieParser(sessionKey, {}));
- sessionStore = new SessionStore(settings.cookie.sessionRefreshInterval);
- exports.sessionMiddleware = expressSession({
+ sessionStore = new SessionStore(cookie.sessionRefreshInterval);
+sessionMiddleware = expressSession({
propagateTouch: true,
rolling: true,
- secret: settings.sessionKey,
+ secret: sessionKey,
store: sessionStore,
resave: false,
saveUninitialized: false,
@@ -188,8 +214,8 @@ exports.restartServer = async () => {
// cleaner :)
name: 'express_sid',
cookie: {
- maxAge: settings.cookie.sessionLifetime || null, // Convert 0 to null.
- sameSite: settings.cookie.sameSite,
+ maxAge: cookie.sessionLifetime || null, // Convert 0 to null.
+ sameSite: cookie.sameSite,
// The automatic express-session mechanism for determining if the application is being served
// over ssl is similar to the one used for setting the language cookie, which check if one of
@@ -215,15 +241,15 @@ exports.restartServer = async () => {
// middleware. This allows plugins to avoid creating an express-session record in the database
// when it is not needed (e.g., public static content).
await hooks.aCallAll('expressPreSession', {app});
- app.use(exports.sessionMiddleware);
+ app.use(sessionMiddleware);
- app.use(webaccess.checkAccess);
+ app.use(checkAccess2);
await Promise.all([
hooks.aCallAll('expressConfigure', {app}),
- hooks.aCallAll('expressCreateServer', {app, server: exports.server}),
+ hooks.aCallAll('expressCreateServer', {app, server: server}),
]);
- exports.server.on('connection', (socket) => {
+ server.on('connection', (socket) => {
sockets.add(socket);
socketsEvents.emit('updated');
socket.on('close', () => {
@@ -231,11 +257,11 @@ exports.restartServer = async () => {
socketsEvents.emit('updated');
});
});
- await util.promisify(exports.server.listen).bind(exports.server)(settings.port, settings.ip);
+ await util.promisify(server.listen).bind(server)(port, ip);
startTime.setValue(Date.now());
logger.info('HTTP server listening for connections');
};
-exports.shutdown = async (hookName, context) => {
+export const shutdown = async (hookName, context) => {
await closeServer();
};
diff --git a/src/node/hooks/express/importexport.ts b/src/node/hooks/express/importexport.ts
index 5df1955993c..e5d096b76fd 100644
--- a/src/node/hooks/express/importexport.ts
+++ b/src/node/hooks/express/importexport.ts
@@ -8,7 +8,7 @@ import {doesPadExist} from '../../db/PadManager';
import {getPadId, isReadOnlyId} from '../../db/ReadOnlyManager';
import rateLimit from 'express-rate-limit';
import {checkAccess} from '../../db/SecurityManager';
-import webaccess from './webaccess';
+import {userCanModify} from './webaccess';
exports.expressCreateServer = (hookName, args, cb) => {
importExportRateLimiting.onLimitReached = (req, res, options) => {
@@ -72,7 +72,7 @@ exports.expressCreateServer = (hookName, args, cb) => {
const {session: {user} = {}}:SessionSocketModel = req;
const {accessStatus, authorID: authorId} = await checkAccess(
req.params.pad, req.cookies.sessionID, req.cookies.token, user);
- if (accessStatus !== 'grant' || !webaccess.userCanModify(req.params.pad, req)) {
+ if (accessStatus !== 'grant' || !userCanModify(req.params.pad, req)) {
return res.status(403).send('Forbidden');
}
await doImport2(req, res, req.params.pad, authorId);
diff --git a/src/node/hooks/express/padurlsanitize.js b/src/node/hooks/express/padurlsanitize.ts
similarity index 83%
rename from src/node/hooks/express/padurlsanitize.js
rename to src/node/hooks/express/padurlsanitize.ts
index ff1afa47700..00006bca4b5 100644
--- a/src/node/hooks/express/padurlsanitize.js
+++ b/src/node/hooks/express/padurlsanitize.ts
@@ -1,18 +1,18 @@
'use strict';
-const padManager = require('../../db/PadManager');
+import {isValidPadId, sanitizePadId} from '../../db/PadManager';
exports.expressCreateServer = (hookName, args, cb) => {
// redirects browser to the pad's sanitized url if needed. otherwise, renders the html
args.app.param('pad', (req, res, next, padId) => {
(async () => {
// ensure the padname is valid and the url doesn't end with a /
- if (!padManager.isValidPadId(padId) || /\/$/.test(req.url)) {
+ if (!isValidPadId(padId) || /\/$/.test(req.url)) {
res.status(404).send('Such a padname is forbidden');
return;
}
- const sanitizedPadId = await padManager.sanitizePadId(padId);
+ const sanitizedPadId = await sanitizePadId(padId);
if (sanitizedPadId === padId) {
// the pad id was fine, so just render it
diff --git a/src/node/hooks/express/socketio.js b/src/node/hooks/express/socketio.ts
similarity index 88%
rename from src/node/hooks/express/socketio.js
rename to src/node/hooks/express/socketio.ts
index edb6799405b..feed1a2fbb4 100644
--- a/src/node/hooks/express/socketio.js
+++ b/src/node/hooks/express/socketio.ts
@@ -1,14 +1,14 @@
'use strict';
-const events = require('events');
-const express = require('../express');
-const log4js = require('log4js');
-const proxyaddr = require('proxy-addr');
-const settings = require('../../utils/Settings');
-const socketio = require('socket.io');
-const socketIORouter = require('../../handler/SocketIORouter');
-const hooks = require('../../../static/js/pluginfw/hooks');
-const padMessageHandler = require('../../handler/PadMessageHandler');
+import events from 'events';
+import {sessionMiddleware} from '../express';
+import log4js from 'log4js';
+import proxyaddr from 'proxy-addr';
+import {socketIo, socketTransportProtocols, trustProxy} from '../../utils/Settings';
+import socketio from 'socket.io';
+import {addComponent, setSocketIO} from '../../handler/SocketIORouter';
+import hooks from '../../../static/js/pluginfw/hooks';
+import * as padMessageHandler from '../../handler/PadMessageHandler';
let io;
const logger = log4js.getLogger('socket.io');
@@ -52,7 +52,7 @@ exports.expressCreateServer = (hookName, args, cb) => {
// transports in this list at once
// e.g. XHR is disabled in IE by default, so in IE it should use jsonp-polling
io = socketio({
- transports: settings.socketTransportProtocols,
+ transports: socketTransportProtocols,
}).listen(args.server, {
/*
* Do not set the "io" cookie.
@@ -74,7 +74,7 @@ exports.expressCreateServer = (hookName, args, cb) => {
* https://github.com/socketio/socket.io/issues/2276#issuecomment-147184662 (not totally true, actually, see above)
*/
cookie: false,
- maxHttpBufferSize: settings.socketIo.maxHttpBufferSize,
+ maxHttpBufferSize: socketIo.maxHttpBufferSize,
});
io.on('connect', (socket) => {
@@ -90,7 +90,7 @@ exports.expressCreateServer = (hookName, args, cb) => {
const req = socket.request;
// Express sets req.ip but socket.io does not. Replicate Express's behavior here.
if (req.ip == null) {
- if (settings.trustProxy) {
+ if (trustProxy) {
req.ip = proxyaddr(req, args.app.get('trust proxy fn'));
} else {
req.ip = socket.handshake.address;
@@ -102,7 +102,7 @@ exports.expressCreateServer = (hookName, args, cb) => {
req.headers.cookie = socket.handshake.query.cookie;
}
// See: https://socket.io/docs/faq/#Usage-with-express-session
- express.sessionMiddleware(req, {}, next);
+ sessionMiddleware(req, {}, next);
});
io.use((socket, next) => {
@@ -130,8 +130,8 @@ exports.expressCreateServer = (hookName, args, cb) => {
// if(settings.minify) io.enable('browser client minification');
// Initialize the Socket.IO Router
- socketIORouter.setSocketIO(io);
- socketIORouter.addComponent('pad', padMessageHandler);
+ setSocketIO(io);
+ addComponent('pad', padMessageHandler);
hooks.callAll('socketio', {app: args.app, io, server: args.server});
diff --git a/src/node/hooks/express/specialpages.js b/src/node/hooks/express/specialpages.ts
similarity index 63%
rename from src/node/hooks/express/specialpages.js
rename to src/node/hooks/express/specialpages.ts
index 4f41d8cd02f..8b934d297f0 100644
--- a/src/node/hooks/express/specialpages.js
+++ b/src/node/hooks/express/specialpages.ts
@@ -1,14 +1,14 @@
'use strict';
-const path = require('path');
-const eejs = require('../../eejs');
-const fs = require('fs');
+import path from 'path';
+import {required} from '../../eejs';
+import fs from 'fs';
const fsp = fs.promises;
-const toolbar = require('../../utils/toolbar');
-const hooks = require('../../../static/js/pluginfw/hooks');
-const settings = require('../../utils/Settings');
-const util = require('util');
-const webaccess = require('./webaccess');
+import {} from '../../utils/toolbar';
+import hooks from '../../../static/js/pluginfw/hooks';
+import {favicon, getEpVersion, maxAge, root, skinName} from '../../utils/Settings';
+import util from 'util';
+import {userCanModify} from './webaccess';
exports.expressPreSession = async (hookName, {app}) => {
// This endpoint is intended to conform to:
@@ -17,25 +17,25 @@ exports.expressPreSession = async (hookName, {app}) => {
res.set('Content-Type', 'application/health+json');
res.json({
status: 'pass',
- releaseId: settings.getEpVersion(),
+ releaseId: getEpVersion(),
});
});
app.get('/stats', (req, res) => {
- res.json(require('../../stats').toJSON());
+ res.json(required('../../stats').toJSON());
});
app.get('/javascript', (req, res) => {
- res.send(eejs.require('ep_etherpad-lite/templates/javascript.html', {req}));
+ res.send(required('ep_etherpad-lite/templates/javascript.html', {req}));
});
app.get('/robots.txt', (req, res) => {
let filePath =
- path.join(settings.root, 'src', 'static', 'skins', settings.skinName, 'robots.txt');
+ path.join(root, 'src', 'static', 'skins', skinName, 'robots.txt');
res.sendFile(filePath, (err) => {
// there is no custom robots.txt, send the default robots.txt which dissallows all
if (err) {
- filePath = path.join(settings.root, 'src', 'static', 'robots.txt');
+ filePath = path.join(root, 'src', 'static', 'robots.txt');
res.sendFile(filePath);
}
});
@@ -44,9 +44,9 @@ exports.expressPreSession = async (hookName, {app}) => {
app.get('/favicon.ico', (req, res, next) => {
(async () => {
const fns = [
- ...(settings.favicon ? [path.resolve(settings.root, settings.favicon)] : []),
- path.join(settings.root, 'src', 'static', 'skins', settings.skinName, 'favicon.ico'),
- path.join(settings.root, 'src', 'static', 'favicon.ico'),
+ ...(favicon ? [path.resolve(root, favicon)] : []),
+ path.join(root, 'src', 'static', 'skins', skinName, 'favicon.ico'),
+ path.join(root, 'src', 'static', 'favicon.ico'),
];
for (const fn of fns) {
try {
@@ -54,7 +54,7 @@ exports.expressPreSession = async (hookName, {app}) => {
} catch (err) {
continue;
}
- res.setHeader('Cache-Control', `public, max-age=${settings.maxAge}`);
+ res.setHeader('Cache-Control', `public, max-age=${maxAge}`);
await util.promisify(res.sendFile.bind(res))(fn);
return;
}
@@ -66,13 +66,13 @@ exports.expressPreSession = async (hookName, {app}) => {
exports.expressCreateServer = (hookName, args, cb) => {
// serve index.html under /
args.app.get('/', (req, res) => {
- res.send(eejs.require('ep_etherpad-lite/templates/index.html', {req}));
+ res.send(required('ep_etherpad-lite/templates/index.html', {req}));
});
// serve pad.html under /p
args.app.get('/p/:pad', (req, res, next) => {
// The below might break for pads being rewritten
- const isReadOnly = !webaccess.userCanModify(req.params.pad, req);
+ const isReadOnly = !userCanModify(req.params.pad, req);
hooks.callAll('padInitToolbar', {
toolbar,
@@ -81,7 +81,7 @@ exports.expressCreateServer = (hookName, args, cb) => {
// can be removed when require-kernel is dropped
res.header('Feature-Policy', 'sync-xhr \'self\'');
- res.send(eejs.require('ep_etherpad-lite/templates/pad.html', {
+ res.send(required('ep_etherpad-lite/templates/pad.html', {
req,
toolbar,
isReadOnly,
@@ -94,7 +94,7 @@ exports.expressCreateServer = (hookName, args, cb) => {
toolbar,
});
- res.send(eejs.require('ep_etherpad-lite/templates/timeslider.html', {
+ res.send(required('ep_etherpad-lite/templates/timeslider.html', {
req,
toolbar,
}));
diff --git a/src/node/hooks/express/static.js b/src/node/hooks/express/static.ts
similarity index 86%
rename from src/node/hooks/express/static.js
rename to src/node/hooks/express/static.ts
index 26c18995ab4..962b845f5f0 100644
--- a/src/node/hooks/express/static.js
+++ b/src/node/hooks/express/static.ts
@@ -19,8 +19,9 @@ const getTar = async () => {
};
const tarJson = await fs.readFile(path.join(settings.root, 'src/node/utils/tar.json'), 'utf8');
const tar = {};
- for (const [key, relativeFiles] of Object.entries(JSON.parse(tarJson))) {
- const files = relativeFiles.map(prefixLocalLibraryPath);
+ for (let [key, relativeFiles] of Object.entries(JSON.parse(tarJson))) {
+ const relativeFilesMapped = relativeFiles as string[];
+ const files = relativeFilesMapped.map(prefixLocalLibraryPath);
tar[prefixLocalLibraryPath(key)] = files
.concat(files.map((p) => p.replace(/\.js$/, '')))
.concat(files.map((p) => `${p.replace(/\.js$/, '')}/index.js`));
@@ -28,7 +29,7 @@ const getTar = async () => {
return tar;
};
-exports.expressPreSession = async (hookName, {app}) => {
+export const expressPreSession = async (hookName, {app}) => {
// Cache both minified and static.
const assetCache = new CachingMiddleware();
app.all(/\/javascripts\/(.*)/, assetCache.handle.bind(assetCache));
@@ -62,8 +63,9 @@ exports.expressPreSession = async (hookName, {app}) => {
const clientParts = plugins.parts.filter((part) => part.client_hooks != null);
const clientPlugins = {};
for (const name of new Set(clientParts.map((part) => part.plugin))) {
- clientPlugins[name] = {...plugins.plugins[name]};
- delete clientPlugins[name].package;
+ const mappedName = name as any
+ clientPlugins[mappedName] = {...plugins.plugins[mappedName]};
+ delete clientPlugins[mappedName].package;
}
res.setHeader('Content-Type', 'application/json; charset=utf-8');
res.setHeader('Cache-Control', `public, max-age=${settings.maxAge}`);
diff --git a/src/node/hooks/express/tests.js b/src/node/hooks/express/tests.ts
similarity index 81%
rename from src/node/hooks/express/tests.js
rename to src/node/hooks/express/tests.ts
index 66b47d2af95..3b9db80b6e7 100644
--- a/src/node/hooks/express/tests.js
+++ b/src/node/hooks/express/tests.ts
@@ -1,11 +1,14 @@
'use strict';
-const path = require('path');
-const fsp = require('fs').promises;
-const plugins = require('../../../static/js/pluginfw/plugin_defs');
-const sanitizePathname = require('../../utils/sanitizePathname');
-const settings = require('../../utils/Settings');
+import path from 'path';
+import {promises as fsp} from "fs";
+import plugins from "../../../static/js/pluginfw/plugin_defs";
+
+import sanitizePathname from "../../utils/sanitizePathname";
+
+import {enableAdminUITests, root} from "../../utils/Settings";
+import {Presession} from "../../models/Presession";
// Returns all *.js files under specDir (recursively) as relative paths to specDir, using '/'
// instead of path.sep to separate pathname components.
const findSpecs = async (specDir) => {
@@ -29,16 +32,17 @@ const findSpecs = async (specDir) => {
return specs;
};
-exports.expressPreSession = async (hookName, {app}) => {
+export const expressPreSession = async (hookName, {app}) => {
app.get('/tests/frontend/frontendTestSpecs.json', (req, res, next) => {
(async () => {
const modules = [];
await Promise.all(Object.entries(plugins.plugins).map(async ([plugin, def]) => {
- let {package: {path: pluginPath}} = def;
+ const mappedDef = def as Presession;
+ let {package: {path: pluginPath}} = mappedDef;
if (!pluginPath.endsWith(path.sep)) pluginPath += path.sep;
const specDir = `${plugin === 'ep_etherpad-lite' ? '' : 'static/'}tests/frontend/specs`;
for (const spec of await findSpecs(path.join(pluginPath, specDir))) {
- if (plugin === 'ep_etherpad-lite' && !settings.enableAdminUITests &&
+ if (plugin === 'ep_etherpad-lite' && !enableAdminUITests &&
spec.startsWith('admin')) continue;
modules.push(`${plugin}/${specDir}/${spec.replace(/\.js$/, '')}`);
}
@@ -57,7 +61,7 @@ exports.expressPreSession = async (hookName, {app}) => {
})().catch((err) => next(err || new Error(err)));
});
- const rootTestFolder = path.join(settings.root, 'src/tests/frontend/');
+ const rootTestFolder = path.join(root, 'src/tests/frontend/');
app.get('/tests/frontend/index.html', (req, res) => {
res.redirect(['./', ...req.url.split('?').slice(1)].join('?'));
diff --git a/src/node/hooks/express/webaccess.js b/src/node/hooks/express/webaccess.ts
similarity index 85%
rename from src/node/hooks/express/webaccess.js
rename to src/node/hooks/express/webaccess.ts
index 81ed69b0748..58ecdace2f0 100644
--- a/src/node/hooks/express/webaccess.js
+++ b/src/node/hooks/express/webaccess.ts
@@ -1,12 +1,17 @@
'use strict';
-const assert = require('assert').strict;
-const log4js = require('log4js');
-const httpLogger = log4js.getLogger('http');
-const settings = require('../../utils/Settings');
-const hooks = require('../../../static/js/pluginfw/hooks');
-const readOnlyManager = require('../../db/ReadOnlyManager');
+import {strict as assert} from "assert";
+
+import log4js from "log4js";
+
+import {requireAuthentication, requireAuthorization, setUsers, users} from "../../utils/Settings";
+
+import hooks from "../../../static/js/pluginfw/hooks";
+import {getPadId, isReadOnlyId} from "../../db/ReadOnlyManager";
+import {UserIndexedModel} from "../../models/UserIndexedModel";
+
+const httpLogger = log4js.getLogger('http');
hooks.deprecationNotices.authFailure = 'use the authnFailure and authzFailure hooks instead';
// Promisified wrapper around hooks.aCallFirst.
@@ -17,7 +22,7 @@ const aCallFirst = (hookName, context, pred = null) => new Promise((resolve, rej
const aCallFirst0 =
async (hookName, context, pred = null) => (await aCallFirst(hookName, context, pred))[0];
-exports.normalizeAuthzLevel = (level) => {
+export const normalizeAuthzLevel = (level) => {
if (!level) return false;
switch (level) {
case true:
@@ -32,20 +37,20 @@ exports.normalizeAuthzLevel = (level) => {
return false;
};
-exports.userCanModify = (padId, req) => {
- if (readOnlyManager.isReadOnlyId(padId)) return false;
- if (!settings.requireAuthentication) return true;
- const {session: {user} = {}} = req;
+export const userCanModify = (padId, req) => {
+ if (isReadOnlyId(padId)) return false;
+ if (!requireAuthentication) return true;
+ const {session: {user} = {}}:SessionSocketModel = req;
if (!user || user.readOnly) return false;
assert(user.padAuthorizations); // This is populated even if !settings.requireAuthorization.
- const level = exports.normalizeAuthzLevel(user.padAuthorizations[padId]);
+ const level = normalizeAuthzLevel(user.padAuthorizations[padId]);
return level && level !== 'readOnly';
};
// Exported so that tests can set this to 0 to avoid unnecessary test slowness.
-exports.authnFailureDelayMs = 1000;
+export const authnFailureDelayMs = 1000;
-const checkAccess = async (req, res, next) => {
+export const checkAccess = async (req, res, next) => {
const requireAdmin = req.path.toLowerCase().startsWith('/admin');
// ///////////////////////////////////////////////////////////////////////////////////////////////
@@ -88,16 +93,16 @@ const checkAccess = async (req, res, next) => {
// authentication is checked and once after (if settings.requireAuthorization is true).
const authorize = async () => {
const grant = async (level) => {
- level = exports.normalizeAuthzLevel(level);
+ level = normalizeAuthzLevel(level);
if (!level) return false;
const user = req.session.user;
if (user == null) return true; // This will happen if authentication is not required.
const encodedPadId = (req.path.match(/^\/p\/([^/]*)/) || [])[1];
if (encodedPadId == null) return true;
let padId = decodeURIComponent(encodedPadId);
- if (readOnlyManager.isReadOnlyId(padId)) {
+ if (isReadOnlyId(padId)) {
// pad is read-only, first get the real pad ID
- padId = await readOnlyManager.getPadId(padId);
+ padId = await getPadId(padId);
if (padId == null) return false;
}
// The user was granted access to a pad. Remember the authorization level in the user's
@@ -108,11 +113,11 @@ const checkAccess = async (req, res, next) => {
};
const isAuthenticated = req.session && req.session.user;
if (isAuthenticated && req.session.user.is_admin) return await grant('create');
- const requireAuthn = requireAdmin || settings.requireAuthentication;
+ const requireAuthn = requireAdmin || requireAuthentication;
if (!requireAuthn) return await grant('create');
if (!isAuthenticated) return await grant(false);
if (requireAdmin && !req.session.user.is_admin) return await grant(false);
- if (!settings.requireAuthorization) return await grant('create');
+ if (!requireAuthorization) return await grant('create');
return await grant(await aCallFirst0('authorize', {req, res, next, resource: req.path}));
};
@@ -131,8 +136,10 @@ const checkAccess = async (req, res, next) => {
// page).
// ///////////////////////////////////////////////////////////////////////////////////////////////
- if (settings.users == null) settings.users = {};
- const ctx = {req, res, users: settings.users, next};
+ if (users == null) setUsers({});
+ const ctx = {req, res, users: users, next, username: undefined,
+ password: undefined
+ };
// If the HTTP basic auth header is present, extract the username and password so it can be given
// to authn plugins.
const httpBasicAuth = req.headers.authorization && req.headers.authorization.startsWith('Basic ');
@@ -148,7 +155,7 @@ const checkAccess = async (req, res, next) => {
}
if (!(await aCallFirst0('authenticate', ctx))) {
// Fall back to HTTP basic auth.
- const {[ctx.username]: {password} = {}} = settings.users;
+ const {[ctx.username]: {password} = {password: undefined}}:UserIndexedModel = users;
if (!httpBasicAuth || !ctx.username || password == null || password !== ctx.password) {
httpLogger.info(`Failed authentication from IP ${req.ip}`);
if (await aCallFirst0('authnFailure', {req, res})) return;
@@ -156,14 +163,14 @@ const checkAccess = async (req, res, next) => {
// No plugin handled the authentication failure. Fall back to basic authentication.
res.header('WWW-Authenticate', 'Basic realm="Protected Area"');
// Delay the error response for 1s to slow down brute force attacks.
- await new Promise((resolve) => setTimeout(resolve, exports.authnFailureDelayMs));
+ await new Promise((resolve) => setTimeout(resolve, authnFailureDelayMs));
res.status(401).send('Authentication Required');
return;
}
- settings.users[ctx.username].username = ctx.username;
+ users[ctx.username].username = ctx.username;
// Make a shallow copy so that the password property can be deleted (to prevent it from
// appearing in logs or in the database) without breaking future authentication attempts.
- req.session.user = {...settings.users[ctx.username]};
+ req.session.user = {...users[ctx.username]};
delete req.session.user.password;
}
if (req.session.user == null) {
@@ -190,6 +197,7 @@ const checkAccess = async (req, res, next) => {
* Express middleware to authenticate the user and check authorization. Must be installed after the
* express-session middleware.
*/
-exports.checkAccess = (req, res, next) => {
+// FIXME why same method twice?
+export const checkAccess2 = (req, res, next) => {
checkAccess(req, res, next).catch((err) => next(err || new Error(err)));
};
diff --git a/src/node/hooks/i18n.js b/src/node/hooks/i18n.ts
similarity index 79%
rename from src/node/hooks/i18n.js
rename to src/node/hooks/i18n.ts
index c54348867c8..f6bf38f7009 100644
--- a/src/node/hooks/i18n.js
+++ b/src/node/hooks/i18n.ts
@@ -1,12 +1,13 @@
'use strict';
-const languages = require('languages4translatewiki');
-const fs = require('fs');
-const path = require('path');
-const _ = require('underscore');
-const pluginDefs = require('../../static/js/pluginfw/plugin_defs.js');
-const existsSync = require('../utils/path_exists');
-const settings = require('../utils/Settings');
+import languages from 'languages4translatewiki';
+import fs from 'fs';
+import path from 'path';
+import _ from 'underscore';
+import pluginDefs from '../../static/js/pluginfw/plugin_defs.js';
+import {check} from '../utils/path_exists';
+import {customLocaleStrings, maxAge, root} from '../utils/Settings';
+import {Presession} from "../models/Presession";
// returns all existing messages merged together and grouped by langcode
// {es: {"foo": "string"}, en:...}
@@ -17,7 +18,7 @@ const getAllLocales = () => {
// into `locales2paths` (files from various dirs are grouped by lang code)
// (only json files with valid language code as name)
const extractLangs = (dir) => {
- if (!existsSync(dir)) return;
+ if (!check(dir)) return;
let stat = fs.lstatSync(dir);
if (!stat.isDirectory() || stat.isSymbolicLink()) return;
@@ -37,13 +38,14 @@ const getAllLocales = () => {
};
// add core supported languages first
- extractLangs(path.join(settings.root, 'src/locales'));
+ extractLangs(path.join(root, 'src/locales'));
// add plugins languages (if any)
- for (const {package: {path: pluginPath}} of Object.values(pluginDefs.plugins)) {
+ for (const val of Object.values(pluginDefs.plugins)) {
+ const pluginPath:Presession = val as Presession
// plugin locales should overwrite etherpad's core locales
- if (pluginPath.endsWith('/ep_etherpad-lite') === true) continue;
- extractLangs(path.join(pluginPath, 'locales'));
+ if (pluginPath.package.path.endsWith('/ep_etherpad-lite') === true) continue;
+ extractLangs(path.join(pluginPath.package.path, 'locales'));
}
// Build a locale index (merge all locale data other than user-supplied overrides)
@@ -68,9 +70,9 @@ const getAllLocales = () => {
const wrongFormatErr = Error(
'customLocaleStrings in wrong format. See documentation ' +
'for Customization for Administrators, under Localization.');
- if (settings.customLocaleStrings) {
- if (typeof settings.customLocaleStrings !== 'object') throw wrongFormatErr;
- _.each(settings.customLocaleStrings, (overrides, langcode) => {
+ if (customLocaleStrings) {
+ if (typeof customLocaleStrings !== 'object') throw wrongFormatErr;
+ _.each(customLocaleStrings, (overrides, langcode) => {
if (typeof overrides !== 'object') throw wrongFormatErr;
_.each(overrides, (localeString, key) => {
if (typeof localeString !== 'string') throw wrongFormatErr;
@@ -112,7 +114,7 @@ exports.expressPreSession = async (hookName, {app}) => {
// works with /locale/en and /locale/en.json requests
const locale = req.params.locale.split('.')[0];
if (Object.prototype.hasOwnProperty.call(exports.availableLangs, locale)) {
- res.setHeader('Cache-Control', `public, max-age=${settings.maxAge}`);
+ res.setHeader('Cache-Control', `public, max-age=${maxAge}`);
res.setHeader('Content-Type', 'application/json; charset=utf-8');
res.send(`{"${locale}":${JSON.stringify(locales[locale])}}`);
} else {
@@ -121,7 +123,7 @@ exports.expressPreSession = async (hookName, {app}) => {
});
app.get('/locales.json', (req, res) => {
- res.setHeader('Cache-Control', `public, max-age=${settings.maxAge}`);
+ res.setHeader('Cache-Control', `public, max-age=${maxAge}`);
res.setHeader('Content-Type', 'application/json; charset=utf-8');
res.send(localeIndex);
});
diff --git a/src/node/models/CMDOptions.ts b/src/node/models/CMDOptions.ts
new file mode 100644
index 00000000000..925170e1d32
--- /dev/null
+++ b/src/node/models/CMDOptions.ts
@@ -0,0 +1,11 @@
+export type CMDOptions = {
+ cwd?: string,
+ stdio?: string|any[],
+ env?: NodeJS.ProcessEnv
+}
+
+export type CMDPromise = {
+ stdout: string,
+ stderr: string,
+ child: any
+}
diff --git a/src/node/models/LogLevel.ts b/src/node/models/LogLevel.ts
new file mode 100644
index 00000000000..bd007c23f22
--- /dev/null
+++ b/src/node/models/LogLevel.ts
@@ -0,0 +1 @@
+export type LogLevel = "DEBUG"|"INFO"|"WARN"|"ERROR"
diff --git a/src/node/models/PadDiffModel.ts b/src/node/models/PadDiffModel.ts
new file mode 100644
index 00000000000..c201b1fb4dc
--- /dev/null
+++ b/src/node/models/PadDiffModel.ts
@@ -0,0 +1,3 @@
+export type PadDiffModel = {
+ _authors: any[]
+}
diff --git a/src/node/models/Presession.ts b/src/node/models/Presession.ts
new file mode 100644
index 00000000000..bd8146bc340
--- /dev/null
+++ b/src/node/models/Presession.ts
@@ -0,0 +1,5 @@
+export type Presession = {
+ package:{
+ path: string,
+ }
+}
diff --git a/src/node/models/SessionSocketModel.ts b/src/node/models/SessionSocketModel.ts
index d2713d11dc7..ff0c730aa0f 100644
--- a/src/node/models/SessionSocketModel.ts
+++ b/src/node/models/SessionSocketModel.ts
@@ -3,6 +3,8 @@ type SessionSocketModel = {
user?: {
username?: string,
is_admin?: boolean
+ readOnly?: boolean,
+ padAuthorizations?: any
}
}
}
diff --git a/src/node/models/UserIndexedModel.ts b/src/node/models/UserIndexedModel.ts
new file mode 100644
index 00000000000..0c808a41b69
--- /dev/null
+++ b/src/node/models/UserIndexedModel.ts
@@ -0,0 +1,5 @@
+export type UserIndexedModel = {
+ [key: string]: {
+ password?: string|undefined,
+ }
+}
diff --git a/src/node/server.ts b/src/node/server.ts
index cc23c7b358a..2797c8d740c 100644
--- a/src/node/server.ts
+++ b/src/node/server.ts
@@ -203,11 +203,13 @@ export const stop = async () => {
} catch (err) {
logger.error('Error occurred while stopping Etherpad');
state = State.STATE_TRANSITION_FAILED;
+ // @ts-ignore
stopDoneGate.resolve();
return await exit(err);
}
logger.info('Etherpad stopped');
state = State.STOPPED;
+ // @ts-ignore
stopDoneGate.resolve();
};
diff --git a/src/node/utils/Abiword.js b/src/node/utils/Abiword.ts
similarity index 80%
rename from src/node/utils/Abiword.js
rename to src/node/utils/Abiword.ts
index 1ed487ae14a..b83fc6a3d1e 100644
--- a/src/node/utils/Abiword.js
+++ b/src/node/utils/Abiword.ts
@@ -19,20 +19,21 @@
* limitations under the License.
*/
-const spawn = require('child_process').spawn;
-const async = require('async');
-const settings = require('./Settings');
-const os = require('os');
+import {spawn} from "child_process";
+
+import async from 'async';
+import {abiword} from './Settings';
+import os from 'os';
// on windows we have to spawn a process for each convertion,
// cause the plugin abicommand doesn't exist on this platform
if (os.type().indexOf('Windows') > -1) {
exports.convertFile = async (srcFile, destFile, type) => {
- const abiword = spawn(settings.abiword, [`--to=${destFile}`, srcFile]);
+ const abiword2 = spawn(abiword, [`--to=${destFile}`, srcFile]);
let stdoutBuffer = '';
- abiword.stdout.on('data', (data) => { stdoutBuffer += data.toString(); });
- abiword.stderr.on('data', (data) => { stdoutBuffer += data.toString(); });
- await new Promise((resolve, reject) => {
+ abiword2.stdout.on('data', (data) => { stdoutBuffer += data.toString(); });
+ abiword2.stderr.on('data', (data) => { stdoutBuffer += data.toString(); });
+ await new Promise((resolve, reject) => {
abiword.on('exit', (code) => {
if (code !== 0) return reject(new Error(`Abiword died with exit code ${code}`));
if (stdoutBuffer !== '') {
@@ -46,14 +47,14 @@ if (os.type().indexOf('Windows') > -1) {
// communicate with it via stdin/stdout
// thats much faster, about factor 10
} else {
- let abiword;
+ let abiword2;
let stdoutCallback = null;
const spawnAbiword = () => {
- abiword = spawn(settings.abiword, ['--plugin', 'AbiCommand']);
+ abiword2 = spawn(abiword, ['--plugin', 'AbiCommand']);
let stdoutBuffer = '';
let firstPrompt = true;
- abiword.stderr.on('data', (data) => { stdoutBuffer += data.toString(); });
- abiword.on('exit', (code) => {
+ abiword2.stderr.on('data', (data) => { stdoutBuffer += data.toString(); });
+ abiword2.on('exit', (code) => {
spawnAbiword();
if (stdoutCallback != null) {
stdoutCallback(new Error(`Abiword died with exit code ${code}`));
diff --git a/src/node/utils/AbsolutePaths.js b/src/node/utils/AbsolutePaths.ts
similarity index 94%
rename from src/node/utils/AbsolutePaths.js
rename to src/node/utils/AbsolutePaths.ts
index 73a96bb676d..5356c556496 100644
--- a/src/node/utils/AbsolutePaths.js
+++ b/src/node/utils/AbsolutePaths.ts
@@ -19,9 +19,10 @@
* limitations under the License.
*/
-const log4js = require('log4js');
-const path = require('path');
-const _ = require('underscore');
+import log4js from 'log4js';
+import path from "path";
+
+import _ from "underscore";
const absPathLogger = log4js.getLogger('AbsolutePaths');
@@ -75,7 +76,7 @@ const popIfEndsWith = (stringArray, lastDesiredElements) => {
* @return {string} The identified absolute base path. If such path cannot be
* identified, prints a log and exits the application.
*/
-exports.findEtherpadRoot = () => {
+export const findEtherpadRoot = () => {
if (etherpadRoot != null) {
return etherpadRoot;
}
@@ -131,12 +132,12 @@ exports.findEtherpadRoot = () => {
* it is returned unchanged. Otherwise it is interpreted
* relative to exports.root.
*/
-exports.makeAbsolute = (somePath) => {
+export const makeAbsolute = (somePath) => {
if (path.isAbsolute(somePath)) {
return somePath;
}
- const rewrittenPath = path.join(exports.findEtherpadRoot(), somePath);
+ const rewrittenPath = path.join(findEtherpadRoot(), somePath);
absPathLogger.debug(`Relative path "${somePath}" can be rewritten to "${rewrittenPath}"`);
return rewrittenPath;
@@ -150,7 +151,7 @@ exports.makeAbsolute = (somePath) => {
* a subdirectory of the base one
* @return {boolean}
*/
-exports.isSubdir = (parent, arbitraryDir) => {
+export const isSubdir = (parent, arbitraryDir) => {
// modified from: https://stackoverflow.com/questions/37521893/determine-if-a-path-is-subdirectory-of-another-in-node-js#45242825
const relative = path.relative(parent, arbitraryDir);
const isSubdir = !!relative && !relative.startsWith('..') && !path.isAbsolute(relative);
diff --git a/src/node/utils/Cli.js b/src/node/utils/Cli.ts
similarity index 96%
rename from src/node/utils/Cli.js
rename to src/node/utils/Cli.ts
index a5cdee83af5..946fd66ca99 100644
--- a/src/node/utils/Cli.js
+++ b/src/node/utils/Cli.ts
@@ -21,9 +21,8 @@
*/
// An object containing the parsed command-line options
-exports.argv = {};
+export const argv = process.argv.slice(2);
-const argv = process.argv.slice(2);
let arg, prevArg;
// Loop through args
diff --git a/src/node/utils/ExportEtherpad.js b/src/node/utils/ExportEtherpad.ts
similarity index 84%
rename from src/node/utils/ExportEtherpad.js
rename to src/node/utils/ExportEtherpad.ts
index e20739ad3ef..d548590bdb2 100644
--- a/src/node/utils/ExportEtherpad.js
+++ b/src/node/utils/ExportEtherpad.ts
@@ -14,17 +14,20 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+import {Stream} from "./Stream";
-const Stream = require('./Stream');
-const assert = require('assert').strict;
-const authorManager = require('../db/AuthorManager');
-const hooks = require('../../static/js/pluginfw/hooks');
-const padManager = require('../db/PadManager');
+import {strict as assert} from "assert";
-exports.getPadRaw = async (padId, readOnlyId) => {
+import {getAuthor} from "../db/AuthorManager";
+
+import hooks from "../../static/js/pluginfw/hooks";
+
+import {getPad} from "../db/PadManager";
+
+export const getPadRaw = async (padId, readOnlyId) => {
const dstPfx = `pad:${readOnlyId || padId}`;
const [pad, customPrefixes] = await Promise.all([
- padManager.getPad(padId),
+ getPad(padId),
hooks.aCallAll('exportEtherpadAdditionalContent'),
]);
const pluginRecords = await Promise.all(customPrefixes.map(async (customPrefix) => {
@@ -43,7 +46,7 @@ exports.getPadRaw = async (padId, readOnlyId) => {
const records = (function* () {
for (const authorId of pad.getAllAuthors()) {
yield [`globalAuthor:${authorId}`, (async () => {
- const authorEntry = await authorManager.getAuthor(authorId);
+ const authorEntry = await getAuthor(authorId);
if (!authorEntry) return undefined; // Becomes unset when converted to JSON.
if (authorEntry.padIDs) authorEntry.padIDs = readOnlyId || padId;
return authorEntry;
diff --git a/src/node/utils/ExportHelper.js b/src/node/utils/ExportHelper.ts
similarity index 85%
rename from src/node/utils/ExportHelper.js
rename to src/node/utils/ExportHelper.ts
index 7962476e8a1..b4a5765eed6 100644
--- a/src/node/utils/ExportHelper.js
+++ b/src/node/utils/ExportHelper.ts
@@ -19,11 +19,10 @@
* limitations under the License.
*/
-const AttributeMap = require('../../static/js/AttributeMap');
-const Changeset = require('../../static/js/Changeset');
+import AttributeMap from '../../static/js/AttributeMap';
+import Changeset from '../../static/js/Changeset';
-exports.getPadPlainText = (pad, revNum) => {
- const _analyzeLine = exports._analyzeLine;
+export const getPadPlainText = (pad, revNum) => {
const atext = ((revNum !== undefined) ? pad.getInternalRevisionAText(revNum) : pad.atext);
const textLines = atext.text.slice(0, -1).split('\n');
const attribLines = Changeset.splitAttributionLines(atext.attribs, atext.text);
@@ -45,8 +44,14 @@ exports.getPadPlainText = (pad, revNum) => {
};
-exports._analyzeLine = (text, aline, apool) => {
- const line = {};
+export const _analyzeLine = (text, aline, apool) => {
+ const line = {
+ listLevel: undefined,
+ text: undefined,
+ listTypeName: undefined,
+ aline: undefined,
+ start: undefined
+ };
// identify list
let lineMarker = 0;
@@ -81,5 +86,5 @@ exports._analyzeLine = (text, aline, apool) => {
};
-exports._encodeWhitespace =
+export const _encodeWhitespace =
(s) => s.replace(/[^\x21-\x7E\s\t\n\r]/gu, (c) => `${c.codePointAt(0)};`);
diff --git a/src/node/utils/ExportHtml.js b/src/node/utils/ExportHtml.ts
similarity index 95%
rename from src/node/utils/ExportHtml.js
rename to src/node/utils/ExportHtml.ts
index d14f40e6e7b..c8a7d6884d6 100644
--- a/src/node/utils/ExportHtml.js
+++ b/src/node/utils/ExportHtml.ts
@@ -15,16 +15,19 @@
* limitations under the License.
*/
-const Changeset = require('../../static/js/Changeset');
-const attributes = require('../../static/js/attributes');
-const padManager = require('../db/PadManager');
-const _ = require('underscore');
-const Security = require('../../static/js/security');
-const hooks = require('../../static/js/pluginfw/hooks');
-const eejs = require('../eejs');
-const _analyzeLine = require('./ExportHelper')._analyzeLine;
-const _encodeWhitespace = require('./ExportHelper')._encodeWhitespace;
-const padutils = require('../../static/js/pad_utils').padutils;
+import Changeset from '../../static/js/Changeset';
+import attributes from "../../static/js/attributes";
+
+import {getPad} from "../db/PadManager";
+
+import _ from "underscore";
+
+import Security from '../../static/js/security';
+import hooks from '../../static/js/pluginfw/hooks';
+import {required} from '../eejs';
+import {_analyzeLine, _encodeWhitespace} from "./ExportHelper";
+
+import {padutils} from "../../static/js/pad_utils";
const getPadHTML = async (pad, revNum) => {
let atext = pad.atext;
@@ -38,7 +41,7 @@ const getPadHTML = async (pad, revNum) => {
return await getHTMLFromAtext(pad, atext);
};
-const getHTMLFromAtext = async (pad, atext, authorColors) => {
+export const getHTMLFromAtext = async (pad, atext, authorColors?) => {
const apool = pad.apool();
const textLines = atext.text.slice(0, -1).split('\n');
const attribLines = Changeset.splitAttributionLines(atext.attribs, atext.text);
@@ -456,8 +459,8 @@ const getHTMLFromAtext = async (pad, atext, authorColors) => {
return pieces.join('');
};
-exports.getPadHTMLDocument = async (padId, revNum, readOnlyId) => {
- const pad = await padManager.getPad(padId);
+export const getPadHTMLDocument = async (padId, revNum, readOnlyId?) => {
+ const pad = await getPad(padId);
// Include some Styles into the Head for Export
let stylesForExportCSS = '';
@@ -472,7 +475,7 @@ exports.getPadHTMLDocument = async (padId, revNum, readOnlyId) => {
html += hookHtml;
}
- return eejs.require('ep_etherpad-lite/templates/export_html.html', {
+ return required('ep_etherpad-lite/templates/export_html.html', {
body: html,
padId: Security.escapeHTML(readOnlyId || padId),
extraCSS: stylesForExportCSS,
@@ -525,7 +528,4 @@ const _processSpaces = (s) => {
}
}
return parts.join('');
-};
-
-exports.getPadHTML = getPadHTML;
-exports.getHTMLFromAtext = getHTMLFromAtext;
+}
diff --git a/src/node/utils/ExportTxt.js b/src/node/utils/ExportTxt.ts
similarity index 97%
rename from src/node/utils/ExportTxt.js
rename to src/node/utils/ExportTxt.ts
index 9511dd0e7a3..7915725fa6d 100644
--- a/src/node/utils/ExportTxt.js
+++ b/src/node/utils/ExportTxt.ts
@@ -39,7 +39,7 @@ const getPadTXT = async (pad, revNum) => {
// This is different than the functionality provided in ExportHtml as it provides formatting
// functionality that is designed specifically for TXT exports
-const getTXTFromAtext = (pad, atext, authorColors) => {
+export const getTXTFromAtext = (pad, atext, authorColors?) => {
const apool = pad.apool();
const textLines = atext.text.slice(0, -1).split('\n');
const attribLines = Changeset.splitAttributionLines(atext.attribs, atext.text);
@@ -56,7 +56,7 @@ const getTXTFromAtext = (pad, atext, authorColors) => {
});
const getLineTXT = (text, attribs) => {
- const propVals = [false, false, false];
+ const propVals:(boolean|number)[] = [false, false, false];
const ENTER = 1;
const STAY = 2;
const LEAVE = 0;
@@ -256,9 +256,8 @@ const getTXTFromAtext = (pad, atext, authorColors) => {
return pieces.join('');
};
-exports.getTXTFromAtext = getTXTFromAtext;
-exports.getPadTXTDocument = async (padId, revNum) => {
+export const getPadTXTDocument = async (padId, revNum) => {
const pad = await padManager.getPad(padId);
return getPadTXT(pad, revNum);
};
diff --git a/src/node/utils/ImportEtherpad.js b/src/node/utils/ImportEtherpad.ts
similarity index 86%
rename from src/node/utils/ImportEtherpad.js
rename to src/node/utils/ImportEtherpad.ts
index da7e750ffb5..09dca8ecdca 100644
--- a/src/node/utils/ImportEtherpad.js
+++ b/src/node/utils/ImportEtherpad.ts
@@ -16,19 +16,21 @@
* limitations under the License.
*/
-const AttributePool = require('../../static/js/AttributePool');
-const {Pad} = require('../db/Pad');
-const Stream = require('./Stream');
-const authorManager = require('../db/AuthorManager');
-const db = require('../db/DB');
-const hooks = require('../../static/js/pluginfw/hooks');
-const log4js = require('log4js');
-const supportedElems = require('../../static/js/contentcollector').supportedElems;
-const ueberdb = require('ueberdb2');
+import {AttributePool} from '../../static/js/AttributePool';
+import {Pad} from '../db/Pad';
+import {Stream} from './Stream';
+import {addPad, doesAuthorExist} from '../db/AuthorManager';
+import {db} from '../db/DB';
+import hooks from '../../static/js/pluginfw/hooks';
+import log4js from "log4js";
+
+import {supportedElems} from "../../static/js/contentcollector";
+
+import ueberdb from 'ueberdb2';
const logger = log4js.getLogger('ImportEtherpad');
-exports.setPadRaw = async (padId, r, authorId = '') => {
+export const setPadRaw = async (padId, r, authorId = '') => {
const records = JSON.parse(r);
// get supported block Elements from plugins, we will use this later.
@@ -69,7 +71,7 @@ exports.setPadRaw = async (padId, r, authorId = '') => {
throw new TypeError('globalAuthor padIDs subkey is not a string');
}
checkOriginalPadId(value.padIDs);
- if (await authorManager.doesAuthorExist(id)) {
+ if (await doesAuthorExist(id)) {
existingAuthors.add(id);
return;
}
@@ -115,7 +117,7 @@ exports.setPadRaw = async (padId, r, authorId = '') => {
const writeOps = (function* () {
for (const [k, v] of data) yield db.set(k, v);
- for (const a of existingAuthors) yield authorManager.addPad(a, padId);
+ for (const a of existingAuthors) yield addPad(a as string, padId);
})();
for (const op of new Stream(writeOps).batch(100).buffer(99)) await op;
};
diff --git a/src/node/utils/ImportHtml.js b/src/node/utils/ImportHtml.ts
similarity index 92%
rename from src/node/utils/ImportHtml.js
rename to src/node/utils/ImportHtml.ts
index d7b2172b057..2e5de910aff 100644
--- a/src/node/utils/ImportHtml.js
+++ b/src/node/utils/ImportHtml.ts
@@ -15,15 +15,15 @@
* limitations under the License.
*/
-const log4js = require('log4js');
-const Changeset = require('../../static/js/Changeset');
-const contentcollector = require('../../static/js/contentcollector');
-const jsdom = require('jsdom');
+import log4js from 'log4js';
+import Changeset from '../../static/js/Changeset';
+import contentcollector from '../../static/js/contentcollector';
+import jsdom from 'jsdom';
const apiLogger = log4js.getLogger('ImportHtml');
let processor;
-exports.setPadHTML = async (pad, html, authorId = '') => {
+export const setPadHTML = async (pad, html, authorId = '') => {
if (processor == null) {
const [{rehype}, {default: minifyWhitespace}] =
await Promise.all([import('rehype'), import('rehype-minify-whitespace')]);
@@ -90,4 +90,4 @@ exports.setPadHTML = async (pad, html, authorId = '') => {
apiLogger.debug(`The changeset: ${theChangeset}`);
await pad.setText('\n', authorId);
await pad.appendRevision(theChangeset, authorId);
-};
+}
diff --git a/src/node/utils/LibreOffice.js b/src/node/utils/LibreOffice.ts
similarity index 91%
rename from src/node/utils/LibreOffice.js
rename to src/node/utils/LibreOffice.ts
index 33920919461..dddaf071db9 100644
--- a/src/node/utils/LibreOffice.js
+++ b/src/node/utils/LibreOffice.ts
@@ -17,20 +17,23 @@
* limitations under the License.
*/
-const async = require('async');
-const fs = require('fs').promises;
-const log4js = require('log4js');
-const os = require('os');
-const path = require('path');
-const runCmd = require('./run_cmd');
-const settings = require('./Settings');
+import async from 'async';
+import log4js from 'log4js';
+import {promises as fs} from "fs";
+
+import os from 'os';
+import path from "path";
+
+import {exportCMD} from "./run_cmd";
+
+import {soffice} from "./Settings";
const logger = log4js.getLogger('LibreOffice');
const doConvertTask = async (task) => {
const tmpDir = os.tmpdir();
- const p = runCmd([
- settings.soffice,
+ const p = await exportCMD([
+ soffice,
'--headless',
'--invisible',
'--nologo',
@@ -81,7 +84,7 @@ const queue = async.queue(doConvertTask, 1);
* @param {String} type The type to convert into
* @param {Function} callback Standard callback function
*/
-exports.convertFile = async (srcFile, destFile, type) => {
+export const convertFile = async (srcFile, destFile, type) => {
// Used for the moving of the file, not the conversion
const fileExtension = type;
diff --git a/src/node/utils/Minify.js b/src/node/utils/Minify.ts
similarity index 91%
rename from src/node/utils/Minify.js
rename to src/node/utils/Minify.ts
index 2e8a2d960fc..03a7a403e9b 100644
--- a/src/node/utils/Minify.js
+++ b/src/node/utils/Minify.ts
@@ -21,21 +21,28 @@
* limitations under the License.
*/
-const settings = require('./Settings');
-const fs = require('fs').promises;
-const path = require('path');
-const plugins = require('../../static/js/pluginfw/plugin_defs');
-const RequireKernel = require('etherpad-require-kernel');
-const mime = require('mime-types');
-const Threads = require('threads');
-const log4js = require('log4js');
+import {maxAge, root} from './Settings';
+import {promises as fs} from "fs";
+
+import path from "path";
+
+import plugins from "../../static/js/pluginfw/plugin_defs";
+
+import RequireKernel from "etherpad-require-kernel";
+
+import mime from "mime-types";
+
+import Threads from "threads";
+
+import log4js from "log4js";
+
const sanitizePathname = require('./sanitizePathname');
const logger = log4js.getLogger('Minify');
-const ROOT_DIR = path.join(settings.root, 'src/static/');
+const ROOT_DIR = path.join(root, 'src/static/');
-const threadsPool = new Threads.Pool(() => Threads.spawn(new Threads.Worker('./MinifyWorker')), 2);
+const threadsPool = Threads.Pool(() => Threads.spawn(new Threads.Worker('./MinifyWorker')), 2);
const LIBRARY_WHITELIST = [
'async',
@@ -89,7 +96,7 @@ const requestURI = async (url, method, headers) => {
return await p;
};
-const requestURIs = (locations, method, headers, callback) => {
+export const requestURIs = (locations, method, headers, callback) => {
Promise.all(locations.map(async (loc) => {
try {
return await requestURI(loc, method, headers);
@@ -176,10 +183,10 @@ const minify = async (req, res) => {
date.setMilliseconds(0);
res.setHeader('last-modified', date.toUTCString());
res.setHeader('date', (new Date()).toUTCString());
- if (settings.maxAge !== undefined) {
- const expiresDate = new Date(Date.now() + settings.maxAge * 1000);
+ if (maxAge !== undefined) {
+ const expiresDate = new Date(Date.now() + maxAge * 1000);
res.setHeader('expires', expiresDate.toUTCString());
- res.setHeader('cache-control', `max-age=${settings.maxAge}`);
+ res.setHeader('cache-control', `max-age=${maxAge}`);
}
}
@@ -271,7 +278,7 @@ const requireDefinition = () => `var require = ${RequireKernel.kernelSource};\n`
const getFileCompressed = async (filename, contentType) => {
let content = await getFile(filename);
- if (!content || !settings.minify) {
+ if (!content || !minify) {
return content;
} else if (contentType === 'application/javascript') {
return await new Promise((resolve) => {
@@ -317,10 +324,8 @@ const getFile = async (filename) => {
return await fs.readFile(path.resolve(ROOT_DIR, filename));
};
-exports.minify = (req, res, next) => minify(req, res).catch((err) => next(err || new Error(err)));
-
-exports.requestURIs = requestURIs;
+export const minifyExp = (req, res, next) => minify(req, res).catch((err) => next(err || new Error(err)));
-exports.shutdown = async (hookName, context) => {
+export const shutdown = async (hookName, context) => {
await threadsPool.terminate();
};
diff --git a/src/node/utils/MinifyWorker.js b/src/node/utils/MinifyWorker.ts
similarity index 80%
rename from src/node/utils/MinifyWorker.js
rename to src/node/utils/MinifyWorker.ts
index 364ecc96cca..f5307cc9a9d 100644
--- a/src/node/utils/MinifyWorker.js
+++ b/src/node/utils/MinifyWorker.ts
@@ -3,11 +3,14 @@
* Worker thread to minify JS & CSS files out of the main NodeJS thread
*/
-const CleanCSS = require('clean-css');
-const Terser = require('terser');
-const fsp = require('fs').promises;
-const path = require('path');
-const Threads = require('threads');
+import CleanCSS from 'clean-css';
+import Terser from "terser";
+
+import {promises as fsp} from "fs";
+
+import path from "path";
+
+import Threads from "threads";
const compressJS = (content) => Terser.minify(content);
diff --git a/src/node/utils/Settings.ts b/src/node/utils/Settings.ts
index 0d5f1e53c01..2813e50309c 100644
--- a/src/node/utils/Settings.ts
+++ b/src/node/utils/Settings.ts
@@ -27,6 +27,8 @@
* limitations under the License.
*/
+import exp from "constants";
+
const absolutePaths = require('./AbsolutePaths');
const deepEqual = require('fast-deep-equal/es6');
import fs from 'fs';
@@ -35,6 +37,7 @@ import path from 'path';
const argv = require('./Cli').argv;
import jsonminify from 'jsonminify';
import log4js from 'log4js';
+import {LogLevel} from "../models/LogLevel";
const randomString = require('./randomstring');
const suppressDisableMsg = ' -- To suppress these warning messages change ' +
'suppressErrorsInPadText to true in your settings.json\n';
@@ -70,7 +73,7 @@ initLogging(defaultLogLevel, defaultLogConfig());
/* Root path of the installation */
export const root = absolutePaths.findEtherpadRoot();
logger.info('All relative paths will be interpreted relative to the identified ' +
- `Etherpad base dir: ${exports.root}`);
+ `Etherpad base dir: ${root}`);
export const settingsFilename = absolutePaths.makeAbsolute(argv.settings || 'settings.json');
export const credentialsFilename = absolutePaths.makeAbsolute(argv.credentials || 'credentials.json');
@@ -93,14 +96,14 @@ export const favicon = null;
* Initialized to null, so we can spot an old configuration file and invite the
* user to update it before falling back to the default.
*/
-export const skinName = null;
+export let skinName = null;
export const skinVariants = 'super-light-toolbar super-light-editor light-background';
/**
* The IP ep-lite should listen to
*/
-export const ip = '0.0.0.0';
+export const ip:String = '0.0.0.0';
/**
* The Port ep-lite should listen to
@@ -118,6 +121,12 @@ export const suppressErrorsInPadText = false;
*/
export const ssl = false;
+export const sslKeys = {
+ cert: undefined,
+ key: undefined,
+ ca: undefined,
+}
+
/**
* socket.io transport methods
**/
@@ -142,12 +151,12 @@ export const dbType = 'dirty';
/**
* This setting is passed with dbType to ueberDB to set up the database
*/
-export const dbSettings = {filename: path.join(exports.root, 'var/dirty.db')};
+export const dbSettings = {filename: path.join(root, 'var/dirty.db')};
/**
* The default Text of a new pad
*/
-export const defaultPadText = [
+export let defaultPadText = [
'Welcome to Etherpad!',
'',
'This pad text is synchronized as you type, so that everyone viewing this page sees the same ' +
@@ -244,12 +253,12 @@ export const minify = true;
/**
* The path of the abiword executable
*/
-export const abiword = null;
+export let abiword = null;
/**
* The path of the libreoffice executable
*/
-export const soffice = null;
+export let soffice = null;
/**
* The path of the tidy executable
@@ -264,7 +273,7 @@ export const allowUnknownFileEnds = true;
/**
* The log level of log4js
*/
-export const loglevel = defaultLogLevel;
+export const loglevel:LogLevel = defaultLogLevel;
/**
* Disable IP logging
@@ -299,7 +308,7 @@ export const logconfig = defaultLogConfig();
/*
* Session Key, do not sure this.
*/
-export const sessionKey = false;
+export let sessionKey: string|boolean = false;
/*
* Trust Proxy, whether or not trust the x-forwarded-for header.
@@ -333,7 +342,7 @@ export const cookie = {
*/
export const requireAuthentication = false;
export const requireAuthorization = false;
-export const users = {};
+export let users = {};
/*
* Show settings in admin page, by default it is true
@@ -384,6 +393,10 @@ export const exposeVersion = false;
*/
export const customLocaleStrings = {};
+export const setUsers = (newUsers:any) => {
+ users = newUsers;
+}
+
/*
* From Etherpad 1.8.3 onwards, import and export of pads is always rate
* limited.
@@ -434,7 +447,7 @@ export const enableAdminUITests = false;
// checks if abiword is avaiable
export const abiwordAvailable = () => {
- if (exports.abiword != null) {
+ if (abiword != null) {
return os.type().indexOf('Windows') !== -1 ? 'withoutPDF' : 'yes';
} else {
return 'no';
@@ -442,7 +455,7 @@ export const abiwordAvailable = () => {
};
export const sofficeAvailable = () => {
- if (exports.soffice != null) {
+ if (soffice != null) {
return os.type().indexOf('Windows') !== -1 ? 'withoutPDF' : 'yes';
} else {
return 'no';
@@ -450,7 +463,7 @@ export const sofficeAvailable = () => {
};
export const exportAvailable = () => {
- const abiword = exports.abiwordAvailable();
+ const abiword = abiwordAvailable();
const soffice = sofficeAvailable();
if (abiword === 'no' && soffice === 'no') {
@@ -467,7 +480,7 @@ export const exportAvailable = () => {
export const getGitCommit = () => {
let version = '';
try {
- let rootPath = exports.root;
+ let rootPath = root;
if (fs.lstatSync(`${rootPath}/.git`).isFile()) {
rootPath = fs.readFileSync(`${rootPath}/.git`, 'utf8');
rootPath = rootPath.split(' ').pop().trim();
@@ -735,88 +748,90 @@ export const reloadSettings = () => {
storeSettings(settings);
storeSettings(credentials);
- initLogging(exports.loglevel, exports.logconfig);
+ initLogging(loglevel, logconfig);
- if (!exports.skinName) {
+ if (!skinName) {
logger.warn('No "skinName" parameter found. Please check out settings.json.template and ' +
'update your settings.json. Falling back to the default "colibris".');
- exports.skinName = 'colibris';
+ skinName = 'colibris';
}
// checks if skinName has an acceptable value, otherwise falls back to "colibris"
- if (exports.skinName) {
- const skinBasePath = path.join(exports.root, 'src', 'static', 'skins');
- const countPieces = exports.skinName.split(path.sep).length;
+ if (skinName) {
+ const skinBasePath = path.join(root, 'src', 'static', 'skins');
+ const countPieces = skinName.split(path.sep).length;
if (countPieces !== 1) {
logger.error(`skinName must be the name of a directory under "${skinBasePath}". This is ` +
- `not valid: "${exports.skinName}". Falling back to the default "colibris".`);
+ `not valid: "${skinName}". Falling back to the default "colibris".`);
- exports.skinName = 'colibris';
+ skinName = 'colibris';
}
// informative variable, just for the log messages
- let skinPath = path.join(skinBasePath, exports.skinName);
+ let skinPath = path.join(skinBasePath, skinName);
// what if someone sets skinName == ".." or "."? We catch him!
if (absolutePaths.isSubdir(skinBasePath, skinPath) === false) {
logger.error(`Skin path ${skinPath} must be a subdirectory of ${skinBasePath}. ` +
'Falling back to the default "colibris".');
- exports.skinName = 'colibris';
- skinPath = path.join(skinBasePath, exports.skinName);
+ skinName = 'colibris';
+ skinPath = path.join(skinBasePath, skinName);
}
if (fs.existsSync(skinPath) === false) {
logger.error(`Skin path ${skinPath} does not exist. Falling back to the default "colibris".`);
- exports.skinName = 'colibris';
- skinPath = path.join(skinBasePath, exports.skinName);
+ skinName = 'colibris';
+ skinPath = path.join(skinBasePath, skinName);
}
- logger.info(`Using skin "${exports.skinName}" in dir: ${skinPath}`);
+ logger.info(`Using skin "${skinName}" in dir: ${skinPath}`);
}
- if (exports.abiword) {
+ if (abiword) {
// Check abiword actually exists
- if (exports.abiword != null) {
- fs.exists(exports.abiword, (exists: boolean) => {
+ if (abiword != null) {
+ fs.exists(abiword, (exists: boolean) => {
if (!exists) {
const abiwordError = 'Abiword does not exist at this path, check your settings file.';
- if (!exports.suppressErrorsInPadText) {
- exports.defaultPadText += `\nError: ${abiwordError}${suppressDisableMsg}`;
+ if (!suppressErrorsInPadText) {
+ defaultPadText += `\nError: ${abiwordError}${suppressDisableMsg}`;
}
- logger.error(`${abiwordError} File location: ${exports.abiword}`);
- exports.abiword = null;
+ logger.error(`${abiwordError} File location: ${abiword}`);
+ abiword = null;
}
});
}
}
- if (exports.soffice) {
- fs.exists(exports.soffice, (exists: boolean) => {
+ if (soffice) {
+ fs.exists(soffice, (exists: boolean) => {
if (!exists) {
const sofficeError =
'soffice (libreoffice) does not exist at this path, check your settings file.';
- if (!exports.suppressErrorsInPadText) {
- exports.defaultPadText += `\nError: ${sofficeError}${suppressDisableMsg}`;
+ if (!suppressErrorsInPadText) {
+ defaultPadText += `\nError: ${sofficeError}${suppressDisableMsg}`;
}
- logger.error(`${sofficeError} File location: ${exports.soffice}`);
- exports.soffice = null;
+ logger.error(`${sofficeError} File location: ${soffice}`);
+ soffice = null;
}
});
}
- if (!exports.sessionKey) {
+ if (!sessionKey) {
const sessionkeyFilename = absolutePaths.makeAbsolute(argv.sessionkey || './SESSIONKEY.txt');
try {
- exports.sessionKey = fs.readFileSync(sessionkeyFilename, 'utf8');
+ sessionKey = fs.readFileSync(sessionkeyFilename, 'utf8');
logger.info(`Session key loaded from: ${sessionkeyFilename}`);
} catch (e) {
logger.info(
`Session key file "${sessionkeyFilename}" not found. Creating with random contents.`);
- exports.sessionKey = randomString(32);
- fs.writeFileSync(sessionkeyFilename, exports.sessionKey, 'utf8');
+ sessionKey = randomString(32);
+ // FIXME Check out why this can be string boolean or Array
+ // @ts-ignore
+ fs.writeFileSync(sessionkeyFilename, sessionKey, 'utf8');
}
} else {
logger.warn('Declaring the sessionKey in the settings.json is deprecated. ' +
@@ -825,17 +840,17 @@ export const reloadSettings = () => {
'Interface then you can ignore this message.');
}
- if (exports.dbType === 'dirty') {
+ if (dbType === 'dirty') {
const dirtyWarning = 'DirtyDB is used. This is not recommended for production.';
- if (!exports.suppressErrorsInPadText) {
- exports.defaultPadText += `\nWarning: ${dirtyWarning}${suppressDisableMsg}`;
+ if (!suppressErrorsInPadText) {
+ defaultPadText += `\nWarning: ${dirtyWarning}${suppressDisableMsg}`;
}
- exports.dbSettings.filename = absolutePaths.makeAbsolute(exports.dbSettings.filename);
- logger.warn(`${dirtyWarning} File location: ${exports.dbSettings.filename}`);
+ dbSettings.filename = absolutePaths.makeAbsolute(dbSettings.filename);
+ logger.warn(`${dirtyWarning} File location: ${dbSettings.filename}`);
}
- if (exports.ip === '') {
+ if (ip === '') {
// using Unix socket for connectivity
logger.warn('The settings file contains an empty string ("") for the "ip" parameter. The ' +
'"port" parameter will be interpreted as the path to a Unix socket to bind at.');
@@ -852,7 +867,7 @@ export const reloadSettings = () => {
* ACHTUNG: this may prevent caching HTTP proxies to work
* TODO: remove the "?v=randomstring" parameter, and replace with hashed filenames instead
*/
- logger.info(`Random string used for versioning assets: ${exports.randomVersionString}`);
+ logger.info(`Random string used for versioning assets: ${randomVersionString}`);
};
exports.exportedForTestingOnly = {
@@ -860,6 +875,6 @@ exports.exportedForTestingOnly = {
};
// initially load settings
-exports.reloadSettings();
+reloadSettings();
diff --git a/src/node/utils/Stream.js b/src/node/utils/Stream.ts
similarity index 98%
rename from src/node/utils/Stream.js
rename to src/node/utils/Stream.ts
index 611b83b3372..0a083af8493 100644
--- a/src/node/utils/Stream.js
+++ b/src/node/utils/Stream.ts
@@ -4,7 +4,9 @@
* Wrapper around any iterable that adds convenience methods that standard JavaScript iterable
* objects lack.
*/
-class Stream {
+export class Stream {
+ private readonly _iter: any;
+ private _next: null;
/**
* @returns {Stream} A Stream that yields values in the half-open range [start, end).
*/
@@ -130,5 +132,3 @@ class Stream {
*/
[Symbol.iterator]() { return this._iter; }
}
-
-module.exports = Stream;
diff --git a/src/node/utils/TidyHtml.js b/src/node/utils/TidyHtml.ts
similarity index 83%
rename from src/node/utils/TidyHtml.js
rename to src/node/utils/TidyHtml.ts
index 5b48cdbad37..cbedc805652 100644
--- a/src/node/utils/TidyHtml.js
+++ b/src/node/utils/TidyHtml.ts
@@ -3,16 +3,17 @@
* Tidy up the HTML in a given file
*/
-const log4js = require('log4js');
-const settings = require('./Settings');
-const spawn = require('child_process').spawn;
+import log4js from 'log4js';
+import {tidyHtml} from "./Settings";
+
+import {spawn} from "child_process";
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) {
+ if (!tidyHtml) {
logger.debug('tidyHtml has not been configured yet, ignoring tidy request');
return resolve(null);
}
@@ -21,7 +22,7 @@ exports.tidy = (srcFile) => {
// Spawn a new tidy instance that cleans up the file inline
logger.debug(`Tidying ${srcFile}`);
- const tidy = spawn(settings.tidyHtml, ['-modify', srcFile]);
+ const tidy = spawn(tidyHtml, ['-modify', srcFile]);
// Keep track of any error messages
tidy.stderr.on('data', (data) => {
diff --git a/src/node/utils/caching_middleware.js b/src/node/utils/caching_middleware.ts
similarity index 90%
rename from src/node/utils/caching_middleware.js
rename to src/node/utils/caching_middleware.ts
index 3cc4daf271b..93512e1eec1 100644
--- a/src/node/utils/caching_middleware.js
+++ b/src/node/utils/caching_middleware.ts
@@ -16,15 +16,20 @@
* limitations under the License.
*/
-const Buffer = require('buffer').Buffer;
-const fs = require('fs');
-const fsp = fs.promises;
-const path = require('path');
-const zlib = require('zlib');
-const settings = require('./Settings');
-const existsSync = require('./path_exists');
-const util = require('util');
+import {Buffer} from "buffer";
+
+import fs, {Stats} from "fs";
+
+import path from "path";
+
+import {check} from './path_exists'
+import zlib from "zlib";
+
+import {root} from "./Settings";
+
+import util from "util";
+const fsp = fs.promises;
/*
* The crypto module can be absent on reduced node installations.
*
@@ -45,8 +50,8 @@ try {
_crypto = undefined;
}
-let CACHE_DIR = path.join(settings.root, 'var/');
-CACHE_DIR = existsSync(CACHE_DIR) ? CACHE_DIR : undefined;
+let CACHE_DIR = path.join(root, 'var/');
+CACHE_DIR = check(CACHE_DIR) ? CACHE_DIR : undefined;
const responseCache = {};
@@ -78,7 +83,7 @@ if (_crypto) {
should replace this.
*/
-module.exports = class CachingMiddleware {
+export class CachingMiddleware {
handle(req, res, next) {
this._handle(req, res, next).catch((err) => next(err || new Error(err)));
}
@@ -88,8 +93,15 @@ module.exports = class CachingMiddleware {
return next(undefined, req, res);
}
- const oldReq = {};
- const oldRes = {};
+ const oldReq = {
+ method: undefined
+ };
+ const oldRes = {
+ write: undefined,
+ end: undefined,
+ setHeader: undefined,
+ writeHead: undefined
+ };
const supportsGzip =
(req.get('Accept-Encoding') || '').indexOf('gzip') !== -1;
@@ -100,7 +112,7 @@ module.exports = class CachingMiddleware {
const stats = await fsp.stat(`${CACHE_DIR}minified_${cacheKey}`).catch(() => {});
const modifiedSince =
req.headers['if-modified-since'] && new Date(req.headers['if-modified-since']);
- if (stats != null && stats.mtime && responseCache[cacheKey]) {
+ if (stats != null && stats instanceof Object && "mtime" in stats && responseCache[cacheKey]) {
req.headers['if-modified-since'] = stats.mtime.toUTCString();
} else {
delete req.headers['if-modified-since'];
@@ -200,4 +212,4 @@ module.exports = class CachingMiddleware {
next(undefined, req, res);
}
-};
+}
diff --git a/src/node/utils/customError.js b/src/node/utils/customError.ts
similarity index 87%
rename from src/node/utils/customError.js
rename to src/node/utils/customError.ts
index 24ad181e6fa..79cbbd47c04 100644
--- a/src/node/utils/customError.js
+++ b/src/node/utils/customError.ts
@@ -7,7 +7,9 @@
* @class CustomError
* @extends {Error}
*/
-class CustomError extends Error {
+export class CustomError extends Error {
+ code: any;
+ signal: any;
/**
* Creates an instance of CustomError.
* @param {*} message
@@ -20,5 +22,3 @@ class CustomError extends Error {
Error.captureStackTrace(this, this.constructor);
}
}
-
-module.exports = CustomError;
diff --git a/src/node/utils/padDiff.js b/src/node/utils/padDiff.ts
similarity index 94%
rename from src/node/utils/padDiff.js
rename to src/node/utils/padDiff.ts
index 4ab276b4b66..da8ff68770f 100644
--- a/src/node/utils/padDiff.js
+++ b/src/node/utils/padDiff.ts
@@ -1,11 +1,12 @@
'use strict';
-const AttributeMap = require('../../static/js/AttributeMap');
-const Changeset = require('../../static/js/Changeset');
-const attributes = require('../../static/js/attributes');
-const exportHtml = require('./ExportHtml');
+import AttributeMap from '../../static/js/AttributeMap';
+import Changeset from '../../static/js/Changeset';
+import attributes from '../../static/js/attributes';
+import {getHTMLFromAtext} from './ExportHtml';
+import {PadDiffModel} from "ep_etherpad-lite/node/models/PadDiffModel";
-function PadDiff(pad, fromRev, toRev) {
+export const PadDiff = (pad, fromRev, toRev)=> {
// check parameters
if (!pad || !pad.id || !pad.atext || !pad.pool) {
throw new Error('Invalid pad');
@@ -14,10 +15,16 @@ function PadDiff(pad, fromRev, toRev) {
const range = pad.getValidRevisionRange(fromRev, toRev);
if (!range) throw new Error(`Invalid revision range. startRev: ${fromRev} endRev: ${toRev}`);
+ // FIXME How to fix this?
+ // @ts-ignore
this._pad = pad;
+ // @ts-ignore
this._fromRev = range.startRev;
+ // @ts-ignore
this._toRev = range.endRev;
+ // @ts-ignore
this._html = null;
+ // @ts-ignore
this._authors = [];
}
@@ -108,9 +115,11 @@ PadDiff.prototype._getChangesetsInBulk = async function (startRev, count) {
return {changesets, authors};
};
-PadDiff.prototype._addAuthors = function (authors) {
- const self = this;
-
+PadDiff.prototype._addAuthors = (authors)=> {
+ let self: undefined|PadDiffModel = this;
+ if(!self){
+ self = {_authors: []}
+ }
// add to array if not in the array
authors.forEach((author) => {
if (self._authors.indexOf(author) === -1) {
@@ -187,7 +196,7 @@ PadDiff.prototype.getHtml = async function () {
const authorColors = await this._pad.getAllAuthorColors();
// convert the atext to html
- this._html = await exportHtml.getHTMLFromAtext(this._pad, atext, authorColors);
+ this._html = await getHTMLFromAtext(this._pad, atext, authorColors);
return this._html;
};
@@ -198,6 +207,10 @@ PadDiff.prototype.getAuthors = async function () {
if (this._html == null) {
await this.getHtml();
}
+ let self: undefined|PadDiffModel = this;
+ if(!self){
+ self = {_authors: []}
+ }
return self._authors;
};
diff --git a/src/node/utils/path_exists.js b/src/node/utils/path_exists.ts
similarity index 71%
rename from src/node/utils/path_exists.js
rename to src/node/utils/path_exists.ts
index 0b4c8fe94fc..91b6dd12726 100644
--- a/src/node/utils/path_exists.js
+++ b/src/node/utils/path_exists.ts
@@ -1,7 +1,7 @@
'use strict';
-const fs = require('fs');
+import fs from 'fs';
-const check = (path) => {
+export const check = (path) => {
const existsSync = fs.statSync || fs.existsSync || path.existsSync;
let result;
@@ -11,6 +11,4 @@ const check = (path) => {
result = false;
}
return result;
-};
-
-module.exports = check;
+}
diff --git a/src/node/utils/promises.js b/src/node/utils/promises.ts
similarity index 93%
rename from src/node/utils/promises.js
rename to src/node/utils/promises.ts
index bc9f8c2dc06..9ebb07da4c5 100644
--- a/src/node/utils/promises.js
+++ b/src/node/utils/promises.ts
@@ -7,7 +7,7 @@
// `predicate`. Resolves to `undefined` if none of the Promises satisfy `predicate`, or if
// `promises` is empty. If `predicate` is nullish, the truthiness of the resolved value is used as
// the predicate.
-exports.firstSatisfies = (promises, predicate) => {
+export const firstSatisfies = (promises, predicate) => {
if (predicate == null) predicate = (x) => x;
// Transform each original Promise into a Promise that never resolves if the original resolved
@@ -42,7 +42,7 @@ exports.firstSatisfies = (promises, predicate) => {
// `total` is greater than `concurrency`, then `concurrency` Promises will be created right away,
// and each remaining Promise will be created once one of the earlier Promises resolves.) This async
// function resolves once all `total` Promises have resolved.
-exports.timesLimit = async (total, concurrency, promiseCreator) => {
+export const timesLimit = async (total, concurrency, promiseCreator) => {
if (total > 0 && concurrency <= 0) throw new RangeError('concurrency must be positive');
let next = 0;
const addAnother = () => promiseCreator(next++).finally(() => {
@@ -55,11 +55,14 @@ exports.timesLimit = async (total, concurrency, promiseCreator) => {
await Promise.all(promises);
};
+
/**
* An ordinary Promise except the `resolve` and `reject` executor functions are exposed as
* properties.
*/
-class Gate extends Promise {
+//FIXME Why is the constructor diviating from the Promise constructor?
+// @ts-ignore
+export class Gate extends Promise {
// Coax `.then()` into returning an ordinary Promise, not a Gate. See
// https://stackoverflow.com/a/65669070 for the rationale.
static get [Symbol.species]() { return Promise; }
@@ -73,4 +76,3 @@ class Gate extends Promise {
Object.assign(this, props);
}
}
-exports.Gate = Gate;
diff --git a/src/node/utils/randomstring.js b/src/node/utils/randomstring.ts
similarity index 100%
rename from src/node/utils/randomstring.js
rename to src/node/utils/randomstring.ts
diff --git a/src/node/utils/run_cmd.js b/src/node/utils/run_cmd.ts
similarity index 81%
rename from src/node/utils/run_cmd.js
rename to src/node/utils/run_cmd.ts
index bf5515c8466..716e528b4a4 100644
--- a/src/node/utils/run_cmd.js
+++ b/src/node/utils/run_cmd.ts
@@ -1,12 +1,12 @@
'use strict';
-const spawn = require('cross-spawn');
-const log4js = require('log4js');
-const path = require('path');
-const settings = require('./Settings');
-
+import spawn from 'cross-spawn';
+import log4js from 'log4js';
+import path from 'path';
+import {root} from "./Settings";
+import {CMDOptions, CMDPromise} from '../models/CMDOptions'
const logger = log4js.getLogger('runCmd');
-
+import {CustomError} from './customError'
const logLines = (readable, logLineFn) => {
readable.setEncoding('utf8');
// The process won't necessarily write full lines every time -- it might write a part of a line
@@ -69,33 +69,40 @@ const logLines = (readable, logLineFn) => {
* - `stderr`: Similar to `stdout` but for stderr.
* - `child`: The ChildProcess object.
*/
-module.exports = exports = (args, opts = {}) => {
+export const exportCMD: (args: string[], opts:CMDOptions)=>void = async (args, opts = {
+ cwd: undefined,
+ stdio: undefined,
+ env: undefined
+}) => {
logger.debug(`Executing command: ${args.join(' ')}`);
-
- opts = {cwd: settings.root, ...opts};
+ opts = {cwd: root, ...opts};
logger.debug(`cwd: ${opts.cwd}`);
// Log stdout and stderr by default.
const stdio =
Array.isArray(opts.stdio) ? opts.stdio.slice() // Copy to avoid mutating the caller's array.
- : typeof opts.stdio === 'function' ? [null, opts.stdio, opts.stdio]
- : opts.stdio === 'string' ? [null, 'string', 'string']
- : Array(3).fill(opts.stdio);
+ : typeof opts.stdio === 'function' ? [null, opts.stdio, opts.stdio]
+ : opts.stdio === 'string' ? [null, 'string', 'string']
+ : Array(3).fill(opts.stdio);
const cmdLogger = log4js.getLogger(`runCmd|${args[0]}`);
- if (stdio[1] == null) stdio[1] = (line) => cmdLogger.info(line);
- if (stdio[2] == null) stdio[2] = (line) => cmdLogger.error(line);
+ if (stdio[1] == null && stdio instanceof Array) stdio[1] = (line) => cmdLogger.info(line);
+ if (stdio[2] == null && stdio instanceof Array) stdio[2] = (line) => cmdLogger.error(line);
const stdioLoggers = [];
const stdioSaveString = [];
for (const fd of [1, 2]) {
if (typeof stdio[fd] === 'function') {
stdioLoggers[fd] = stdio[fd];
- stdio[fd] = 'pipe';
+ if (stdio instanceof Array)
+ stdio[fd] = 'pipe';
} else if (stdio[fd] === 'string') {
stdioSaveString[fd] = true;
- stdio[fd] = 'pipe';
+ if (stdio instanceof Array)
+ stdio[fd] = 'pipe';
}
}
- opts.stdio = stdio;
+ if (opts.stdio instanceof Array) {
+ opts.stdio = stdio;
+ }
// On Windows the PATH environment var might be spelled "Path".
const pathVarName =
@@ -107,8 +114,8 @@ module.exports = exports = (args, opts = {}) => {
opts.env = {
...env, // Copy env to avoid modifying process.env or the caller's supplied env.
[pathVarName]: [
- path.join(settings.root, 'src', 'node_modules', '.bin'),
- path.join(settings.root, 'node_modules', '.bin'),
+ path.join(root, 'src', 'node_modules', '.bin'),
+ path.join(root, 'node_modules', '.bin'),
...(PATH ? PATH.split(path.delimiter) : []),
].join(path.delimiter),
};
@@ -116,13 +123,15 @@ module.exports = exports = (args, opts = {}) => {
// Create an error object to use in case the process fails. This is done here rather than in the
// process's `exit` handler so that we get a useful stack trace.
- const procFailedErr = new Error();
+ const procFailedErr:CustomError = new CustomError({});
const proc = spawn(args[0], args.slice(1), opts);
const streams = [undefined, proc.stdout, proc.stderr];
let px;
- const p = new Promise((resolve, reject) => { px = {resolve, reject}; });
+ const p = await new Promise((resolve, reject) => {
+ px = {resolve, reject};
+ });
[, p.stdout, p.stderr] = streams;
p.child = proc;
@@ -132,6 +141,8 @@ module.exports = exports = (args, opts = {}) => {
if (stdioLoggers[fd] != null) {
logLines(streams[fd], stdioLoggers[fd]);
} else if (stdioSaveString[fd]) {
+ //FIXME How to solve this?
+ // @ts-ignore
p[[null, 'stdout', 'stderr'][fd]] = stdioStringPromises[fd] = (async () => {
const chunks = [];
for await (const chunk of streams[fd]) chunks.push(chunk);
diff --git a/src/node/utils/sanitizePathname.js b/src/node/utils/sanitizePathname.ts
similarity index 94%
rename from src/node/utils/sanitizePathname.js
rename to src/node/utils/sanitizePathname.ts
index 61b61116661..b9e492661a3 100644
--- a/src/node/utils/sanitizePathname.js
+++ b/src/node/utils/sanitizePathname.ts
@@ -1,10 +1,10 @@
'use strict';
-const path = require('path');
+import path from 'path';
// Normalizes p and ensures that it is a relative path that does not reach outside. See
// https://nvd.nist.gov/vuln/detail/CVE-2015-3297 for additional context.
-module.exports = (p, pathApi = path) => {
+export default (p, pathApi = path) => {
// The documentation for path.normalize() says that it resolves '..' and '.' segments. The word
// "resolve" implies that it examines the filesystem to resolve symbolic links, so 'a/../b' might
// not be the same thing as 'b'. Most path normalization functions from other libraries (e.g.,
@@ -20,4 +20,4 @@ module.exports = (p, pathApi = path) => {
// pathname would not be normalized away before being converted to '../'.
if (pathApi.sep === '\\') p = p.replace(/\\/g, '/');
return p;
-};
+}
diff --git a/src/node/utils/toolbar.js b/src/node/utils/toolbar.ts
similarity index 98%
rename from src/node/utils/toolbar.js
rename to src/node/utils/toolbar.ts
index 40a47687818..57aed942f31 100644
--- a/src/node/utils/toolbar.js
+++ b/src/node/utils/toolbar.ts
@@ -2,7 +2,7 @@
/**
* The Toolbar Module creates and renders the toolbars and buttons
*/
-const _ = require('underscore');
+import _ from 'underscore';
const removeItem = (array, what) => {
let ax;
@@ -12,13 +12,13 @@ const removeItem = (array, what) => {
return array;
};
-const defaultButtonAttributes = (name, overrides) => ({
+const defaultButtonAttributes = (name, overrides?) => ({
command: name,
localizationId: `pad.toolbar.${name}.title`,
class: `buttonicon buttonicon-${name}`,
});
-const tag = (name, attributes, contents) => {
+const tag = (name, attributes, contents?) => {
const aStr = tagAttributes(attributes);
if (_.isString(contents) && contents.length > 0) {
diff --git a/src/package-lock.json b/src/package-lock.json
index 34b69526548..dd27c26e294 100644
--- a/src/package-lock.json
+++ b/src/package-lock.json
@@ -58,6 +58,8 @@
},
"devDependencies": {
"@types/express": "4.17.17",
+ "@types/jquery": "^3.5.16",
+ "@types/js-cookie": "^3.0.3",
"@types/node": "^20.3.1",
"concurrently": "^8.2.0",
"eslint": "^8.14.0",
@@ -1081,6 +1083,21 @@
"@types/unist": "*"
}
},
+ "node_modules/@types/jquery": {
+ "version": "3.5.16",
+ "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.16.tgz",
+ "integrity": "sha512-bsI7y4ZgeMkmpG9OM710RRzDFp+w4P1RGiIt30C1mSBT+ExCleeh4HObwgArnDFELmRrOpXgSYN9VF1hj+f1lw==",
+ "dev": true,
+ "dependencies": {
+ "@types/sizzle": "*"
+ }
+ },
+ "node_modules/@types/js-cookie": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.3.tgz",
+ "integrity": "sha512-Xe7IImK09HP1sv2M/aI+48a20VX+TdRJucfq4vfRVy6nWN8PYPOEnlMRSgxJAgYQIXJVL8dZ4/ilAM7dWNaOww==",
+ "dev": true
+ },
"node_modules/@types/json-schema": {
"version": "7.0.9",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
@@ -1181,6 +1198,12 @@
"@types/node": "*"
}
},
+ "node_modules/@types/sizzle": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz",
+ "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==",
+ "dev": true
+ },
"node_modules/@types/stoppable": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@types/stoppable/-/stoppable-1.1.1.tgz",
diff --git a/src/package.json b/src/package.json
index b1062eb7b73..6ade4d3d13c 100644
--- a/src/package.json
+++ b/src/package.json
@@ -78,23 +78,25 @@
"etherpad-lite": "node/server.js"
},
"devDependencies": {
+ "@types/express": "4.17.17",
+ "@types/jquery": "^3.5.16",
+ "@types/js-cookie": "^3.0.3",
+ "@types/node": "^20.3.1",
+ "concurrently": "^8.2.0",
"eslint": "^8.14.0",
"eslint-config-etherpad": "^3.0.13",
"etherpad-cli-client": "^2.0.1",
"mocha": "^9.2.2",
"mocha-froth": "^0.2.10",
"nodeify": "^1.0.1",
+ "nodemon": "^2.0.22",
"openapi-schema-validation": "^0.4.2",
"selenium-webdriver": "^4.10.0",
"set-cookie-parser": "^2.4.8",
"sinon": "^13.0.2",
"split-grid": "^1.0.11",
"supertest": "^6.3.3",
- "typescript": "^4.9.5",
- "@types/node": "^20.3.1",
- "@types/express": "4.17.17",
- "concurrently": "^8.2.0",
- "nodemon": "^2.0.22"
+ "typescript": "^4.9.5"
},
"engines": {
"node": ">=14.15.0",
diff --git a/src/static/js/ace2_common.js b/src/static/js/ace2_common.ts
similarity index 78%
rename from src/static/js/ace2_common.js
rename to src/static/js/ace2_common.ts
index c1dab5cfd8b..683dace3ad6 100644
--- a/src/static/js/ace2_common.js
+++ b/src/static/js/ace2_common.ts
@@ -22,11 +22,11 @@
* limitations under the License.
*/
-const isNodeText = (node) => (node.nodeType === 3);
+export const isNodeText = (node) => (node.nodeType === 3);
-const getAssoc = (obj, name) => obj[`_magicdom_${name}`];
+export const getAssoc = (obj, name) => obj[`_magicdom_${name}`];
-const setAssoc = (obj, name, value) => {
+export const setAssoc = (obj, name, value) => {
// note that in IE designMode, properties of a node can get
// copied to new nodes that are spawned during editing; also,
// properties representable in HTML text can survive copy-and-paste
@@ -38,7 +38,7 @@ const setAssoc = (obj, name, value) => {
// between false and true, a number between 0 and numItems inclusive.
-const binarySearch = (numItems, func) => {
+export const binarySearch = (numItems, func) => {
if (numItems < 1) return 0;
if (func(0)) return 0;
if (!func(numItems - 1)) return numItems;
@@ -52,17 +52,10 @@ const binarySearch = (numItems, func) => {
return high;
};
-const binarySearchInfinite = (expectedLength, func) => {
+export const binarySearchInfinite = (expectedLength, func) => {
let i = 0;
while (!func(i)) i += expectedLength;
return binarySearch(i, func);
};
-const noop = () => {};
-
-exports.isNodeText = isNodeText;
-exports.getAssoc = getAssoc;
-exports.setAssoc = setAssoc;
-exports.binarySearch = binarySearch;
-exports.binarySearchInfinite = binarySearchInfinite;
-exports.noop = noop;
+export const noop = () => {};
diff --git a/src/static/js/pad_utils.js b/src/static/js/pad_utils.ts
similarity index 92%
rename from src/static/js/pad_utils.js
rename to src/static/js/pad_utils.ts
index e10841f5058..537f9916997 100644
--- a/src/static/js/pad_utils.js
+++ b/src/static/js/pad_utils.ts
@@ -22,13 +22,13 @@
* limitations under the License.
*/
-const Security = require('./security');
+import Security from './security';
/**
* Generates a random String with the given length. Is needed to generate the Author, Group,
* readonly, session Ids
*/
-const randomString = (len) => {
+const randomString = (len?) => {
const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
let randomstring = '';
len = len || 20;
@@ -91,7 +91,9 @@ const urlRegex = (() => {
// https://stackoverflow.com/a/68957976
const base64url = /^(?=(?:.{4})*$)[A-Za-z0-9_-]*(?:[AQgw]==|[AEIMQUYcgkosw048]=)?$/;
-const padutils = {
+export const padutils = {
+ setupGlobalExceptionHandler: undefined,
+
/**
* Prints a warning message followed by a stack trace (to make it easier to figure out what code
* is using the deprecated function).
@@ -107,25 +109,32 @@ const padutils = {
* @param {...*} args - Passed to `padutils.warnDeprecated.logger.warn` (or `console.warn` if no
* logger is set), with a stack trace appended if available.
*/
- warnDeprecated: (...args) => {
- if (padutils.warnDeprecated.disabledForTestingOnly) return;
+ warnDeprecated: (...args) => {
+ if ("disabledForTestingOnly" in padutils.warnDeprecated) return;
const err = new Error();
if (Error.captureStackTrace) Error.captureStackTrace(err, padutils.warnDeprecated);
err.name = '';
// Rate limit identical deprecation warnings (as determined by the stack) to avoid log spam.
- if (typeof err.stack === 'string') {
- if (padutils.warnDeprecated._rl == null) {
+ if (typeof err.stack === 'string' && "_rl" in padutils.warnDeprecated) {
padutils.warnDeprecated._rl =
{prevs: new Map(), now: () => Date.now(), period: 10 * 60 * 1000};
- }
const rl = padutils.warnDeprecated._rl;
- const now = rl.now();
- const prev = rl.prevs.get(err.stack);
- if (prev != null && now - prev < rl.period) return;
- rl.prevs.set(err.stack, now);
+ if (rl instanceof Object && "now" in rl && "prevs" in rl && "period" in rl
+ && rl.now instanceof Function && rl.prevs instanceof Map && rl.period instanceof Number){
+ const now = rl.now();
+ const prev = rl.prevs.get(err.stack);
+ if (prev != null && now - prev < rl.period) return;
+ rl.prevs.set(err.stack, now);
+ }
}
if (err.stack) args.push(err.stack);
- (padutils.warnDeprecated.logger || console).warn(...args);
+ if ("logger" in padutils.warnDeprecated && padutils.warnDeprecated.logger instanceof Object
+ && "warn" in padutils.warnDeprecated.logger && padutils.warnDeprecated.logger.warn instanceof Function){
+ padutils.warnDeprecated.logger.warn(...args)
+ }
+ else{
+ console.warn(...args)
+ }
},
escapeHtml: (x) => Security.escapeHTML(String(x)),
@@ -350,7 +359,11 @@ const padutils = {
* Returns a string that can be used in the `token` cookie as a secret that authenticates a
* particular author.
*/
- generateAuthorToken: () => `t.${randomString()}`,
+ generateAuthorToken: () => {
+ const randomAuthToken = randomString()
+
+ return `t.+${randomAuthToken}`
+ }
};
let globalExceptionHandler = null;
@@ -400,6 +413,8 @@ padutils.setupGlobalExceptionHandler = () => {
.append(txt(`UserAgent: ${navigator.userAgent}`)).append($(' ')),
];
+ //FIXME gritter not defined
+ // @ts-ignore
$.gritter.add({
title: 'An error occurred',
text: errorMsg,
@@ -429,7 +444,7 @@ padutils.setupGlobalExceptionHandler = () => {
}
};
-padutils.binarySearch = require('./ace2_common').binarySearch;
+import {binarySearch} from '../../static/js/ace2_common';
// https://stackoverflow.com/a/42660748
const inThirdPartyIframe = () => {
@@ -439,11 +454,12 @@ const inThirdPartyIframe = () => {
return true;
}
};
+import cookies from 'js-cookie/dist/js.cookie';
// This file is included from Node so that it can reuse randomString, but Node doesn't have a global
// window object.
if (typeof window !== 'undefined') {
- exports.Cookies = require('js-cookie/dist/js.cookie').withAttributes({
+ cookies.withAttributes({
// Use `SameSite=Lax`, unless Etherpad is embedded in an iframe from another site in which case
// use `SameSite=None`. For iframes from another site, only `None` has a chance of working
// because the cookies are third-party (not same-site). Many browsers/users block third-party
@@ -456,5 +472,3 @@ if (typeof window !== 'undefined') {
secure: window.location.protocol === 'https:',
});
}
-exports.randomString = randomString;
-exports.padutils = padutils;
diff --git a/src/tsconfig.json b/src/tsconfig.json
index d58a717dccd..b99c6c15aa7 100644
--- a/src/tsconfig.json
+++ b/src/tsconfig.json
@@ -1,5 +1,7 @@
{
"compilerOptions": {
+ "typeRoots": ["node_modules/@types"],
+ "types": ["node", "jquery"],
"module": "commonjs",
"esModuleInterop": true,
"target": "es6",
From 7b99edc47102cf1f6b0777cbe803bf190f7aeb3c Mon Sep 17 00:00:00 2001
From: SamTV12345 <40429738+samtv12345@users.noreply.github.com>
Date: Fri, 23 Jun 2023 20:53:55 +0200
Subject: [PATCH 03/11] Moved to ts for other dependencies.
---
src/node/db/API.ts | 31 +-
src/node/db/AuthorManager.ts | 10 +-
src/node/db/DB.ts | 20 +-
src/node/db/GroupManager.ts | 6 +-
src/node/db/Pad.ts | 33 +-
src/node/db/ReadOnlyManager.ts | 6 +-
src/node/db/SecurityManager.ts | 4 +-
src/node/eejs/index.ts | 4 +-
src/node/handler/ImportHandler.ts | 4 +-
src/node/handler/PadMessageHandler.ts | 28 +-
src/node/hooks/express.ts | 10 +-
src/node/hooks/express/adminplugins.ts | 34 +-
src/node/hooks/express/adminsettings.ts | 14 +-
src/node/hooks/express/errorhandling.ts | 5 +-
src/node/hooks/express/importexport.ts | 2 +-
src/node/hooks/express/openapi.ts | 2 +-
src/node/hooks/express/padurlsanitize.ts | 2 +-
src/node/hooks/express/socketio.ts | 8 +-
src/node/hooks/express/specialpages.ts | 10 +-
src/node/hooks/express/tests.ts | 4 +-
src/node/hooks/express/webaccess.ts | 7 +-
src/node/hooks/i18n.ts | 12 +-
src/node/models/CMDArgv.ts | 3 +
src/node/utils/Abiword.ts | 6 +-
src/node/utils/Cli.ts | 17 +-
src/node/utils/ExportEtherpad.ts | 6 +-
src/node/utils/ExportHtml.ts | 14 +-
src/node/utils/ImportEtherpad.ts | 8 +-
src/node/utils/Minify.ts | 6 +-
src/node/utils/Settings.ts | 38 +-
src/node/utils/TidyHtml.ts | 2 +-
src/node/utils/UpdateCheck.ts | 4 +-
src/node/utils/customError.ts | 1 +
src/node/utils/padDiff.ts | 4 +-
src/node/utils/run_cmd.ts | 2 +-
src/package-lock.json | 1657 +++++++----------
src/package.json | 4 +-
src/static/js/{Changeset.js => Changeset.ts} | 154 +-
src/static/js/pluginfw/{hooks.js => hooks.ts} | 45 +-
.../pluginfw/{installer.js => installer.ts} | 56 +-
.../{plugin_defs.js => plugin_defs.ts} | 24 +-
.../js/pluginfw/{plugins.js => plugins.ts} | 82 +-
.../js/pluginfw/{shared.js => shared.ts} | 14 +-
src/static/js/pluginfw/{tsort.js => tsort.ts} | 8 +-
src/static/module/InstallerModel.ts | 5 +
src/static/module/PluginInfo.ts | 4 +
src/tsconfig.json | 3 +-
47 files changed, 1058 insertions(+), 1365 deletions(-)
create mode 100644 src/node/models/CMDArgv.ts
rename src/static/js/{Changeset.js => Changeset.ts} (95%)
rename src/static/js/pluginfw/{hooks.js => hooks.ts} (93%)
rename src/static/js/pluginfw/{installer.js => installer.ts} (66%)
rename src/static/js/pluginfw/{plugin_defs.js => plugin_defs.ts} (72%)
rename src/static/js/pluginfw/{plugins.js => plugins.ts} (70%)
rename src/static/js/pluginfw/{shared.js => shared.ts} (91%)
rename src/static/js/pluginfw/{tsort.js => tsort.ts} (89%)
create mode 100644 src/static/module/InstallerModel.ts
create mode 100644 src/static/module/PluginInfo.ts
diff --git a/src/node/db/API.ts b/src/node/db/API.ts
index d434eb556f7..6f585ccee09 100644
--- a/src/node/db/API.ts
+++ b/src/node/db/API.ts
@@ -50,41 +50,18 @@ import {getPadHTMLDocument} from "../utils/ExportHtml";
* GROUP FUNCTIONS ****
******************** */
-/*
-exports.listAllGroups = listAllGroups;
-exports.createGroup = createGroup;
-exports.createGroupIfNotExistsFor = createGroupIfNotExistsFor;
-exports.deleteGroup = deleteGroup;
-exports.listPads = listPads;
-exports.createGroupPad = createGroupPad;
-*/
/* ********************
* PADLIST FUNCTION ***
******************** */
-/*
-exports.listAllPads = padManager.listAllPads;
-*/
+
/* ********************
* AUTHOR FUNCTIONS ***
******************** */
-/*
-exports.createAuthor = createAuthor;
-exports.createAuthorIfNotExistsFor = createAuthorIfNotExistsFor;
-exports.getAuthorName = getAuthorName;
-exports.listPadsOfAuthor = listPadsOfAuthor;
-exports.padUsers = padMessageHandler.padUsers;
-exports.padUsersCount = padMessageHandler.padUsersCount;
-*/
+
/* ********************
* SESSION FUNCTIONS **
******************** */
-/*
-exports.createSession = sessionManager.createSession;
-exports.deleteSession = sessionManager.deleteSession;
-exports.getSessionInfo = sessionManager.getSessionInfo;
-exports.listSessionsOfGroup = sessionManager.listSessionsOfGroup;
-exports.listSessionsOfAuthor = sessionManager.listSessionsOfAuthor;
-*/
+
/* ***********************
* PAD CONTENT FUNCTIONS *
*********************** */
@@ -742,7 +719,7 @@ Example returns:
{"code":0,"message":"ok","data":null}
{"code":4,"message":"no or wrong API Key","data":null}
*/
-exports.checkToken = async () => {
+export const checkToken = async () => {
};
/**
diff --git a/src/node/db/AuthorManager.ts b/src/node/db/AuthorManager.ts
index a3f5db0dc55..3dd316f675d 100644
--- a/src/node/db/AuthorManager.ts
+++ b/src/node/db/AuthorManager.ts
@@ -21,7 +21,7 @@
import {db} from './DB';
import {CustomError} from '../utils/customError';
-import hooks from '../../static/js/pluginfw/hooks.js';
+import {aCallFirst} from '../../static/js/pluginfw/hooks.js';
const {randomString, padutils: {warnDeprecated}} = require('../../static/js/pad_utils');
@@ -110,7 +110,7 @@ const getAuthor4Token2 = async (token: string) => {
export const getAuthorId = async (token, user) => {
const context = {dbKey: token, token, user};
- let [authorId] = await hooks.aCallFirst('getAuthorId', context);
+ let [authorId] = await aCallFirst('getAuthorId', context);
if (!authorId) authorId = await getAuthor4Token2(context.dbKey);
return authorId;
};
@@ -137,7 +137,7 @@ export const createAuthorIfNotExistsFor = async (authorMapper, name: string) =>
if (name) {
// set the name of this author
- await exports.setAuthorName(author.authorID, name);
+ await setAuthorName(author.authorID, name);
}
return author;
@@ -155,7 +155,7 @@ export const mapAuthorWithDBKey = async (mapperkey: string, mapper) => {
if (author == null) {
// there is no author with this mapper, so create one
- const author = await exports.createAuthor(null);
+ const author = await createAuthor(null);
// create the token2author relation
await db.set(`${mapperkey}:${mapper}`, author.authorID);
@@ -182,7 +182,7 @@ export const createAuthor = async (name) => {
// create the globalAuthors db entry
const authorObj = {
- colorId: Math.floor(Math.random() * (exports.getColorPalette().length)),
+ colorId: Math.floor(Math.random() * (getColorPalette().length)),
name,
timestamp: Date.now(),
};
diff --git a/src/node/db/DB.ts b/src/node/db/DB.ts
index 6eca386fe8e..9d1379fe815 100644
--- a/src/node/db/DB.ts
+++ b/src/node/db/DB.ts
@@ -31,32 +31,32 @@ const logger = log4js.getLogger('ueberDB');
/**
* The UeberDB Object that provides the database functions
*/
-const db = null;
+let db = null;
/**
* Initializes the database with the settings provided by the settings module
*/
const init = async () => {
- exports.db = new ueberDB.Database(dbType, dbSettings, null, logger);
- await exports.db.init();
- if (exports.db.metrics != null) {
- for (const [metric, value] of Object.entries(exports.db.metrics)) {
+ db = new ueberDB.Database(dbType, dbSettings, null, logger);
+ await db.init();
+ if (db.metrics != null) {
+ for (const [metric, value] of Object.entries(db.metrics)) {
if (typeof value !== 'number') continue;
// FIXME find a better replacement for measure-core
- createCollection.gauge(`ueberdb_${metric}`, () => exports.db.metrics[metric]);
+ createCollection.gauge(`ueberdb_${metric}`, () => db.metrics[metric]);
}
}
for (const fn of ['get', 'set', 'findKeys', 'getSub', 'setSub', 'remove']) {
- const f = exports.db[fn];
- exports[fn] = async (...args) => await f.call(exports.db, ...args);
+ const f = db[fn];
+ exports[fn] = async (...args) => await f.call(db, ...args);
Object.setPrototypeOf(exports[fn], Object.getPrototypeOf(f));
Object.defineProperties(exports[fn], Object.getOwnPropertyDescriptors(f));
}
};
const shutdown = async (hookName, context) => {
- if (exports.db != null) await exports.db.close();
- exports.db = null;
+ if (db != null) await db.close();
+ db = null;
logger.log('Database closed');
};
diff --git a/src/node/db/GroupManager.ts b/src/node/db/GroupManager.ts
index 0be2205d828..5df48b2e31b 100644
--- a/src/node/db/GroupManager.ts
+++ b/src/node/db/GroupManager.ts
@@ -90,8 +90,8 @@ export const createGroupIfNotExistsFor = async (groupMapper) => {
throw new CustomError('groupMapper is not a string', 'apierror');
}
const groupID = await db.get(`mapper2group:${groupMapper}`);
- if (groupID && await exports.doesGroupExist(groupID)) return {groupID};
- const result = await exports.createGroup();
+ if (groupID && await doesGroupExist(groupID)) return {groupID};
+ const result = await createGroup();
await Promise.all([
db.set(`mapper2group:${groupMapper}`, result.groupID),
// Remember the mapping in the group record so that it can be cleaned up when the group is
@@ -132,7 +132,7 @@ export const createGroupPad = async (groupID, padName, text, authorId = '') => {
};
export const listPads = async (groupID) => {
- const exists = await exports.doesGroupExist(groupID);
+ const exists = await doesGroupExist(groupID);
// ensure the group exists
if (!exists) {
diff --git a/src/node/db/Pad.ts b/src/node/db/Pad.ts
index be7ac015509..b894299c33e 100644
--- a/src/node/db/Pad.ts
+++ b/src/node/db/Pad.ts
@@ -4,7 +4,7 @@
*/
import AttributeMap from '../../static/js/AttributeMap';
-import Changeset from '../../static/js/Changeset';
+import {applyToAText, makeAText} from '../../static/js/Changeset';
import ChatMessage from '../../static/js/ChatMessage';
import {AttributePool} from '../../static/js/AttributePool';
import {Stream} from '../utils/Stream';
@@ -19,7 +19,7 @@ import {doesGroupExist} from './GroupManager';
import {CustomError} from '../utils/customError';
import {getReadOnlyId} from './ReadOnlyManager';
import {randomString} from '../utils/randomstring';
-import hooks from '../../static/js/pluginfw/hooks';
+import {aCallAll} from '../../static/js/pluginfw/hooks';
import {timesLimit} from '../utils/promises';
import {padutils} from '../../static/js/pad_utils';
/**
@@ -27,7 +27,7 @@ import {padutils} from '../../static/js/pad_utils';
* line breaks and convert Tabs to spaces
* @param txt
*/
-exports.cleanText = (txt) => txt.replace(/\r\n/g, '\n')
+export const cleanText = (txt) => txt.replace(/\r\n/g, '\n')
.replace(/\r/g, '\n')
.replace(/\t/g, ' ')
.replace(/\xa0/g, ' ');
@@ -51,7 +51,7 @@ export class Pad {
*/
constructor(id: string, database = db) {
this.db = database;
- this.atext = Changeset.makeAText('\n');
+ this.atext = makeAText('\n');
this.pool = new AttributePool();
this.head = -1;
this.chatHead = -1;
@@ -83,11 +83,11 @@ export class Pad {
}
async appendRevision(aChangeset, authorId = '') {
- const newAText = Changeset.applyToAText(aChangeset, this.atext, this.pool);
+ const newAText = applyToAText(aChangeset, this.atext, this.pool);
if (newAText.text === this.atext.text && newAText.attribs === this.atext.attribs) {
return this.head;
}
- Changeset.copyAText(newAText, this.atext);
+ copyAText(newAText, this.atext);
const newRev = ++this.head;
@@ -109,7 +109,7 @@ export class Pad {
}),
this.saveToDatabase(),
authorId && addPad(authorId, this.id),
- hooks.aCallAll(hook, {
+ aCallAll(hook, {
pad: this,
authorId,
get author() {
@@ -188,7 +188,7 @@ export class Pad {
]);
const apool = this.apool();
let atext = keyAText;
- for (const cs of changesets) atext = Changeset.applyToAText(cs, atext, apool);
+ for (const cs of changesets) atext = applyToAText(cs, atext, apool);
return atext;
}
@@ -259,7 +259,7 @@ export class Pad {
const orig = this.text();
assert(orig.endsWith('\n'));
if (start + ndel > orig.length) throw new RangeError('start/delete past the end of the text');
- ins = exports.cleanText(ins);
+ ins = cleanText(ins);
const willEndWithNewline =
start + ndel < orig.length || // Keeping last char (which is guaranteed to be a newline).
ins.endsWith('\n') ||
@@ -362,14 +362,14 @@ export class Pad {
} else {
if (text == null) {
const context = {pad: this, authorId, type: 'text', content: defaultPadText};
- await hooks.aCallAll('padDefaultContent', context);
+ await aCallAll('padDefaultContent', context);
if (context.type !== 'text') throw new Error(`unsupported content type: ${context.type}`);
- text = exports.cleanText(context.content);
+ text = cleanText(context.content);
}
const firstChangeset = Changeset.makeSplice('\n', 0, 0, text);
await this.appendRevision(firstChangeset, authorId);
}
- await hooks.aCallAll('padLoad', {pad: this});
+ await aCallAll('padLoad', {pad: this});
}
async copy(destinationID, force) {
@@ -405,7 +405,7 @@ export class Pad {
const dstPad = await getPad(destinationID, null);
// let the plugins know the pad was copied
- await hooks.aCallAll('padCopy', {
+ await aCallAll('padCopy', {
get originalPad() {
padutils.warnDeprecated('padCopy originalPad context property is deprecated; use srcPad instead');
return this.srcPad;
@@ -506,7 +506,7 @@ export class Pad {
const changeset = Changeset.pack(oldLength, newLength, assem.toString(), newText);
dstPad.appendRevision(changeset, authorId);
- await hooks.aCallAll('padCopy', {
+ await aCallAll('padCopy', {
get originalPad() {
padutils.warnDeprecated('padCopy originalPad context property is deprecated; use srcPad instead');
return this.srcPad;
@@ -571,7 +571,7 @@ export class Pad {
// delete the pad entry and delete pad from padManager
p.push(removePad(padID));
- p.push(hooks.aCallAll('padRemove', {
+ p.push(aCallAll('padRemove', {
get padID() {
padutils.warnDeprecated('padRemove padID context property is deprecated; use pad.id instead');
return this.pad.id;
@@ -730,7 +730,6 @@ export class Pad {
.batch(100).buffer(99);
for (const p of chats) await p;
- await hooks.aCallAll('padCheck', {pad: this});
+ await aCallAll('padCheck', {pad: this});
}
}
-exports.Pad = Pad;
diff --git a/src/node/db/ReadOnlyManager.ts b/src/node/db/ReadOnlyManager.ts
index 8d5a036c8fe..a96ad53ed60 100644
--- a/src/node/db/ReadOnlyManager.ts
+++ b/src/node/db/ReadOnlyManager.ts
@@ -61,11 +61,11 @@ export const getPadId = async (readOnlyId) => await db.get(`readonly2pad:${readO
* @param {String} id padIdOrReadonlyPadId read only id or real pad id
*/
export const getIds = async (id: string) => {
- const readonly = exports.isReadOnlyId(id);
+ const readonly = isReadOnlyId(id);
// Might be null, if this is an unknown read-only id
- const readOnlyPadId = readonly ? id : await exports.getReadOnlyId(id);
- const padId = readonly ? await exports.getPadId(id) : id;
+ const readOnlyPadId = readonly ? id : await getReadOnlyId(id);
+ const padId = readonly ? await getPadId(id) : id;
return {readOnlyPadId, padId, readonly};
};
diff --git a/src/node/db/SecurityManager.ts b/src/node/db/SecurityManager.ts
index ca894b5e5de..f0fc26551fe 100644
--- a/src/node/db/SecurityManager.ts
+++ b/src/node/db/SecurityManager.ts
@@ -21,7 +21,7 @@
import {getAuthorId} from "./AuthorManager";
-import hooks from "../../static/js/pluginfw/hooks.js";
+import {callAll} from "../../static/js/pluginfw/hooks.js";
import {doesPadExist, getPad} from "./PadManager";
@@ -102,7 +102,7 @@ export const checkAccess = async (padID, sessionCookie, token, userSettings) =>
// allow plugins to deny access
const isFalse = (x) => x === false;
- if (hooks.callAll('onAccessCheck', {padID, token, sessionCookie}).some(isFalse)) {
+ if (callAll('onAccessCheck', {padID, token, sessionCookie}).some(isFalse)) {
authLogger.debug('access denied: an onAccessCheck hook function returned false');
return DENY;
}
diff --git a/src/node/eejs/index.ts b/src/node/eejs/index.ts
index 42faa52a15a..ff125e4c373 100644
--- a/src/node/eejs/index.ts
+++ b/src/node/eejs/index.ts
@@ -23,7 +23,7 @@
import ejs from 'ejs';
import fs from "fs";
-import hooks from "../../static/js/pluginfw/hooks.js";
+import {callAll} from "../../static/js/pluginfw/hooks.js";
import path from "path";
@@ -64,7 +64,7 @@ export const end_block = () => {
const content = info.__output.get();
info.__output.set(info.__output_stack.pop());
const args = {content, renderContext};
- hooks.callAll(`eejsBlock_${name}`, args);
+ callAll(`eejsBlock_${name}`, args);
info.__output.set(info.__output.get().concat(args.content));
};
diff --git a/src/node/handler/ImportHandler.ts b/src/node/handler/ImportHandler.ts
index 92f5e38a778..d83c15c6721 100644
--- a/src/node/handler/ImportHandler.ts
+++ b/src/node/handler/ImportHandler.ts
@@ -32,7 +32,7 @@ import os from 'os';
import {setPadHTML} from '../utils/ImportHtml';
import {setPadRaw} from '../utils/ImportEtherpad';
import log4js from 'log4js';
-import hooks from '../../static/js/pluginfw/hooks.js';
+import {aCallAll} from '../../static/js/pluginfw/hooks.js';
const logger = log4js.getLogger('ImportHandler');
@@ -134,7 +134,7 @@ const doImport = async (req, res, padId, authorId) => {
const destFile = path.join(tmpDirectory, `etherpad_import_${randNum}.${exportExtension}`);
const context = {srcFile, destFile, fileEnding, padId, ImportError};
- const importHandledByPlugin = (await hooks.aCallAll('import', context)).some((x) => x);
+ const importHandledByPlugin = (await aCallAll('import', context)).some((x) => x);
const fileIsEtherpad = (fileEnding === '.etherpad');
const fileIsHTML = (fileEnding === '.html' || fileEnding === '.htm');
const fileIsTXT = (fileEnding === '.txt');
diff --git a/src/node/handler/PadMessageHandler.ts b/src/node/handler/PadMessageHandler.ts
index 5e9f0665ddd..edd97a703d5 100644
--- a/src/node/handler/PadMessageHandler.ts
+++ b/src/node/handler/PadMessageHandler.ts
@@ -45,15 +45,14 @@ import {
indentationOnNewLine,
padOptions,
padShortcutEnabled,
- randomVersionString,
scrollWhenFocusLineIsOutOfViewport,
skinName,
skinVariants,
sofficeAvailable
} from '../utils/Settings';
-import plugins from '../../static/js/pluginfw/plugin_defs.js';
+import {parts, plugins} from '../../static/js/pluginfw/plugin_defs.js';
import log4js from "log4js";
-import hooks from '../../static/js/pluginfw/hooks.js';
+import {aCallAll, deprecationNotices} from '../../static/js/pluginfw/hooks.js';
import {createCollection} from '../stats';
import {strict as assert} from "assert";
@@ -62,6 +61,7 @@ import {userCanModify} from '../hooks/express/webaccess';
import {ErrorCaused} from "../models/ErrorCaused";
import {Pad} from "../db/Pad";
import {SessionInfo} from "../models/SessionInfo";
+import {randomString} from "../utils/randomstring";
const securityManager = require('../db/SecurityManager');
@@ -71,7 +71,7 @@ const accessLogger = log4js.getLogger('access');
let rateLimiter;
let socketio = null;
-hooks.deprecationNotices.clientReady = 'use the userJoin hook instead';
+deprecationNotices.clientReady = 'use the userJoin hook instead';
const addContextToError = (err: Error, pfx) => {
const newErr = new ErrorCaused(`${pfx}${err.message}`, err);
@@ -225,7 +225,7 @@ export const handleDisconnect = async (socket) => {
},
},
});
- await hooks.aCallAll('userLeave', {
+ await aCallAll('userLeave', {
...session, // For backwards compatibility.
authorId: session.author,
readOnly: session.readonly,
@@ -328,7 +328,7 @@ export const handleMessage = async (socket, message) => {
return this.socket;
},
};
- for (const res of await hooks.aCallAll('handleMessageSecurity', context)) {
+ for (const res of await aCallAll('handleMessageSecurity', context)) {
switch (res) {
case true:
padutils.warnDeprecated(
@@ -346,7 +346,7 @@ export const handleMessage = async (socket, message) => {
}
// Call handleMessage hook. If a plugin returns null, the message will be dropped.
- if ((await hooks.aCallAll('handleMessage', context)).some((m) => m == null)) {
+ if ((await aCallAll('handleMessage', context)).some((m) => m == null)) {
return;
}
@@ -475,7 +475,7 @@ export const sendChatMessageToPadClients = async (mt, puId, text = null, padId =
const message = mt instanceof ChatMessage ? mt : new ChatMessage(text, puId, mt);
padId = mt instanceof ChatMessage ? puId : padId;
const pad = await getPad(padId, null, message.authorId);
- await hooks.aCallAll('chatNewMessage', {message, pad, padId});
+ await aCallAll('chatNewMessage', {message, pad, padId});
// pad.appendChatMessage() ignores the displayName property so we don't need to wait for
// authorManager.getAuthorName() to resolve before saving the message to the database.
const promise = pad.appendChatMessage(message);
@@ -809,7 +809,7 @@ const handleClientReady = async (socket, message) => {
if (sessionInfo == null) throw new Error('client disconnected');
assert(sessionInfo.author);
- await hooks.aCallAll('clientReady', message); // Deprecated due to awkward context.
+ await aCallAll('clientReady', message); // Deprecated due to awkward context.
let {colorId: authorColorId, name: authorName} = message.userInfo || {};
if (authorColorId && !/^#(?:[0-9A-F]{3}){1,2}$/i.test(authorColorId)) {
@@ -957,7 +957,7 @@ const handleClientReady = async (socket, message) => {
const clientVars = {
skinName: skinName,
skinVariants: skinVariants,
- randomVersionString: randomVersionString,
+ randomVersionString: randomString(4),
accountPrivs: {
maxRevisions: 100,
},
@@ -995,8 +995,8 @@ const handleClientReady = async (socket, message) => {
sofficeAvailable: sofficeAvailable(),
exportAvailable: exportAvailable(),
plugins: {
- plugins: plugins.plugins,
- parts: plugins.parts,
+ plugins: plugins,
+ parts: parts,
},
indentationOnNewLine: indentationOnNewLine,
scrollWhenFocusLineIsOutOfViewport: {
@@ -1022,7 +1022,7 @@ const handleClientReady = async (socket, message) => {
}
// call the clientVars-hook so plugins can modify them before they get sent to the client
- const messages = await hooks.aCallAll('clientVars', {clientVars, pad, socket});
+ const messages = await aCallAll('clientVars', {clientVars, pad, socket});
// combine our old object with the new attributes from the hook
for (const msg of messages) {
@@ -1093,7 +1093,7 @@ const handleClientReady = async (socket, message) => {
socket.json.send(msg);
}));
- await hooks.aCallAll('userJoin', {
+ await aCallAll('userJoin', {
authorId: sessionInfo.author,
displayName: authorName,
padId: sessionInfo.padId,
diff --git a/src/node/hooks/express.ts b/src/node/hooks/express.ts
index 74f5834d2b1..61b1bf96c3e 100644
--- a/src/node/hooks/express.ts
+++ b/src/node/hooks/express.ts
@@ -10,7 +10,7 @@ import fs from "fs";
import expressSession from "express-session";
-import hooks from "../../static/js/pluginfw/hooks";
+import {aCallAll} from "../../static/js/pluginfw/hooks";
import log4js from "log4js";
@@ -52,7 +52,7 @@ const closeServer = async () => {
// Call exports.server.close() to reject new connections but don't await just yet because the
// Promise won't resolve until all preexisting connections are closed.
const p = util.promisify(server.close.bind(server))();
- await hooks.aCallAll('expressCloseServer');
+ await aCallAll('expressCloseServer');
// Give existing connections some time to close on their own before forcibly terminating. The
// time should be long enough to avoid interrupting most preexisting transmissions but short
// enough to avoid a noticeable outage.
@@ -240,14 +240,14 @@ sessionMiddleware = expressSession({
// Give plugins an opportunity to install handlers/middleware before the express-session
// middleware. This allows plugins to avoid creating an express-session record in the database
// when it is not needed (e.g., public static content).
- await hooks.aCallAll('expressPreSession', {app});
+ await aCallAll('expressPreSession', {app});
app.use(sessionMiddleware);
app.use(checkAccess2);
await Promise.all([
- hooks.aCallAll('expressConfigure', {app}),
- hooks.aCallAll('expressCreateServer', {app, server: server}),
+ aCallAll('expressConfigure', {app}),
+ aCallAll('expressCreateServer', {app, server: server}),
]);
server.on('connection', (socket) => {
sockets.add(socket);
diff --git a/src/node/hooks/express/adminplugins.ts b/src/node/hooks/express/adminplugins.ts
index 02a9b1939de..03a62655f55 100644
--- a/src/node/hooks/express/adminplugins.ts
+++ b/src/node/hooks/express/adminplugins.ts
@@ -3,11 +3,11 @@
import {required} from '../../eejs';
import {getEpVersion, getGitCommit} from "../../utils/Settings";
-import installer from "../../../static/js/pluginfw/installer";
+import {getAvailablePlugins, install, search, uninstall} from "../../../static/js/pluginfw/installer";
-import pluginDefs from "../../../static/js/pluginfw/plugin_defs";
+import {plugins} from "../../../static/js/pluginfw/plugin_defs";
-import plugins from "../../../static/js/pluginfw/plugins";
+import {formatHooks, formatParts, formatPlugins} from "../../../static/js/pluginfw/plugins";
import semver from "semver";
@@ -16,7 +16,7 @@ import UpdateCheck from "../../utils/UpdateCheck";
export const expressCreateServer = (hookName, args, cb) => {
args.app.get('/admin/plugins', (req, res) => {
res.send(required('ep_etherpad-lite/templates/admin/plugins.html', {
- plugins: pluginDefs.plugins,
+ plugins: plugins,
req,
errors: [],
}));
@@ -29,10 +29,10 @@ export const expressCreateServer = (hookName, args, cb) => {
res.send(required('ep_etherpad-lite/templates/admin/plugins-info.html', {
gitCommit,
epVersion,
- installedPlugins: `${plugins.formatPlugins().replace(/, /g, '\n')} `,
- installedParts: `${plugins.formatParts()} `,
- installedServerHooks: `${plugins.formatHooks('hooks', true)}
`,
- installedClientHooks: `${plugins.formatHooks('client_hooks', true)}
`,
+ installedPlugins: `${formatPlugins().replace(/, /g, '\n')} `,
+ installedParts: `${formatParts()} `,
+ installedServerHooks: `${formatHooks('hooks', true)}
`,
+ installedClientHooks: `${formatHooks('client_hooks', true)}
`,
latestVersion: UpdateCheck.getLatestVersion(),
req,
}));
@@ -50,7 +50,7 @@ export const socketio = (hookName, args, cb) => {
socket.on('getInstalled', (query) => {
// send currently installed plugins
const installed =
- Object.keys(pluginDefs.plugins).map((plugin) => pluginDefs.plugins[plugin].package);
+ Object.keys(plugins).map((plugin) => plugins[plugin].package);
socket.emit('results:installed', {installed});
});
@@ -58,13 +58,13 @@ export const socketio = (hookName, args, cb) => {
socket.on('checkUpdates', async () => {
// Check plugins for updates
try {
- const results = await installer.getAvailablePlugins(/* maxCacheAge:*/ 60 * 10);
+ const results = await getAvailablePlugins(/* maxCacheAge:*/ 60 * 10);
- const updatable = Object.keys(pluginDefs.plugins).filter((plugin) => {
+ const updatable = Object.keys(plugins).filter((plugin) => {
if (!results[plugin]) return false;
const latestVersion = results[plugin].version;
- const currentVersion = pluginDefs.plugins[plugin].package.version;
+ const currentVersion = plugins[plugin].package.version;
return semver.gt(latestVersion, currentVersion);
});
@@ -79,7 +79,7 @@ export const socketio = (hookName, args, cb) => {
socket.on('getAvailable', async (query) => {
try {
- const results = await installer.getAvailablePlugins(/* maxCacheAge:*/ false);
+ const results = await getAvailablePlugins(/* maxCacheAge:*/ false);
socket.emit('results:available', results);
} catch (er) {
console.error(er);
@@ -89,10 +89,10 @@ export const socketio = (hookName, args, cb) => {
socket.on('search', async (query) => {
try {
- const results = await installer.search(query.searchTerm, /* maxCacheAge:*/ 60 * 10);
+ const results = await search(query.searchTerm, /* maxCacheAge:*/ 60 * 10);
let res = Object.keys(results)
.map((pluginName) => results[pluginName])
- .filter((plugin) => !pluginDefs.plugins[plugin.name]);
+ .filter((plugin) => !plugins[plugin.name]);
res = sortPluginList(res, query.sortBy, query.sortDir)
.slice(query.offset, query.offset + query.limit);
socket.emit('results:search', {results: res, query});
@@ -104,7 +104,7 @@ export const socketio = (hookName, args, cb) => {
});
socket.on('install', (pluginName) => {
- installer.install(pluginName, (err) => {
+ install(pluginName, (err) => {
if (err) console.warn(err.stack || err.toString());
socket.emit('finished:install', {
@@ -116,7 +116,7 @@ export const socketio = (hookName, args, cb) => {
});
socket.on('uninstall', (pluginName) => {
- installer.uninstall(pluginName, (err) => {
+ uninstall(pluginName, (err) => {
if (err) console.warn(err.stack || err.toString());
socket.emit('finished:uninstall', {plugin: pluginName, error: err ? err.message : null});
diff --git a/src/node/hooks/express/adminsettings.ts b/src/node/hooks/express/adminsettings.ts
index b55f2d05d3a..404d6eefd75 100644
--- a/src/node/hooks/express/adminsettings.ts
+++ b/src/node/hooks/express/adminsettings.ts
@@ -3,14 +3,14 @@
import {required} from '../../eejs';
import {promises as fsp} from "fs";
-import hooks from "../../../static/js/pluginfw/hooks";
+import {aCallAll} from "../../../static/js/pluginfw/hooks";
-import plugins from "../../../static/js/pluginfw/plugins";
+import {update} from "../../../static/js/pluginfw/plugins";
import {reloadSettings, settingsFilename, showSettingsInAdminPage} from "../../utils/Settings";
import * as settings from "../../utils/Settings";
-exports.expressCreateServer = (hookName, {app}) => {
+export const expressCreateServer = (hookName, {app}) => {
app.get('/admin/settings', (req, res) => {
res.send(required('ep_etherpad-lite/templates/admin/settings.html', {
req,
@@ -20,7 +20,7 @@ exports.expressCreateServer = (hookName, {app}) => {
});
};
-exports.socketio = (hookName, {io}) => {
+export const socketio = (hookName, {io}) => {
io.of('/settings').on('connection', (socket) => {
const {session: {user: {is_admin: isAdmin} = {}} = {}}:SessionSocketModel = socket.conn.request;
if (!isAdmin) return;
@@ -50,9 +50,9 @@ exports.socketio = (hookName, {io}) => {
socket.on('restartServer', async () => {
console.log('Admin request to restart server through a socket on /admin/settings');
reloadSettings();
- await plugins.update();
- await hooks.aCallAll('loadSettings', {});
- await hooks.aCallAll('restartServer');
+ await update();
+ await aCallAll('loadSettings', {});
+ await aCallAll('restartServer');
});
});
};
diff --git a/src/node/hooks/express/errorhandling.ts b/src/node/hooks/express/errorhandling.ts
index 0252a6dcb32..9e2992251f7 100644
--- a/src/node/hooks/express/errorhandling.ts
+++ b/src/node/hooks/express/errorhandling.ts
@@ -2,8 +2,9 @@
import {createCollection} from '../../stats';
-exports.expressCreateServer = (hook_name, args, cb) => {
- exports.app = args.app;
+export let app:any;
+export const expressCreateServer = (hook_name, args, cb) => {
+ app = args.app;
// Handle errors
args.app.use((err, req, res, next) => {
diff --git a/src/node/hooks/express/importexport.ts b/src/node/hooks/express/importexport.ts
index e5d096b76fd..5d4101ead49 100644
--- a/src/node/hooks/express/importexport.ts
+++ b/src/node/hooks/express/importexport.ts
@@ -10,7 +10,7 @@ import rateLimit from 'express-rate-limit';
import {checkAccess} from '../../db/SecurityManager';
import {userCanModify} from './webaccess';
-exports.expressCreateServer = (hookName, args, cb) => {
+export const expressCreateServer = (hookName, args, cb) => {
importExportRateLimiting.onLimitReached = (req, res, options) => {
// when the rate limiter triggers, write a warning in the logs
console.warn('Import/Export rate limiter triggered on ' +
diff --git a/src/node/hooks/express/openapi.ts b/src/node/hooks/express/openapi.ts
index 4dde98e8fe1..68001bce7d4 100644
--- a/src/node/hooks/express/openapi.ts
+++ b/src/node/hooks/express/openapi.ts
@@ -548,7 +548,7 @@ const generateDefinitionForVersion = (version, style = APIPathStyle.FLAT) => {
return definition;
};
-exports.expressPreSession = async (hookName, {app}) => {
+export const expressPreSession = async (hookName, {app}) => {
// create openapi-backend handlers for each api version under /api/{version}/*
for (const version of Object.keys(apiHandler.version)) {
// we support two different styles of api: flat + rest
diff --git a/src/node/hooks/express/padurlsanitize.ts b/src/node/hooks/express/padurlsanitize.ts
index 00006bca4b5..233f6f97c1a 100644
--- a/src/node/hooks/express/padurlsanitize.ts
+++ b/src/node/hooks/express/padurlsanitize.ts
@@ -2,7 +2,7 @@
import {isValidPadId, sanitizePadId} from '../../db/PadManager';
-exports.expressCreateServer = (hookName, args, cb) => {
+export const expressCreateServer = (hookName, args, cb) => {
// redirects browser to the pad's sanitized url if needed. otherwise, renders the html
args.app.param('pad', (req, res, next, padId) => {
(async () => {
diff --git a/src/node/hooks/express/socketio.ts b/src/node/hooks/express/socketio.ts
index feed1a2fbb4..23c2623299d 100644
--- a/src/node/hooks/express/socketio.ts
+++ b/src/node/hooks/express/socketio.ts
@@ -7,7 +7,7 @@ import proxyaddr from 'proxy-addr';
import {socketIo, socketTransportProtocols, trustProxy} from '../../utils/Settings';
import socketio from 'socket.io';
import {addComponent, setSocketIO} from '../../handler/SocketIORouter';
-import hooks from '../../../static/js/pluginfw/hooks';
+import {callAll} from '../../../static/js/pluginfw/hooks';
import * as padMessageHandler from '../../handler/PadMessageHandler';
let io;
@@ -15,7 +15,7 @@ const logger = log4js.getLogger('socket.io');
const sockets = new Set();
const socketsEvents = new events.EventEmitter();
-exports.expressCloseServer = async () => {
+export const expressCloseServer = async () => {
if (io == null) return;
logger.info('Closing socket.io engine...');
// Close the socket.io engine to disconnect existing clients and reject new clients. Don't call
@@ -46,7 +46,7 @@ exports.expressCloseServer = async () => {
logger.info('All socket.io clients have disconnected');
};
-exports.expressCreateServer = (hookName, args, cb) => {
+export const expressCreateServer = (hookName, args, cb) => {
// init socket.io and redirect all requests to the MessageHandler
// there shouldn't be a browser that isn't compatible to all
// transports in this list at once
@@ -133,7 +133,7 @@ exports.expressCreateServer = (hookName, args, cb) => {
setSocketIO(io);
addComponent('pad', padMessageHandler);
- hooks.callAll('socketio', {app: args.app, io, server: args.server});
+ callAll('socketio', {app: args.app, io, server: args.server});
return cb();
};
diff --git a/src/node/hooks/express/specialpages.ts b/src/node/hooks/express/specialpages.ts
index 8b934d297f0..8a21beaa830 100644
--- a/src/node/hooks/express/specialpages.ts
+++ b/src/node/hooks/express/specialpages.ts
@@ -5,12 +5,12 @@ import {required} from '../../eejs';
import fs from 'fs';
const fsp = fs.promises;
import {} from '../../utils/toolbar';
-import hooks from '../../../static/js/pluginfw/hooks';
+import {callAll} from '../../../static/js/pluginfw/hooks';
import {favicon, getEpVersion, maxAge, root, skinName} from '../../utils/Settings';
import util from 'util';
import {userCanModify} from './webaccess';
-exports.expressPreSession = async (hookName, {app}) => {
+export const expressPreSession = async (hookName, {app}) => {
// This endpoint is intended to conform to:
// https://www.ietf.org/archive/id/draft-inadarei-api-health-check-06.html
app.get('/health', (req, res) => {
@@ -63,7 +63,7 @@ exports.expressPreSession = async (hookName, {app}) => {
});
};
-exports.expressCreateServer = (hookName, args, cb) => {
+export const expressCreateServer = (hookName, args, cb) => {
// serve index.html under /
args.app.get('/', (req, res) => {
res.send(required('ep_etherpad-lite/templates/index.html', {req}));
@@ -74,7 +74,7 @@ exports.expressCreateServer = (hookName, args, cb) => {
// The below might break for pads being rewritten
const isReadOnly = !userCanModify(req.params.pad, req);
- hooks.callAll('padInitToolbar', {
+ callAll('padInitToolbar', {
toolbar,
isReadOnly,
});
@@ -90,7 +90,7 @@ exports.expressCreateServer = (hookName, args, cb) => {
// serve timeslider.html under /p/$padname/timeslider
args.app.get('/p/:pad/timeslider', (req, res, next) => {
- hooks.callAll('padInitToolbar', {
+ callAll('padInitToolbar', {
toolbar,
});
diff --git a/src/node/hooks/express/tests.ts b/src/node/hooks/express/tests.ts
index 3b9db80b6e7..5ecfef43b57 100644
--- a/src/node/hooks/express/tests.ts
+++ b/src/node/hooks/express/tests.ts
@@ -3,7 +3,7 @@
import path from 'path';
import {promises as fsp} from "fs";
-import plugins from "../../../static/js/pluginfw/plugin_defs";
+import {plugins} from "../../../static/js/pluginfw/plugin_defs";
import sanitizePathname from "../../utils/sanitizePathname";
@@ -36,7 +36,7 @@ export const expressPreSession = async (hookName, {app}) => {
app.get('/tests/frontend/frontendTestSpecs.json', (req, res, next) => {
(async () => {
const modules = [];
- await Promise.all(Object.entries(plugins.plugins).map(async ([plugin, def]) => {
+ await Promise.all(Object.entries(plugins).map(async ([plugin, def]) => {
const mappedDef = def as Presession;
let {package: {path: pluginPath}} = mappedDef;
if (!pluginPath.endsWith(path.sep)) pluginPath += path.sep;
diff --git a/src/node/hooks/express/webaccess.ts b/src/node/hooks/express/webaccess.ts
index 58ecdace2f0..4aac3064397 100644
--- a/src/node/hooks/express/webaccess.ts
+++ b/src/node/hooks/express/webaccess.ts
@@ -6,17 +6,18 @@ import log4js from "log4js";
import {requireAuthentication, requireAuthorization, setUsers, users} from "../../utils/Settings";
-import hooks from "../../../static/js/pluginfw/hooks";
+import {deprecationNotices} from "../../../static/js/pluginfw/hooks";
import {getPadId, isReadOnlyId} from "../../db/ReadOnlyManager";
import {UserIndexedModel} from "../../models/UserIndexedModel";
const httpLogger = log4js.getLogger('http');
-hooks.deprecationNotices.authFailure = 'use the authnFailure and authzFailure hooks instead';
+deprecationNotices.authFailure = 'use the authnFailure and authzFailure hooks instead';
// Promisified wrapper around hooks.aCallFirst.
const aCallFirst = (hookName, context, pred = null) => new Promise((resolve, reject) => {
- hooks.aCallFirst(hookName, context, (err, r) => err != null ? reject(err) : resolve(r), pred);
+ // FIXME Why are there 4 arguments but only 3 parameters?
+ aCallFirst(hookName, context, (err, r) => err != null ? reject(err) : resolve(r));
});
const aCallFirst0 =
diff --git a/src/node/hooks/i18n.ts b/src/node/hooks/i18n.ts
index f6bf38f7009..7ce55f74482 100644
--- a/src/node/hooks/i18n.ts
+++ b/src/node/hooks/i18n.ts
@@ -4,7 +4,7 @@ import languages from 'languages4translatewiki';
import fs from 'fs';
import path from 'path';
import _ from 'underscore';
-import pluginDefs from '../../static/js/pluginfw/plugin_defs.js';
+import {plugins} from '../../static/js/pluginfw/plugin_defs.js';
import {check} from '../utils/path_exists';
import {customLocaleStrings, maxAge, root} from '../utils/Settings';
import {Presession} from "../models/Presession";
@@ -41,7 +41,7 @@ const getAllLocales = () => {
extractLangs(path.join(root, 'src/locales'));
// add plugins languages (if any)
- for (const val of Object.values(pluginDefs.plugins)) {
+ for (const val of Object.values(plugins)) {
const pluginPath:Presession = val as Presession
// plugin locales should overwrite etherpad's core locales
if (pluginPath.package.path.endsWith('/ep_etherpad-lite') === true) continue;
@@ -86,7 +86,7 @@ const getAllLocales = () => {
// returns a hash of all available languages availables with nativeName and direction
// e.g. { es: {nativeName: "español", direction: "ltr"}, ... }
-const getAvailableLangs = (locales) => {
+export const getAvailableLangs = (locales) => {
const result = {};
for (const langcode of Object.keys(locales)) {
result[langcode] = languages.getLanguageInfo(langcode);
@@ -104,16 +104,16 @@ const generateLocaleIndex = (locales) => {
};
-exports.expressPreSession = async (hookName, {app}) => {
+export const expressPreSession = async (hookName, {app}) => {
// regenerate locales on server restart
const locales = getAllLocales();
const localeIndex = generateLocaleIndex(locales);
- exports.availableLangs = getAvailableLangs(locales);
+ let availableLangs = getAvailableLangs(locales);
app.get('/locales/:locale', (req, res) => {
// works with /locale/en and /locale/en.json requests
const locale = req.params.locale.split('.')[0];
- if (Object.prototype.hasOwnProperty.call(exports.availableLangs, locale)) {
+ if (Object.prototype.hasOwnProperty.call(availableLangs, locale)) {
res.setHeader('Cache-Control', `public, max-age=${maxAge}`);
res.setHeader('Content-Type', 'application/json; charset=utf-8');
res.send(`{"${locale}":${JSON.stringify(locales[locale])}}`);
diff --git a/src/node/models/CMDArgv.ts b/src/node/models/CMDArgv.ts
new file mode 100644
index 00000000000..9e663cfa751
--- /dev/null
+++ b/src/node/models/CMDArgv.ts
@@ -0,0 +1,3 @@
+export type CMDArgv = {
+ [key: string]: any
+}
diff --git a/src/node/utils/Abiword.ts b/src/node/utils/Abiword.ts
index b83fc6a3d1e..90cd88bdd53 100644
--- a/src/node/utils/Abiword.ts
+++ b/src/node/utils/Abiword.ts
@@ -25,10 +25,12 @@ import async from 'async';
import {abiword} from './Settings';
import os from 'os';
+export let convertFile;
+
// on windows we have to spawn a process for each convertion,
// cause the plugin abicommand doesn't exist on this platform
if (os.type().indexOf('Windows') > -1) {
- exports.convertFile = async (srcFile, destFile, type) => {
+ convertFile = async (srcFile, destFile, type) => {
const abiword2 = spawn(abiword, [`--to=${destFile}`, srcFile]);
let stdoutBuffer = '';
abiword2.stdout.on('data', (data) => { stdoutBuffer += data.toString(); });
@@ -85,7 +87,7 @@ if (os.type().indexOf('Windows') > -1) {
};
}, 1);
- exports.convertFile = async (srcFile, destFile, type) => {
+ convertFile = async (srcFile, destFile, type) => {
await queue.pushAsync({srcFile, destFile, type});
};
}
diff --git a/src/node/utils/Cli.ts b/src/node/utils/Cli.ts
index 946fd66ca99..260478cce10 100644
--- a/src/node/utils/Cli.ts
+++ b/src/node/utils/Cli.ts
@@ -21,32 +21,35 @@
*/
// An object containing the parsed command-line options
-export const argv = process.argv.slice(2);
+import {CMDArgv} from "../models/CMDArgv";
-let arg, prevArg;
+const argvcmd = process.argv.slice(2);
+let arg, prevArg
+
+export const argv:CMDArgv|undefined = {};
// Loop through args
-for (let i = 0; i < argv.length; i++) {
+for (let i = 0; i < argvcmd.length; i++) {
arg = argv[i];
// Override location of settings.json file
if (prevArg === '--settings' || prevArg === '-s') {
- exports.argv.settings = arg;
+ argv.settings = arg;
}
// Override location of credentials.json file
if (prevArg === '--credentials') {
- exports.argv.credentials = arg;
+ argv.credentials = arg;
}
// Override location of settings.json file
if (prevArg === '--sessionkey') {
- exports.argv.sessionkey = arg;
+ argv.sessionkey = arg;
}
// Override location of settings.json file
if (prevArg === '--apikey') {
- exports.argv.apikey = arg;
+ argv.apikey = arg;
}
prevArg = arg;
diff --git a/src/node/utils/ExportEtherpad.ts b/src/node/utils/ExportEtherpad.ts
index d548590bdb2..c20741840bd 100644
--- a/src/node/utils/ExportEtherpad.ts
+++ b/src/node/utils/ExportEtherpad.ts
@@ -20,7 +20,7 @@ import {strict as assert} from "assert";
import {getAuthor} from "../db/AuthorManager";
-import hooks from "../../static/js/pluginfw/hooks";
+import {aCallAll} from "../../static/js/pluginfw/hooks";
import {getPad} from "../db/PadManager";
@@ -28,7 +28,7 @@ export const getPadRaw = async (padId, readOnlyId) => {
const dstPfx = `pad:${readOnlyId || padId}`;
const [pad, customPrefixes] = await Promise.all([
getPad(padId),
- hooks.aCallAll('exportEtherpadAdditionalContent'),
+ aCallAll('exportEtherpadAdditionalContent'),
]);
const pluginRecords = await Promise.all(customPrefixes.map(async (customPrefix) => {
const srcPfx = `${customPrefix}:${padId}`;
@@ -58,7 +58,7 @@ export const getPadRaw = async (padId, readOnlyId) => {
})();
const data = {[dstPfx]: pad};
for (const [dstKey, p] of new Stream(records).batch(100).buffer(99)) data[dstKey] = await p;
- await hooks.aCallAll('exportEtherpad', {
+ await aCallAll('exportEtherpad', {
pad,
data,
dstPadId: readOnlyId || padId,
diff --git a/src/node/utils/ExportHtml.ts b/src/node/utils/ExportHtml.ts
index c8a7d6884d6..8ec4fc104cf 100644
--- a/src/node/utils/ExportHtml.ts
+++ b/src/node/utils/ExportHtml.ts
@@ -23,7 +23,7 @@ import {getPad} from "../db/PadManager";
import _ from "underscore";
import Security from '../../static/js/security';
-import hooks from '../../static/js/pluginfw/hooks';
+import {aCallAll} from '../../static/js/pluginfw/hooks';
import {required} from '../eejs';
import {_analyzeLine, _encodeWhitespace} from "./ExportHelper";
@@ -51,7 +51,7 @@ export const getHTMLFromAtext = async (pad, atext, authorColors?) => {
await Promise.all([
// prepare tags stored as ['tag', true] to be exported
- hooks.aCallAll('exportHtmlAdditionalTags', pad).then((newProps) => {
+ aCallAll('exportHtmlAdditionalTags', pad).then((newProps) => {
newProps.forEach((prop) => {
tags.push(prop);
props.push(prop);
@@ -59,7 +59,7 @@ export const getHTMLFromAtext = async (pad, atext, authorColors?) => {
}),
// prepare tags stored as ['tag', 'value'] to be exported. This will generate HTML with tags
// like
- hooks.aCallAll('exportHtmlAdditionalTagsWithData', pad).then((newProps) => {
+ aCallAll('exportHtmlAdditionalTagsWithData', pad).then((newProps) => {
newProps.forEach((prop) => {
tags.push(`span data-${prop[0]}="${prop[1]}"`);
props.push(prop);
@@ -314,7 +314,7 @@ export const getHTMLFromAtext = async (pad, atext, authorColors?) => {
if (i < textLines.length) {
nextLine = _analyzeLine(textLines[i + 1], attribLines[i + 1], apool);
}
- await hooks.aCallAll('getLineHTMLForExport', context);
+ await aCallAll('getLineHTMLForExport', context);
// To create list parent elements
if ((!prevLine || prevLine.listLevel !== line.listLevel) ||
(line.listTypeName !== prevLine.listTypeName)) {
@@ -451,7 +451,7 @@ export const getHTMLFromAtext = async (pad, atext, authorColors?) => {
padId: pad.id,
};
- await hooks.aCallAll('getLineHTMLForExport', context);
+ await aCallAll('getLineHTMLForExport', context);
pieces.push(context.lineContent, ' ');
}
}
@@ -464,14 +464,14 @@ export const getPadHTMLDocument = async (padId, revNum, readOnlyId?) => {
// Include some Styles into the Head for Export
let stylesForExportCSS = '';
- const stylesForExport = await hooks.aCallAll('stylesForExport', padId);
+ const stylesForExport = await aCallAll('stylesForExport', padId);
stylesForExport.forEach((css) => {
stylesForExportCSS += css;
});
let html = await getPadHTML(pad, revNum);
- for (const hookHtml of await hooks.aCallAll('exportHTMLAdditionalContent', {padId})) {
+ for (const hookHtml of await aCallAll('exportHTMLAdditionalContent', {padId})) {
html += hookHtml;
}
diff --git a/src/node/utils/ImportEtherpad.ts b/src/node/utils/ImportEtherpad.ts
index 09dca8ecdca..9258159915d 100644
--- a/src/node/utils/ImportEtherpad.ts
+++ b/src/node/utils/ImportEtherpad.ts
@@ -21,7 +21,7 @@ import {Pad} from '../db/Pad';
import {Stream} from './Stream';
import {addPad, doesAuthorExist} from '../db/AuthorManager';
import {db} from '../db/DB';
-import hooks from '../../static/js/pluginfw/hooks';
+import {aCallAll, callAll} from '../../static/js/pluginfw/hooks';
import log4js from "log4js";
import {supportedElems} from "../../static/js/contentcollector";
@@ -34,14 +34,14 @@ export const setPadRaw = async (padId, r, authorId = '') => {
const records = JSON.parse(r);
// get supported block Elements from plugins, we will use this later.
- hooks.callAll('ccRegisterBlockElements').forEach((element) => {
+ callAll('ccRegisterBlockElements').forEach((element) => {
supportedElems.add(element);
});
// DB key prefixes for pad records. Each key is expected to have the form `${prefix}:${padId}` or
// `${prefix}:${padId}:${otherstuff}`.
const padKeyPrefixes = [
- ...await hooks.aCallAll('exportEtherpadAdditionalContent'),
+ ...await aCallAll('exportEtherpadAdditionalContent'),
'pad',
];
@@ -103,7 +103,7 @@ export const setPadRaw = async (padId, r, authorId = '') => {
const pad = new Pad(padId, padDb);
await pad.init(null, authorId);
- await hooks.aCallAll('importEtherpad', {
+ await aCallAll('importEtherpad', {
pad,
// Shallow freeze meant to prevent accidental bugs. It would be better to deep freeze, but
// it's not worth the added complexity.
diff --git a/src/node/utils/Minify.ts b/src/node/utils/Minify.ts
index 03a7a403e9b..830bd9c1baf 100644
--- a/src/node/utils/Minify.ts
+++ b/src/node/utils/Minify.ts
@@ -26,7 +26,7 @@ import {promises as fs} from "fs";
import path from "path";
-import plugins from "../../static/js/pluginfw/plugin_defs";
+import {plugins} from "../../static/js/pluginfw/plugin_defs";
import RequireKernel from "etherpad-require-kernel";
@@ -155,8 +155,8 @@ const minify = async (req, res) => {
const library = match[1];
const libraryPath = match[2] || '';
- if (plugins.plugins[library] && match[3]) {
- const plugin = plugins.plugins[library];
+ if (plugins[library] && match[3]) {
+ const plugin = plugins[library];
const pluginPath = plugin.package.realPath;
filename = path.join(pluginPath, libraryPath);
// On Windows, path.relative converts forward slashes to backslashes. Convert them back
diff --git a/src/node/utils/Settings.ts b/src/node/utils/Settings.ts
index 2813e50309c..a505974698e 100644
--- a/src/node/utils/Settings.ts
+++ b/src/node/utils/Settings.ts
@@ -29,19 +29,20 @@
import exp from "constants";
-const absolutePaths = require('./AbsolutePaths');
-const deepEqual = require('fast-deep-equal/es6');
+import {findEtherpadRoot, makeAbsolute, isSubdir} from './AbsolutePaths';
+import deepEqual from 'fast-deep-equal/es6';
import fs from 'fs';
import os from 'os';
import path from 'path';
-const argv = require('./Cli').argv;
import jsonminify from 'jsonminify';
import log4js from 'log4js';
import {LogLevel} from "../models/LogLevel";
-const randomString = require('./randomstring');
+import {argv} from "./Cli";
+
+import {randomString} from './randomstring';
const suppressDisableMsg = ' -- To suppress these warning messages change ' +
'suppressErrorsInPadText to true in your settings.json\n';
-const _ = require('underscore');
+import _ from 'underscore';
const logger = log4js.getLogger('settings');
@@ -53,7 +54,10 @@ const nonSettings = [
// This is a function to make it easy to create a new instance. It is important to not reuse a
// config object after passing it to log4js.configure() because that method mutates the object. :(
-const defaultLogConfig = () => ({appenders: [{type: 'console'}]});
+const defaultLogConfig = () => ({appenders: { console: { type: 'console' } },
+categories:{
+ default: { appenders: ['console'], level: 'info'}
+}});
const defaultLogLevel = 'INFO';
const initLogging = (logLevel, config) => {
@@ -71,11 +75,11 @@ const initLogging = (logLevel, config) => {
initLogging(defaultLogLevel, defaultLogConfig());
/* Root path of the installation */
-export const root = absolutePaths.findEtherpadRoot();
+export const root = findEtherpadRoot();
logger.info('All relative paths will be interpreted relative to the identified ' +
`Etherpad base dir: ${root}`);
-export const settingsFilename = absolutePaths.makeAbsolute(argv.settings || 'settings.json');
-export const credentialsFilename = absolutePaths.makeAbsolute(argv.credentials || 'credentials.json');
+export const settingsFilename = makeAbsolute(argv.settings || 'settings.json');
+export const credentialsFilename = makeAbsolute(argv.credentials || 'credentials.json');
/**
* The app title, visible e.g. in the browser window
@@ -737,9 +741,7 @@ const parseSettings = (settingsFilename: string, isSettings:boolean) => {
process.exit(1);
}
-};
-
-export const randomVersionString = randomString(4);
+}
export const reloadSettings = () => {
@@ -772,7 +774,7 @@ export const reloadSettings = () => {
let skinPath = path.join(skinBasePath, skinName);
// what if someone sets skinName == ".." or "."? We catch him!
- if (absolutePaths.isSubdir(skinBasePath, skinPath) === false) {
+ if (isSubdir(skinBasePath, skinPath) === false) {
logger.error(`Skin path ${skinPath} must be a subdirectory of ${skinBasePath}. ` +
'Falling back to the default "colibris".');
@@ -821,7 +823,7 @@ export const reloadSettings = () => {
}
if (!sessionKey) {
- const sessionkeyFilename = absolutePaths.makeAbsolute(argv.sessionkey || './SESSIONKEY.txt');
+ const sessionkeyFilename = makeAbsolute(argv.sessionkey || './SESSIONKEY.txt');
try {
sessionKey = fs.readFileSync(sessionkeyFilename, 'utf8');
logger.info(`Session key loaded from: ${sessionkeyFilename}`);
@@ -846,7 +848,7 @@ export const reloadSettings = () => {
defaultPadText += `\nWarning: ${dirtyWarning}${suppressDisableMsg}`;
}
- dbSettings.filename = absolutePaths.makeAbsolute(dbSettings.filename);
+ dbSettings.filename = makeAbsolute(dbSettings.filename);
logger.warn(`${dirtyWarning} File location: ${dbSettings.filename}`);
}
@@ -867,10 +869,12 @@ export const reloadSettings = () => {
* ACHTUNG: this may prevent caching HTTP proxies to work
* TODO: remove the "?v=randomstring" parameter, and replace with hashed filenames instead
*/
- logger.info(`Random string used for versioning assets: ${randomVersionString}`);
+ const randomVersionStringWith4Chars = randomString(4);
+ logger.info(`Random string used for versioning assets: ${randomVersionStringWith4Chars}`);
+ return settings
};
-exports.exportedForTestingOnly = {
+export const exportedForTestingOnly = {
parseSettings,
};
diff --git a/src/node/utils/TidyHtml.ts b/src/node/utils/TidyHtml.ts
index cbedc805652..56fa68972ed 100644
--- a/src/node/utils/TidyHtml.ts
+++ b/src/node/utils/TidyHtml.ts
@@ -8,7 +8,7 @@ import {tidyHtml} from "./Settings";
import {spawn} from "child_process";
-exports.tidy = (srcFile) => {
+export const tidy = (srcFile) => {
const logger = log4js.getLogger('TidyHtml');
return new Promise((resolve, reject) => {
diff --git a/src/node/utils/UpdateCheck.ts b/src/node/utils/UpdateCheck.ts
index d20219b285d..de18d2f179e 100644
--- a/src/node/utils/UpdateCheck.ts
+++ b/src/node/utils/UpdateCheck.ts
@@ -28,7 +28,7 @@ const loadEtherpadInformations = () => new Promise((resolve, reject)
});
const getLatestVersion = () => {
- exports.needsUpdate();
+ needsUpdate();
if(infos === undefined){
throw new Error("Could not retrieve latest version")
}
@@ -36,7 +36,7 @@ const getLatestVersion = () => {
return infos.latestVersion;
}
-exports.needsUpdate = (cb?:(arg0: boolean)=>void) => {
+export const needsUpdate = (cb?:(arg0: boolean)=>void) => {
loadEtherpadInformations().then((info) => {
if (semver.gt(info.latestVersion, getEpVersion())) {
if (cb) return cb(true);
diff --git a/src/node/utils/customError.ts b/src/node/utils/customError.ts
index 79cbbd47c04..b90946f65be 100644
--- a/src/node/utils/customError.ts
+++ b/src/node/utils/customError.ts
@@ -10,6 +10,7 @@
export class CustomError extends Error {
code: any;
signal: any;
+ easysync: boolean
/**
* Creates an instance of CustomError.
* @param {*} message
diff --git a/src/node/utils/padDiff.ts b/src/node/utils/padDiff.ts
index da8ff68770f..88dd3d4b407 100644
--- a/src/node/utils/padDiff.ts
+++ b/src/node/utils/padDiff.ts
@@ -254,7 +254,7 @@ PadDiff.prototype._createDeletionChangeset = function (cs, startAText, apool) {
// They include final newlines on lines.
const linesGet = (idx) => {
- if (lines.get) {
+ if ("get" in lines && lines.get instanceof Function) {
return lines.get(idx);
} else {
return lines[idx];
@@ -262,7 +262,7 @@ PadDiff.prototype._createDeletionChangeset = function (cs, startAText, apool) {
};
const aLinesGet = (idx) => {
- if (alines.get) {
+ if ("get" in alines && alines.get instanceof Function) {
return alines.get(idx);
} else {
return alines[idx];
diff --git a/src/node/utils/run_cmd.ts b/src/node/utils/run_cmd.ts
index 716e528b4a4..b98cb9b4535 100644
--- a/src/node/utils/run_cmd.ts
+++ b/src/node/utils/run_cmd.ts
@@ -69,7 +69,7 @@ const logLines = (readable, logLineFn) => {
* - `stderr`: Similar to `stdout` but for stderr.
* - `child`: The ChildProcess object.
*/
-export const exportCMD: (args: string[], opts:CMDOptions)=>void = async (args, opts = {
+export const exportCMD: (args: string[], opts?:CMDOptions)=>void = async (args, opts = {
cwd: undefined,
stdio: undefined,
env: undefined
diff --git a/src/package-lock.json b/src/package-lock.json
index dd27c26e294..618ce284a97 100644
--- a/src/package-lock.json
+++ b/src/package-lock.json
@@ -10,6 +10,7 @@
"license": "Apache-2.0",
"dependencies": {
"async": "^3.2.2",
+ "cjstoesm": "^2.1.2",
"clean-css": "^5.3.2",
"cookie-parser": "^1.4.6",
"cross-spawn": "^7.0.3",
@@ -854,7 +855,6 @@
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
@@ -867,7 +867,6 @@
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
"engines": {
"node": ">= 8"
}
@@ -876,7 +875,6 @@
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
@@ -1538,6 +1536,14 @@
"integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
"dev": true
},
+ "node_modules/@wessberg/stringutil": {
+ "version": "1.0.19",
+ "resolved": "https://registry.npmjs.org/@wessberg/stringutil/-/stringutil-1.0.19.tgz",
+ "integrity": "sha512-9AZHVXWlpN8Cn9k5BC/O0Dzb9E9xfEMXzYrNunwvkUTvuK7xgQPVRZpLo+jWCOZ5r8oBa8NIrHuPEu1hzbb6bg==",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
"node_modules/@xmldom/xmldom": {
"version": "0.8.8",
"resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.8.tgz",
@@ -2158,7 +2164,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
"dependencies": {
"fill-range": "^7.0.1"
},
@@ -2455,6 +2460,47 @@
"node": ">=10"
}
},
+ "node_modules/cjstoesm": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/cjstoesm/-/cjstoesm-2.1.2.tgz",
+ "integrity": "sha512-zAbvVcY+HSxy4tTRfskV7DEK7l8nJTjpO9wuQumUu48JWBezqNgt7p9CFe3KACZJtHk8BJECSvl3ccV1qYT2RA==",
+ "dependencies": {
+ "@wessberg/stringutil": "^1.0.19",
+ "ansi-colors": "^4.1.3",
+ "commander": "^9.3.0",
+ "compatfactory": "^1.0.1",
+ "crosspath": "^2.0.0",
+ "fast-glob": "^3.2.11",
+ "helpertypes": "^0.0.18",
+ "reserved-words": "^0.1.2",
+ "resolve": "^1.22.0"
+ },
+ "bin": {
+ "cjstoesm": "bin/cjstoesm.js"
+ },
+ "engines": {
+ "node": ">=14.9.0"
+ },
+ "peerDependencies": {
+ "typescript": ">=3.2.x || >= 4.x"
+ }
+ },
+ "node_modules/cjstoesm/node_modules/ansi-colors": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cjstoesm/node_modules/commander": {
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
+ "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
+ "engines": {
+ "node": "^12.20.0 || >=14"
+ }
+ },
"node_modules/clean-css": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz",
@@ -2578,6 +2624,20 @@
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
},
+ "node_modules/compatfactory": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/compatfactory/-/compatfactory-1.0.1.tgz",
+ "integrity": "sha512-hR9u0HSZTKDNNchPtMHg6myeNx0XO+av7UZIJPsi4rPALJBHi/W5Mbwi19hC/xm6y3JkYpxVYjTqnSGsU5X/iw==",
+ "dependencies": {
+ "helpertypes": "^0.0.18"
+ },
+ "engines": {
+ "node": ">=14.9.0"
+ },
+ "peerDependencies": {
+ "typescript": ">=3.x || >= 4.x"
+ }
+ },
"node_modules/component-bind": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
@@ -2773,6 +2833,22 @@
"node": ">= 8"
}
},
+ "node_modules/crosspath": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/crosspath/-/crosspath-2.0.0.tgz",
+ "integrity": "sha512-ju88BYCQ2uvjO2bR+SsgLSTwTSctU+6Vp2ePbKPgSCZyy4MWZxYsT738DlKVRE5utUjobjPRm1MkTYKJxCmpTA==",
+ "dependencies": {
+ "@types/node": "^17.0.36"
+ },
+ "engines": {
+ "node": ">=14.9.0"
+ }
+ },
+ "node_modules/crosspath/node_modules/@types/node": {
+ "version": "17.0.45",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz",
+ "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
+ },
"node_modules/css-select": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
@@ -4550,17 +4626,15 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/abbrev": {
"version": "1.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/agent-base": {
"version": "4.3.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"es6-promisify": "^5.0.0"
},
@@ -4570,10 +4644,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/agentkeepalive": {
"version": "3.5.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"humanize-ms": "^1.2.1"
},
@@ -4583,30 +4656,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ansi-align": {
"version": "2.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"string-width": "^2.0.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ansi-regex": {
"version": "2.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ansi-styles": {
"version": "3.2.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"color-convert": "^1.9.0"
},
@@ -4616,38 +4686,33 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ansicolors": {
"version": "0.3.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ansistyles": {
"version": "0.1.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/aproba": {
"version": "2.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/archy": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/are-we-there-yet": {
"version": "1.1.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"delegates": "^1.0.0",
"readable-stream": "^2.0.6"
@@ -4655,10 +4720,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream": {
"version": "2.3.6",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -4671,89 +4735,78 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/are-we-there-yet/node_modules/string_decoder": {
"version": "1.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/asap": {
"version": "2.0.6",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/asn1": {
"version": "0.2.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"safer-buffer": "~2.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/assert-plus": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.8"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/asynckit": {
"version": "0.4.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/aws-sign2": {
"version": "0.7.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "Apache-2.0",
- "peer": true,
"engines": {
"node": "*"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/aws4": {
"version": "1.8.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/balanced-match": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/bcrypt-pbkdf": {
"version": "1.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "BSD-3-Clause",
- "optional": true,
- "peer": true,
"dependencies": {
"tweetnacl": "^0.14.3"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/bin-links": {
"version": "1.1.8",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "Artistic-2.0",
- "peer": true,
"dependencies": {
"bluebird": "^3.5.3",
"cmd-shim": "^3.0.0",
@@ -4765,17 +4818,15 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/bluebird": {
"version": "3.5.5",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/boxen": {
"version": "1.3.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"ansi-align": "^2.0.0",
"camelcase": "^4.0.0",
@@ -4791,10 +4842,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/brace-expansion": {
"version": "1.1.11",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -4802,44 +4852,39 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/buffer-from": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/builtins": {
"version": "1.0.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/byline": {
"version": "5.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/byte-size": {
"version": "5.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cacache": {
"version": "12.0.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"bluebird": "^3.5.5",
"chownr": "^1.1.1",
@@ -4860,44 +4905,39 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/call-limit": {
"version": "1.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/camelcase": {
"version": "4.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/capture-stack-trace": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/caseless": {
"version": "0.12.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "Apache-2.0",
- "peer": true
+ "license": "Apache-2.0"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/chalk": {
"version": "2.4.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -4909,24 +4949,21 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/chownr": {
"version": "1.1.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ci-info": {
"version": "2.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cidr-regex": {
"version": "2.0.10",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "BSD-2-Clause",
- "peer": true,
"dependencies": {
"ip-regex": "^2.1.0"
},
@@ -4936,20 +4973,18 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cli-boxes": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cli-columns": {
"version": "3.1.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"string-width": "^2.0.0",
"strip-ansi": "^3.0.1"
@@ -4960,10 +4995,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cli-table3": {
"version": "0.5.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"object-assign": "^4.1.0",
"string-width": "^2.1.1"
@@ -4977,10 +5011,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cliui": {
"version": "5.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"string-width": "^3.1.0",
"strip-ansi": "^5.2.0",
@@ -4989,30 +5022,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cliui/node_modules/ansi-regex": {
"version": "4.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cliui/node_modules/is-fullwidth-code-point": {
"version": "2.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cliui/node_modules/string-width": {
"version": "3.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
@@ -5024,10 +5054,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cliui/node_modules/strip-ansi": {
"version": "5.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"ansi-regex": "^4.1.0"
},
@@ -5037,20 +5066,18 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/clone": {
"version": "1.0.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.8"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cmd-shim": {
"version": "3.0.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"graceful-fs": "^4.1.2",
"mkdirp": "~0.5.0"
@@ -5058,48 +5085,42 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/code-point-at": {
"version": "1.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/color-convert": {
"version": "1.9.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"color-name": "^1.1.1"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/color-name": {
"version": "1.1.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/colors": {
"version": "1.3.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "optional": true,
- "peer": true,
"engines": {
"node": ">=0.1.90"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/columnify": {
"version": "1.5.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"strip-ansi": "^3.0.0",
"wcwidth": "^1.0.0"
@@ -5107,10 +5128,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/combined-stream": {
"version": "1.0.6",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"delayed-stream": "~1.0.0"
},
@@ -5120,20 +5140,18 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/concat-map": {
"version": "0.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/concat-stream": {
"version": "1.6.2",
- "dev": true,
"engines": [
"node >= 0.8"
],
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
@@ -5143,10 +5161,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream": {
"version": "2.3.6",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -5159,19 +5176,17 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/concat-stream/node_modules/string_decoder": {
"version": "1.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/config-chain": {
"version": "1.1.12",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "peer": true,
"dependencies": {
"ini": "^1.3.4",
"proto-list": "~1.2.1"
@@ -5179,10 +5194,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/configstore": {
"version": "3.1.5",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "BSD-2-Clause",
- "peer": true,
"dependencies": {
"dot-prop": "^4.2.1",
"graceful-fs": "^4.1.2",
@@ -5197,17 +5211,15 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/console-control-strings": {
"version": "1.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/copy-concurrently": {
"version": "1.0.5",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"aproba": "^1.1.1",
"fs-write-stream-atomic": "^1.0.8",
@@ -5219,31 +5231,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/copy-concurrently/node_modules/aproba": {
"version": "1.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/copy-concurrently/node_modules/iferr": {
"version": "0.1.5",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/core-util-is": {
"version": "1.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/create-error-class": {
"version": "3.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"capture-stack-trace": "^1.0.0"
},
@@ -5253,10 +5261,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cross-spawn": {
"version": "5.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"lru-cache": "^4.0.1",
"shebang-command": "^1.2.0",
@@ -5265,10 +5272,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cross-spawn/node_modules/lru-cache": {
"version": "4.1.5",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"pseudomap": "^1.0.2",
"yallist": "^2.1.2"
@@ -5276,33 +5282,29 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cross-spawn/node_modules/yallist": {
"version": "2.1.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/crypto-random-string": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cyclist": {
"version": "0.2.2",
- "dev": true,
- "inBundle": true,
- "peer": true
+ "extraneous": true,
+ "inBundle": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/dashdash": {
"version": "1.14.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"assert-plus": "^1.0.0"
},
@@ -5312,77 +5314,69 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/debug": {
"version": "3.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/debug/node_modules/ms": {
"version": "2.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/debuglog": {
"version": "1.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": "*"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/decamelize": {
"version": "1.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/decode-uri-component": {
"version": "0.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/deep-extend": {
"version": "0.6.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4.0.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/defaults": {
"version": "1.0.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"clone": "^1.0.2"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/define-properties": {
"version": "1.1.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"object-keys": "^1.0.12"
},
@@ -5392,47 +5386,42 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/delayed-stream": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/delegates": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/detect-indent": {
"version": "5.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/detect-newline": {
"version": "2.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/dezalgo": {
"version": "1.0.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"asap": "^2.0.0",
"wrappy": "1"
@@ -5440,10 +5429,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/dot-prop": {
"version": "4.2.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"is-obj": "^1.0.0"
},
@@ -5453,27 +5441,24 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/dotenv": {
"version": "5.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "BSD-2-Clause",
- "peer": true,
"engines": {
"node": ">=4.6.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/duplexer3": {
"version": "0.1.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "BSD-3-Clause",
- "peer": true
+ "license": "BSD-3-Clause"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/duplexify": {
"version": "3.6.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"end-of-stream": "^1.0.0",
"inherits": "^2.0.1",
@@ -5483,10 +5468,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/duplexify/node_modules/readable-stream": {
"version": "2.3.6",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -5499,21 +5483,18 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/duplexify/node_modules/string_decoder": {
"version": "1.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ecc-jsbn": {
"version": "0.1.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "optional": true,
- "peer": true,
"dependencies": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
@@ -5521,61 +5502,54 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/editor": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/emoji-regex": {
"version": "7.0.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/encoding": {
"version": "0.1.12",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"iconv-lite": "~0.4.13"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/end-of-stream": {
"version": "1.4.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"once": "^1.4.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/env-paths": {
"version": "2.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/err-code": {
"version": "1.1.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/errno": {
"version": "0.1.7",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"prr": "~1.0.1"
},
@@ -5585,10 +5559,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/es-abstract": {
"version": "1.12.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"es-to-primitive": "^1.1.1",
"function-bind": "^1.1.1",
@@ -5602,10 +5575,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/es-to-primitive": {
"version": "1.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"is-callable": "^1.1.4",
"is-date-object": "^1.0.1",
@@ -5617,37 +5589,33 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/es6-promise": {
"version": "4.2.8",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/es6-promisify": {
"version": "5.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"es6-promise": "^4.0.3"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/escape-string-regexp": {
"version": "1.0.5",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/execa": {
"version": "0.7.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"cross-spawn": "^5.0.1",
"get-stream": "^3.0.0",
@@ -5663,58 +5631,51 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/execa/node_modules/get-stream": {
"version": "3.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/extend": {
"version": "3.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/extsprintf": {
"version": "1.3.0",
- "dev": true,
"engines": [
"node >=0.6.0"
],
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fast-json-stable-stringify": {
"version": "2.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/figgy-pudding": {
"version": "3.5.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/find-npm-prefix": {
"version": "1.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/flush-write-stream": {
"version": "1.0.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"inherits": "^2.0.1",
"readable-stream": "^2.0.4"
@@ -5722,10 +5683,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream": {
"version": "2.3.6",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -5738,30 +5698,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/flush-write-stream/node_modules/string_decoder": {
"version": "1.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/forever-agent": {
"version": "0.6.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "Apache-2.0",
- "peer": true,
"engines": {
"node": "*"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/form-data": {
"version": "2.3.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "1.0.6",
@@ -5773,10 +5730,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/from2": {
"version": "2.3.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"inherits": "^2.0.1",
"readable-stream": "^2.0.0"
@@ -5784,10 +5740,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/from2/node_modules/readable-stream": {
"version": "2.3.6",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -5800,30 +5755,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/from2/node_modules/string_decoder": {
"version": "1.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-minipass": {
"version": "1.2.7",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"minipass": "^2.6.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-minipass/node_modules/minipass": {
"version": "2.9.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
@@ -5831,10 +5783,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-vacuum": {
"version": "1.2.10",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"graceful-fs": "^4.1.2",
"path-is-inside": "^1.0.1",
@@ -5843,10 +5794,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-write-stream-atomic": {
"version": "1.0.10",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"graceful-fs": "^4.1.2",
"iferr": "^0.1.5",
@@ -5856,17 +5806,15 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/iferr": {
"version": "0.1.5",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream": {
"version": "2.3.6",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -5879,34 +5827,30 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/string_decoder": {
"version": "1.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs.realpath": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/function-bind": {
"version": "1.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gauge": {
"version": "2.7.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"aproba": "^1.0.3",
"console-control-strings": "^1.0.0",
@@ -5920,17 +5864,15 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gauge/node_modules/aproba": {
"version": "1.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gauge/node_modules/string-width": {
"version": "1.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -5942,17 +5884,15 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/genfun": {
"version": "5.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gentle-fs": {
"version": "2.3.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "Artistic-2.0",
- "peer": true,
"dependencies": {
"aproba": "^1.1.2",
"chownr": "^1.1.2",
@@ -5969,34 +5909,30 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gentle-fs/node_modules/aproba": {
"version": "1.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gentle-fs/node_modules/iferr": {
"version": "0.1.5",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/get-caller-file": {
"version": "2.0.5",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/get-stream": {
"version": "4.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"pump": "^3.0.0"
},
@@ -6006,20 +5942,18 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/getpass": {
"version": "0.1.7",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"assert-plus": "^1.0.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/glob": {
"version": "7.1.6",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -6037,10 +5971,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/global-dirs": {
"version": "0.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"ini": "^1.3.4"
},
@@ -6050,10 +5983,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/got": {
"version": "6.7.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"create-error-class": "^3.0.0",
"duplexer3": "^0.1.4",
@@ -6073,27 +6005,24 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/got/node_modules/get-stream": {
"version": "3.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/graceful-fs": {
"version": "4.2.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/har-schema": {
"version": "2.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"engines": {
"node": ">=4"
}
@@ -6101,10 +6030,9 @@
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/har-validator": {
"version": "5.1.5",
"deprecated": "this library is no longer supported",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"ajv": "^6.12.3",
"har-schema": "^2.0.0"
@@ -6115,10 +6043,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/har-validator/node_modules/ajv": {
"version": "6.12.6",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -6132,24 +6059,21 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/har-validator/node_modules/fast-deep-equal": {
"version": "3.1.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/har-validator/node_modules/json-schema-traverse": {
"version": "0.4.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/has": {
"version": "1.0.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"function-bind": "^1.1.1"
},
@@ -6159,51 +6083,45 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/has-flag": {
"version": "3.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/has-symbols": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">= 0.4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/has-unicode": {
"version": "2.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/hosted-git-info": {
"version": "2.8.9",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/http-cache-semantics": {
"version": "3.8.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "BSD-2-Clause",
- "peer": true
+ "license": "BSD-2-Clause"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/http-proxy-agent": {
"version": "2.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"agent-base": "4",
"debug": "3.1.0"
@@ -6214,10 +6132,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/http-signature": {
"version": "1.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
@@ -6230,10 +6147,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/https-proxy-agent": {
"version": "2.2.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"agent-base": "^4.3.0",
"debug": "^3.1.0"
@@ -6244,20 +6160,18 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/humanize-ms": {
"version": "1.2.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"ms": "^2.0.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/iconv-lite": {
"version": "0.4.23",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
@@ -6267,57 +6181,51 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/iferr": {
"version": "1.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ignore-walk": {
"version": "3.0.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"minimatch": "^3.0.4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/import-lazy": {
"version": "2.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/imurmurhash": {
"version": "0.1.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.8.19"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/infer-owner": {
"version": "1.0.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/inflight": {
"version": "1.0.6",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
@@ -6325,24 +6233,21 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/inherits": {
"version": "2.0.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ini": {
"version": "1.3.8",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/init-package-json": {
"version": "1.10.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"glob": "^7.1.1",
"npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0",
@@ -6356,37 +6261,33 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ip": {
"version": "1.1.5",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ip-regex": {
"version": "2.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-callable": {
"version": "1.1.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">= 0.4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-ci": {
"version": "1.2.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"ci-info": "^1.5.0"
},
@@ -6396,17 +6297,15 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-ci/node_modules/ci-info": {
"version": "1.6.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-cidr": {
"version": "3.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "BSD-2-Clause",
- "peer": true,
"dependencies": {
"cidr-regex": "^2.0.10"
},
@@ -6416,20 +6315,18 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-date-object": {
"version": "1.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">= 0.4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-fullwidth-code-point": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"number-is-nan": "^1.0.0"
},
@@ -6439,10 +6336,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-installed-globally": {
"version": "0.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"global-dirs": "^0.1.0",
"is-path-inside": "^1.0.0"
@@ -6453,30 +6349,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-npm": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-obj": {
"version": "1.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-path-inside": {
"version": "1.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"path-is-inside": "^1.0.1"
},
@@ -6486,20 +6379,18 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-redirect": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-regex": {
"version": "1.0.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"has": "^1.0.1"
},
@@ -6509,30 +6400,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-retry-allowed": {
"version": "1.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-stream": {
"version": "1.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-symbol": {
"version": "1.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"has-symbols": "^1.0.0"
},
@@ -6542,76 +6430,65 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-typedarray": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/isarray": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/isexe": {
"version": "2.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/isstream": {
"version": "0.1.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/jsbn": {
"version": "0.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "optional": true,
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/json-parse-better-errors": {
"version": "1.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/json-schema": {
"version": "0.2.3",
- "dev": true,
- "inBundle": true,
- "peer": true
+ "extraneous": true,
+ "inBundle": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/json-stringify-safe": {
"version": "5.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/jsonparse": {
"version": "1.3.1",
- "dev": true,
"engines": [
"node >= 0.2.0"
],
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/JSONStream": {
"version": "1.3.5",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "(MIT OR Apache-2.0)",
- "peer": true,
"dependencies": {
"jsonparse": "^1.2.0",
"through": ">=2.2.7 <3"
@@ -6625,13 +6502,12 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/jsprim": {
"version": "1.4.1",
- "dev": true,
"engines": [
"node >=0.6.0"
],
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
@@ -6641,10 +6517,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/latest-version": {
"version": "3.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"package-json": "^4.0.0"
},
@@ -6654,17 +6529,15 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lazy-property": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libcipm": {
"version": "4.0.8",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"bin-links": "^1.1.2",
"bluebird": "^3.5.1",
@@ -6685,10 +6558,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpm": {
"version": "3.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"bin-links": "^1.1.2",
"bluebird": "^3.5.3",
@@ -6714,10 +6586,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmaccess": {
"version": "3.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"aproba": "^2.0.0",
"get-stream": "^4.0.0",
@@ -6727,10 +6598,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig": {
"version": "1.2.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"figgy-pudding": "^3.5.1",
"find-up": "^3.0.0",
@@ -6739,10 +6609,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig/node_modules/find-up": {
"version": "3.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"locate-path": "^3.0.0"
},
@@ -6752,10 +6621,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig/node_modules/locate-path": {
"version": "3.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"p-locate": "^3.0.0",
"path-exists": "^3.0.0"
@@ -6766,10 +6634,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig/node_modules/p-limit": {
"version": "2.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"p-try": "^2.0.0"
},
@@ -6779,10 +6646,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig/node_modules/p-locate": {
"version": "3.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"p-limit": "^2.0.0"
},
@@ -6792,20 +6658,18 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig/node_modules/p-try": {
"version": "2.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmhook": {
"version": "5.0.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"aproba": "^2.0.0",
"figgy-pudding": "^3.4.1",
@@ -6815,10 +6679,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmorg": {
"version": "1.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"aproba": "^2.0.0",
"figgy-pudding": "^3.4.1",
@@ -6828,10 +6691,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmpublish": {
"version": "1.1.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"aproba": "^2.0.0",
"figgy-pudding": "^3.5.1",
@@ -6846,10 +6708,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmsearch": {
"version": "2.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"figgy-pudding": "^3.5.1",
"get-stream": "^4.0.0",
@@ -6858,10 +6719,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmteam": {
"version": "1.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"aproba": "^2.0.0",
"figgy-pudding": "^3.4.1",
@@ -6871,10 +6731,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpx": {
"version": "10.2.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"dotenv": "^5.0.1",
"npm-package-arg": "^6.0.0",
@@ -6891,10 +6750,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lock-verify": {
"version": "2.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"npm-package-arg": "^6.1.0",
"semver": "^5.4.1"
@@ -6902,10 +6760,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lockfile": {
"version": "1.0.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"signal-exit": "^3.0.2"
}
@@ -6918,10 +6775,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._baseuniq": {
"version": "4.6.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"lodash._createset": "~4.0.0",
"lodash._root": "~3.0.0"
@@ -6950,10 +6806,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._createset": {
"version": "4.0.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._getnative": {
"version": "3.9.1",
@@ -6963,17 +6818,15 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._root": {
"version": "3.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
+ "extraneous": true,
+ "inBundle": true,
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.clonedeep": {
"version": "4.5.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.restparam": {
"version": "3.6.1",
@@ -6983,51 +6836,45 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.union": {
"version": "4.6.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.uniq": {
"version": "4.5.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.without": {
"version": "4.4.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lowercase-keys": {
"version": "1.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lru-cache": {
"version": "5.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"yallist": "^3.0.2"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/make-dir": {
"version": "1.3.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"pify": "^3.0.0"
},
@@ -7037,10 +6884,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/make-fetch-happen": {
"version": "5.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"agentkeepalive": "^3.4.1",
"cacache": "^12.0.0",
@@ -7057,27 +6903,24 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/meant": {
"version": "1.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mime-db": {
"version": "1.35.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">= 0.6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mime-types": {
"version": "2.1.19",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"mime-db": "~1.35.0"
},
@@ -7087,10 +6930,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/minimatch": {
"version": "3.0.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"brace-expansion": "^1.1.7"
},
@@ -7100,27 +6942,24 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/minimist": {
"version": "1.2.5",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/minizlib": {
"version": "1.3.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"minipass": "^2.9.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/minizlib/node_modules/minipass": {
"version": "2.9.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
@@ -7128,10 +6967,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mississippi": {
"version": "3.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "BSD-2-Clause",
- "peer": true,
"dependencies": {
"concat-stream": "^1.5.0",
"duplexify": "^3.4.2",
@@ -7150,10 +6988,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mkdirp": {
"version": "0.5.5",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"minimist": "^1.2.5"
},
@@ -7163,17 +7000,15 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mkdirp/node_modules/minimist": {
"version": "1.2.5",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/move-concurrently": {
"version": "1.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"aproba": "^1.1.1",
"copy-concurrently": "^1.0.0",
@@ -7185,31 +7020,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/move-concurrently/node_modules/aproba": {
"version": "1.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ms": {
"version": "2.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mute-stream": {
"version": "0.0.7",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/node-fetch-npm": {
"version": "2.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"encoding": "^0.1.11",
"json-parse-better-errors": "^1.0.0",
@@ -7221,10 +7052,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/node-gyp": {
"version": "5.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"env-paths": "^2.2.0",
"glob": "^7.1.4",
@@ -7247,10 +7077,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/nopt": {
"version": "4.0.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"abbrev": "1",
"osenv": "^0.1.4"
@@ -7261,10 +7090,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/normalize-package-data": {
"version": "2.5.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "BSD-2-Clause",
- "peer": true,
"dependencies": {
"hosted-git-info": "^2.1.4",
"resolve": "^1.10.0",
@@ -7274,20 +7102,18 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve": {
"version": "1.10.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"path-parse": "^1.0.6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-audit-report": {
"version": "1.3.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"cli-table3": "^0.5.0",
"console-control-strings": "^1.1.0"
@@ -7295,37 +7121,33 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-bundled": {
"version": "1.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"npm-normalize-package-bin": "^1.0.1"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-cache-filename": {
"version": "1.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-install-checks": {
"version": "3.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "BSD-2-Clause",
- "peer": true,
"dependencies": {
"semver": "^2.3.0 || 3.x || 4 || 5"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-lifecycle": {
"version": "3.1.5",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "Artistic-2.0",
- "peer": true,
"dependencies": {
"byline": "^5.0.0",
"graceful-fs": "^4.1.15",
@@ -7339,24 +7161,21 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-logical-tree": {
"version": "1.2.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-normalize-package-bin": {
"version": "1.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-package-arg": {
"version": "6.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"hosted-git-info": "^2.7.1",
"osenv": "^0.1.5",
@@ -7366,10 +7185,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-packlist": {
"version": "1.4.8",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"ignore-walk": "^3.0.1",
"npm-bundled": "^1.0.1",
@@ -7378,10 +7196,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-pick-manifest": {
"version": "3.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"figgy-pudding": "^3.5.1",
"npm-package-arg": "^6.0.0",
@@ -7390,10 +7207,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-profile": {
"version": "4.0.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"aproba": "^1.1.2 || 2",
"figgy-pudding": "^3.4.1",
@@ -7402,10 +7218,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-registry-fetch": {
"version": "4.0.7",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"bluebird": "^3.5.1",
"figgy-pudding": "^3.4.1",
@@ -7418,7 +7233,7 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer": {
"version": "5.2.1",
- "dev": true,
+ "extraneous": true,
"funding": [
{
"type": "github",
@@ -7434,15 +7249,13 @@
}
],
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-run-path": {
"version": "2.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"path-key": "^2.0.0"
},
@@ -7452,17 +7265,15 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-user-validate": {
"version": "1.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "BSD-2-Clause",
- "peer": true
+ "license": "BSD-2-Clause"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npmlog": {
"version": "4.1.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"are-we-there-yet": "~1.1.2",
"console-control-strings": "~1.1.0",
@@ -7472,50 +7283,45 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/number-is-nan": {
"version": "1.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/oauth-sign": {
"version": "0.9.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "Apache-2.0",
- "peer": true,
"engines": {
"node": "*"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/object-assign": {
"version": "4.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/object-keys": {
"version": "1.0.12",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">= 0.4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/object.getownpropertydescriptors": {
"version": "2.0.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"define-properties": "^1.1.2",
"es-abstract": "^1.5.1"
@@ -7526,50 +7332,45 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/once": {
"version": "1.4.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"wrappy": "1"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/opener": {
"version": "1.5.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "(WTFPL OR MIT)",
- "peer": true,
"bin": {
"opener": "bin/opener-bin.js"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/os-homedir": {
"version": "1.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/os-tmpdir": {
"version": "1.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/osenv": {
"version": "0.1.5",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"os-homedir": "^1.0.0",
"os-tmpdir": "^1.0.0"
@@ -7577,20 +7378,18 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/p-finally": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/package-json": {
"version": "4.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"got": "^6.7.1",
"registry-auth-token": "^3.0.1",
@@ -7603,10 +7402,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pacote": {
"version": "9.5.12",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"bluebird": "^3.5.3",
"cacache": "^12.0.2",
@@ -7642,10 +7440,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pacote/node_modules/minipass": {
"version": "2.9.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
@@ -7653,10 +7450,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/parallel-transform": {
"version": "1.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"cyclist": "~0.2.2",
"inherits": "^2.0.3",
@@ -7665,10 +7461,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream": {
"version": "2.3.6",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -7681,105 +7476,93 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/parallel-transform/node_modules/string_decoder": {
"version": "1.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/path-exists": {
"version": "3.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/path-is-absolute": {
"version": "1.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/path-is-inside": {
"version": "1.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "(WTFPL OR MIT)",
- "peer": true
+ "license": "(WTFPL OR MIT)"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/path-key": {
"version": "2.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/path-parse": {
"version": "1.0.6",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/performance-now": {
"version": "2.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pify": {
"version": "3.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/prepend-http": {
"version": "1.0.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/process-nextick-args": {
"version": "2.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/promise-inflight": {
"version": "1.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/promise-retry": {
"version": "1.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"err-code": "^1.0.0",
"retry": "^0.10.0"
@@ -7790,68 +7573,60 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/promise-retry/node_modules/retry": {
"version": "0.10.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": "*"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/promzard": {
"version": "0.3.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"read": "1"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/proto-list": {
"version": "1.2.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/protoduck": {
"version": "5.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"genfun": "^5.0.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/prr": {
"version": "1.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pseudomap": {
"version": "1.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/psl": {
"version": "1.1.29",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pump": {
"version": "3.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -7859,10 +7634,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pumpify": {
"version": "1.5.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"duplexify": "^3.6.0",
"inherits": "^2.0.3",
@@ -7871,10 +7645,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pumpify/node_modules/pump": {
"version": "2.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -7882,36 +7655,32 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/punycode": {
"version": "1.4.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/qrcode-terminal": {
"version": "0.12.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "peer": true,
"bin": {
"qrcode-terminal": "bin/qrcode-terminal.js"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/qs": {
"version": "6.5.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "BSD-3-Clause",
- "peer": true,
"engines": {
"node": ">=0.6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/query-string": {
"version": "6.8.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"decode-uri-component": "^0.2.0",
"split-on-first": "^1.0.0",
@@ -7923,17 +7692,15 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/qw": {
"version": "1.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/rc": {
"version": "1.2.8",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
- "peer": true,
"dependencies": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
@@ -7946,10 +7713,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/read": {
"version": "1.0.7",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"mute-stream": "~0.0.4"
},
@@ -7959,20 +7725,18 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/read-cmd-shim": {
"version": "1.0.5",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"graceful-fs": "^4.1.2"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/read-installed": {
"version": "4.0.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"debuglog": "^1.0.1",
"read-package-json": "^2.0.0",
@@ -7987,10 +7751,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/read-package-json": {
"version": "2.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"glob": "^7.1.1",
"json-parse-better-errors": "^1.0.1",
@@ -8003,10 +7766,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/read-package-tree": {
"version": "5.3.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"read-package-json": "^2.0.0",
"readdir-scoped-modules": "^1.0.0",
@@ -8015,10 +7777,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/readable-stream": {
"version": "3.6.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -8030,10 +7791,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/readdir-scoped-modules": {
"version": "1.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"debuglog": "^1.0.1",
"dezalgo": "^1.0.0",
@@ -8043,10 +7803,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/registry-auth-token": {
"version": "3.4.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"rc": "^1.1.6",
"safe-buffer": "^5.0.1"
@@ -8054,10 +7813,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/registry-url": {
"version": "3.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"rc": "^1.0.1"
},
@@ -8067,10 +7825,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/request": {
"version": "2.88.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"aws-sign2": "~0.7.0",
"aws4": "^1.8.0",
@@ -8099,47 +7856,42 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/require-directory": {
"version": "2.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/require-main-filename": {
"version": "2.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/resolve-from": {
"version": "4.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/retry": {
"version": "0.12.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">= 4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/rimraf": {
"version": "2.7.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"glob": "^7.1.3"
},
@@ -8149,51 +7901,45 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/run-queue": {
"version": "1.0.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"aproba": "^1.1.1"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/run-queue/node_modules/aproba": {
"version": "1.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/safe-buffer": {
"version": "5.1.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/safer-buffer": {
"version": "2.1.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/semver": {
"version": "5.7.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"bin": {
"semver": "bin/semver"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/semver-diff": {
"version": "2.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"semver": "^5.0.3"
},
@@ -8203,27 +7949,24 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/set-blocking": {
"version": "2.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sha": {
"version": "3.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "(BSD-2-Clause OR MIT)",
- "peer": true,
"dependencies": {
"graceful-fs": "^4.1.2"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/shebang-command": {
"version": "1.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"shebang-regex": "^1.0.0"
},
@@ -8233,37 +7976,33 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/shebang-regex": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/signal-exit": {
"version": "3.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/slide": {
"version": "1.1.6",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"engines": {
"node": "*"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/smart-buffer": {
"version": "4.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
@@ -8271,10 +8010,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/socks": {
"version": "2.3.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"ip": "1.1.5",
"smart-buffer": "^4.1.0"
@@ -8286,10 +8024,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/socks-proxy-agent": {
"version": "4.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"agent-base": "~4.2.1",
"socks": "~2.3.2"
@@ -8300,10 +8037,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/socks-proxy-agent/node_modules/agent-base": {
"version": "4.2.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"es6-promisify": "^5.0.0"
},
@@ -8313,17 +8049,15 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-object": {
"version": "2.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "(WTFPL OR MIT)",
- "peer": true
+ "license": "(WTFPL OR MIT)"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-union-stream": {
"version": "2.1.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"from2": "^1.3.0",
"stream-iterate": "^1.1.0"
@@ -8331,10 +8065,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-union-stream/node_modules/from2": {
"version": "1.3.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"inherits": "~2.0.1",
"readable-stream": "~1.1.10"
@@ -8342,17 +8075,15 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-union-stream/node_modules/isarray": {
"version": "0.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream": {
"version": "1.1.14",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
@@ -8362,17 +8093,15 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-union-stream/node_modules/string_decoder": {
"version": "0.10.31",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/spdx-correct": {
"version": "3.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"spdx-expression-parse": "^3.0.0",
"spdx-license-ids": "^3.0.0"
@@ -8380,17 +8109,15 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/spdx-exceptions": {
"version": "2.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "CC-BY-3.0",
- "peer": true
+ "license": "CC-BY-3.0"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/spdx-expression-parse": {
"version": "3.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
@@ -8398,27 +8125,24 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/spdx-license-ids": {
"version": "3.0.5",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "CC0-1.0",
- "peer": true
+ "license": "CC0-1.0"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/split-on-first": {
"version": "1.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sshpk": {
"version": "1.14.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
@@ -8443,20 +8167,18 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ssri": {
"version": "6.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"figgy-pudding": "^3.5.1"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stream-each": {
"version": "1.2.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"end-of-stream": "^1.1.0",
"stream-shift": "^1.0.0"
@@ -8464,10 +8186,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stream-iterate": {
"version": "1.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"readable-stream": "^2.1.5",
"stream-shift": "^1.0.0"
@@ -8475,10 +8196,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream": {
"version": "2.3.6",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -8491,54 +8211,48 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stream-iterate/node_modules/string_decoder": {
"version": "1.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stream-shift": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/strict-uri-encode": {
"version": "2.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string_decoder": {
"version": "1.3.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"safe-buffer": "~5.2.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string_decoder/node_modules/safe-buffer": {
"version": "5.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string-width": {
"version": "2.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^4.0.0"
@@ -8549,30 +8263,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string-width/node_modules/ansi-regex": {
"version": "3.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string-width/node_modules/is-fullwidth-code-point": {
"version": "2.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string-width/node_modules/strip-ansi": {
"version": "4.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"ansi-regex": "^3.0.0"
},
@@ -8582,17 +8293,15 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stringify-package": {
"version": "1.0.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
+ "extraneous": true,
+ "inBundle": true,
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/strip-ansi": {
"version": "3.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"ansi-regex": "^2.0.0"
},
@@ -8602,30 +8311,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/strip-eof": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/strip-json-comments": {
"version": "2.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/supports-color": {
"version": "5.4.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"has-flag": "^3.0.0"
},
@@ -8635,10 +8341,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tar": {
"version": "4.4.13",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"chownr": "^1.1.1",
"fs-minipass": "^1.2.5",
@@ -8654,10 +8359,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tar/node_modules/minipass": {
"version": "2.9.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
@@ -8665,10 +8369,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/term-size": {
"version": "1.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"execa": "^0.7.0"
},
@@ -8678,24 +8381,21 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/text-table": {
"version": "0.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/through": {
"version": "2.3.8",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/through2": {
"version": "2.0.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"readable-stream": "^2.1.5",
"xtend": "~4.0.1"
@@ -8703,10 +8403,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/through2/node_modules/readable-stream": {
"version": "2.3.6",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -8719,37 +8418,33 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/through2/node_modules/string_decoder": {
"version": "1.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/timed-out": {
"version": "4.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tiny-relative-date": {
"version": "1.3.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tough-cookie": {
"version": "2.4.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "BSD-3-Clause",
- "peer": true,
"dependencies": {
"psl": "^1.1.24",
"punycode": "^1.4.1"
@@ -8760,10 +8455,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tunnel-agent": {
"version": "0.6.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"safe-buffer": "^5.0.1"
},
@@ -8773,62 +8467,54 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tweetnacl": {
"version": "0.14.5",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "Unlicense",
- "optional": true,
- "peer": true
+ "license": "Unlicense"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/typedarray": {
"version": "0.0.6",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/uid-number": {
"version": "0.0.6",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"engines": {
"node": "*"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/umask": {
"version": "1.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/unique-filename": {
"version": "1.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"unique-slug": "^2.0.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/unique-slug": {
"version": "2.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"imurmurhash": "^0.1.4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/unique-string": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"crypto-random-string": "^1.0.0"
},
@@ -8838,30 +8524,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/unpipe": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">= 0.8"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/unzip-response": {
"version": "2.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/update-notifier": {
"version": "2.5.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "BSD-2-Clause",
- "peer": true,
"dependencies": {
"boxen": "^1.2.1",
"chalk": "^2.0.1",
@@ -8880,30 +8563,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/uri-js": {
"version": "4.4.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "BSD-2-Clause",
- "peer": true,
"dependencies": {
"punycode": "^2.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/uri-js/node_modules/punycode": {
"version": "2.1.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/url-parse-lax": {
"version": "1.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"prepend-http": "^1.0.1"
},
@@ -8913,44 +8593,39 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/util-deprecate": {
"version": "1.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/util-extend": {
"version": "1.0.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/util-promisify": {
"version": "2.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"object.getownpropertydescriptors": "^2.0.3"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/uuid": {
"version": "3.3.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"bin": {
"uuid": "bin/uuid"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/validate-npm-package-license": {
"version": "3.0.4",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"spdx-correct": "^3.0.0",
"spdx-expression-parse": "^3.0.0"
@@ -8958,23 +8633,21 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/validate-npm-package-name": {
"version": "3.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"builtins": "^1.0.3"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/verror": {
"version": "1.10.0",
- "dev": true,
"engines": [
"node >=0.6.0"
],
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
@@ -8983,20 +8656,18 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wcwidth": {
"version": "1.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"defaults": "^1.0.3"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/which": {
"version": "1.3.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"isexe": "^2.0.0"
},
@@ -9006,27 +8677,24 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/which-module": {
"version": "2.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wide-align": {
"version": "1.1.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"string-width": "^1.0.2"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wide-align/node_modules/string-width": {
"version": "1.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -9038,10 +8706,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/widest-line": {
"version": "2.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"string-width": "^2.1.1"
},
@@ -9051,20 +8718,18 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/worker-farm": {
"version": "1.7.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"errno": "~0.1.7"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrap-ansi": {
"version": "5.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"ansi-styles": "^3.2.0",
"string-width": "^3.0.0",
@@ -9076,30 +8741,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": {
"version": "4.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": {
"version": "2.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": {
"version": "3.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
@@ -9111,10 +8773,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": {
"version": "5.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"ansi-regex": "^4.1.0"
},
@@ -9124,17 +8785,15 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrappy": {
"version": "1.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/write-file-atomic": {
"version": "2.4.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"graceful-fs": "^4.1.11",
"imurmurhash": "^0.1.4",
@@ -9143,44 +8802,39 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/xdg-basedir": {
"version": "3.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/xtend": {
"version": "4.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/y18n": {
"version": "4.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yallist": {
"version": "3.0.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs": {
"version": "14.2.3",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"cliui": "^5.0.0",
"decamelize": "^1.2.0",
@@ -9197,10 +8851,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs-parser": {
"version": "15.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
@@ -9208,30 +8861,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs-parser/node_modules/camelcase": {
"version": "5.3.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/ansi-regex": {
"version": "4.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/find-up": {
"version": "3.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"locate-path": "^3.0.0"
},
@@ -9241,20 +8891,18 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/is-fullwidth-code-point": {
"version": "2.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/locate-path": {
"version": "3.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"p-locate": "^3.0.0",
"path-exists": "^3.0.0"
@@ -9265,10 +8913,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/p-limit": {
"version": "2.3.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"p-try": "^2.0.0"
},
@@ -9281,10 +8928,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/p-locate": {
"version": "3.0.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"p-limit": "^2.0.0"
},
@@ -9294,20 +8940,18 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/p-try": {
"version": "2.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/string-width": {
"version": "3.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
@@ -9319,10 +8963,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/strip-ansi": {
"version": "5.2.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"ansi-regex": "^4.1.0"
},
@@ -11007,7 +10650,6 @@
"version": "3.2.11",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
"integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
- "dev": true,
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -11023,7 +10665,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -11050,7 +10691,6 @@
"version": "1.13.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
"integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
- "dev": true,
"dependencies": {
"reusify": "^1.0.4"
}
@@ -11098,7 +10738,6 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -11747,6 +11386,14 @@
"he": "bin/he"
}
},
+ "node_modules/helpertypes": {
+ "version": "0.0.18",
+ "resolved": "https://registry.npmjs.org/helpertypes/-/helpertypes-0.0.18.tgz",
+ "integrity": "sha512-XRhfbSEmR+poXUC5/8AbmYNJb2riOT6qPzjGJZr0S9YedHiaY+/tzPYzWMUclYMEdCYo/1l8PDYrQFCj02v97w==",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
"node_modules/hexoid": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
@@ -12248,7 +11895,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -12266,7 +11912,6 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -12306,7 +11951,6 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
"engines": {
"node": ">=0.12.0"
}
@@ -13275,7 +12919,6 @@
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
"engines": {
"node": ">= 8"
}
@@ -13292,7 +12935,6 @@
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
"integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
- "dev": true,
"dependencies": {
"braces": "^3.0.2",
"picomatch": "^2.3.1"
@@ -14672,8 +14314,8 @@
},
"node_modules/npm/node_modules/bcrypt-pbkdf": {
"version": "1.0.2",
- "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
"inBundle": true,
+ "license": "BSD-3-Clause",
"optional": true,
"dependencies": {
"tweetnacl": "^0.14.3"
@@ -14956,8 +14598,8 @@
},
"node_modules/npm/node_modules/colors": {
"version": "1.3.3",
- "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==",
"inBundle": true,
+ "license": "MIT",
"optional": true,
"engines": {
"node": ">=0.1.90"
@@ -15300,8 +14942,8 @@
},
"node_modules/npm/node_modules/ecc-jsbn": {
"version": "0.1.2",
- "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
"inBundle": true,
+ "license": "MIT",
"optional": true,
"dependencies": {
"jsbn": "~0.1.0",
@@ -16165,8 +15807,8 @@
},
"node_modules/npm/node_modules/jsbn": {
"version": "0.1.1",
- "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
"inBundle": true,
+ "license": "MIT",
"optional": true
},
"node_modules/npm/node_modules/json-parse-better-errors": {
@@ -16456,7 +16098,6 @@
},
"node_modules/npm/node_modules/lodash._baseindexof": {
"version": "3.1.0",
- "extraneous": true,
"inBundle": true,
"license": "MIT"
},
@@ -16471,19 +16112,16 @@
},
"node_modules/npm/node_modules/lodash._bindcallback": {
"version": "3.0.1",
- "extraneous": true,
"inBundle": true,
"license": "MIT"
},
"node_modules/npm/node_modules/lodash._cacheindexof": {
"version": "3.0.2",
- "extraneous": true,
"inBundle": true,
"license": "MIT"
},
"node_modules/npm/node_modules/lodash._createcache": {
"version": "3.1.2",
- "extraneous": true,
"inBundle": true,
"license": "MIT",
"dependencies": {
@@ -16497,7 +16135,6 @@
},
"node_modules/npm/node_modules/lodash._getnative": {
"version": "3.9.1",
- "extraneous": true,
"inBundle": true,
"license": "MIT"
},
@@ -16513,7 +16150,6 @@
},
"node_modules/npm/node_modules/lodash.restparam": {
"version": "3.6.1",
- "extraneous": true,
"inBundle": true,
"license": "MIT"
},
@@ -18015,8 +17651,8 @@
},
"node_modules/npm/node_modules/tweetnacl": {
"version": "0.14.5",
- "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
"inBundle": true,
+ "license": "Unlicense",
"optional": true
},
"node_modules/npm/node_modules/typedarray": {
@@ -18937,7 +18573,6 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
"engines": {
"node": ">=8.6"
},
@@ -19145,7 +18780,6 @@
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
"funding": [
{
"type": "github",
@@ -19486,6 +19120,11 @@
"node": ">=0.10.0"
}
},
+ "node_modules/reserved-words": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz",
+ "integrity": "sha512-0S5SrIUJ9LfpbVl4Yzij6VipUdafHrOTzvmfazSw/jeZrZtQK303OPZW+obtkaw7jQlTQppy0UvZWm9872PbRw=="
+ },
"node_modules/resolve": {
"version": "1.22.2",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
@@ -19546,7 +19185,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
"engines": {
"iojs": ">=1.0.0",
"node": ">=0.10.0"
@@ -19576,7 +19214,6 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
"funding": [
{
"type": "github",
@@ -20845,7 +20482,6 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
"dependencies": {
"is-number": "^7.0.0"
},
@@ -21042,7 +20678,6 @@
"version": "4.9.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
"integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
- "dev": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
diff --git a/src/package.json b/src/package.json
index 6ade4d3d13c..9b8a08abe2b 100644
--- a/src/package.json
+++ b/src/package.json
@@ -31,6 +31,7 @@
],
"dependencies": {
"async": "^3.2.2",
+ "cjstoesm": "^2.1.2",
"clean-css": "^5.3.2",
"cookie-parser": "^1.4.6",
"cross-spawn": "^7.0.3",
@@ -113,6 +114,5 @@
"dev": "concurrently \"npx tsc --watch\" \"nodemon -q dist/server.js\""
},
"version": "1.9.0",
- "license": "Apache-2.0",
- "type": "module"
+ "license": "Apache-2.0"
}
diff --git a/src/static/js/Changeset.js b/src/static/js/Changeset.ts
similarity index 95%
rename from src/static/js/Changeset.js
rename to src/static/js/Changeset.ts
index 53b3f2c8f09..e9f7dfc8d1b 100644
--- a/src/static/js/Changeset.js
+++ b/src/static/js/Changeset.ts
@@ -22,6 +22,8 @@
* https://github.com/ether/pad/blob/master/infrastructure/ace/www/easysync2.js
*/
+import {CustomError} from "../../node/utils/customError";
+
const AttributeMap = require('./AttributeMap');
const AttributePool = require('./AttributePool');
const attributes = require('./attributes');
@@ -47,8 +49,8 @@ const {padutils} = require('./pad_utils');
*
* @param {string} msg - Just some message
*/
-const error = (msg) => {
- const e = new Error(msg);
+export const error = (msg) => {
+ const e = new CustomError(msg);
e.easysync = true;
throw e;
};
@@ -71,7 +73,7 @@ const assert = (b, msg) => {
* @param {string} str - string of the number in base 36
* @returns {number} number
*/
-exports.parseNum = (str) => parseInt(str, 36);
+export const parseNum = (str) => parseInt(str, 36);
/**
* Writes a number in base 36 and puts it in a string.
@@ -79,12 +81,16 @@ exports.parseNum = (str) => parseInt(str, 36);
* @param {number} num - number
* @returns {string} string
*/
-exports.numToString = (num) => num.toString(36).toLowerCase();
+export const numToString = (num) => num.toString(36).toLowerCase();
/**
* An operation to apply to a shared document.
*/
class Op {
+ opcode: string;
+ chars: number;
+ lines: number;
+ attribs: string;
/**
* @param {(''|'='|'+'|'-')} [opcode=''] - Initial value of the `opcode` property.
*/
@@ -146,11 +152,11 @@ class Op {
toString() {
if (!this.opcode) throw new TypeError('null op');
if (typeof this.attribs !== 'string') throw new TypeError('attribs must be a string');
- const l = this.lines ? `|${exports.numToString(this.lines)}` : '';
- return this.attribs + l + this.opcode + exports.numToString(this.chars);
+ const l = this.lines ? `|${numToString(this.lines)}` : '';
+ return this.attribs + l + this.opcode + numToString(this.chars);
}
}
-exports.Op = Op;
+export const Op = Op;
/**
* Describes changes to apply to a document. Does not include the attribute pool or the original
@@ -170,7 +176,7 @@ exports.Op = Op;
* @param {string} cs - String representation of the Changeset
* @returns {number} oldLen property
*/
-exports.oldLen = (cs) => exports.unpack(cs).oldLen;
+export const oldLen = (cs) => exports.unpack(cs).oldLen;
/**
* Returns the length of the text after changeset is applied.
@@ -178,7 +184,7 @@ exports.oldLen = (cs) => exports.unpack(cs).oldLen;
* @param {string} cs - String representation of the Changeset
* @returns {number} newLen property
*/
-exports.newLen = (cs) => exports.unpack(cs).newLen;
+export const newLen = (cs) => exports.unpack(cs).newLen;
/**
* Parses a string of serialized changeset operations.
@@ -187,7 +193,7 @@ exports.newLen = (cs) => exports.unpack(cs).newLen;
* @yields {Op}
* @returns {Generator}
*/
-exports.deserializeOps = function* (ops) {
+export const deserializeOps = function* (ops) {
// TODO: Migrate to String.prototype.matchAll() once there is enough browser support.
const regex = /((?:\*[0-9a-z]+)*)(?:\|([0-9a-z]+))?([-+=])([0-9a-z]+)|(.)/g;
let match;
@@ -195,8 +201,8 @@ exports.deserializeOps = function* (ops) {
if (match[5] === '$') return; // Start of the insert operation character bank.
if (match[5] != null) error(`invalid operation: ${ops.slice(regex.lastIndex - 1)}`);
const op = new Op(match[3]);
- op.lines = exports.parseNum(match[2] || '0');
- op.chars = exports.parseNum(match[4]);
+ op.lines = parseNum(match[2] || '0');
+ op.chars = parseNum(match[4]);
op.attribs = match[1];
yield op;
}
@@ -210,11 +216,18 @@ exports.deserializeOps = function* (ops) {
* @deprecated Use `deserializeOps` instead.
*/
class OpIter {
+ private _next: {
+ value: any;
+ done: boolean,
+
+
+ };
+ private _gen: any;
/**
* @param {string} ops - String encoding the change operations to iterate over.
*/
constructor(ops) {
- this._gen = exports.deserializeOps(ops);
+ this._gen = deserializeOps(ops);
this._next = this._gen.next();
}
@@ -252,7 +265,7 @@ class OpIter {
* @param {string} opsStr - String encoding of the change operations to perform.
* @returns {OpIter} Operator iterator object.
*/
-exports.opIterator = (opsStr) => {
+export const opIterator = (opsStr) => {
padutils.warnDeprecated(
'Changeset.opIterator() is deprecated; use Changeset.deserializeOps() instead');
return new OpIter(opsStr);
@@ -277,7 +290,7 @@ const clearOp = (op) => {
* @param {('+'|'-'|'='|'')} [optOpcode=''] - The operation's operator.
* @returns {Op}
*/
-exports.newOp = (optOpcode) => {
+export const newOp = (optOpcode) => {
padutils.warnDeprecated('Changeset.newOp() is deprecated; use the Changeset.Op class instead');
return new Op(optOpcode);
};
@@ -370,17 +383,17 @@ const opsFromText = function* (opcode, text, attribs = '', pool = null) {
* @param {string} cs - Changeset to check
* @returns {string} the checked Changeset
*/
-exports.checkRep = (cs) => {
- const unpacked = exports.unpack(cs);
+export const checkRep = (cs) => {
+ const unpacked = unpack(cs);
const oldLen = unpacked.oldLen;
const newLen = unpacked.newLen;
const ops = unpacked.ops;
let charBank = unpacked.charBank;
- const assem = exports.smartOpAssembler();
+ const assem = smartOpAssembler();
let oldPos = 0;
let calcNewLen = 0;
- for (const o of exports.deserializeOps(ops)) {
+ for (const o of deserializeOps(ops)) {
switch (o.opcode) {
case '=':
oldPos += o.chars;
@@ -413,7 +426,7 @@ exports.checkRep = (cs) => {
assert(calcNewLen === newLen, 'Invalid changeset: claimed length does not match actual length');
assert(charBank === '', 'Invalid changeset: excess characters in the charBank');
assem.endDocument();
- const normalized = exports.pack(oldLen, calcNewLen, assem.toString(), unpacked.charBank);
+ const normalized = pack(oldLen, calcNewLen, assem.toString(), unpacked.charBank);
assert(normalized === cs, 'Invalid changeset: not in canonical form');
return cs;
};
@@ -421,11 +434,11 @@ exports.checkRep = (cs) => {
/**
* @returns {SmartOpAssembler}
*/
-exports.smartOpAssembler = () => {
- const minusAssem = exports.mergingOpAssembler();
- const plusAssem = exports.mergingOpAssembler();
- const keepAssem = exports.mergingOpAssembler();
- const assem = exports.stringAssembler();
+export const smartOpAssembler = () => {
+ const minusAssem = mergingOpAssembler();
+ const plusAssem = mergingOpAssembler();
+ const keepAssem = mergingOpAssembler();
+ const assem = stringAssembler();
let lastOpcode = '';
let lengthChange = 0;
@@ -515,8 +528,8 @@ exports.smartOpAssembler = () => {
/**
* @returns {MergingOpAssembler}
*/
-exports.mergingOpAssembler = () => {
- const assem = exports.opAssembler();
+export const mergingOpAssembler = () => {
+ const assem = opAssembler();
const bufOp = new Op();
// If we get, for example, insertions [xxx\n,yyy], those don't merge,
@@ -528,7 +541,7 @@ exports.mergingOpAssembler = () => {
/**
* @param {boolean} [isEndDocument]
*/
- const flush = (isEndDocument) => {
+ const flush = (isEndDocument?: boolean) => {
if (!bufOp.opcode) return;
if (isEndDocument && bufOp.opcode === '=' && !bufOp.attribs) {
// final merged keep, leave it implicit
@@ -589,7 +602,7 @@ exports.mergingOpAssembler = () => {
/**
* @returns {OpAssembler}
*/
-exports.opAssembler = () => {
+export const opAssembler = () => {
let serialized = '';
/**
@@ -627,7 +640,7 @@ exports.opAssembler = () => {
* @param {string} str - String to iterate over
* @returns {StringIterator}
*/
-exports.stringIterator = (str) => {
+export const stringIterator = (str) => {
let curIndex = 0;
// newLines is the number of \n between curIndex and str.length
let newLines = str.split('\n').length - 1;
@@ -677,7 +690,7 @@ exports.stringIterator = (str) => {
/**
* @returns {StringAssembler}
*/
-exports.stringAssembler = () => ({
+export const stringAssembler = () => ({
_str: '',
clear() { this._str = ''; },
/**
@@ -711,6 +724,11 @@ exports.stringAssembler = () => ({
* with no newlines.
*/
class TextLinesMutator {
+ private _lines: any;
+ private _curSplice: number[]|{[key: string]:any};
+ private _inSplice: boolean;
+ private _curLine: number;
+ private _curCol: number;
/**
* @param {(string[]|StringArrayLike)} lines - Lines to mutate (in place).
*/
@@ -798,10 +816,12 @@ class TextLinesMutator {
* close or TODO(doc).
*/
_leaveSplice() {
- this._lines.splice(...this._curSplice);
- this._curSplice.length = 2;
- this._curSplice[0] = this._curSplice[1] = 0;
- this._inSplice = false;
+ if(this._curSplice instanceof Array) {
+ this._lines.splice(...this._curSplice);
+ this._curSplice.length = 2;
+ this._curSplice[0] = this._curSplice[1] = 0;
+ this._inSplice = false;
+ }
}
/**
@@ -837,7 +857,7 @@ class TextLinesMutator {
* @param {number} L -
* @param {boolean} includeInSplice - Indicates that attributes are present.
*/
- skipLines(L, includeInSplice) {
+ skipLines(L, includeInSplice?:boolean) {
if (!L) return;
if (includeInSplice) {
if (!this._inSplice) this._enterSplice();
@@ -905,7 +925,7 @@ class TextLinesMutator {
return this._linesSlice(m, m + k).join('');
};
- let removed = '';
+ let removed:string|number = '';
if (this._isCurLineInSplice()) {
if (this._curCol === 0) {
removed = this._curSplice[this._curSplice.length - 1];
@@ -958,7 +978,7 @@ class TextLinesMutator {
if (!text) return;
if (!this._inSplice) this._enterSplice();
if (L) {
- const newLines = exports.splitTextLines(text);
+ const newLines = splitTextLines(text);
if (this._isCurLineInSplice()) {
const sline = this._curSplice.length - 1;
/** @type {string} */
@@ -1039,11 +1059,11 @@ class TextLinesMutator {
* @returns {string} the integrated changeset
*/
const applyZip = (in1, in2, func) => {
- const ops1 = exports.deserializeOps(in1);
- const ops2 = exports.deserializeOps(in2);
+ const ops1 = deserializeOps(in1);
+ const ops2 = deserializeOps(in2);
let next1 = ops1.next();
let next2 = ops2.next();
- const assem = exports.smartOpAssembler();
+ const assem = smartOpAssembler();
while (!next1.done || !next2.done) {
if (!next1.done && !next1.value.opcode) next1 = ops1.next();
if (!next2.done && !next2.value.opcode) next2 = ops2.next();
@@ -1063,13 +1083,13 @@ const applyZip = (in1, in2, func) => {
* @param {string} cs - The encoded changeset.
* @returns {Changeset}
*/
-exports.unpack = (cs) => {
+export const unpack = (cs) => {
const headerRegex = /Z:([0-9a-z]+)([><])([0-9a-z]+)|/;
const headerMatch = headerRegex.exec(cs);
if ((!headerMatch) || (!headerMatch[0])) error(`Not a changeset: ${cs}`);
- const oldLen = exports.parseNum(headerMatch[1]);
+ const oldLen = parseNum(headerMatch[1]);
const changeSign = (headerMatch[2] === '>') ? 1 : -1;
- const changeMag = exports.parseNum(headerMatch[3]);
+ const changeMag = parseNum(headerMatch[3]);
const newLen = oldLen + changeSign * changeMag;
const opsStart = headerMatch[0].length;
let opsEnd = cs.indexOf('$');
@@ -1091,12 +1111,12 @@ exports.unpack = (cs) => {
* @param {string} bank - Characters for insert operations.
* @returns {string} The encoded changeset.
*/
-exports.pack = (oldLen, newLen, opsStr, bank) => {
+export const pack = (oldLen, newLen, opsStr, bank) => {
const lenDiff = newLen - oldLen;
- const lenDiffStr = (lenDiff >= 0 ? `>${exports.numToString(lenDiff)}`
- : `<${exports.numToString(-lenDiff)}`);
+ const lenDiffStr = (lenDiff >= 0 ? `>${numToString(lenDiff)}`
+ : `<${numToString(-lenDiff)}`);
const a = [];
- a.push('Z:', exports.numToString(oldLen), lenDiffStr, opsStr, '$', bank);
+ a.push('Z:', numToString(oldLen), lenDiffStr, opsStr, '$', bank);
return a.join('');
};
@@ -1107,13 +1127,13 @@ exports.pack = (oldLen, newLen, opsStr, bank) => {
* @param {string} str - String to which a Changeset should be applied
* @returns {string}
*/
-exports.applyToText = (cs, str) => {
- const unpacked = exports.unpack(cs);
+export const applyToText = (cs, str) => {
+ const unpacked = unpack(cs);
assert(str.length === unpacked.oldLen, `mismatched apply: ${str.length} / ${unpacked.oldLen}`);
- const bankIter = exports.stringIterator(unpacked.charBank);
- const strIter = exports.stringIterator(str);
- const assem = exports.stringAssembler();
- for (const op of exports.deserializeOps(unpacked.ops)) {
+ const bankIter = stringIterator(unpacked.charBank);
+ const strIter = stringIterator(str);
+ const assem = stringAssembler();
+ for (const op of deserializeOps(unpacked.ops)) {
switch (op.opcode) {
case '+':
// op is + and op.lines 0: no newlines must be in op.chars
@@ -1151,11 +1171,11 @@ exports.applyToText = (cs, str) => {
* @param {string} cs - the changeset to apply
* @param {string[]} lines - The lines to which the changeset needs to be applied
*/
-exports.mutateTextLines = (cs, lines) => {
- const unpacked = exports.unpack(cs);
- const bankIter = exports.stringIterator(unpacked.charBank);
+export const mutateTextLines = (cs, lines) => {
+ const unpacked = unpack(cs);
+ const bankIter = stringIterator(unpacked.charBank);
const mut = new TextLinesMutator(lines);
- for (const op of exports.deserializeOps(unpacked.ops)) {
+ for (const op of deserializeOps(unpacked.ops)) {
switch (op.opcode) {
case '+':
mut.insert(bankIter.take(op.chars), op.lines);
@@ -1180,7 +1200,7 @@ exports.mutateTextLines = (cs, lines) => {
* @param {AttributePool} pool - attribute pool
* @returns {string}
*/
-exports.composeAttributes = (att1, att2, resultIsMutation, pool) => {
+export const composeAttributes = (att1, att2, resultIsMutation, pool) => {
// att1 and att2 are strings like "*3*f*1c", asMutation is a boolean.
// Sometimes attribute (key,value) pairs are treated as attribute presence
// information, while other times they are treated as operations that
@@ -1258,7 +1278,7 @@ const slicerZipperFunc = (attOp, csOp, pool) => {
// normally be the empty string. However, padDiff.js adds attributes to remove ops and needs
// them preserved so they are copied here.
? csOp.attribs
- : exports.composeAttributes(attOp.attribs, csOp.attribs, attOp.opcode === '=', pool);
+ : composeAttributes(attOp.attribs, csOp.attribs, attOp.opcode === '=', pool);
partiallyConsumedOp.chars -= fullyConsumedOp.chars;
partiallyConsumedOp.lines -= fullyConsumedOp.lines;
if (!partiallyConsumedOp.chars) partiallyConsumedOp.opcode = '';
@@ -1275,8 +1295,8 @@ const slicerZipperFunc = (attOp, csOp, pool) => {
* @param {AttributePool} pool - the attibutes pool
* @returns {string}
*/
-exports.applyToAttribution = (cs, astr, pool) => {
- const unpacked = exports.unpack(cs);
+export const applyToAttribution = (cs, astr, pool) => {
+ const unpacked = unpack(cs);
return applyZip(astr, unpacked.ops, (op1, op2) => slicerZipperFunc(op1, op2, pool));
};
@@ -1749,7 +1769,7 @@ exports.mapAttribNumbers = (cs, func) => {
* attributes
* @returns {AText}
*/
-exports.makeAText = (text, attribs) => ({
+export const makeAText = (text, attribs) => ({
text,
attribs: (attribs || exports.makeAttribution(text)),
});
@@ -1762,7 +1782,7 @@ exports.makeAText = (text, attribs) => ({
* @param {AttributePool} pool - Attribute Pool to add to
* @returns {AText}
*/
-exports.applyToAText = (cs, atext, pool) => ({
+export const applyToAText = (cs, atext, pool) => ({
text: exports.applyToText(cs, atext.text),
attribs: exports.applyToAttribution(cs, atext.attribs, pool),
});
@@ -1787,7 +1807,7 @@ exports.cloneAText = (atext) => {
* @param {AText} atext1 -
* @param {AText} atext2 -
*/
-exports.copyAText = (atext1, atext2) => {
+export const copyAText = (atext1, atext2) => {
atext2.text = atext1.text;
atext2.attribs = atext1.attribs;
};
@@ -1799,10 +1819,10 @@ exports.copyAText = (atext1, atext2) => {
* @yields {Op}
* @returns {Generator}
*/
-exports.opsFromAText = function* (atext) {
+export const opsFromAText = function* (atext) {
// intentionally skips last newline char of atext
let lastOp = null;
- for (const op of exports.deserializeOps(atext.attribs)) {
+ for (const op of deserializeOps(atext.attribs)) {
if (lastOp != null) yield lastOp;
lastOp = op;
}
diff --git a/src/static/js/pluginfw/hooks.js b/src/static/js/pluginfw/hooks.ts
similarity index 93%
rename from src/static/js/pluginfw/hooks.js
rename to src/static/js/pluginfw/hooks.ts
index 89f4267bba9..90a479b1801 100644
--- a/src/static/js/pluginfw/hooks.js
+++ b/src/static/js/pluginfw/hooks.ts
@@ -1,6 +1,6 @@
'use strict';
-const pluginDefs = require('./plugin_defs');
+import {hooks} from './plugin_defs';
// Maps the name of a server-side hook to a string explaining the deprecation
// (e.g., 'use the foo hook instead').
@@ -10,12 +10,15 @@ const pluginDefs = require('./plugin_defs');
// const hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
// hooks.deprecationNotices.fooBar = 'use the newSpiffy hook instead';
//
-exports.deprecationNotices = {};
+export const deprecationNotices:{
+ authFailure?: string;
+ clientReady?: string
+} = {};
const deprecationWarned = {};
const checkDeprecation = (hook) => {
- const notice = exports.deprecationNotices[hook.hook_name];
+ const notice = deprecationNotices[hook.hook_name];
if (notice == null) return;
if (deprecationWarned[hook.hook_fn_name]) return;
console.warn(`${hook.hook_name} hook used by the ${hook.part.plugin} plugin ` +
@@ -189,10 +192,10 @@ const callHookFnSync = (hook, context) => {
// 1. Collect all values returned by the hook functions into an array.
// 2. Convert each `undefined` entry into `[]`.
// 3. Flatten one level.
-exports.callAll = (hookName, context) => {
+export const callAll = (hookName, context?) => {
if (context == null) context = {};
- const hooks = pluginDefs.hooks[hookName] || [];
- return flatten1(hooks.map((hook) => normalizeValue(callHookFnSync(hook, context))));
+ const hooksResult = hooks[hookName] || [];
+ return flatten1(hooksResult.map((hook) => normalizeValue(callHookFnSync(hook, context))));
};
// Calls the hook function asynchronously and returns a Promise that either resolves to the hook
@@ -342,23 +345,23 @@ const callHookFnAsync = async (hook, context) => {
// 2. Convert each `undefined` entry into `[]`.
// 3. Flatten one level.
// If cb is non-null, this function resolves to the value returned by cb.
-exports.aCallAll = async (hookName, context, cb = null) => {
- if (cb != null) return await attachCallback(exports.aCallAll(hookName, context), cb);
+export const aCallAll = async (hookName, context?, cb = null) => {
+ if (cb != null) return await attachCallback(aCallAll(hookName, context), cb);
if (context == null) context = {};
- const hooks = pluginDefs.hooks[hookName] || [];
+ const hooksResult = hooks[hookName] || [];
const results = await Promise.all(
- hooks.map(async (hook) => normalizeValue(await callHookFnAsync(hook, context))));
+ hooksResult.map(async (hook) => normalizeValue(await callHookFnAsync(hook, context))));
return flatten1(results);
};
// Like `aCallAll()` except the hook functions are called one at a time instead of concurrently.
// Only use this function if the hook functions must be called one at a time, otherwise use
// `aCallAll()`.
-exports.callAllSerial = async (hookName, context) => {
+export const callAllSerial = async (hookName, context) => {
if (context == null) context = {};
- const hooks = pluginDefs.hooks[hookName] || [];
+ const hooksResult = hooks[hookName] || [];
const results = [];
- for (const hook of hooks) {
+ for (const hook of hooksResult) {
results.push(normalizeValue(await callHookFnAsync(hook, context)));
}
return flatten1(results);
@@ -367,11 +370,11 @@ exports.callAllSerial = async (hookName, context) => {
// DEPRECATED: Use `aCallFirst()` instead.
//
// Like `aCallFirst()`, but synchronous. Hook functions must provide their values synchronously.
-exports.callFirst = (hookName, context) => {
+export const callFirst = (hookName, context) => {
if (context == null) context = {};
const predicate = (val) => val.length;
- const hooks = pluginDefs.hooks[hookName] || [];
- for (const hook of hooks) {
+ const hooksResult = hooks[hookName] || [];
+ for (const hook of hooksResult) {
const val = normalizeValue(callHookFnSync(hook, context));
if (predicate(val)) return val;
}
@@ -399,21 +402,21 @@ exports.callFirst = (hookName, context) => {
// If cb is nullish, resolves to an array that is either the normalized value that satisfied the
// predicate or empty if the predicate was never satisfied. If cb is non-nullish, resolves to the
// value returned from cb().
-exports.aCallFirst = async (hookName, context, cb = null, predicate = null) => {
+export const aCallFirst = async (hookName, context, cb = null, predicate = null) => {
if (cb != null) {
- return await attachCallback(exports.aCallFirst(hookName, context, null, predicate), cb);
+ return await attachCallback(aCallFirst(hookName, context, null, predicate), cb);
}
if (context == null) context = {};
if (predicate == null) predicate = (val) => val.length;
- const hooks = pluginDefs.hooks[hookName] || [];
- for (const hook of hooks) {
+ const hooksResult = hooks[hookName] || [];
+ for (const hook of hooksResult) {
const val = normalizeValue(await callHookFnAsync(hook, context));
if (predicate(val)) return val;
}
return [];
};
-exports.exportedForTestingOnly = {
+export const exportedForTestingOnly = {
callHookFnAsync,
callHookFnSync,
deprecationWarned,
diff --git a/src/static/js/pluginfw/installer.js b/src/static/js/pluginfw/installer.ts
similarity index 66%
rename from src/static/js/pluginfw/installer.js
rename to src/static/js/pluginfw/installer.ts
index dd3dddc88e7..e10e41971f0 100644
--- a/src/static/js/pluginfw/installer.js
+++ b/src/static/js/pluginfw/installer.ts
@@ -1,18 +1,23 @@
'use strict';
-const log4js = require('log4js');
-const plugins = require('./plugins');
-const hooks = require('./hooks');
-const request = require('request');
-const runCmd = require('../../../node/utils/run_cmd');
-const settings = require('../../../node/utils/Settings');
+import log4js from 'log4js';
+import {prefix, update} from "./plugins";
+
+import {aCallAll} from "./hooks";
+
+import request from "request";
+
+import {exportCMD} from "../../../node/utils/run_cmd";
+
+import {reloadSettings} from "../../../node/utils/Settings";
+import {InstallerModel} from "../../module/InstallerModel";
const logger = log4js.getLogger('plugins');
const onAllTasksFinished = async () => {
- settings.reloadSettings();
- await hooks.aCallAll('loadSettings', {settings});
- await hooks.aCallAll('restartServer');
+ const settings = reloadSettings();
+ await aCallAll('loadSettings', {settings});
+ await aCallAll('restartServer');
};
let tasks = 0;
@@ -27,54 +32,54 @@ const wrapTaskCb = (cb) => {
};
};
-exports.uninstall = async (pluginName, cb = null) => {
+export const uninstall = async (pluginName, cb = null) => {
cb = wrapTaskCb(cb);
logger.info(`Uninstalling plugin ${pluginName}...`);
try {
// The --no-save flag prevents npm from creating package.json or package-lock.json.
// The --legacy-peer-deps flag is required to work around a bug in npm v7:
// https://github.com/npm/cli/issues/2199
- await runCmd(['npm', 'uninstall', '--no-save', '--legacy-peer-deps', pluginName]);
+ await exportCMD(['npm', 'uninstall', '--no-save', '--legacy-peer-deps', pluginName]);
} catch (err) {
logger.error(`Failed to uninstall plugin ${pluginName}`);
cb(err || new Error(err));
throw err;
}
logger.info(`Successfully uninstalled plugin ${pluginName}`);
- await hooks.aCallAll('pluginUninstall', {pluginName});
- await plugins.update();
+ await aCallAll('pluginUninstall', {pluginName});
+ await update();
cb(null);
};
-exports.install = async (pluginName, cb = null) => {
+export const install = async (pluginName, cb = null) => {
cb = wrapTaskCb(cb);
logger.info(`Installing plugin ${pluginName}...`);
try {
// The --no-save flag prevents npm from creating package.json or package-lock.json.
// The --legacy-peer-deps flag is required to work around a bug in npm v7:
// https://github.com/npm/cli/issues/2199
- await runCmd(['npm', 'install', '--no-save', '--legacy-peer-deps', pluginName]);
+ await exportCMD(['npm', 'install', '--no-save', '--legacy-peer-deps', pluginName]);
} catch (err) {
logger.error(`Failed to install plugin ${pluginName}`);
cb(err || new Error(err));
throw err;
}
logger.info(`Successfully installed plugin ${pluginName}`);
- await hooks.aCallAll('pluginInstall', {pluginName});
- await plugins.update();
+ await aCallAll('pluginInstall', {pluginName});
+ await update();
cb(null);
};
-exports.availablePlugins = null;
+export let availablePlugins = null;
let cacheTimestamp = 0;
-exports.getAvailablePlugins = (maxCacheAge) => {
+export const getAvailablePlugins = (maxCacheAge) => {
const nowTimestamp = Math.round(Date.now() / 1000);
return new Promise((resolve, reject) => {
// check cache age before making any request
- if (exports.availablePlugins && maxCacheAge && (nowTimestamp - cacheTimestamp) <= maxCacheAge) {
- return resolve(exports.availablePlugins);
+ if (availablePlugins && maxCacheAge && (nowTimestamp - cacheTimestamp) <= maxCacheAge) {
+ return resolve(availablePlugins);
}
request('https://static.etherpad.org/plugins.json', (er, response, plugins) => {
@@ -87,7 +92,7 @@ exports.getAvailablePlugins = (maxCacheAge) => {
plugins = [];
}
- exports.availablePlugins = plugins;
+ availablePlugins = plugins;
cacheTimestamp = nowTimestamp;
resolve(plugins);
});
@@ -95,18 +100,19 @@ exports.getAvailablePlugins = (maxCacheAge) => {
};
-exports.search = (searchTerm, maxCacheAge) => exports.getAvailablePlugins(maxCacheAge).then(
- (results) => {
+export const search = (searchTerm, maxCacheAge) => getAvailablePlugins(maxCacheAge).then(
+ (results: InstallerModel[]) => {
const res = {};
if (searchTerm) {
searchTerm = searchTerm.toLowerCase();
}
+
for (const pluginName in results) {
// for every available plugin
// TODO: Also search in keywords here!
- if (pluginName.indexOf(plugins.prefix) !== 0) continue;
+ if (pluginName.indexOf(prefix) !== 0) continue;
if (searchTerm && !~results[pluginName].name.toLowerCase().indexOf(searchTerm) &&
(typeof results[pluginName].description !== 'undefined' &&
diff --git a/src/static/js/pluginfw/plugin_defs.js b/src/static/js/pluginfw/plugin_defs.ts
similarity index 72%
rename from src/static/js/pluginfw/plugin_defs.js
rename to src/static/js/pluginfw/plugin_defs.ts
index f7d10879e96..1a75537575d 100644
--- a/src/static/js/pluginfw/plugin_defs.js
+++ b/src/static/js/pluginfw/plugin_defs.ts
@@ -8,13 +8,13 @@
// * hook_fn: Plugin-supplied hook function.
// * hook_fn_name: Name of the hook function, with the form :.
// * part: The ep.json part object that declared the hook. See exports.plugins.
-exports.hooks = {};
+export const hooks = {};
// Whether the plugins have been loaded.
-exports.loaded = false;
+export let loaded = false;
// Topologically sorted list of parts from exports.plugins.
-exports.parts = [];
+export const parts = [];
// Maps the name of a plugin to the plugin's definition provided in ep.json. The ep.json object is
// augmented with additional metadata:
@@ -25,4 +25,20 @@ exports.parts = [];
// - version
// - path
// - realPath
-exports.plugins = {};
+export const plugins = {};
+
+export const setPlugins = (newPlugins) => {
+ Object.assign(plugins, newPlugins);
+}
+
+export const setParts = (newParts) => {
+ Object.assign(parts, newParts);
+}
+
+export const setHooks = (newHooks) => {
+ Object.assign(hooks, newHooks);
+}
+
+export const setLoaded = (newLoaded) => {
+ loaded = newLoaded;
+}
diff --git a/src/static/js/pluginfw/plugins.js b/src/static/js/pluginfw/plugins.ts
similarity index 70%
rename from src/static/js/pluginfw/plugins.js
rename to src/static/js/pluginfw/plugins.ts
index ec3cfaa92f1..ddb9f3c2986 100644
--- a/src/static/js/pluginfw/plugins.js
+++ b/src/static/js/pluginfw/plugins.ts
@@ -1,20 +1,28 @@
'use strict';
-const fs = require('fs').promises;
-const hooks = require('./hooks');
-const log4js = require('log4js');
-const path = require('path');
-const runCmd = require('../../../node/utils/run_cmd');
-const tsort = require('./tsort');
-const pluginUtils = require('./shared');
-const defs = require('./plugin_defs');
+import {promises as fs} from "fs";
+
+import {aCallAll} from "./hooks";
+
+import log4js from "log4js";
+
+import path from "path";
+
+import {exportCMD} from "../../../node/utils/run_cmd";
+
+import {tsort} from "./tsort";
+
+import {extractHooks} from "./shared";
+
+import {loaded, parts, plugins, setHooks, setLoaded, setParts, setPlugins} from "./plugin_defs";
+import {PluginInfo} from "../../module/PluginInfo";
const logger = log4js.getLogger('plugins');
// Log the version of npm at startup.
(async () => {
try {
- const version = await runCmd(['npm', '--version'], {stdio: [null, 'string']});
+ const version = await exportCMD(['npm', '--version'], {stdio: [null, 'string']});
logger.info(`npm --version: ${version}`);
} catch (err) {
logger.error(`Failed to get npm version: ${err.stack || err}`);
@@ -22,16 +30,19 @@ const logger = log4js.getLogger('plugins');
}
})();
-exports.prefix = 'ep_';
+type PartType = {
+ [keys: string]:any
+}
+export const prefix = 'ep_';
-exports.formatPlugins = () => Object.keys(defs.plugins).join(', ');
+export const formatPlugins = () => Object.keys(plugins).join(', ');
-exports.formatParts = () => defs.parts.map((part) => part.full_name).join('\n');
+export const formatParts = () => parts.map((part) => part.full_name).join('\n');
-exports.formatHooks = (hookSetName, html) => {
+export const formatHooks = (hookSetName, html) => {
let hooks = new Map();
- for (const [pluginName, def] of Object.entries(defs.plugins)) {
- for (const part of def.parts) {
+ for (const [pluginName, def] of Object.entries(plugins)) {
+ for (const part of parts) {
for (const [hookName, hookFnName] of Object.entries(part[hookSetName] || {})) {
let hookEntry = hooks.get(hookName);
if (!hookEntry) {
@@ -53,7 +64,7 @@ exports.formatHooks = (hookSetName, html) => {
hooks = new Map([...hooks].sort(sortStringKeys));
for (const [hookName, hookEntry] of hooks) {
lines.push(html ? ` ${hookName}: ` : ` ${hookName}:`);
- const sortedHookEntry = new Map([...hookEntry].sort(sortStringKeys));
+ const sortedHookEntry = new Map([...hookEntry].sort(sortStringKeys));
hooks.set(hookName, sortedHookEntry);
for (const [pluginName, pluginEntry] of sortedHookEntry) {
lines.push(html ? ` ${pluginName}: ` : ` ${pluginName}:`);
@@ -72,20 +83,20 @@ exports.formatHooks = (hookSetName, html) => {
return lines.join('\n');
};
-exports.pathNormalization = (part, hookFnName, hookName) => {
+export const pathNormalization = (part, hookFnName, hookName) => {
const tmp = hookFnName.split(':'); // hookFnName might be something like 'C:\\foo.js:myFunc'.
// If there is a single colon assume it's 'filename:funcname' not 'C:\\filename'.
const functionName = (tmp.length > 1 ? tmp.pop() : null) || hookName;
const moduleName = tmp.join(':') || part.plugin;
- const packageDir = path.dirname(defs.plugins[part.plugin].package.path);
+ const packageDir = path.dirname(plugins[part.plugin].package.path);
const fileName = path.join(packageDir, moduleName);
return `${fileName}:${functionName}`;
};
-exports.update = async () => {
+export const update = async () => {
const packages = await exports.getPackages();
- const parts = {}; // Key is full name. sortParts converts this into a topologically sorted array.
- const plugins = {};
+ let parts:{[keys: string]:any} = {}; // Key is full name. sortParts converts this into a topologically sorted array.
+ let plugins = {};
// Load plugin metadata ep.json
await Promise.all(Object.keys(packages).map(async (pluginName) => {
@@ -94,13 +105,13 @@ exports.update = async () => {
}));
logger.info(`Loaded ${Object.keys(packages).length} plugins`);
- defs.plugins = plugins;
- defs.parts = sortParts(parts);
- defs.hooks = pluginUtils.extractHooks(defs.parts, 'hooks', exports.pathNormalization);
- defs.loaded = true;
- await Promise.all(Object.keys(defs.plugins).map(async (p) => {
+ setPlugins(plugins);
+ setParts(sortParts(parts))
+ setHooks(extractHooks(parts, 'hooks', exports.pathNormalization));
+ setLoaded(true)
+ await Promise.all(Object.keys(plugins).map(async (p) => {
const logger = log4js.getLogger(`plugin:${p}`);
- await hooks.aCallAll(`init_${p}`, {logger});
+ await aCallAll(`init_${p}`, {logger});
}));
};
@@ -112,13 +123,15 @@ exports.getPackages = async () => {
// unset or set to `development`) because otherwise `npm ls` will not mention any packages
// that are not included in `package.json` (which is expected to not exist).
const cmd = ['npm', 'ls', '--long', '--json', '--depth=0', '--no-production'];
- const {dependencies = {}} = JSON.parse(await runCmd(cmd, {stdio: [null, 'string']}));
+ const {dependencies = {}} = JSON.parse(await exportCMD(cmd, {stdio: [null, 'string']}) as unknown as string);
await Promise.all(Object.entries(dependencies).map(async ([pkg, info]) => {
if (!pkg.startsWith(exports.prefix)) {
delete dependencies[pkg];
return;
}
- info.realPath = await fs.realpath(info.path);
+ const mappedInfo = info as PluginInfo
+
+ mappedInfo.realPath = await fs.realpath(mappedInfo.path);
}));
return dependencies;
};
@@ -126,7 +139,7 @@ exports.getPackages = async () => {
const loadPlugin = async (packages, pluginName, plugins, parts) => {
const pluginPath = path.resolve(packages[pluginName].path, 'ep.json');
try {
- const data = await fs.readFile(pluginPath);
+ const data = await fs.readFile(pluginPath, "utf8");
try {
const plugin = JSON.parse(data);
plugin.package = packages[pluginName];
@@ -145,7 +158,7 @@ const loadPlugin = async (packages, pluginName, plugins, parts) => {
};
const partsToParentChildList = (parts) => {
- const res = [];
+ const res:(string|number)[][] = [];
for (const name of Object.keys(parts)) {
for (const childName of parts[name].post || []) {
res.push([name, childName]);
@@ -161,6 +174,7 @@ const partsToParentChildList = (parts) => {
};
// Used only in Node, so no need for _
-const sortParts = (parts) => tsort(partsToParentChildList(parts))
- .filter((name) => parts[name] !== undefined)
- .map((name) => parts[name]);
+//FIXME Is this better
+const sortParts = (parts:PartType) => tsort(partsToParentChildList(parts))
+ .filter((name) => name !== undefined)
+ .map((name) => name);
diff --git a/src/static/js/pluginfw/shared.js b/src/static/js/pluginfw/shared.ts
similarity index 91%
rename from src/static/js/pluginfw/shared.js
rename to src/static/js/pluginfw/shared.ts
index 2c81ccd8198..ec22b8cc6be 100644
--- a/src/static/js/pluginfw/shared.js
+++ b/src/static/js/pluginfw/shared.ts
@@ -1,6 +1,6 @@
'use strict';
-const defs = require('./plugin_defs');
+import {parts} from './plugin_defs';
const disabledHookReasons = {
hooks: {
@@ -9,7 +9,7 @@ const disabledHookReasons = {
},
};
-const loadFn = (path, hookName) => {
+export const loadFn = (path, hookName) => {
let functionName;
const parts = path.split(':');
@@ -33,7 +33,7 @@ const loadFn = (path, hookName) => {
return fn;
};
-const extractHooks = (parts, hookSetName, normalizer) => {
+export const extractHooks = (parts, hookSetName, normalizer) => {
const hooks = {};
for (const part of parts) {
for (const [hookName, regHookFnName] of Object.entries(part[hookSetName] || {})) {
@@ -72,9 +72,7 @@ const extractHooks = (parts, hookSetName, normalizer) => {
}
}
return hooks;
-};
-
-exports.extractHooks = extractHooks;
+}
/*
* Returns an array containing the names of the installed client-side plugins
@@ -88,8 +86,8 @@ exports.extractHooks = extractHooks;
* No plugins: []
* Some plugins: [ 'ep_adminpads', 'ep_add_buttons', 'ep_activepads' ]
*/
-exports.clientPluginNames = () => {
- const clientPluginNames = defs.parts
+export const clientPluginNames = () => {
+ const clientPluginNames = parts
.filter((part) => Object.prototype.hasOwnProperty.call(part, 'client_hooks'))
.map((part) => `plugin-${part.plugin}`);
return [...new Set(clientPluginNames)];
diff --git a/src/static/js/pluginfw/tsort.js b/src/static/js/pluginfw/tsort.ts
similarity index 89%
rename from src/static/js/pluginfw/tsort.js
rename to src/static/js/pluginfw/tsort.ts
index 117f8555cd8..bebac95c0fc 100644
--- a/src/static/js/pluginfw/tsort.js
+++ b/src/static/js/pluginfw/tsort.ts
@@ -4,14 +4,14 @@
* general topological sort
* from https://gist.github.com/1232505
* @author SHIN Suzuki (shinout310@gmail.com)
- * @param Array edges : list of edges. each edge forms Array e.g. [12 , 3]
+ * @param edges Array edges : list of edges. each edge forms Array e.g. [12 , 3]
*
* @returns Array : topological sorted list of IDs
**/
-const tsort = (edges) => {
+export const tsort = (edges: (string|number)[][]) => {
const nodes = {}; // hash: stringified id of the node => { id: id, afters: lisf of ids }
- const sorted = []; // sorted list of IDs ( returned value )
+ const sorted: (string|number)[][]= []; // sorted list of IDs ( returned value )
const visited = {}; // hash: id of already visited node => true
const Node = function (id) {
@@ -62,7 +62,7 @@ const tsort = (edges) => {
**/
const tsortTest = () => {
// example 1: success
- let edges = [
+ let edges:(string|number)[][] = [
[1, 2],
[1, 3],
[2, 4],
diff --git a/src/static/module/InstallerModel.ts b/src/static/module/InstallerModel.ts
new file mode 100644
index 00000000000..39e6bf51d91
--- /dev/null
+++ b/src/static/module/InstallerModel.ts
@@ -0,0 +1,5 @@
+export type InstallerModel = {
+ name: string,
+ description: string,
+
+}
diff --git a/src/static/module/PluginInfo.ts b/src/static/module/PluginInfo.ts
new file mode 100644
index 00000000000..8508e3c4b66
--- /dev/null
+++ b/src/static/module/PluginInfo.ts
@@ -0,0 +1,4 @@
+export type PluginInfo = {
+ realPath: string,
+ path: string,
+}
diff --git a/src/tsconfig.json b/src/tsconfig.json
index b99c6c15aa7..fb9bc8c7ab9 100644
--- a/src/tsconfig.json
+++ b/src/tsconfig.json
@@ -1,5 +1,6 @@
{
"compilerOptions": {
+ "allowJs": true,
"typeRoots": ["node_modules/@types"],
"types": ["node", "jquery"],
"module": "commonjs",
@@ -7,7 +8,7 @@
"target": "es6",
"moduleResolution": "node",
"sourceMap": true,
- "outDir": "dist"
+ "outDir": "../dist"
},
"lib": ["es2015"]
}
From 237f7242ec1a5ebdf3f500daaeb2398c0f25c20b Mon Sep 17 00:00:00 2001
From: SamTV12345 <40429738+samtv12345@users.noreply.github.com>
Date: Fri, 23 Jun 2023 21:18:12 +0200
Subject: [PATCH 04/11] Moved to ts for other dependencies.
---
src/.eslintrc.cjs | 220 +-
src/node/db/Pad.ts | 2 +-
src/node/handler/PadMessageHandler.ts | 5 +-
src/static/js/{Changeset.ts => Changeset.js} | 2093 +++++++-----------
src/static/js/{ace.js => ace.ts} | 112 +-
src/static/module/Ace2EditorInfo.ts | 5 +
src/static/module/CustomWindow.ts | 14 +
src/tsconfig.json | 2 +-
8 files changed, 979 insertions(+), 1474 deletions(-)
rename src/static/js/{Changeset.ts => Changeset.js} (69%)
rename src/static/js/{ace.js => ace.ts} (84%)
create mode 100644 src/static/module/Ace2EditorInfo.ts
create mode 100644 src/static/module/CustomWindow.ts
diff --git a/src/.eslintrc.cjs b/src/.eslintrc.cjs
index 95c9efa07f2..0930b688898 100644
--- a/src/.eslintrc.cjs
+++ b/src/.eslintrc.cjs
@@ -1,10 +1,6 @@
+import "eslint-config-etherpad/patch/modern-module-resolution";
'use strict';
-
-// This is a workaround for https://github.com/eslint/eslint/issues/3458
-require('eslint-config-etherpad/patch/modern-module-resolution');
-
-module.exports = {
- ignorePatterns: [
+export const ignorePatterns = [
'/static/js/admin/jquery.autosize.js',
'/static/js/admin/minify.json.js',
'/static/js/vendors/browser.js',
@@ -14,128 +10,132 @@ module.exports = {
'/static/js/vendors/jquery.js',
'/static/js/vendors/nice-select.js',
'/tests/frontend/lib/',
- ],
- overrides: [
+];
+export const overrides = [
{
- files: [
- '**/.eslintrc.*',
- ],
- extends: 'etherpad/node',
+ files: [
+ '**/.eslintrc.*',
+ ],
+ extends: 'etherpad/node',
},
{
- files: [
- '**/*',
- ],
- excludedFiles: [
- '**/.eslintrc.*',
- 'tests/frontend/**/*',
- ],
- extends: 'etherpad/node',
+ files: [
+ '**/*',
+ ],
+ excludedFiles: [
+ '**/.eslintrc.*',
+ 'tests/frontend/**/*',
+ ],
+ extends: 'etherpad/node',
},
{
- files: [
- 'static/**/*',
- 'tests/frontend/helper.js',
- 'tests/frontend/helper/**/*',
- ],
- excludedFiles: [
- '**/.eslintrc.*',
- ],
- extends: 'etherpad/browser',
- env: {
- 'shared-node-browser': true,
- },
- overrides: [
- {
- files: [
+ files: [
+ 'static/**/*',
+ 'tests/frontend/helper.js',
'tests/frontend/helper/**/*',
- ],
- globals: {
- helper: 'readonly',
- },
+ ],
+ excludedFiles: [
+ '**/.eslintrc.*',
+ ],
+ extends: 'etherpad/browser',
+ env: {
+ 'shared-node-browser': true,
},
- ],
- },
- {
- files: [
- 'tests/**/*',
- ],
- excludedFiles: [
- '**/.eslintrc.*',
- 'tests/frontend/cypress/**/*',
- 'tests/frontend/helper.js',
- 'tests/frontend/helper/**/*',
- 'tests/frontend/travis/**/*',
- 'tests/ratelimit/**/*',
- ],
- extends: 'etherpad/tests',
- rules: {
- 'mocha/no-exports': 'off',
- 'mocha/no-top-level-hooks': 'off',
- },
+ overrides: [
+ {
+ files: [
+ 'tests/frontend/helper/**/*',
+ ],
+ globals: {
+ helper: 'readonly',
+ },
+ },
+ ],
},
{
- files: [
- 'tests/backend/**/*',
- ],
- excludedFiles: [
- '**/.eslintrc.*',
- ],
- extends: 'etherpad/tests/backend',
- overrides: [
- {
- files: [
- 'tests/backend/**/*',
- ],
- excludedFiles: [
- 'tests/backend/specs/**/*',
- ],
- rules: {
+ files: [
+ 'tests/**/*',
+ ],
+ excludedFiles: [
+ '**/.eslintrc.*',
+ 'tests/frontend/cypress/**/*',
+ 'tests/frontend/helper.js',
+ 'tests/frontend/helper/**/*',
+ 'tests/frontend/travis/**/*',
+ 'tests/ratelimit/**/*',
+ ],
+ extends: 'etherpad/tests',
+ rules: {
'mocha/no-exports': 'off',
'mocha/no-top-level-hooks': 'off',
- },
},
- ],
},
{
- files: [
- 'tests/frontend/**/*',
- ],
- excludedFiles: [
- '**/.eslintrc.*',
- 'tests/frontend/cypress/**/*',
- 'tests/frontend/helper.js',
- 'tests/frontend/helper/**/*',
- 'tests/frontend/travis/**/*',
- ],
- extends: 'etherpad/tests/frontend',
- overrides: [
- {
- files: [
+ files: [
+ 'tests/backend/**/*',
+ ],
+ excludedFiles: [
+ '**/.eslintrc.*',
+ ],
+ extends: 'etherpad/tests/backend',
+ overrides: [
+ {
+ files: [
+ 'tests/backend/**/*',
+ ],
+ excludedFiles: [
+ 'tests/backend/specs/**/*',
+ ],
+ rules: {
+ 'mocha/no-exports': 'off',
+ 'mocha/no-top-level-hooks': 'off',
+ },
+ },
+ ],
+ },
+ {
+ files: [
'tests/frontend/**/*',
- ],
- excludedFiles: [
- 'tests/frontend/specs/**/*',
- ],
- rules: {
- 'mocha/no-exports': 'off',
- 'mocha/no-top-level-hooks': 'off',
- },
- },
- ],
+ ],
+ excludedFiles: [
+ '**/.eslintrc.*',
+ 'tests/frontend/cypress/**/*',
+ 'tests/frontend/helper.js',
+ 'tests/frontend/helper/**/*',
+ 'tests/frontend/travis/**/*',
+ ],
+ extends: 'etherpad/tests/frontend',
+ overrides: [
+ {
+ files: [
+ 'tests/frontend/**/*',
+ ],
+ excludedFiles: [
+ 'tests/frontend/specs/**/*',
+ ],
+ rules: {
+ 'mocha/no-exports': 'off',
+ 'mocha/no-top-level-hooks': 'off',
+ },
+ },
+ ],
},
{
- files: [
- 'tests/frontend/cypress/**/*',
- ],
- extends: 'etherpad/tests/cypress',
+ files: [
+ 'tests/frontend/cypress/**/*',
+ ],
+ extends: 'etherpad/tests/cypress',
},
{
- files: [
- 'tests/frontend/travis/**/*',
- ],
- extends: 'etherpad/node',
+ files: [
+ 'tests/frontend/travis/**/*',
+ ],
+ extends: 'etherpad/node',
},
- ],
- root: true,
+];
+export const root = true;
+export default {
+ ignorePatterns,
+ overrides,
+ root
};
diff --git a/src/node/db/Pad.ts b/src/node/db/Pad.ts
index b894299c33e..b2bfc877b8c 100644
--- a/src/node/db/Pad.ts
+++ b/src/node/db/Pad.ts
@@ -4,7 +4,7 @@
*/
import AttributeMap from '../../static/js/AttributeMap';
-import {applyToAText, makeAText} from '../../static/js/Changeset';
+import {applyToAText, copyAText, makeAText} from '../../static/js/Changeset';
import ChatMessage from '../../static/js/ChatMessage';
import {AttributePool} from '../../static/js/AttributePool';
import {Stream} from '../utils/Stream';
diff --git a/src/node/handler/PadMessageHandler.ts b/src/node/handler/PadMessageHandler.ts
index edd97a703d5..07f939fa713 100644
--- a/src/node/handler/PadMessageHandler.ts
+++ b/src/node/handler/PadMessageHandler.ts
@@ -21,7 +21,7 @@
import AttributeMap from '../../static/js/AttributeMap';
import {getPad} from '../db/PadManager';
-import Changeset from '../../static/js/Changeset';
+import {} from '../../static/js/Changeset';
import ChatMessage from '../../static/js/ChatMessage';
import {AttributePool} from '../../static/js/AttributePool';
import AttributeManager from '../../static/js/AttributeManager';
@@ -797,6 +797,7 @@ const _correctMarkersInPad = (atext, apool) => {
return builder.toString();
};
+export let clientVars:any
/**
* Handles a CLIENT_READY. A CLIENT_READY is the first message from the client
* to the server. The Client sends his token
@@ -954,7 +955,7 @@ const handleClientReady = async (socket, message) => {
// Warning: never ever send sessionInfo.padId to the client. If the client is read only you
// would open a security hole 1 swedish mile wide...
- const clientVars = {
+ clientVars = {
skinName: skinName,
skinVariants: skinVariants,
randomVersionString: randomString(4),
diff --git a/src/static/js/Changeset.ts b/src/static/js/Changeset.js
similarity index 69%
rename from src/static/js/Changeset.ts
rename to src/static/js/Changeset.js
index e9f7dfc8d1b..614d820615c 100644
--- a/src/static/js/Changeset.ts
+++ b/src/static/js/Changeset.js
@@ -1,40 +1,13 @@
+import AttributeMap from "./AttributeMap.js";
+import AttributePool from "./AttributePool.js";
+import * as attributes from "./attributes.js";
+import { padutils } from "./pad_utils.js";
'use strict';
-
-/*
- * Copyright 2009 Google Inc., 2011 Peter 'Pita' Martischka (Primary Technology Ltd)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS-IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * This is the Changeset library copied from the old Etherpad with some modifications
- * to use it in node.js. The original can be found at:
- * https://github.com/ether/pad/blob/master/infrastructure/ace/www/easysync2.js
- */
-
-import {CustomError} from "../../node/utils/customError";
-
-const AttributeMap = require('./AttributeMap');
-const AttributePool = require('./AttributePool');
-const attributes = require('./attributes');
-const {padutils} = require('./pad_utils');
-
/**
* A `[key, value]` pair of strings describing a text attribute.
*
* @typedef {[string, string]} Attribute
*/
-
/**
* A concatenated sequence of zero or more attribute identifiers, each one represented by an
* asterisk followed by a base-36 encoded attribute number.
@@ -43,18 +16,16 @@ const {padutils} = require('./pad_utils');
*
* @typedef {string} AttributeString
*/
-
/**
* This method is called whenever there is an error in the sync process.
*
* @param {string} msg - Just some message
*/
-export const error = (msg) => {
- const e = new CustomError(msg);
+const error = (msg) => {
+ const e = new Error(msg);
e.easysync = true;
throw e;
};
-
/**
* Assert that a condition is truthy. If the condition is falsy, the `error` function is called to
* throw an exception.
@@ -64,33 +35,13 @@ export const error = (msg) => {
* @type {(b: boolean, msg: string) => asserts b}
*/
const assert = (b, msg) => {
- if (!b) error(`Failed assertion: ${msg}`);
+ if (!b)
+ error(`Failed assertion: ${msg}`);
};
-
-/**
- * Parses a number from string base 36.
- *
- * @param {string} str - string of the number in base 36
- * @returns {number} number
- */
-export const parseNum = (str) => parseInt(str, 36);
-
-/**
- * Writes a number in base 36 and puts it in a string.
- *
- * @param {number} num - number
- * @returns {string} string
- */
-export const numToString = (num) => num.toString(36).toLowerCase();
-
/**
* An operation to apply to a shared document.
*/
class Op {
- opcode: string;
- chars: number;
- lines: number;
- attribs: string;
/**
* @param {(''|'='|'+'|'-')} [opcode=''] - Initial value of the `opcode` property.
*/
@@ -110,7 +61,6 @@ class Op {
* @public
*/
this.opcode = opcode;
-
/**
* The number of characters to keep, insert, or delete.
*
@@ -118,7 +68,6 @@ class Op {
* @public
*/
this.chars = 0;
-
/**
* The number of characters among the `chars` characters that are newlines. If non-zero, the
* last character must be a newline.
@@ -127,7 +76,6 @@ class Op {
* @public
*/
this.lines = 0;
-
/**
* Identifiers of attributes to apply to the text, represented as a repeated (zero or more)
* sequence of asterisk followed by a non-negative base-36 (lower-case) integer. For example,
@@ -148,66 +96,15 @@ class Op {
*/
this.attribs = '';
}
-
toString() {
- if (!this.opcode) throw new TypeError('null op');
- if (typeof this.attribs !== 'string') throw new TypeError('attribs must be a string');
- const l = this.lines ? `|${numToString(this.lines)}` : '';
- return this.attribs + l + this.opcode + numToString(this.chars);
+ if (!this.opcode)
+ throw new TypeError('null op');
+ if (typeof this.attribs !== 'string')
+ throw new TypeError('attribs must be a string');
+ const l = this.lines ? `|${exports.numToString(this.lines)}` : '';
+ return this.attribs + l + this.opcode + exports.numToString(this.chars);
}
}
-export const Op = Op;
-
-/**
- * Describes changes to apply to a document. Does not include the attribute pool or the original
- * document.
- *
- * @typedef {object} Changeset
- * @property {number} oldLen - The length of the base document.
- * @property {number} newLen - The length of the document after applying the changeset.
- * @property {string} ops - Serialized sequence of operations. Use `deserializeOps` to parse this
- * string.
- * @property {string} charBank - Characters inserted by insert operations.
- */
-
-/**
- * Returns the required length of the text before changeset can be applied.
- *
- * @param {string} cs - String representation of the Changeset
- * @returns {number} oldLen property
- */
-export const oldLen = (cs) => exports.unpack(cs).oldLen;
-
-/**
- * Returns the length of the text after changeset is applied.
- *
- * @param {string} cs - String representation of the Changeset
- * @returns {number} newLen property
- */
-export const newLen = (cs) => exports.unpack(cs).newLen;
-
-/**
- * Parses a string of serialized changeset operations.
- *
- * @param {string} ops - Serialized changeset operations.
- * @yields {Op}
- * @returns {Generator}
- */
-export const deserializeOps = function* (ops) {
- // TODO: Migrate to String.prototype.matchAll() once there is enough browser support.
- const regex = /((?:\*[0-9a-z]+)*)(?:\|([0-9a-z]+))?([-+=])([0-9a-z]+)|(.)/g;
- let match;
- while ((match = regex.exec(ops)) != null) {
- if (match[5] === '$') return; // Start of the insert operation character bank.
- if (match[5] != null) error(`invalid operation: ${ops.slice(regex.lastIndex - 1)}`);
- const op = new Op(match[3]);
- op.lines = parseNum(match[2] || '0');
- op.chars = parseNum(match[4]);
- op.attribs = match[1];
- yield op;
- }
-};
-
/**
* Iterator over a changeset's operations.
*
@@ -216,28 +113,19 @@ export const deserializeOps = function* (ops) {
* @deprecated Use `deserializeOps` instead.
*/
class OpIter {
- private _next: {
- value: any;
- done: boolean,
-
-
- };
- private _gen: any;
/**
* @param {string} ops - String encoding the change operations to iterate over.
*/
constructor(ops) {
- this._gen = deserializeOps(ops);
+ this._gen = exports.deserializeOps(ops);
this._next = this._gen.next();
}
-
/**
* @returns {boolean} Whether there are any remaining operations.
*/
hasNext() {
return !this._next.done;
}
-
/**
* Returns the next operation object and advances the iterator.
*
@@ -251,26 +139,13 @@ class OpIter {
if (this.hasNext()) {
copyOp(this._next.value, opOut);
this._next = this._gen.next();
- } else {
+ }
+ else {
clearOp(opOut);
}
return opOut;
}
}
-
-/**
- * Creates an iterator which decodes string changeset operations.
- *
- * @deprecated Use `deserializeOps` instead.
- * @param {string} opsStr - String encoding of the change operations to perform.
- * @returns {OpIter} Operator iterator object.
- */
-export const opIterator = (opsStr) => {
- padutils.warnDeprecated(
- 'Changeset.opIterator() is deprecated; use Changeset.deserializeOps() instead');
- return new OpIter(opsStr);
-};
-
/**
* Cleans an Op object.
*
@@ -282,19 +157,6 @@ const clearOp = (op) => {
op.lines = 0;
op.attribs = '';
};
-
-/**
- * Creates a new Op object
- *
- * @deprecated Use the `Op` class instead.
- * @param {('+'|'-'|'='|'')} [optOpcode=''] - The operation's operator.
- * @returns {Op}
- */
-export const newOp = (optOpcode) => {
- padutils.warnDeprecated('Changeset.newOp() is deprecated; use the Changeset.Op class instead');
- return new Op(optOpcode);
-};
-
/**
* Copies op1 to op2
*
@@ -303,7 +165,6 @@ export const newOp = (optOpcode) => {
* @returns {Op} `op2`
*/
const copyOp = (op1, op2 = new Op()) => Object.assign(op2, op1);
-
/**
* Serializes a sequence of Ops.
*
@@ -312,7 +173,6 @@ const copyOp = (op1, op2 = new Op()) => Object.assign(op2, op1);
* @property {Function} clear -
* @property {Function} toString -
*/
-
/**
* Efficiently merges consecutive operations that are mergeable, ignores no-ops, and drops final
* pure "keeps". It does not re-order operations.
@@ -323,7 +183,6 @@ const copyOp = (op1, op2 = new Op()) => Object.assign(op2, op1);
* @property {Function} endDocument -
* @property {Function} toString -
*/
-
/**
* Generates operations from the given text and attributes.
*
@@ -341,13 +200,14 @@ const copyOp = (op1, op2 = new Op()) => Object.assign(op2, op1);
const opsFromText = function* (opcode, text, attribs = '', pool = null) {
const op = new Op(opcode);
op.attribs = typeof attribs === 'string'
- ? attribs : new AttributeMap(pool).update(attribs || [], opcode === '+').toString();
+ ? attribs : new AttributeMap(pool).update(attribs || [], opcode === '+').toString();
const lastNewlinePos = text.lastIndexOf('\n');
if (lastNewlinePos < 0) {
op.chars = text.length;
op.lines = 0;
yield op;
- } else {
+ }
+ else {
op.chars = lastNewlinePos + 1;
op.lines = text.match(/\n/g).length;
yield op;
@@ -357,473 +217,120 @@ const opsFromText = function* (opcode, text, attribs = '', pool = null) {
yield op2;
}
};
-
/**
- * Creates an object that allows you to append operations (type Op) and also compresses them if
- * possible. Like MergingOpAssembler, but able to produce conforming exportss from slightly looser
- * input, at the cost of speed. Specifically:
- * - merges consecutive operations that can be merged
- * - strips final "="
- * - ignores 0-length changes
- * - reorders consecutive + and - (which MergingOpAssembler doesn't do)
- *
- * @typedef {object} SmartOpAssembler
- * @property {Function} append -
- * @property {Function} appendOpWithText -
- * @property {Function} clear -
- * @property {Function} endDocument -
- * @property {Function} getLengthChange -
- * @property {Function} toString -
+ * @typedef {object} StringArrayLike
+ * @property {(i: number) => string} get - Returns the line at index `i`.
+ * @property {(number|(() => number))} length - The number of lines, or a method that returns the
+ * number of lines.
+ * @property {(((start?: number, end?: number) => string[])|undefined)} slice - Like
+ * `Array.prototype.slice()`. Optional if the return value of the `removeLines` method is not
+ * needed.
+ * @property {(i: number, d?: number, ...l: string[]) => any} splice - Like
+ * `Array.prototype.splice()`.
*/
-
/**
- * Used to check if a Changeset is valid. This function does not check things that require access to
- * the attribute pool (e.g., attribute order) or original text (e.g., newline positions).
+ * Class to iterate and modify texts which have several lines. It is used for applying Changesets on
+ * arrays of lines.
*
- * @param {string} cs - Changeset to check
- * @returns {string} the checked Changeset
+ * Mutation operations have the same constraints as exports operations with respect to newlines, but
+ * not the other additional constraints (i.e. ins/del ordering, forbidden no-ops, non-mergeability,
+ * final newline). Can be used to mutate lists of strings where the last char of each string is not
+ * actually a newline, but for the purposes of N and L values, the caller should pretend it is, and
+ * for things to work right in that case, the input to the `insert` method should be a single line
+ * with no newlines.
*/
-export const checkRep = (cs) => {
- const unpacked = unpack(cs);
- const oldLen = unpacked.oldLen;
- const newLen = unpacked.newLen;
- const ops = unpacked.ops;
- let charBank = unpacked.charBank;
-
- const assem = smartOpAssembler();
- let oldPos = 0;
- let calcNewLen = 0;
- for (const o of deserializeOps(ops)) {
- switch (o.opcode) {
- case '=':
- oldPos += o.chars;
- calcNewLen += o.chars;
- break;
- case '-':
- oldPos += o.chars;
- assert(oldPos <= oldLen, `${oldPos} > ${oldLen} in ${cs}`);
- break;
- case '+':
- {
- assert(charBank.length >= o.chars, 'Invalid changeset: not enough chars in charBank');
- const chars = charBank.slice(0, o.chars);
- const nlines = (chars.match(/\n/g) || []).length;
- assert(nlines === o.lines,
- 'Invalid changeset: number of newlines in insert op does not match the charBank');
- assert(o.lines === 0 || chars.endsWith('\n'),
- 'Invalid changeset: multiline insert op does not end with a newline');
- charBank = charBank.slice(o.chars);
- calcNewLen += o.chars;
- assert(calcNewLen <= newLen, `${calcNewLen} > ${newLen} in ${cs}`);
- break;
- }
- default:
- assert(false, `Invalid changeset: Unknown opcode: ${JSON.stringify(o.opcode)}`);
+class TextLinesMutator {
+ /**
+ * @param {(string[]|StringArrayLike)} lines - Lines to mutate (in place).
+ */
+ constructor(lines) {
+ this._lines = lines;
+ /**
+ * this._curSplice holds values that will be passed as arguments to this._lines.splice() to
+ * insert, delete, or change lines:
+ * - this._curSplice[0] is an index into the this._lines array.
+ * - this._curSplice[1] is the number of lines that will be removed from the this._lines array
+ * starting at the index.
+ * - The other elements represent mutated (changed by ops) lines or new lines (added by ops)
+ * to insert at the index.
+ *
+ * @type {[number, number?, ...string[]?]}
+ */
+ this._curSplice = [0, 0];
+ this._inSplice = false;
+ // position in lines after curSplice is applied:
+ this._curLine = 0;
+ this._curCol = 0;
+ // invariant: if (inSplice) then (curLine is in curSplice[0] + curSplice.length - {2,3}) &&
+ // curLine >= curSplice[0]
+ // invariant: if (inSplice && (curLine >= curSplice[0] + curSplice.length - 2)) then
+ // curCol == 0
+ }
+ /**
+ * Get a line from `lines` at given index.
+ *
+ * @param {number} idx - an index
+ * @returns {string}
+ */
+ _linesGet(idx) {
+ if ('get' in this._lines) {
+ return this._lines.get(idx);
+ }
+ else {
+ return this._lines[idx];
}
- assem.append(o);
}
- calcNewLen += oldLen - oldPos;
- assert(calcNewLen === newLen, 'Invalid changeset: claimed length does not match actual length');
- assert(charBank === '', 'Invalid changeset: excess characters in the charBank');
- assem.endDocument();
- const normalized = pack(oldLen, calcNewLen, assem.toString(), unpacked.charBank);
- assert(normalized === cs, 'Invalid changeset: not in canonical form');
- return cs;
-};
-
-/**
- * @returns {SmartOpAssembler}
- */
-export const smartOpAssembler = () => {
- const minusAssem = mergingOpAssembler();
- const plusAssem = mergingOpAssembler();
- const keepAssem = mergingOpAssembler();
- const assem = stringAssembler();
- let lastOpcode = '';
- let lengthChange = 0;
-
- const flushKeeps = () => {
- assem.append(keepAssem.toString());
- keepAssem.clear();
- };
-
- const flushPlusMinus = () => {
- assem.append(minusAssem.toString());
- minusAssem.clear();
- assem.append(plusAssem.toString());
- plusAssem.clear();
- };
-
- const append = (op) => {
- if (!op.opcode) return;
- if (!op.chars) return;
-
- if (op.opcode === '-') {
- if (lastOpcode === '=') {
- flushKeeps();
- }
- minusAssem.append(op);
- lengthChange -= op.chars;
- } else if (op.opcode === '+') {
- if (lastOpcode === '=') {
- flushKeeps();
- }
- plusAssem.append(op);
- lengthChange += op.chars;
- } else if (op.opcode === '=') {
- if (lastOpcode !== '=') {
- flushPlusMinus();
- }
- keepAssem.append(op);
+ /**
+ * Return a slice from `lines`.
+ *
+ * @param {number} start - the start index
+ * @param {number} end - the end index
+ * @returns {string[]}
+ */
+ _linesSlice(start, end) {
+ // can be unimplemented if removeLines's return value not needed
+ if (this._lines.slice) {
+ return this._lines.slice(start, end);
}
- lastOpcode = op.opcode;
- };
-
+ else {
+ return [];
+ }
+ }
/**
- * Generates operations from the given text and attributes.
+ * Return the length of `lines`.
*
- * @deprecated Use `opsFromText` instead.
- * @param {('-'|'+'|'=')} opcode - The operator to use.
- * @param {string} text - The text to remove/add/keep.
- * @param {(string|Iterable)} attribs - The attributes to apply to the operations.
- * @param {?AttributePool} pool - Attribute pool. Only required if `attribs` is an iterable of
- * attribute key, value pairs.
+ * @returns {number}
*/
- const appendOpWithText = (opcode, text, attribs, pool) => {
- padutils.warnDeprecated('Changeset.smartOpAssembler().appendOpWithText() is deprecated; ' +
- 'use opsFromText() instead.');
- for (const op of opsFromText(opcode, text, attribs, pool)) append(op);
- };
-
- const toString = () => {
- flushPlusMinus();
- flushKeeps();
- return assem.toString();
- };
-
- const clear = () => {
- minusAssem.clear();
- plusAssem.clear();
- keepAssem.clear();
- assem.clear();
- lengthChange = 0;
- };
-
- const endDocument = () => {
- keepAssem.endDocument();
- };
-
- const getLengthChange = () => lengthChange;
-
- return {
- append,
- toString,
- clear,
- endDocument,
- appendOpWithText,
- getLengthChange,
- };
-};
-
-/**
- * @returns {MergingOpAssembler}
- */
-export const mergingOpAssembler = () => {
- const assem = opAssembler();
- const bufOp = new Op();
-
- // If we get, for example, insertions [xxx\n,yyy], those don't merge,
- // but if we get [xxx\n,yyy,zzz\n], that merges to [xxx\nyyyzzz\n].
- // This variable stores the length of yyy and any other newline-less
- // ops immediately after it.
- let bufOpAdditionalCharsAfterNewline = 0;
-
+ _linesLength() {
+ if (typeof this._lines.length === 'number') {
+ return this._lines.length;
+ }
+ else {
+ return this._lines.length();
+ }
+ }
/**
- * @param {boolean} [isEndDocument]
- */
- const flush = (isEndDocument?: boolean) => {
- if (!bufOp.opcode) return;
- if (isEndDocument && bufOp.opcode === '=' && !bufOp.attribs) {
- // final merged keep, leave it implicit
- } else {
- assem.append(bufOp);
- if (bufOpAdditionalCharsAfterNewline) {
- bufOp.chars = bufOpAdditionalCharsAfterNewline;
- bufOp.lines = 0;
- assem.append(bufOp);
- bufOpAdditionalCharsAfterNewline = 0;
- }
- }
- bufOp.opcode = '';
- };
-
- const append = (op) => {
- if (op.chars <= 0) return;
- if (bufOp.opcode === op.opcode && bufOp.attribs === op.attribs) {
- if (op.lines > 0) {
- // bufOp and additional chars are all mergeable into a multi-line op
- bufOp.chars += bufOpAdditionalCharsAfterNewline + op.chars;
- bufOp.lines += op.lines;
- bufOpAdditionalCharsAfterNewline = 0;
- } else if (bufOp.lines === 0) {
- // both bufOp and op are in-line
- bufOp.chars += op.chars;
- } else {
- // append in-line text to multi-line bufOp
- bufOpAdditionalCharsAfterNewline += op.chars;
- }
- } else {
- flush();
- copyOp(op, bufOp);
- }
- };
-
- const endDocument = () => {
- flush(true);
- };
-
- const toString = () => {
- flush();
- return assem.toString();
- };
-
- const clear = () => {
- assem.clear();
- clearOp(bufOp);
- };
- return {
- append,
- toString,
- clear,
- endDocument,
- };
-};
-
-/**
- * @returns {OpAssembler}
- */
-export const opAssembler = () => {
- let serialized = '';
-
- /**
- * @param {Op} op - Operation to add. Ownership remains with the caller.
- */
- const append = (op) => {
- assert(op instanceof Op, 'argument must be an instance of Op');
- serialized += op.toString();
- };
-
- const toString = () => serialized;
-
- const clear = () => {
- serialized = '';
- };
- return {
- append,
- toString,
- clear,
- };
-};
-
-/**
- * A custom made String Iterator
- *
- * @typedef {object} StringIterator
- * @property {Function} newlines -
- * @property {Function} peek -
- * @property {Function} remaining -
- * @property {Function} skip -
- * @property {Function} take -
- */
-
-/**
- * @param {string} str - String to iterate over
- * @returns {StringIterator}
- */
-export const stringIterator = (str) => {
- let curIndex = 0;
- // newLines is the number of \n between curIndex and str.length
- let newLines = str.split('\n').length - 1;
- const getnewLines = () => newLines;
-
- const assertRemaining = (n) => {
- assert(n <= remaining(), `!(${n} <= ${remaining()})`);
- };
-
- const take = (n) => {
- assertRemaining(n);
- const s = str.substr(curIndex, n);
- newLines -= s.split('\n').length - 1;
- curIndex += n;
- return s;
- };
-
- const peek = (n) => {
- assertRemaining(n);
- const s = str.substr(curIndex, n);
- return s;
- };
-
- const skip = (n) => {
- assertRemaining(n);
- curIndex += n;
- };
-
- const remaining = () => str.length - curIndex;
- return {
- take,
- skip,
- remaining,
- peek,
- newlines: getnewLines,
- };
-};
-
-/**
- * A custom made StringBuffer
- *
- * @typedef {object} StringAssembler
- * @property {Function} append -
- * @property {Function} toString -
- */
-
-/**
- * @returns {StringAssembler}
- */
-export const stringAssembler = () => ({
- _str: '',
- clear() { this._str = ''; },
- /**
- * @param {string} x -
- */
- append(x) { this._str += String(x); },
- toString() { return this._str; },
-});
-
-/**
- * @typedef {object} StringArrayLike
- * @property {(i: number) => string} get - Returns the line at index `i`.
- * @property {(number|(() => number))} length - The number of lines, or a method that returns the
- * number of lines.
- * @property {(((start?: number, end?: number) => string[])|undefined)} slice - Like
- * `Array.prototype.slice()`. Optional if the return value of the `removeLines` method is not
- * needed.
- * @property {(i: number, d?: number, ...l: string[]) => any} splice - Like
- * `Array.prototype.splice()`.
- */
-
-/**
- * Class to iterate and modify texts which have several lines. It is used for applying Changesets on
- * arrays of lines.
- *
- * Mutation operations have the same constraints as exports operations with respect to newlines, but
- * not the other additional constraints (i.e. ins/del ordering, forbidden no-ops, non-mergeability,
- * final newline). Can be used to mutate lists of strings where the last char of each string is not
- * actually a newline, but for the purposes of N and L values, the caller should pretend it is, and
- * for things to work right in that case, the input to the `insert` method should be a single line
- * with no newlines.
- */
-class TextLinesMutator {
- private _lines: any;
- private _curSplice: number[]|{[key: string]:any};
- private _inSplice: boolean;
- private _curLine: number;
- private _curCol: number;
- /**
- * @param {(string[]|StringArrayLike)} lines - Lines to mutate (in place).
- */
- constructor(lines) {
- this._lines = lines;
- /**
- * this._curSplice holds values that will be passed as arguments to this._lines.splice() to
- * insert, delete, or change lines:
- * - this._curSplice[0] is an index into the this._lines array.
- * - this._curSplice[1] is the number of lines that will be removed from the this._lines array
- * starting at the index.
- * - The other elements represent mutated (changed by ops) lines or new lines (added by ops)
- * to insert at the index.
- *
- * @type {[number, number?, ...string[]?]}
- */
- this._curSplice = [0, 0];
- this._inSplice = false;
- // position in lines after curSplice is applied:
- this._curLine = 0;
- this._curCol = 0;
- // invariant: if (inSplice) then (curLine is in curSplice[0] + curSplice.length - {2,3}) &&
- // curLine >= curSplice[0]
- // invariant: if (inSplice && (curLine >= curSplice[0] + curSplice.length - 2)) then
- // curCol == 0
- }
-
- /**
- * Get a line from `lines` at given index.
- *
- * @param {number} idx - an index
- * @returns {string}
- */
- _linesGet(idx) {
- if ('get' in this._lines) {
- return this._lines.get(idx);
- } else {
- return this._lines[idx];
- }
- }
-
- /**
- * Return a slice from `lines`.
- *
- * @param {number} start - the start index
- * @param {number} end - the end index
- * @returns {string[]}
- */
- _linesSlice(start, end) {
- // can be unimplemented if removeLines's return value not needed
- if (this._lines.slice) {
- return this._lines.slice(start, end);
- } else {
- return [];
- }
- }
-
- /**
- * Return the length of `lines`.
- *
- * @returns {number}
- */
- _linesLength() {
- if (typeof this._lines.length === 'number') {
- return this._lines.length;
- } else {
- return this._lines.length();
- }
- }
-
- /**
- * Starts a new splice.
+ * Starts a new splice.
*/
_enterSplice() {
this._curSplice[0] = this._curLine;
this._curSplice[1] = 0;
// TODO(doc) when is this the case?
// check all enterSplice calls and changes to curCol
- if (this._curCol > 0) this._putCurLineInSplice();
+ if (this._curCol > 0)
+ this._putCurLineInSplice();
this._inSplice = true;
}
-
/**
* Changes the lines array according to the values in curSplice and resets curSplice. Called via
* close or TODO(doc).
*/
_leaveSplice() {
- if(this._curSplice instanceof Array) {
- this._lines.splice(...this._curSplice);
- this._curSplice.length = 2;
- this._curSplice[0] = this._curSplice[1] = 0;
- this._inSplice = false;
- }
+ this._lines.splice(...this._curSplice);
+ this._curSplice.length = 2;
+ this._curSplice[0] = this._curSplice[1] = 0;
+ this._inSplice = false;
}
-
/**
* Indicates if curLine is already in the splice. This is necessary because the last element in
* curSplice is curLine when this line is currently worked on (e.g. when skipping or inserting).
@@ -836,7 +343,6 @@ class TextLinesMutator {
// are deleted).
return this._curLine - this._curSplice[0] < this._curSplice.length - 2;
}
-
/**
* Incorporates current line into the splice and marks its old position to be deleted.
*
@@ -850,29 +356,32 @@ class TextLinesMutator {
// TODO should be the same as this._curSplice.length - 1
return 2 + this._curLine - this._curSplice[0];
}
-
/**
* It will skip some newlines by putting them into the splice.
*
* @param {number} L -
* @param {boolean} includeInSplice - Indicates that attributes are present.
*/
- skipLines(L, includeInSplice?:boolean) {
- if (!L) return;
+ skipLines(L, includeInSplice) {
+ if (!L)
+ return;
if (includeInSplice) {
- if (!this._inSplice) this._enterSplice();
+ if (!this._inSplice)
+ this._enterSplice();
// TODO(doc) should this count the number of characters that are skipped to check?
for (let i = 0; i < L; i++) {
this._curCol = 0;
this._putCurLineInSplice();
this._curLine++;
}
- } else {
+ }
+ else {
if (this._inSplice) {
if (L > 1) {
// TODO(doc) figure out why single lines are incorporated into splice instead of ignored
this._leaveSplice();
- } else {
+ }
+ else {
this._putCurLineInSplice();
}
}
@@ -881,7 +390,6 @@ class TextLinesMutator {
}
// tests case foo in remove(), which isn't otherwise covered in current impl
}
-
/**
* Skip some characters. Can contain newlines.
*
@@ -890,11 +398,14 @@ class TextLinesMutator {
* @param {boolean} includeInSplice - indicates if attributes are present
*/
skip(N, L, includeInSplice) {
- if (!N) return;
+ if (!N)
+ return;
if (L) {
this.skipLines(L, includeInSplice);
- } else {
- if (includeInSplice && !this._inSplice) this._enterSplice();
+ }
+ else {
+ if (includeInSplice && !this._inSplice)
+ this._enterSplice();
if (this._inSplice) {
// although the line is put into splice curLine is not increased, because
// only some chars are skipped, not the whole line
@@ -903,7 +414,6 @@ class TextLinesMutator {
this._curCol += N;
}
}
-
/**
* Remove whole lines from lines array.
*
@@ -911,9 +421,10 @@ class TextLinesMutator {
* @returns {string}
*/
removeLines(L) {
- if (!L) return '';
- if (!this._inSplice) this._enterSplice();
-
+ if (!L)
+ return '';
+ if (!this._inSplice)
+ this._enterSplice();
/**
* Gets a string of joined lines after the end of the splice.
*
@@ -924,15 +435,15 @@ class TextLinesMutator {
const m = this._curSplice[0] + this._curSplice[1];
return this._linesSlice(m, m + k).join('');
};
-
- let removed:string|number = '';
+ let removed = '';
if (this._isCurLineInSplice()) {
if (this._curCol === 0) {
removed = this._curSplice[this._curSplice.length - 1];
this._curSplice.length--;
removed += nextKLinesText(L - 1);
this._curSplice[1] += L - 1;
- } else {
+ }
+ else {
removed = nextKLinesText(L - 1);
this._curSplice[1] += L - 1;
const sline = this._curSplice.length - 1;
@@ -941,13 +452,13 @@ class TextLinesMutator {
this._linesGet(this._curSplice[0] + this._curSplice[1]);
this._curSplice[1] += 1;
}
- } else {
+ }
+ else {
removed = nextKLinesText(L);
this._curSplice[1] += L;
}
return removed;
}
-
/**
* Remove text from lines array.
*
@@ -956,9 +467,12 @@ class TextLinesMutator {
* @returns {string}
*/
remove(N, L) {
- if (!N) return '';
- if (L) return this.removeLines(L);
- if (!this._inSplice) this._enterSplice();
+ if (!N)
+ return '';
+ if (L)
+ return this.removeLines(L);
+ if (!this._inSplice)
+ this._enterSplice();
// although the line is put into splice, curLine is not increased, because
// only some chars are removed not the whole line
const sline = this._putCurLineInSplice();
@@ -967,7 +481,6 @@ class TextLinesMutator {
this._curSplice[sline].substring(this._curCol + N);
return removed;
}
-
/**
* Inserts text into lines array.
*
@@ -975,10 +488,12 @@ class TextLinesMutator {
* @param {number} L - number of newlines in text
*/
insert(text, L) {
- if (!text) return;
- if (!this._inSplice) this._enterSplice();
+ if (!text)
+ return;
+ if (!this._inSplice)
+ this._enterSplice();
if (L) {
- const newLines = splitTextLines(text);
+ const newLines = exports.splitTextLines(text);
if (this._isCurLineInSplice()) {
const sline = this._curSplice.length - 1;
/** @type {string} */
@@ -995,17 +510,18 @@ class TextLinesMutator {
// when we started to insert new lines)
this._curSplice.push(theLine.substring(lineCol));
this._curCol = 0; // TODO(doc) why is this not set to the length of last line?
- } else {
+ }
+ else {
this._curSplice.push(...newLines);
this._curLine += newLines.length;
}
- } else {
+ }
+ else {
// There are no additional lines. Although the line is put into splice, curLine is not
// increased because there may be more chars in the line (newline is not reached).
const sline = this._putCurLineInSplice();
if (!this._curSplice[sline]) {
- const err = new Error(
- 'curSplice[sline] not populated, actual curSplice contents is ' +
+ const err = new Error('curSplice[sline] not populated, actual curSplice contents is ' +
`${JSON.stringify(this._curSplice)}. Possibly related to ` +
'https://github.com/ether/etherpad-lite/issues/2802');
console.error(err.stack || err.toString());
@@ -1015,7 +531,6 @@ class TextLinesMutator {
this._curCol += text.length;
}
}
-
/**
* Checks if curLine (the line we are in when curSplice is applied) is the last line in `lines`.
*
@@ -1028,15 +543,14 @@ class TextLinesMutator {
}
return this._curLine < docLines;
}
-
/**
* Closes the splice
*/
close() {
- if (this._inSplice) this._leaveSplice();
+ if (this._inSplice)
+ this._leaveSplice();
}
}
-
/**
* Apply operations to other operations.
*
@@ -1059,101 +573,514 @@ class TextLinesMutator {
* @returns {string} the integrated changeset
*/
const applyZip = (in1, in2, func) => {
- const ops1 = deserializeOps(in1);
- const ops2 = deserializeOps(in2);
+ const ops1 = exports.deserializeOps(in1);
+ const ops2 = exports.deserializeOps(in2);
let next1 = ops1.next();
let next2 = ops2.next();
- const assem = smartOpAssembler();
+ const assem = exports.smartOpAssembler();
while (!next1.done || !next2.done) {
- if (!next1.done && !next1.value.opcode) next1 = ops1.next();
- if (!next2.done && !next2.value.opcode) next2 = ops2.next();
- if (next1.value == null) next1.value = new Op();
- if (next2.value == null) next2.value = new Op();
- if (!next1.value.opcode && !next2.value.opcode) break;
+ if (!next1.done && !next1.value.opcode)
+ next1 = ops1.next();
+ if (!next2.done && !next2.value.opcode)
+ next2 = ops2.next();
+ if (next1.value == null)
+ next1.value = new Op();
+ if (next2.value == null)
+ next2.value = new Op();
+ if (!next1.value.opcode && !next2.value.opcode)
+ break;
const opOut = func(next1.value, next2.value);
- if (opOut && opOut.opcode) assem.append(opOut);
+ if (opOut && opOut.opcode)
+ assem.append(opOut);
}
assem.endDocument();
return assem.toString();
};
-
-/**
- * Parses an encoded changeset.
- *
- * @param {string} cs - The encoded changeset.
- * @returns {Changeset}
- */
-export const unpack = (cs) => {
- const headerRegex = /Z:([0-9a-z]+)([><])([0-9a-z]+)|/;
- const headerMatch = headerRegex.exec(cs);
- if ((!headerMatch) || (!headerMatch[0])) error(`Not a changeset: ${cs}`);
- const oldLen = parseNum(headerMatch[1]);
- const changeSign = (headerMatch[2] === '>') ? 1 : -1;
- const changeMag = parseNum(headerMatch[3]);
- const newLen = oldLen + changeSign * changeMag;
- const opsStart = headerMatch[0].length;
- let opsEnd = cs.indexOf('$');
- if (opsEnd < 0) opsEnd = cs.length;
- return {
- oldLen,
- newLen,
- ops: cs.substring(opsStart, opsEnd),
- charBank: cs.substring(opsEnd + 1),
- };
-};
-
-/**
- * Creates an encoded changeset.
- *
- * @param {number} oldLen - The length of the document before applying the changeset.
- * @param {number} newLen - The length of the document after applying the changeset.
- * @param {string} opsStr - Encoded operations to apply to the document.
- * @param {string} bank - Characters for insert operations.
- * @returns {string} The encoded changeset.
- */
-export const pack = (oldLen, newLen, opsStr, bank) => {
- const lenDiff = newLen - oldLen;
- const lenDiffStr = (lenDiff >= 0 ? `>${numToString(lenDiff)}`
- : `<${numToString(-lenDiff)}`);
- const a = [];
- a.push('Z:', numToString(oldLen), lenDiffStr, opsStr, '$', bank);
- return a.join('');
-};
-
/**
- * Applies a Changeset to a string.
+ * Function used as parameter for applyZip to apply a Changeset to an attribute.
*
- * @param {string} cs - String encoded Changeset
- * @param {string} str - String to which a Changeset should be applied
- * @returns {string}
+ * @param {Op} attOp - The op from the sequence that is being operated on, either an attribution
+ * string or the earlier of two exportss being composed.
+ * @param {Op} csOp -
+ * @param {AttributePool} pool - Can be null if definitely not needed.
+ * @returns {Op} The result of applying `csOp` to `attOp`.
*/
-export const applyToText = (cs, str) => {
- const unpacked = unpack(cs);
- assert(str.length === unpacked.oldLen, `mismatched apply: ${str.length} / ${unpacked.oldLen}`);
- const bankIter = stringIterator(unpacked.charBank);
- const strIter = stringIterator(str);
- const assem = stringAssembler();
- for (const op of deserializeOps(unpacked.ops)) {
- switch (op.opcode) {
- case '+':
- // op is + and op.lines 0: no newlines must be in op.chars
- // op is + and op.lines >0: op.chars must include op.lines newlines
- if (op.lines !== bankIter.peek(op.chars).split('\n').length - 1) {
- throw new Error(`newline count is wrong in op +; cs:${cs} and text:${str}`);
+const slicerZipperFunc = (attOp, csOp, pool) => {
+ const opOut = new Op();
+ if (!attOp.opcode) {
+ copyOp(csOp, opOut);
+ csOp.opcode = '';
+ }
+ else if (!csOp.opcode) {
+ copyOp(attOp, opOut);
+ attOp.opcode = '';
+ }
+ else if (attOp.opcode === '-') {
+ copyOp(attOp, opOut);
+ attOp.opcode = '';
+ }
+ else if (csOp.opcode === '+') {
+ copyOp(csOp, opOut);
+ csOp.opcode = '';
+ }
+ else {
+ for (const op of [attOp, csOp]) {
+ assert(op.chars >= op.lines, `op has more newlines than chars: ${op.toString()}`);
+ }
+ assert(attOp.chars < csOp.chars ? attOp.lines <= csOp.lines
+ : attOp.chars > csOp.chars ? attOp.lines >= csOp.lines
+ : attOp.lines === csOp.lines, 'line count mismatch when composing changesets A*B; ' +
+ `opA: ${attOp.toString()} opB: ${csOp.toString()}`);
+ assert(['+', '='].includes(attOp.opcode), `unexpected opcode in op: ${attOp.toString()}`);
+ assert(['-', '='].includes(csOp.opcode), `unexpected opcode in op: ${csOp.toString()}`);
+ opOut.opcode = {
+ '+': {
+ '-': '',
+ '=': '+',
+ },
+ '=': {
+ '-': '-',
+ '=': '=',
+ },
+ }[attOp.opcode][csOp.opcode];
+ const [fullyConsumedOp, partiallyConsumedOp] = [attOp, csOp].sort((a, b) => a.chars - b.chars);
+ opOut.chars = fullyConsumedOp.chars;
+ opOut.lines = fullyConsumedOp.lines;
+ opOut.attribs = csOp.opcode === '-'
+ // csOp is a remove op and remove ops normally never have any attributes, so this should
+ // normally be the empty string. However, padDiff.js adds attributes to remove ops and needs
+ // them preserved so they are copied here.
+ ? csOp.attribs
+ : exports.composeAttributes(attOp.attribs, csOp.attribs, attOp.opcode === '=', pool);
+ partiallyConsumedOp.chars -= fullyConsumedOp.chars;
+ partiallyConsumedOp.lines -= fullyConsumedOp.lines;
+ if (!partiallyConsumedOp.chars)
+ partiallyConsumedOp.opcode = '';
+ fullyConsumedOp.opcode = '';
+ }
+ return opOut;
+};
+/**
+ * Transforms a changeset into a list of splices in the form [startChar, endChar, newText] meaning
+ * replace text from startChar to endChar with newText.
+ *
+ * @param {string} cs - Changeset
+ * @returns {[number, number, string][]}
+ */
+const toSplices = (cs) => {
+ const unpacked = exports.unpack(cs);
+ /** @type {[number, number, string][]} */
+ const splices = [];
+ let oldPos = 0;
+ const charIter = exports.stringIterator(unpacked.charBank);
+ let inSplice = false;
+ for (const op of exports.deserializeOps(unpacked.ops)) {
+ if (op.opcode === '=') {
+ oldPos += op.chars;
+ inSplice = false;
+ }
+ else {
+ if (!inSplice) {
+ splices.push([oldPos, oldPos, '']);
+ inSplice = true;
+ }
+ if (op.opcode === '-') {
+ oldPos += op.chars;
+ splices[splices.length - 1][1] += op.chars;
+ }
+ else if (op.opcode === '+') {
+ splices[splices.length - 1][2] += charIter.take(op.chars);
+ }
+ }
+ }
+ return splices;
+};
+/**
+ * @deprecated Use an AttributeMap instead.
+ */
+const attribsAttributeValue = (attribs, key, pool) => {
+ if (!attribs)
+ return '';
+ for (const [k, v] of attributes.attribsFromString(attribs, pool)) {
+ if (k === key)
+ return v;
+ }
+ return '';
+};
+const followAttributes = (att1, att2, pool) => {
+ // The merge of two sets of attribute changes to the same text
+ // takes the lexically-earlier value if there are two values
+ // for the same key. Otherwise, all key/value changes from
+ // both attribute sets are taken. This operation is the "follow",
+ // so a set of changes is produced that can be applied to att1
+ // to produce the merged set.
+ if ((!att2) || (!pool))
+ return '';
+ if (!att1)
+ return att2;
+ const atts = new Map();
+ att2.replace(/\*([0-9a-z]+)/g, (_, a) => {
+ const [key, val] = pool.getAttrib(exports.parseNum(a));
+ atts.set(key, val);
+ return '';
+ });
+ att1.replace(/\*([0-9a-z]+)/g, (_, a) => {
+ const [key, val] = pool.getAttrib(exports.parseNum(a));
+ if (atts.has(key) && val <= atts.get(key))
+ atts.delete(key);
+ return '';
+ });
+ // we've only removed attributes, so they're already sorted
+ const buf = exports.stringAssembler();
+ for (const att of atts) {
+ buf.append('*');
+ buf.append(exports.numToString(pool.putAttrib(att)));
+ }
+ return buf.toString();
+};
+export const parseNum = (str) => parseInt(str, 36);
+export const numToString = (num) => num.toString(36).toLowerCase();
+export const oldLen = (cs) => exports.unpack(cs).oldLen;
+export const newLen = (cs) => exports.unpack(cs).newLen;
+export const deserializeOps = function* (ops) {
+ // TODO: Migrate to String.prototype.matchAll() once there is enough browser support.
+ const regex = /((?:\*[0-9a-z]+)*)(?:\|([0-9a-z]+))?([-+=])([0-9a-z]+)|(.)/g;
+ let match;
+ while ((match = regex.exec(ops)) != null) {
+ if (match[5] === '$')
+ return; // Start of the insert operation character bank.
+ if (match[5] != null)
+ error(`invalid operation: ${ops.slice(regex.lastIndex - 1)}`);
+ const op = new Op(match[3]);
+ op.lines = exports.parseNum(match[2] || '0');
+ op.chars = exports.parseNum(match[4]);
+ op.attribs = match[1];
+ yield op;
+ }
+};
+export const opIterator = (opsStr) => {
+ padutils.warnDeprecated('Changeset.opIterator() is deprecated; use Changeset.deserializeOps() instead');
+ return new OpIter(opsStr);
+};
+export const newOp = (optOpcode) => {
+ padutils.warnDeprecated('Changeset.newOp() is deprecated; use the Changeset.Op class instead');
+ return new Op(optOpcode);
+};
+export const checkRep = (cs) => {
+ const unpacked = exports.unpack(cs);
+ const oldLen = unpacked.oldLen;
+ const newLen = unpacked.newLen;
+ const ops = unpacked.ops;
+ let charBank = unpacked.charBank;
+ const assem = exports.smartOpAssembler();
+ let oldPos = 0;
+ let calcNewLen = 0;
+ for (const o of exports.deserializeOps(ops)) {
+ switch (o.opcode) {
+ case '=':
+ oldPos += o.chars;
+ calcNewLen += o.chars;
+ break;
+ case '-':
+ oldPos += o.chars;
+ assert(oldPos <= oldLen, `${oldPos} > ${oldLen} in ${cs}`);
+ break;
+ case '+':
+ {
+ assert(charBank.length >= o.chars, 'Invalid changeset: not enough chars in charBank');
+ const chars = charBank.slice(0, o.chars);
+ const nlines = (chars.match(/\n/g) || []).length;
+ assert(nlines === o.lines, 'Invalid changeset: number of newlines in insert op does not match the charBank');
+ assert(o.lines === 0 || chars.endsWith('\n'), 'Invalid changeset: multiline insert op does not end with a newline');
+ charBank = charBank.slice(o.chars);
+ calcNewLen += o.chars;
+ assert(calcNewLen <= newLen, `${calcNewLen} > ${newLen} in ${cs}`);
+ break;
+ }
+ default:
+ assert(false, `Invalid changeset: Unknown opcode: ${JSON.stringify(o.opcode)}`);
+ }
+ assem.append(o);
+ }
+ calcNewLen += oldLen - oldPos;
+ assert(calcNewLen === newLen, 'Invalid changeset: claimed length does not match actual length');
+ assert(charBank === '', 'Invalid changeset: excess characters in the charBank');
+ assem.endDocument();
+ const normalized = exports.pack(oldLen, calcNewLen, assem.toString(), unpacked.charBank);
+ assert(normalized === cs, 'Invalid changeset: not in canonical form');
+ return cs;
+};
+export const smartOpAssembler = () => {
+ const minusAssem = exports.mergingOpAssembler();
+ const plusAssem = exports.mergingOpAssembler();
+ const keepAssem = exports.mergingOpAssembler();
+ const assem = exports.stringAssembler();
+ let lastOpcode = '';
+ let lengthChange = 0;
+ const flushKeeps = () => {
+ assem.append(keepAssem.toString());
+ keepAssem.clear();
+ };
+ const flushPlusMinus = () => {
+ assem.append(minusAssem.toString());
+ minusAssem.clear();
+ assem.append(plusAssem.toString());
+ plusAssem.clear();
+ };
+ const append = (op) => {
+ if (!op.opcode)
+ return;
+ if (!op.chars)
+ return;
+ if (op.opcode === '-') {
+ if (lastOpcode === '=') {
+ flushKeeps();
+ }
+ minusAssem.append(op);
+ lengthChange -= op.chars;
+ }
+ else if (op.opcode === '+') {
+ if (lastOpcode === '=') {
+ flushKeeps();
+ }
+ plusAssem.append(op);
+ lengthChange += op.chars;
+ }
+ else if (op.opcode === '=') {
+ if (lastOpcode !== '=') {
+ flushPlusMinus();
+ }
+ keepAssem.append(op);
+ }
+ lastOpcode = op.opcode;
+ };
+ /**
+ * Generates operations from the given text and attributes.
+ *
+ * @deprecated Use `opsFromText` instead.
+ * @param {('-'|'+'|'=')} opcode - The operator to use.
+ * @param {string} text - The text to remove/add/keep.
+ * @param {(string|Iterable)} attribs - The attributes to apply to the operations.
+ * @param {?AttributePool} pool - Attribute pool. Only required if `attribs` is an iterable of
+ * attribute key, value pairs.
+ */
+ const appendOpWithText = (opcode, text, attribs, pool) => {
+ padutils.warnDeprecated('Changeset.smartOpAssembler().appendOpWithText() is deprecated; ' +
+ 'use opsFromText() instead.');
+ for (const op of opsFromText(opcode, text, attribs, pool))
+ append(op);
+ };
+ const toString = () => {
+ flushPlusMinus();
+ flushKeeps();
+ return assem.toString();
+ };
+ const clear = () => {
+ minusAssem.clear();
+ plusAssem.clear();
+ keepAssem.clear();
+ assem.clear();
+ lengthChange = 0;
+ };
+ const endDocument = () => {
+ keepAssem.endDocument();
+ };
+ const getLengthChange = () => lengthChange;
+ return {
+ append,
+ toString,
+ clear,
+ endDocument,
+ appendOpWithText,
+ getLengthChange,
+ };
+};
+export const mergingOpAssembler = () => {
+ const assem = exports.opAssembler();
+ const bufOp = new Op();
+ // If we get, for example, insertions [xxx\n,yyy], those don't merge,
+ // but if we get [xxx\n,yyy,zzz\n], that merges to [xxx\nyyyzzz\n].
+ // This variable stores the length of yyy and any other newline-less
+ // ops immediately after it.
+ let bufOpAdditionalCharsAfterNewline = 0;
+ /**
+ * @param {boolean} [isEndDocument]
+ */
+ const flush = (isEndDocument) => {
+ if (!bufOp.opcode)
+ return;
+ if (isEndDocument && bufOp.opcode === '=' && !bufOp.attribs) {
+ // final merged keep, leave it implicit
+ }
+ else {
+ assem.append(bufOp);
+ if (bufOpAdditionalCharsAfterNewline) {
+ bufOp.chars = bufOpAdditionalCharsAfterNewline;
+ bufOp.lines = 0;
+ assem.append(bufOp);
+ bufOpAdditionalCharsAfterNewline = 0;
+ }
+ }
+ bufOp.opcode = '';
+ };
+ const append = (op) => {
+ if (op.chars <= 0)
+ return;
+ if (bufOp.opcode === op.opcode && bufOp.attribs === op.attribs) {
+ if (op.lines > 0) {
+ // bufOp and additional chars are all mergeable into a multi-line op
+ bufOp.chars += bufOpAdditionalCharsAfterNewline + op.chars;
+ bufOp.lines += op.lines;
+ bufOpAdditionalCharsAfterNewline = 0;
+ }
+ else if (bufOp.lines === 0) {
+ // both bufOp and op are in-line
+ bufOp.chars += op.chars;
+ }
+ else {
+ // append in-line text to multi-line bufOp
+ bufOpAdditionalCharsAfterNewline += op.chars;
+ }
+ }
+ else {
+ flush();
+ copyOp(op, bufOp);
+ }
+ };
+ const endDocument = () => {
+ flush(true);
+ };
+ const toString = () => {
+ flush();
+ return assem.toString();
+ };
+ const clear = () => {
+ assem.clear();
+ clearOp(bufOp);
+ };
+ return {
+ append,
+ toString,
+ clear,
+ endDocument,
+ };
+};
+export const opAssembler = () => {
+ let serialized = '';
+ /**
+ * @param {Op} op - Operation to add. Ownership remains with the caller.
+ */
+ const append = (op) => {
+ assert(op instanceof Op, 'argument must be an instance of Op');
+ serialized += op.toString();
+ };
+ const toString = () => serialized;
+ const clear = () => {
+ serialized = '';
+ };
+ return {
+ append,
+ toString,
+ clear,
+ };
+};
+export const stringIterator = (str) => {
+ let curIndex = 0;
+ // newLines is the number of \n between curIndex and str.length
+ let newLines = str.split('\n').length - 1;
+ const getnewLines = () => newLines;
+ const assertRemaining = (n) => {
+ assert(n <= remaining(), `!(${n} <= ${remaining()})`);
+ };
+ const take = (n) => {
+ assertRemaining(n);
+ const s = str.substr(curIndex, n);
+ newLines -= s.split('\n').length - 1;
+ curIndex += n;
+ return s;
+ };
+ const peek = (n) => {
+ assertRemaining(n);
+ const s = str.substr(curIndex, n);
+ return s;
+ };
+ const skip = (n) => {
+ assertRemaining(n);
+ curIndex += n;
+ };
+ const remaining = () => str.length - curIndex;
+ return {
+ take,
+ skip,
+ remaining,
+ peek,
+ newlines: getnewLines,
+ };
+};
+export const stringAssembler = () => ({
+ _str: '',
+ clear() { this._str = ''; },
+ /**
+ * @param {string} x -
+ */
+ append(x) { this._str += String(x); },
+ toString() { return this._str; },
+});
+export const unpack = (cs) => {
+ const headerRegex = /Z:([0-9a-z]+)([><])([0-9a-z]+)|/;
+ const headerMatch = headerRegex.exec(cs);
+ if ((!headerMatch) || (!headerMatch[0]))
+ error(`Not a changeset: ${cs}`);
+ const oldLen = exports.parseNum(headerMatch[1]);
+ const changeSign = (headerMatch[2] === '>') ? 1 : -1;
+ const changeMag = exports.parseNum(headerMatch[3]);
+ const newLen = oldLen + changeSign * changeMag;
+ const opsStart = headerMatch[0].length;
+ let opsEnd = cs.indexOf('$');
+ if (opsEnd < 0)
+ opsEnd = cs.length;
+ return {
+ oldLen,
+ newLen,
+ ops: cs.substring(opsStart, opsEnd),
+ charBank: cs.substring(opsEnd + 1),
+ };
+};
+export const pack = (oldLen, newLen, opsStr, bank) => {
+ const lenDiff = newLen - oldLen;
+ const lenDiffStr = (lenDiff >= 0 ? `>${exports.numToString(lenDiff)}`
+ : `<${exports.numToString(-lenDiff)}`);
+ const a = [];
+ a.push('Z:', exports.numToString(oldLen), lenDiffStr, opsStr, '$', bank);
+ return a.join('');
+};
+export const applyToText = (cs, str) => {
+ const unpacked = exports.unpack(cs);
+ assert(str.length === unpacked.oldLen, `mismatched apply: ${str.length} / ${unpacked.oldLen}`);
+ const bankIter = exports.stringIterator(unpacked.charBank);
+ const strIter = exports.stringIterator(str);
+ const assem = exports.stringAssembler();
+ for (const op of exports.deserializeOps(unpacked.ops)) {
+ switch (op.opcode) {
+ case '+':
+ // op is + and op.lines 0: no newlines must be in op.chars
+ // op is + and op.lines >0: op.chars must include op.lines newlines
+ if (op.lines !== bankIter.peek(op.chars).split('\n').length - 1) {
+ throw new Error(`newline count is wrong in op +; cs:${cs} and text:${str}`);
}
assem.append(bankIter.take(op.chars));
break;
case '-':
- // op is - and op.lines 0: no newlines must be in the deleted string
- // op is - and op.lines >0: op.lines newlines must be in the deleted string
+ // op is - and op.lines 0: no newlines must be in the deleted string
+ // op is - and op.lines >0: op.lines newlines must be in the deleted string
if (op.lines !== strIter.peek(op.chars).split('\n').length - 1) {
throw new Error(`newline count is wrong in op -; cs:${cs} and text:${str}`);
}
strIter.skip(op.chars);
break;
case '=':
- // op is = and op.lines 0: no newlines must be in the copied string
- // op is = and op.lines >0: op.lines newlines must be in the copied string
+ // op is = and op.lines 0: no newlines must be in the copied string
+ // op is = and op.lines >0: op.lines newlines must be in the copied string
if (op.lines !== strIter.peek(op.chars).split('\n').length - 1) {
throw new Error(`newline count is wrong in op =; cs:${cs} and text:${str}`);
}
@@ -1162,20 +1089,13 @@ export const applyToText = (cs, str) => {
}
}
assem.append(strIter.take(strIter.remaining()));
- return assem.toString();
-};
-
-/**
- * Applies a changeset on an array of lines.
- *
- * @param {string} cs - the changeset to apply
- * @param {string[]} lines - The lines to which the changeset needs to be applied
- */
+ return assem.toString();
+};
export const mutateTextLines = (cs, lines) => {
- const unpacked = unpack(cs);
- const bankIter = stringIterator(unpacked.charBank);
+ const unpacked = exports.unpack(cs);
+ const bankIter = exports.stringIterator(unpacked.charBank);
const mut = new TextLinesMutator(lines);
- for (const op of deserializeOps(unpacked.ops)) {
+ for (const op of exports.deserializeOps(unpacked.ops)) {
switch (op.opcode) {
case '+':
mut.insert(bankIter.take(op.chars), op.lines);
@@ -1190,16 +1110,6 @@ export const mutateTextLines = (cs, lines) => {
}
mut.close();
};
-
-/**
- * Composes two attribute strings (see below) into one.
- *
- * @param {AttributeString} att1 - first attribute string
- * @param {AttributeString} att2 - second attribue string
- * @param {boolean} resultIsMutation -
- * @param {AttributePool} pool - attribute pool
- * @returns {string}
- */
export const composeAttributes = (att1, att2, resultIsMutation, pool) => {
// att1 and att2 are strings like "*3*f*1c", asMutation is a boolean.
// Sometimes attribute (key,value) pairs are treated as attribute presence
@@ -1221,93 +1131,15 @@ export const composeAttributes = (att1, att2, resultIsMutation, pool) => {
// attributes that are already gone, so don't do this optimization.
return att2;
}
- if (!att2) return att1;
+ if (!att2)
+ return att1;
return AttributeMap.fromString(att1, pool).updateFromString(att2, !resultIsMutation).toString();
};
-
-/**
- * Function used as parameter for applyZip to apply a Changeset to an attribute.
- *
- * @param {Op} attOp - The op from the sequence that is being operated on, either an attribution
- * string or the earlier of two exportss being composed.
- * @param {Op} csOp -
- * @param {AttributePool} pool - Can be null if definitely not needed.
- * @returns {Op} The result of applying `csOp` to `attOp`.
- */
-const slicerZipperFunc = (attOp, csOp, pool) => {
- const opOut = new Op();
- if (!attOp.opcode) {
- copyOp(csOp, opOut);
- csOp.opcode = '';
- } else if (!csOp.opcode) {
- copyOp(attOp, opOut);
- attOp.opcode = '';
- } else if (attOp.opcode === '-') {
- copyOp(attOp, opOut);
- attOp.opcode = '';
- } else if (csOp.opcode === '+') {
- copyOp(csOp, opOut);
- csOp.opcode = '';
- } else {
- for (const op of [attOp, csOp]) {
- assert(op.chars >= op.lines, `op has more newlines than chars: ${op.toString()}`);
- }
- assert(
- attOp.chars < csOp.chars ? attOp.lines <= csOp.lines
- : attOp.chars > csOp.chars ? attOp.lines >= csOp.lines
- : attOp.lines === csOp.lines,
- 'line count mismatch when composing changesets A*B; ' +
- `opA: ${attOp.toString()} opB: ${csOp.toString()}`);
- assert(['+', '='].includes(attOp.opcode), `unexpected opcode in op: ${attOp.toString()}`);
- assert(['-', '='].includes(csOp.opcode), `unexpected opcode in op: ${csOp.toString()}`);
- opOut.opcode = {
- '+': {
- '-': '', // The '-' cancels out (some of) the '+', leaving any remainder for the next call.
- '=': '+',
- },
- '=': {
- '-': '-',
- '=': '=',
- },
- }[attOp.opcode][csOp.opcode];
- const [fullyConsumedOp, partiallyConsumedOp] = [attOp, csOp].sort((a, b) => a.chars - b.chars);
- opOut.chars = fullyConsumedOp.chars;
- opOut.lines = fullyConsumedOp.lines;
- opOut.attribs = csOp.opcode === '-'
- // csOp is a remove op and remove ops normally never have any attributes, so this should
- // normally be the empty string. However, padDiff.js adds attributes to remove ops and needs
- // them preserved so they are copied here.
- ? csOp.attribs
- : composeAttributes(attOp.attribs, csOp.attribs, attOp.opcode === '=', pool);
- partiallyConsumedOp.chars -= fullyConsumedOp.chars;
- partiallyConsumedOp.lines -= fullyConsumedOp.lines;
- if (!partiallyConsumedOp.chars) partiallyConsumedOp.opcode = '';
- fullyConsumedOp.opcode = '';
- }
- return opOut;
-};
-
-/**
- * Applies a Changeset to the attribs string of a AText.
- *
- * @param {string} cs - Changeset
- * @param {string} astr - the attribs string of a AText
- * @param {AttributePool} pool - the attibutes pool
- * @returns {string}
- */
export const applyToAttribution = (cs, astr, pool) => {
- const unpacked = unpack(cs);
+ const unpacked = exports.unpack(cs);
return applyZip(astr, unpacked.ops, (op1, op2) => slicerZipperFunc(op1, op2, pool));
};
-
-/**
- * Applies a changeset to an array of attribute lines.
- *
- * @param {string} cs - The encoded changeset.
- * @param {Array} lines - Attribute lines. Modified in place.
- * @param {AttributePool} pool - Attribute pool.
- */
-exports.mutateAttributionLines = (cs, lines, pool) => {
+export const mutateAttributionLines = (cs, lines, pool) => {
const unpacked = exports.unpack(cs);
const csOps = exports.deserializeOps(unpacked.ops);
let csOpsNext = csOps.next();
@@ -1315,7 +1147,6 @@ exports.mutateAttributionLines = (cs, lines, pool) => {
let csBankIndex = 0;
// treat the attribution lines as text lines, mutating a line at a time
const mut = new TextLinesMutator(lines);
-
/**
* The Ops in the current line from `lines`.
*
@@ -1323,7 +1154,6 @@ exports.mutateAttributionLines = (cs, lines, pool) => {
*/
let lineOps = null;
let lineOpsNext = null;
-
const lineOpsHasNext = () => lineOpsNext && !lineOpsNext.done;
/**
* Returns false if we are on the last attribute line in `lines` and there is no additional op in
@@ -1332,7 +1162,6 @@ exports.mutateAttributionLines = (cs, lines, pool) => {
* @returns {boolean} True if there are more ops to go through.
*/
const isNextMutOp = () => lineOpsHasNext() || mut.hasMore();
-
/**
* @returns {Op} The next Op from `lineIter`. If there are no more Ops, `lineIter` is reset to
* iterate over the next line, which is consumed from `mut`. If there are no more lines,
@@ -1346,13 +1175,13 @@ exports.mutateAttributionLines = (cs, lines, pool) => {
lineOps = exports.deserializeOps(line);
lineOpsNext = lineOps.next();
}
- if (!lineOpsHasNext()) return new Op(); // No more ops and no more lines.
+ if (!lineOpsHasNext())
+ return new Op(); // No more ops and no more lines.
const op = lineOpsNext.value;
lineOpsNext = lineOps.next();
return op;
};
let lineAssem = null;
-
/**
* Appends an op to `lineAssem`. In case `lineAssem` includes one single newline, adds it to the
* `lines` mutator.
@@ -1362,13 +1191,13 @@ exports.mutateAttributionLines = (cs, lines, pool) => {
lineAssem = exports.mergingOpAssembler();
}
lineAssem.append(op);
- if (op.lines <= 0) return;
+ if (op.lines <= 0)
+ return;
assert(op.lines === 1, `Can't have op.lines of ${op.lines} in attribution lines`);
// ship it to the mut
mut.insert(lineAssem.toString(), 1);
lineAssem = null;
};
-
let csOp = new Op();
let attOp = new Op();
while (csOp.opcode || !csOpsNext.done || attOp.opcode || isNextMutOp()) {
@@ -1379,13 +1208,15 @@ exports.mutateAttributionLines = (cs, lines, pool) => {
}
if (!csOp.opcode && !attOp.opcode && !lineAssem && !lineOpsHasNext()) {
break; // done
- } else if (csOp.opcode === '=' && csOp.lines > 0 && !csOp.attribs && !attOp.opcode &&
- !lineAssem && !lineOpsHasNext()) {
+ }
+ else if (csOp.opcode === '=' && csOp.lines > 0 && !csOp.attribs && !attOp.opcode &&
+ !lineAssem && !lineOpsHasNext()) {
// Skip multiple lines without attributes; this is what makes small changes not order of the
// document size.
mut.skipLines(csOp.lines);
csOp.opcode = '';
- } else if (csOp.opcode === '+') {
+ }
+ else if (csOp.opcode === '+') {
const opOut = copyOp(csOp);
if (csOp.lines > 1) {
// Copy the first line from `csOp` to `opOut`.
@@ -1394,42 +1225,37 @@ exports.mutateAttributionLines = (cs, lines, pool) => {
csOp.lines--;
opOut.lines = 1;
opOut.chars = firstLineLen;
- } else {
+ }
+ else {
// Either one or no newlines in '+' `csOp`, copy to `opOut` and reset `csOp`.
csOp.opcode = '';
}
outputMutOp(opOut);
csBankIndex += opOut.chars;
- } else {
- if (!attOp.opcode && isNextMutOp()) attOp = nextMutOp();
+ }
+ else {
+ if (!attOp.opcode && isNextMutOp())
+ attOp = nextMutOp();
const opOut = slicerZipperFunc(attOp, csOp, pool);
- if (opOut.opcode) outputMutOp(opOut);
+ if (opOut.opcode)
+ outputMutOp(opOut);
}
}
-
assert(!lineAssem, `line assembler not finished:${cs}`);
mut.close();
};
-
-/**
- * Joins several Attribution lines.
- *
- * @param {string[]} theAlines - collection of Attribution lines
- * @returns {string} joined Attribution lines
- */
-exports.joinAttributionLines = (theAlines) => {
+export const joinAttributionLines = (theAlines) => {
const assem = exports.mergingOpAssembler();
for (const aline of theAlines) {
- for (const op of exports.deserializeOps(aline)) assem.append(op);
+ for (const op of exports.deserializeOps(aline))
+ assem.append(op);
}
return assem.toString();
};
-
-exports.splitAttributionLines = (attrOps, text) => {
+export const splitAttributionLines = (attrOps, text) => {
const assem = exports.mergingOpAssembler();
const lines = [];
let pos = 0;
-
const appendOp = (op) => {
assem.append(op);
if (op.lines > 0) {
@@ -1438,7 +1264,6 @@ exports.splitAttributionLines = (attrOps, text) => {
}
pos += op.chars;
};
-
for (const op of exports.deserializeOps(attrOps)) {
let numChars = op.chars;
let numLines = op.lines;
@@ -1457,27 +1282,10 @@ exports.splitAttributionLines = (attrOps, text) => {
}
appendOp(op);
}
-
return lines;
};
-
-/**
- * Splits text into lines.
- *
- * @param {string} text - text to split
- * @returns {string[]}
- */
-exports.splitTextLines = (text) => text.match(/[^\n]*(?:\n|[^\n]$)/g);
-
-/**
- * Compose two Changesets.
- *
- * @param {string} cs1 - first Changeset
- * @param {string} cs2 - second Changeset
- * @param {AttributePool} pool - Attribs pool
- * @returns {string}
- */
-exports.compose = (cs1, cs2, pool) => {
+export const splitTextLines = (text) => text.match(/[^\n]*(?:\n|[^\n]$)/g);
+export const compose = (cs1, cs2, pool) => {
const unpacked1 = exports.unpack(cs1);
const unpacked2 = exports.unpack(cs2);
const len1 = unpacked1.oldLen;
@@ -1487,7 +1295,6 @@ exports.compose = (cs1, cs2, pool) => {
const bankIter1 = exports.stringIterator(unpacked1.charBank);
const bankIter2 = exports.stringIterator(unpacked2.charBank);
const bankAssem = exports.stringAssembler();
-
const newOps = applyZip(unpacked1.ops, unpacked2.ops, (op1, op2) => {
const op1code = op1.opcode;
const op2code = op2.opcode;
@@ -1498,59 +1305,35 @@ exports.compose = (cs1, cs2, pool) => {
if (opOut.opcode === '+') {
if (op2code === '+') {
bankAssem.append(bankIter2.take(opOut.chars));
- } else {
+ }
+ else {
bankAssem.append(bankIter1.take(opOut.chars));
}
}
return opOut;
});
-
return exports.pack(len1, len3, newOps, bankAssem.toString());
};
-
-/**
- * Returns a function that tests if a string of attributes (e.g. '*3*4') contains a given attribute
- * key,value that is already present in the pool.
- *
- * @param {Attribute} attribPair - `[key, value]` pair of strings.
- * @param {AttributePool} pool - Attribute pool
- * @returns {Function}
- */
-exports.attributeTester = (attribPair, pool) => {
+export const attributeTester = (attribPair, pool) => {
const never = (attribs) => false;
- if (!pool) return never;
+ if (!pool)
+ return never;
const attribNum = pool.putAttrib(attribPair, true);
- if (attribNum < 0) return never;
+ if (attribNum < 0)
+ return never;
const re = new RegExp(`\\*${exports.numToString(attribNum)}(?!\\w)`);
return (attribs) => re.test(attribs);
};
-
-/**
- * Creates the identity Changeset of length N.
- *
- * @param {number} N - length of the identity changeset
- * @returns {string}
- */
-exports.identity = (N) => exports.pack(N, N, '', '');
-
-/**
- * Creates a Changeset which works on oldFullText and removes text from spliceStart to
- * spliceStart+numRemoved and inserts newText instead. Also gives possibility to add attributes
- * optNewTextAPairs for the new text.
- *
- * @param {string} orig - Original text.
- * @param {number} start - Index into `orig` where characters should be removed and inserted.
- * @param {number} ndel - Number of characters to delete at `start`.
- * @param {string} ins - Text to insert at `start` (after deleting `ndel` characters).
- * @param {string} [attribs] - Optional attributes to apply to the inserted text.
- * @param {AttributePool} [pool] - Attribute pool.
- * @returns {string}
- */
-exports.makeSplice = (orig, start, ndel, ins, attribs, pool) => {
- if (start < 0) throw new RangeError(`start index must be non-negative (is ${start})`);
- if (ndel < 0) throw new RangeError(`characters to delete must be non-negative (is ${ndel})`);
- if (start > orig.length) start = orig.length;
- if (ndel > orig.length - start) ndel = orig.length - start;
+export const identity = (N) => exports.pack(N, N, '', '');
+export const makeSplice = (orig, start, ndel, ins, attribs, pool) => {
+ if (start < 0)
+ throw new RangeError(`start index must be non-negative (is ${start})`);
+ if (ndel < 0)
+ throw new RangeError(`characters to delete must be non-negative (is ${ndel})`);
+ if (start > orig.length)
+ start = orig.length;
+ if (ndel > orig.length - start)
+ ndel = orig.length - start;
const deleted = orig.substring(start, start + ndel);
const assem = exports.smartOpAssembler();
const ops = (function* () {
@@ -1558,55 +1341,12 @@ exports.makeSplice = (orig, start, ndel, ins, attribs, pool) => {
yield* opsFromText('-', deleted);
yield* opsFromText('+', ins, attribs, pool);
})();
- for (const op of ops) assem.append(op);
+ for (const op of ops)
+ assem.append(op);
assem.endDocument();
return exports.pack(orig.length, orig.length + ins.length - ndel, assem.toString(), ins);
};
-
-/**
- * Transforms a changeset into a list of splices in the form [startChar, endChar, newText] meaning
- * replace text from startChar to endChar with newText.
- *
- * @param {string} cs - Changeset
- * @returns {[number, number, string][]}
- */
-const toSplices = (cs) => {
- const unpacked = exports.unpack(cs);
- /** @type {[number, number, string][]} */
- const splices = [];
-
- let oldPos = 0;
- const charIter = exports.stringIterator(unpacked.charBank);
- let inSplice = false;
- for (const op of exports.deserializeOps(unpacked.ops)) {
- if (op.opcode === '=') {
- oldPos += op.chars;
- inSplice = false;
- } else {
- if (!inSplice) {
- splices.push([oldPos, oldPos, '']);
- inSplice = true;
- }
- if (op.opcode === '-') {
- oldPos += op.chars;
- splices[splices.length - 1][1] += op.chars;
- } else if (op.opcode === '+') {
- splices[splices.length - 1][2] += charIter.take(op.chars);
- }
- }
- }
-
- return splices;
-};
-
-/**
- * @param {string} cs -
- * @param {number} startChar -
- * @param {number} endChar -
- * @param {number} insertionsAfter -
- * @returns {[number, number]}
- */
-exports.characterRangeFollow = (cs, startChar, endChar, insertionsAfter) => {
+export const characterRangeFollow = (cs, startChar, endChar, insertionsAfter) => {
let newStartChar = startChar;
let newEndChar = endChar;
let lengthChangeSoFar = 0;
@@ -1615,48 +1355,42 @@ exports.characterRangeFollow = (cs, startChar, endChar, insertionsAfter) => {
const spliceEnd = splice[1] + lengthChangeSoFar;
const newTextLength = splice[2].length;
const thisLengthChange = newTextLength - (spliceEnd - spliceStart);
-
if (spliceStart <= newStartChar && spliceEnd >= newEndChar) {
// splice fully replaces/deletes range
// (also case that handles insertion at a collapsed selection)
if (insertionsAfter) {
newStartChar = newEndChar = spliceStart;
- } else {
+ }
+ else {
newStartChar = newEndChar = spliceStart + newTextLength;
}
- } else if (spliceEnd <= newStartChar) {
+ }
+ else if (spliceEnd <= newStartChar) {
// splice is before range
newStartChar += thisLengthChange;
newEndChar += thisLengthChange;
- } else if (spliceStart >= newEndChar) {
+ }
+ else if (spliceStart >= newEndChar) {
// splice is after range
- } else if (spliceStart >= newStartChar && spliceEnd <= newEndChar) {
+ }
+ else if (spliceStart >= newStartChar && spliceEnd <= newEndChar) {
// splice is inside range
newEndChar += thisLengthChange;
- } else if (spliceEnd < newEndChar) {
+ }
+ else if (spliceEnd < newEndChar) {
// splice overlaps beginning of range
newStartChar = spliceStart + newTextLength;
newEndChar += thisLengthChange;
- } else {
+ }
+ else {
// splice overlaps end of range
newEndChar = spliceStart;
}
-
lengthChangeSoFar += thisLengthChange;
}
-
return [newStartChar, newEndChar];
};
-
-/**
- * Iterate over attributes in a changeset and move them from oldPool to newPool.
- *
- * @param {string} cs - Chageset/attribution string to iterate over
- * @param {AttributePool} oldPool - old attributes pool
- * @param {AttributePool} newPool - new attributes pool
- * @returns {string} the new Changeset
- */
-exports.moveOpsToNewPool = (cs, oldPool, newPool) => {
+export const moveOpsToNewPool = (cs, oldPool, newPool) => {
// works on exports or attribution string
let dollarPos = cs.indexOf('$');
if (dollarPos < 0) {
@@ -1670,41 +1404,25 @@ exports.moveOpsToNewPool = (cs, oldPool, newPool) => {
const pair = oldPool.getAttrib(oldNum);
// The attribute might not be in the old pool if the user is viewing the current revision in the
// timeslider and text is deleted. See: https://github.com/ether/etherpad-lite/issues/3932
- if (!pair) return '';
+ if (!pair)
+ return '';
const newNum = newPool.putAttrib(pair);
return `*${exports.numToString(newNum)}`;
}) + fromDollar;
};
-
-/**
- * Create an attribution inserting a text.
- *
- * @param {string} text - text to insert
- * @returns {string}
- */
-exports.makeAttribution = (text) => {
+export const makeAttribution = (text) => {
const assem = exports.smartOpAssembler();
- for (const op of opsFromText('+', text)) assem.append(op);
+ for (const op of opsFromText('+', text))
+ assem.append(op);
return assem.toString();
};
-
-/**
- * Iterates over attributes in exports, attribution string, or attribs property of an op and runs
- * function func on them.
- *
- * @deprecated Use `attributes.decodeAttribString()` instead.
- * @param {string} cs - changeset
- * @param {Function} func - function to call
- */
-exports.eachAttribNumber = (cs, func) => {
- padutils.warnDeprecated(
- 'Changeset.eachAttribNumber() is deprecated; use attributes.decodeAttribString() instead');
+export const eachAttribNumber = (cs, func) => {
+ padutils.warnDeprecated('Changeset.eachAttribNumber() is deprecated; use attributes.decodeAttribString() instead');
let dollarPos = cs.indexOf('$');
if (dollarPos < 0) {
dollarPos = cs.length;
}
const upToDollar = cs.substring(0, dollarPos);
-
// WARNING: The following cannot be replaced with a call to `attributes.decodeAttribString()`
// because that function only works on attribute strings, not serialized operations or changesets.
upToDollar.replace(/\*([0-9a-z]+)/g, (_, a) => {
@@ -1712,126 +1430,63 @@ exports.eachAttribNumber = (cs, func) => {
return '';
});
};
-
-/**
- * Filter attributes which should remain in a Changeset. Callable on a exports, attribution string,
- * or attribs property of an op, though it may easily create adjacent ops that can be merged.
- *
- * @param {string} cs - changeset to filter
- * @param {Function} filter - fnc which returns true if an attribute X (int) should be kept in the
- * Changeset
- * @returns {string}
- */
-exports.filterAttribNumbers = (cs, filter) => exports.mapAttribNumbers(cs, filter);
-
-/**
- * Does exactly the same as exports.filterAttribNumbers.
- *
- * @param {string} cs -
- * @param {Function} func -
- * @returns {string}
- */
-exports.mapAttribNumbers = (cs, func) => {
+export const filterAttribNumbers = (cs, filter) => exports.mapAttribNumbers(cs, filter);
+export const mapAttribNumbers = (cs, func) => {
let dollarPos = cs.indexOf('$');
if (dollarPos < 0) {
dollarPos = cs.length;
}
const upToDollar = cs.substring(0, dollarPos);
-
const newUpToDollar = upToDollar.replace(/\*([0-9a-z]+)/g, (s, a) => {
const n = func(exports.parseNum(a));
if (n === true) {
return s;
- } else if ((typeof n) === 'number') {
+ }
+ else if ((typeof n) === 'number') {
return `*${exports.numToString(n)}`;
- } else {
+ }
+ else {
return '';
}
});
-
return newUpToDollar + cs.substring(dollarPos);
};
-
-/**
- * Represents text with attributes.
- *
- * @typedef {object} AText
- * @property {string} attribs - Serialized sequence of insert operations that cover the text in
- * `text`. These operations describe which parts of the text have what attributes.
- * @property {string} text - The text.
- */
-
-/**
- * Create a Changeset going from Identity to a certain state.
- *
- * @param {string} text - text of the final change
- * @param {string} attribs - optional, operations which insert the text and also puts the right
- * attributes
- * @returns {AText}
- */
export const makeAText = (text, attribs) => ({
text,
attribs: (attribs || exports.makeAttribution(text)),
});
-
-/**
- * Apply a Changeset to a AText.
- *
- * @param {string} cs - Changeset to apply
- * @param {AText} atext -
- * @param {AttributePool} pool - Attribute Pool to add to
- * @returns {AText}
- */
export const applyToAText = (cs, atext, pool) => ({
text: exports.applyToText(cs, atext.text),
attribs: exports.applyToAttribution(cs, atext.attribs, pool),
});
-
-/**
- * Clones a AText structure.
- *
- * @param {AText} atext -
- * @returns {AText}
- */
-exports.cloneAText = (atext) => {
- if (!atext) error('atext is null');
+export const cloneAText = (atext) => {
+ if (!atext)
+ error('atext is null');
return {
text: atext.text,
attribs: atext.attribs,
};
};
-
-/**
- * Copies a AText structure from atext1 to atext2.
- *
- * @param {AText} atext1 -
- * @param {AText} atext2 -
- */
export const copyAText = (atext1, atext2) => {
atext2.text = atext1.text;
atext2.attribs = atext1.attribs;
};
-
-/**
- * Convert AText to a series of operations. Strips final newline.
- *
- * @param {AText} atext - The AText to convert.
- * @yields {Op}
- * @returns {Generator}
- */
export const opsFromAText = function* (atext) {
// intentionally skips last newline char of atext
let lastOp = null;
- for (const op of deserializeOps(atext.attribs)) {
- if (lastOp != null) yield lastOp;
+ for (const op of exports.deserializeOps(atext.attribs)) {
+ if (lastOp != null)
+ yield lastOp;
lastOp = op;
}
- if (lastOp == null) return;
+ if (lastOp == null)
+ return;
// exclude final newline
if (lastOp.lines <= 1) {
lastOp.lines = 0;
lastOp.chars--;
- } else {
+ }
+ else {
const nextToLastNewlineEnd = atext.text.lastIndexOf('\n', atext.text.length - 2) + 1;
const lastLineLength = atext.text.length - nextToLastNewlineEnd - 1;
lastOp.lines--;
@@ -1840,30 +1495,15 @@ export const opsFromAText = function* (atext) {
lastOp.lines = 0;
lastOp.chars = lastLineLength;
}
- if (lastOp.chars) yield lastOp;
+ if (lastOp.chars)
+ yield lastOp;
};
-
-/**
- * Append the set of operations from atext to an assembler.
- *
- * @deprecated Use `opsFromAText` instead.
- * @param {AText} atext -
- * @param assem - Assembler like SmartOpAssembler TODO add desc
- */
-exports.appendATextToAssembler = (atext, assem) => {
- padutils.warnDeprecated(
- 'Changeset.appendATextToAssembler() is deprecated; use Changeset.opsFromAText() instead');
- for (const op of exports.opsFromAText(atext)) assem.append(op);
+export const appendATextToAssembler = (atext, assem) => {
+ padutils.warnDeprecated('Changeset.appendATextToAssembler() is deprecated; use Changeset.opsFromAText() instead');
+ for (const op of exports.opsFromAText(atext))
+ assem.append(op);
};
-
-/**
- * Creates a clone of a Changeset and it's APool.
- *
- * @param {string} cs -
- * @param {AttributePool} pool -
- * @returns {{translated: string, pool: AttributePool}}
- */
-exports.prepareForWire = (cs, pool) => {
+export const prepareForWire = (cs, pool) => {
const newPool = new AttributePool();
const newCs = exports.moveOpsToNewPool(cs, pool, newPool);
return {
@@ -1871,79 +1511,22 @@ exports.prepareForWire = (cs, pool) => {
pool: newPool,
};
};
-
-/**
- * Checks if a changeset s the identity changeset.
- *
- * @param {string} cs -
- * @returns {boolean}
- */
-exports.isIdentity = (cs) => {
+export const isIdentity = (cs) => {
const unpacked = exports.unpack(cs);
return unpacked.ops === '' && unpacked.oldLen === unpacked.newLen;
};
-
-/**
- * @deprecated Use an AttributeMap instead.
- */
-const attribsAttributeValue = (attribs, key, pool) => {
- if (!attribs) return '';
- for (const [k, v] of attributes.attribsFromString(attribs, pool)) {
- if (k === key) return v;
- }
- return '';
-};
-
-/**
- * Returns all the values of attributes with a certain key in an Op attribs string.
- *
- * @deprecated Use an AttributeMap instead.
- * @param {Op} op - Op
- * @param {string} key - string to search for
- * @param {AttributePool} pool - attribute pool
- * @returns {string}
- */
-exports.opAttributeValue = (op, key, pool) => {
- padutils.warnDeprecated(
- 'Changeset.opAttributeValue() is deprecated; use an AttributeMap instead');
+export const opAttributeValue = (op, key, pool) => {
+ padutils.warnDeprecated('Changeset.opAttributeValue() is deprecated; use an AttributeMap instead');
return attribsAttributeValue(op.attribs, key, pool);
};
-
-/**
- * Returns all the values of attributes with a certain key in an attribs string.
- *
- * @deprecated Use an AttributeMap instead.
- * @param {AttributeString} attribs - Attribute string
- * @param {string} key - string to search for
- * @param {AttributePool} pool - attribute pool
- * @returns {string}
- */
-exports.attribsAttributeValue = (attribs, key, pool) => {
- padutils.warnDeprecated(
- 'Changeset.attribsAttributeValue() is deprecated; use an AttributeMap instead');
+const attribsAttributeValue$0 = (attribs, key, pool) => {
+ padutils.warnDeprecated('Changeset.attribsAttributeValue() is deprecated; use an AttributeMap instead');
return attribsAttributeValue(attribs, key, pool);
};
-
-/**
- * Incrementally builds a Changeset.
- *
- * @typedef {object} Builder
- * @property {Function} insert -
- * @property {Function} keep -
- * @property {Function} keepText -
- * @property {Function} remove -
- * @property {Function} toString -
- */
-
-/**
- * @param {number} oldLen - Old length
- * @returns {Builder}
- */
-exports.builder = (oldLen) => {
+export const builder = (oldLen) => {
const assem = exports.smartOpAssembler();
const o = new Op();
const charBank = exports.stringAssembler();
-
const self = {
/**
* @param {number} N - Number of characters to keep.
@@ -1958,13 +1541,12 @@ exports.builder = (oldLen) => {
keep: (N, L, attribs, pool) => {
o.opcode = '=';
o.attribs = typeof attribs === 'string'
- ? attribs : new AttributeMap(pool).update(attribs || []).toString();
+ ? attribs : new AttributeMap(pool).update(attribs || []).toString();
o.chars = N;
o.lines = (L || 0);
assem.append(o);
return self;
},
-
/**
* @param {string} text - Text to keep.
* @param {(string|Attribute[])} attribs - Either [[key1,value1],[key2,value2],...] or '*0*1...'
@@ -1974,10 +1556,10 @@ exports.builder = (oldLen) => {
* @returns {Builder} this
*/
keepText: (text, attribs, pool) => {
- for (const op of opsFromText('=', text, attribs, pool)) assem.append(op);
+ for (const op of opsFromText('=', text, attribs, pool))
+ assem.append(op);
return self;
},
-
/**
* @param {string} text - Text to insert.
* @param {(string|Attribute[])} attribs - Either [[key1,value1],[key2,value2],...] or '*0*1...'
@@ -1987,11 +1569,11 @@ exports.builder = (oldLen) => {
* @returns {Builder} this
*/
insert: (text, attribs, pool) => {
- for (const op of opsFromText('+', text, attribs, pool)) assem.append(op);
+ for (const op of opsFromText('+', text, attribs, pool))
+ assem.append(op);
charBank.append(text);
return self;
},
-
/**
* @param {number} N - Number of characters to remove.
* @param {number} L - Number of newlines among the `N` characters. If positive, the last
@@ -2006,51 +1588,32 @@ exports.builder = (oldLen) => {
assem.append(o);
return self;
},
-
toString: () => {
assem.endDocument();
const newLen = oldLen + assem.getLengthChange();
return exports.pack(oldLen, newLen, assem.toString(), charBank.toString());
},
};
-
return self;
};
-
-/**
- * Constructs an attribute string from a sequence of attributes.
- *
- * @deprecated Use `AttributeMap.prototype.toString()` or `attributes.attribsToString()` instead.
- * @param {string} opcode - The opcode for the Op that will get the resulting attribute string.
- * @param {?(Iterable|AttributeString)} attribs - The attributes to insert into the pool
- * (if necessary) and encode. If an attribute string, no checking is performed to ensure that
- * the attributes exist in the pool, are in the canonical order, and contain no duplicate keys.
- * If this is an iterable of attributes, `pool` must be non-null.
- * @param {AttributePool} pool - Attribute pool. Required if `attribs` is an iterable of attributes,
- * ignored if `attribs` is an attribute string.
- * @returns {AttributeString}
- */
-exports.makeAttribsString = (opcode, attribs, pool) => {
- padutils.warnDeprecated(
- 'Changeset.makeAttribsString() is deprecated; ' +
+export const makeAttribsString = (opcode, attribs, pool) => {
+ padutils.warnDeprecated('Changeset.makeAttribsString() is deprecated; ' +
'use AttributeMap.prototype.toString() or attributes.attribsToString() instead');
- if (!attribs || !['=', '+'].includes(opcode)) return '';
- if (typeof attribs === 'string') return attribs;
+ if (!attribs || !['=', '+'].includes(opcode))
+ return '';
+ if (typeof attribs === 'string')
+ return attribs;
return new AttributeMap(pool).update(attribs, opcode === '+').toString();
};
-
-/**
- * Like "substring" but on a single-line attribution string.
- */
-exports.subattribution = (astr, start, optEnd) => {
+export const subattribution = (astr, start, optEnd) => {
const attOps = exports.deserializeOps(astr);
let attOpsNext = attOps.next();
const assem = exports.smartOpAssembler();
let attOp = new Op();
const csOp = new Op();
-
const doCsOp = () => {
- if (!csOp.chars) return;
+ if (!csOp.chars)
+ return;
while (csOp.opcode && (attOp.opcode || !attOpsNext.done)) {
if (!attOp.opcode) {
attOp = attOpsNext.value;
@@ -2061,15 +1624,13 @@ exports.subattribution = (astr, start, optEnd) => {
csOp.lines++;
}
const opOut = slicerZipperFunc(attOp, csOp, null);
- if (opOut.opcode) assem.append(opOut);
+ if (opOut.opcode)
+ assem.append(opOut);
}
};
-
csOp.opcode = '-';
csOp.chars = start;
-
doCsOp();
-
if (optEnd === undefined) {
if (attOp.opcode) {
assem.append(attOp);
@@ -2078,28 +1639,26 @@ exports.subattribution = (astr, start, optEnd) => {
assem.append(attOpsNext.value);
attOpsNext = attOps.next();
}
- } else {
+ }
+ else {
csOp.opcode = '=';
csOp.chars = optEnd - start;
doCsOp();
}
-
return assem.toString();
};
-
-exports.inverse = (cs, lines, alines, pool) => {
+export const inverse = (cs, lines, alines, pool) => {
// lines and alines are what the exports is meant to apply to.
// They may be arrays or objects with .get(i) and .length methods.
// They include final newlines on lines.
-
const linesGet = (idx) => {
if (lines.get) {
return lines.get(idx);
- } else {
+ }
+ else {
return lines[idx];
}
};
-
/**
* @param {number} idx -
* @returns {string}
@@ -2107,21 +1666,19 @@ exports.inverse = (cs, lines, alines, pool) => {
const alinesGet = (idx) => {
if (alines.get) {
return alines.get(idx);
- } else {
+ }
+ else {
return alines[idx];
}
};
-
let curLine = 0;
let curChar = 0;
let curLineOps = null;
let curLineOpsNext = null;
let curLineOpsLine;
let curLineNextOp = new Op('+');
-
const unpacked = exports.unpack(cs);
const builder = exports.builder(unpacked.newLen);
-
const consumeAttribRuns = (numChars, func /* (len, attribs, endsLine)*/) => {
if (!curLineOps || curLineOpsLine !== curLine) {
curLineOps = exports.deserializeOps(alinesGet(curLine));
@@ -2138,7 +1695,6 @@ exports.inverse = (cs, lines, alines, pool) => {
indexIntoLine += curLineNextOp.chars;
}
}
-
while (numChars > 0) {
if (!curLineNextOp.chars && curLineOpsNext.done) {
curLine++;
@@ -2151,7 +1707,8 @@ exports.inverse = (cs, lines, alines, pool) => {
if (!curLineNextOp.chars) {
if (curLineOpsNext.done) {
curLineNextOp = new Op();
- } else {
+ }
+ else {
curLineNextOp = curLineOpsNext.value;
curLineOpsNext = curLineOps.next();
}
@@ -2163,31 +1720,29 @@ exports.inverse = (cs, lines, alines, pool) => {
curLineNextOp.chars -= charsToUse;
curChar += charsToUse;
}
-
if (!curLineNextOp.chars && curLineOpsNext.done) {
curLine++;
curChar = 0;
}
};
-
const skip = (N, L) => {
if (L) {
curLine += L;
curChar = 0;
- } else if (curLineOps && curLineOpsLine === curLine) {
- consumeAttribRuns(N, () => {});
- } else {
+ }
+ else if (curLineOps && curLineOpsLine === curLine) {
+ consumeAttribRuns(N, () => { });
+ }
+ else {
curChar += N;
}
};
-
const nextText = (numChars) => {
let len = 0;
const assem = exports.stringAssembler();
const firstString = linesGet(curLine).substring(curChar);
len += firstString.length;
assem.append(firstString);
-
let lineNum = curLine + 1;
while (len < numChars) {
const nextString = linesGet(lineNum);
@@ -2195,10 +1750,8 @@ exports.inverse = (cs, lines, alines, pool) => {
assem.append(nextString);
lineNum++;
}
-
return assem.toString().substring(0, numChars);
};
-
const cachedStrFunc = (func) => {
const cache = {};
return (s) => {
@@ -2208,7 +1761,6 @@ exports.inverse = (cs, lines, alines, pool) => {
return cache[s];
};
};
-
for (const csOp of exports.deserializeOps(unpacked.ops)) {
if (csOp.opcode === '=') {
if (csOp.attribs) {
@@ -2218,7 +1770,8 @@ exports.inverse = (cs, lines, alines, pool) => {
const backAttribs = new AttributeMap(pool);
for (const [key, value] of attribs) {
const oldValue = oldAttribs.get(key) || '';
- if (oldValue !== value) backAttribs.set(key, oldValue);
+ if (oldValue !== value)
+ backAttribs.set(key, oldValue);
}
// TODO: backAttribs does not restore removed attributes (it is missing attributes that
// are in oldAttribs but not in attribs). I don't know if that is intentional.
@@ -2227,13 +1780,16 @@ exports.inverse = (cs, lines, alines, pool) => {
consumeAttribRuns(csOp.chars, (len, attribs, endsLine) => {
builder.keep(len, endsLine ? 1 : 0, undoBackToAttribs(attribs));
});
- } else {
+ }
+ else {
skip(csOp.chars, csOp.lines);
builder.keep(csOp.chars, csOp.lines);
}
- } else if (csOp.opcode === '+') {
+ }
+ else if (csOp.opcode === '+') {
builder.remove(csOp.chars, csOp.lines);
- } else if (csOp.opcode === '-') {
+ }
+ else if (csOp.opcode === '-') {
const textBank = nextText(csOp.chars);
let textBankIndex = 0;
consumeAttribRuns(csOp.chars, (len, attribs, endsLine) => {
@@ -2242,12 +1798,9 @@ exports.inverse = (cs, lines, alines, pool) => {
});
}
}
-
return exports.checkRep(builder.toString());
};
-
-// %CLIENT FILE ENDS HERE%
-exports.follow = (cs1, cs2, reverseInsertOrder, pool) => {
+export const follow = (cs1, cs2, reverseInsertOrder, pool) => {
const unpacked1 = exports.unpack(cs1);
const unpacked2 = exports.unpack(cs2);
const len1 = unpacked1.oldLen;
@@ -2255,22 +1808,21 @@ exports.follow = (cs1, cs2, reverseInsertOrder, pool) => {
assert(len1 === len2, 'mismatched follow - cannot transform cs1 on top of cs2');
const chars1 = exports.stringIterator(unpacked1.charBank);
const chars2 = exports.stringIterator(unpacked2.charBank);
-
const oldLen = unpacked1.newLen;
let oldPos = 0;
let newLen = 0;
-
const hasInsertFirst = exports.attributeTester(['insertorder', 'first'], pool);
-
const newOps = applyZip(unpacked1.ops, unpacked2.ops, (op1, op2) => {
const opOut = new Op();
if (op1.opcode === '+' || op2.opcode === '+') {
let whichToDo;
if (op2.opcode !== '+') {
whichToDo = 1;
- } else if (op1.opcode !== '+') {
+ }
+ else if (op1.opcode !== '+') {
whichToDo = 2;
- } else {
+ }
+ else {
// both +
const firstChar1 = chars1.peek(1);
const firstChar2 = chars2.peek(1);
@@ -2278,17 +1830,22 @@ exports.follow = (cs1, cs2, reverseInsertOrder, pool) => {
const insertFirst2 = hasInsertFirst(op2.attribs);
if (insertFirst1 && !insertFirst2) {
whichToDo = 1;
- } else if (insertFirst2 && !insertFirst1) {
+ }
+ else if (insertFirst2 && !insertFirst1) {
whichToDo = 2;
- } else if (firstChar1 === '\n' && firstChar2 !== '\n') {
+ }
+ else if (firstChar1 === '\n' && firstChar2 !== '\n') {
// insert string that doesn't start with a newline first so as not to break up lines
whichToDo = 2;
- } else if (firstChar1 !== '\n' && firstChar2 === '\n') {
+ }
+ else if (firstChar1 !== '\n' && firstChar2 === '\n') {
whichToDo = 1;
- } else if (reverseInsertOrder) {
+ }
+ else if (reverseInsertOrder) {
// break symmetry:
whichToDo = 2;
- } else {
+ }
+ else {
whichToDo = 1;
}
}
@@ -2299,32 +1856,38 @@ exports.follow = (cs1, cs2, reverseInsertOrder, pool) => {
opOut.chars = op1.chars;
opOut.attribs = '';
op1.opcode = '';
- } else {
+ }
+ else {
// whichToDo == 2
chars2.skip(op2.chars);
copyOp(op2, opOut);
op2.opcode = '';
}
- } else if (op1.opcode === '-') {
+ }
+ else if (op1.opcode === '-') {
if (!op2.opcode) {
op1.opcode = '';
- } else if (op1.chars <= op2.chars) {
+ }
+ else if (op1.chars <= op2.chars) {
op2.chars -= op1.chars;
op2.lines -= op1.lines;
op1.opcode = '';
if (!op2.chars) {
op2.opcode = '';
}
- } else {
+ }
+ else {
op1.chars -= op2.chars;
op1.lines -= op2.lines;
op2.opcode = '';
}
- } else if (op2.opcode === '-') {
+ }
+ else if (op2.opcode === '-') {
copyOp(op2, opOut);
if (!op1.opcode) {
op2.opcode = '';
- } else if (op2.chars <= op1.chars) {
+ }
+ else if (op2.chars <= op1.chars) {
// delete part or all of a keep
op1.chars -= op2.chars;
op1.lines -= op2.lines;
@@ -2332,7 +1895,8 @@ exports.follow = (cs1, cs2, reverseInsertOrder, pool) => {
if (!op1.chars) {
op1.opcode = '';
}
- } else {
+ }
+ else {
// delete all of a keep, and keep going
opOut.lines = op1.lines;
opOut.chars = op1.chars;
@@ -2340,15 +1904,18 @@ exports.follow = (cs1, cs2, reverseInsertOrder, pool) => {
op2.chars -= op1.chars;
op1.opcode = '';
}
- } else if (!op1.opcode) {
+ }
+ else if (!op1.opcode) {
copyOp(op2, opOut);
op2.opcode = '';
- } else if (!op2.opcode) {
+ }
+ else if (!op2.opcode) {
// @NOTE: Critical bugfix for EPL issue #1625. We do not copy op1 here
// in order to prevent attributes from leaking into result changesets.
// copyOp(op1, opOut);
op1.opcode = '';
- } else {
+ }
+ else {
// both keeps
opOut.opcode = '=';
opOut.attribs = followAttributes(op1.attribs, op2.attribs, pool);
@@ -2361,7 +1928,8 @@ exports.follow = (cs1, cs2, reverseInsertOrder, pool) => {
if (!op2.chars) {
op2.opcode = '';
}
- } else {
+ }
+ else {
opOut.chars = op2.chars;
opOut.lines = op2.lines;
op1.chars -= op2.chars;
@@ -2384,41 +1952,12 @@ exports.follow = (cs1, cs2, reverseInsertOrder, pool) => {
return opOut;
});
newLen += oldLen - oldPos;
-
return exports.pack(oldLen, newLen, newOps, unpacked2.charBank);
};
-
-const followAttributes = (att1, att2, pool) => {
- // The merge of two sets of attribute changes to the same text
- // takes the lexically-earlier value if there are two values
- // for the same key. Otherwise, all key/value changes from
- // both attribute sets are taken. This operation is the "follow",
- // so a set of changes is produced that can be applied to att1
- // to produce the merged set.
- if ((!att2) || (!pool)) return '';
- if (!att1) return att2;
- const atts = new Map();
- att2.replace(/\*([0-9a-z]+)/g, (_, a) => {
- const [key, val] = pool.getAttrib(exports.parseNum(a));
- atts.set(key, val);
- return '';
- });
- att1.replace(/\*([0-9a-z]+)/g, (_, a) => {
- const [key, val] = pool.getAttrib(exports.parseNum(a));
- if (atts.has(key) && val <= atts.get(key)) atts.delete(key);
- return '';
- });
- // we've only removed attributes, so they're already sorted
- const buf = exports.stringAssembler();
- for (const att of atts) {
- buf.append('*');
- buf.append(exports.numToString(pool.putAttrib(att)));
- }
- return buf.toString();
-};
-
-exports.exportedForTestingOnly = {
+export const exportedForTestingOnly = {
TextLinesMutator,
followAttributes,
toSplices,
};
+export { Op };
+export { attribsAttributeValue$0 as attribsAttributeValue };
diff --git a/src/static/js/ace.js b/src/static/js/ace.ts
similarity index 84%
rename from src/static/js/ace.js
rename to src/static/js/ace.ts
index b0a0425702e..e6878c72043 100644
--- a/src/static/js/ace.js
+++ b/src/static/js/ace.ts
@@ -1,49 +1,27 @@
+import * as hooks from "./pluginfw/hooks.js";
+import { makeCSSManager as makeCSSManager$0 } from "./cssmanager.js";
+import * as pluginUtils from "./pluginfw/shared.js";
+import {Ace2EditorInfo, AceDocType} from "../module/Ace2EditorInfo";
+import {clientVars} from "../../node/handler/PadMessageHandler";
+import {CustomWindow} from "../module/CustomWindow";
'use strict';
-/**
- * This code is mostly from the old Etherpad. Please help us to comment this code.
- * This helps other people to understand this code better and helps them to improve it.
- * TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
- */
-
-/**
- * Copyright 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS-IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// requires: top
-// requires: undefined
-
-const hooks = require('./pluginfw/hooks');
-const makeCSSManager = require('./cssmanager').makeCSSManager;
-const pluginUtils = require('./pluginfw/shared');
-
-const debugLog = (...args) => {};
+const makeCSSManager = { makeCSSManager: makeCSSManager$0 }.makeCSSManager;
+const debugLog = (...args) => { };
// The inner and outer iframe's locations are about:blank, so relative URLs are relative to that.
// Firefox and Chrome seem to do what the developer intends if given a relative URL, but Safari
// errors out unless given an absolute URL for a JavaScript-created element.
const absUrl = (url) => new URL(url, window.location.href).href;
-
const eventFired = async (obj, event, cleanups = [], predicate = () => true) => {
if (typeof cleanups === 'function') {
predicate = cleanups;
cleanups = [];
}
- await new Promise((resolve, reject) => {
+ await new Promise((resolve, reject) => {
let cleanup;
const successCb = () => {
- if (!predicate()) return;
+ if (!predicate())
+ return;
debugLog(`Ace2Editor.init() ${event} event on`, obj);
cleanup();
resolve();
@@ -55,7 +33,7 @@ const eventFired = async (obj, event, cleanups = [], predicate = () => true) =>
reject(err);
};
cleanup = () => {
- cleanup = () => {};
+ cleanup = () => { };
obj.removeEventListener(event, successCb);
obj.removeEventListener('error', errorCb);
};
@@ -64,14 +42,13 @@ const eventFired = async (obj, event, cleanups = [], predicate = () => true) =>
obj.addEventListener('error', errorCb);
});
};
-
// Resolves when the frame's document is ready to be mutated. Browsers seem to be quirky about
// iframe ready events so this function throws the kitchen sink at the problem. Maybe one day we'll
// find a concise general solution.
const frameReady = async (frame) => {
// Can't do `const doc = frame.contentDocument;` because Firefox seems to asynchronously replace
// the document object after the frame is first created for some reason. ¯\_(ツ)_/¯
- const doc = () => frame.contentDocument;
+ const doc:AceDocType = () => frame.contentDocument;
const cleanups = [];
try {
await Promise.race([
@@ -81,28 +58,27 @@ const frameReady = async (frame) => {
eventFired(doc(), 'DOMContentLoaded', cleanups),
eventFired(doc(), 'readystatechange', cleanups, () => doc.readyState === 'complete'),
]);
- } finally {
- for (const cleanup of cleanups) cleanup();
+ }
+ finally {
+ for (const cleanup of cleanups)
+ cleanup();
}
};
-
const Ace2Editor = function () {
- let info = {editor: this};
+ let info:Ace2EditorInfo = { editor: this };
let loaded = false;
-
let actionsPendingInit = [];
-
const pendingInit = (func) => function (...args) {
const action = () => func.apply(this, args);
- if (loaded) return action();
+ if (loaded)
+ return action();
actionsPendingInit.push(action);
};
-
const doActionsPendingInit = () => {
- for (const fn of actionsPendingInit) fn();
+ for (const fn of actionsPendingInit)
+ fn();
actionsPendingInit = [];
};
-
// The following functions (prefixed by 'ace_') are exposed by editor, but
// execution is delayed until init is complete
const aceFunctionsPendingInit = [
@@ -124,7 +100,6 @@ const Ace2Editor = function () {
'execCommand',
'replaceRange',
];
-
for (const fnName of aceFunctionsPendingInit) {
// Note: info[`ace_${fnName}`] does not exist yet, so it can't be passed directly to
// pendingInit(). A simple wrapper is used to defer the info[`ace_${fnName}`] lookup until
@@ -133,12 +108,9 @@ const Ace2Editor = function () {
info[`ace_${fnName}`].apply(this, args);
});
}
-
this.exportText = () => loaded ? info.ace_exportText() : '(awaiting init)\n';
-
this.getInInternationalComposition =
() => loaded ? info.ace_getInInternationalComposition() : null;
-
// prepareUserChangeset:
// Returns null if no new changes or ACE not ready. Otherwise, bundles up all user changes
// to the latest base text into a Changeset, which is returned (as a string if encodeAsString).
@@ -148,7 +120,6 @@ const Ace2Editor = function () {
// prepareUserChangeset will return an updated changeset that takes into account the latest user
// changes, and modify the changeset to be applied by applyPreparedChangesetToBase accordingly.
this.prepareUserChangeset = () => loaded ? info.ace_prepareUserChangeset() : null;
-
const addStyleTagsFor = (doc, files) => {
for (const file of files) {
const link = doc.createElement('link');
@@ -158,17 +129,14 @@ const Ace2Editor = function () {
doc.head.appendChild(link);
}
};
-
this.destroy = pendingInit(() => {
info.ace_dispose();
info.frame.parentNode.removeChild(info.frame);
info = null; // prevent IE 6 closure memory leaks
});
-
this.init = async function (containerId, initialCode) {
debugLog('Ace2Editor.init()');
this.importText(initialCode);
-
const includedCSS = [
`../static/css/iframe_editor.css?v=${clientVars.randomVersionString}`,
`../static/css/pad.css?v=${clientVars.randomVersionString}`,
@@ -177,12 +145,9 @@ const Ace2Editor = function () {
(p) => /\/\//.test(p) ? p : `../static/plugins/${p}`),
`../static/skins/${clientVars.skinName}/pad.css?v=${clientVars.randomVersionString}`,
];
-
const skinVariants = clientVars.skinVariants.split(' ').filter((x) => x !== '');
-
const outerFrame = document.createElement('iframe');
outerFrame.name = 'ace_outer';
- outerFrame.frameBorder = 0; // for IE
outerFrame.title = 'Ether';
// Some browsers do strange things unless the iframe has a src or srcdoc property:
// - Firefox replaces the frame's contentWindow.document object with a different object after
@@ -197,25 +162,20 @@ const Ace2Editor = function () {
info.frame = outerFrame;
document.getElementById(containerId).appendChild(outerFrame);
const outerWindow = outerFrame.contentWindow;
-
debugLog('Ace2Editor.init() waiting for outer frame');
await frameReady(outerFrame);
debugLog('Ace2Editor.init() outer frame ready');
-
// Firefox might replace the outerWindow.document object after iframe creation so this variable
// is assigned after the Window's load event.
const outerDocument = outerWindow.document;
-
// tag
outerDocument.documentElement.classList.add('outer-editor', 'outerdoc', ...skinVariants);
-
// tag
addStyleTagsFor(outerDocument, includedCSS);
const outerStyle = outerDocument.createElement('style');
outerStyle.type = 'text/css';
outerStyle.title = 'dynamicsyntax';
outerDocument.head.appendChild(outerStyle);
-
// tag
outerDocument.body.id = 'outerdocbody';
outerDocument.body.classList.add('outerdocbody', ...pluginUtils.clientPluginNames());
@@ -231,30 +191,24 @@ const Ace2Editor = function () {
lineMetricsDiv.id = 'linemetricsdiv';
lineMetricsDiv.appendChild(outerDocument.createTextNode('x'));
outerDocument.body.appendChild(lineMetricsDiv);
-
const innerFrame = outerDocument.createElement('iframe');
innerFrame.name = 'ace_inner';
innerFrame.title = 'pad';
innerFrame.scrolling = 'no';
- innerFrame.frameBorder = 0;
- innerFrame.allowTransparency = true; // for IE
+ innerFrame.frameBorder = String(0);
// The iframe MUST have a src or srcdoc property to avoid browser quirks. See the comment above
// outerFrame.srcdoc.
innerFrame.src = 'empty.html';
outerDocument.body.insertBefore(innerFrame, outerDocument.body.firstChild);
- const innerWindow = innerFrame.contentWindow;
-
+ const innerWindow = innerFrame.contentWindow as unknown as CustomWindow;
debugLog('Ace2Editor.init() waiting for inner frame');
await frameReady(innerFrame);
debugLog('Ace2Editor.init() inner frame ready');
-
// Firefox might replace the innerWindow.document object after iframe creation so this variable
// is assigned after the Window's load event.
const innerDocument = innerWindow.document;
-
// tag
innerDocument.documentElement.classList.add('inner-editor', ...skinVariants);
-
// tag
addStyleTagsFor(innerDocument, includedCSS);
const requireKernel = innerDocument.createElement('script');
@@ -267,7 +221,7 @@ const Ace2Editor = function () {
const script = innerDocument.createElement('script');
script.type = 'text/javascript';
script.src = absUrl(`../javascripts/lib/ep_etherpad-lite/static/js/${module}.js` +
- `?callback=require.define&v=${clientVars.randomVersionString}`);
+ `?callback=require.define&v=${clientVars.randomVersionString}`);
innerDocument.head.appendChild(script);
}
const innerStyle = innerDocument.createElement('style');
@@ -275,16 +229,13 @@ const Ace2Editor = function () {
innerStyle.title = 'dynamicsyntax';
innerDocument.head.appendChild(innerStyle);
const headLines = [];
- hooks.callAll('aceInitInnerdocbodyHead', {iframeHTML: headLines});
- innerDocument.head.appendChild(
- innerDocument.createRange().createContextualFragment(headLines.join('\n')));
-
+ hooks.callAll('aceInitInnerdocbodyHead', { iframeHTML: headLines });
+ innerDocument.head.appendChild(innerDocument.createRange().createContextualFragment(headLines.join('\n')));
// tag
innerDocument.body.id = 'innerdocbody';
innerDocument.body.classList.add('innerdocbody');
innerDocument.body.setAttribute('spellcheck', 'false');
innerDocument.body.appendChild(innerDocument.createTextNode('\u00A0')); //
-
debugLog('Ace2Editor.init() waiting for require kernel load');
await eventFired(requireKernel, 'load');
debugLog('Ace2Editor.init() require kernel loaded');
@@ -292,17 +243,13 @@ const Ace2Editor = function () {
require.setRootURI(absUrl('../javascripts/src'));
require.setLibraryURI(absUrl('../javascripts/lib'));
require.setGlobalKeyPath('require');
-
// intentially moved before requiring client_plugins to save a 307
innerWindow.Ace2Inner = require('ep_etherpad-lite/static/js/ace2_inner');
innerWindow.plugins = require('ep_etherpad-lite/static/js/pluginfw/client_plugins');
innerWindow.plugins.adoptPluginsFromAncestorsOf(innerWindow);
-
innerWindow.$ = innerWindow.jQuery = require('ep_etherpad-lite/static/js/rjquery').jQuery;
-
debugLog('Ace2Editor.init() waiting for plugins');
- await new Promise((resolve, reject) => innerWindow.plugins.ensure(
- (err) => err != null ? reject(err) : resolve()));
+ await new Promise((resolve, reject) => innerWindow.plugins.ensure((err) => err != null ? reject(err) : resolve()));
debugLog('Ace2Editor.init() waiting for Ace2Inner.init()');
await innerWindow.Ace2Inner.init(info, {
inner: makeCSSManager(innerStyle.sheet),
@@ -315,5 +262,4 @@ const Ace2Editor = function () {
debugLog('Ace2Editor.init() done');
};
};
-
-exports.Ace2Editor = Ace2Editor;
+export { Ace2Editor };
diff --git a/src/static/module/Ace2EditorInfo.ts b/src/static/module/Ace2EditorInfo.ts
new file mode 100644
index 00000000000..22b81cd7ac7
--- /dev/null
+++ b/src/static/module/Ace2EditorInfo.ts
@@ -0,0 +1,5 @@
+export type Ace2EditorInfo = {
+ [key: string]: any
+}
+
+export type AceDocType = any
diff --git a/src/static/module/CustomWindow.ts b/src/static/module/CustomWindow.ts
new file mode 100644
index 00000000000..40711b98d56
--- /dev/null
+++ b/src/static/module/CustomWindow.ts
@@ -0,0 +1,14 @@
+export type CustomWindow = {
+ require: RequireFunction,
+ Ace2Inner:any,
+ plugins: any,
+ jQuery: any,
+ document: any,
+}
+
+
+export type RequireFunction= {
+ setRootURI: (url: string)=>void,
+ setLibraryURI: (url: string)=>void,
+ setGlobalKeyPath: (path: string)=>void,
+}
diff --git a/src/tsconfig.json b/src/tsconfig.json
index fb9bc8c7ab9..c2b23ed4266 100644
--- a/src/tsconfig.json
+++ b/src/tsconfig.json
@@ -8,7 +8,7 @@
"target": "es6",
"moduleResolution": "node",
"sourceMap": true,
- "outDir": "../dist"
+ "outDir": "dist"
},
"lib": ["es2015"]
}
From 76a6f665a416a5c3a7b03cb1c73c5b23d9d3c8cd Mon Sep 17 00:00:00 2001
From: SamTV12345 <40429738+samtv12345@users.noreply.github.com>
Date: Sun, 25 Jun 2023 00:05:01 +0200
Subject: [PATCH 05/11] Move all files to esm
---
node_modules/ep_etherpad-lite | 1 -
src/node/db/Pad.ts | 30 +-
src/package-lock.json | 1553 +-
src/static/js/AttributeManager.js | 660 +-
src/static/js/AttributeMap.js | 133 +-
src/static/js/Changeset.js | 3306 +--
src/static/js/ChangesetUtils.js | 72 +-
src/static/js/ChatMessage.js | 155 +-
src/static/js/ace2_inner.js | 3527 ----
src/static/js/admin/jquery.autosize.js | 311 +-
src/static/js/admin/minify.json.js | 105 +-
src/static/js/admin/plugins.js | 494 +-
src/static/js/admin/settings.js | 122 +-
src/static/js/attributes.js | 161 +-
src/static/js/basic_error_handler.js | 74 +-
src/static/js/broadcast.js | 856 +-
src/static/js/broadcast_revisions.js | 157 +-
src/static/js/broadcast_slider.js | 619 +-
src/static/js/caretPosition.js | 314 +-
src/static/js/changesettracker.js | 364 +-
src/static/js/chat.js | 513 +-
src/static/js/collab_client.js | 890 +-
src/static/js/colorutils.js | 107 +-
src/static/js/contentcollector.js | 1288 +-
src/static/js/cssmanager.js | 115 +-
src/static/js/domline.js | 488 +-
src/static/js/index.js | 73 +-
src/static/js/l10n.js | 24 +-
src/static/js/linestylefilter.js | 473 +-
src/static/js/pad.js | 1362 +-
src/static/js/pad_automatic_reconnect.js | 259 +-
src/static/js/pad_connectionstatus.js | 130 +-
src/static/js/pad_cookie.js | 96 +-
src/static/js/pad_editbar.js | 873 +-
src/static/js/pad_editor.js | 355 +-
src/static/js/pad_impexp.js | 305 +-
src/static/js/pad_modals.js | 58 +-
src/static/js/pad_savedrevs.js | 34 +-
src/static/js/pad_userlist.js | 1102 +-
src/static/js/pluginfw/client_plugins.js | 102 +-
src/static/js/rjquery.js | 2 +-
src/static/js/scroll.js | 508 +-
src/static/js/security.js | 19 +-
src/static/js/skin_variants.js | 88 +-
src/static/js/skiplist.js | 560 +-
src/static/js/socketio.js | 29 +-
src/static/js/timeslider.js | 268 +-
src/static/js/underscore.js | 3 +-
src/static/js/undomodule.js | 502 +-
src/static/js/vendors/browser.js | 580 +-
src/static/js/vendors/farbtastic.js | 966 +-
src/static/js/vendors/gritter.js | 590 +-
src/static/js/vendors/html10n.js | 1863 +-
src/static/js/vendors/jquery.js | 17111 +++++++---------
src/static/js/vendors/nice-select.js | 379 +-
src/static/skins/colibris/index.js | 7 +-
src/static/skins/colibris/pad.js | 7 +-
src/static/skins/colibris/timeslider.js | 1 -
src/static/skins/no-skin/index.js | 7 +-
src/static/skins/no-skin/pad.js | 7 +-
src/static/skins/no-skin/timeslider.js | 7 +-
src/tests/backend/specs/ExportEtherpad.js | 116 +-
src/tests/backend/specs/ImportEtherpad.js | 367 +-
src/tests/backend/specs/Pad.js | 238 +-
src/tests/backend/specs/SessionStore.js | 436 +-
src/tests/backend/specs/Stream.js | 672 +-
src/tests/backend/specs/api/api.js | 77 +-
.../backend/specs/api/characterEncoding.js | 117 +-
src/tests/backend/specs/api/chat.js | 182 +-
src/tests/backend/specs/api/importexport.js | 475 +-
src/tests/backend/specs/caching_middleware.js | 172 +-
src/tests/backend/specs/chat.js | 287 +-
src/tests/backend/specs/contentcollector.js | 704 +-
src/tests/backend/specs/export.js | 41 +-
src/tests/backend/specs/favicon.js | 166 +-
src/tests/backend/specs/health.js | 98 +-
src/tests/backend/specs/hooks.js | 2235 +-
src/tests/backend/specs/messages.js | 314 +-
src/tests/backend/specs/pad_utils.js | 73 +-
src/tests/backend/specs/pads-with-spaces.js | 36 +-
src/tests/backend/specs/promises.js | 155 +-
src/tests/backend/specs/regression-db.js | 49 +-
src/tests/backend/specs/sanitizePathname.js | 183 +-
src/tests/backend/specs/settings.js | 111 +-
src/tests/backend/specs/socketio.js | 813 +-
src/tests/backend/specs/specialpages.js | 45 +-
src/tests/backend/specs/webaccess.js | 946 +-
87 files changed, 23617 insertions(+), 30656 deletions(-)
delete mode 120000 node_modules/ep_etherpad-lite
delete mode 100644 src/static/js/ace2_inner.js
diff --git a/node_modules/ep_etherpad-lite b/node_modules/ep_etherpad-lite
deleted file mode 120000
index 5cd551cf269..00000000000
--- a/node_modules/ep_etherpad-lite
+++ /dev/null
@@ -1 +0,0 @@
-../src
\ No newline at end of file
diff --git a/src/node/db/Pad.ts b/src/node/db/Pad.ts
index b2bfc877b8c..db5c5a4ca3e 100644
--- a/src/node/db/Pad.ts
+++ b/src/node/db/Pad.ts
@@ -4,7 +4,15 @@
*/
import AttributeMap from '../../static/js/AttributeMap';
-import {applyToAText, copyAText, makeAText} from '../../static/js/Changeset';
+import {
+ applyToAText, checkRep,
+ copyAText, deserializeOps,
+ makeAText,
+ makeSplice,
+ opsFromAText,
+ pack,
+ smartOpAssembler, unpack
+} from '../../static/js/Changeset';
import ChatMessage from '../../static/js/ChatMessage';
import {AttributePool} from '../../static/js/AttributePool';
import {Stream} from '../utils/Stream';
@@ -266,7 +274,7 @@ export class Pad {
(!ins && start > 0 && orig[start - 1] === '\n');
if (!willEndWithNewline) ins += '\n';
if (ndel === 0 && ins.length === 0) return;
- const changeset = Changeset.makeSplice(orig, start, ndel, ins);
+ const changeset = makeSplice(orig, start, ndel, ins);
await this.appendRevision(changeset, authorId);
}
@@ -366,7 +374,7 @@ export class Pad {
if (context.type !== 'text') throw new Error(`unsupported content type: ${context.type}`);
text = cleanText(context.content);
}
- const firstChangeset = Changeset.makeSplice('\n', 0, 0, text);
+ const firstChangeset = makeSplice('\n', 0, 0, text);
await this.appendRevision(firstChangeset, authorId);
}
await aCallAll('padLoad', {pad: this});
@@ -490,8 +498,8 @@ export class Pad {
const oldAText = this.atext;
// based on Changeset.makeSplice
- const assem = Changeset.smartOpAssembler();
- for (const op of Changeset.opsFromAText(oldAText)) assem.append(op);
+ const assem = smartOpAssembler();
+ for (const op of opsFromAText(oldAText)) assem.append(op);
assem.endDocument();
// although we have instantiated the dstPad with '\n', an additional '\n' is
@@ -503,7 +511,7 @@ export class Pad {
// create a changeset that removes the previous text and add the newText with
// all atributes present on the source pad
- const changeset = Changeset.pack(oldLength, newLength, assem.toString(), newText);
+ const changeset = pack(oldLength, newLength, assem.toString(), newText);
dstPad.appendRevision(changeset, authorId);
await aCallAll('padCopy', {
@@ -677,7 +685,7 @@ export class Pad {
}
})
.batch(100).buffer(99);
- let atext = Changeset.makeAText('\n');
+ let atext = makeAText('\n');
for await (const [r, changeset, authorId, timestamp, isKeyRev, keyAText] of revs) {
try {
assert(authorId != null);
@@ -688,10 +696,10 @@ export class Pad {
assert(timestamp > 0);
assert(changeset != null);
assert.equal(typeof changeset, 'string');
- Changeset.checkRep(changeset);
- const unpacked = Changeset.unpack(changeset);
+ checkRep(changeset);
+ const unpacked = unpack(changeset);
let text = atext.text;
- for (const op of Changeset.deserializeOps(unpacked.ops)) {
+ for (const op of deserializeOps(unpacked.ops)) {
if (['=', '-'].includes(op.opcode)) {
assert(text.length >= op.chars);
const consumed = text.slice(0, op.chars);
@@ -702,7 +710,7 @@ export class Pad {
}
assert.equal(op.attribs, AttributeMap.fromString(op.attribs, pool).toString());
}
- atext = Changeset.applyToAText(changeset, atext, pool);
+ atext = applyToAText(changeset, atext, pool);
if (isKeyRev) assert.deepEqual(keyAText, atext);
} catch (err) {
err.message = `(pad ${this.id} revision ${r}) ${err.message}`;
diff --git a/src/package-lock.json b/src/package-lock.json
index 618ce284a97..47345ad47bc 100644
--- a/src/package-lock.json
+++ b/src/package-lock.json
@@ -4626,15 +4626,17 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/abbrev": {
"version": "1.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/agent-base": {
"version": "4.3.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"es6-promisify": "^5.0.0"
},
@@ -4644,9 +4646,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/agentkeepalive": {
"version": "3.5.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"humanize-ms": "^1.2.1"
},
@@ -4656,27 +4659,30 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ansi-align": {
"version": "2.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"string-width": "^2.0.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ansi-regex": {
"version": "2.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ansi-styles": {
"version": "3.2.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"color-convert": "^1.9.0"
},
@@ -4686,33 +4692,38 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ansicolors": {
"version": "0.3.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ansistyles": {
"version": "0.1.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/aproba": {
"version": "2.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/archy": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/are-we-there-yet": {
"version": "1.1.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"delegates": "^1.0.0",
"readable-stream": "^2.0.6"
@@ -4720,9 +4731,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream": {
"version": "2.3.6",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -4735,78 +4747,89 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/are-we-there-yet/node_modules/string_decoder": {
"version": "1.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/asap": {
"version": "2.0.6",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/asn1": {
"version": "0.2.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"safer-buffer": "~2.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/assert-plus": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.8"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/asynckit": {
"version": "0.4.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/aws-sign2": {
"version": "0.7.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "Apache-2.0",
+ "peer": true,
"engines": {
"node": "*"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/aws4": {
"version": "1.8.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/balanced-match": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/bcrypt-pbkdf": {
"version": "1.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "BSD-3-Clause",
+ "optional": true,
+ "peer": true,
"dependencies": {
"tweetnacl": "^0.14.3"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/bin-links": {
"version": "1.1.8",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "Artistic-2.0",
+ "peer": true,
"dependencies": {
"bluebird": "^3.5.3",
"cmd-shim": "^3.0.0",
@@ -4818,15 +4841,17 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/bluebird": {
"version": "3.5.5",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/boxen": {
"version": "1.3.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ansi-align": "^2.0.0",
"camelcase": "^4.0.0",
@@ -4842,9 +4867,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/brace-expansion": {
"version": "1.1.11",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -4852,39 +4878,44 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/buffer-from": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/builtins": {
"version": "1.0.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/byline": {
"version": "5.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/byte-size": {
"version": "5.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cacache": {
"version": "12.0.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"bluebird": "^3.5.5",
"chownr": "^1.1.1",
@@ -4905,39 +4936,44 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/call-limit": {
"version": "1.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/camelcase": {
"version": "4.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/capture-stack-trace": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/caseless": {
"version": "0.12.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "Apache-2.0"
+ "license": "Apache-2.0",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/chalk": {
"version": "2.4.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -4949,21 +4985,24 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/chownr": {
"version": "1.1.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ci-info": {
"version": "2.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cidr-regex": {
"version": "2.0.10",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"ip-regex": "^2.1.0"
},
@@ -4973,18 +5012,20 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cli-boxes": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cli-columns": {
"version": "3.1.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"string-width": "^2.0.0",
"strip-ansi": "^3.0.1"
@@ -4995,9 +5036,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cli-table3": {
"version": "0.5.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"object-assign": "^4.1.0",
"string-width": "^2.1.1"
@@ -5011,9 +5053,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cliui": {
"version": "5.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"string-width": "^3.1.0",
"strip-ansi": "^5.2.0",
@@ -5022,27 +5065,30 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cliui/node_modules/ansi-regex": {
"version": "4.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cliui/node_modules/is-fullwidth-code-point": {
"version": "2.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cliui/node_modules/string-width": {
"version": "3.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
@@ -5054,9 +5100,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cliui/node_modules/strip-ansi": {
"version": "5.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ansi-regex": "^4.1.0"
},
@@ -5066,18 +5113,20 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/clone": {
"version": "1.0.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.8"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cmd-shim": {
"version": "3.0.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"graceful-fs": "^4.1.2",
"mkdirp": "~0.5.0"
@@ -5085,42 +5134,48 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/code-point-at": {
"version": "1.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/color-convert": {
"version": "1.9.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"color-name": "^1.1.1"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/color-name": {
"version": "1.1.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/colors": {
"version": "1.3.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "optional": true,
+ "peer": true,
"engines": {
"node": ">=0.1.90"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/columnify": {
"version": "1.5.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"strip-ansi": "^3.0.0",
"wcwidth": "^1.0.0"
@@ -5128,9 +5183,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/combined-stream": {
"version": "1.0.6",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"delayed-stream": "~1.0.0"
},
@@ -5140,18 +5196,20 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/concat-map": {
"version": "0.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/concat-stream": {
"version": "1.6.2",
+ "dev": true,
"engines": [
"node >= 0.8"
],
- "extraneous": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
@@ -5161,9 +5219,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream": {
"version": "2.3.6",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -5176,17 +5235,19 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/concat-stream/node_modules/string_decoder": {
"version": "1.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/config-chain": {
"version": "1.1.12",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
+ "peer": true,
"dependencies": {
"ini": "^1.3.4",
"proto-list": "~1.2.1"
@@ -5194,9 +5255,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/configstore": {
"version": "3.1.5",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"dot-prop": "^4.2.1",
"graceful-fs": "^4.1.2",
@@ -5211,15 +5273,17 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/console-control-strings": {
"version": "1.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/copy-concurrently": {
"version": "1.0.5",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"aproba": "^1.1.1",
"fs-write-stream-atomic": "^1.0.8",
@@ -5231,27 +5295,31 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/copy-concurrently/node_modules/aproba": {
"version": "1.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/copy-concurrently/node_modules/iferr": {
"version": "0.1.5",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/core-util-is": {
"version": "1.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/create-error-class": {
"version": "3.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"capture-stack-trace": "^1.0.0"
},
@@ -5261,9 +5329,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cross-spawn": {
"version": "5.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"lru-cache": "^4.0.1",
"shebang-command": "^1.2.0",
@@ -5272,9 +5341,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cross-spawn/node_modules/lru-cache": {
"version": "4.1.5",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"pseudomap": "^1.0.2",
"yallist": "^2.1.2"
@@ -5282,29 +5352,33 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cross-spawn/node_modules/yallist": {
"version": "2.1.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/crypto-random-string": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cyclist": {
"version": "0.2.2",
- "extraneous": true,
- "inBundle": true
+ "dev": true,
+ "inBundle": true,
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/dashdash": {
"version": "1.14.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"assert-plus": "^1.0.0"
},
@@ -5314,69 +5388,77 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/debug": {
"version": "3.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/debug/node_modules/ms": {
"version": "2.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/debuglog": {
"version": "1.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": "*"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/decamelize": {
"version": "1.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/decode-uri-component": {
"version": "0.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/deep-extend": {
"version": "0.6.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4.0.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/defaults": {
"version": "1.0.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"clone": "^1.0.2"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/define-properties": {
"version": "1.1.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"object-keys": "^1.0.12"
},
@@ -5386,42 +5468,47 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/delayed-stream": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/delegates": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/detect-indent": {
"version": "5.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/detect-newline": {
"version": "2.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/dezalgo": {
"version": "1.0.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"asap": "^2.0.0",
"wrappy": "1"
@@ -5429,9 +5516,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/dot-prop": {
"version": "4.2.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"is-obj": "^1.0.0"
},
@@ -5441,24 +5529,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/dotenv": {
"version": "5.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "BSD-2-Clause",
+ "peer": true,
"engines": {
"node": ">=4.6.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/duplexer3": {
"version": "0.1.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "BSD-3-Clause"
+ "license": "BSD-3-Clause",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/duplexify": {
"version": "3.6.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"end-of-stream": "^1.0.0",
"inherits": "^2.0.1",
@@ -5468,9 +5559,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/duplexify/node_modules/readable-stream": {
"version": "2.3.6",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -5483,18 +5575,21 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/duplexify/node_modules/string_decoder": {
"version": "1.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ecc-jsbn": {
"version": "0.1.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "optional": true,
+ "peer": true,
"dependencies": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
@@ -5502,54 +5597,61 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/editor": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/emoji-regex": {
"version": "7.0.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/encoding": {
"version": "0.1.12",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"iconv-lite": "~0.4.13"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/end-of-stream": {
"version": "1.4.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"once": "^1.4.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/env-paths": {
"version": "2.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/err-code": {
"version": "1.1.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/errno": {
"version": "0.1.7",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"prr": "~1.0.1"
},
@@ -5559,9 +5661,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/es-abstract": {
"version": "1.12.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"es-to-primitive": "^1.1.1",
"function-bind": "^1.1.1",
@@ -5575,9 +5678,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/es-to-primitive": {
"version": "1.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"is-callable": "^1.1.4",
"is-date-object": "^1.0.1",
@@ -5589,33 +5693,37 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/es6-promise": {
"version": "4.2.8",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/es6-promisify": {
"version": "5.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"es6-promise": "^4.0.3"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/escape-string-regexp": {
"version": "1.0.5",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/execa": {
"version": "0.7.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"cross-spawn": "^5.0.1",
"get-stream": "^3.0.0",
@@ -5631,51 +5739,58 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/execa/node_modules/get-stream": {
"version": "3.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/extend": {
"version": "3.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/extsprintf": {
"version": "1.3.0",
+ "dev": true,
"engines": [
"node >=0.6.0"
],
- "extraneous": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fast-json-stable-stringify": {
"version": "2.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/figgy-pudding": {
"version": "3.5.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/find-npm-prefix": {
"version": "1.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/flush-write-stream": {
"version": "1.0.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"inherits": "^2.0.1",
"readable-stream": "^2.0.4"
@@ -5683,9 +5798,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream": {
"version": "2.3.6",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -5698,27 +5814,30 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/flush-write-stream/node_modules/string_decoder": {
"version": "1.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/forever-agent": {
"version": "0.6.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "Apache-2.0",
+ "peer": true,
"engines": {
"node": "*"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/form-data": {
"version": "2.3.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "1.0.6",
@@ -5730,9 +5849,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/from2": {
"version": "2.3.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"inherits": "^2.0.1",
"readable-stream": "^2.0.0"
@@ -5740,9 +5860,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/from2/node_modules/readable-stream": {
"version": "2.3.6",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -5755,27 +5876,30 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/from2/node_modules/string_decoder": {
"version": "1.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-minipass": {
"version": "1.2.7",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"minipass": "^2.6.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-minipass/node_modules/minipass": {
"version": "2.9.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
@@ -5783,9 +5907,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-vacuum": {
"version": "1.2.10",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"graceful-fs": "^4.1.2",
"path-is-inside": "^1.0.1",
@@ -5794,9 +5919,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-write-stream-atomic": {
"version": "1.0.10",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"graceful-fs": "^4.1.2",
"iferr": "^0.1.5",
@@ -5806,15 +5932,17 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/iferr": {
"version": "0.1.5",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream": {
"version": "2.3.6",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -5827,30 +5955,34 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/string_decoder": {
"version": "1.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs.realpath": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/function-bind": {
"version": "1.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gauge": {
"version": "2.7.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"aproba": "^1.0.3",
"console-control-strings": "^1.0.0",
@@ -5864,15 +5996,17 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gauge/node_modules/aproba": {
"version": "1.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gauge/node_modules/string-width": {
"version": "1.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -5884,15 +6018,17 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/genfun": {
"version": "5.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gentle-fs": {
"version": "2.3.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "Artistic-2.0",
+ "peer": true,
"dependencies": {
"aproba": "^1.1.2",
"chownr": "^1.1.2",
@@ -5909,30 +6045,34 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gentle-fs/node_modules/aproba": {
"version": "1.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gentle-fs/node_modules/iferr": {
"version": "0.1.5",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/get-caller-file": {
"version": "2.0.5",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/get-stream": {
"version": "4.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"pump": "^3.0.0"
},
@@ -5942,18 +6082,20 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/getpass": {
"version": "0.1.7",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"assert-plus": "^1.0.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/glob": {
"version": "7.1.6",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -5971,9 +6113,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/global-dirs": {
"version": "0.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ini": "^1.3.4"
},
@@ -5983,9 +6126,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/got": {
"version": "6.7.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"create-error-class": "^3.0.0",
"duplexer3": "^0.1.4",
@@ -6005,24 +6149,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/got/node_modules/get-stream": {
"version": "3.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/graceful-fs": {
"version": "4.2.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/har-schema": {
"version": "2.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"engines": {
"node": ">=4"
}
@@ -6030,9 +6177,10 @@
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/har-validator": {
"version": "5.1.5",
"deprecated": "this library is no longer supported",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ajv": "^6.12.3",
"har-schema": "^2.0.0"
@@ -6043,9 +6191,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/har-validator/node_modules/ajv": {
"version": "6.12.6",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -6059,21 +6208,24 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/har-validator/node_modules/fast-deep-equal": {
"version": "3.1.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/har-validator/node_modules/json-schema-traverse": {
"version": "0.4.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/has": {
"version": "1.0.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"function-bind": "^1.1.1"
},
@@ -6083,45 +6235,51 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/has-flag": {
"version": "3.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/has-symbols": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">= 0.4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/has-unicode": {
"version": "2.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/hosted-git-info": {
"version": "2.8.9",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/http-cache-semantics": {
"version": "3.8.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "BSD-2-Clause"
+ "license": "BSD-2-Clause",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/http-proxy-agent": {
"version": "2.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"agent-base": "4",
"debug": "3.1.0"
@@ -6132,9 +6290,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/http-signature": {
"version": "1.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
@@ -6147,9 +6306,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/https-proxy-agent": {
"version": "2.2.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"agent-base": "^4.3.0",
"debug": "^3.1.0"
@@ -6160,18 +6320,20 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/humanize-ms": {
"version": "1.2.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ms": "^2.0.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/iconv-lite": {
"version": "0.4.23",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
@@ -6181,51 +6343,57 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/iferr": {
"version": "1.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ignore-walk": {
"version": "3.0.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"minimatch": "^3.0.4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/import-lazy": {
"version": "2.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/imurmurhash": {
"version": "0.1.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.8.19"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/infer-owner": {
"version": "1.0.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/inflight": {
"version": "1.0.6",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
@@ -6233,21 +6401,24 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/inherits": {
"version": "2.0.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ini": {
"version": "1.3.8",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/init-package-json": {
"version": "1.10.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"glob": "^7.1.1",
"npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0",
@@ -6261,33 +6432,37 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ip": {
"version": "1.1.5",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ip-regex": {
"version": "2.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-callable": {
"version": "1.1.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">= 0.4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-ci": {
"version": "1.2.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ci-info": "^1.5.0"
},
@@ -6297,15 +6472,17 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-ci/node_modules/ci-info": {
"version": "1.6.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-cidr": {
"version": "3.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"cidr-regex": "^2.0.10"
},
@@ -6315,18 +6492,20 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-date-object": {
"version": "1.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">= 0.4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-fullwidth-code-point": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"number-is-nan": "^1.0.0"
},
@@ -6336,9 +6515,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-installed-globally": {
"version": "0.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"global-dirs": "^0.1.0",
"is-path-inside": "^1.0.0"
@@ -6349,27 +6529,30 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-npm": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-obj": {
"version": "1.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-path-inside": {
"version": "1.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"path-is-inside": "^1.0.1"
},
@@ -6379,18 +6562,20 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-redirect": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-regex": {
"version": "1.0.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"has": "^1.0.1"
},
@@ -6400,27 +6585,30 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-retry-allowed": {
"version": "1.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-stream": {
"version": "1.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-symbol": {
"version": "1.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"has-symbols": "^1.0.0"
},
@@ -6430,65 +6618,76 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-typedarray": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/isarray": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/isexe": {
"version": "2.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/isstream": {
"version": "0.1.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/jsbn": {
"version": "0.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "optional": true,
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/json-parse-better-errors": {
"version": "1.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/json-schema": {
"version": "0.2.3",
- "extraneous": true,
- "inBundle": true
+ "dev": true,
+ "inBundle": true,
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/json-stringify-safe": {
"version": "5.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/jsonparse": {
"version": "1.3.1",
+ "dev": true,
"engines": [
"node >= 0.2.0"
],
- "extraneous": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/JSONStream": {
"version": "1.3.5",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "(MIT OR Apache-2.0)",
+ "peer": true,
"dependencies": {
"jsonparse": "^1.2.0",
"through": ">=2.2.7 <3"
@@ -6502,12 +6701,13 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/jsprim": {
"version": "1.4.1",
+ "dev": true,
"engines": [
"node >=0.6.0"
],
- "extraneous": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
@@ -6517,9 +6717,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/latest-version": {
"version": "3.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"package-json": "^4.0.0"
},
@@ -6529,15 +6730,17 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lazy-property": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libcipm": {
"version": "4.0.8",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"bin-links": "^1.1.2",
"bluebird": "^3.5.1",
@@ -6558,9 +6761,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpm": {
"version": "3.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"bin-links": "^1.1.2",
"bluebird": "^3.5.3",
@@ -6586,9 +6790,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmaccess": {
"version": "3.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"aproba": "^2.0.0",
"get-stream": "^4.0.0",
@@ -6598,9 +6803,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig": {
"version": "1.2.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"figgy-pudding": "^3.5.1",
"find-up": "^3.0.0",
@@ -6609,9 +6815,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig/node_modules/find-up": {
"version": "3.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"locate-path": "^3.0.0"
},
@@ -6621,9 +6828,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig/node_modules/locate-path": {
"version": "3.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"p-locate": "^3.0.0",
"path-exists": "^3.0.0"
@@ -6634,9 +6842,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig/node_modules/p-limit": {
"version": "2.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"p-try": "^2.0.0"
},
@@ -6646,9 +6855,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig/node_modules/p-locate": {
"version": "3.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"p-limit": "^2.0.0"
},
@@ -6658,18 +6868,20 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig/node_modules/p-try": {
"version": "2.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmhook": {
"version": "5.0.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"aproba": "^2.0.0",
"figgy-pudding": "^3.4.1",
@@ -6679,9 +6891,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmorg": {
"version": "1.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"aproba": "^2.0.0",
"figgy-pudding": "^3.4.1",
@@ -6691,9 +6904,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmpublish": {
"version": "1.1.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"aproba": "^2.0.0",
"figgy-pudding": "^3.5.1",
@@ -6708,9 +6922,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmsearch": {
"version": "2.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"figgy-pudding": "^3.5.1",
"get-stream": "^4.0.0",
@@ -6719,9 +6934,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmteam": {
"version": "1.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"aproba": "^2.0.0",
"figgy-pudding": "^3.4.1",
@@ -6731,9 +6947,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpx": {
"version": "10.2.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"dotenv": "^5.0.1",
"npm-package-arg": "^6.0.0",
@@ -6750,9 +6967,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lock-verify": {
"version": "2.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"npm-package-arg": "^6.1.0",
"semver": "^5.4.1"
@@ -6760,24 +6978,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lockfile": {
"version": "1.0.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"signal-exit": "^3.0.2"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._baseindexof": {
"version": "3.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._baseuniq": {
"version": "4.6.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"lodash._createset": "~4.0.0",
"lodash._root": "~3.0.0"
@@ -6785,96 +7006,110 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._bindcallback": {
"version": "3.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._cacheindexof": {
"version": "3.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._createcache": {
"version": "3.1.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"lodash._getnative": "^3.0.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._createset": {
"version": "4.0.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._getnative": {
"version": "3.9.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._root": {
"version": "3.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.clonedeep": {
"version": "4.5.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.restparam": {
"version": "3.6.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.union": {
"version": "4.6.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.uniq": {
"version": "4.5.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.without": {
"version": "4.4.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lowercase-keys": {
"version": "1.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lru-cache": {
"version": "5.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"yallist": "^3.0.2"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/make-dir": {
"version": "1.3.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"pify": "^3.0.0"
},
@@ -6884,9 +7119,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/make-fetch-happen": {
"version": "5.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"agentkeepalive": "^3.4.1",
"cacache": "^12.0.0",
@@ -6903,24 +7139,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/meant": {
"version": "1.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mime-db": {
"version": "1.35.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">= 0.6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mime-types": {
"version": "2.1.19",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"mime-db": "~1.35.0"
},
@@ -6930,9 +7169,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/minimatch": {
"version": "3.0.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"brace-expansion": "^1.1.7"
},
@@ -6942,24 +7182,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/minimist": {
"version": "1.2.5",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/minizlib": {
"version": "1.3.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"minipass": "^2.9.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/minizlib/node_modules/minipass": {
"version": "2.9.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
@@ -6967,9 +7210,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mississippi": {
"version": "3.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"concat-stream": "^1.5.0",
"duplexify": "^3.4.2",
@@ -6988,9 +7232,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mkdirp": {
"version": "0.5.5",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"minimist": "^1.2.5"
},
@@ -7000,15 +7245,17 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mkdirp/node_modules/minimist": {
"version": "1.2.5",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/move-concurrently": {
"version": "1.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"aproba": "^1.1.1",
"copy-concurrently": "^1.0.0",
@@ -7020,27 +7267,31 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/move-concurrently/node_modules/aproba": {
"version": "1.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ms": {
"version": "2.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mute-stream": {
"version": "0.0.7",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/node-fetch-npm": {
"version": "2.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"encoding": "^0.1.11",
"json-parse-better-errors": "^1.0.0",
@@ -7052,9 +7303,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/node-gyp": {
"version": "5.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"env-paths": "^2.2.0",
"glob": "^7.1.4",
@@ -7077,9 +7329,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/nopt": {
"version": "4.0.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"abbrev": "1",
"osenv": "^0.1.4"
@@ -7090,9 +7343,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/normalize-package-data": {
"version": "2.5.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"hosted-git-info": "^2.1.4",
"resolve": "^1.10.0",
@@ -7102,18 +7356,20 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve": {
"version": "1.10.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"path-parse": "^1.0.6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-audit-report": {
"version": "1.3.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"cli-table3": "^0.5.0",
"console-control-strings": "^1.1.0"
@@ -7121,33 +7377,37 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-bundled": {
"version": "1.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"npm-normalize-package-bin": "^1.0.1"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-cache-filename": {
"version": "1.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-install-checks": {
"version": "3.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"semver": "^2.3.0 || 3.x || 4 || 5"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-lifecycle": {
"version": "3.1.5",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "Artistic-2.0",
+ "peer": true,
"dependencies": {
"byline": "^5.0.0",
"graceful-fs": "^4.1.15",
@@ -7161,21 +7421,24 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-logical-tree": {
"version": "1.2.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-normalize-package-bin": {
"version": "1.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-package-arg": {
"version": "6.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"hosted-git-info": "^2.7.1",
"osenv": "^0.1.5",
@@ -7185,9 +7448,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-packlist": {
"version": "1.4.8",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"ignore-walk": "^3.0.1",
"npm-bundled": "^1.0.1",
@@ -7196,9 +7460,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-pick-manifest": {
"version": "3.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"figgy-pudding": "^3.5.1",
"npm-package-arg": "^6.0.0",
@@ -7207,9 +7472,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-profile": {
"version": "4.0.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"aproba": "^1.1.2 || 2",
"figgy-pudding": "^3.4.1",
@@ -7218,9 +7484,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-registry-fetch": {
"version": "4.0.7",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"bluebird": "^3.5.1",
"figgy-pudding": "^3.4.1",
@@ -7233,7 +7500,7 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer": {
"version": "5.2.1",
- "extraneous": true,
+ "dev": true,
"funding": [
{
"type": "github",
@@ -7249,13 +7516,15 @@
}
],
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-run-path": {
"version": "2.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"path-key": "^2.0.0"
},
@@ -7265,15 +7534,17 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-user-validate": {
"version": "1.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "BSD-2-Clause"
+ "license": "BSD-2-Clause",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npmlog": {
"version": "4.1.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"are-we-there-yet": "~1.1.2",
"console-control-strings": "~1.1.0",
@@ -7283,45 +7554,50 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/number-is-nan": {
"version": "1.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/oauth-sign": {
"version": "0.9.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "Apache-2.0",
+ "peer": true,
"engines": {
"node": "*"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/object-assign": {
"version": "4.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/object-keys": {
"version": "1.0.12",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">= 0.4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/object.getownpropertydescriptors": {
"version": "2.0.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"define-properties": "^1.1.2",
"es-abstract": "^1.5.1"
@@ -7332,45 +7608,50 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/once": {
"version": "1.4.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"wrappy": "1"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/opener": {
"version": "1.5.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "(WTFPL OR MIT)",
+ "peer": true,
"bin": {
"opener": "bin/opener-bin.js"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/os-homedir": {
"version": "1.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/os-tmpdir": {
"version": "1.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/osenv": {
"version": "0.1.5",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"os-homedir": "^1.0.0",
"os-tmpdir": "^1.0.0"
@@ -7378,18 +7659,20 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/p-finally": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/package-json": {
"version": "4.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"got": "^6.7.1",
"registry-auth-token": "^3.0.1",
@@ -7402,9 +7685,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pacote": {
"version": "9.5.12",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"bluebird": "^3.5.3",
"cacache": "^12.0.2",
@@ -7440,9 +7724,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pacote/node_modules/minipass": {
"version": "2.9.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
@@ -7450,9 +7735,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/parallel-transform": {
"version": "1.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"cyclist": "~0.2.2",
"inherits": "^2.0.3",
@@ -7461,9 +7747,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream": {
"version": "2.3.6",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -7476,93 +7763,105 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/parallel-transform/node_modules/string_decoder": {
"version": "1.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/path-exists": {
"version": "3.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/path-is-absolute": {
"version": "1.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/path-is-inside": {
"version": "1.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "(WTFPL OR MIT)"
+ "license": "(WTFPL OR MIT)",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/path-key": {
"version": "2.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/path-parse": {
"version": "1.0.6",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/performance-now": {
"version": "2.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pify": {
"version": "3.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/prepend-http": {
"version": "1.0.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/process-nextick-args": {
"version": "2.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/promise-inflight": {
"version": "1.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/promise-retry": {
"version": "1.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"err-code": "^1.0.0",
"retry": "^0.10.0"
@@ -7573,60 +7872,68 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/promise-retry/node_modules/retry": {
"version": "0.10.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": "*"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/promzard": {
"version": "0.3.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"read": "1"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/proto-list": {
"version": "1.2.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/protoduck": {
"version": "5.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"genfun": "^5.0.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/prr": {
"version": "1.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pseudomap": {
"version": "1.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/psl": {
"version": "1.1.29",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pump": {
"version": "3.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -7634,9 +7941,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pumpify": {
"version": "1.5.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"duplexify": "^3.6.0",
"inherits": "^2.0.3",
@@ -7645,9 +7953,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pumpify/node_modules/pump": {
"version": "2.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -7655,32 +7964,36 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/punycode": {
"version": "1.4.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/qrcode-terminal": {
"version": "0.12.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
+ "peer": true,
"bin": {
"qrcode-terminal": "bin/qrcode-terminal.js"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/qs": {
"version": "6.5.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "BSD-3-Clause",
+ "peer": true,
"engines": {
"node": ">=0.6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/query-string": {
"version": "6.8.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"decode-uri-component": "^0.2.0",
"split-on-first": "^1.0.0",
@@ -7692,15 +8005,17 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/qw": {
"version": "1.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/rc": {
"version": "1.2.8",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
+ "peer": true,
"dependencies": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
@@ -7713,9 +8028,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/read": {
"version": "1.0.7",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"mute-stream": "~0.0.4"
},
@@ -7725,18 +8041,20 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/read-cmd-shim": {
"version": "1.0.5",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"graceful-fs": "^4.1.2"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/read-installed": {
"version": "4.0.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"debuglog": "^1.0.1",
"read-package-json": "^2.0.0",
@@ -7751,9 +8069,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/read-package-json": {
"version": "2.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"glob": "^7.1.1",
"json-parse-better-errors": "^1.0.1",
@@ -7766,9 +8085,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/read-package-tree": {
"version": "5.3.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"read-package-json": "^2.0.0",
"readdir-scoped-modules": "^1.0.0",
@@ -7777,9 +8097,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/readable-stream": {
"version": "3.6.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -7791,9 +8112,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/readdir-scoped-modules": {
"version": "1.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"debuglog": "^1.0.1",
"dezalgo": "^1.0.0",
@@ -7803,9 +8125,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/registry-auth-token": {
"version": "3.4.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"rc": "^1.1.6",
"safe-buffer": "^5.0.1"
@@ -7813,9 +8136,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/registry-url": {
"version": "3.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"rc": "^1.0.1"
},
@@ -7825,9 +8149,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/request": {
"version": "2.88.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"aws-sign2": "~0.7.0",
"aws4": "^1.8.0",
@@ -7856,42 +8181,47 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/require-directory": {
"version": "2.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/require-main-filename": {
"version": "2.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/resolve-from": {
"version": "4.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/retry": {
"version": "0.12.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">= 4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/rimraf": {
"version": "2.7.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"glob": "^7.1.3"
},
@@ -7901,45 +8231,51 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/run-queue": {
"version": "1.0.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"aproba": "^1.1.1"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/run-queue/node_modules/aproba": {
"version": "1.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/safe-buffer": {
"version": "5.1.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/safer-buffer": {
"version": "2.1.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/semver": {
"version": "5.7.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"bin": {
"semver": "bin/semver"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/semver-diff": {
"version": "2.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"semver": "^5.0.3"
},
@@ -7949,24 +8285,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/set-blocking": {
"version": "2.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sha": {
"version": "3.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "(BSD-2-Clause OR MIT)",
+ "peer": true,
"dependencies": {
"graceful-fs": "^4.1.2"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/shebang-command": {
"version": "1.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"shebang-regex": "^1.0.0"
},
@@ -7976,33 +8315,37 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/shebang-regex": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/signal-exit": {
"version": "3.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/slide": {
"version": "1.1.6",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"engines": {
"node": "*"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/smart-buffer": {
"version": "4.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
@@ -8010,9 +8353,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/socks": {
"version": "2.3.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ip": "1.1.5",
"smart-buffer": "^4.1.0"
@@ -8024,9 +8368,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/socks-proxy-agent": {
"version": "4.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"agent-base": "~4.2.1",
"socks": "~2.3.2"
@@ -8037,9 +8382,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/socks-proxy-agent/node_modules/agent-base": {
"version": "4.2.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"es6-promisify": "^5.0.0"
},
@@ -8049,15 +8395,17 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-object": {
"version": "2.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "(WTFPL OR MIT)"
+ "license": "(WTFPL OR MIT)",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-union-stream": {
"version": "2.1.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"from2": "^1.3.0",
"stream-iterate": "^1.1.0"
@@ -8065,9 +8413,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-union-stream/node_modules/from2": {
"version": "1.3.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"inherits": "~2.0.1",
"readable-stream": "~1.1.10"
@@ -8075,15 +8424,17 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-union-stream/node_modules/isarray": {
"version": "0.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream": {
"version": "1.1.14",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
@@ -8093,15 +8444,17 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-union-stream/node_modules/string_decoder": {
"version": "0.10.31",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/spdx-correct": {
"version": "3.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"spdx-expression-parse": "^3.0.0",
"spdx-license-ids": "^3.0.0"
@@ -8109,15 +8462,17 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/spdx-exceptions": {
"version": "2.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "CC-BY-3.0"
+ "license": "CC-BY-3.0",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/spdx-expression-parse": {
"version": "3.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
@@ -8125,24 +8480,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/spdx-license-ids": {
"version": "3.0.5",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "CC0-1.0"
+ "license": "CC0-1.0",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/split-on-first": {
"version": "1.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sshpk": {
"version": "1.14.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
@@ -8167,18 +8525,20 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ssri": {
"version": "6.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"figgy-pudding": "^3.5.1"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stream-each": {
"version": "1.2.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"end-of-stream": "^1.1.0",
"stream-shift": "^1.0.0"
@@ -8186,9 +8546,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stream-iterate": {
"version": "1.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"readable-stream": "^2.1.5",
"stream-shift": "^1.0.0"
@@ -8196,9 +8557,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream": {
"version": "2.3.6",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -8211,48 +8573,54 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stream-iterate/node_modules/string_decoder": {
"version": "1.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stream-shift": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/strict-uri-encode": {
"version": "2.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string_decoder": {
"version": "1.3.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"safe-buffer": "~5.2.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string_decoder/node_modules/safe-buffer": {
"version": "5.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string-width": {
"version": "2.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^4.0.0"
@@ -8263,27 +8631,30 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string-width/node_modules/ansi-regex": {
"version": "3.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string-width/node_modules/is-fullwidth-code-point": {
"version": "2.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string-width/node_modules/strip-ansi": {
"version": "4.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ansi-regex": "^3.0.0"
},
@@ -8293,15 +8664,17 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stringify-package": {
"version": "1.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/strip-ansi": {
"version": "3.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ansi-regex": "^2.0.0"
},
@@ -8311,27 +8684,30 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/strip-eof": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/strip-json-comments": {
"version": "2.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/supports-color": {
"version": "5.4.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"has-flag": "^3.0.0"
},
@@ -8341,9 +8717,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tar": {
"version": "4.4.13",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"chownr": "^1.1.1",
"fs-minipass": "^1.2.5",
@@ -8359,9 +8736,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tar/node_modules/minipass": {
"version": "2.9.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
@@ -8369,9 +8747,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/term-size": {
"version": "1.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"execa": "^0.7.0"
},
@@ -8381,21 +8760,24 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/text-table": {
"version": "0.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/through": {
"version": "2.3.8",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/through2": {
"version": "2.0.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"readable-stream": "^2.1.5",
"xtend": "~4.0.1"
@@ -8403,9 +8785,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/through2/node_modules/readable-stream": {
"version": "2.3.6",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -8418,33 +8801,37 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/through2/node_modules/string_decoder": {
"version": "1.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/timed-out": {
"version": "4.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tiny-relative-date": {
"version": "1.3.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tough-cookie": {
"version": "2.4.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "BSD-3-Clause",
+ "peer": true,
"dependencies": {
"psl": "^1.1.24",
"punycode": "^1.4.1"
@@ -8455,9 +8842,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tunnel-agent": {
"version": "0.6.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"safe-buffer": "^5.0.1"
},
@@ -8467,54 +8855,62 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tweetnacl": {
"version": "0.14.5",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "Unlicense"
+ "license": "Unlicense",
+ "optional": true,
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/typedarray": {
"version": "0.0.6",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/uid-number": {
"version": "0.0.6",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"engines": {
"node": "*"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/umask": {
"version": "1.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/unique-filename": {
"version": "1.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"unique-slug": "^2.0.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/unique-slug": {
"version": "2.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"imurmurhash": "^0.1.4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/unique-string": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"crypto-random-string": "^1.0.0"
},
@@ -8524,27 +8920,30 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/unpipe": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">= 0.8"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/unzip-response": {
"version": "2.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/update-notifier": {
"version": "2.5.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"boxen": "^1.2.1",
"chalk": "^2.0.1",
@@ -8563,27 +8962,30 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/uri-js": {
"version": "4.4.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"punycode": "^2.1.0"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/uri-js/node_modules/punycode": {
"version": "2.1.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/url-parse-lax": {
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"prepend-http": "^1.0.1"
},
@@ -8593,39 +8995,44 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/util-deprecate": {
"version": "1.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/util-extend": {
"version": "1.0.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/util-promisify": {
"version": "2.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"object.getownpropertydescriptors": "^2.0.3"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/uuid": {
"version": "3.3.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"bin": {
"uuid": "bin/uuid"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/validate-npm-package-license": {
"version": "3.0.4",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"spdx-correct": "^3.0.0",
"spdx-expression-parse": "^3.0.0"
@@ -8633,21 +9040,23 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/validate-npm-package-name": {
"version": "3.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"builtins": "^1.0.3"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/verror": {
"version": "1.10.0",
+ "dev": true,
"engines": [
"node >=0.6.0"
],
- "extraneous": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
@@ -8656,18 +9065,20 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wcwidth": {
"version": "1.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"defaults": "^1.0.3"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/which": {
"version": "1.3.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"isexe": "^2.0.0"
},
@@ -8677,24 +9088,27 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/which-module": {
"version": "2.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wide-align": {
"version": "1.1.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"string-width": "^1.0.2"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wide-align/node_modules/string-width": {
"version": "1.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -8706,9 +9120,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/widest-line": {
"version": "2.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"string-width": "^2.1.1"
},
@@ -8718,18 +9133,20 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/worker-farm": {
"version": "1.7.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"errno": "~0.1.7"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrap-ansi": {
"version": "5.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ansi-styles": "^3.2.0",
"string-width": "^3.0.0",
@@ -8741,27 +9158,30 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": {
"version": "4.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": {
"version": "2.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": {
"version": "3.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
@@ -8773,9 +9193,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": {
"version": "5.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ansi-regex": "^4.1.0"
},
@@ -8785,15 +9206,17 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrappy": {
"version": "1.0.2",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/write-file-atomic": {
"version": "2.4.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"graceful-fs": "^4.1.11",
"imurmurhash": "^0.1.4",
@@ -8802,39 +9225,44 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/xdg-basedir": {
"version": "3.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/xtend": {
"version": "4.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/y18n": {
"version": "4.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yallist": {
"version": "3.0.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs": {
"version": "14.2.3",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"cliui": "^5.0.0",
"decamelize": "^1.2.0",
@@ -8851,9 +9279,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs-parser": {
"version": "15.0.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
@@ -8861,27 +9290,30 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs-parser/node_modules/camelcase": {
"version": "5.3.1",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/ansi-regex": {
"version": "4.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/find-up": {
"version": "3.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"locate-path": "^3.0.0"
},
@@ -8891,18 +9323,20 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/is-fullwidth-code-point": {
"version": "2.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/locate-path": {
"version": "3.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"p-locate": "^3.0.0",
"path-exists": "^3.0.0"
@@ -8913,9 +9347,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/p-limit": {
"version": "2.3.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"p-try": "^2.0.0"
},
@@ -8928,9 +9363,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/p-locate": {
"version": "3.0.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"p-limit": "^2.0.0"
},
@@ -8940,18 +9376,20 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/p-try": {
"version": "2.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/string-width": {
"version": "3.1.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
@@ -8963,9 +9401,10 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/strip-ansi": {
"version": "5.2.0",
- "extraneous": true,
+ "dev": true,
"inBundle": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ansi-regex": "^4.1.0"
},
diff --git a/src/static/js/AttributeManager.js b/src/static/js/AttributeManager.js
index f508af64111..5734769f687 100644
--- a/src/static/js/AttributeManager.js
+++ b/src/static/js/AttributeManager.js
@@ -1,23 +1,18 @@
+import AttributeMap from "./AttributeMap.js";
+import * as Changeset from "./Changeset.js";
+import * as ChangesetUtils from "./ChangesetUtils.js";
+import * as attributes from "./attributes.js";
+import * as _ from "./underscore.js";
'use strict';
-
-const AttributeMap = require('./AttributeMap');
-const Changeset = require('./Changeset');
-const ChangesetUtils = require('./ChangesetUtils');
-const attributes = require('./attributes');
-const _ = require('./underscore');
-
const lineMarkerAttribute = 'lmkr';
-
// Some of these attributes are kept for compatibility purposes.
// Not sure if we need all of them
const DEFAULT_LINE_ATTRIBUTES = ['author', 'lmkr', 'insertorder', 'start'];
-
// If one of these attributes are set to the first character of a
// line it is considered as a line attribute marker i.e. attributes
// set on this marker are applied to the whole line.
// The list attribute is only maintained for compatibility reasons
const lineAttributes = [lineMarkerAttribute, 'list'];
-
/*
The Attribute manager builds changesets based on a document
representation for setting and removing range or line-based attributes.
@@ -32,351 +27,318 @@ const lineAttributes = [lineMarkerAttribute, 'list'];
- an Attribute pool `apool`
- a SkipList `lines` containing the text lines of the document.
*/
-
const AttributeManager = function (rep, applyChangesetCallback) {
- this.rep = rep;
- this.applyChangesetCallback = applyChangesetCallback;
- this.author = '';
-
- // If the first char in a line has one of the following attributes
- // it will be considered as a line marker
+ this.rep = rep;
+ this.applyChangesetCallback = applyChangesetCallback;
+ this.author = '';
+ // If the first char in a line has one of the following attributes
+ // it will be considered as a line marker
};
-
AttributeManager.DEFAULT_LINE_ATTRIBUTES = DEFAULT_LINE_ATTRIBUTES;
AttributeManager.lineAttributes = lineAttributes;
-
AttributeManager.prototype = _(AttributeManager.prototype).extend({
-
- applyChangeset(changeset) {
- if (!this.applyChangesetCallback) return changeset;
-
- const cs = changeset.toString();
- if (!Changeset.isIdentity(cs)) {
- this.applyChangesetCallback(cs);
- }
-
- return changeset;
- },
-
- /*
- Sets attributes on a range
- @param start [row, col] tuple pointing to the start of the range
- @param end [row, col] tuple pointing to the end of the range
- @param attribs: an array of attributes
- */
- setAttributesOnRange(start, end, attribs) {
- if (start[0] < 0) throw new RangeError('selection start line number is negative');
- if (start[1] < 0) throw new RangeError('selection start column number is negative');
- if (end[0] < 0) throw new RangeError('selection end line number is negative');
- if (end[1] < 0) throw new RangeError('selection end column number is negative');
- if (start[0] > end[0] || (start[0] === end[0] && start[1] > end[1])) {
- throw new RangeError('selection ends before it starts');
- }
-
- // instead of applying the attributes to the whole range at once, we need to apply them
- // line by line, to be able to disregard the "*" used as line marker. For more details,
- // see https://github.com/ether/etherpad-lite/issues/2772
- let allChangesets;
- for (let row = start[0]; row <= end[0]; row++) {
- const [startCol, endCol] = this._findRowRange(row, start, end);
- const rowChangeset = this._setAttributesOnRangeByLine(row, startCol, endCol, attribs);
-
- // compose changesets of all rows into a single changeset
- // as the range might not be continuous
- // due to the presence of line markers on the rows
- if (allChangesets) {
- allChangesets = Changeset.compose(
- allChangesets.toString(), rowChangeset.toString(), this.rep.apool);
- } else {
- allChangesets = rowChangeset;
- }
- }
-
- return this.applyChangeset(allChangesets);
- },
-
- _findRowRange(row, start, end) {
- if (row < start[0] || row > end[0]) throw new RangeError(`line ${row} not in selection`);
- if (row >= this.rep.lines.length()) throw new RangeError(`selected line ${row} does not exist`);
-
- // Subtract 1 for the end-of-line '\n' (it is never selected).
- const lineLength =
- this.rep.lines.offsetOfIndex(row + 1) - this.rep.lines.offsetOfIndex(row) - 1;
- const markerWidth = this.lineHasMarker(row) ? 1 : 0;
- if (lineLength - markerWidth < 0) throw new Error(`line ${row} has negative length`);
-
- if (start[1] < 0) throw new RangeError('selection starts at negative column');
- const startCol = Math.max(markerWidth, row === start[0] ? start[1] : 0);
- if (startCol > lineLength) throw new RangeError('selection starts after line end');
-
- if (end[1] < 0) throw new RangeError('selection ends at negative column');
- const endCol = Math.max(markerWidth, row === end[0] ? end[1] : lineLength);
- if (endCol > lineLength) throw new RangeError('selection ends after line end');
- if (startCol > endCol) throw new RangeError('selection ends before it starts');
-
- return [startCol, endCol];
- },
-
- /**
- * Sets attributes on a range, by line
- * @param row the row where range is
- * @param startCol column where range starts
- * @param endCol column where range ends (one past the last selected column)
- * @param attribs an array of attributes
- */
- _setAttributesOnRangeByLine(row, startCol, endCol, attribs) {
- const builder = Changeset.builder(this.rep.lines.totalWidth());
- ChangesetUtils.buildKeepToStartOfRange(this.rep, builder, [row, startCol]);
- ChangesetUtils.buildKeepRange(
- this.rep, builder, [row, startCol], [row, endCol], attribs, this.rep.apool);
- return builder;
- },
-
- /*
- Returns if the line already has a line marker
- @param lineNum: the number of the line
- */
- lineHasMarker(lineNum) {
- return lineAttributes.find(
- (attribute) => this.getAttributeOnLine(lineNum, attribute) !== '') !== undefined;
- },
-
- /*
- Gets a specified attribute on a line
- @param lineNum: the number of the line to set the attribute for
- @param attributeKey: the name of the attribute to get, e.g. list
- */
- getAttributeOnLine(lineNum, attributeName) {
- // get `attributeName` attribute of first char of line
- const aline = this.rep.alines[lineNum];
- if (!aline) return '';
- const [op] = Changeset.deserializeOps(aline);
- if (op == null) return '';
- return AttributeMap.fromString(op.attribs, this.rep.apool).get(attributeName) || '';
- },
-
- /*
- Gets all attributes on a line
- @param lineNum: the number of the line to get the attribute for
- */
- getAttributesOnLine(lineNum) {
- // get attributes of first char of line
- const aline = this.rep.alines[lineNum];
- if (!aline) return [];
- const [op] = Changeset.deserializeOps(aline);
- if (op == null) return [];
- return [...attributes.attribsFromString(op.attribs, this.rep.apool)];
- },
-
- /*
- Gets a given attribute on a selection
- @param attributeName
- @param prevChar
- returns true or false if an attribute is visible in range
- */
- getAttributeOnSelection(attributeName, prevChar) {
- const rep = this.rep;
- if (!(rep.selStart && rep.selEnd)) return;
- // If we're looking for the caret attribute not the selection
- // has the user already got a selection or is this purely a caret location?
- const isNotSelection = (rep.selStart[0] === rep.selEnd[0] && rep.selEnd[1] === rep.selStart[1]);
- if (isNotSelection) {
- if (prevChar) {
- // If it's not the start of the line
- if (rep.selStart[1] !== 0) {
- rep.selStart[1]--;
+ applyChangeset(changeset) {
+ if (!this.applyChangesetCallback)
+ return changeset;
+ const cs = changeset.toString();
+ if (!Changeset.isIdentity(cs)) {
+ this.applyChangesetCallback(cs);
}
- }
- }
-
- const withIt = new AttributeMap(rep.apool).set(attributeName, 'true').toString();
- const withItRegex = new RegExp(`${withIt.replace(/\*/g, '\\*')}(\\*|$)`);
- const hasIt = (attribs) => withItRegex.test(attribs);
-
- const rangeHasAttrib = (selStart, selEnd) => {
- // if range is collapsed -> no attribs in range
- if (selStart[1] === selEnd[1] && selStart[0] === selEnd[0]) return false;
-
- if (selStart[0] !== selEnd[0]) { // -> More than one line selected
- // from selStart to the end of the first line
- let hasAttrib = rangeHasAttrib(
- selStart, [selStart[0], rep.lines.atIndex(selStart[0]).text.length]);
-
- // for all lines in between
- for (let n = selStart[0] + 1; n < selEnd[0]; n++) {
- hasAttrib = hasAttrib && rangeHasAttrib([n, 0], [n, rep.lines.atIndex(n).text.length]);
+ return changeset;
+ },
+ /*
+ Sets attributes on a range
+ @param start [row, col] tuple pointing to the start of the range
+ @param end [row, col] tuple pointing to the end of the range
+ @param attribs: an array of attributes
+ */
+ setAttributesOnRange(start, end, attribs) {
+ if (start[0] < 0)
+ throw new RangeError('selection start line number is negative');
+ if (start[1] < 0)
+ throw new RangeError('selection start column number is negative');
+ if (end[0] < 0)
+ throw new RangeError('selection end line number is negative');
+ if (end[1] < 0)
+ throw new RangeError('selection end column number is negative');
+ if (start[0] > end[0] || (start[0] === end[0] && start[1] > end[1])) {
+ throw new RangeError('selection ends before it starts');
}
-
- // for the last, potentially partial, line
- hasAttrib = hasAttrib && rangeHasAttrib([selEnd[0], 0], [selEnd[0], selEnd[1]]);
-
- return hasAttrib;
- }
-
- // Logic tells us we now have a range on a single line
-
- const lineNum = selStart[0];
- const start = selStart[1];
- const end = selEnd[1];
- let hasAttrib = true;
-
- let indexIntoLine = 0;
- for (const op of Changeset.deserializeOps(rep.alines[lineNum])) {
- const opStartInLine = indexIntoLine;
- const opEndInLine = opStartInLine + op.chars;
- if (!hasIt(op.attribs)) {
- // does op overlap selection?
- if (!(opEndInLine <= start || opStartInLine >= end)) {
- // since it's overlapping but hasn't got the attrib -> range hasn't got it
- hasAttrib = false;
- break;
- }
+ // instead of applying the attributes to the whole range at once, we need to apply them
+ // line by line, to be able to disregard the "*" used as line marker. For more details,
+ // see https://github.com/ether/etherpad-lite/issues/2772
+ let allChangesets;
+ for (let row = start[0]; row <= end[0]; row++) {
+ const [startCol, endCol] = this._findRowRange(row, start, end);
+ const rowChangeset = this._setAttributesOnRangeByLine(row, startCol, endCol, attribs);
+ // compose changesets of all rows into a single changeset
+ // as the range might not be continuous
+ // due to the presence of line markers on the rows
+ if (allChangesets) {
+ allChangesets = Changeset.compose(allChangesets.toString(), rowChangeset.toString(), this.rep.apool);
+ }
+ else {
+ allChangesets = rowChangeset;
+ }
}
- indexIntoLine = opEndInLine;
- }
-
- return hasAttrib;
- };
- return rangeHasAttrib(rep.selStart, rep.selEnd);
- },
-
- /*
- Gets all attributes at a position containing line number and column
- @param lineNumber starting with zero
- @param column starting with zero
- returns a list of attributes in the format
- [ ["key","value"], ["key","value"], ... ]
- */
- getAttributesOnPosition(lineNumber, column) {
- // get all attributes of the line
- const aline = this.rep.alines[lineNumber];
-
- if (!aline) {
- return [];
- }
-
- // we need to sum up how much characters each operations take until the wanted position
- let currentPointer = 0;
-
- for (const currentOperation of Changeset.deserializeOps(aline)) {
- currentPointer += currentOperation.chars;
- if (currentPointer <= column) continue;
- return [...attributes.attribsFromString(currentOperation.attribs, this.rep.apool)];
- }
- return [];
- },
-
- /*
- Gets all attributes at caret position
- if the user selected a range, the start of the selection is taken
- returns a list of attributes in the format
- [ ["key","value"], ["key","value"], ... ]
- */
- getAttributesOnCaret() {
- return this.getAttributesOnPosition(this.rep.selStart[0], this.rep.selStart[1]);
- },
-
- /*
- Sets a specified attribute on a line
- @param lineNum: the number of the line to set the attribute for
- @param attributeKey: the name of the attribute to set, e.g. list
- @param attributeValue: an optional parameter to pass to the attribute (e.g. indention level)
-
- */
- setAttributeOnLine(lineNum, attributeName, attributeValue) {
- let loc = [0, 0];
- const builder = Changeset.builder(this.rep.lines.totalWidth());
- const hasMarker = this.lineHasMarker(lineNum);
-
- ChangesetUtils.buildKeepRange(this.rep, builder, loc, (loc = [lineNum, 0]));
-
- if (hasMarker) {
- ChangesetUtils.buildKeepRange(this.rep, builder, loc, (loc = [lineNum, 1]), [
- [attributeName, attributeValue],
- ], this.rep.apool);
- } else {
- // add a line marker
- builder.insert('*', [
- ['author', this.author],
- ['insertorder', 'first'],
- [lineMarkerAttribute, '1'],
- [attributeName, attributeValue],
- ], this.rep.apool);
- }
-
- return this.applyChangeset(builder);
- },
-
- /**
- * Removes a specified attribute on a line
- * @param lineNum the number of the affected line
- * @param attributeName the name of the attribute to remove, e.g. list
- * @param attributeValue if given only attributes with equal value will be removed
- */
- removeAttributeOnLine(lineNum, attributeName, attributeValue) {
- const builder = Changeset.builder(this.rep.lines.totalWidth());
- const hasMarker = this.lineHasMarker(lineNum);
- let found = false;
-
- const attribs = this.getAttributesOnLine(lineNum).map((attrib) => {
- if (attrib[0] === attributeName && (!attributeValue || attrib[0] === attributeValue)) {
- found = true;
- return [attrib[0], ''];
- } else if (attrib[0] === 'author') {
- // update last author to make changes to line attributes on this line
- return [attrib[0], this.author];
- }
- return attrib;
- });
-
- if (!found) {
- return;
- }
-
- ChangesetUtils.buildKeepToStartOfRange(this.rep, builder, [lineNum, 0]);
-
- const countAttribsWithMarker = _.chain(attribs).filter((a) => !!a[1])
- .map((a) => a[0]).difference(DEFAULT_LINE_ATTRIBUTES).size().value();
-
- // if we have marker and any of attributes don't need to have marker. we need delete it
- if (hasMarker && !countAttribsWithMarker) {
- ChangesetUtils.buildRemoveRange(this.rep, builder, [lineNum, 0], [lineNum, 1]);
- } else {
- ChangesetUtils.buildKeepRange(
- this.rep, builder, [lineNum, 0], [lineNum, 1], attribs, this.rep.apool);
- }
-
- return this.applyChangeset(builder);
- },
-
- /*
- Toggles a line attribute for the specified line number
- If a line attribute with the specified name exists with any value it will be removed
- Otherwise it will be set to the given value
- @param lineNum: the number of the line to toggle the attribute for
- @param attributeKey: the name of the attribute to toggle, e.g. list
- @param attributeValue: the value to pass to the attribute (e.g. indention level)
- */
- toggleAttributeOnLine(lineNum, attributeName, attributeValue) {
- return this.getAttributeOnLine(lineNum, attributeName)
- ? this.removeAttributeOnLine(lineNum, attributeName)
- : this.setAttributeOnLine(lineNum, attributeName, attributeValue);
- },
-
- hasAttributeOnSelectionOrCaretPosition(attributeName) {
- const hasSelection = (
- (this.rep.selStart[0] !== this.rep.selEnd[0]) || (this.rep.selEnd[1] !== this.rep.selStart[1])
- );
- let hasAttrib;
- if (hasSelection) {
- hasAttrib = this.getAttributeOnSelection(attributeName);
- } else {
- const attributesOnCaretPosition = this.getAttributesOnCaret();
- const allAttribs = [].concat(...attributesOnCaretPosition); // flatten
- hasAttrib = allAttribs.includes(attributeName);
- }
- return hasAttrib;
- },
+ return this.applyChangeset(allChangesets);
+ },
+ _findRowRange(row, start, end) {
+ if (row < start[0] || row > end[0])
+ throw new RangeError(`line ${row} not in selection`);
+ if (row >= this.rep.lines.length())
+ throw new RangeError(`selected line ${row} does not exist`);
+ // Subtract 1 for the end-of-line '\n' (it is never selected).
+ const lineLength = this.rep.lines.offsetOfIndex(row + 1) - this.rep.lines.offsetOfIndex(row) - 1;
+ const markerWidth = this.lineHasMarker(row) ? 1 : 0;
+ if (lineLength - markerWidth < 0)
+ throw new Error(`line ${row} has negative length`);
+ if (start[1] < 0)
+ throw new RangeError('selection starts at negative column');
+ const startCol = Math.max(markerWidth, row === start[0] ? start[1] : 0);
+ if (startCol > lineLength)
+ throw new RangeError('selection starts after line end');
+ if (end[1] < 0)
+ throw new RangeError('selection ends at negative column');
+ const endCol = Math.max(markerWidth, row === end[0] ? end[1] : lineLength);
+ if (endCol > lineLength)
+ throw new RangeError('selection ends after line end');
+ if (startCol > endCol)
+ throw new RangeError('selection ends before it starts');
+ return [startCol, endCol];
+ },
+ /**
+ * Sets attributes on a range, by line
+ * @param row the row where range is
+ * @param startCol column where range starts
+ * @param endCol column where range ends (one past the last selected column)
+ * @param attribs an array of attributes
+ */
+ _setAttributesOnRangeByLine(row, startCol, endCol, attribs) {
+ const builder = Changeset.builder(this.rep.lines.totalWidth());
+ ChangesetUtils.buildKeepToStartOfRange(this.rep, builder, [row, startCol]);
+ ChangesetUtils.buildKeepRange(this.rep, builder, [row, startCol], [row, endCol], attribs, this.rep.apool);
+ return builder;
+ },
+ /*
+ Returns if the line already has a line marker
+ @param lineNum: the number of the line
+ */
+ lineHasMarker(lineNum) {
+ return lineAttributes.find((attribute) => this.getAttributeOnLine(lineNum, attribute) !== '') !== undefined;
+ },
+ /*
+ Gets a specified attribute on a line
+ @param lineNum: the number of the line to set the attribute for
+ @param attributeKey: the name of the attribute to get, e.g. list
+ */
+ getAttributeOnLine(lineNum, attributeName) {
+ // get `attributeName` attribute of first char of line
+ const aline = this.rep.alines[lineNum];
+ if (!aline)
+ return '';
+ const [op] = Changeset.deserializeOps(aline);
+ if (op == null)
+ return '';
+ return AttributeMap.fromString(op.attribs, this.rep.apool).get(attributeName) || '';
+ },
+ /*
+ Gets all attributes on a line
+ @param lineNum: the number of the line to get the attribute for
+ */
+ getAttributesOnLine(lineNum) {
+ // get attributes of first char of line
+ const aline = this.rep.alines[lineNum];
+ if (!aline)
+ return [];
+ const [op] = Changeset.deserializeOps(aline);
+ if (op == null)
+ return [];
+ return [...attributes.attribsFromString(op.attribs, this.rep.apool)];
+ },
+ /*
+ Gets a given attribute on a selection
+ @param attributeName
+ @param prevChar
+ returns true or false if an attribute is visible in range
+ */
+ getAttributeOnSelection(attributeName, prevChar) {
+ const rep = this.rep;
+ if (!(rep.selStart && rep.selEnd))
+ return;
+ // If we're looking for the caret attribute not the selection
+ // has the user already got a selection or is this purely a caret location?
+ const isNotSelection = (rep.selStart[0] === rep.selEnd[0] && rep.selEnd[1] === rep.selStart[1]);
+ if (isNotSelection) {
+ if (prevChar) {
+ // If it's not the start of the line
+ if (rep.selStart[1] !== 0) {
+ rep.selStart[1]--;
+ }
+ }
+ }
+ const withIt = new AttributeMap(rep.apool).set(attributeName, 'true').toString();
+ const withItRegex = new RegExp(`${withIt.replace(/\*/g, '\\*')}(\\*|$)`);
+ const hasIt = (attribs) => withItRegex.test(attribs);
+ const rangeHasAttrib = (selStart, selEnd) => {
+ // if range is collapsed -> no attribs in range
+ if (selStart[1] === selEnd[1] && selStart[0] === selEnd[0])
+ return false;
+ if (selStart[0] !== selEnd[0]) { // -> More than one line selected
+ // from selStart to the end of the first line
+ let hasAttrib = rangeHasAttrib(selStart, [selStart[0], rep.lines.atIndex(selStart[0]).text.length]);
+ // for all lines in between
+ for (let n = selStart[0] + 1; n < selEnd[0]; n++) {
+ hasAttrib = hasAttrib && rangeHasAttrib([n, 0], [n, rep.lines.atIndex(n).text.length]);
+ }
+ // for the last, potentially partial, line
+ hasAttrib = hasAttrib && rangeHasAttrib([selEnd[0], 0], [selEnd[0], selEnd[1]]);
+ return hasAttrib;
+ }
+ // Logic tells us we now have a range on a single line
+ const lineNum = selStart[0];
+ const start = selStart[1];
+ const end = selEnd[1];
+ let hasAttrib = true;
+ let indexIntoLine = 0;
+ for (const op of Changeset.deserializeOps(rep.alines[lineNum])) {
+ const opStartInLine = indexIntoLine;
+ const opEndInLine = opStartInLine + op.chars;
+ if (!hasIt(op.attribs)) {
+ // does op overlap selection?
+ if (!(opEndInLine <= start || opStartInLine >= end)) {
+ // since it's overlapping but hasn't got the attrib -> range hasn't got it
+ hasAttrib = false;
+ break;
+ }
+ }
+ indexIntoLine = opEndInLine;
+ }
+ return hasAttrib;
+ };
+ return rangeHasAttrib(rep.selStart, rep.selEnd);
+ },
+ /*
+ Gets all attributes at a position containing line number and column
+ @param lineNumber starting with zero
+ @param column starting with zero
+ returns a list of attributes in the format
+ [ ["key","value"], ["key","value"], ... ]
+ */
+ getAttributesOnPosition(lineNumber, column) {
+ // get all attributes of the line
+ const aline = this.rep.alines[lineNumber];
+ if (!aline) {
+ return [];
+ }
+ // we need to sum up how much characters each operations take until the wanted position
+ let currentPointer = 0;
+ for (const currentOperation of Changeset.deserializeOps(aline)) {
+ currentPointer += currentOperation.chars;
+ if (currentPointer <= column)
+ continue;
+ return [...attributes.attribsFromString(currentOperation.attribs, this.rep.apool)];
+ }
+ return [];
+ },
+ /*
+ Gets all attributes at caret position
+ if the user selected a range, the start of the selection is taken
+ returns a list of attributes in the format
+ [ ["key","value"], ["key","value"], ... ]
+ */
+ getAttributesOnCaret() {
+ return this.getAttributesOnPosition(this.rep.selStart[0], this.rep.selStart[1]);
+ },
+ /*
+ Sets a specified attribute on a line
+ @param lineNum: the number of the line to set the attribute for
+ @param attributeKey: the name of the attribute to set, e.g. list
+ @param attributeValue: an optional parameter to pass to the attribute (e.g. indention level)
+
+ */
+ setAttributeOnLine(lineNum, attributeName, attributeValue) {
+ let loc = [0, 0];
+ const builder = Changeset.builder(this.rep.lines.totalWidth());
+ const hasMarker = this.lineHasMarker(lineNum);
+ ChangesetUtils.buildKeepRange(this.rep, builder, loc, (loc = [lineNum, 0]));
+ if (hasMarker) {
+ ChangesetUtils.buildKeepRange(this.rep, builder, loc, (loc = [lineNum, 1]), [
+ [attributeName, attributeValue],
+ ], this.rep.apool);
+ }
+ else {
+ // add a line marker
+ builder.insert('*', [
+ ['author', this.author],
+ ['insertorder', 'first'],
+ [lineMarkerAttribute, '1'],
+ [attributeName, attributeValue],
+ ], this.rep.apool);
+ }
+ return this.applyChangeset(builder);
+ },
+ /**
+ * Removes a specified attribute on a line
+ * @param lineNum the number of the affected line
+ * @param attributeName the name of the attribute to remove, e.g. list
+ * @param attributeValue if given only attributes with equal value will be removed
+ */
+ removeAttributeOnLine(lineNum, attributeName, attributeValue) {
+ const builder = Changeset.builder(this.rep.lines.totalWidth());
+ const hasMarker = this.lineHasMarker(lineNum);
+ let found = false;
+ const attribs = this.getAttributesOnLine(lineNum).map((attrib) => {
+ if (attrib[0] === attributeName && (!attributeValue || attrib[0] === attributeValue)) {
+ found = true;
+ return [attrib[0], ''];
+ }
+ else if (attrib[0] === 'author') {
+ // update last author to make changes to line attributes on this line
+ return [attrib[0], this.author];
+ }
+ return attrib;
+ });
+ if (!found) {
+ return;
+ }
+ ChangesetUtils.buildKeepToStartOfRange(this.rep, builder, [lineNum, 0]);
+ const countAttribsWithMarker = _.chain(attribs).filter((a) => !!a[1])
+ .map((a) => a[0]).difference(DEFAULT_LINE_ATTRIBUTES).size().value();
+ // if we have marker and any of attributes don't need to have marker. we need delete it
+ if (hasMarker && !countAttribsWithMarker) {
+ ChangesetUtils.buildRemoveRange(this.rep, builder, [lineNum, 0], [lineNum, 1]);
+ }
+ else {
+ ChangesetUtils.buildKeepRange(this.rep, builder, [lineNum, 0], [lineNum, 1], attribs, this.rep.apool);
+ }
+ return this.applyChangeset(builder);
+ },
+ /*
+ Toggles a line attribute for the specified line number
+ If a line attribute with the specified name exists with any value it will be removed
+ Otherwise it will be set to the given value
+ @param lineNum: the number of the line to toggle the attribute for
+ @param attributeKey: the name of the attribute to toggle, e.g. list
+ @param attributeValue: the value to pass to the attribute (e.g. indention level)
+ */
+ toggleAttributeOnLine(lineNum, attributeName, attributeValue) {
+ return this.getAttributeOnLine(lineNum, attributeName)
+ ? this.removeAttributeOnLine(lineNum, attributeName)
+ : this.setAttributeOnLine(lineNum, attributeName, attributeValue);
+ },
+ hasAttributeOnSelectionOrCaretPosition(attributeName) {
+ const hasSelection = ((this.rep.selStart[0] !== this.rep.selEnd[0]) || (this.rep.selEnd[1] !== this.rep.selStart[1]));
+ let hasAttrib;
+ if (hasSelection) {
+ hasAttrib = this.getAttributeOnSelection(attributeName);
+ }
+ else {
+ const attributesOnCaretPosition = this.getAttributesOnCaret();
+ const allAttribs = [].concat(...attributesOnCaretPosition); // flatten
+ hasAttrib = allAttribs.includes(attributeName);
+ }
+ return hasAttrib;
+ },
});
-
-module.exports = AttributeManager;
+export default AttributeManager;
diff --git a/src/static/js/AttributeMap.js b/src/static/js/AttributeMap.js
index 55640eb8bc6..4e55eb8a71f 100644
--- a/src/static/js/AttributeMap.js
+++ b/src/static/js/AttributeMap.js
@@ -1,13 +1,10 @@
+import * as attributes from "./attributes.js";
'use strict';
-
-const attributes = require('./attributes');
-
/**
* A `[key, value]` pair of strings describing a text attribute.
*
* @typedef {[string, string]} Attribute
*/
-
/**
* A concatenated sequence of zero or more attribute identifiers, each one represented by an
* asterisk followed by a base-36 encoded attribute number.
@@ -16,76 +13,70 @@ const attributes = require('./attributes');
*
* @typedef {string} AttributeString
*/
-
/**
* Convenience class to convert an Op's attribute string to/from a Map of key, value pairs.
*/
class AttributeMap extends Map {
- /**
- * Converts an attribute string into an AttributeMap.
- *
- * @param {AttributeString} str - The attribute string to convert into an AttributeMap.
- * @param {AttributePool} pool - Attribute pool.
- * @returns {AttributeMap}
- */
- static fromString(str, pool) {
- return new AttributeMap(pool).updateFromString(str);
- }
-
- /**
- * @param {AttributePool} pool - Attribute pool.
- */
- constructor(pool) {
- super();
- /** @public */
- this.pool = pool;
- }
-
- /**
- * @param {string} k - Attribute name.
- * @param {string} v - Attribute value.
- * @returns {AttributeMap} `this` (for chaining).
- */
- set(k, v) {
- k = k == null ? '' : String(k);
- v = v == null ? '' : String(v);
- this.pool.putAttrib([k, v]);
- return super.set(k, v);
- }
-
- toString() {
- return attributes.attribsToString(attributes.sort([...this]), this.pool);
- }
-
- /**
- * @param {Iterable} entries - [key, value] pairs to insert into this map.
- * @param {boolean} [emptyValueIsDelete] - If true and an entry's value is the empty string, the
- * key is removed from this map (if present).
- * @returns {AttributeMap} `this` (for chaining).
- */
- update(entries, emptyValueIsDelete = false) {
- for (let [k, v] of entries) {
- k = k == null ? '' : String(k);
- v = v == null ? '' : String(v);
- if (!v && emptyValueIsDelete) {
- this.delete(k);
- } else {
- this.set(k, v);
- }
+ /**
+ * Converts an attribute string into an AttributeMap.
+ *
+ * @param {AttributeString} str - The attribute string to convert into an AttributeMap.
+ * @param {AttributePool} pool - Attribute pool.
+ * @returns {AttributeMap}
+ */
+ static fromString(str, pool) {
+ return new AttributeMap(pool).updateFromString(str);
+ }
+ /**
+ * @param {AttributePool} pool - Attribute pool.
+ */
+ constructor(pool) {
+ super();
+ /** @public */
+ this.pool = pool;
+ }
+ /**
+ * @param {string} k - Attribute name.
+ * @param {string} v - Attribute value.
+ * @returns {AttributeMap} `this` (for chaining).
+ */
+ set(k, v) {
+ k = k == null ? '' : String(k);
+ v = v == null ? '' : String(v);
+ this.pool.putAttrib([k, v]);
+ return super.set(k, v);
+ }
+ toString() {
+ return attributes.attribsToString(attributes.sort([...this]), this.pool);
+ }
+ /**
+ * @param {Iterable} entries - [key, value] pairs to insert into this map.
+ * @param {boolean} [emptyValueIsDelete] - If true and an entry's value is the empty string, the
+ * key is removed from this map (if present).
+ * @returns {AttributeMap} `this` (for chaining).
+ */
+ update(entries, emptyValueIsDelete = false) {
+ for (let [k, v] of entries) {
+ k = k == null ? '' : String(k);
+ v = v == null ? '' : String(v);
+ if (!v && emptyValueIsDelete) {
+ this.delete(k);
+ }
+ else {
+ this.set(k, v);
+ }
+ }
+ return this;
+ }
+ /**
+ * @param {AttributeString} str - The attribute string identifying the attributes to insert into
+ * this map.
+ * @param {boolean} [emptyValueIsDelete] - If true and an entry's value is the empty string, the
+ * key is removed from this map (if present).
+ * @returns {AttributeMap} `this` (for chaining).
+ */
+ updateFromString(str, emptyValueIsDelete = false) {
+ return this.update(attributes.attribsFromString(str, this.pool), emptyValueIsDelete);
}
- return this;
- }
-
- /**
- * @param {AttributeString} str - The attribute string identifying the attributes to insert into
- * this map.
- * @param {boolean} [emptyValueIsDelete] - If true and an entry's value is the empty string, the
- * key is removed from this map (if present).
- * @returns {AttributeMap} `this` (for chaining).
- */
- updateFromString(str, emptyValueIsDelete = false) {
- return this.update(attributes.attribsFromString(str, this.pool), emptyValueIsDelete);
- }
}
-
-module.exports = AttributeMap;
+export default AttributeMap;
diff --git a/src/static/js/Changeset.js b/src/static/js/Changeset.js
index 614d820615c..c6fa8402ecb 100644
--- a/src/static/js/Changeset.js
+++ b/src/static/js/Changeset.js
@@ -22,9 +22,9 @@ import { padutils } from "./pad_utils.js";
* @param {string} msg - Just some message
*/
const error = (msg) => {
- const e = new Error(msg);
- e.easysync = true;
- throw e;
+ const e = new Error(msg);
+ e.easysync = true;
+ throw e;
};
/**
* Assert that a condition is truthy. If the condition is falsy, the `error` function is called to
@@ -35,75 +35,75 @@ const error = (msg) => {
* @type {(b: boolean, msg: string) => asserts b}
*/
const assert = (b, msg) => {
- if (!b)
- error(`Failed assertion: ${msg}`);
+ if (!b)
+ error(`Failed assertion: ${msg}`);
};
/**
* An operation to apply to a shared document.
*/
class Op {
- /**
- * @param {(''|'='|'+'|'-')} [opcode=''] - Initial value of the `opcode` property.
- */
- constructor(opcode = '') {
/**
- * The operation's operator:
- * - '=': Keep the next `chars` characters (containing `lines` newlines) from the base
- * document.
- * - '-': Remove the next `chars` characters (containing `lines` newlines) from the base
- * document.
- * - '+': Insert `chars` characters (containing `lines` newlines) at the current position in
- * the document. The inserted characters come from the changeset's character bank.
- * - '' (empty string): Invalid operator used in some contexts to signifiy the lack of an
- * operation.
- *
- * @type {(''|'='|'+'|'-')}
- * @public
- */
- this.opcode = opcode;
- /**
- * The number of characters to keep, insert, or delete.
- *
- * @type {number}
- * @public
- */
- this.chars = 0;
- /**
- * The number of characters among the `chars` characters that are newlines. If non-zero, the
- * last character must be a newline.
- *
- * @type {number}
- * @public
- */
- this.lines = 0;
- /**
- * Identifiers of attributes to apply to the text, represented as a repeated (zero or more)
- * sequence of asterisk followed by a non-negative base-36 (lower-case) integer. For example,
- * '*2*1o' indicates that attributes 2 and 60 apply to the text affected by the operation. The
- * identifiers come from the document's attribute pool.
- *
- * For keep ('=') operations, the attributes are merged with the base text's existing
- * attributes:
- * - A keep op attribute with a non-empty value replaces an existing base text attribute that
- * has the same key.
- * - A keep op attribute with an empty value is interpreted as an instruction to remove an
- * existing base text attribute that has the same key, if one exists.
- *
- * This is the empty string for remove ('-') operations.
- *
- * @type {string}
- * @public
+ * @param {(''|'='|'+'|'-')} [opcode=''] - Initial value of the `opcode` property.
*/
- this.attribs = '';
- }
- toString() {
- if (!this.opcode)
- throw new TypeError('null op');
- if (typeof this.attribs !== 'string')
- throw new TypeError('attribs must be a string');
- const l = this.lines ? `|${exports.numToString(this.lines)}` : '';
- return this.attribs + l + this.opcode + exports.numToString(this.chars);
- }
+ constructor(opcode = '') {
+ /**
+ * The operation's operator:
+ * - '=': Keep the next `chars` characters (containing `lines` newlines) from the base
+ * document.
+ * - '-': Remove the next `chars` characters (containing `lines` newlines) from the base
+ * document.
+ * - '+': Insert `chars` characters (containing `lines` newlines) at the current position in
+ * the document. The inserted characters come from the changeset's character bank.
+ * - '' (empty string): Invalid operator used in some contexts to signifiy the lack of an
+ * operation.
+ *
+ * @type {(''|'='|'+'|'-')}
+ * @public
+ */
+ this.opcode = opcode;
+ /**
+ * The number of characters to keep, insert, or delete.
+ *
+ * @type {number}
+ * @public
+ */
+ this.chars = 0;
+ /**
+ * The number of characters among the `chars` characters that are newlines. If non-zero, the
+ * last character must be a newline.
+ *
+ * @type {number}
+ * @public
+ */
+ this.lines = 0;
+ /**
+ * Identifiers of attributes to apply to the text, represented as a repeated (zero or more)
+ * sequence of asterisk followed by a non-negative base-36 (lower-case) integer. For example,
+ * '*2*1o' indicates that attributes 2 and 60 apply to the text affected by the operation. The
+ * identifiers come from the document's attribute pool.
+ *
+ * For keep ('=') operations, the attributes are merged with the base text's existing
+ * attributes:
+ * - A keep op attribute with a non-empty value replaces an existing base text attribute that
+ * has the same key.
+ * - A keep op attribute with an empty value is interpreted as an instruction to remove an
+ * existing base text attribute that has the same key, if one exists.
+ *
+ * This is the empty string for remove ('-') operations.
+ *
+ * @type {string}
+ * @public
+ */
+ this.attribs = '';
+ }
+ toString() {
+ if (!this.opcode)
+ throw new TypeError('null op');
+ if (typeof this.attribs !== 'string')
+ throw new TypeError('attribs must be a string');
+ const l = this.lines ? `|${exports.numToString(this.lines)}` : '';
+ return this.attribs + l + this.opcode + exports.numToString(this.chars);
+ }
}
/**
* Iterator over a changeset's operations.
@@ -113,38 +113,38 @@ class Op {
* @deprecated Use `deserializeOps` instead.
*/
class OpIter {
- /**
- * @param {string} ops - String encoding the change operations to iterate over.
- */
- constructor(ops) {
- this._gen = exports.deserializeOps(ops);
- this._next = this._gen.next();
- }
- /**
- * @returns {boolean} Whether there are any remaining operations.
- */
- hasNext() {
- return !this._next.done;
- }
- /**
- * Returns the next operation object and advances the iterator.
- *
- * Note: This does NOT implement the ECMAScript iterator protocol.
- *
- * @param {Op} [opOut] - Deprecated. Operation object to recycle for the return value.
- * @returns {Op} The next operation, or an operation with a falsy `opcode` property if there are
- * no more operations.
- */
- next(opOut = new Op()) {
- if (this.hasNext()) {
- copyOp(this._next.value, opOut);
- this._next = this._gen.next();
+ /**
+ * @param {string} ops - String encoding the change operations to iterate over.
+ */
+ constructor(ops) {
+ this._gen = exports.deserializeOps(ops);
+ this._next = this._gen.next();
}
- else {
- clearOp(opOut);
+ /**
+ * @returns {boolean} Whether there are any remaining operations.
+ */
+ hasNext() {
+ return !this._next.done;
+ }
+ /**
+ * Returns the next operation object and advances the iterator.
+ *
+ * Note: This does NOT implement the ECMAScript iterator protocol.
+ *
+ * @param {Op} [opOut] - Deprecated. Operation object to recycle for the return value.
+ * @returns {Op} The next operation, or an operation with a falsy `opcode` property if there are
+ * no more operations.
+ */
+ next(opOut = new Op()) {
+ if (this.hasNext()) {
+ copyOp(this._next.value, opOut);
+ this._next = this._gen.next();
+ }
+ else {
+ clearOp(opOut);
+ }
+ return opOut;
}
- return opOut;
- }
}
/**
* Cleans an Op object.
@@ -152,10 +152,10 @@ class OpIter {
* @param {Op} op - object to clear
*/
const clearOp = (op) => {
- op.opcode = '';
- op.chars = 0;
- op.lines = 0;
- op.attribs = '';
+ op.opcode = '';
+ op.chars = 0;
+ op.lines = 0;
+ op.attribs = '';
};
/**
* Copies op1 to op2
@@ -198,24 +198,24 @@ const copyOp = (op1, op2 = new Op()) => Object.assign(op2, op1);
* @returns {Generator}
*/
const opsFromText = function* (opcode, text, attribs = '', pool = null) {
- const op = new Op(opcode);
- op.attribs = typeof attribs === 'string'
- ? attribs : new AttributeMap(pool).update(attribs || [], opcode === '+').toString();
- const lastNewlinePos = text.lastIndexOf('\n');
- if (lastNewlinePos < 0) {
- op.chars = text.length;
- op.lines = 0;
- yield op;
- }
- else {
- op.chars = lastNewlinePos + 1;
- op.lines = text.match(/\n/g).length;
- yield op;
- const op2 = copyOp(op);
- op2.chars = text.length - (lastNewlinePos + 1);
- op2.lines = 0;
- yield op2;
- }
+ const op = new Op(opcode);
+ op.attribs = typeof attribs === 'string'
+ ? attribs : new AttributeMap(pool).update(attribs || [], opcode === '+').toString();
+ const lastNewlinePos = text.lastIndexOf('\n');
+ if (lastNewlinePos < 0) {
+ op.chars = text.length;
+ op.lines = 0;
+ yield op;
+ }
+ else {
+ op.chars = lastNewlinePos + 1;
+ op.lines = text.match(/\n/g).length;
+ yield op;
+ const op2 = copyOp(op);
+ op2.chars = text.length - (lastNewlinePos + 1);
+ op2.lines = 0;
+ yield op2;
+ }
};
/**
* @typedef {object} StringArrayLike
@@ -240,316 +240,316 @@ const opsFromText = function* (opcode, text, attribs = '', pool = null) {
* with no newlines.
*/
class TextLinesMutator {
- /**
- * @param {(string[]|StringArrayLike)} lines - Lines to mutate (in place).
- */
- constructor(lines) {
- this._lines = lines;
/**
- * this._curSplice holds values that will be passed as arguments to this._lines.splice() to
- * insert, delete, or change lines:
- * - this._curSplice[0] is an index into the this._lines array.
- * - this._curSplice[1] is the number of lines that will be removed from the this._lines array
- * starting at the index.
- * - The other elements represent mutated (changed by ops) lines or new lines (added by ops)
- * to insert at the index.
- *
- * @type {[number, number?, ...string[]?]}
+ * @param {(string[]|StringArrayLike)} lines - Lines to mutate (in place).
*/
- this._curSplice = [0, 0];
- this._inSplice = false;
- // position in lines after curSplice is applied:
- this._curLine = 0;
- this._curCol = 0;
- // invariant: if (inSplice) then (curLine is in curSplice[0] + curSplice.length - {2,3}) &&
- // curLine >= curSplice[0]
- // invariant: if (inSplice && (curLine >= curSplice[0] + curSplice.length - 2)) then
- // curCol == 0
- }
- /**
- * Get a line from `lines` at given index.
- *
- * @param {number} idx - an index
- * @returns {string}
- */
- _linesGet(idx) {
- if ('get' in this._lines) {
- return this._lines.get(idx);
+ constructor(lines) {
+ this._lines = lines;
+ /**
+ * this._curSplice holds values that will be passed as arguments to this._lines.splice() to
+ * insert, delete, or change lines:
+ * - this._curSplice[0] is an index into the this._lines array.
+ * - this._curSplice[1] is the number of lines that will be removed from the this._lines array
+ * starting at the index.
+ * - The other elements represent mutated (changed by ops) lines or new lines (added by ops)
+ * to insert at the index.
+ *
+ * @type {[number, number?, ...string[]?]}
+ */
+ this._curSplice = [0, 0];
+ this._inSplice = false;
+ // position in lines after curSplice is applied:
+ this._curLine = 0;
+ this._curCol = 0;
+ // invariant: if (inSplice) then (curLine is in curSplice[0] + curSplice.length - {2,3}) &&
+ // curLine >= curSplice[0]
+ // invariant: if (inSplice && (curLine >= curSplice[0] + curSplice.length - 2)) then
+ // curCol == 0
}
- else {
- return this._lines[idx];
+ /**
+ * Get a line from `lines` at given index.
+ *
+ * @param {number} idx - an index
+ * @returns {string}
+ */
+ _linesGet(idx) {
+ if ('get' in this._lines) {
+ return this._lines.get(idx);
+ }
+ else {
+ return this._lines[idx];
+ }
}
- }
- /**
- * Return a slice from `lines`.
- *
- * @param {number} start - the start index
- * @param {number} end - the end index
- * @returns {string[]}
- */
- _linesSlice(start, end) {
- // can be unimplemented if removeLines's return value not needed
- if (this._lines.slice) {
- return this._lines.slice(start, end);
+ /**
+ * Return a slice from `lines`.
+ *
+ * @param {number} start - the start index
+ * @param {number} end - the end index
+ * @returns {string[]}
+ */
+ _linesSlice(start, end) {
+ // can be unimplemented if removeLines's return value not needed
+ if (this._lines.slice) {
+ return this._lines.slice(start, end);
+ }
+ else {
+ return [];
+ }
}
- else {
- return [];
+ /**
+ * Return the length of `lines`.
+ *
+ * @returns {number}
+ */
+ _linesLength() {
+ if (typeof this._lines.length === 'number') {
+ return this._lines.length;
+ }
+ else {
+ return this._lines.length();
+ }
}
- }
- /**
- * Return the length of `lines`.
- *
- * @returns {number}
- */
- _linesLength() {
- if (typeof this._lines.length === 'number') {
- return this._lines.length;
+ /**
+ * Starts a new splice.
+ */
+ _enterSplice() {
+ this._curSplice[0] = this._curLine;
+ this._curSplice[1] = 0;
+ // TODO(doc) when is this the case?
+ // check all enterSplice calls and changes to curCol
+ if (this._curCol > 0)
+ this._putCurLineInSplice();
+ this._inSplice = true;
}
- else {
- return this._lines.length();
+ /**
+ * Changes the lines array according to the values in curSplice and resets curSplice. Called via
+ * close or TODO(doc).
+ */
+ _leaveSplice() {
+ this._lines.splice(...this._curSplice);
+ this._curSplice.length = 2;
+ this._curSplice[0] = this._curSplice[1] = 0;
+ this._inSplice = false;
}
- }
- /**
- * Starts a new splice.
- */
- _enterSplice() {
- this._curSplice[0] = this._curLine;
- this._curSplice[1] = 0;
- // TODO(doc) when is this the case?
- // check all enterSplice calls and changes to curCol
- if (this._curCol > 0)
- this._putCurLineInSplice();
- this._inSplice = true;
- }
- /**
- * Changes the lines array according to the values in curSplice and resets curSplice. Called via
- * close or TODO(doc).
- */
- _leaveSplice() {
- this._lines.splice(...this._curSplice);
- this._curSplice.length = 2;
- this._curSplice[0] = this._curSplice[1] = 0;
- this._inSplice = false;
- }
- /**
- * Indicates if curLine is already in the splice. This is necessary because the last element in
- * curSplice is curLine when this line is currently worked on (e.g. when skipping or inserting).
- *
- * @returns {boolean} true if curLine is in splice
- */
- _isCurLineInSplice() {
- // The value of `this._curSplice[1]` does not matter when determining the return value because
- // `this._curLine` refers to the line number *after* the splice is applied (so after those lines
- // are deleted).
- return this._curLine - this._curSplice[0] < this._curSplice.length - 2;
- }
- /**
- * Incorporates current line into the splice and marks its old position to be deleted.
- *
- * @returns {number} the index of the added line in curSplice
- */
- _putCurLineInSplice() {
- if (!this._isCurLineInSplice()) {
- this._curSplice.push(this._linesGet(this._curSplice[0] + this._curSplice[1]));
- this._curSplice[1]++;
+ /**
+ * Indicates if curLine is already in the splice. This is necessary because the last element in
+ * curSplice is curLine when this line is currently worked on (e.g. when skipping or inserting).
+ *
+ * @returns {boolean} true if curLine is in splice
+ */
+ _isCurLineInSplice() {
+ // The value of `this._curSplice[1]` does not matter when determining the return value because
+ // `this._curLine` refers to the line number *after* the splice is applied (so after those lines
+ // are deleted).
+ return this._curLine - this._curSplice[0] < this._curSplice.length - 2;
}
- // TODO should be the same as this._curSplice.length - 1
- return 2 + this._curLine - this._curSplice[0];
- }
- /**
- * It will skip some newlines by putting them into the splice.
- *
- * @param {number} L -
- * @param {boolean} includeInSplice - Indicates that attributes are present.
- */
- skipLines(L, includeInSplice) {
- if (!L)
- return;
- if (includeInSplice) {
- if (!this._inSplice)
- this._enterSplice();
- // TODO(doc) should this count the number of characters that are skipped to check?
- for (let i = 0; i < L; i++) {
- this._curCol = 0;
- this._putCurLineInSplice();
- this._curLine++;
- }
+ /**
+ * Incorporates current line into the splice and marks its old position to be deleted.
+ *
+ * @returns {number} the index of the added line in curSplice
+ */
+ _putCurLineInSplice() {
+ if (!this._isCurLineInSplice()) {
+ this._curSplice.push(this._linesGet(this._curSplice[0] + this._curSplice[1]));
+ this._curSplice[1]++;
+ }
+ // TODO should be the same as this._curSplice.length - 1
+ return 2 + this._curLine - this._curSplice[0];
}
- else {
- if (this._inSplice) {
- if (L > 1) {
- // TODO(doc) figure out why single lines are incorporated into splice instead of ignored
- this._leaveSplice();
+ /**
+ * It will skip some newlines by putting them into the splice.
+ *
+ * @param {number} L -
+ * @param {boolean} includeInSplice - Indicates that attributes are present.
+ */
+ skipLines(L, includeInSplice) {
+ if (!L)
+ return;
+ if (includeInSplice) {
+ if (!this._inSplice)
+ this._enterSplice();
+ // TODO(doc) should this count the number of characters that are skipped to check?
+ for (let i = 0; i < L; i++) {
+ this._curCol = 0;
+ this._putCurLineInSplice();
+ this._curLine++;
+ }
}
else {
- this._putCurLineInSplice();
+ if (this._inSplice) {
+ if (L > 1) {
+ // TODO(doc) figure out why single lines are incorporated into splice instead of ignored
+ this._leaveSplice();
+ }
+ else {
+ this._putCurLineInSplice();
+ }
+ }
+ this._curLine += L;
+ this._curCol = 0;
}
- }
- this._curLine += L;
- this._curCol = 0;
+ // tests case foo in remove(), which isn't otherwise covered in current impl
}
- // tests case foo in remove(), which isn't otherwise covered in current impl
- }
- /**
- * Skip some characters. Can contain newlines.
- *
- * @param {number} N - number of characters to skip
- * @param {number} L - number of newlines to skip
- * @param {boolean} includeInSplice - indicates if attributes are present
- */
- skip(N, L, includeInSplice) {
- if (!N)
- return;
- if (L) {
- this.skipLines(L, includeInSplice);
+ /**
+ * Skip some characters. Can contain newlines.
+ *
+ * @param {number} N - number of characters to skip
+ * @param {number} L - number of newlines to skip
+ * @param {boolean} includeInSplice - indicates if attributes are present
+ */
+ skip(N, L, includeInSplice) {
+ if (!N)
+ return;
+ if (L) {
+ this.skipLines(L, includeInSplice);
+ }
+ else {
+ if (includeInSplice && !this._inSplice)
+ this._enterSplice();
+ if (this._inSplice) {
+ // although the line is put into splice curLine is not increased, because
+ // only some chars are skipped, not the whole line
+ this._putCurLineInSplice();
+ }
+ this._curCol += N;
+ }
}
- else {
- if (includeInSplice && !this._inSplice)
- this._enterSplice();
- if (this._inSplice) {
- // although the line is put into splice curLine is not increased, because
- // only some chars are skipped, not the whole line
- this._putCurLineInSplice();
- }
- this._curCol += N;
+ /**
+ * Remove whole lines from lines array.
+ *
+ * @param {number} L - number of lines to remove
+ * @returns {string}
+ */
+ removeLines(L) {
+ if (!L)
+ return '';
+ if (!this._inSplice)
+ this._enterSplice();
+ /**
+ * Gets a string of joined lines after the end of the splice.
+ *
+ * @param {number} k - number of lines
+ * @returns {string} joined lines
+ */
+ const nextKLinesText = (k) => {
+ const m = this._curSplice[0] + this._curSplice[1];
+ return this._linesSlice(m, m + k).join('');
+ };
+ let removed = '';
+ if (this._isCurLineInSplice()) {
+ if (this._curCol === 0) {
+ removed = this._curSplice[this._curSplice.length - 1];
+ this._curSplice.length--;
+ removed += nextKLinesText(L - 1);
+ this._curSplice[1] += L - 1;
+ }
+ else {
+ removed = nextKLinesText(L - 1);
+ this._curSplice[1] += L - 1;
+ const sline = this._curSplice.length - 1;
+ removed = this._curSplice[sline].substring(this._curCol) + removed;
+ this._curSplice[sline] = this._curSplice[sline].substring(0, this._curCol) +
+ this._linesGet(this._curSplice[0] + this._curSplice[1]);
+ this._curSplice[1] += 1;
+ }
+ }
+ else {
+ removed = nextKLinesText(L);
+ this._curSplice[1] += L;
+ }
+ return removed;
}
- }
- /**
- * Remove whole lines from lines array.
- *
- * @param {number} L - number of lines to remove
- * @returns {string}
- */
- removeLines(L) {
- if (!L)
- return '';
- if (!this._inSplice)
- this._enterSplice();
/**
- * Gets a string of joined lines after the end of the splice.
+ * Remove text from lines array.
*
- * @param {number} k - number of lines
- * @returns {string} joined lines
+ * @param {number} N - characters to delete
+ * @param {number} L - lines to delete
+ * @returns {string}
*/
- const nextKLinesText = (k) => {
- const m = this._curSplice[0] + this._curSplice[1];
- return this._linesSlice(m, m + k).join('');
- };
- let removed = '';
- if (this._isCurLineInSplice()) {
- if (this._curCol === 0) {
- removed = this._curSplice[this._curSplice.length - 1];
- this._curSplice.length--;
- removed += nextKLinesText(L - 1);
- this._curSplice[1] += L - 1;
- }
- else {
- removed = nextKLinesText(L - 1);
- this._curSplice[1] += L - 1;
- const sline = this._curSplice.length - 1;
- removed = this._curSplice[sline].substring(this._curCol) + removed;
+ remove(N, L) {
+ if (!N)
+ return '';
+ if (L)
+ return this.removeLines(L);
+ if (!this._inSplice)
+ this._enterSplice();
+ // although the line is put into splice, curLine is not increased, because
+ // only some chars are removed not the whole line
+ const sline = this._putCurLineInSplice();
+ const removed = this._curSplice[sline].substring(this._curCol, this._curCol + N);
this._curSplice[sline] = this._curSplice[sline].substring(0, this._curCol) +
- this._linesGet(this._curSplice[0] + this._curSplice[1]);
- this._curSplice[1] += 1;
- }
+ this._curSplice[sline].substring(this._curCol + N);
+ return removed;
}
- else {
- removed = nextKLinesText(L);
- this._curSplice[1] += L;
- }
- return removed;
- }
- /**
- * Remove text from lines array.
- *
- * @param {number} N - characters to delete
- * @param {number} L - lines to delete
- * @returns {string}
- */
- remove(N, L) {
- if (!N)
- return '';
- if (L)
- return this.removeLines(L);
- if (!this._inSplice)
- this._enterSplice();
- // although the line is put into splice, curLine is not increased, because
- // only some chars are removed not the whole line
- const sline = this._putCurLineInSplice();
- const removed = this._curSplice[sline].substring(this._curCol, this._curCol + N);
- this._curSplice[sline] = this._curSplice[sline].substring(0, this._curCol) +
- this._curSplice[sline].substring(this._curCol + N);
- return removed;
- }
- /**
- * Inserts text into lines array.
- *
- * @param {string} text - the text to insert
- * @param {number} L - number of newlines in text
- */
- insert(text, L) {
- if (!text)
- return;
- if (!this._inSplice)
- this._enterSplice();
- if (L) {
- const newLines = exports.splitTextLines(text);
- if (this._isCurLineInSplice()) {
- const sline = this._curSplice.length - 1;
- /** @type {string} */
- const theLine = this._curSplice[sline];
- const lineCol = this._curCol;
- // Insert the chars up to `curCol` and the first new line.
- this._curSplice[sline] = theLine.substring(0, lineCol) + newLines[0];
- this._curLine++;
- newLines.splice(0, 1);
- // insert the remaining new lines
- this._curSplice.push(...newLines);
- this._curLine += newLines.length;
- // insert the remaining chars from the "old" line (e.g. the line we were in
- // when we started to insert new lines)
- this._curSplice.push(theLine.substring(lineCol));
- this._curCol = 0; // TODO(doc) why is this not set to the length of last line?
- }
- else {
- this._curSplice.push(...newLines);
- this._curLine += newLines.length;
- }
+ /**
+ * Inserts text into lines array.
+ *
+ * @param {string} text - the text to insert
+ * @param {number} L - number of newlines in text
+ */
+ insert(text, L) {
+ if (!text)
+ return;
+ if (!this._inSplice)
+ this._enterSplice();
+ if (L) {
+ const newLines = exports.splitTextLines(text);
+ if (this._isCurLineInSplice()) {
+ const sline = this._curSplice.length - 1;
+ /** @type {string} */
+ const theLine = this._curSplice[sline];
+ const lineCol = this._curCol;
+ // Insert the chars up to `curCol` and the first new line.
+ this._curSplice[sline] = theLine.substring(0, lineCol) + newLines[0];
+ this._curLine++;
+ newLines.splice(0, 1);
+ // insert the remaining new lines
+ this._curSplice.push(...newLines);
+ this._curLine += newLines.length;
+ // insert the remaining chars from the "old" line (e.g. the line we were in
+ // when we started to insert new lines)
+ this._curSplice.push(theLine.substring(lineCol));
+ this._curCol = 0; // TODO(doc) why is this not set to the length of last line?
+ }
+ else {
+ this._curSplice.push(...newLines);
+ this._curLine += newLines.length;
+ }
+ }
+ else {
+ // There are no additional lines. Although the line is put into splice, curLine is not
+ // increased because there may be more chars in the line (newline is not reached).
+ const sline = this._putCurLineInSplice();
+ if (!this._curSplice[sline]) {
+ const err = new Error('curSplice[sline] not populated, actual curSplice contents is ' +
+ `${JSON.stringify(this._curSplice)}. Possibly related to ` +
+ 'https://github.com/ether/etherpad-lite/issues/2802');
+ console.error(err.stack || err.toString());
+ }
+ this._curSplice[sline] = this._curSplice[sline].substring(0, this._curCol) + text +
+ this._curSplice[sline].substring(this._curCol);
+ this._curCol += text.length;
+ }
}
- else {
- // There are no additional lines. Although the line is put into splice, curLine is not
- // increased because there may be more chars in the line (newline is not reached).
- const sline = this._putCurLineInSplice();
- if (!this._curSplice[sline]) {
- const err = new Error('curSplice[sline] not populated, actual curSplice contents is ' +
- `${JSON.stringify(this._curSplice)}. Possibly related to ` +
- 'https://github.com/ether/etherpad-lite/issues/2802');
- console.error(err.stack || err.toString());
- }
- this._curSplice[sline] = this._curSplice[sline].substring(0, this._curCol) + text +
- this._curSplice[sline].substring(this._curCol);
- this._curCol += text.length;
+ /**
+ * Checks if curLine (the line we are in when curSplice is applied) is the last line in `lines`.
+ *
+ * @returns {boolean} indicates if there are lines left
+ */
+ hasMore() {
+ let docLines = this._linesLength();
+ if (this._inSplice) {
+ docLines += this._curSplice.length - 2 - this._curSplice[1];
+ }
+ return this._curLine < docLines;
}
- }
- /**
- * Checks if curLine (the line we are in when curSplice is applied) is the last line in `lines`.
- *
- * @returns {boolean} indicates if there are lines left
- */
- hasMore() {
- let docLines = this._linesLength();
- if (this._inSplice) {
- docLines += this._curSplice.length - 2 - this._curSplice[1];
+ /**
+ * Closes the splice
+ */
+ close() {
+ if (this._inSplice)
+ this._leaveSplice();
}
- return this._curLine < docLines;
- }
- /**
- * Closes the splice
- */
- close() {
- if (this._inSplice)
- this._leaveSplice();
- }
}
/**
* Apply operations to other operations.
@@ -573,28 +573,28 @@ class TextLinesMutator {
* @returns {string} the integrated changeset
*/
const applyZip = (in1, in2, func) => {
- const ops1 = exports.deserializeOps(in1);
- const ops2 = exports.deserializeOps(in2);
- let next1 = ops1.next();
- let next2 = ops2.next();
- const assem = exports.smartOpAssembler();
- while (!next1.done || !next2.done) {
- if (!next1.done && !next1.value.opcode)
- next1 = ops1.next();
- if (!next2.done && !next2.value.opcode)
- next2 = ops2.next();
- if (next1.value == null)
- next1.value = new Op();
- if (next2.value == null)
- next2.value = new Op();
- if (!next1.value.opcode && !next2.value.opcode)
- break;
- const opOut = func(next1.value, next2.value);
- if (opOut && opOut.opcode)
- assem.append(opOut);
- }
- assem.endDocument();
- return assem.toString();
+ const ops1 = exports.deserializeOps(in1);
+ const ops2 = exports.deserializeOps(in2);
+ let next1 = ops1.next();
+ let next2 = ops2.next();
+ const assem = exports.smartOpAssembler();
+ while (!next1.done || !next2.done) {
+ if (!next1.done && !next1.value.opcode)
+ next1 = ops1.next();
+ if (!next2.done && !next2.value.opcode)
+ next2 = ops2.next();
+ if (next1.value == null)
+ next1.value = new Op();
+ if (next2.value == null)
+ next2.value = new Op();
+ if (!next1.value.opcode && !next2.value.opcode)
+ break;
+ const opOut = func(next1.value, next2.value);
+ if (opOut && opOut.opcode)
+ assem.append(opOut);
+ }
+ assem.endDocument();
+ return assem.toString();
};
/**
* Function used as parameter for applyZip to apply a Changeset to an attribute.
@@ -606,59 +606,59 @@ const applyZip = (in1, in2, func) => {
* @returns {Op} The result of applying `csOp` to `attOp`.
*/
const slicerZipperFunc = (attOp, csOp, pool) => {
- const opOut = new Op();
- if (!attOp.opcode) {
- copyOp(csOp, opOut);
- csOp.opcode = '';
- }
- else if (!csOp.opcode) {
- copyOp(attOp, opOut);
- attOp.opcode = '';
- }
- else if (attOp.opcode === '-') {
- copyOp(attOp, opOut);
- attOp.opcode = '';
- }
- else if (csOp.opcode === '+') {
- copyOp(csOp, opOut);
- csOp.opcode = '';
- }
- else {
- for (const op of [attOp, csOp]) {
- assert(op.chars >= op.lines, `op has more newlines than chars: ${op.toString()}`);
+ const opOut = new Op();
+ if (!attOp.opcode) {
+ copyOp(csOp, opOut);
+ csOp.opcode = '';
+ }
+ else if (!csOp.opcode) {
+ copyOp(attOp, opOut);
+ attOp.opcode = '';
+ }
+ else if (attOp.opcode === '-') {
+ copyOp(attOp, opOut);
+ attOp.opcode = '';
+ }
+ else if (csOp.opcode === '+') {
+ copyOp(csOp, opOut);
+ csOp.opcode = '';
+ }
+ else {
+ for (const op of [attOp, csOp]) {
+ assert(op.chars >= op.lines, `op has more newlines than chars: ${op.toString()}`);
+ }
+ assert(attOp.chars < csOp.chars ? attOp.lines <= csOp.lines
+ : attOp.chars > csOp.chars ? attOp.lines >= csOp.lines
+ : attOp.lines === csOp.lines, 'line count mismatch when composing changesets A*B; ' +
+ `opA: ${attOp.toString()} opB: ${csOp.toString()}`);
+ assert(['+', '='].includes(attOp.opcode), `unexpected opcode in op: ${attOp.toString()}`);
+ assert(['-', '='].includes(csOp.opcode), `unexpected opcode in op: ${csOp.toString()}`);
+ opOut.opcode = {
+ '+': {
+ '-': '',
+ '=': '+',
+ },
+ '=': {
+ '-': '-',
+ '=': '=',
+ },
+ }[attOp.opcode][csOp.opcode];
+ const [fullyConsumedOp, partiallyConsumedOp] = [attOp, csOp].sort((a, b) => a.chars - b.chars);
+ opOut.chars = fullyConsumedOp.chars;
+ opOut.lines = fullyConsumedOp.lines;
+ opOut.attribs = csOp.opcode === '-'
+ // csOp is a remove op and remove ops normally never have any attributes, so this should
+ // normally be the empty string. However, padDiff.js adds attributes to remove ops and needs
+ // them preserved so they are copied here.
+ ? csOp.attribs
+ : exports.composeAttributes(attOp.attribs, csOp.attribs, attOp.opcode === '=', pool);
+ partiallyConsumedOp.chars -= fullyConsumedOp.chars;
+ partiallyConsumedOp.lines -= fullyConsumedOp.lines;
+ if (!partiallyConsumedOp.chars)
+ partiallyConsumedOp.opcode = '';
+ fullyConsumedOp.opcode = '';
}
- assert(attOp.chars < csOp.chars ? attOp.lines <= csOp.lines
- : attOp.chars > csOp.chars ? attOp.lines >= csOp.lines
- : attOp.lines === csOp.lines, 'line count mismatch when composing changesets A*B; ' +
- `opA: ${attOp.toString()} opB: ${csOp.toString()}`);
- assert(['+', '='].includes(attOp.opcode), `unexpected opcode in op: ${attOp.toString()}`);
- assert(['-', '='].includes(csOp.opcode), `unexpected opcode in op: ${csOp.toString()}`);
- opOut.opcode = {
- '+': {
- '-': '',
- '=': '+',
- },
- '=': {
- '-': '-',
- '=': '=',
- },
- }[attOp.opcode][csOp.opcode];
- const [fullyConsumedOp, partiallyConsumedOp] = [attOp, csOp].sort((a, b) => a.chars - b.chars);
- opOut.chars = fullyConsumedOp.chars;
- opOut.lines = fullyConsumedOp.lines;
- opOut.attribs = csOp.opcode === '-'
- // csOp is a remove op and remove ops normally never have any attributes, so this should
- // normally be the empty string. However, padDiff.js adds attributes to remove ops and needs
- // them preserved so they are copied here.
- ? csOp.attribs
- : exports.composeAttributes(attOp.attribs, csOp.attribs, attOp.opcode === '=', pool);
- partiallyConsumedOp.chars -= fullyConsumedOp.chars;
- partiallyConsumedOp.lines -= fullyConsumedOp.lines;
- if (!partiallyConsumedOp.chars)
- partiallyConsumedOp.opcode = '';
- fullyConsumedOp.opcode = '';
- }
- return opOut;
+ return opOut;
};
/**
* Transforms a changeset into a list of splices in the form [startChar, endChar, newText] meaning
@@ -668,1296 +668,1296 @@ const slicerZipperFunc = (attOp, csOp, pool) => {
* @returns {[number, number, string][]}
*/
const toSplices = (cs) => {
- const unpacked = exports.unpack(cs);
- /** @type {[number, number, string][]} */
- const splices = [];
- let oldPos = 0;
- const charIter = exports.stringIterator(unpacked.charBank);
- let inSplice = false;
- for (const op of exports.deserializeOps(unpacked.ops)) {
- if (op.opcode === '=') {
- oldPos += op.chars;
- inSplice = false;
- }
- else {
- if (!inSplice) {
- splices.push([oldPos, oldPos, '']);
- inSplice = true;
- }
- if (op.opcode === '-') {
- oldPos += op.chars;
- splices[splices.length - 1][1] += op.chars;
- }
- else if (op.opcode === '+') {
- splices[splices.length - 1][2] += charIter.take(op.chars);
- }
+ const unpacked = exports.unpack(cs);
+ /** @type {[number, number, string][]} */
+ const splices = [];
+ let oldPos = 0;
+ const charIter = exports.stringIterator(unpacked.charBank);
+ let inSplice = false;
+ for (const op of exports.deserializeOps(unpacked.ops)) {
+ if (op.opcode === '=') {
+ oldPos += op.chars;
+ inSplice = false;
+ }
+ else {
+ if (!inSplice) {
+ splices.push([oldPos, oldPos, '']);
+ inSplice = true;
+ }
+ if (op.opcode === '-') {
+ oldPos += op.chars;
+ splices[splices.length - 1][1] += op.chars;
+ }
+ else if (op.opcode === '+') {
+ splices[splices.length - 1][2] += charIter.take(op.chars);
+ }
+ }
}
- }
- return splices;
+ return splices;
};
/**
* @deprecated Use an AttributeMap instead.
*/
const attribsAttributeValue = (attribs, key, pool) => {
- if (!attribs)
+ if (!attribs)
+ return '';
+ for (const [k, v] of attributes.attribsFromString(attribs, pool)) {
+ if (k === key)
+ return v;
+ }
return '';
- for (const [k, v] of attributes.attribsFromString(attribs, pool)) {
- if (k === key)
- return v;
- }
- return '';
};
const followAttributes = (att1, att2, pool) => {
- // The merge of two sets of attribute changes to the same text
- // takes the lexically-earlier value if there are two values
- // for the same key. Otherwise, all key/value changes from
- // both attribute sets are taken. This operation is the "follow",
- // so a set of changes is produced that can be applied to att1
- // to produce the merged set.
- if ((!att2) || (!pool))
- return '';
- if (!att1)
- return att2;
- const atts = new Map();
- att2.replace(/\*([0-9a-z]+)/g, (_, a) => {
- const [key, val] = pool.getAttrib(exports.parseNum(a));
- atts.set(key, val);
- return '';
- });
- att1.replace(/\*([0-9a-z]+)/g, (_, a) => {
- const [key, val] = pool.getAttrib(exports.parseNum(a));
- if (atts.has(key) && val <= atts.get(key))
- atts.delete(key);
- return '';
- });
- // we've only removed attributes, so they're already sorted
- const buf = exports.stringAssembler();
- for (const att of atts) {
- buf.append('*');
- buf.append(exports.numToString(pool.putAttrib(att)));
- }
- return buf.toString();
+ // The merge of two sets of attribute changes to the same text
+ // takes the lexically-earlier value if there are two values
+ // for the same key. Otherwise, all key/value changes from
+ // both attribute sets are taken. This operation is the "follow",
+ // so a set of changes is produced that can be applied to att1
+ // to produce the merged set.
+ if ((!att2) || (!pool))
+ return '';
+ if (!att1)
+ return att2;
+ const atts = new Map();
+ att2.replace(/\*([0-9a-z]+)/g, (_, a) => {
+ const [key, val] = pool.getAttrib(exports.parseNum(a));
+ atts.set(key, val);
+ return '';
+ });
+ att1.replace(/\*([0-9a-z]+)/g, (_, a) => {
+ const [key, val] = pool.getAttrib(exports.parseNum(a));
+ if (atts.has(key) && val <= atts.get(key))
+ atts.delete(key);
+ return '';
+ });
+ // we've only removed attributes, so they're already sorted
+ const buf = exports.stringAssembler();
+ for (const att of atts) {
+ buf.append('*');
+ buf.append(exports.numToString(pool.putAttrib(att)));
+ }
+ return buf.toString();
};
export const parseNum = (str) => parseInt(str, 36);
export const numToString = (num) => num.toString(36).toLowerCase();
export const oldLen = (cs) => exports.unpack(cs).oldLen;
export const newLen = (cs) => exports.unpack(cs).newLen;
export const deserializeOps = function* (ops) {
- // TODO: Migrate to String.prototype.matchAll() once there is enough browser support.
- const regex = /((?:\*[0-9a-z]+)*)(?:\|([0-9a-z]+))?([-+=])([0-9a-z]+)|(.)/g;
- let match;
- while ((match = regex.exec(ops)) != null) {
- if (match[5] === '$')
- return; // Start of the insert operation character bank.
- if (match[5] != null)
- error(`invalid operation: ${ops.slice(regex.lastIndex - 1)}`);
- const op = new Op(match[3]);
- op.lines = exports.parseNum(match[2] || '0');
- op.chars = exports.parseNum(match[4]);
- op.attribs = match[1];
- yield op;
- }
+ // TODO: Migrate to String.prototype.matchAll() once there is enough browser support.
+ const regex = /((?:\*[0-9a-z]+)*)(?:\|([0-9a-z]+))?([-+=])([0-9a-z]+)|(.)/g;
+ let match;
+ while ((match = regex.exec(ops)) != null) {
+ if (match[5] === '$')
+ return; // Start of the insert operation character bank.
+ if (match[5] != null)
+ error(`invalid operation: ${ops.slice(regex.lastIndex - 1)}`);
+ const op = new Op(match[3]);
+ op.lines = exports.parseNum(match[2] || '0');
+ op.chars = exports.parseNum(match[4]);
+ op.attribs = match[1];
+ yield op;
+ }
};
export const opIterator = (opsStr) => {
- padutils.warnDeprecated('Changeset.opIterator() is deprecated; use Changeset.deserializeOps() instead');
- return new OpIter(opsStr);
+ padutils.warnDeprecated('Changeset.opIterator() is deprecated; use Changeset.deserializeOps() instead');
+ return new OpIter(opsStr);
};
export const newOp = (optOpcode) => {
- padutils.warnDeprecated('Changeset.newOp() is deprecated; use the Changeset.Op class instead');
- return new Op(optOpcode);
+ padutils.warnDeprecated('Changeset.newOp() is deprecated; use the Changeset.Op class instead');
+ return new Op(optOpcode);
};
export const checkRep = (cs) => {
- const unpacked = exports.unpack(cs);
- const oldLen = unpacked.oldLen;
- const newLen = unpacked.newLen;
- const ops = unpacked.ops;
- let charBank = unpacked.charBank;
- const assem = exports.smartOpAssembler();
- let oldPos = 0;
- let calcNewLen = 0;
- for (const o of exports.deserializeOps(ops)) {
- switch (o.opcode) {
- case '=':
- oldPos += o.chars;
- calcNewLen += o.chars;
- break;
- case '-':
- oldPos += o.chars;
- assert(oldPos <= oldLen, `${oldPos} > ${oldLen} in ${cs}`);
- break;
- case '+':
- {
- assert(charBank.length >= o.chars, 'Invalid changeset: not enough chars in charBank');
- const chars = charBank.slice(0, o.chars);
- const nlines = (chars.match(/\n/g) || []).length;
- assert(nlines === o.lines, 'Invalid changeset: number of newlines in insert op does not match the charBank');
- assert(o.lines === 0 || chars.endsWith('\n'), 'Invalid changeset: multiline insert op does not end with a newline');
- charBank = charBank.slice(o.chars);
- calcNewLen += o.chars;
- assert(calcNewLen <= newLen, `${calcNewLen} > ${newLen} in ${cs}`);
- break;
- }
- default:
- assert(false, `Invalid changeset: Unknown opcode: ${JSON.stringify(o.opcode)}`);
- }
- assem.append(o);
- }
- calcNewLen += oldLen - oldPos;
- assert(calcNewLen === newLen, 'Invalid changeset: claimed length does not match actual length');
- assert(charBank === '', 'Invalid changeset: excess characters in the charBank');
- assem.endDocument();
- const normalized = exports.pack(oldLen, calcNewLen, assem.toString(), unpacked.charBank);
- assert(normalized === cs, 'Invalid changeset: not in canonical form');
- return cs;
+ const unpacked = exports.unpack(cs);
+ const oldLen = unpacked.oldLen;
+ const newLen = unpacked.newLen;
+ const ops = unpacked.ops;
+ let charBank = unpacked.charBank;
+ const assem = exports.smartOpAssembler();
+ let oldPos = 0;
+ let calcNewLen = 0;
+ for (const o of exports.deserializeOps(ops)) {
+ switch (o.opcode) {
+ case '=':
+ oldPos += o.chars;
+ calcNewLen += o.chars;
+ break;
+ case '-':
+ oldPos += o.chars;
+ assert(oldPos <= oldLen, `${oldPos} > ${oldLen} in ${cs}`);
+ break;
+ case '+':
+ {
+ assert(charBank.length >= o.chars, 'Invalid changeset: not enough chars in charBank');
+ const chars = charBank.slice(0, o.chars);
+ const nlines = (chars.match(/\n/g) || []).length;
+ assert(nlines === o.lines, 'Invalid changeset: number of newlines in insert op does not match the charBank');
+ assert(o.lines === 0 || chars.endsWith('\n'), 'Invalid changeset: multiline insert op does not end with a newline');
+ charBank = charBank.slice(o.chars);
+ calcNewLen += o.chars;
+ assert(calcNewLen <= newLen, `${calcNewLen} > ${newLen} in ${cs}`);
+ break;
+ }
+ default:
+ assert(false, `Invalid changeset: Unknown opcode: ${JSON.stringify(o.opcode)}`);
+ }
+ assem.append(o);
+ }
+ calcNewLen += oldLen - oldPos;
+ assert(calcNewLen === newLen, 'Invalid changeset: claimed length does not match actual length');
+ assert(charBank === '', 'Invalid changeset: excess characters in the charBank');
+ assem.endDocument();
+ const normalized = exports.pack(oldLen, calcNewLen, assem.toString(), unpacked.charBank);
+ assert(normalized === cs, 'Invalid changeset: not in canonical form');
+ return cs;
};
export const smartOpAssembler = () => {
- const minusAssem = exports.mergingOpAssembler();
- const plusAssem = exports.mergingOpAssembler();
- const keepAssem = exports.mergingOpAssembler();
- const assem = exports.stringAssembler();
- let lastOpcode = '';
- let lengthChange = 0;
- const flushKeeps = () => {
- assem.append(keepAssem.toString());
- keepAssem.clear();
- };
- const flushPlusMinus = () => {
- assem.append(minusAssem.toString());
- minusAssem.clear();
- assem.append(plusAssem.toString());
- plusAssem.clear();
- };
- const append = (op) => {
- if (!op.opcode)
- return;
- if (!op.chars)
- return;
- if (op.opcode === '-') {
- if (lastOpcode === '=') {
- flushKeeps();
- }
- minusAssem.append(op);
- lengthChange -= op.chars;
- }
- else if (op.opcode === '+') {
- if (lastOpcode === '=') {
- flushKeeps();
- }
- plusAssem.append(op);
- lengthChange += op.chars;
- }
- else if (op.opcode === '=') {
- if (lastOpcode !== '=') {
+ const minusAssem = exports.mergingOpAssembler();
+ const plusAssem = exports.mergingOpAssembler();
+ const keepAssem = exports.mergingOpAssembler();
+ const assem = exports.stringAssembler();
+ let lastOpcode = '';
+ let lengthChange = 0;
+ const flushKeeps = () => {
+ assem.append(keepAssem.toString());
+ keepAssem.clear();
+ };
+ const flushPlusMinus = () => {
+ assem.append(minusAssem.toString());
+ minusAssem.clear();
+ assem.append(plusAssem.toString());
+ plusAssem.clear();
+ };
+ const append = (op) => {
+ if (!op.opcode)
+ return;
+ if (!op.chars)
+ return;
+ if (op.opcode === '-') {
+ if (lastOpcode === '=') {
+ flushKeeps();
+ }
+ minusAssem.append(op);
+ lengthChange -= op.chars;
+ }
+ else if (op.opcode === '+') {
+ if (lastOpcode === '=') {
+ flushKeeps();
+ }
+ plusAssem.append(op);
+ lengthChange += op.chars;
+ }
+ else if (op.opcode === '=') {
+ if (lastOpcode !== '=') {
+ flushPlusMinus();
+ }
+ keepAssem.append(op);
+ }
+ lastOpcode = op.opcode;
+ };
+ /**
+ * Generates operations from the given text and attributes.
+ *
+ * @deprecated Use `opsFromText` instead.
+ * @param {('-'|'+'|'=')} opcode - The operator to use.
+ * @param {string} text - The text to remove/add/keep.
+ * @param {(string|Iterable)} attribs - The attributes to apply to the operations.
+ * @param {?AttributePool} pool - Attribute pool. Only required if `attribs` is an iterable of
+ * attribute key, value pairs.
+ */
+ const appendOpWithText = (opcode, text, attribs, pool) => {
+ padutils.warnDeprecated('Changeset.smartOpAssembler().appendOpWithText() is deprecated; ' +
+ 'use opsFromText() instead.');
+ for (const op of opsFromText(opcode, text, attribs, pool))
+ append(op);
+ };
+ const toString = () => {
flushPlusMinus();
- }
- keepAssem.append(op);
- }
- lastOpcode = op.opcode;
- };
- /**
- * Generates operations from the given text and attributes.
- *
- * @deprecated Use `opsFromText` instead.
- * @param {('-'|'+'|'=')} opcode - The operator to use.
- * @param {string} text - The text to remove/add/keep.
- * @param {(string|Iterable)} attribs - The attributes to apply to the operations.
- * @param {?AttributePool} pool - Attribute pool. Only required if `attribs` is an iterable of
- * attribute key, value pairs.
- */
- const appendOpWithText = (opcode, text, attribs, pool) => {
- padutils.warnDeprecated('Changeset.smartOpAssembler().appendOpWithText() is deprecated; ' +
- 'use opsFromText() instead.');
- for (const op of opsFromText(opcode, text, attribs, pool))
- append(op);
- };
- const toString = () => {
- flushPlusMinus();
- flushKeeps();
- return assem.toString();
- };
- const clear = () => {
- minusAssem.clear();
- plusAssem.clear();
- keepAssem.clear();
- assem.clear();
- lengthChange = 0;
- };
- const endDocument = () => {
- keepAssem.endDocument();
- };
- const getLengthChange = () => lengthChange;
- return {
- append,
- toString,
- clear,
- endDocument,
- appendOpWithText,
- getLengthChange,
- };
+ flushKeeps();
+ return assem.toString();
+ };
+ const clear = () => {
+ minusAssem.clear();
+ plusAssem.clear();
+ keepAssem.clear();
+ assem.clear();
+ lengthChange = 0;
+ };
+ const endDocument = () => {
+ keepAssem.endDocument();
+ };
+ const getLengthChange = () => lengthChange;
+ return {
+ append,
+ toString,
+ clear,
+ endDocument,
+ appendOpWithText,
+ getLengthChange,
+ };
};
export const mergingOpAssembler = () => {
- const assem = exports.opAssembler();
- const bufOp = new Op();
- // If we get, for example, insertions [xxx\n,yyy], those don't merge,
- // but if we get [xxx\n,yyy,zzz\n], that merges to [xxx\nyyyzzz\n].
- // This variable stores the length of yyy and any other newline-less
- // ops immediately after it.
- let bufOpAdditionalCharsAfterNewline = 0;
- /**
- * @param {boolean} [isEndDocument]
- */
- const flush = (isEndDocument) => {
- if (!bufOp.opcode)
- return;
- if (isEndDocument && bufOp.opcode === '=' && !bufOp.attribs) {
- // final merged keep, leave it implicit
- }
- else {
- assem.append(bufOp);
- if (bufOpAdditionalCharsAfterNewline) {
- bufOp.chars = bufOpAdditionalCharsAfterNewline;
- bufOp.lines = 0;
- assem.append(bufOp);
- bufOpAdditionalCharsAfterNewline = 0;
- }
- }
- bufOp.opcode = '';
- };
- const append = (op) => {
- if (op.chars <= 0)
- return;
- if (bufOp.opcode === op.opcode && bufOp.attribs === op.attribs) {
- if (op.lines > 0) {
- // bufOp and additional chars are all mergeable into a multi-line op
- bufOp.chars += bufOpAdditionalCharsAfterNewline + op.chars;
- bufOp.lines += op.lines;
- bufOpAdditionalCharsAfterNewline = 0;
- }
- else if (bufOp.lines === 0) {
- // both bufOp and op are in-line
- bufOp.chars += op.chars;
- }
- else {
- // append in-line text to multi-line bufOp
- bufOpAdditionalCharsAfterNewline += op.chars;
- }
- }
- else {
- flush();
- copyOp(op, bufOp);
- }
- };
- const endDocument = () => {
- flush(true);
- };
- const toString = () => {
- flush();
- return assem.toString();
- };
- const clear = () => {
- assem.clear();
- clearOp(bufOp);
- };
- return {
- append,
- toString,
- clear,
- endDocument,
- };
+ const assem = exports.opAssembler();
+ const bufOp = new Op();
+ // If we get, for example, insertions [xxx\n,yyy], those don't merge,
+ // but if we get [xxx\n,yyy,zzz\n], that merges to [xxx\nyyyzzz\n].
+ // This variable stores the length of yyy and any other newline-less
+ // ops immediately after it.
+ let bufOpAdditionalCharsAfterNewline = 0;
+ /**
+ * @param {boolean} [isEndDocument]
+ */
+ const flush = (isEndDocument) => {
+ if (!bufOp.opcode)
+ return;
+ if (isEndDocument && bufOp.opcode === '=' && !bufOp.attribs) {
+ // final merged keep, leave it implicit
+ }
+ else {
+ assem.append(bufOp);
+ if (bufOpAdditionalCharsAfterNewline) {
+ bufOp.chars = bufOpAdditionalCharsAfterNewline;
+ bufOp.lines = 0;
+ assem.append(bufOp);
+ bufOpAdditionalCharsAfterNewline = 0;
+ }
+ }
+ bufOp.opcode = '';
+ };
+ const append = (op) => {
+ if (op.chars <= 0)
+ return;
+ if (bufOp.opcode === op.opcode && bufOp.attribs === op.attribs) {
+ if (op.lines > 0) {
+ // bufOp and additional chars are all mergeable into a multi-line op
+ bufOp.chars += bufOpAdditionalCharsAfterNewline + op.chars;
+ bufOp.lines += op.lines;
+ bufOpAdditionalCharsAfterNewline = 0;
+ }
+ else if (bufOp.lines === 0) {
+ // both bufOp and op are in-line
+ bufOp.chars += op.chars;
+ }
+ else {
+ // append in-line text to multi-line bufOp
+ bufOpAdditionalCharsAfterNewline += op.chars;
+ }
+ }
+ else {
+ flush();
+ copyOp(op, bufOp);
+ }
+ };
+ const endDocument = () => {
+ flush(true);
+ };
+ const toString = () => {
+ flush();
+ return assem.toString();
+ };
+ const clear = () => {
+ assem.clear();
+ clearOp(bufOp);
+ };
+ return {
+ append,
+ toString,
+ clear,
+ endDocument,
+ };
};
export const opAssembler = () => {
- let serialized = '';
- /**
- * @param {Op} op - Operation to add. Ownership remains with the caller.
- */
- const append = (op) => {
- assert(op instanceof Op, 'argument must be an instance of Op');
- serialized += op.toString();
- };
- const toString = () => serialized;
- const clear = () => {
- serialized = '';
- };
- return {
- append,
- toString,
- clear,
- };
+ let serialized = '';
+ /**
+ * @param {Op} op - Operation to add. Ownership remains with the caller.
+ */
+ const append = (op) => {
+ assert(op instanceof Op, 'argument must be an instance of Op');
+ serialized += op.toString();
+ };
+ const toString = () => serialized;
+ const clear = () => {
+ serialized = '';
+ };
+ return {
+ append,
+ toString,
+ clear,
+ };
};
export const stringIterator = (str) => {
- let curIndex = 0;
- // newLines is the number of \n between curIndex and str.length
- let newLines = str.split('\n').length - 1;
- const getnewLines = () => newLines;
- const assertRemaining = (n) => {
- assert(n <= remaining(), `!(${n} <= ${remaining()})`);
- };
- const take = (n) => {
- assertRemaining(n);
- const s = str.substr(curIndex, n);
- newLines -= s.split('\n').length - 1;
- curIndex += n;
- return s;
- };
- const peek = (n) => {
- assertRemaining(n);
- const s = str.substr(curIndex, n);
- return s;
- };
- const skip = (n) => {
- assertRemaining(n);
- curIndex += n;
- };
- const remaining = () => str.length - curIndex;
- return {
- take,
- skip,
- remaining,
- peek,
- newlines: getnewLines,
- };
+ let curIndex = 0;
+ // newLines is the number of \n between curIndex and str.length
+ let newLines = str.split('\n').length - 1;
+ const getnewLines = () => newLines;
+ const assertRemaining = (n) => {
+ assert(n <= remaining(), `!(${n} <= ${remaining()})`);
+ };
+ const take = (n) => {
+ assertRemaining(n);
+ const s = str.substr(curIndex, n);
+ newLines -= s.split('\n').length - 1;
+ curIndex += n;
+ return s;
+ };
+ const peek = (n) => {
+ assertRemaining(n);
+ const s = str.substr(curIndex, n);
+ return s;
+ };
+ const skip = (n) => {
+ assertRemaining(n);
+ curIndex += n;
+ };
+ const remaining = () => str.length - curIndex;
+ return {
+ take,
+ skip,
+ remaining,
+ peek,
+ newlines: getnewLines,
+ };
};
export const stringAssembler = () => ({
- _str: '',
- clear() { this._str = ''; },
- /**
- * @param {string} x -
- */
- append(x) { this._str += String(x); },
- toString() { return this._str; },
+ _str: '',
+ clear() { this._str = ''; },
+ /**
+ * @param {string} x -
+ */
+ append(x) { this._str += String(x); },
+ toString() { return this._str; },
});
export const unpack = (cs) => {
- const headerRegex = /Z:([0-9a-z]+)([><])([0-9a-z]+)|/;
- const headerMatch = headerRegex.exec(cs);
- if ((!headerMatch) || (!headerMatch[0]))
- error(`Not a changeset: ${cs}`);
- const oldLen = exports.parseNum(headerMatch[1]);
- const changeSign = (headerMatch[2] === '>') ? 1 : -1;
- const changeMag = exports.parseNum(headerMatch[3]);
- const newLen = oldLen + changeSign * changeMag;
- const opsStart = headerMatch[0].length;
- let opsEnd = cs.indexOf('$');
- if (opsEnd < 0)
- opsEnd = cs.length;
- return {
- oldLen,
- newLen,
- ops: cs.substring(opsStart, opsEnd),
- charBank: cs.substring(opsEnd + 1),
- };
+ const headerRegex = /Z:([0-9a-z]+)([><])([0-9a-z]+)|/;
+ const headerMatch = headerRegex.exec(cs);
+ if ((!headerMatch) || (!headerMatch[0]))
+ error(`Not a changeset: ${cs}`);
+ const oldLen = exports.parseNum(headerMatch[1]);
+ const changeSign = (headerMatch[2] === '>') ? 1 : -1;
+ const changeMag = exports.parseNum(headerMatch[3]);
+ const newLen = oldLen + changeSign * changeMag;
+ const opsStart = headerMatch[0].length;
+ let opsEnd = cs.indexOf('$');
+ if (opsEnd < 0)
+ opsEnd = cs.length;
+ return {
+ oldLen,
+ newLen,
+ ops: cs.substring(opsStart, opsEnd),
+ charBank: cs.substring(opsEnd + 1),
+ };
};
export const pack = (oldLen, newLen, opsStr, bank) => {
- const lenDiff = newLen - oldLen;
- const lenDiffStr = (lenDiff >= 0 ? `>${exports.numToString(lenDiff)}`
- : `<${exports.numToString(-lenDiff)}`);
- const a = [];
- a.push('Z:', exports.numToString(oldLen), lenDiffStr, opsStr, '$', bank);
- return a.join('');
+ const lenDiff = newLen - oldLen;
+ const lenDiffStr = (lenDiff >= 0 ? `>${exports.numToString(lenDiff)}`
+ : `<${exports.numToString(-lenDiff)}`);
+ const a = [];
+ a.push('Z:', exports.numToString(oldLen), lenDiffStr, opsStr, '$', bank);
+ return a.join('');
};
export const applyToText = (cs, str) => {
- const unpacked = exports.unpack(cs);
- assert(str.length === unpacked.oldLen, `mismatched apply: ${str.length} / ${unpacked.oldLen}`);
- const bankIter = exports.stringIterator(unpacked.charBank);
- const strIter = exports.stringIterator(str);
- const assem = exports.stringAssembler();
- for (const op of exports.deserializeOps(unpacked.ops)) {
- switch (op.opcode) {
- case '+':
- // op is + and op.lines 0: no newlines must be in op.chars
- // op is + and op.lines >0: op.chars must include op.lines newlines
- if (op.lines !== bankIter.peek(op.chars).split('\n').length - 1) {
- throw new Error(`newline count is wrong in op +; cs:${cs} and text:${str}`);
- }
- assem.append(bankIter.take(op.chars));
- break;
- case '-':
- // op is - and op.lines 0: no newlines must be in the deleted string
- // op is - and op.lines >0: op.lines newlines must be in the deleted string
- if (op.lines !== strIter.peek(op.chars).split('\n').length - 1) {
- throw new Error(`newline count is wrong in op -; cs:${cs} and text:${str}`);
- }
- strIter.skip(op.chars);
- break;
- case '=':
- // op is = and op.lines 0: no newlines must be in the copied string
- // op is = and op.lines >0: op.lines newlines must be in the copied string
- if (op.lines !== strIter.peek(op.chars).split('\n').length - 1) {
- throw new Error(`newline count is wrong in op =; cs:${cs} and text:${str}`);
- }
- assem.append(strIter.take(op.chars));
- break;
+ const unpacked = exports.unpack(cs);
+ assert(str.length === unpacked.oldLen, `mismatched apply: ${str.length} / ${unpacked.oldLen}`);
+ const bankIter = exports.stringIterator(unpacked.charBank);
+ const strIter = exports.stringIterator(str);
+ const assem = exports.stringAssembler();
+ for (const op of exports.deserializeOps(unpacked.ops)) {
+ switch (op.opcode) {
+ case '+':
+ // op is + and op.lines 0: no newlines must be in op.chars
+ // op is + and op.lines >0: op.chars must include op.lines newlines
+ if (op.lines !== bankIter.peek(op.chars).split('\n').length - 1) {
+ throw new Error(`newline count is wrong in op +; cs:${cs} and text:${str}`);
+ }
+ assem.append(bankIter.take(op.chars));
+ break;
+ case '-':
+ // op is - and op.lines 0: no newlines must be in the deleted string
+ // op is - and op.lines >0: op.lines newlines must be in the deleted string
+ if (op.lines !== strIter.peek(op.chars).split('\n').length - 1) {
+ throw new Error(`newline count is wrong in op -; cs:${cs} and text:${str}`);
+ }
+ strIter.skip(op.chars);
+ break;
+ case '=':
+ // op is = and op.lines 0: no newlines must be in the copied string
+ // op is = and op.lines >0: op.lines newlines must be in the copied string
+ if (op.lines !== strIter.peek(op.chars).split('\n').length - 1) {
+ throw new Error(`newline count is wrong in op =; cs:${cs} and text:${str}`);
+ }
+ assem.append(strIter.take(op.chars));
+ break;
+ }
}
- }
- assem.append(strIter.take(strIter.remaining()));
- return assem.toString();
+ assem.append(strIter.take(strIter.remaining()));
+ return assem.toString();
};
export const mutateTextLines = (cs, lines) => {
- const unpacked = exports.unpack(cs);
- const bankIter = exports.stringIterator(unpacked.charBank);
- const mut = new TextLinesMutator(lines);
- for (const op of exports.deserializeOps(unpacked.ops)) {
- switch (op.opcode) {
- case '+':
- mut.insert(bankIter.take(op.chars), op.lines);
- break;
- case '-':
- mut.remove(op.chars, op.lines);
- break;
- case '=':
- mut.skip(op.chars, op.lines, (!!op.attribs));
- break;
+ const unpacked = exports.unpack(cs);
+ const bankIter = exports.stringIterator(unpacked.charBank);
+ const mut = new TextLinesMutator(lines);
+ for (const op of exports.deserializeOps(unpacked.ops)) {
+ switch (op.opcode) {
+ case '+':
+ mut.insert(bankIter.take(op.chars), op.lines);
+ break;
+ case '-':
+ mut.remove(op.chars, op.lines);
+ break;
+ case '=':
+ mut.skip(op.chars, op.lines, (!!op.attribs));
+ break;
+ }
}
- }
- mut.close();
+ mut.close();
};
export const composeAttributes = (att1, att2, resultIsMutation, pool) => {
- // att1 and att2 are strings like "*3*f*1c", asMutation is a boolean.
- // Sometimes attribute (key,value) pairs are treated as attribute presence
- // information, while other times they are treated as operations that
- // mutate a set of attributes, and this affects whether an empty value
- // is a deletion or a change.
- // Examples, of the form (att1Items, att2Items, resultIsMutation) -> result
- // ([], [(bold, )], true) -> [(bold, )]
- // ([], [(bold, )], false) -> []
- // ([], [(bold, true)], true) -> [(bold, true)]
- // ([], [(bold, true)], false) -> [(bold, true)]
- // ([(bold, true)], [(bold, )], true) -> [(bold, )]
- // ([(bold, true)], [(bold, )], false) -> []
- // pool can be null if att2 has no attributes.
- if ((!att1) && resultIsMutation) {
- // In the case of a mutation (i.e. composing two exportss),
- // an att2 composed with an empy att1 is just att2. If att1
- // is part of an attribution string, then att2 may remove
- // attributes that are already gone, so don't do this optimization.
- return att2;
- }
- if (!att2)
- return att1;
- return AttributeMap.fromString(att1, pool).updateFromString(att2, !resultIsMutation).toString();
+ // att1 and att2 are strings like "*3*f*1c", asMutation is a boolean.
+ // Sometimes attribute (key,value) pairs are treated as attribute presence
+ // information, while other times they are treated as operations that
+ // mutate a set of attributes, and this affects whether an empty value
+ // is a deletion or a change.
+ // Examples, of the form (att1Items, att2Items, resultIsMutation) -> result
+ // ([], [(bold, )], true) -> [(bold, )]
+ // ([], [(bold, )], false) -> []
+ // ([], [(bold, true)], true) -> [(bold, true)]
+ // ([], [(bold, true)], false) -> [(bold, true)]
+ // ([(bold, true)], [(bold, )], true) -> [(bold, )]
+ // ([(bold, true)], [(bold, )], false) -> []
+ // pool can be null if att2 has no attributes.
+ if ((!att1) && resultIsMutation) {
+ // In the case of a mutation (i.e. composing two exportss),
+ // an att2 composed with an empy att1 is just att2. If att1
+ // is part of an attribution string, then att2 may remove
+ // attributes that are already gone, so don't do this optimization.
+ return att2;
+ }
+ if (!att2)
+ return att1;
+ return AttributeMap.fromString(att1, pool).updateFromString(att2, !resultIsMutation).toString();
};
export const applyToAttribution = (cs, astr, pool) => {
- const unpacked = exports.unpack(cs);
- return applyZip(astr, unpacked.ops, (op1, op2) => slicerZipperFunc(op1, op2, pool));
+ const unpacked = exports.unpack(cs);
+ return applyZip(astr, unpacked.ops, (op1, op2) => slicerZipperFunc(op1, op2, pool));
};
export const mutateAttributionLines = (cs, lines, pool) => {
- const unpacked = exports.unpack(cs);
- const csOps = exports.deserializeOps(unpacked.ops);
- let csOpsNext = csOps.next();
- const csBank = unpacked.charBank;
- let csBankIndex = 0;
- // treat the attribution lines as text lines, mutating a line at a time
- const mut = new TextLinesMutator(lines);
- /**
- * The Ops in the current line from `lines`.
- *
- * @type {?Generator}
- */
- let lineOps = null;
- let lineOpsNext = null;
- const lineOpsHasNext = () => lineOpsNext && !lineOpsNext.done;
- /**
- * Returns false if we are on the last attribute line in `lines` and there is no additional op in
- * that line.
- *
- * @returns {boolean} True if there are more ops to go through.
- */
- const isNextMutOp = () => lineOpsHasNext() || mut.hasMore();
- /**
- * @returns {Op} The next Op from `lineIter`. If there are no more Ops, `lineIter` is reset to
- * iterate over the next line, which is consumed from `mut`. If there are no more lines,
- * returns a null Op.
- */
- const nextMutOp = () => {
- if (!lineOpsHasNext() && mut.hasMore()) {
- // There are more attribute lines in `lines` to do AND either we just started so `lineIter` is
- // still null or there are no more ops in current `lineIter`.
- const line = mut.removeLines(1);
- lineOps = exports.deserializeOps(line);
- lineOpsNext = lineOps.next();
- }
- if (!lineOpsHasNext())
- return new Op(); // No more ops and no more lines.
- const op = lineOpsNext.value;
- lineOpsNext = lineOps.next();
- return op;
- };
- let lineAssem = null;
- /**
- * Appends an op to `lineAssem`. In case `lineAssem` includes one single newline, adds it to the
- * `lines` mutator.
- */
- const outputMutOp = (op) => {
- if (!lineAssem) {
- lineAssem = exports.mergingOpAssembler();
- }
- lineAssem.append(op);
- if (op.lines <= 0)
- return;
- assert(op.lines === 1, `Can't have op.lines of ${op.lines} in attribution lines`);
- // ship it to the mut
- mut.insert(lineAssem.toString(), 1);
- lineAssem = null;
- };
- let csOp = new Op();
- let attOp = new Op();
- while (csOp.opcode || !csOpsNext.done || attOp.opcode || isNextMutOp()) {
- if (!csOp.opcode && !csOpsNext.done) {
- // coOp done, but more ops in cs.
- csOp = csOpsNext.value;
- csOpsNext = csOps.next();
- }
- if (!csOp.opcode && !attOp.opcode && !lineAssem && !lineOpsHasNext()) {
- break; // done
- }
- else if (csOp.opcode === '=' && csOp.lines > 0 && !csOp.attribs && !attOp.opcode &&
- !lineAssem && !lineOpsHasNext()) {
- // Skip multiple lines without attributes; this is what makes small changes not order of the
- // document size.
- mut.skipLines(csOp.lines);
- csOp.opcode = '';
- }
- else if (csOp.opcode === '+') {
- const opOut = copyOp(csOp);
- if (csOp.lines > 1) {
- // Copy the first line from `csOp` to `opOut`.
- const firstLineLen = csBank.indexOf('\n', csBankIndex) + 1 - csBankIndex;
- csOp.chars -= firstLineLen;
- csOp.lines--;
- opOut.lines = 1;
- opOut.chars = firstLineLen;
- }
- else {
- // Either one or no newlines in '+' `csOp`, copy to `opOut` and reset `csOp`.
- csOp.opcode = '';
- }
- outputMutOp(opOut);
- csBankIndex += opOut.chars;
- }
- else {
- if (!attOp.opcode && isNextMutOp())
- attOp = nextMutOp();
- const opOut = slicerZipperFunc(attOp, csOp, pool);
- if (opOut.opcode)
- outputMutOp(opOut);
+ const unpacked = exports.unpack(cs);
+ const csOps = exports.deserializeOps(unpacked.ops);
+ let csOpsNext = csOps.next();
+ const csBank = unpacked.charBank;
+ let csBankIndex = 0;
+ // treat the attribution lines as text lines, mutating a line at a time
+ const mut = new TextLinesMutator(lines);
+ /**
+ * The Ops in the current line from `lines`.
+ *
+ * @type {?Generator}
+ */
+ let lineOps = null;
+ let lineOpsNext = null;
+ const lineOpsHasNext = () => lineOpsNext && !lineOpsNext.done;
+ /**
+ * Returns false if we are on the last attribute line in `lines` and there is no additional op in
+ * that line.
+ *
+ * @returns {boolean} True if there are more ops to go through.
+ */
+ const isNextMutOp = () => lineOpsHasNext() || mut.hasMore();
+ /**
+ * @returns {Op} The next Op from `lineIter`. If there are no more Ops, `lineIter` is reset to
+ * iterate over the next line, which is consumed from `mut`. If there are no more lines,
+ * returns a null Op.
+ */
+ const nextMutOp = () => {
+ if (!lineOpsHasNext() && mut.hasMore()) {
+ // There are more attribute lines in `lines` to do AND either we just started so `lineIter` is
+ // still null or there are no more ops in current `lineIter`.
+ const line = mut.removeLines(1);
+ lineOps = exports.deserializeOps(line);
+ lineOpsNext = lineOps.next();
+ }
+ if (!lineOpsHasNext())
+ return new Op(); // No more ops and no more lines.
+ const op = lineOpsNext.value;
+ lineOpsNext = lineOps.next();
+ return op;
+ };
+ let lineAssem = null;
+ /**
+ * Appends an op to `lineAssem`. In case `lineAssem` includes one single newline, adds it to the
+ * `lines` mutator.
+ */
+ const outputMutOp = (op) => {
+ if (!lineAssem) {
+ lineAssem = exports.mergingOpAssembler();
+ }
+ lineAssem.append(op);
+ if (op.lines <= 0)
+ return;
+ assert(op.lines === 1, `Can't have op.lines of ${op.lines} in attribution lines`);
+ // ship it to the mut
+ mut.insert(lineAssem.toString(), 1);
+ lineAssem = null;
+ };
+ let csOp = new Op();
+ let attOp = new Op();
+ while (csOp.opcode || !csOpsNext.done || attOp.opcode || isNextMutOp()) {
+ if (!csOp.opcode && !csOpsNext.done) {
+ // coOp done, but more ops in cs.
+ csOp = csOpsNext.value;
+ csOpsNext = csOps.next();
+ }
+ if (!csOp.opcode && !attOp.opcode && !lineAssem && !lineOpsHasNext()) {
+ break; // done
+ }
+ else if (csOp.opcode === '=' && csOp.lines > 0 && !csOp.attribs && !attOp.opcode &&
+ !lineAssem && !lineOpsHasNext()) {
+ // Skip multiple lines without attributes; this is what makes small changes not order of the
+ // document size.
+ mut.skipLines(csOp.lines);
+ csOp.opcode = '';
+ }
+ else if (csOp.opcode === '+') {
+ const opOut = copyOp(csOp);
+ if (csOp.lines > 1) {
+ // Copy the first line from `csOp` to `opOut`.
+ const firstLineLen = csBank.indexOf('\n', csBankIndex) + 1 - csBankIndex;
+ csOp.chars -= firstLineLen;
+ csOp.lines--;
+ opOut.lines = 1;
+ opOut.chars = firstLineLen;
+ }
+ else {
+ // Either one or no newlines in '+' `csOp`, copy to `opOut` and reset `csOp`.
+ csOp.opcode = '';
+ }
+ outputMutOp(opOut);
+ csBankIndex += opOut.chars;
+ }
+ else {
+ if (!attOp.opcode && isNextMutOp())
+ attOp = nextMutOp();
+ const opOut = slicerZipperFunc(attOp, csOp, pool);
+ if (opOut.opcode)
+ outputMutOp(opOut);
+ }
}
- }
- assert(!lineAssem, `line assembler not finished:${cs}`);
- mut.close();
+ assert(!lineAssem, `line assembler not finished:${cs}`);
+ mut.close();
};
export const joinAttributionLines = (theAlines) => {
- const assem = exports.mergingOpAssembler();
- for (const aline of theAlines) {
- for (const op of exports.deserializeOps(aline))
- assem.append(op);
- }
- return assem.toString();
+ const assem = exports.mergingOpAssembler();
+ for (const aline of theAlines) {
+ for (const op of exports.deserializeOps(aline))
+ assem.append(op);
+ }
+ return assem.toString();
};
export const splitAttributionLines = (attrOps, text) => {
- const assem = exports.mergingOpAssembler();
- const lines = [];
- let pos = 0;
- const appendOp = (op) => {
- assem.append(op);
- if (op.lines > 0) {
- lines.push(assem.toString());
- assem.clear();
- }
- pos += op.chars;
- };
- for (const op of exports.deserializeOps(attrOps)) {
- let numChars = op.chars;
- let numLines = op.lines;
- while (numLines > 1) {
- const newlineEnd = text.indexOf('\n', pos) + 1;
- assert(newlineEnd > 0, 'newlineEnd <= 0 in splitAttributionLines');
- op.chars = newlineEnd - pos;
- op.lines = 1;
- appendOp(op);
- numChars -= op.chars;
- numLines -= op.lines;
- }
- if (numLines === 1) {
- op.chars = numChars;
- op.lines = 1;
+ const assem = exports.mergingOpAssembler();
+ const lines = [];
+ let pos = 0;
+ const appendOp = (op) => {
+ assem.append(op);
+ if (op.lines > 0) {
+ lines.push(assem.toString());
+ assem.clear();
+ }
+ pos += op.chars;
+ };
+ for (const op of exports.deserializeOps(attrOps)) {
+ let numChars = op.chars;
+ let numLines = op.lines;
+ while (numLines > 1) {
+ const newlineEnd = text.indexOf('\n', pos) + 1;
+ assert(newlineEnd > 0, 'newlineEnd <= 0 in splitAttributionLines');
+ op.chars = newlineEnd - pos;
+ op.lines = 1;
+ appendOp(op);
+ numChars -= op.chars;
+ numLines -= op.lines;
+ }
+ if (numLines === 1) {
+ op.chars = numChars;
+ op.lines = 1;
+ }
+ appendOp(op);
}
- appendOp(op);
- }
- return lines;
+ return lines;
};
export const splitTextLines = (text) => text.match(/[^\n]*(?:\n|[^\n]$)/g);
export const compose = (cs1, cs2, pool) => {
- const unpacked1 = exports.unpack(cs1);
- const unpacked2 = exports.unpack(cs2);
- const len1 = unpacked1.oldLen;
- const len2 = unpacked1.newLen;
- assert(len2 === unpacked2.oldLen, 'mismatched composition of two changesets');
- const len3 = unpacked2.newLen;
- const bankIter1 = exports.stringIterator(unpacked1.charBank);
- const bankIter2 = exports.stringIterator(unpacked2.charBank);
- const bankAssem = exports.stringAssembler();
- const newOps = applyZip(unpacked1.ops, unpacked2.ops, (op1, op2) => {
- const op1code = op1.opcode;
- const op2code = op2.opcode;
- if (op1code === '+' && op2code === '-') {
- bankIter1.skip(Math.min(op1.chars, op2.chars));
- }
- const opOut = slicerZipperFunc(op1, op2, pool);
- if (opOut.opcode === '+') {
- if (op2code === '+') {
- bankAssem.append(bankIter2.take(opOut.chars));
- }
- else {
- bankAssem.append(bankIter1.take(opOut.chars));
- }
- }
- return opOut;
- });
- return exports.pack(len1, len3, newOps, bankAssem.toString());
+ const unpacked1 = exports.unpack(cs1);
+ const unpacked2 = exports.unpack(cs2);
+ const len1 = unpacked1.oldLen;
+ const len2 = unpacked1.newLen;
+ assert(len2 === unpacked2.oldLen, 'mismatched composition of two changesets');
+ const len3 = unpacked2.newLen;
+ const bankIter1 = exports.stringIterator(unpacked1.charBank);
+ const bankIter2 = exports.stringIterator(unpacked2.charBank);
+ const bankAssem = exports.stringAssembler();
+ const newOps = applyZip(unpacked1.ops, unpacked2.ops, (op1, op2) => {
+ const op1code = op1.opcode;
+ const op2code = op2.opcode;
+ if (op1code === '+' && op2code === '-') {
+ bankIter1.skip(Math.min(op1.chars, op2.chars));
+ }
+ const opOut = slicerZipperFunc(op1, op2, pool);
+ if (opOut.opcode === '+') {
+ if (op2code === '+') {
+ bankAssem.append(bankIter2.take(opOut.chars));
+ }
+ else {
+ bankAssem.append(bankIter1.take(opOut.chars));
+ }
+ }
+ return opOut;
+ });
+ return exports.pack(len1, len3, newOps, bankAssem.toString());
};
export const attributeTester = (attribPair, pool) => {
- const never = (attribs) => false;
- if (!pool)
- return never;
- const attribNum = pool.putAttrib(attribPair, true);
- if (attribNum < 0)
- return never;
- const re = new RegExp(`\\*${exports.numToString(attribNum)}(?!\\w)`);
- return (attribs) => re.test(attribs);
+ const never = (attribs) => false;
+ if (!pool)
+ return never;
+ const attribNum = pool.putAttrib(attribPair, true);
+ if (attribNum < 0)
+ return never;
+ const re = new RegExp(`\\*${exports.numToString(attribNum)}(?!\\w)`);
+ return (attribs) => re.test(attribs);
};
export const identity = (N) => exports.pack(N, N, '', '');
export const makeSplice = (orig, start, ndel, ins, attribs, pool) => {
- if (start < 0)
- throw new RangeError(`start index must be non-negative (is ${start})`);
- if (ndel < 0)
- throw new RangeError(`characters to delete must be non-negative (is ${ndel})`);
- if (start > orig.length)
- start = orig.length;
- if (ndel > orig.length - start)
- ndel = orig.length - start;
- const deleted = orig.substring(start, start + ndel);
- const assem = exports.smartOpAssembler();
- const ops = (function* () {
- yield* opsFromText('=', orig.substring(0, start));
- yield* opsFromText('-', deleted);
- yield* opsFromText('+', ins, attribs, pool);
- })();
- for (const op of ops)
- assem.append(op);
- assem.endDocument();
- return exports.pack(orig.length, orig.length + ins.length - ndel, assem.toString(), ins);
+ if (start < 0)
+ throw new RangeError(`start index must be non-negative (is ${start})`);
+ if (ndel < 0)
+ throw new RangeError(`characters to delete must be non-negative (is ${ndel})`);
+ if (start > orig.length)
+ start = orig.length;
+ if (ndel > orig.length - start)
+ ndel = orig.length - start;
+ const deleted = orig.substring(start, start + ndel);
+ const assem = exports.smartOpAssembler();
+ const ops = (function* () {
+ yield* opsFromText('=', orig.substring(0, start));
+ yield* opsFromText('-', deleted);
+ yield* opsFromText('+', ins, attribs, pool);
+ })();
+ for (const op of ops)
+ assem.append(op);
+ assem.endDocument();
+ return exports.pack(orig.length, orig.length + ins.length - ndel, assem.toString(), ins);
};
export const characterRangeFollow = (cs, startChar, endChar, insertionsAfter) => {
- let newStartChar = startChar;
- let newEndChar = endChar;
- let lengthChangeSoFar = 0;
- for (const splice of toSplices(cs)) {
- const spliceStart = splice[0] + lengthChangeSoFar;
- const spliceEnd = splice[1] + lengthChangeSoFar;
- const newTextLength = splice[2].length;
- const thisLengthChange = newTextLength - (spliceEnd - spliceStart);
- if (spliceStart <= newStartChar && spliceEnd >= newEndChar) {
- // splice fully replaces/deletes range
- // (also case that handles insertion at a collapsed selection)
- if (insertionsAfter) {
- newStartChar = newEndChar = spliceStart;
- }
- else {
- newStartChar = newEndChar = spliceStart + newTextLength;
- }
- }
- else if (spliceEnd <= newStartChar) {
- // splice is before range
- newStartChar += thisLengthChange;
- newEndChar += thisLengthChange;
- }
- else if (spliceStart >= newEndChar) {
- // splice is after range
- }
- else if (spliceStart >= newStartChar && spliceEnd <= newEndChar) {
- // splice is inside range
- newEndChar += thisLengthChange;
- }
- else if (spliceEnd < newEndChar) {
- // splice overlaps beginning of range
- newStartChar = spliceStart + newTextLength;
- newEndChar += thisLengthChange;
- }
- else {
- // splice overlaps end of range
- newEndChar = spliceStart;
+ let newStartChar = startChar;
+ let newEndChar = endChar;
+ let lengthChangeSoFar = 0;
+ for (const splice of toSplices(cs)) {
+ const spliceStart = splice[0] + lengthChangeSoFar;
+ const spliceEnd = splice[1] + lengthChangeSoFar;
+ const newTextLength = splice[2].length;
+ const thisLengthChange = newTextLength - (spliceEnd - spliceStart);
+ if (spliceStart <= newStartChar && spliceEnd >= newEndChar) {
+ // splice fully replaces/deletes range
+ // (also case that handles insertion at a collapsed selection)
+ if (insertionsAfter) {
+ newStartChar = newEndChar = spliceStart;
+ }
+ else {
+ newStartChar = newEndChar = spliceStart + newTextLength;
+ }
+ }
+ else if (spliceEnd <= newStartChar) {
+ // splice is before range
+ newStartChar += thisLengthChange;
+ newEndChar += thisLengthChange;
+ }
+ else if (spliceStart >= newEndChar) {
+ // splice is after range
+ }
+ else if (spliceStart >= newStartChar && spliceEnd <= newEndChar) {
+ // splice is inside range
+ newEndChar += thisLengthChange;
+ }
+ else if (spliceEnd < newEndChar) {
+ // splice overlaps beginning of range
+ newStartChar = spliceStart + newTextLength;
+ newEndChar += thisLengthChange;
+ }
+ else {
+ // splice overlaps end of range
+ newEndChar = spliceStart;
+ }
+ lengthChangeSoFar += thisLengthChange;
}
- lengthChangeSoFar += thisLengthChange;
- }
- return [newStartChar, newEndChar];
+ return [newStartChar, newEndChar];
};
export const moveOpsToNewPool = (cs, oldPool, newPool) => {
- // works on exports or attribution string
- let dollarPos = cs.indexOf('$');
- if (dollarPos < 0) {
- dollarPos = cs.length;
- }
- const upToDollar = cs.substring(0, dollarPos);
- const fromDollar = cs.substring(dollarPos);
- // order of attribs stays the same
- return upToDollar.replace(/\*([0-9a-z]+)/g, (_, a) => {
- const oldNum = exports.parseNum(a);
- const pair = oldPool.getAttrib(oldNum);
- // The attribute might not be in the old pool if the user is viewing the current revision in the
- // timeslider and text is deleted. See: https://github.com/ether/etherpad-lite/issues/3932
- if (!pair)
- return '';
- const newNum = newPool.putAttrib(pair);
- return `*${exports.numToString(newNum)}`;
- }) + fromDollar;
+ // works on exports or attribution string
+ let dollarPos = cs.indexOf('$');
+ if (dollarPos < 0) {
+ dollarPos = cs.length;
+ }
+ const upToDollar = cs.substring(0, dollarPos);
+ const fromDollar = cs.substring(dollarPos);
+ // order of attribs stays the same
+ return upToDollar.replace(/\*([0-9a-z]+)/g, (_, a) => {
+ const oldNum = exports.parseNum(a);
+ const pair = oldPool.getAttrib(oldNum);
+ // The attribute might not be in the old pool if the user is viewing the current revision in the
+ // timeslider and text is deleted. See: https://github.com/ether/etherpad-lite/issues/3932
+ if (!pair)
+ return '';
+ const newNum = newPool.putAttrib(pair);
+ return `*${exports.numToString(newNum)}`;
+ }) + fromDollar;
};
export const makeAttribution = (text) => {
- const assem = exports.smartOpAssembler();
- for (const op of opsFromText('+', text))
- assem.append(op);
- return assem.toString();
+ const assem = exports.smartOpAssembler();
+ for (const op of opsFromText('+', text))
+ assem.append(op);
+ return assem.toString();
};
export const eachAttribNumber = (cs, func) => {
- padutils.warnDeprecated('Changeset.eachAttribNumber() is deprecated; use attributes.decodeAttribString() instead');
- let dollarPos = cs.indexOf('$');
- if (dollarPos < 0) {
- dollarPos = cs.length;
- }
- const upToDollar = cs.substring(0, dollarPos);
- // WARNING: The following cannot be replaced with a call to `attributes.decodeAttribString()`
- // because that function only works on attribute strings, not serialized operations or changesets.
- upToDollar.replace(/\*([0-9a-z]+)/g, (_, a) => {
- func(exports.parseNum(a));
- return '';
- });
+ padutils.warnDeprecated('Changeset.eachAttribNumber() is deprecated; use attributes.decodeAttribString() instead');
+ let dollarPos = cs.indexOf('$');
+ if (dollarPos < 0) {
+ dollarPos = cs.length;
+ }
+ const upToDollar = cs.substring(0, dollarPos);
+ // WARNING: The following cannot be replaced with a call to `attributes.decodeAttribString()`
+ // because that function only works on attribute strings, not serialized operations or changesets.
+ upToDollar.replace(/\*([0-9a-z]+)/g, (_, a) => {
+ func(exports.parseNum(a));
+ return '';
+ });
};
export const filterAttribNumbers = (cs, filter) => exports.mapAttribNumbers(cs, filter);
export const mapAttribNumbers = (cs, func) => {
- let dollarPos = cs.indexOf('$');
- if (dollarPos < 0) {
- dollarPos = cs.length;
- }
- const upToDollar = cs.substring(0, dollarPos);
- const newUpToDollar = upToDollar.replace(/\*([0-9a-z]+)/g, (s, a) => {
- const n = func(exports.parseNum(a));
- if (n === true) {
- return s;
- }
- else if ((typeof n) === 'number') {
- return `*${exports.numToString(n)}`;
- }
- else {
- return '';
- }
- });
- return newUpToDollar + cs.substring(dollarPos);
+ let dollarPos = cs.indexOf('$');
+ if (dollarPos < 0) {
+ dollarPos = cs.length;
+ }
+ const upToDollar = cs.substring(0, dollarPos);
+ const newUpToDollar = upToDollar.replace(/\*([0-9a-z]+)/g, (s, a) => {
+ const n = func(exports.parseNum(a));
+ if (n === true) {
+ return s;
+ }
+ else if ((typeof n) === 'number') {
+ return `*${exports.numToString(n)}`;
+ }
+ else {
+ return '';
+ }
+ });
+ return newUpToDollar + cs.substring(dollarPos);
};
export const makeAText = (text, attribs) => ({
- text,
- attribs: (attribs || exports.makeAttribution(text)),
+ text,
+ attribs: (attribs || exports.makeAttribution(text)),
});
export const applyToAText = (cs, atext, pool) => ({
- text: exports.applyToText(cs, atext.text),
- attribs: exports.applyToAttribution(cs, atext.attribs, pool),
+ text: exports.applyToText(cs, atext.text),
+ attribs: exports.applyToAttribution(cs, atext.attribs, pool),
});
export const cloneAText = (atext) => {
- if (!atext)
- error('atext is null');
- return {
- text: atext.text,
- attribs: atext.attribs,
- };
+ if (!atext)
+ error('atext is null');
+ return {
+ text: atext.text,
+ attribs: atext.attribs,
+ };
};
export const copyAText = (atext1, atext2) => {
- atext2.text = atext1.text;
- atext2.attribs = atext1.attribs;
+ atext2.text = atext1.text;
+ atext2.attribs = atext1.attribs;
};
export const opsFromAText = function* (atext) {
- // intentionally skips last newline char of atext
- let lastOp = null;
- for (const op of exports.deserializeOps(atext.attribs)) {
- if (lastOp != null)
- yield lastOp;
- lastOp = op;
- }
- if (lastOp == null)
- return;
- // exclude final newline
- if (lastOp.lines <= 1) {
- lastOp.lines = 0;
- lastOp.chars--;
- }
- else {
- const nextToLastNewlineEnd = atext.text.lastIndexOf('\n', atext.text.length - 2) + 1;
- const lastLineLength = atext.text.length - nextToLastNewlineEnd - 1;
- lastOp.lines--;
- lastOp.chars -= (lastLineLength + 1);
- yield copyOp(lastOp);
- lastOp.lines = 0;
- lastOp.chars = lastLineLength;
- }
- if (lastOp.chars)
- yield lastOp;
+ // intentionally skips last newline char of atext
+ let lastOp = null;
+ for (const op of exports.deserializeOps(atext.attribs)) {
+ if (lastOp != null)
+ yield lastOp;
+ lastOp = op;
+ }
+ if (lastOp == null)
+ return;
+ // exclude final newline
+ if (lastOp.lines <= 1) {
+ lastOp.lines = 0;
+ lastOp.chars--;
+ }
+ else {
+ const nextToLastNewlineEnd = atext.text.lastIndexOf('\n', atext.text.length - 2) + 1;
+ const lastLineLength = atext.text.length - nextToLastNewlineEnd - 1;
+ lastOp.lines--;
+ lastOp.chars -= (lastLineLength + 1);
+ yield copyOp(lastOp);
+ lastOp.lines = 0;
+ lastOp.chars = lastLineLength;
+ }
+ if (lastOp.chars)
+ yield lastOp;
};
export const appendATextToAssembler = (atext, assem) => {
- padutils.warnDeprecated('Changeset.appendATextToAssembler() is deprecated; use Changeset.opsFromAText() instead');
- for (const op of exports.opsFromAText(atext))
- assem.append(op);
+ padutils.warnDeprecated('Changeset.appendATextToAssembler() is deprecated; use Changeset.opsFromAText() instead');
+ for (const op of exports.opsFromAText(atext))
+ assem.append(op);
};
export const prepareForWire = (cs, pool) => {
- const newPool = new AttributePool();
- const newCs = exports.moveOpsToNewPool(cs, pool, newPool);
- return {
- translated: newCs,
- pool: newPool,
- };
+ const newPool = new AttributePool();
+ const newCs = exports.moveOpsToNewPool(cs, pool, newPool);
+ return {
+ translated: newCs,
+ pool: newPool,
+ };
};
export const isIdentity = (cs) => {
- const unpacked = exports.unpack(cs);
- return unpacked.ops === '' && unpacked.oldLen === unpacked.newLen;
+ const unpacked = exports.unpack(cs);
+ return unpacked.ops === '' && unpacked.oldLen === unpacked.newLen;
};
export const opAttributeValue = (op, key, pool) => {
- padutils.warnDeprecated('Changeset.opAttributeValue() is deprecated; use an AttributeMap instead');
- return attribsAttributeValue(op.attribs, key, pool);
+ padutils.warnDeprecated('Changeset.opAttributeValue() is deprecated; use an AttributeMap instead');
+ return attribsAttributeValue(op.attribs, key, pool);
};
const attribsAttributeValue$0 = (attribs, key, pool) => {
- padutils.warnDeprecated('Changeset.attribsAttributeValue() is deprecated; use an AttributeMap instead');
- return attribsAttributeValue(attribs, key, pool);
+ padutils.warnDeprecated('Changeset.attribsAttributeValue() is deprecated; use an AttributeMap instead');
+ return attribsAttributeValue(attribs, key, pool);
};
export const builder = (oldLen) => {
- const assem = exports.smartOpAssembler();
- const o = new Op();
- const charBank = exports.stringAssembler();
- const self = {
- /**
- * @param {number} N - Number of characters to keep.
- * @param {number} L - Number of newlines among the `N` characters. If positive, the last
- * character must be a newline.
- * @param {(string|Attribute[])} attribs - Either [[key1,value1],[key2,value2],...] or '*0*1...'
- * (no pool needed in latter case).
- * @param {?AttributePool} pool - Attribute pool, only required if `attribs` is a list of
- * attribute key, value pairs.
- * @returns {Builder} this
- */
- keep: (N, L, attribs, pool) => {
- o.opcode = '=';
- o.attribs = typeof attribs === 'string'
- ? attribs : new AttributeMap(pool).update(attribs || []).toString();
- o.chars = N;
- o.lines = (L || 0);
- assem.append(o);
- return self;
- },
- /**
- * @param {string} text - Text to keep.
- * @param {(string|Attribute[])} attribs - Either [[key1,value1],[key2,value2],...] or '*0*1...'
- * (no pool needed in latter case).
- * @param {?AttributePool} pool - Attribute pool, only required if `attribs` is a list of
- * attribute key, value pairs.
- * @returns {Builder} this
- */
- keepText: (text, attribs, pool) => {
- for (const op of opsFromText('=', text, attribs, pool))
- assem.append(op);
- return self;
- },
- /**
- * @param {string} text - Text to insert.
- * @param {(string|Attribute[])} attribs - Either [[key1,value1],[key2,value2],...] or '*0*1...'
- * (no pool needed in latter case).
- * @param {?AttributePool} pool - Attribute pool, only required if `attribs` is a list of
- * attribute key, value pairs.
- * @returns {Builder} this
- */
- insert: (text, attribs, pool) => {
- for (const op of opsFromText('+', text, attribs, pool))
- assem.append(op);
- charBank.append(text);
- return self;
- },
- /**
- * @param {number} N - Number of characters to remove.
- * @param {number} L - Number of newlines among the `N` characters. If positive, the last
- * character must be a newline.
- * @returns {Builder} this
- */
- remove: (N, L) => {
- o.opcode = '-';
- o.attribs = '';
- o.chars = N;
- o.lines = (L || 0);
- assem.append(o);
- return self;
- },
- toString: () => {
- assem.endDocument();
- const newLen = oldLen + assem.getLengthChange();
- return exports.pack(oldLen, newLen, assem.toString(), charBank.toString());
- },
- };
- return self;
+ const assem = exports.smartOpAssembler();
+ const o = new Op();
+ const charBank = exports.stringAssembler();
+ const self = {
+ /**
+ * @param {number} N - Number of characters to keep.
+ * @param {number} L - Number of newlines among the `N` characters. If positive, the last
+ * character must be a newline.
+ * @param {(string|Attribute[])} attribs - Either [[key1,value1],[key2,value2],...] or '*0*1...'
+ * (no pool needed in latter case).
+ * @param {?AttributePool} pool - Attribute pool, only required if `attribs` is a list of
+ * attribute key, value pairs.
+ * @returns {Builder} this
+ */
+ keep: (N, L, attribs, pool) => {
+ o.opcode = '=';
+ o.attribs = typeof attribs === 'string'
+ ? attribs : new AttributeMap(pool).update(attribs || []).toString();
+ o.chars = N;
+ o.lines = (L || 0);
+ assem.append(o);
+ return self;
+ },
+ /**
+ * @param {string} text - Text to keep.
+ * @param {(string|Attribute[])} attribs - Either [[key1,value1],[key2,value2],...] or '*0*1...'
+ * (no pool needed in latter case).
+ * @param {?AttributePool} pool - Attribute pool, only required if `attribs` is a list of
+ * attribute key, value pairs.
+ * @returns {Builder} this
+ */
+ keepText: (text, attribs, pool) => {
+ for (const op of opsFromText('=', text, attribs, pool))
+ assem.append(op);
+ return self;
+ },
+ /**
+ * @param {string} text - Text to insert.
+ * @param {(string|Attribute[])} attribs - Either [[key1,value1],[key2,value2],...] or '*0*1...'
+ * (no pool needed in latter case).
+ * @param {?AttributePool} pool - Attribute pool, only required if `attribs` is a list of
+ * attribute key, value pairs.
+ * @returns {Builder} this
+ */
+ insert: (text, attribs, pool) => {
+ for (const op of opsFromText('+', text, attribs, pool))
+ assem.append(op);
+ charBank.append(text);
+ return self;
+ },
+ /**
+ * @param {number} N - Number of characters to remove.
+ * @param {number} L - Number of newlines among the `N` characters. If positive, the last
+ * character must be a newline.
+ * @returns {Builder} this
+ */
+ remove: (N, L) => {
+ o.opcode = '-';
+ o.attribs = '';
+ o.chars = N;
+ o.lines = (L || 0);
+ assem.append(o);
+ return self;
+ },
+ toString: () => {
+ assem.endDocument();
+ const newLen = oldLen + assem.getLengthChange();
+ return exports.pack(oldLen, newLen, assem.toString(), charBank.toString());
+ },
+ };
+ return self;
};
export const makeAttribsString = (opcode, attribs, pool) => {
- padutils.warnDeprecated('Changeset.makeAttribsString() is deprecated; ' +
- 'use AttributeMap.prototype.toString() or attributes.attribsToString() instead');
- if (!attribs || !['=', '+'].includes(opcode))
- return '';
- if (typeof attribs === 'string')
- return attribs;
- return new AttributeMap(pool).update(attribs, opcode === '+').toString();
+ padutils.warnDeprecated('Changeset.makeAttribsString() is deprecated; ' +
+ 'use AttributeMap.prototype.toString() or attributes.attribsToString() instead');
+ if (!attribs || !['=', '+'].includes(opcode))
+ return '';
+ if (typeof attribs === 'string')
+ return attribs;
+ return new AttributeMap(pool).update(attribs, opcode === '+').toString();
};
export const subattribution = (astr, start, optEnd) => {
- const attOps = exports.deserializeOps(astr);
- let attOpsNext = attOps.next();
- const assem = exports.smartOpAssembler();
- let attOp = new Op();
- const csOp = new Op();
- const doCsOp = () => {
- if (!csOp.chars)
- return;
- while (csOp.opcode && (attOp.opcode || !attOpsNext.done)) {
- if (!attOp.opcode) {
- attOp = attOpsNext.value;
- attOpsNext = attOps.next();
- }
- if (csOp.opcode && attOp.opcode && csOp.chars >= attOp.chars &&
- attOp.lines > 0 && csOp.lines <= 0) {
- csOp.lines++;
- }
- const opOut = slicerZipperFunc(attOp, csOp, null);
- if (opOut.opcode)
- assem.append(opOut);
- }
- };
- csOp.opcode = '-';
- csOp.chars = start;
- doCsOp();
- if (optEnd === undefined) {
- if (attOp.opcode) {
- assem.append(attOp);
- }
- while (!attOpsNext.done) {
- assem.append(attOpsNext.value);
- attOpsNext = attOps.next();
- }
- }
- else {
- csOp.opcode = '=';
- csOp.chars = optEnd - start;
+ const attOps = exports.deserializeOps(astr);
+ let attOpsNext = attOps.next();
+ const assem = exports.smartOpAssembler();
+ let attOp = new Op();
+ const csOp = new Op();
+ const doCsOp = () => {
+ if (!csOp.chars)
+ return;
+ while (csOp.opcode && (attOp.opcode || !attOpsNext.done)) {
+ if (!attOp.opcode) {
+ attOp = attOpsNext.value;
+ attOpsNext = attOps.next();
+ }
+ if (csOp.opcode && attOp.opcode && csOp.chars >= attOp.chars &&
+ attOp.lines > 0 && csOp.lines <= 0) {
+ csOp.lines++;
+ }
+ const opOut = slicerZipperFunc(attOp, csOp, null);
+ if (opOut.opcode)
+ assem.append(opOut);
+ }
+ };
+ csOp.opcode = '-';
+ csOp.chars = start;
doCsOp();
- }
- return assem.toString();
-};
-export const inverse = (cs, lines, alines, pool) => {
- // lines and alines are what the exports is meant to apply to.
- // They may be arrays or objects with .get(i) and .length methods.
- // They include final newlines on lines.
- const linesGet = (idx) => {
- if (lines.get) {
- return lines.get(idx);
- }
- else {
- return lines[idx];
- }
- };
- /**
- * @param {number} idx -
- * @returns {string}
- */
- const alinesGet = (idx) => {
- if (alines.get) {
- return alines.get(idx);
+ if (optEnd === undefined) {
+ if (attOp.opcode) {
+ assem.append(attOp);
+ }
+ while (!attOpsNext.done) {
+ assem.append(attOpsNext.value);
+ attOpsNext = attOps.next();
+ }
}
else {
- return alines[idx];
- }
- };
- let curLine = 0;
- let curChar = 0;
- let curLineOps = null;
- let curLineOpsNext = null;
- let curLineOpsLine;
- let curLineNextOp = new Op('+');
- const unpacked = exports.unpack(cs);
- const builder = exports.builder(unpacked.newLen);
- const consumeAttribRuns = (numChars, func /* (len, attribs, endsLine)*/) => {
- if (!curLineOps || curLineOpsLine !== curLine) {
- curLineOps = exports.deserializeOps(alinesGet(curLine));
- curLineOpsNext = curLineOps.next();
- curLineOpsLine = curLine;
- let indexIntoLine = 0;
- while (!curLineOpsNext.done) {
- curLineNextOp = curLineOpsNext.value;
- curLineOpsNext = curLineOps.next();
- if (indexIntoLine + curLineNextOp.chars >= curChar) {
- curLineNextOp.chars -= (curChar - indexIntoLine);
- break;
- }
- indexIntoLine += curLineNextOp.chars;
- }
+ csOp.opcode = '=';
+ csOp.chars = optEnd - start;
+ doCsOp();
}
- while (numChars > 0) {
- if (!curLineNextOp.chars && curLineOpsNext.done) {
- curLine++;
- curChar = 0;
- curLineOpsLine = curLine;
- curLineNextOp.chars = 0;
- curLineOps = exports.deserializeOps(alinesGet(curLine));
- curLineOpsNext = curLineOps.next();
- }
- if (!curLineNextOp.chars) {
- if (curLineOpsNext.done) {
- curLineNextOp = new Op();
+ return assem.toString();
+};
+export const inverse = (cs, lines, alines, pool) => {
+ // lines and alines are what the exports is meant to apply to.
+ // They may be arrays or objects with .get(i) and .length methods.
+ // They include final newlines on lines.
+ const linesGet = (idx) => {
+ if (lines.get) {
+ return lines.get(idx);
}
else {
- curLineNextOp = curLineOpsNext.value;
- curLineOpsNext = curLineOps.next();
- }
- }
- const charsToUse = Math.min(numChars, curLineNextOp.chars);
- func(charsToUse, curLineNextOp.attribs, charsToUse === curLineNextOp.chars &&
- curLineNextOp.lines > 0);
- numChars -= charsToUse;
- curLineNextOp.chars -= charsToUse;
- curChar += charsToUse;
- }
- if (!curLineNextOp.chars && curLineOpsNext.done) {
- curLine++;
- curChar = 0;
- }
- };
- const skip = (N, L) => {
- if (L) {
- curLine += L;
- curChar = 0;
- }
- else if (curLineOps && curLineOpsLine === curLine) {
- consumeAttribRuns(N, () => { });
- }
- else {
- curChar += N;
- }
- };
- const nextText = (numChars) => {
- let len = 0;
- const assem = exports.stringAssembler();
- const firstString = linesGet(curLine).substring(curChar);
- len += firstString.length;
- assem.append(firstString);
- let lineNum = curLine + 1;
- while (len < numChars) {
- const nextString = linesGet(lineNum);
- len += nextString.length;
- assem.append(nextString);
- lineNum++;
- }
- return assem.toString().substring(0, numChars);
- };
- const cachedStrFunc = (func) => {
- const cache = {};
- return (s) => {
- if (!cache[s]) {
- cache[s] = func(s);
- }
- return cache[s];
+ return lines[idx];
+ }
};
- };
- for (const csOp of exports.deserializeOps(unpacked.ops)) {
- if (csOp.opcode === '=') {
- if (csOp.attribs) {
- const attribs = AttributeMap.fromString(csOp.attribs, pool);
- const undoBackToAttribs = cachedStrFunc((oldAttribsStr) => {
- const oldAttribs = AttributeMap.fromString(oldAttribsStr, pool);
- const backAttribs = new AttributeMap(pool);
- for (const [key, value] of attribs) {
- const oldValue = oldAttribs.get(key) || '';
- if (oldValue !== value)
- backAttribs.set(key, oldValue);
- }
- // TODO: backAttribs does not restore removed attributes (it is missing attributes that
- // are in oldAttribs but not in attribs). I don't know if that is intentional.
- return backAttribs.toString();
- });
- consumeAttribRuns(csOp.chars, (len, attribs, endsLine) => {
- builder.keep(len, endsLine ? 1 : 0, undoBackToAttribs(attribs));
- });
- }
- else {
- skip(csOp.chars, csOp.lines);
- builder.keep(csOp.chars, csOp.lines);
- }
- }
- else if (csOp.opcode === '+') {
- builder.remove(csOp.chars, csOp.lines);
- }
- else if (csOp.opcode === '-') {
- const textBank = nextText(csOp.chars);
- let textBankIndex = 0;
- consumeAttribRuns(csOp.chars, (len, attribs, endsLine) => {
- builder.insert(textBank.substr(textBankIndex, len), attribs);
- textBankIndex += len;
- });
+ /**
+ * @param {number} idx -
+ * @returns {string}
+ */
+ const alinesGet = (idx) => {
+ if (alines.get) {
+ return alines.get(idx);
+ }
+ else {
+ return alines[idx];
+ }
+ };
+ let curLine = 0;
+ let curChar = 0;
+ let curLineOps = null;
+ let curLineOpsNext = null;
+ let curLineOpsLine;
+ let curLineNextOp = new Op('+');
+ const unpacked = exports.unpack(cs);
+ const builder = exports.builder(unpacked.newLen);
+ const consumeAttribRuns = (numChars, func /* (len, attribs, endsLine)*/) => {
+ if (!curLineOps || curLineOpsLine !== curLine) {
+ curLineOps = exports.deserializeOps(alinesGet(curLine));
+ curLineOpsNext = curLineOps.next();
+ curLineOpsLine = curLine;
+ let indexIntoLine = 0;
+ while (!curLineOpsNext.done) {
+ curLineNextOp = curLineOpsNext.value;
+ curLineOpsNext = curLineOps.next();
+ if (indexIntoLine + curLineNextOp.chars >= curChar) {
+ curLineNextOp.chars -= (curChar - indexIntoLine);
+ break;
+ }
+ indexIntoLine += curLineNextOp.chars;
+ }
+ }
+ while (numChars > 0) {
+ if (!curLineNextOp.chars && curLineOpsNext.done) {
+ curLine++;
+ curChar = 0;
+ curLineOpsLine = curLine;
+ curLineNextOp.chars = 0;
+ curLineOps = exports.deserializeOps(alinesGet(curLine));
+ curLineOpsNext = curLineOps.next();
+ }
+ if (!curLineNextOp.chars) {
+ if (curLineOpsNext.done) {
+ curLineNextOp = new Op();
+ }
+ else {
+ curLineNextOp = curLineOpsNext.value;
+ curLineOpsNext = curLineOps.next();
+ }
+ }
+ const charsToUse = Math.min(numChars, curLineNextOp.chars);
+ func(charsToUse, curLineNextOp.attribs, charsToUse === curLineNextOp.chars &&
+ curLineNextOp.lines > 0);
+ numChars -= charsToUse;
+ curLineNextOp.chars -= charsToUse;
+ curChar += charsToUse;
+ }
+ if (!curLineNextOp.chars && curLineOpsNext.done) {
+ curLine++;
+ curChar = 0;
+ }
+ };
+ const skip = (N, L) => {
+ if (L) {
+ curLine += L;
+ curChar = 0;
+ }
+ else if (curLineOps && curLineOpsLine === curLine) {
+ consumeAttribRuns(N, () => { });
+ }
+ else {
+ curChar += N;
+ }
+ };
+ const nextText = (numChars) => {
+ let len = 0;
+ const assem = exports.stringAssembler();
+ const firstString = linesGet(curLine).substring(curChar);
+ len += firstString.length;
+ assem.append(firstString);
+ let lineNum = curLine + 1;
+ while (len < numChars) {
+ const nextString = linesGet(lineNum);
+ len += nextString.length;
+ assem.append(nextString);
+ lineNum++;
+ }
+ return assem.toString().substring(0, numChars);
+ };
+ const cachedStrFunc = (func) => {
+ const cache = {};
+ return (s) => {
+ if (!cache[s]) {
+ cache[s] = func(s);
+ }
+ return cache[s];
+ };
+ };
+ for (const csOp of exports.deserializeOps(unpacked.ops)) {
+ if (csOp.opcode === '=') {
+ if (csOp.attribs) {
+ const attribs = AttributeMap.fromString(csOp.attribs, pool);
+ const undoBackToAttribs = cachedStrFunc((oldAttribsStr) => {
+ const oldAttribs = AttributeMap.fromString(oldAttribsStr, pool);
+ const backAttribs = new AttributeMap(pool);
+ for (const [key, value] of attribs) {
+ const oldValue = oldAttribs.get(key) || '';
+ if (oldValue !== value)
+ backAttribs.set(key, oldValue);
+ }
+ // TODO: backAttribs does not restore removed attributes (it is missing attributes that
+ // are in oldAttribs but not in attribs). I don't know if that is intentional.
+ return backAttribs.toString();
+ });
+ consumeAttribRuns(csOp.chars, (len, attribs, endsLine) => {
+ builder.keep(len, endsLine ? 1 : 0, undoBackToAttribs(attribs));
+ });
+ }
+ else {
+ skip(csOp.chars, csOp.lines);
+ builder.keep(csOp.chars, csOp.lines);
+ }
+ }
+ else if (csOp.opcode === '+') {
+ builder.remove(csOp.chars, csOp.lines);
+ }
+ else if (csOp.opcode === '-') {
+ const textBank = nextText(csOp.chars);
+ let textBankIndex = 0;
+ consumeAttribRuns(csOp.chars, (len, attribs, endsLine) => {
+ builder.insert(textBank.substr(textBankIndex, len), attribs);
+ textBankIndex += len;
+ });
+ }
}
- }
- return exports.checkRep(builder.toString());
+ return exports.checkRep(builder.toString());
};
export const follow = (cs1, cs2, reverseInsertOrder, pool) => {
- const unpacked1 = exports.unpack(cs1);
- const unpacked2 = exports.unpack(cs2);
- const len1 = unpacked1.oldLen;
- const len2 = unpacked2.oldLen;
- assert(len1 === len2, 'mismatched follow - cannot transform cs1 on top of cs2');
- const chars1 = exports.stringIterator(unpacked1.charBank);
- const chars2 = exports.stringIterator(unpacked2.charBank);
- const oldLen = unpacked1.newLen;
- let oldPos = 0;
- let newLen = 0;
- const hasInsertFirst = exports.attributeTester(['insertorder', 'first'], pool);
- const newOps = applyZip(unpacked1.ops, unpacked2.ops, (op1, op2) => {
- const opOut = new Op();
- if (op1.opcode === '+' || op2.opcode === '+') {
- let whichToDo;
- if (op2.opcode !== '+') {
- whichToDo = 1;
- }
- else if (op1.opcode !== '+') {
- whichToDo = 2;
- }
- else {
- // both +
- const firstChar1 = chars1.peek(1);
- const firstChar2 = chars2.peek(1);
- const insertFirst1 = hasInsertFirst(op1.attribs);
- const insertFirst2 = hasInsertFirst(op2.attribs);
- if (insertFirst1 && !insertFirst2) {
- whichToDo = 1;
- }
- else if (insertFirst2 && !insertFirst1) {
- whichToDo = 2;
- }
- else if (firstChar1 === '\n' && firstChar2 !== '\n') {
- // insert string that doesn't start with a newline first so as not to break up lines
- whichToDo = 2;
- }
- else if (firstChar1 !== '\n' && firstChar2 === '\n') {
- whichToDo = 1;
- }
- else if (reverseInsertOrder) {
- // break symmetry:
- whichToDo = 2;
+ const unpacked1 = exports.unpack(cs1);
+ const unpacked2 = exports.unpack(cs2);
+ const len1 = unpacked1.oldLen;
+ const len2 = unpacked2.oldLen;
+ assert(len1 === len2, 'mismatched follow - cannot transform cs1 on top of cs2');
+ const chars1 = exports.stringIterator(unpacked1.charBank);
+ const chars2 = exports.stringIterator(unpacked2.charBank);
+ const oldLen = unpacked1.newLen;
+ let oldPos = 0;
+ let newLen = 0;
+ const hasInsertFirst = exports.attributeTester(['insertorder', 'first'], pool);
+ const newOps = applyZip(unpacked1.ops, unpacked2.ops, (op1, op2) => {
+ const opOut = new Op();
+ if (op1.opcode === '+' || op2.opcode === '+') {
+ let whichToDo;
+ if (op2.opcode !== '+') {
+ whichToDo = 1;
+ }
+ else if (op1.opcode !== '+') {
+ whichToDo = 2;
+ }
+ else {
+ // both +
+ const firstChar1 = chars1.peek(1);
+ const firstChar2 = chars2.peek(1);
+ const insertFirst1 = hasInsertFirst(op1.attribs);
+ const insertFirst2 = hasInsertFirst(op2.attribs);
+ if (insertFirst1 && !insertFirst2) {
+ whichToDo = 1;
+ }
+ else if (insertFirst2 && !insertFirst1) {
+ whichToDo = 2;
+ }
+ else if (firstChar1 === '\n' && firstChar2 !== '\n') {
+ // insert string that doesn't start with a newline first so as not to break up lines
+ whichToDo = 2;
+ }
+ else if (firstChar1 !== '\n' && firstChar2 === '\n') {
+ whichToDo = 1;
+ }
+ else if (reverseInsertOrder) {
+ // break symmetry:
+ whichToDo = 2;
+ }
+ else {
+ whichToDo = 1;
+ }
+ }
+ if (whichToDo === 1) {
+ chars1.skip(op1.chars);
+ opOut.opcode = '=';
+ opOut.lines = op1.lines;
+ opOut.chars = op1.chars;
+ opOut.attribs = '';
+ op1.opcode = '';
+ }
+ else {
+ // whichToDo == 2
+ chars2.skip(op2.chars);
+ copyOp(op2, opOut);
+ op2.opcode = '';
+ }
+ }
+ else if (op1.opcode === '-') {
+ if (!op2.opcode) {
+ op1.opcode = '';
+ }
+ else if (op1.chars <= op2.chars) {
+ op2.chars -= op1.chars;
+ op2.lines -= op1.lines;
+ op1.opcode = '';
+ if (!op2.chars) {
+ op2.opcode = '';
+ }
+ }
+ else {
+ op1.chars -= op2.chars;
+ op1.lines -= op2.lines;
+ op2.opcode = '';
+ }
+ }
+ else if (op2.opcode === '-') {
+ copyOp(op2, opOut);
+ if (!op1.opcode) {
+ op2.opcode = '';
+ }
+ else if (op2.chars <= op1.chars) {
+ // delete part or all of a keep
+ op1.chars -= op2.chars;
+ op1.lines -= op2.lines;
+ op2.opcode = '';
+ if (!op1.chars) {
+ op1.opcode = '';
+ }
+ }
+ else {
+ // delete all of a keep, and keep going
+ opOut.lines = op1.lines;
+ opOut.chars = op1.chars;
+ op2.lines -= op1.lines;
+ op2.chars -= op1.chars;
+ op1.opcode = '';
+ }
+ }
+ else if (!op1.opcode) {
+ copyOp(op2, opOut);
+ op2.opcode = '';
+ }
+ else if (!op2.opcode) {
+ // @NOTE: Critical bugfix for EPL issue #1625. We do not copy op1 here
+ // in order to prevent attributes from leaking into result changesets.
+ // copyOp(op1, opOut);
+ op1.opcode = '';
}
else {
- whichToDo = 1;
- }
- }
- if (whichToDo === 1) {
- chars1.skip(op1.chars);
- opOut.opcode = '=';
- opOut.lines = op1.lines;
- opOut.chars = op1.chars;
- opOut.attribs = '';
- op1.opcode = '';
- }
- else {
- // whichToDo == 2
- chars2.skip(op2.chars);
- copyOp(op2, opOut);
- op2.opcode = '';
- }
- }
- else if (op1.opcode === '-') {
- if (!op2.opcode) {
- op1.opcode = '';
- }
- else if (op1.chars <= op2.chars) {
- op2.chars -= op1.chars;
- op2.lines -= op1.lines;
- op1.opcode = '';
- if (!op2.chars) {
- op2.opcode = '';
- }
- }
- else {
- op1.chars -= op2.chars;
- op1.lines -= op2.lines;
- op2.opcode = '';
- }
- }
- else if (op2.opcode === '-') {
- copyOp(op2, opOut);
- if (!op1.opcode) {
- op2.opcode = '';
- }
- else if (op2.chars <= op1.chars) {
- // delete part or all of a keep
- op1.chars -= op2.chars;
- op1.lines -= op2.lines;
- op2.opcode = '';
- if (!op1.chars) {
- op1.opcode = '';
- }
- }
- else {
- // delete all of a keep, and keep going
- opOut.lines = op1.lines;
- opOut.chars = op1.chars;
- op2.lines -= op1.lines;
- op2.chars -= op1.chars;
- op1.opcode = '';
- }
- }
- else if (!op1.opcode) {
- copyOp(op2, opOut);
- op2.opcode = '';
- }
- else if (!op2.opcode) {
- // @NOTE: Critical bugfix for EPL issue #1625. We do not copy op1 here
- // in order to prevent attributes from leaking into result changesets.
- // copyOp(op1, opOut);
- op1.opcode = '';
- }
- else {
- // both keeps
- opOut.opcode = '=';
- opOut.attribs = followAttributes(op1.attribs, op2.attribs, pool);
- if (op1.chars <= op2.chars) {
- opOut.chars = op1.chars;
- opOut.lines = op1.lines;
- op2.chars -= op1.chars;
- op2.lines -= op1.lines;
- op1.opcode = '';
- if (!op2.chars) {
- op2.opcode = '';
- }
- }
- else {
- opOut.chars = op2.chars;
- opOut.lines = op2.lines;
- op1.chars -= op2.chars;
- op1.lines -= op2.lines;
- op2.opcode = '';
- }
- }
- switch (opOut.opcode) {
- case '=':
- oldPos += opOut.chars;
- newLen += opOut.chars;
- break;
- case '-':
- oldPos += opOut.chars;
- break;
- case '+':
- newLen += opOut.chars;
- break;
- }
- return opOut;
- });
- newLen += oldLen - oldPos;
- return exports.pack(oldLen, newLen, newOps, unpacked2.charBank);
+ // both keeps
+ opOut.opcode = '=';
+ opOut.attribs = followAttributes(op1.attribs, op2.attribs, pool);
+ if (op1.chars <= op2.chars) {
+ opOut.chars = op1.chars;
+ opOut.lines = op1.lines;
+ op2.chars -= op1.chars;
+ op2.lines -= op1.lines;
+ op1.opcode = '';
+ if (!op2.chars) {
+ op2.opcode = '';
+ }
+ }
+ else {
+ opOut.chars = op2.chars;
+ opOut.lines = op2.lines;
+ op1.chars -= op2.chars;
+ op1.lines -= op2.lines;
+ op2.opcode = '';
+ }
+ }
+ switch (opOut.opcode) {
+ case '=':
+ oldPos += opOut.chars;
+ newLen += opOut.chars;
+ break;
+ case '-':
+ oldPos += opOut.chars;
+ break;
+ case '+':
+ newLen += opOut.chars;
+ break;
+ }
+ return opOut;
+ });
+ newLen += oldLen - oldPos;
+ return exports.pack(oldLen, newLen, newOps, unpacked2.charBank);
};
export const exportedForTestingOnly = {
- TextLinesMutator,
- followAttributes,
- toSplices,
+ TextLinesMutator,
+ followAttributes,
+ toSplices,
};
export { Op };
export { attribsAttributeValue$0 as attribsAttributeValue };
diff --git a/src/static/js/ChangesetUtils.js b/src/static/js/ChangesetUtils.js
index ef2be2ebe07..b63481a5167 100644
--- a/src/static/js/ChangesetUtils.js
+++ b/src/static/js/ChangesetUtils.js
@@ -1,52 +1,28 @@
'use strict';
-
-/**
- * This module contains several helper Functions to build Changesets
- * based on a SkipList
- */
-
-/**
- * Copyright 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS-IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-exports.buildRemoveRange = (rep, builder, start, end) => {
- const startLineOffset = rep.lines.offsetOfIndex(start[0]);
- const endLineOffset = rep.lines.offsetOfIndex(end[0]);
-
- if (end[0] > start[0]) {
- builder.remove(endLineOffset - startLineOffset - start[1], end[0] - start[0]);
- builder.remove(end[1]);
- } else {
- builder.remove(end[1] - start[1]);
- }
+export const buildRemoveRange = (rep, builder, start, end) => {
+ const startLineOffset = rep.lines.offsetOfIndex(start[0]);
+ const endLineOffset = rep.lines.offsetOfIndex(end[0]);
+ if (end[0] > start[0]) {
+ builder.remove(endLineOffset - startLineOffset - start[1], end[0] - start[0]);
+ builder.remove(end[1]);
+ }
+ else {
+ builder.remove(end[1] - start[1]);
+ }
};
-
-exports.buildKeepRange = (rep, builder, start, end, attribs, pool) => {
- const startLineOffset = rep.lines.offsetOfIndex(start[0]);
- const endLineOffset = rep.lines.offsetOfIndex(end[0]);
-
- if (end[0] > start[0]) {
- builder.keep(endLineOffset - startLineOffset - start[1], end[0] - start[0], attribs, pool);
- builder.keep(end[1], 0, attribs, pool);
- } else {
- builder.keep(end[1] - start[1], 0, attribs, pool);
- }
+export const buildKeepRange = (rep, builder, start, end, attribs, pool) => {
+ const startLineOffset = rep.lines.offsetOfIndex(start[0]);
+ const endLineOffset = rep.lines.offsetOfIndex(end[0]);
+ if (end[0] > start[0]) {
+ builder.keep(endLineOffset - startLineOffset - start[1], end[0] - start[0], attribs, pool);
+ builder.keep(end[1], 0, attribs, pool);
+ }
+ else {
+ builder.keep(end[1] - start[1], 0, attribs, pool);
+ }
};
-
-exports.buildKeepToStartOfRange = (rep, builder, start) => {
- const startLineOffset = rep.lines.offsetOfIndex(start[0]);
-
- builder.keep(startLineOffset, start[0]);
- builder.keep(start[1]);
+export const buildKeepToStartOfRange = (rep, builder, start) => {
+ const startLineOffset = rep.lines.offsetOfIndex(start[0]);
+ builder.keep(startLineOffset, start[0]);
+ builder.keep(start[1]);
};
diff --git a/src/static/js/ChatMessage.js b/src/static/js/ChatMessage.js
index a627f88f9f3..c9cc87e2879 100644
--- a/src/static/js/ChatMessage.js
+++ b/src/static/js/ChatMessage.js
@@ -1,7 +1,6 @@
+import { padutils } from "./pad_utils.js";
'use strict';
-
-const {padutils: {warnDeprecated}} = require('./pad_utils');
-
+const { padutils: { warnDeprecated } } = { padutils };
/**
* Represents a chat message stored in the database and transmitted among users. Plugins can extend
* the object with additional properties.
@@ -9,90 +8,84 @@ const {padutils: {warnDeprecated}} = require('./pad_utils');
* Supports serialization to JSON.
*/
class ChatMessage {
- static fromObject(obj) {
- // The userId property was renamed to authorId, and userName was renamed to displayName. Accept
- // the old names in case the db record was written by an older version of Etherpad.
- obj = Object.assign({}, obj); // Don't mutate the caller's object.
- if ('userId' in obj && !('authorId' in obj)) obj.authorId = obj.userId;
- delete obj.userId;
- if ('userName' in obj && !('displayName' in obj)) obj.displayName = obj.userName;
- delete obj.userName;
- return Object.assign(new ChatMessage(), obj);
- }
-
- /**
- * @param {?string} [text] - Initial value of the `text` property.
- * @param {?string} [authorId] - Initial value of the `authorId` property.
- * @param {?number} [time] - Initial value of the `time` property.
- */
- constructor(text = null, authorId = null, time = null) {
+ static fromObject(obj) {
+ // The userId property was renamed to authorId, and userName was renamed to displayName. Accept
+ // the old names in case the db record was written by an older version of Etherpad.
+ obj = Object.assign({}, obj); // Don't mutate the caller's object.
+ if ('userId' in obj && !('authorId' in obj))
+ obj.authorId = obj.userId;
+ delete obj.userId;
+ if ('userName' in obj && !('displayName' in obj))
+ obj.displayName = obj.userName;
+ delete obj.userName;
+ return Object.assign(new ChatMessage(), obj);
+ }
/**
- * The raw text of the user's chat message (before any rendering or processing).
- *
- * @type {?string}
- */
- this.text = text;
-
- /**
- * The user's author ID.
- *
- * @type {?string}
+ * @param {?string} [text] - Initial value of the `text` property.
+ * @param {?string} [authorId] - Initial value of the `authorId` property.
+ * @param {?number} [time] - Initial value of the `time` property.
*/
- this.authorId = authorId;
-
+ constructor(text = null, authorId = null, time = null) {
+ /**
+ * The raw text of the user's chat message (before any rendering or processing).
+ *
+ * @type {?string}
+ */
+ this.text = text;
+ /**
+ * The user's author ID.
+ *
+ * @type {?string}
+ */
+ this.authorId = authorId;
+ /**
+ * The message's timestamp, as milliseconds since epoch.
+ *
+ * @type {?number}
+ */
+ this.time = time;
+ /**
+ * The user's display name.
+ *
+ * @type {?string}
+ */
+ this.displayName = null;
+ }
/**
- * The message's timestamp, as milliseconds since epoch.
+ * Alias of `authorId`, for compatibility with old plugins.
*
- * @type {?number}
+ * @deprecated Use `authorId` instead.
+ * @type {string}
*/
- this.time = time;
-
+ get userId() {
+ warnDeprecated('ChatMessage.userId property is deprecated; use .authorId instead');
+ return this.authorId;
+ }
+ set userId(val) {
+ warnDeprecated('ChatMessage.userId property is deprecated; use .authorId instead');
+ this.authorId = val;
+ }
/**
- * The user's display name.
+ * Alias of `displayName`, for compatibility with old plugins.
*
- * @type {?string}
+ * @deprecated Use `displayName` instead.
+ * @type {string}
*/
- this.displayName = null;
- }
-
- /**
- * Alias of `authorId`, for compatibility with old plugins.
- *
- * @deprecated Use `authorId` instead.
- * @type {string}
- */
- get userId() {
- warnDeprecated('ChatMessage.userId property is deprecated; use .authorId instead');
- return this.authorId;
- }
- set userId(val) {
- warnDeprecated('ChatMessage.userId property is deprecated; use .authorId instead');
- this.authorId = val;
- }
-
- /**
- * Alias of `displayName`, for compatibility with old plugins.
- *
- * @deprecated Use `displayName` instead.
- * @type {string}
- */
- get userName() {
- warnDeprecated('ChatMessage.userName property is deprecated; use .displayName instead');
- return this.displayName;
- }
- set userName(val) {
- warnDeprecated('ChatMessage.userName property is deprecated; use .displayName instead');
- this.displayName = val;
- }
-
- // TODO: Delete this method once users are unlikely to roll back to a version of Etherpad that
- // doesn't support authorId and displayName.
- toJSON() {
- const {authorId, displayName, ...obj} = this;
- obj.userId = authorId;
- obj.userName = displayName;
- return obj;
- }
+ get userName() {
+ warnDeprecated('ChatMessage.userName property is deprecated; use .displayName instead');
+ return this.displayName;
+ }
+ set userName(val) {
+ warnDeprecated('ChatMessage.userName property is deprecated; use .displayName instead');
+ this.displayName = val;
+ }
+ // TODO: Delete this method once users are unlikely to roll back to a version of Etherpad that
+ // doesn't support authorId and displayName.
+ toJSON() {
+ const { authorId, displayName, ...obj } = this;
+ obj.userId = authorId;
+ obj.userName = displayName;
+ return obj;
+ }
}
-
-module.exports = ChatMessage;
+export default ChatMessage;
diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js
deleted file mode 100644
index a8b98ac16db..00000000000
--- a/src/static/js/ace2_inner.js
+++ /dev/null
@@ -1,3527 +0,0 @@
-'use strict';
-
-/**
- * Copyright 2009 Google Inc.
- * Copyright 2020 John McLear - The Etherpad Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS-IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-let documentAttributeManager;
-
-const AttributeMap = require('./AttributeMap');
-const browser = require('./vendors/browser');
-const padutils = require('./pad_utils').padutils;
-const Ace2Common = require('./ace2_common');
-const $ = require('./rjquery').$;
-
-const isNodeText = Ace2Common.isNodeText;
-const getAssoc = Ace2Common.getAssoc;
-const setAssoc = Ace2Common.setAssoc;
-const noop = Ace2Common.noop;
-const hooks = require('./pluginfw/hooks');
-
-function Ace2Inner(editorInfo, cssManagers) {
- const makeChangesetTracker = require('./changesettracker').makeChangesetTracker;
- const colorutils = require('./colorutils').colorutils;
- const makeContentCollector = require('./contentcollector').makeContentCollector;
- const domline = require('./domline').domline;
- const AttribPool = require('./AttributePool');
- const Changeset = require('./Changeset');
- const ChangesetUtils = require('./ChangesetUtils');
- const linestylefilter = require('./linestylefilter').linestylefilter;
- const SkipList = require('./skiplist');
- const undoModule = require('./undomodule').undoModule;
- const AttributeManager = require('./AttributeManager');
- const Scroll = require('./scroll');
- const DEBUG = false;
-
- const THE_TAB = ' '; // 4
- const MAX_LIST_LEVEL = 16;
-
- const FORMATTING_STYLES = ['bold', 'italic', 'underline', 'strikethrough'];
- const SELECT_BUTTON_CLASS = 'selected';
-
- let thisAuthor = '';
-
- let disposed = false;
-
- const focus = () => {
- window.focus();
- };
-
- const outerWin = window.parent;
- const outerDoc = outerWin.document;
- const sideDiv = outerDoc.getElementById('sidediv');
- const lineMetricsDiv = outerDoc.getElementById('linemetricsdiv');
- const sideDivInner = outerDoc.getElementById('sidedivinner');
- const appendNewSideDivLine = () => {
- const lineDiv = outerDoc.createElement('div');
- sideDivInner.appendChild(lineDiv);
- const lineSpan = outerDoc.createElement('span');
- lineSpan.classList.add('line-number');
- lineSpan.appendChild(outerDoc.createTextNode(sideDivInner.children.length));
- lineDiv.appendChild(lineSpan);
- };
- appendNewSideDivLine();
-
- const scroll = Scroll.init(outerWin);
-
- let outsideKeyDown = noop;
- let outsideKeyPress = (e) => true;
- let outsideNotifyDirty = noop;
-
- /**
- * Document representation.
- */
- const rep = {
- /**
- * The contents of the document. Each entry in this skip list is an object representing a
- * line (actually paragraph) of text. The line objects are created by createDomLineEntry().
- */
- lines: new SkipList(),
- /**
- * Start of the selection. Represented as an array of two non-negative numbers that point to the
- * first character of the selection: [zeroBasedLineNumber, zeroBasedColumnNumber]. Notes:
- * - There is an implicit newline character (not actually stored) at the end of every line.
- * Because of this, a selection that starts at the end of a line (column number equals the
- * number of characters in the line, not including the implicit newline) is not equivalent
- * to a selection that starts at the beginning of the next line. The same goes for the
- * selection end.
- * - If there are N lines, [N, 0] is valid for the start of the selection. [N, 0] indicates
- * that the selection starts just after the implicit newline at the end of the document's
- * last line (if the document has any lines). The same goes for the end of the selection.
- * - If a line starts with a line marker, a selection that starts at the beginning of the line
- * may start either immediately before (column = 0) or immediately after (column = 1) the
- * line marker, and the two are considered to be semantically equivalent. For safety, all
- * code should be written to accept either but only produce selections that start after the
- * line marker (the column number should be 1, not 0, when there is a line marker). The same
- * goes for the end of the selection.
- */
- selStart: null,
- /**
- * End of the selection. Represented as an array of two non-negative numbers that point to the
- * character just after the end of the selection: [zeroBasedLineNumber, zeroBasedColumnNumber].
- * See the above notes for selStart.
- */
- selEnd: null,
- /**
- * Whether the selection extends "backwards", so that the focus point (controlled with the arrow
- * keys) is at the beginning. This is not supported in IE, though native IE selections have that
- * behavior (which we try not to interfere with). Must be false if selection is collapsed!
- */
- selFocusAtStart: false,
- alltext: '',
- alines: [],
- apool: new AttribPool(),
- };
-
- // lines, alltext, alines, and DOM are set up in init()
- if (undoModule.enabled) {
- undoModule.apool = rep.apool;
- }
-
- let isEditable = true;
- let doesWrap = true;
- let hasLineNumbers = true;
- let isStyled = true;
-
- let console = (DEBUG && window.console);
-
- if (!window.console) {
- const names = [
- 'log',
- 'debug',
- 'info',
- 'warn',
- 'error',
- 'assert',
- 'dir',
- 'dirxml',
- 'group',
- 'groupEnd',
- 'time',
- 'timeEnd',
- 'count',
- 'trace',
- 'profile',
- 'profileEnd',
- ];
- console = {};
- for (const name of names) console[name] = noop;
- }
-
- const scheduler = parent; // hack for opera required
-
- const performDocumentReplaceRange = (start, end, newText) => {
- if (start === undefined) start = rep.selStart;
- if (end === undefined) end = rep.selEnd;
-
- // start[0]: <--- start[1] --->CCCCCCCCCCC\n
- // CCCCCCCCCCCCCCCCCCCC\n
- // CCCC\n
- // end[0]: -------\n
- const builder = Changeset.builder(rep.lines.totalWidth());
- ChangesetUtils.buildKeepToStartOfRange(rep, builder, start);
- ChangesetUtils.buildRemoveRange(rep, builder, start, end);
- builder.insert(newText, [
- ['author', thisAuthor],
- ], rep.apool);
- const cs = builder.toString();
-
- performDocumentApplyChangeset(cs);
- };
-
- const changesetTracker = makeChangesetTracker(scheduler, rep.apool, {
- withCallbacks: (operationName, f) => {
- inCallStackIfNecessary(operationName, () => {
- fastIncorp(1);
- f(
- {
- setDocumentAttributedText: (atext) => {
- setDocAText(atext);
- },
- applyChangesetToDocument: (changeset, preferInsertionAfterCaret) => {
- const oldEventType = currentCallStack.editEvent.eventType;
- currentCallStack.startNewEvent('nonundoable');
-
- performDocumentApplyChangeset(changeset, preferInsertionAfterCaret);
-
- currentCallStack.startNewEvent(oldEventType);
- },
- });
- });
- },
- });
-
- const authorInfos = {}; // presence of key determines if author is present in doc
- const getAuthorInfos = () => authorInfos;
- editorInfo.ace_getAuthorInfos = getAuthorInfos;
-
- const setAuthorStyle = (author, info) => {
- const authorSelector = getAuthorColorClassSelector(getAuthorClassName(author));
-
- const authorStyleSet = hooks.callAll('aceSetAuthorStyle', {
- dynamicCSS: cssManagers.inner,
- outerDynamicCSS: cssManagers.outer,
- parentDynamicCSS: cssManagers.parent,
- info,
- author,
- authorSelector,
- });
-
- // Prevent default behaviour if any hook says so
- if (authorStyleSet.some((it) => it)) {
- return;
- }
-
- if (!info) {
- cssManagers.inner.removeSelectorStyle(authorSelector);
- cssManagers.parent.removeSelectorStyle(authorSelector);
- } else if (info.bgcolor) {
- let bgcolor = info.bgcolor;
- if ((typeof info.fade) === 'number') {
- bgcolor = fadeColor(bgcolor, info.fade);
- }
- const textColor =
- colorutils.textColorFromBackgroundColor(bgcolor, parent.parent.clientVars.skinName);
- const styles = [
- cssManagers.inner.selectorStyle(authorSelector),
- cssManagers.parent.selectorStyle(authorSelector),
- ];
- for (const style of styles) {
- style.backgroundColor = bgcolor;
- style.color = textColor;
- style['padding-top'] = '3px';
- style['padding-bottom'] = '4px';
- }
- }
- };
-
- const setAuthorInfo = (author, info) => {
- if (!author) return; // author ID not set for some reason
- if ((typeof author) !== 'string') {
- // Potentially caused by: https://github.com/ether/etherpad-lite/issues/2802");
- throw new Error(`setAuthorInfo: author (${author}) is not a string`);
- }
- if (!info) {
- delete authorInfos[author];
- } else {
- authorInfos[author] = info;
- }
- setAuthorStyle(author, info);
- };
-
- const getAuthorClassName = (author) => `author-${author.replace(/[^a-y0-9]/g, (c) => {
- if (c === '.') return '-';
- return `z${c.charCodeAt(0)}z`;
- })}`;
-
- const className2Author = (className) => {
- if (className.substring(0, 7) === 'author-') {
- return className.substring(7).replace(/[a-y0-9]+|-|z.+?z/g, (cc) => {
- if (cc === '-') { return '.'; } else if (cc.charAt(0) === 'z') {
- return String.fromCharCode(Number(cc.slice(1, -1)));
- } else {
- return cc;
- }
- });
- }
- return null;
- };
-
- const getAuthorColorClassSelector = (oneClassName) => `.authorColors .${oneClassName}`;
-
- const fadeColor = (colorCSS, fadeFrac) => {
- let color = colorutils.css2triple(colorCSS);
- color = colorutils.blend(color, [1, 1, 1], fadeFrac);
- return colorutils.triple2css(color);
- };
-
- editorInfo.ace_getRep = () => rep;
-
- editorInfo.ace_getAuthor = () => thisAuthor;
-
- const _nonScrollableEditEvents = {
- applyChangesToBase: 1,
- };
-
- for (const eventType of hooks.callAll('aceRegisterNonScrollableEditEvents')) {
- _nonScrollableEditEvents[eventType] = 1;
- }
-
- const isScrollableEditEvent = (eventType) => !_nonScrollableEditEvents[eventType];
-
- let currentCallStack = null;
-
- const inCallStack = (type, action) => {
- if (disposed) return;
-
- const newEditEvent = (eventType) => ({
- eventType,
- backset: null,
- });
-
- const submitOldEvent = (evt) => {
- if (rep.selStart && rep.selEnd) {
- const selStartChar = rep.lines.offsetOfIndex(rep.selStart[0]) + rep.selStart[1];
- const selEndChar = rep.lines.offsetOfIndex(rep.selEnd[0]) + rep.selEnd[1];
- evt.selStart = selStartChar;
- evt.selEnd = selEndChar;
- evt.selFocusAtStart = rep.selFocusAtStart;
- }
- if (undoModule.enabled) {
- let undoWorked = false;
- try {
- if (isPadLoading(evt.eventType)) {
- undoModule.clearHistory();
- } else if (evt.eventType === 'nonundoable') {
- if (evt.changeset) {
- undoModule.reportExternalChange(evt.changeset);
- }
- } else {
- undoModule.reportEvent(evt);
- }
- undoWorked = true;
- } finally {
- if (!undoWorked) {
- undoModule.enabled = false; // for safety
- }
- }
- }
- };
-
- const startNewEvent = (eventType, dontSubmitOld) => {
- const oldEvent = currentCallStack.editEvent;
- if (!dontSubmitOld) {
- submitOldEvent(oldEvent);
- }
- currentCallStack.editEvent = newEditEvent(eventType);
- return oldEvent;
- };
-
- currentCallStack = {
- type,
- docTextChanged: false,
- selectionAffected: false,
- userChangedSelection: false,
- domClean: false,
- isUserChange: false,
- // is this a "user change" type of call-stack
- repChanged: false,
- editEvent: newEditEvent(type),
- startNewEvent,
- };
- let cleanExit = false;
- let result;
- try {
- result = action();
-
- hooks.callAll('aceEditEvent', {
- callstack: currentCallStack,
- editorInfo,
- rep,
- documentAttributeManager,
- });
-
- cleanExit = true;
- } finally {
- const cs = currentCallStack;
- if (cleanExit) {
- submitOldEvent(cs.editEvent);
- if (cs.domClean && cs.type !== 'setup') {
- if (cs.selectionAffected) {
- updateBrowserSelectionFromRep();
- }
- if ((cs.docTextChanged || cs.userChangedSelection) && isScrollableEditEvent(cs.type)) {
- scrollSelectionIntoView();
- }
- if (cs.docTextChanged && cs.type.indexOf('importText') < 0) {
- outsideNotifyDirty();
- }
- }
- } else if (currentCallStack.type === 'idleWorkTimer') {
- idleWorkTimer.atLeast(1000);
- }
- currentCallStack = null;
- }
- return result;
- };
- editorInfo.ace_inCallStack = inCallStack;
-
- const inCallStackIfNecessary = (type, action) => {
- if (!currentCallStack) {
- inCallStack(type, action);
- } else {
- action();
- }
- };
- editorInfo.ace_inCallStackIfNecessary = inCallStackIfNecessary;
-
- const dispose = () => {
- disposed = true;
- if (idleWorkTimer) idleWorkTimer.never();
- teardown();
- };
-
- const setWraps = (newVal) => {
- doesWrap = newVal;
- document.body.classList.toggle('doesWrap', doesWrap);
- scheduler.setTimeout(() => {
- inCallStackIfNecessary('setWraps', () => {
- fastIncorp(7);
- recreateDOM();
- fixView();
- });
- }, 0);
- };
-
- const setStyled = (newVal) => {
- const oldVal = isStyled;
- isStyled = !!newVal;
-
- if (newVal !== oldVal) {
- if (!newVal) {
- // clear styles
- inCallStackIfNecessary('setStyled', () => {
- fastIncorp(12);
- const clearStyles = [];
- for (const k of Object.keys(STYLE_ATTRIBS)) {
- clearStyles.push([k, '']);
- }
- performDocumentApplyAttributesToCharRange(0, rep.alltext.length, clearStyles);
- });
- }
- }
- };
-
- const setTextFace = (face) => {
- document.body.style.fontFamily = face;
- lineMetricsDiv.style.fontFamily = face;
- };
-
- const recreateDOM = () => {
- // precond: normalized
- recolorLinesInRange(0, rep.alltext.length);
- };
-
- const setEditable = (newVal) => {
- isEditable = newVal;
- document.body.contentEditable = isEditable ? 'true' : 'false';
- document.body.classList.toggle('static', !isEditable);
- };
-
- const enforceEditability = () => setEditable(isEditable);
-
- const importText = (text, undoable, dontProcess) => {
- let lines;
- if (dontProcess) {
- if (text.charAt(text.length - 1) !== '\n') {
- throw new Error('new raw text must end with newline');
- }
- if (/[\r\t\xa0]/.exec(text)) {
- throw new Error('new raw text must not contain CR, tab, or nbsp');
- }
- lines = text.substring(0, text.length - 1).split('\n');
- } else {
- lines = text.split('\n').map(textify);
- }
- let newText = '\n';
- if (lines.length > 0) {
- newText = `${lines.join('\n')}\n`;
- }
-
- inCallStackIfNecessary(`importText${undoable ? 'Undoable' : ''}`, () => {
- setDocText(newText);
- });
-
- if (dontProcess && rep.alltext !== text) {
- throw new Error('mismatch error setting raw text in importText');
- }
- };
-
- const importAText = (atext, apoolJsonObj, undoable) => {
- atext = Changeset.cloneAText(atext);
- if (apoolJsonObj) {
- const wireApool = (new AttribPool()).fromJsonable(apoolJsonObj);
- atext.attribs = Changeset.moveOpsToNewPool(atext.attribs, wireApool, rep.apool);
- }
- inCallStackIfNecessary(`importText${undoable ? 'Undoable' : ''}`, () => {
- setDocAText(atext);
- });
- };
-
- const setDocAText = (atext) => {
- if (atext.text === '') {
- /*
- * The server is fine with atext.text being an empty string, but the front
- * end is not, and crashes.
- *
- * It is not clear if this is a problem in the server or in the client
- * code, and this is a client-side hack fix. The underlying problem needs
- * to be investigated.
- *
- * See for reference:
- * - https://github.com/ether/etherpad-lite/issues/3861
- */
- atext.text = '\n';
- }
-
- fastIncorp(8);
-
- const oldLen = rep.lines.totalWidth();
- const numLines = rep.lines.length();
- const upToLastLine = rep.lines.offsetOfIndex(numLines - 1);
- const lastLineLength = rep.lines.atIndex(numLines - 1).text.length;
- const assem = Changeset.smartOpAssembler();
- const o = new Changeset.Op('-');
- o.chars = upToLastLine;
- o.lines = numLines - 1;
- assem.append(o);
- o.chars = lastLineLength;
- o.lines = 0;
- assem.append(o);
- for (const op of Changeset.opsFromAText(atext)) assem.append(op);
- const newLen = oldLen + assem.getLengthChange();
- const changeset = Changeset.checkRep(
- Changeset.pack(oldLen, newLen, assem.toString(), atext.text.slice(0, -1)));
- performDocumentApplyChangeset(changeset);
-
- performSelectionChange(
- [0, rep.lines.atIndex(0).lineMarker], [0, rep.lines.atIndex(0).lineMarker]);
-
- idleWorkTimer.atMost(100);
-
- if (rep.alltext !== atext.text) {
- throw new Error('mismatch error setting raw text in setDocAText');
- }
- };
-
- const setDocText = (text) => {
- setDocAText(Changeset.makeAText(text));
- };
-
- const getDocText = () => {
- const alltext = rep.alltext;
- let len = alltext.length;
- if (len > 0) len--; // final extra newline
- return alltext.substring(0, len);
- };
-
- const exportText = () => {
- if (currentCallStack && !currentCallStack.domClean) {
- inCallStackIfNecessary('exportText', () => {
- fastIncorp(2);
- });
- }
- return getDocText();
- };
-
- const editorChangedSize = () => fixView();
-
- const setOnKeyPress = (handler) => {
- outsideKeyPress = handler;
- };
-
- const setOnKeyDown = (handler) => {
- outsideKeyDown = handler;
- };
-
- const setNotifyDirty = (handler) => {
- outsideNotifyDirty = handler;
- };
-
- const CMDS = {
- clearauthorship: (prompt) => {
- if ((!(rep.selStart && rep.selEnd)) || isCaret()) {
- if (prompt) {
- prompt();
- } else {
- performDocumentApplyAttributesToCharRange(0, rep.alltext.length, [
- ['author', ''],
- ]);
- }
- } else {
- setAttributeOnSelection('author', '');
- }
- },
- };
-
- const execCommand = (cmd, ...args) => {
- cmd = cmd.toLowerCase();
- if (CMDS[cmd]) {
- inCallStackIfNecessary(cmd, () => {
- fastIncorp(9);
- CMDS[cmd](...args);
- });
- }
- };
-
- const replaceRange = (start, end, text) => {
- inCallStackIfNecessary('replaceRange', () => {
- fastIncorp(9);
- performDocumentReplaceRange(start, end, text);
- });
- };
-
- editorInfo.ace_callWithAce = (fn, callStack, normalize) => {
- let wrapper = () => fn(editorInfo);
-
- if (normalize !== undefined) {
- const wrapper1 = wrapper;
- wrapper = () => {
- editorInfo.ace_fastIncorp(9);
- wrapper1();
- };
- }
-
- if (callStack !== undefined) {
- return editorInfo.ace_inCallStack(callStack, wrapper);
- } else {
- return wrapper();
- }
- };
-
- /**
- * This methed exposes a setter for some ace properties
- * @param key the name of the parameter
- * @param value the value to set to
- */
- editorInfo.ace_setProperty = (key, value) => {
- // These properties are exposed
- const setters = {
- wraps: setWraps,
- showsauthorcolors: (val) => document.body.classList.toggle('authorColors', !!val),
- showsuserselections: (val) => document.body.classList.toggle('userSelections', !!val),
- showslinenumbers: (value) => {
- hasLineNumbers = !!value;
- sideDiv.parentNode.classList.toggle('line-numbers-hidden', !hasLineNumbers);
- fixView();
- },
- userauthor: (value) => {
- thisAuthor = String(value);
- documentAttributeManager.author = thisAuthor;
- },
- styled: setStyled,
- textface: setTextFace,
- rtlistrue: (value) => {
- document.body.classList.toggle('rtl', value);
- document.body.classList.toggle('ltr', !value);
- document.documentElement.dir = value ? 'rtl' : 'ltr';
- },
- };
-
- const setter = setters[key.toLowerCase()];
-
- // check if setter is present
- if (setter !== undefined) {
- setter(value);
- }
- };
-
- editorInfo.ace_setBaseText = (txt) => {
- changesetTracker.setBaseText(txt);
- };
- editorInfo.ace_setBaseAttributedText = (atxt, apoolJsonObj) => {
- changesetTracker.setBaseAttributedText(atxt, apoolJsonObj);
- };
- editorInfo.ace_applyChangesToBase = (c, optAuthor, apoolJsonObj) => {
- changesetTracker.applyChangesToBase(c, optAuthor, apoolJsonObj);
- };
- editorInfo.ace_prepareUserChangeset = () => changesetTracker.prepareUserChangeset();
- editorInfo.ace_applyPreparedChangesetToBase = () => {
- changesetTracker.applyPreparedChangesetToBase();
- };
- editorInfo.ace_setUserChangeNotificationCallback = (f) => {
- changesetTracker.setUserChangeNotificationCallback(f);
- };
- editorInfo.ace_setAuthorInfo = (author, info) => {
- setAuthorInfo(author, info);
- };
-
- editorInfo.ace_getDocument = () => document;
-
- const now = () => Date.now();
-
- const newTimeLimit = (ms) => {
- const startTime = now();
- let exceededAlready = false;
- let printedTrace = false;
- const isTimeUp = () => {
- if (exceededAlready) {
- if ((!printedTrace)) {
- printedTrace = true;
- }
- return true;
- }
- const elapsed = now() - startTime;
- if (elapsed > ms) {
- exceededAlready = true;
- return true;
- } else {
- return false;
- }
- };
-
- isTimeUp.elapsed = () => now() - startTime;
- return isTimeUp;
- };
-
-
- const makeIdleAction = (func) => {
- let scheduledTimeout = null;
- let scheduledTime = 0;
-
- const unschedule = () => {
- if (scheduledTimeout) {
- scheduler.clearTimeout(scheduledTimeout);
- scheduledTimeout = null;
- }
- };
-
- const reschedule = (time) => {
- unschedule();
- scheduledTime = time;
- let delay = time - now();
- if (delay < 0) delay = 0;
- scheduledTimeout = scheduler.setTimeout(callback, delay);
- };
-
- const callback = () => {
- scheduledTimeout = null;
- // func may reschedule the action
- func();
- };
-
- return {
- atMost: (ms) => {
- const latestTime = now() + ms;
- if ((!scheduledTimeout) || scheduledTime > latestTime) {
- reschedule(latestTime);
- }
- },
- // atLeast(ms) will schedule the action if not scheduled yet.
- // In other words, "infinity" is replaced by ms, even though
- // it is technically larger.
- atLeast: (ms) => {
- const earliestTime = now() + ms;
- if ((!scheduledTimeout) || scheduledTime < earliestTime) {
- reschedule(earliestTime);
- }
- },
- never: () => {
- unschedule();
- },
- };
- };
-
- const fastIncorp = (n) => {
- // normalize but don't do any lexing or anything
- incorporateUserChanges();
- };
- editorInfo.ace_fastIncorp = fastIncorp;
-
- const idleWorkTimer = makeIdleAction(() => {
- if (inInternationalComposition) {
- // don't do idle input incorporation during international input composition
- idleWorkTimer.atLeast(500);
- return;
- }
-
- inCallStackIfNecessary('idleWorkTimer', () => {
- const isTimeUp = newTimeLimit(250);
-
- let finishedImportantWork = false;
- let finishedWork = false;
-
- try {
- incorporateUserChanges();
-
- if (isTimeUp()) return;
-
- updateLineNumbers(); // update line numbers if any time left
- if (isTimeUp()) return;
- finishedImportantWork = true;
- finishedWork = true;
- } finally {
- if (finishedWork) {
- idleWorkTimer.atMost(1000);
- } else if (finishedImportantWork) {
- // if we've finished highlighting the view area,
- // more highlighting could be counter-productive,
- // e.g. if the user just opened a triple-quote and will soon close it.
- idleWorkTimer.atMost(500);
- } else {
- let timeToWait = Math.round(isTimeUp.elapsed() / 2);
- if (timeToWait < 100) timeToWait = 100;
- idleWorkTimer.atMost(timeToWait);
- }
- }
- });
- });
-
- let _nextId = 1;
-
- const uniqueId = (n) => {
- // not actually guaranteed to be unique, e.g. if user copy-pastes
- // nodes with ids
- const nid = n.id;
- if (nid) return nid;
- return (n.id = `magicdomid${_nextId++}`);
- };
-
-
- const recolorLinesInRange = (startChar, endChar) => {
- if (endChar <= startChar) return;
- if (startChar < 0 || startChar >= rep.lines.totalWidth()) return;
- let lineEntry = rep.lines.atOffset(startChar); // rounds down to line boundary
- let lineStart = rep.lines.offsetOfEntry(lineEntry);
- let lineIndex = rep.lines.indexOfEntry(lineEntry);
- let selectionNeedsResetting = false;
- let firstLine = null;
-
- // tokenFunc function; accesses current value of lineEntry and curDocChar,
- // also mutates curDocChar
- const tokenFunc = (tokenText, tokenClass) => {
- lineEntry.domInfo.appendSpan(tokenText, tokenClass);
- };
-
- while (lineEntry && lineStart < endChar) {
- const lineEnd = lineStart + lineEntry.width;
- lineEntry.domInfo.clearSpans();
- getSpansForLine(lineEntry, tokenFunc, lineStart);
- lineEntry.domInfo.finishUpdate();
-
- markNodeClean(lineEntry.lineNode);
-
- if (rep.selStart && rep.selStart[0] === lineIndex ||
- rep.selEnd && rep.selEnd[0] === lineIndex) {
- selectionNeedsResetting = true;
- }
-
- if (firstLine == null) firstLine = lineIndex;
- lineStart = lineEnd;
- lineEntry = rep.lines.next(lineEntry);
- lineIndex++;
- }
- if (selectionNeedsResetting) {
- currentCallStack.selectionAffected = true;
- }
- };
-
- // like getSpansForRange, but for a line, and the func takes (text,class)
- // instead of (width,class); excludes the trailing '\n' from
- // consideration by func
-
-
- const getSpansForLine = (lineEntry, textAndClassFunc, lineEntryOffsetHint) => {
- let lineEntryOffset = lineEntryOffsetHint;
- if ((typeof lineEntryOffset) !== 'number') {
- lineEntryOffset = rep.lines.offsetOfEntry(lineEntry);
- }
- const text = lineEntry.text;
- if (text.length === 0) {
- // allow getLineStyleFilter to set line-div styles
- const func = linestylefilter.getLineStyleFilter(
- 0, '', textAndClassFunc, rep.apool);
- func('', '');
- } else {
- let filteredFunc = linestylefilter.getFilterStack(text, textAndClassFunc, browser);
- const lineNum = rep.lines.indexOfEntry(lineEntry);
- const aline = rep.alines[lineNum];
- filteredFunc = linestylefilter.getLineStyleFilter(
- text.length, aline, filteredFunc, rep.apool);
- filteredFunc(text, '');
- }
- };
-
- let observedChanges;
-
- const clearObservedChanges = () => {
- observedChanges = {
- cleanNodesNearChanges: {},
- };
- };
- clearObservedChanges();
-
- const getCleanNodeByKey = (key) => {
- let n = document.getElementById(key);
- // copying and pasting can lead to duplicate ids
- while (n && isNodeDirty(n)) {
- n.id = '';
- n = document.getElementById(key);
- }
- return n;
- };
-
- const observeChangesAroundNode = (node) => {
- // Around this top-level DOM node, look for changes to the document
- // (from how it looks in our representation) and record them in a way
- // that can be used to "normalize" the document (apply the changes to our
- // representation, and put the DOM in a canonical form).
- let cleanNode;
- let hasAdjacentDirtyness;
- if (!isNodeDirty(node)) {
- cleanNode = node;
- const prevSib = cleanNode.previousSibling;
- const nextSib = cleanNode.nextSibling;
- hasAdjacentDirtyness = ((prevSib && isNodeDirty(prevSib)) ||
- (nextSib && isNodeDirty(nextSib)));
- } else {
- // node is dirty, look for clean node above
- let upNode = node.previousSibling;
- while (upNode && isNodeDirty(upNode)) {
- upNode = upNode.previousSibling;
- }
- if (upNode) {
- cleanNode = upNode;
- } else {
- let downNode = node.nextSibling;
- while (downNode && isNodeDirty(downNode)) {
- downNode = downNode.nextSibling;
- }
- if (downNode) {
- cleanNode = downNode;
- }
- }
- if (!cleanNode) {
- // Couldn't find any adjacent clean nodes!
- // Since top and bottom of doc is dirty, the dirty area will be detected.
- return;
- }
- hasAdjacentDirtyness = true;
- }
-
- if (hasAdjacentDirtyness) {
- // previous or next line is dirty
- observedChanges.cleanNodesNearChanges[`$${uniqueId(cleanNode)}`] = true;
- } else {
- // next and prev lines are clean (if they exist)
- const lineKey = uniqueId(cleanNode);
- const prevSib = cleanNode.previousSibling;
- const nextSib = cleanNode.nextSibling;
- const actualPrevKey = ((prevSib && uniqueId(prevSib)) || null);
- const actualNextKey = ((nextSib && uniqueId(nextSib)) || null);
- const repPrevEntry = rep.lines.prev(rep.lines.atKey(lineKey));
- const repNextEntry = rep.lines.next(rep.lines.atKey(lineKey));
- const repPrevKey = ((repPrevEntry && repPrevEntry.key) || null);
- const repNextKey = ((repNextEntry && repNextEntry.key) || null);
- if (actualPrevKey !== repPrevKey || actualNextKey !== repNextKey) {
- observedChanges.cleanNodesNearChanges[`$${uniqueId(cleanNode)}`] = true;
- }
- }
- };
-
- const observeChangesAroundSelection = () => {
- if (currentCallStack.observedSelection) return;
- currentCallStack.observedSelection = true;
-
- const selection = getSelection();
-
- if (selection) {
- const node1 = topLevel(selection.startPoint.node);
- const node2 = topLevel(selection.endPoint.node);
- if (node1) observeChangesAroundNode(node1);
- if (node2 && node1 !== node2) {
- observeChangesAroundNode(node2);
- }
- }
- };
-
- const observeSuspiciousNodes = () => {
- // inspired by Firefox bug #473255, where pasting formatted text
- // causes the cursor to jump away, making the new HTML never found.
- if (document.body.getElementsByTagName) {
- const elts = document.body.getElementsByTagName('style');
- for (const elt of elts) {
- const n = topLevel(elt);
- if (n && n.parentNode === document.body) {
- observeChangesAroundNode(n);
- }
- }
- }
- };
-
- const incorporateUserChanges = () => {
- if (currentCallStack.domClean) return false;
-
- currentCallStack.isUserChange = true;
-
- if (DEBUG && window.DONT_INCORP || window.DEBUG_DONT_INCORP) return false;
-
- // returns true if dom changes were made
- if (!document.body.firstChild) {
- document.body.innerHTML = '
';
- }
-
- observeChangesAroundSelection();
- observeSuspiciousNodes();
- let dirtyRanges = getDirtyRanges();
- let dirtyRangesCheckOut = true;
- let j = 0;
- let a, b;
- let scrollToTheLeftNeeded = false;
-
- while (j < dirtyRanges.length) {
- a = dirtyRanges[j][0];
- b = dirtyRanges[j][1];
- if (!((a === 0 || getCleanNodeByKey(rep.lines.atIndex(a - 1).key)) &&
- (b === rep.lines.length() || getCleanNodeByKey(rep.lines.atIndex(b).key)))) {
- dirtyRangesCheckOut = false;
- break;
- }
- j++;
- }
- if (!dirtyRangesCheckOut) {
- for (const bodyNode of document.body.childNodes) {
- if ((bodyNode.tagName) && ((!bodyNode.id) || (!rep.lines.containsKey(bodyNode.id)))) {
- observeChangesAroundNode(bodyNode);
- }
- }
- dirtyRanges = getDirtyRanges();
- }
-
- clearObservedChanges();
-
- const selection = getSelection();
-
- let selStart, selEnd; // each one, if truthy, has [line,char] needed to set selection
- let i = 0;
- const splicesToDo = [];
- let netNumLinesChangeSoFar = 0;
- const toDeleteAtEnd = [];
- const domInsertsNeeded = []; // each entry is [nodeToInsertAfter, [info1, info2, ...]]
- while (i < dirtyRanges.length) {
- const range = dirtyRanges[i];
- a = range[0];
- b = range[1];
- let firstDirtyNode = (((a === 0) && document.body.firstChild) ||
- getCleanNodeByKey(rep.lines.atIndex(a - 1).key).nextSibling);
- firstDirtyNode = (firstDirtyNode && isNodeDirty(firstDirtyNode) && firstDirtyNode);
-
- let lastDirtyNode = (((b === rep.lines.length()) && document.body.lastChild) ||
- getCleanNodeByKey(rep.lines.atIndex(b).key).previousSibling);
-
- lastDirtyNode = (lastDirtyNode && isNodeDirty(lastDirtyNode) && lastDirtyNode);
- if (firstDirtyNode && lastDirtyNode) {
- const cc = makeContentCollector(isStyled, browser, rep.apool, className2Author);
- cc.notifySelection(selection);
- const dirtyNodes = [];
- for (let n = firstDirtyNode; n &&
- !(n.previousSibling && n.previousSibling === lastDirtyNode);
- n = n.nextSibling) {
- cc.collectContent(n);
- dirtyNodes.push(n);
- }
- cc.notifyNextNode(lastDirtyNode.nextSibling);
- let lines = cc.getLines();
- if ((lines.length <= 1 || lines[lines.length - 1] !== '') && lastDirtyNode.nextSibling) {
- // dirty region doesn't currently end a line, even taking the following node
- // (or lack of node) into account, so include the following clean node.
- // It could be SPAN or a DIV; basically this is any case where the contentCollector
- // decides it isn't done.
- // Note that this clean node might need to be there for the next dirty range.
- b++;
- const cleanLine = lastDirtyNode.nextSibling;
- cc.collectContent(cleanLine);
- toDeleteAtEnd.push(cleanLine);
- cc.notifyNextNode(cleanLine.nextSibling);
- }
-
- const ccData = cc.finish();
- const ss = ccData.selStart;
- const se = ccData.selEnd;
- lines = ccData.lines;
- const lineAttribs = ccData.lineAttribs;
- const linesWrapped = ccData.linesWrapped;
-
- if (linesWrapped > 0) {
- // Chrome decides in its infinite wisdom that it's okay to put the browser's visisble
- // window in the middle of the span. An outcome of this is that the first chars of the
- // string are no longer visible to the user.. Yay chrome.. Move the browser's visible area
- // to the left hand side of the span. Firefox isn't quite so bad, but it's still pretty
- // quirky.
- scrollToTheLeftNeeded = true;
- }
-
- if (ss[0] >= 0) selStart = [ss[0] + a + netNumLinesChangeSoFar, ss[1]];
- if (se[0] >= 0) selEnd = [se[0] + a + netNumLinesChangeSoFar, se[1]];
-
- const entries = [];
- const nodeToAddAfter = lastDirtyNode;
- const lineNodeInfos = [];
- for (const lineString of lines) {
- const newEntry = createDomLineEntry(lineString);
- entries.push(newEntry);
- lineNodeInfos.push(newEntry.domInfo);
- }
- domInsertsNeeded.push([nodeToAddAfter, lineNodeInfos]);
- for (const n of dirtyNodes) toDeleteAtEnd.push(n);
- const spliceHints = {};
- if (selStart) spliceHints.selStart = selStart;
- if (selEnd) spliceHints.selEnd = selEnd;
- splicesToDo.push([a + netNumLinesChangeSoFar, b - a, entries, lineAttribs, spliceHints]);
- netNumLinesChangeSoFar += (lines.length - (b - a));
- } else if (b > a) {
- splicesToDo.push([a + netNumLinesChangeSoFar, b - a, [], []]);
- }
- i++;
- }
-
- const domChanges = (splicesToDo.length > 0);
-
- for (const splice of splicesToDo) doIncorpLineSplice(...splice);
- for (const ins of domInsertsNeeded) insertDomLines(...ins);
- for (const n of toDeleteAtEnd) n.remove();
-
- // needed to stop chrome from breaking the ui when long strings without spaces are pasted
- if (scrollToTheLeftNeeded) {
- $('#innerdocbody').scrollLeft(0);
- }
-
- // if the nodes that define the selection weren't encountered during
- // content collection, figure out where those nodes are now.
- if (selection && !selStart) {
- const selStartFromHook = hooks.callAll('aceStartLineAndCharForPoint', {
- callstack: currentCallStack,
- editorInfo,
- rep,
- root: document.body,
- point: selection.startPoint,
- documentAttributeManager,
- });
- selStart = (selStartFromHook == null || selStartFromHook.length === 0)
- ? getLineAndCharForPoint(selection.startPoint) : selStartFromHook;
- }
- if (selection && !selEnd) {
- const selEndFromHook = hooks.callAll('aceEndLineAndCharForPoint', {
- callstack: currentCallStack,
- editorInfo,
- rep,
- root: document.body,
- point: selection.endPoint,
- documentAttributeManager,
- });
- selEnd = (selEndFromHook == null ||
- selEndFromHook.length === 0)
- ? getLineAndCharForPoint(selection.endPoint) : selEndFromHook;
- }
-
- // selection from content collection can, in various ways, extend past final
- // BR in firefox DOM, so cap the line
- const numLines = rep.lines.length();
- if (selStart && selStart[0] >= numLines) {
- selStart[0] = numLines - 1;
- selStart[1] = rep.lines.atIndex(selStart[0]).text.length;
- }
- if (selEnd && selEnd[0] >= numLines) {
- selEnd[0] = numLines - 1;
- selEnd[1] = rep.lines.atIndex(selEnd[0]).text.length;
- }
-
- // update rep if we have a new selection
- // NOTE: IE loses the selection when you click stuff in e.g. the
- // editbar, so removing the selection when it's lost is not a good
- // idea.
- if (selection) repSelectionChange(selStart, selEnd, selection && selection.focusAtStart);
- // update browser selection
- if (selection && (domChanges || isCaret())) {
- // if no DOM changes (not this case), want to treat range selection delicately,
- // e.g. in IE not lose which end of the selection is the focus/anchor;
- // on the other hand, we may have just noticed a press of PageUp/PageDown
- currentCallStack.selectionAffected = true;
- }
-
- currentCallStack.domClean = true;
-
- fixView();
-
- return domChanges;
- };
-
- const STYLE_ATTRIBS = {
- bold: true,
- italic: true,
- underline: true,
- strikethrough: true,
- list: true,
- };
-
- const isStyleAttribute = (aname) => !!STYLE_ATTRIBS[aname];
-
- const isDefaultLineAttribute =
- (aname) => AttributeManager.DEFAULT_LINE_ATTRIBUTES.indexOf(aname) !== -1;
-
- const insertDomLines = (nodeToAddAfter, infoStructs) => {
- let lastEntry;
- let lineStartOffset;
- for (const info of infoStructs) {
- const node = info.node;
- const key = uniqueId(node);
- let entry;
- if (lastEntry) {
- // optimization to avoid recalculation
- const next = rep.lines.next(lastEntry);
- if (next && next.key === key) {
- entry = next;
- lineStartOffset += lastEntry.width;
- }
- }
- if (!entry) {
- entry = rep.lines.atKey(key);
- lineStartOffset = rep.lines.offsetOfKey(key);
- }
- lastEntry = entry;
- getSpansForLine(entry, (tokenText, tokenClass) => {
- info.appendSpan(tokenText, tokenClass);
- }, lineStartOffset);
- info.prepareForAdd();
- entry.lineMarker = info.lineMarker;
- if (!nodeToAddAfter) {
- document.body.insertBefore(node, document.body.firstChild);
- } else {
- document.body.insertBefore(node, nodeToAddAfter.nextSibling);
- }
- nodeToAddAfter = node;
- info.notifyAdded();
- markNodeClean(node);
- }
- };
-
- const isCaret = () => (rep.selStart && rep.selEnd &&
- rep.selStart[0] === rep.selEnd[0] && rep.selStart[1] === rep.selEnd[1]);
- editorInfo.ace_isCaret = isCaret;
-
- // prereq: isCaret()
- const caretLine = () => rep.selStart[0];
-
- editorInfo.ace_caretLine = caretLine;
-
- const caretColumn = () => rep.selStart[1];
-
- editorInfo.ace_caretColumn = caretColumn;
-
- const caretDocChar = () => rep.lines.offsetOfIndex(caretLine()) + caretColumn();
-
- editorInfo.ace_caretDocChar = caretDocChar;
-
- const handleReturnIndentation = () => {
- // on return, indent to level of previous line
- if (isCaret() && caretColumn() === 0 && caretLine() > 0) {
- const lineNum = caretLine();
- const thisLine = rep.lines.atIndex(lineNum);
- const prevLine = rep.lines.prev(thisLine);
- const prevLineText = prevLine.text;
- let theIndent = /^ *(?:)/.exec(prevLineText)[0];
- const shouldIndent = parent.parent.clientVars.indentationOnNewLine;
- if (shouldIndent && /[[(:{]\s*$/.exec(prevLineText)) {
- theIndent += THE_TAB;
- }
- const cs = Changeset.builder(rep.lines.totalWidth()).keep(
- rep.lines.offsetOfIndex(lineNum), lineNum).insert(
- theIndent, [
- ['author', thisAuthor],
- ], rep.apool).toString();
- performDocumentApplyChangeset(cs);
- performSelectionChange([lineNum, theIndent.length], [lineNum, theIndent.length]);
- }
- };
-
- const getPointForLineAndChar = (lineAndChar) => {
- const line = lineAndChar[0];
- let charsLeft = lineAndChar[1];
- const lineEntry = rep.lines.atIndex(line);
- charsLeft -= lineEntry.lineMarker;
- if (charsLeft < 0) {
- charsLeft = 0;
- }
- const lineNode = lineEntry.lineNode;
- let n = lineNode;
- let after = false;
- if (charsLeft === 0) {
- return {
- node: lineNode,
- index: 0,
- maxIndex: 1,
- };
- }
- while (!(n === lineNode && after)) {
- if (after) {
- if (n.nextSibling) {
- n = n.nextSibling;
- after = false;
- } else { n = n.parentNode; }
- } else if (isNodeText(n)) {
- const len = n.nodeValue.length;
- if (charsLeft <= len) {
- return {
- node: n,
- index: charsLeft,
- maxIndex: len,
- };
- }
- charsLeft -= len;
- after = true;
- } else if (n.firstChild) { n = n.firstChild; } else { after = true; }
- }
- return {
- node: lineNode,
- index: 1,
- maxIndex: 1,
- };
- };
-
- const nodeText = (n) => n.textContent || n.nodeValue || '';
-
- const getLineAndCharForPoint = (point) => {
- // Turn DOM node selection into [line,char] selection.
- // This method has to work when the DOM is not pristine,
- // assuming the point is not in a dirty node.
- if (point.node === document.body) {
- if (point.index === 0) {
- return [0, 0];
- } else {
- const N = rep.lines.length();
- const ln = rep.lines.atIndex(N - 1);
- return [N - 1, ln.text.length];
- }
- } else {
- let n = point.node;
- let col = 0;
- // if this part fails, it probably means the selection node
- // was dirty, and we didn't see it when collecting dirty nodes.
- if (isNodeText(n)) {
- col = point.index;
- } else if (point.index > 0) {
- col = nodeText(n).length;
- }
- let parNode, prevSib;
- while ((parNode = n.parentNode) !== document.body) {
- if ((prevSib = n.previousSibling)) {
- n = prevSib;
- col += nodeText(n).length;
- } else {
- n = parNode;
- }
- }
- if (n.firstChild && isBlockElement(n.firstChild)) {
- col += 1; // lineMarker
- }
- const lineEntry = rep.lines.atKey(n.id);
- const lineNum = rep.lines.indexOfEntry(lineEntry);
- return [lineNum, col];
- }
- };
- editorInfo.ace_getLineAndCharForPoint = getLineAndCharForPoint;
-
- const createDomLineEntry = (lineString) => {
- const info = doCreateDomLine(lineString.length > 0);
- const newNode = info.node;
- return {
- key: uniqueId(newNode),
- text: lineString,
- lineNode: newNode,
- domInfo: info,
- lineMarker: 0,
- };
- };
-
- const performDocumentApplyChangeset = (changes, insertsAfterSelection) => {
- const domAndRepSplice = (startLine, deleteCount, newLineStrings) => {
- const keysToDelete = [];
- if (deleteCount > 0) {
- let entryToDelete = rep.lines.atIndex(startLine);
- for (let i = 0; i < deleteCount; i++) {
- keysToDelete.push(entryToDelete.key);
- entryToDelete = rep.lines.next(entryToDelete);
- }
- }
-
- const lineEntries = newLineStrings.map(createDomLineEntry);
-
- doRepLineSplice(startLine, deleteCount, lineEntries);
-
- let nodeToAddAfter;
- if (startLine > 0) {
- nodeToAddAfter = getCleanNodeByKey(rep.lines.atIndex(startLine - 1).key);
- } else { nodeToAddAfter = null; }
-
- insertDomLines(nodeToAddAfter, lineEntries.map((entry) => entry.domInfo));
-
- for (const k of keysToDelete) {
- const n = document.getElementById(k);
- n.parentNode.removeChild(n);
- }
-
- if (
- (rep.selStart &&
- rep.selStart[0] >= startLine &&
- rep.selStart[0] <= startLine + deleteCount) ||
- (rep.selEnd && rep.selEnd[0] >= startLine && rep.selEnd[0] <= startLine + deleteCount)) {
- currentCallStack.selectionAffected = true;
- }
- };
-
- doRepApplyChangeset(changes, insertsAfterSelection);
-
- let requiredSelectionSetting = null;
- if (rep.selStart && rep.selEnd) {
- const selStartChar = rep.lines.offsetOfIndex(rep.selStart[0]) + rep.selStart[1];
- const selEndChar = rep.lines.offsetOfIndex(rep.selEnd[0]) + rep.selEnd[1];
- const result =
- Changeset.characterRangeFollow(changes, selStartChar, selEndChar, insertsAfterSelection);
- requiredSelectionSetting = [result[0], result[1], rep.selFocusAtStart];
- }
-
- const linesMutatee = {
- splice: (start, numRemoved, ...args) => {
- domAndRepSplice(start, numRemoved, args.map((s) => s.slice(0, -1)));
- },
- get: (i) => `${rep.lines.atIndex(i).text}\n`,
- length: () => rep.lines.length(),
- };
-
- Changeset.mutateTextLines(changes, linesMutatee);
-
- if (requiredSelectionSetting) {
- performSelectionChange(
- lineAndColumnFromChar(requiredSelectionSetting[0]),
- lineAndColumnFromChar(requiredSelectionSetting[1]),
- requiredSelectionSetting[2]);
- }
- };
-
- const doRepApplyChangeset = (changes, insertsAfterSelection) => {
- Changeset.checkRep(changes);
-
- if (Changeset.oldLen(changes) !== rep.alltext.length) {
- const errMsg = `${Changeset.oldLen(changes)}/${rep.alltext.length}`;
- throw new Error(`doRepApplyChangeset length mismatch: ${errMsg}`);
- }
-
- const editEvent = currentCallStack.editEvent;
- if (editEvent.eventType === 'nonundoable') {
- if (!editEvent.changeset) {
- editEvent.changeset = changes;
- } else {
- editEvent.changeset = Changeset.compose(editEvent.changeset, changes, rep.apool);
- }
- } else {
- const inverseChangeset = Changeset.inverse(changes, {
- get: (i) => `${rep.lines.atIndex(i).text}\n`,
- length: () => rep.lines.length(),
- }, rep.alines, rep.apool);
-
- if (!editEvent.backset) {
- editEvent.backset = inverseChangeset;
- } else {
- editEvent.backset = Changeset.compose(inverseChangeset, editEvent.backset, rep.apool);
- }
- }
-
- Changeset.mutateAttributionLines(changes, rep.alines, rep.apool);
-
- if (changesetTracker.isTracking()) {
- changesetTracker.composeUserChangeset(changes);
- }
- };
-
- /**
- * Converts the position of a char (index in String) into a [row, col] tuple
- */
- const lineAndColumnFromChar = (x) => {
- const lineEntry = rep.lines.atOffset(x);
- const lineStart = rep.lines.offsetOfEntry(lineEntry);
- const lineNum = rep.lines.indexOfEntry(lineEntry);
- return [lineNum, x - lineStart];
- };
-
- const performDocumentReplaceCharRange = (startChar, endChar, newText) => {
- if (startChar === endChar && newText.length === 0) {
- return;
- }
- // Requires that the replacement preserve the property that the
- // internal document text ends in a newline. Given this, we
- // rewrite the splice so that it doesn't touch the very last
- // char of the document.
- if (endChar === rep.alltext.length) {
- if (startChar === endChar) {
- // an insert at end
- startChar--;
- endChar--;
- newText = `\n${newText.substring(0, newText.length - 1)}`;
- } else if (newText.length === 0) {
- // a delete at end
- startChar--;
- endChar--;
- } else {
- // a replace at end
- endChar--;
- newText = newText.substring(0, newText.length - 1);
- }
- }
- performDocumentReplaceRange(
- lineAndColumnFromChar(startChar), lineAndColumnFromChar(endChar), newText);
- };
-
- const performDocumentApplyAttributesToCharRange = (start, end, attribs) => {
- end = Math.min(end, rep.alltext.length - 1);
- documentAttributeManager.setAttributesOnRange(
- lineAndColumnFromChar(start), lineAndColumnFromChar(end), attribs);
- };
-
- editorInfo.ace_performDocumentApplyAttributesToCharRange =
- performDocumentApplyAttributesToCharRange;
-
- const setAttributeOnSelection = (attributeName, attributeValue) => {
- if (!(rep.selStart && rep.selEnd)) return;
-
- documentAttributeManager.setAttributesOnRange(rep.selStart, rep.selEnd, [
- [attributeName, attributeValue],
- ]);
- };
- editorInfo.ace_setAttributeOnSelection = setAttributeOnSelection;
-
- const getAttributeOnSelection = (attributeName, prevChar) => {
- if (!(rep.selStart && rep.selEnd)) return;
- const isNotSelection = (rep.selStart[0] === rep.selEnd[0] && rep.selEnd[1] === rep.selStart[1]);
- if (isNotSelection) {
- if (prevChar) {
- // If it's not the start of the line
- if (rep.selStart[1] !== 0) {
- rep.selStart[1]--;
- }
- }
- }
-
- const withIt = new AttributeMap(rep.apool).set(attributeName, 'true').toString();
- const withItRegex = new RegExp(`${withIt.replace(/\*/g, '\\*')}(\\*|$)`);
- const hasIt = (attribs) => withItRegex.test(attribs);
-
- const rangeHasAttrib = (selStart, selEnd) => {
- // if range is collapsed -> no attribs in range
- if (selStart[1] === selEnd[1] && selStart[0] === selEnd[0]) return false;
-
- if (selStart[0] !== selEnd[0]) { // -> More than one line selected
- let hasAttrib = true;
-
- // from selStart to the end of the first line
- hasAttrib = hasAttrib &&
- rangeHasAttrib(selStart, [selStart[0], rep.lines.atIndex(selStart[0]).text.length]);
-
- // for all lines in between
- for (let n = selStart[0] + 1; n < selEnd[0]; n++) {
- hasAttrib = hasAttrib && rangeHasAttrib([n, 0], [n, rep.lines.atIndex(n).text.length]);
- }
-
- // for the last, potentially partial, line
- hasAttrib = hasAttrib && rangeHasAttrib([selEnd[0], 0], [selEnd[0], selEnd[1]]);
-
- return hasAttrib;
- }
-
- // Logic tells us we now have a range on a single line
-
- const lineNum = selStart[0];
- const start = selStart[1];
- const end = selEnd[1];
- let hasAttrib = true;
-
- let indexIntoLine = 0;
- for (const op of Changeset.deserializeOps(rep.alines[lineNum])) {
- const opStartInLine = indexIntoLine;
- const opEndInLine = opStartInLine + op.chars;
- if (!hasIt(op.attribs)) {
- // does op overlap selection?
- if (!(opEndInLine <= start || opStartInLine >= end)) {
- // since it's overlapping but hasn't got the attrib -> range hasn't got it
- hasAttrib = false;
- break;
- }
- }
- indexIntoLine = opEndInLine;
- }
-
- return hasAttrib;
- };
- return rangeHasAttrib(rep.selStart, rep.selEnd);
- };
-
- editorInfo.ace_getAttributeOnSelection = getAttributeOnSelection;
-
- const toggleAttributeOnSelection = (attributeName) => {
- if (!(rep.selStart && rep.selEnd)) return;
-
- let selectionAllHasIt = true;
- const withIt = new AttributeMap(rep.apool).set(attributeName, 'true').toString();
- const withItRegex = new RegExp(`${withIt.replace(/\*/g, '\\*')}(\\*|$)`);
-
- const hasIt = (attribs) => withItRegex.test(attribs);
-
- const selStartLine = rep.selStart[0];
- const selEndLine = rep.selEnd[0];
- for (let n = selStartLine; n <= selEndLine; n++) {
- let indexIntoLine = 0;
- let selectionStartInLine = 0;
- if (documentAttributeManager.lineHasMarker(n)) {
- selectionStartInLine = 1; // ignore "*" used as line marker
- }
- let selectionEndInLine = rep.lines.atIndex(n).text.length; // exclude newline
- if (n === selStartLine) {
- selectionStartInLine = rep.selStart[1];
- }
- if (n === selEndLine) {
- selectionEndInLine = rep.selEnd[1];
- }
- for (const op of Changeset.deserializeOps(rep.alines[n])) {
- const opStartInLine = indexIntoLine;
- const opEndInLine = opStartInLine + op.chars;
- if (!hasIt(op.attribs)) {
- // does op overlap selection?
- if (!(opEndInLine <= selectionStartInLine || opStartInLine >= selectionEndInLine)) {
- selectionAllHasIt = false;
- break;
- }
- }
- indexIntoLine = opEndInLine;
- }
- if (!selectionAllHasIt) {
- break;
- }
- }
-
-
- const attributeValue = selectionAllHasIt ? '' : 'true';
- documentAttributeManager.setAttributesOnRange(
- rep.selStart, rep.selEnd, [[attributeName, attributeValue]]);
- if (attribIsFormattingStyle(attributeName)) {
- updateStyleButtonState(attributeName, !selectionAllHasIt); // italic, bold, ...
- }
- };
- editorInfo.ace_toggleAttributeOnSelection = toggleAttributeOnSelection;
-
- const performDocumentReplaceSelection = (newText) => {
- if (!(rep.selStart && rep.selEnd)) return;
- performDocumentReplaceRange(rep.selStart, rep.selEnd, newText);
- };
-
- // Change the abstract representation of the document to have a different set of lines.
- // Must be called after rep.alltext is set.
- const doRepLineSplice = (startLine, deleteCount, newLineEntries) => {
- for (const entry of newLineEntries) entry.width = entry.text.length + 1;
-
- const startOldChar = rep.lines.offsetOfIndex(startLine);
- const endOldChar = rep.lines.offsetOfIndex(startLine + deleteCount);
-
- rep.lines.splice(startLine, deleteCount, newLineEntries);
- currentCallStack.docTextChanged = true;
- currentCallStack.repChanged = true;
- const newText = newLineEntries.map((e) => `${e.text}\n`).join('');
-
- rep.alltext = rep.alltext.substring(0, startOldChar) +
- newText + rep.alltext.substring(endOldChar, rep.alltext.length);
- };
-
- const doIncorpLineSplice = (startLine, deleteCount, newLineEntries, lineAttribs, hints) => {
- const startOldChar = rep.lines.offsetOfIndex(startLine);
- const endOldChar = rep.lines.offsetOfIndex(startLine + deleteCount);
-
- const oldRegionStart = rep.lines.offsetOfIndex(startLine);
-
- let selStartHintChar, selEndHintChar;
- if (hints && hints.selStart) {
- selStartHintChar =
- rep.lines.offsetOfIndex(hints.selStart[0]) + hints.selStart[1] - oldRegionStart;
- }
- if (hints && hints.selEnd) {
- selEndHintChar = rep.lines.offsetOfIndex(hints.selEnd[0]) + hints.selEnd[1] - oldRegionStart;
- }
-
- const newText = newLineEntries.map((e) => `${e.text}\n`).join('');
- const oldText = rep.alltext.substring(startOldChar, endOldChar);
- const oldAttribs = rep.alines.slice(startLine, startLine + deleteCount).join('');
- const newAttribs = `${lineAttribs.join('|1+1')}|1+1`; // not valid in a changeset
- const analysis =
- analyzeChange(oldText, newText, oldAttribs, newAttribs, selStartHintChar, selEndHintChar);
- const commonStart = analysis[0];
- let commonEnd = analysis[1];
- let shortOldText = oldText.substring(commonStart, oldText.length - commonEnd);
- let shortNewText = newText.substring(commonStart, newText.length - commonEnd);
- let spliceStart = startOldChar + commonStart;
- let spliceEnd = endOldChar - commonEnd;
- let shiftFinalNewlineToBeforeNewText = false;
-
- // adjust the splice to not involve the final newline of the document;
- // be very defensive
- if (shortOldText.charAt(shortOldText.length - 1) === '\n' &&
- shortNewText.charAt(shortNewText.length - 1) === '\n') {
- // replacing text that ends in newline with text that also ends in newline
- // (still, after analysis, somehow)
- shortOldText = shortOldText.slice(0, -1);
- shortNewText = shortNewText.slice(0, -1);
- spliceEnd--;
- commonEnd++;
- }
- if (shortOldText.length === 0 &&
- spliceStart === rep.alltext.length &&
- shortNewText.length > 0) {
- // inserting after final newline, bad
- spliceStart--;
- spliceEnd--;
- shortNewText = `\n${shortNewText.slice(0, -1)}`;
- shiftFinalNewlineToBeforeNewText = true;
- }
- if (spliceEnd === rep.alltext.length &&
- shortOldText.length > 0 &&
- shortNewText.length === 0) {
- // deletion at end of rep.alltext
- if (rep.alltext.charAt(spliceStart - 1) === '\n') {
- // (if not then what the heck? it will definitely lead
- // to a rep.alltext without a final newline)
- spliceStart--;
- spliceEnd--;
- }
- }
-
- if (!(shortOldText.length === 0 && shortNewText.length === 0)) {
- const oldDocText = rep.alltext;
- const oldLen = oldDocText.length;
-
- const spliceStartLine = rep.lines.indexOfOffset(spliceStart);
- const spliceStartLineStart = rep.lines.offsetOfIndex(spliceStartLine);
-
- const startBuilder = () => {
- const builder = Changeset.builder(oldLen);
- builder.keep(spliceStartLineStart, spliceStartLine);
- builder.keep(spliceStart - spliceStartLineStart);
- return builder;
- };
-
- const eachAttribRun = (attribs, func /* (startInNewText, endInNewText, attribs)*/) => {
- let textIndex = 0;
- const newTextStart = commonStart;
- const newTextEnd = newText.length - commonEnd - (shiftFinalNewlineToBeforeNewText ? 1 : 0);
- for (const op of Changeset.deserializeOps(attribs)) {
- const nextIndex = textIndex + op.chars;
- if (!(nextIndex <= newTextStart || textIndex >= newTextEnd)) {
- func(Math.max(newTextStart, textIndex), Math.min(newTextEnd, nextIndex), op.attribs);
- }
- textIndex = nextIndex;
- }
- };
-
- const justApplyStyles = (shortNewText === shortOldText);
- let theChangeset;
-
- if (justApplyStyles) {
- // create changeset that clears the incorporated styles on
- // the existing text. we compose this with the
- // changeset the applies the styles found in the DOM.
- // This allows us to incorporate, e.g., Safari's native "unbold".
- const incorpedAttribClearer = cachedStrFunc(
- (oldAtts) => Changeset.mapAttribNumbers(oldAtts, (n) => {
- const k = rep.apool.getAttribKey(n);
- if (isStyleAttribute(k)) {
- return rep.apool.putAttrib([k, '']);
- }
- return false;
- }));
-
- const builder1 = startBuilder();
- if (shiftFinalNewlineToBeforeNewText) {
- builder1.keep(1, 1);
- }
- eachAttribRun(oldAttribs, (start, end, attribs) => {
- builder1.keepText(newText.substring(start, end), incorpedAttribClearer(attribs));
- });
- const clearer = builder1.toString();
-
- const builder2 = startBuilder();
- if (shiftFinalNewlineToBeforeNewText) {
- builder2.keep(1, 1);
- }
- eachAttribRun(newAttribs, (start, end, attribs) => {
- builder2.keepText(newText.substring(start, end), attribs);
- });
- const styler = builder2.toString();
-
- theChangeset = Changeset.compose(clearer, styler, rep.apool);
- } else {
- const builder = startBuilder();
-
- const spliceEndLine = rep.lines.indexOfOffset(spliceEnd);
- const spliceEndLineStart = rep.lines.offsetOfIndex(spliceEndLine);
- if (spliceEndLineStart > spliceStart) {
- builder.remove(spliceEndLineStart - spliceStart, spliceEndLine - spliceStartLine);
- builder.remove(spliceEnd - spliceEndLineStart);
- } else {
- builder.remove(spliceEnd - spliceStart);
- }
-
- let isNewTextMultiauthor = false;
- const authorizer = cachedStrFunc((oldAtts) => {
- const attribs = AttributeMap.fromString(oldAtts, rep.apool);
- if (!isNewTextMultiauthor || !attribs.has('author')) attribs.set('author', thisAuthor);
- return attribs.toString();
- });
-
- let foundDomAuthor = '';
- eachAttribRun(newAttribs, (start, end, attribs) => {
- const a = AttributeMap.fromString(attribs, rep.apool).get('author');
- if (a && a !== foundDomAuthor) {
- if (!foundDomAuthor) {
- foundDomAuthor = a;
- } else {
- isNewTextMultiauthor = true; // multiple authors in DOM!
- }
- }
- });
-
- if (shiftFinalNewlineToBeforeNewText) {
- builder.insert('\n', authorizer(''));
- }
-
- eachAttribRun(newAttribs, (start, end, attribs) => {
- builder.insert(newText.substring(start, end), authorizer(attribs));
- });
- theChangeset = builder.toString();
- }
-
- doRepApplyChangeset(theChangeset);
- }
-
- // do this no matter what, because we need to get the right
- // line keys into the rep.
- doRepLineSplice(startLine, deleteCount, newLineEntries);
- };
-
- const cachedStrFunc = (func) => {
- const cache = {};
- return (s) => {
- if (!cache[s]) {
- cache[s] = func(s);
- }
- return cache[s];
- };
- };
-
- const analyzeChange = (
- oldText, newText, oldAttribs, newAttribs, optSelStartHint, optSelEndHint) => {
- // we need to take into account both the styles attributes & attributes defined by
- // the plugins, so basically we can ignore only the default line attribs used by
- // Etherpad
- const incorpedAttribFilter = (anum) => !isDefaultLineAttribute(rep.apool.getAttribKey(anum));
-
- const attribRuns = (attribs) => {
- const lengs = [];
- const atts = [];
- for (const op of Changeset.deserializeOps(attribs)) {
- lengs.push(op.chars);
- atts.push(op.attribs);
- }
- return [lengs, atts];
- };
-
- const attribIterator = (runs, backward) => {
- const lengs = runs[0];
- const atts = runs[1];
- let i = (backward ? lengs.length - 1 : 0);
- let j = 0;
- const next = () => {
- while (j >= lengs[i]) {
- if (backward) i--;
- else i++;
- j = 0;
- }
- const a = atts[i];
- j++;
- return a;
- };
- return next;
- };
-
- const oldLen = oldText.length;
- const newLen = newText.length;
- const minLen = Math.min(oldLen, newLen);
-
- const oldARuns = attribRuns(Changeset.filterAttribNumbers(oldAttribs, incorpedAttribFilter));
- const newARuns = attribRuns(Changeset.filterAttribNumbers(newAttribs, incorpedAttribFilter));
-
- let commonStart = 0;
- const oldStartIter = attribIterator(oldARuns, false);
- const newStartIter = attribIterator(newARuns, false);
- while (commonStart < minLen) {
- if (oldText.charAt(commonStart) === newText.charAt(commonStart) &&
- oldStartIter() === newStartIter()) {
- commonStart++;
- } else { break; }
- }
-
- let commonEnd = 0;
- const oldEndIter = attribIterator(oldARuns, true);
- const newEndIter = attribIterator(newARuns, true);
- while (commonEnd < minLen) {
- if (commonEnd === 0) {
- // assume newline in common
- oldEndIter();
- newEndIter();
- commonEnd++;
- } else if (
- oldText.charAt(oldLen - 1 - commonEnd) === newText.charAt(newLen - 1 - commonEnd) &&
- oldEndIter() === newEndIter()) {
- commonEnd++;
- } else { break; }
- }
-
- let hintedCommonEnd = -1;
- if ((typeof optSelEndHint) === 'number') {
- hintedCommonEnd = newLen - optSelEndHint;
- }
-
-
- if (commonStart + commonEnd > oldLen) {
- // ambiguous insertion
- const minCommonEnd = oldLen - commonStart;
- const maxCommonEnd = commonEnd;
- if (hintedCommonEnd >= minCommonEnd && hintedCommonEnd <= maxCommonEnd) {
- commonEnd = hintedCommonEnd;
- } else {
- commonEnd = minCommonEnd;
- }
- commonStart = oldLen - commonEnd;
- }
- if (commonStart + commonEnd > newLen) {
- // ambiguous deletion
- const minCommonEnd = newLen - commonStart;
- const maxCommonEnd = commonEnd;
- if (hintedCommonEnd >= minCommonEnd && hintedCommonEnd <= maxCommonEnd) {
- commonEnd = hintedCommonEnd;
- } else {
- commonEnd = minCommonEnd;
- }
- commonStart = newLen - commonEnd;
- }
-
- return [commonStart, commonEnd];
- };
-
- const equalLineAndChars = (a, b) => {
- if (!a) return !b;
- if (!b) return !a;
- return (a[0] === b[0] && a[1] === b[1]);
- };
-
- const performSelectionChange = (selectStart, selectEnd, focusAtStart) => {
- if (repSelectionChange(selectStart, selectEnd, focusAtStart)) {
- currentCallStack.selectionAffected = true;
- }
- };
- editorInfo.ace_performSelectionChange = performSelectionChange;
-
- // Change the abstract representation of the document to have a different selection.
- // Should not rely on the line representation. Should not affect the DOM.
-
-
- const repSelectionChange = (selectStart, selectEnd, focusAtStart) => {
- focusAtStart = !!focusAtStart;
-
- const newSelFocusAtStart = (focusAtStart && ((!selectStart) ||
- (!selectEnd) ||
- (selectStart[0] !== selectEnd[0]) ||
- (selectStart[1] !== selectEnd[1])));
-
- if ((!equalLineAndChars(rep.selStart, selectStart)) ||
- (!equalLineAndChars(rep.selEnd, selectEnd)) ||
- (rep.selFocusAtStart !== newSelFocusAtStart)) {
- rep.selStart = selectStart;
- rep.selEnd = selectEnd;
- rep.selFocusAtStart = newSelFocusAtStart;
- currentCallStack.repChanged = true;
-
- // select the formatting buttons when there is the style applied on selection
- selectFormattingButtonIfLineHasStyleApplied(rep);
-
- hooks.callAll('aceSelectionChanged', {
- rep,
- callstack: currentCallStack,
- documentAttributeManager,
- });
-
- // we scroll when user places the caret at the last line of the pad
- // when this settings is enabled
- const docTextChanged = currentCallStack.docTextChanged;
- if (!docTextChanged) {
- const isScrollableEvent = !isPadLoading(currentCallStack.type) &&
- isScrollableEditEvent(currentCallStack.type);
- const innerHeight = getInnerHeight();
- scroll.scrollWhenCaretIsInTheLastLineOfViewportWhenNecessary(
- rep, isScrollableEvent, innerHeight * 2);
- }
-
- return true;
- }
- return false;
- };
-
- const isPadLoading = (t) => t === 'setup' || t === 'setBaseText' || t === 'importText';
-
- const updateStyleButtonState = (attribName, hasStyleOnRepSelection) => {
- const $formattingButton = parent.parent.$(`[data-key="${attribName}"]`).find('a');
- $formattingButton.toggleClass(SELECT_BUTTON_CLASS, hasStyleOnRepSelection);
- };
-
- const attribIsFormattingStyle = (attribName) => FORMATTING_STYLES.indexOf(attribName) !== -1;
-
- const selectFormattingButtonIfLineHasStyleApplied = (rep) => {
- for (const style of FORMATTING_STYLES) {
- const hasStyleOnRepSelection =
- documentAttributeManager.hasAttributeOnSelectionOrCaretPosition(style);
- updateStyleButtonState(style, hasStyleOnRepSelection);
- }
- };
-
- const doCreateDomLine =
- (nonEmpty) => domline.createDomLine(nonEmpty, doesWrap, browser, document);
-
- const textify =
- (str) => str.replace(/[\n\r ]/g, ' ').replace(/\xa0/g, ' ').replace(/\t/g, ' ');
-
- const _blockElems = {
- div: 1,
- p: 1,
- pre: 1,
- li: 1,
- ol: 1,
- ul: 1,
- };
-
- for (const element of hooks.callAll('aceRegisterBlockElements')) _blockElems[element] = 1;
-
- const isBlockElement = (n) => !!_blockElems[(n.tagName || '').toLowerCase()];
- editorInfo.ace_isBlockElement = isBlockElement;
-
- const getDirtyRanges = () => {
- // based on observedChanges, return a list of ranges of original lines
- // that need to be removed or replaced with new user content to incorporate
- // the user's changes into the line representation. ranges may be zero-length,
- // indicating inserted content. for example, [0,0] means content was inserted
- // at the top of the document, while [3,4] means line 3 was deleted, modified,
- // or replaced with one or more new lines of content. ranges do not touch.
-
- const cleanNodeForIndexCache = {};
- const N = rep.lines.length(); // old number of lines
-
-
- const cleanNodeForIndex = (i) => {
- // if line (i) in the un-updated line representation maps to a clean node
- // in the document, return that node.
- // if (i) is out of bounds, return true. else return false.
- if (cleanNodeForIndexCache[i] === undefined) {
- let result;
- if (i < 0 || i >= N) {
- result = true; // truthy, but no actual node
- } else {
- const key = rep.lines.atIndex(i).key;
- result = (getCleanNodeByKey(key) || false);
- }
- cleanNodeForIndexCache[i] = result;
- }
- return cleanNodeForIndexCache[i];
- };
- const isConsecutiveCache = {};
-
- const isConsecutive = (i) => {
- if (isConsecutiveCache[i] === undefined) {
- isConsecutiveCache[i] = (() => {
- // returns whether line (i) and line (i-1), assumed to be map to clean DOM nodes,
- // or document boundaries, are consecutive in the changed DOM
- const a = cleanNodeForIndex(i - 1);
- const b = cleanNodeForIndex(i);
- if ((!a) || (!b)) return false; // violates precondition
- if ((a === true) && (b === true)) return !document.body.firstChild;
- if ((a === true) && b.previousSibling) return false;
- if ((b === true) && a.nextSibling) return false;
- if ((a === true) || (b === true)) return true;
- return a.nextSibling === b;
- })();
- }
- return isConsecutiveCache[i];
- };
-
- // returns whether line (i) in the un-updated representation maps to a clean node,
- // or is outside the bounds of the document
- const isClean = (i) => !!cleanNodeForIndex(i);
-
- // list of pairs, each representing a range of lines that is clean and consecutive
- // in the changed DOM. lines (-1) and (N) are always clean, but may or may not
- // be consecutive with lines in the document. pairs are in sorted order.
- const cleanRanges = [
- [-1, N + 1],
- ];
-
- // returns index of cleanRange containing i, or -1 if none
- const rangeForLine = (i) => {
- for (const [idx, r] of cleanRanges.entries()) {
- if (i < r[0]) return -1;
- if (i < r[1]) return idx;
- }
- return -1;
- };
-
- const removeLineFromRange = (rng, line) => {
- // rng is index into cleanRanges, line is line number
- // precond: line is in rng
- const a = cleanRanges[rng][0];
- const b = cleanRanges[rng][1];
- if ((a + 1) === b) cleanRanges.splice(rng, 1);
- else if (line === a) cleanRanges[rng][0]++;
- else if (line === (b - 1)) cleanRanges[rng][1]--;
- else cleanRanges.splice(rng, 1, [a, line], [line + 1, b]);
- };
-
- const splitRange = (rng, pt) => {
- // precond: pt splits cleanRanges[rng] into two non-empty ranges
- const a = cleanRanges[rng][0];
- const b = cleanRanges[rng][1];
- cleanRanges.splice(rng, 1, [a, pt], [pt, b]);
- };
-
- const correctedLines = {};
-
- const correctlyAssignLine = (line) => {
- if (correctedLines[line]) return true;
- correctedLines[line] = true;
- // "line" is an index of a line in the un-updated rep.
- // returns whether line was already correctly assigned (i.e. correctly
- // clean or dirty, according to cleanRanges, and if clean, correctly
- // attached or not attached (i.e. in the same range as) the prev and next lines).
- const rng = rangeForLine(line);
- const lineClean = isClean(line);
- if (rng < 0) {
- if (lineClean) {
- // somehow lost clean line
- }
- return true;
- }
- if (!lineClean) {
- // a clean-range includes this dirty line, fix it
- removeLineFromRange(rng, line);
- return false;
- } else {
- // line is clean, but could be wrongly connected to a clean line
- // above or below
- const a = cleanRanges[rng][0];
- const b = cleanRanges[rng][1];
- let didSomething = false;
- // we'll leave non-clean adjacent nodes in the clean range for the caller to
- // detect and deal with. we deal with whether the range should be split
- // just above or just below this line.
- if (a < line && isClean(line - 1) && !isConsecutive(line)) {
- splitRange(rng, line);
- didSomething = true;
- }
- if (b > (line + 1) && isClean(line + 1) && !isConsecutive(line + 1)) {
- splitRange(rng, line + 1);
- didSomething = true;
- }
- return !didSomething;
- }
- };
-
- const detectChangesAroundLine = (line, reqInARow) => {
- // make sure cleanRanges is correct about line number "line" and the surrounding
- // lines; only stops checking at end of document or after no changes need
- // making for several consecutive lines. note that iteration is over old lines,
- // so this operation takes time proportional to the number of old lines
- // that are changed or missing, not the number of new lines inserted.
- let correctInARow = 0;
- let currentIndex = line;
- while (correctInARow < reqInARow && currentIndex >= 0) {
- if (correctlyAssignLine(currentIndex)) {
- correctInARow++;
- } else { correctInARow = 0; }
- currentIndex--;
- }
- correctInARow = 0;
- currentIndex = line;
- while (correctInARow < reqInARow && currentIndex < N) {
- if (correctlyAssignLine(currentIndex)) {
- correctInARow++;
- } else { correctInARow = 0; }
- currentIndex++;
- }
- };
-
- if (N === 0) {
- if (!isConsecutive(0)) {
- splitRange(0, 0);
- }
- } else {
- detectChangesAroundLine(0, 1);
- detectChangesAroundLine(N - 1, 1);
-
- for (const k of Object.keys(observedChanges.cleanNodesNearChanges)) {
- const key = k.substring(1);
- if (rep.lines.containsKey(key)) {
- const line = rep.lines.indexOfKey(key);
- detectChangesAroundLine(line, 2);
- }
- }
- }
-
- const dirtyRanges = [];
- for (let r = 0; r < cleanRanges.length - 1; r++) {
- dirtyRanges.push([cleanRanges[r][1], cleanRanges[r + 1][0]]);
- }
-
- return dirtyRanges;
- };
-
- const markNodeClean = (n) => {
- // clean nodes have knownHTML that matches their innerHTML
- setAssoc(n, 'dirtiness', {nodeId: uniqueId(n), knownHTML: n.innerHTML});
- };
-
- const isNodeDirty = (n) => {
- if (n.parentNode !== document.body) return true;
- const data = getAssoc(n, 'dirtiness');
- if (!data) return true;
- if (n.id !== data.nodeId) return true;
- if (n.innerHTML !== data.knownHTML) return true;
- return false;
- };
-
- const handleClick = (evt) => {
- inCallStackIfNecessary('handleClick', () => {
- idleWorkTimer.atMost(200);
- });
-
- const isLink = (n) => (n.tagName || '').toLowerCase() === 'a' && n.href;
-
- // only want to catch left-click
- if ((!evt.ctrlKey) && (evt.button !== 2) && (evt.button !== 3)) {
- // find A tag with HREF
- let n = evt.target;
- while (n && n.parentNode && !isLink(n)) {
- n = n.parentNode;
- }
- if (n && isLink(n)) {
- try {
- window.open(n.href, '_blank', 'noopener,noreferrer');
- } catch (e) {
- // absorb "user canceled" error in IE for certain prompts
- }
- evt.preventDefault();
- }
- }
-
- hideEditBarDropdowns();
- };
-
- const hideEditBarDropdowns = () => {
- window.parent.parent.padeditbar.toggleDropDown('none');
- };
-
- const renumberList = (lineNum) => {
- // 1-check we are in a list
- let type = getLineListType(lineNum);
- if (!type) {
- return null;
- }
- type = /([a-z]+)[0-9]+/.exec(type);
- if (type[1] === 'indent') {
- return null;
- }
-
- // 2-find the first line of the list
- while (lineNum - 1 >= 0 && (type = getLineListType(lineNum - 1))) {
- type = /([a-z]+)[0-9]+/.exec(type);
- if (type[1] === 'indent') break;
- lineNum--;
- }
-
- // 3-renumber every list item of the same level from the beginning, level 1
- // IMPORTANT: never skip a level because there imbrication may be arbitrary
- const builder = Changeset.builder(rep.lines.totalWidth());
- let loc = [0, 0];
- const applyNumberList = (line, level) => {
- // init
- let position = 1;
- let curLevel = level;
- let listType;
- // loop over the lines
- while ((listType = getLineListType(line))) {
- // apply new num
- listType = /([a-z]+)([0-9]+)/.exec(listType);
- curLevel = Number(listType[2]);
- if (isNaN(curLevel) || listType[0] === 'indent') {
- return line;
- } else if (curLevel === level) {
- ChangesetUtils.buildKeepRange(rep, builder, loc, (loc = [line, 0]));
- ChangesetUtils.buildKeepRange(rep, builder, loc, (loc = [line, 1]), [
- ['start', position],
- ], rep.apool);
-
- position++;
- line++;
- } else if (curLevel < level) {
- return line;// back to parent
- } else {
- line = applyNumberList(line, level + 1);// recursive call
- }
- }
- return line;
- };
-
- applyNumberList(lineNum, 1);
- const cs = builder.toString();
- if (!Changeset.isIdentity(cs)) {
- performDocumentApplyChangeset(cs);
- }
-
- // 4-apply the modifications
- };
- editorInfo.ace_renumberList = renumberList;
-
- const setLineListType = (lineNum, listType) => {
- if (listType === '') {
- documentAttributeManager.removeAttributeOnLine(lineNum, listAttributeName);
- documentAttributeManager.removeAttributeOnLine(lineNum, 'start');
- } else {
- documentAttributeManager.setAttributeOnLine(lineNum, listAttributeName, listType);
- }
-
- // if the list has been removed, it is necessary to renumber
- // starting from the *next* line because the list may have been
- // separated. If it returns null, it means that the list was not cut, try
- // from the current one.
- if (renumberList(lineNum + 1) == null) {
- renumberList(lineNum);
- }
- };
-
- const doReturnKey = () => {
- if (!(rep.selStart && rep.selEnd)) {
- return;
- }
-
- const lineNum = rep.selStart[0];
- let listType = getLineListType(lineNum);
-
- if (listType) {
- const text = rep.lines.atIndex(lineNum).text;
- listType = /([a-z]+)([0-9]+)/.exec(listType);
- const type = listType[1];
- const level = Number(listType[2]);
-
- // detect empty list item; exclude indentation
- if (text === '*' && type !== 'indent') {
- // if not already on the highest level
- if (level > 1) {
- setLineListType(lineNum, type + (level - 1));// automatically decrease the level
- } else {
- setLineListType(lineNum, '');// remove the list
- renumberList(lineNum + 1);// trigger renumbering of list that may be right after
- }
- } else if (lineNum + 1 <= rep.lines.length()) {
- performDocumentReplaceSelection('\n');
- setLineListType(lineNum + 1, type + level);
- }
- } else {
- performDocumentReplaceSelection('\n');
- handleReturnIndentation();
- }
- };
- editorInfo.ace_doReturnKey = doReturnKey;
-
- const doIndentOutdent = (isOut) => {
- if (!((rep.selStart && rep.selEnd) ||
- (rep.selStart[0] === rep.selEnd[0] &&
- rep.selStart[1] === rep.selEnd[1] &&
- rep.selEnd[1] > 1)) &&
- isOut !== true) {
- return false;
- }
-
- const firstLine = rep.selStart[0];
- const lastLine = Math.max(firstLine, rep.selEnd[0] - ((rep.selEnd[1] === 0) ? 1 : 0));
- const mods = [];
- for (let n = firstLine; n <= lastLine; n++) {
- let listType = getLineListType(n);
- let t = 'indent';
- let level = 0;
- if (listType) {
- listType = /([a-z]+)([0-9]+)/.exec(listType);
- if (listType) {
- t = listType[1];
- level = Number(listType[2]);
- }
- }
- const newLevel = Math.max(0, Math.min(MAX_LIST_LEVEL, level + (isOut ? -1 : 1)));
- if (level !== newLevel) {
- mods.push([n, (newLevel > 0) ? t + newLevel : '']);
- }
- }
-
- for (const mod of mods) setLineListType(mod[0], mod[1]);
- return true;
- };
- editorInfo.ace_doIndentOutdent = doIndentOutdent;
-
- const doTabKey = (shiftDown) => {
- if (!doIndentOutdent(shiftDown)) {
- performDocumentReplaceSelection(THE_TAB);
- }
- };
-
- const doDeleteKey = (optEvt) => {
- const evt = optEvt || {};
- let handled = false;
- if (rep.selStart) {
- if (isCaret()) {
- const lineNum = caretLine();
- const col = caretColumn();
- const lineEntry = rep.lines.atIndex(lineNum);
- const lineText = lineEntry.text;
- const lineMarker = lineEntry.lineMarker;
- if (evt.metaKey && col > lineMarker) {
- // cmd-backspace deletes to start of line (if not already at start)
- performDocumentReplaceRange([lineNum, lineMarker], [lineNum, col], '');
- handled = true;
- } else if (/^ +$/.exec(lineText.substring(lineMarker, col))) {
- const col2 = col - lineMarker;
- const tabSize = THE_TAB.length;
- const toDelete = ((col2 - 1) % tabSize) + 1;
- performDocumentReplaceRange([lineNum, col - toDelete], [lineNum, col], '');
- handled = true;
- }
- }
- if (!handled) {
- if (isCaret()) {
- const theLine = caretLine();
- const lineEntry = rep.lines.atIndex(theLine);
- if (caretColumn() <= lineEntry.lineMarker) {
- // delete at beginning of line
- const prevLineListType = (theLine > 0 ? getLineListType(theLine - 1) : '');
- const thisLineListType = getLineListType(theLine);
- const prevLineEntry = (theLine > 0 && rep.lines.atIndex(theLine - 1));
- const prevLineBlank = (prevLineEntry &&
- prevLineEntry.text.length === prevLineEntry.lineMarker);
-
- const thisLineHasMarker = documentAttributeManager.lineHasMarker(theLine);
-
- if (thisLineListType) {
- // this line is a list
- if (prevLineBlank && !prevLineListType) {
- // previous line is blank, remove it
- performDocumentReplaceRange(
- [theLine - 1, prevLineEntry.text.length], [theLine, 0], '');
- } else {
- // delistify
- performDocumentReplaceRange([theLine, 0], [theLine, lineEntry.lineMarker], '');
- }
- } else if (thisLineHasMarker && prevLineEntry) {
- // If the line has any attributes assigned, remove them by removing the marker '*'
- performDocumentReplaceRange(
- [theLine - 1, prevLineEntry.text.length], [theLine, lineEntry.lineMarker], '');
- } else if (theLine > 0) {
- // remove newline
- performDocumentReplaceRange(
- [theLine - 1, prevLineEntry.text.length], [theLine, 0], '');
- }
- } else {
- const docChar = caretDocChar();
- if (docChar > 0) {
- if (evt.metaKey || evt.ctrlKey || evt.altKey) {
- // delete as many unicode "letters or digits" in a row as possible;
- // always delete one char, delete further even if that first char
- // isn't actually a word char.
- let deleteBackTo = docChar - 1;
- while (deleteBackTo > lineEntry.lineMarker &&
- isWordChar(rep.alltext.charAt(deleteBackTo - 1))) {
- deleteBackTo--;
- }
- performDocumentReplaceCharRange(deleteBackTo, docChar, '');
- } else {
- // normal delete
- performDocumentReplaceCharRange(docChar - 1, docChar, '');
- }
- }
- }
- } else {
- performDocumentReplaceSelection('');
- }
- }
- }
- // if the list has been removed, it is necessary to renumber
- // starting from the *next* line because the list may have been
- // separated. If it returns null, it means that the list was not cut, try
- // from the current one.
- const line = caretLine();
- if (line !== -1 && renumberList(line + 1) == null) {
- renumberList(line);
- }
- };
-
- const isWordChar = (c) => padutils.wordCharRegex.test(c);
- editorInfo.ace_isWordChar = isWordChar;
-
- const handleKeyEvent = (evt) => {
- if (!isEditable) return;
- const {type, charCode, keyCode, which, altKey, shiftKey} = evt;
-
- // Don't take action based on modifier keys going up and down.
- // Modifier keys do not generate "keypress" events.
- // 224 is the command-key under Mac Firefox.
- // 91 is the Windows key in IE; it is ASCII for open-bracket but isn't the keycode for that key
- // 20 is capslock in IE.
- const isModKey = !charCode && (type === 'keyup' || type === 'keydown') &&
- (keyCode === 16 || keyCode === 17 || keyCode === 18 ||
- keyCode === 20 || keyCode === 224 || keyCode === 91);
- if (isModKey) return;
-
- // If the key is a keypress and the browser is opera and the key is enter,
- // do nothign at all as this fires twice.
- if (keyCode === 13 && browser.opera && type === 'keypress') {
- // This stops double enters in Opera but double Tabs still show on single
- // tab keypress, adding keyCode == 9 to this doesn't help as the event is fired twice
- return;
- }
-
- const isTypeForSpecialKey = browser.safari || browser.chrome || browser.firefox
- ? type === 'keydown' : type === 'keypress';
- const isTypeForCmdKey = browser.safari || browser.chrome || browser.firefox
- ? type === 'keydown' : type === 'keypress';
-
- let stopped = false;
-
- inCallStackIfNecessary('handleKeyEvent', function () {
- if (type === 'keypress' || (isTypeForSpecialKey && keyCode === 13 /* return*/)) {
- // in IE, special keys don't send keypress, the keydown does the action
- if (!outsideKeyPress(evt)) {
- evt.preventDefault();
- stopped = true;
- }
- } else if (evt.key === 'Dead') {
- // If it's a dead key we don't want to do any Etherpad behavior.
- stopped = true;
- return true;
- } else if (type === 'keydown') {
- outsideKeyDown(evt);
- }
- let specialHandled = false;
- if (!stopped) {
- const specialHandledInHook = hooks.callAll('aceKeyEvent', {
- callstack: currentCallStack,
- editorInfo,
- rep,
- documentAttributeManager,
- evt,
- });
-
- // if any hook returned true, set specialHandled with true
- if (specialHandledInHook) {
- specialHandled = specialHandledInHook.indexOf(true) !== -1;
- }
-
- const padShortcutEnabled = parent.parent.clientVars.padShortcutEnabled;
- if (!specialHandled && isTypeForSpecialKey &&
- altKey && keyCode === 120 &&
- padShortcutEnabled.altF9) {
- // Alt F9 focuses on the File Menu and/or editbar.
- // Note that while most editors use Alt F10 this is not desirable
- // As ubuntu cannot use Alt F10....
- // Focus on the editbar.
- // -- TODO: Move Focus back to previous state (we know it so we can use it)
- const firstEditbarElement = parent.parent.$('#editbar')
- .children('ul').first().children().first()
- .children().first().children().first();
- $(this).blur();
- firstEditbarElement.focus();
- evt.preventDefault();
- }
- if (!specialHandled && type === 'keydown' &&
- altKey && keyCode === 67 &&
- padShortcutEnabled.altC) {
- // Alt c focuses on the Chat window
- $(this).blur();
- parent.parent.chat.show();
- parent.parent.$('#chatinput').focus();
- evt.preventDefault();
- }
- if (!specialHandled && type === 'keydown' &&
- evt.ctrlKey && shiftKey && keyCode === 50 &&
- padShortcutEnabled.cmdShift2) {
- // Control-Shift-2 shows a gritter popup showing a line author
- const lineNumber = rep.selEnd[0];
- const alineAttrs = rep.alines[lineNumber];
- const apool = rep.apool;
-
- // TODO: support selection ranges
- // TODO: Still work when authorship colors have been cleared
- // TODO: i18n
- // TODO: There appears to be a race condition or so.
- const authorIds = new Set();
- if (alineAttrs) {
- for (const op of Changeset.deserializeOps(alineAttrs)) {
- const authorId = AttributeMap.fromString(op.attribs, apool).get('author');
- if (authorId) authorIds.add(authorId);
- }
- }
- const idToName = new Map(parent.parent.pad.userList().map((a) => [a.userId, a.name]));
- const myId = parent.parent.clientVars.userId;
- const authors =
- [...authorIds].map((id) => id === myId ? 'me' : idToName.get(id) || 'unknown');
-
- parent.parent.$.gritter.add({
- title: 'Line Authors',
- text:
- authors.length === 0 ? 'No author information is available'
- : authors.length === 1 ? `The author of this line is ${authors[0]}`
- : `The authors of this line are ${authors.join(' & ')}`,
- sticky: false,
- time: '4000',
- });
- }
- if (!specialHandled && isTypeForSpecialKey &&
- keyCode === 8 &&
- padShortcutEnabled.delete) {
- // "delete" key; in mozilla, if we're at the beginning of a line, normalize now,
- // or else deleting a blank line can take two delete presses.
- // --
- // we do deletes completely customly now:
- // - allows consistent (and better) meta-delete behavior
- // - normalizing and then allowing default behavior confused IE
- // - probably eliminates a few minor quirks
- fastIncorp(3);
- evt.preventDefault();
- doDeleteKey(evt);
- specialHandled = true;
- }
- if (!specialHandled && isTypeForSpecialKey &&
- keyCode === 13 &&
- padShortcutEnabled.return) {
- // return key, handle specially;
- // note that in mozilla we need to do an incorporation for proper return behavior anyway.
- fastIncorp(4);
- evt.preventDefault();
- doReturnKey();
- scheduler.setTimeout(() => {
- outerWin.scrollBy(-100, 0);
- }, 0);
- specialHandled = true;
- }
- if (!specialHandled && isTypeForSpecialKey &&
- keyCode === 27 &&
- padShortcutEnabled.esc) {
- // prevent esc key;
- // in mozilla versions 14-19 avoid reconnecting pad.
-
- fastIncorp(4);
- evt.preventDefault();
- specialHandled = true;
-
- // close all gritters when the user hits escape key
- parent.parent.$.gritter.removeAll();
- }
- if (!specialHandled && isTypeForCmdKey &&
- /* Do a saved revision on ctrl S */
- (evt.metaKey || evt.ctrlKey) && String.fromCharCode(which).toLowerCase() === 's' &&
- !evt.altKey &&
- padShortcutEnabled.cmdS) {
- evt.preventDefault();
- const originalBackground = parent.parent.$('#revisionlink').css('background');
- parent.parent.$('#revisionlink').css({background: 'lightyellow'});
- scheduler.setTimeout(() => {
- parent.parent.$('#revisionlink').css({background: originalBackground});
- }, 1000);
- /* The parent.parent part of this is BAD and I feel bad.. It may break something */
- parent.parent.pad.collabClient.sendMessage({type: 'SAVE_REVISION'});
- specialHandled = true;
- }
- if (!specialHandled && isTypeForSpecialKey &&
- // tab
- keyCode === 9 &&
- !(evt.metaKey || evt.ctrlKey) &&
- padShortcutEnabled.tab) {
- fastIncorp(5);
- evt.preventDefault();
- doTabKey(evt.shiftKey);
- specialHandled = true;
- }
- if (!specialHandled && isTypeForCmdKey &&
- // cmd-Z (undo)
- (evt.metaKey || evt.ctrlKey) && String.fromCharCode(which).toLowerCase() === 'z' &&
- !evt.altKey &&
- padShortcutEnabled.cmdZ) {
- fastIncorp(6);
- evt.preventDefault();
- if (evt.shiftKey) {
- doUndoRedo('redo');
- } else {
- doUndoRedo('undo');
- }
- specialHandled = true;
- }
- if (!specialHandled && isTypeForCmdKey &&
- // cmd-Y (redo)
- (evt.metaKey || evt.ctrlKey) && String.fromCharCode(which).toLowerCase() === 'y' &&
- padShortcutEnabled.cmdY) {
- fastIncorp(10);
- evt.preventDefault();
- doUndoRedo('redo');
- specialHandled = true;
- }
- if (!specialHandled && isTypeForCmdKey &&
- // cmd-B (bold)
- (evt.metaKey || evt.ctrlKey) && String.fromCharCode(which).toLowerCase() === 'b' &&
- padShortcutEnabled.cmdB) {
- fastIncorp(13);
- evt.preventDefault();
- toggleAttributeOnSelection('bold');
- specialHandled = true;
- }
- if (!specialHandled && isTypeForCmdKey &&
- // cmd-I (italic)
- (evt.metaKey || evt.ctrlKey) && String.fromCharCode(which).toLowerCase() === 'i' &&
- padShortcutEnabled.cmdI) {
- fastIncorp(14);
- evt.preventDefault();
- toggleAttributeOnSelection('italic');
- specialHandled = true;
- }
- if (!specialHandled && isTypeForCmdKey &&
- // cmd-U (underline)
- (evt.metaKey || evt.ctrlKey) && String.fromCharCode(which).toLowerCase() === 'u' &&
- padShortcutEnabled.cmdU) {
- fastIncorp(15);
- evt.preventDefault();
- toggleAttributeOnSelection('underline');
- specialHandled = true;
- }
- if (!specialHandled && isTypeForCmdKey &&
- // cmd-5 (strikethrough)
- (evt.metaKey || evt.ctrlKey) && String.fromCharCode(which).toLowerCase() === '5' &&
- evt.altKey !== true &&
- padShortcutEnabled.cmd5) {
- fastIncorp(13);
- evt.preventDefault();
- toggleAttributeOnSelection('strikethrough');
- specialHandled = true;
- }
- if (!specialHandled && isTypeForCmdKey &&
- // cmd-shift-L (unorderedlist)
- (evt.metaKey || evt.ctrlKey) && String.fromCharCode(which).toLowerCase() === 'l' &&
- evt.shiftKey &&
- padShortcutEnabled.cmdShiftL) {
- fastIncorp(9);
- evt.preventDefault();
- doInsertUnorderedList();
- specialHandled = true;
- }
- if (!specialHandled && isTypeForCmdKey &&
- // cmd-shift-N and cmd-shift-1 (orderedlist)
- (evt.metaKey || evt.ctrlKey) && evt.shiftKey &&
- ((String.fromCharCode(which).toLowerCase() === 'n' && padShortcutEnabled.cmdShiftN) ||
- (String.fromCharCode(which) === '1' && padShortcutEnabled.cmdShift1))) {
- fastIncorp(9);
- evt.preventDefault();
- doInsertOrderedList();
- specialHandled = true;
- }
- if (!specialHandled && isTypeForCmdKey &&
- // cmd-shift-C (clearauthorship)
- (evt.metaKey || evt.ctrlKey) && evt.shiftKey &&
- String.fromCharCode(which).toLowerCase() === 'c' &&
- padShortcutEnabled.cmdShiftC) {
- fastIncorp(9);
- evt.preventDefault();
- CMDS.clearauthorship();
- }
- if (!specialHandled && isTypeForCmdKey &&
- // cmd-H (backspace)
- (evt.ctrlKey) && String.fromCharCode(which).toLowerCase() === 'h' &&
- padShortcutEnabled.cmdH) {
- fastIncorp(20);
- evt.preventDefault();
- doDeleteKey();
- specialHandled = true;
- }
- if (evt.ctrlKey === true && evt.which === 36 &&
- // Control Home send to Y = 0
- padShortcutEnabled.ctrlHome) {
- scroll.setScrollY(0);
- }
- if ((evt.which === 33 || evt.which === 34) && type === 'keydown' && !evt.ctrlKey) {
- // This is required, browsers will try to do normal default behavior on
- // page up / down and the default behavior SUCKS
- evt.preventDefault();
- const oldVisibleLineRange = scroll.getVisibleLineRange(rep);
- let topOffset = rep.selStart[0] - oldVisibleLineRange[0];
- if (topOffset < 0) {
- topOffset = 0;
- }
-
- const isPageDown = evt.which === 34;
- const isPageUp = evt.which === 33;
-
- scheduler.setTimeout(() => {
- // the visible lines IE 1,10
- const newVisibleLineRange = scroll.getVisibleLineRange(rep);
- // total count of lines in pad IE 10
- const linesCount = rep.lines.length();
- // How many lines are in the viewport right now?
- const numberOfLinesInViewport = newVisibleLineRange[1] - newVisibleLineRange[0];
-
- if (isPageUp && padShortcutEnabled.pageUp) {
- // move to the bottom line +1 in the viewport (essentially skipping over a page)
- rep.selEnd[0] -= numberOfLinesInViewport;
- // move to the bottom line +1 in the viewport (essentially skipping over a page)
- rep.selStart[0] -= numberOfLinesInViewport;
- }
-
- // if we hit page down
- if (isPageDown && padShortcutEnabled.pageDown) {
- // If the new viewpoint position is actually further than where we are right now
- if (rep.selEnd[0] >= oldVisibleLineRange[0]) {
- // dont go further in the page down than what's visible IE go from 0 to 50
- // if 50 is visible on screen but dont go below that else we miss content
- rep.selStart[0] = oldVisibleLineRange[1] - 1;
- // dont go further in the page down than what's visible IE go from 0 to 50
- // if 50 is visible on screen but dont go below that else we miss content
- rep.selEnd[0] = oldVisibleLineRange[1] - 1;
- }
- }
-
- // ensure min and max
- if (rep.selEnd[0] < 0) {
- rep.selEnd[0] = 0;
- }
- if (rep.selStart[0] < 0) {
- rep.selStart[0] = 0;
- }
- if (rep.selEnd[0] >= linesCount) {
- rep.selEnd[0] = linesCount - 1;
- }
- updateBrowserSelectionFromRep();
- // get the current caret selection, can't use rep. here because that only gives
- // us the start position not the current
- const myselection = document.getSelection();
- // get the carets selection offset in px IE 214
- let caretOffsetTop = myselection.focusNode.parentNode.offsetTop ||
- myselection.focusNode.offsetTop;
-
- // sometimes the first selection is -1 which causes problems
- // (Especially with ep_page_view)
- // so use focusNode.offsetTop value.
- if (caretOffsetTop === -1) caretOffsetTop = myselection.focusNode.offsetTop;
- // set the scrollY offset of the viewport on the document
- scroll.setScrollY(caretOffsetTop);
- }, 200);
- }
- }
-
- if (type === 'keydown') {
- idleWorkTimer.atLeast(500);
- } else if (type === 'keypress') {
- // OPINION ASKED. What's going on here? :D
- if (!specialHandled) {
- idleWorkTimer.atMost(0);
- } else {
- idleWorkTimer.atLeast(500);
- }
- } else if (type === 'keyup') {
- const wait = 0;
- idleWorkTimer.atLeast(wait);
- idleWorkTimer.atMost(wait);
- }
-
- // Is part of multi-keystroke international character on Firefox Mac
- const isFirefoxHalfCharacter =
- (browser.firefox && evt.altKey && charCode === 0 && keyCode === 0);
-
- // Is part of multi-keystroke international character on Safari Mac
- const isSafariHalfCharacter =
- (browser.safari && evt.altKey && keyCode === 229);
-
- if (thisKeyDoesntTriggerNormalize || isFirefoxHalfCharacter || isSafariHalfCharacter) {
- idleWorkTimer.atLeast(3000); // give user time to type
- // if this is a keydown, e.g., the keyup shouldn't trigger a normalize
- thisKeyDoesntTriggerNormalize = true;
- }
-
- if (!specialHandled && !thisKeyDoesntTriggerNormalize && !inInternationalComposition &&
- type !== 'keyup') {
- observeChangesAroundSelection();
- }
-
- if (type === 'keyup') {
- thisKeyDoesntTriggerNormalize = false;
- }
- });
- };
-
- let thisKeyDoesntTriggerNormalize = false;
-
- const doUndoRedo = (which) => {
- // precond: normalized DOM
- if (undoModule.enabled) {
- let whichMethod;
- if (which === 'undo') whichMethod = 'performUndo';
- if (which === 'redo') whichMethod = 'performRedo';
- if (whichMethod) {
- const oldEventType = currentCallStack.editEvent.eventType;
- currentCallStack.startNewEvent(which);
- undoModule[whichMethod]((backset, selectionInfo) => {
- if (backset) {
- performDocumentApplyChangeset(backset);
- }
- if (selectionInfo) {
- performSelectionChange(
- lineAndColumnFromChar(selectionInfo.selStart),
- lineAndColumnFromChar(selectionInfo.selEnd),
- selectionInfo.selFocusAtStart);
- }
- const oldEvent = currentCallStack.startNewEvent(oldEventType, true);
- return oldEvent;
- });
- }
- }
- };
- editorInfo.ace_doUndoRedo = doUndoRedo;
-
- const setSelection = (selection) => {
- const copyPoint = (pt) => ({
- node: pt.node,
- index: pt.index,
- maxIndex: pt.maxIndex,
- });
- let isCollapsed;
-
- const pointToRangeBound = (pt) => {
- const p = copyPoint(pt);
- // Make sure Firefox cursor is deep enough; fixes cursor jumping when at top level,
- // and also problem where cut/copy of a whole line selected with fake arrow-keys
- // copies the next line too.
- if (isCollapsed) {
- const diveDeep = () => {
- while (p.node.childNodes.length > 0) {
- if (p.index === 0) {
- p.node = p.node.firstChild;
- p.maxIndex = nodeMaxIndex(p.node);
- } else if (p.index === p.maxIndex) {
- p.node = p.node.lastChild;
- p.maxIndex = nodeMaxIndex(p.node);
- p.index = p.maxIndex;
- } else { break; }
- }
- };
- // now fix problem where cursor at end of text node at end of span-like element
- // with background doesn't seem to show up...
- if (isNodeText(p.node) && p.index === p.maxIndex) {
- let n = p.node;
- while (!n.nextSibling && n !== document.body && n.parentNode !== document.body) {
- n = n.parentNode;
- }
- if (n.nextSibling &&
- !(typeof n.nextSibling.tagName === 'string' &&
- n.nextSibling.tagName.toLowerCase() === 'br') &&
- n !== p.node && n !== document.body && n.parentNode !== document.body) {
- // found a parent, go to next node and dive in
- p.node = n.nextSibling;
- p.maxIndex = nodeMaxIndex(p.node);
- p.index = 0;
- diveDeep();
- }
- }
- // try to make sure insertion point is styled;
- // also fixes other FF problems
- if (!isNodeText(p.node)) {
- diveDeep();
- }
- }
- if (isNodeText(p.node)) {
- return {
- container: p.node,
- offset: p.index,
- };
- } else {
- // p.index in {0,1}
- return {
- container: p.node.parentNode,
- offset: childIndex(p.node) + p.index,
- };
- }
- };
- const browserSelection = window.getSelection();
- if (browserSelection) {
- browserSelection.removeAllRanges();
- if (selection) {
- isCollapsed = (selection.startPoint.node === selection.endPoint.node &&
- selection.startPoint.index === selection.endPoint.index);
- const start = pointToRangeBound(selection.startPoint);
- const end = pointToRangeBound(selection.endPoint);
-
- if (!isCollapsed && selection.focusAtStart &&
- browserSelection.collapse && browserSelection.extend) {
- // can handle "backwards"-oriented selection, shift-arrow-keys move start
- // of selection
- browserSelection.collapse(end.container, end.offset);
- browserSelection.extend(start.container, start.offset);
- } else {
- const range = document.createRange();
- range.setStart(start.container, start.offset);
- range.setEnd(end.container, end.offset);
- browserSelection.removeAllRanges();
- browserSelection.addRange(range);
- }
- }
- }
- };
-
- const updateBrowserSelectionFromRep = () => {
- // requires normalized DOM!
- const selStart = rep.selStart;
- const selEnd = rep.selEnd;
-
- if (!(selStart && selEnd)) {
- setSelection(null);
- return;
- }
-
- const selection = {};
-
- const ss = [selStart[0], selStart[1]];
- selection.startPoint = getPointForLineAndChar(ss);
-
- const se = [selEnd[0], selEnd[1]];
- selection.endPoint = getPointForLineAndChar(se);
-
- selection.focusAtStart = !!rep.selFocusAtStart;
- setSelection(selection);
- };
- editorInfo.ace_updateBrowserSelectionFromRep = updateBrowserSelectionFromRep;
- editorInfo.ace_focus = focus;
- editorInfo.ace_importText = importText;
- editorInfo.ace_importAText = importAText;
- editorInfo.ace_exportText = exportText;
- editorInfo.ace_editorChangedSize = editorChangedSize;
- editorInfo.ace_setOnKeyPress = setOnKeyPress;
- editorInfo.ace_setOnKeyDown = setOnKeyDown;
- editorInfo.ace_setNotifyDirty = setNotifyDirty;
- editorInfo.ace_dispose = dispose;
- editorInfo.ace_setEditable = setEditable;
- editorInfo.ace_execCommand = execCommand;
- editorInfo.ace_replaceRange = replaceRange;
- editorInfo.ace_getAuthorInfos = getAuthorInfos;
- editorInfo.ace_performDocumentReplaceRange = performDocumentReplaceRange;
- editorInfo.ace_performDocumentReplaceCharRange = performDocumentReplaceCharRange;
- editorInfo.ace_setSelection = setSelection;
-
- const nodeMaxIndex = (nd) => {
- if (isNodeText(nd)) return nd.nodeValue.length;
- else return 1;
- };
-
- const getSelection = () => {
- // returns null, or a structure containing startPoint and endPoint,
- // each of which has node (a magicdom node), index, and maxIndex. If the node
- // is a text node, maxIndex is the length of the text; else maxIndex is 1.
- // index is between 0 and maxIndex, inclusive.
- const browserSelection = window.getSelection();
- if (!browserSelection || browserSelection.type === 'None' ||
- browserSelection.rangeCount === 0) {
- return null;
- }
- const range = browserSelection.getRangeAt(0);
-
- const isInBody = (n) => {
- while (n && !(n.tagName && n.tagName.toLowerCase() === 'body')) {
- n = n.parentNode;
- }
- return !!n;
- };
-
- const pointFromRangeBound = (container, offset) => {
- if (!isInBody(container)) {
- // command-click in Firefox selects whole document, HEAD and BODY!
- return {
- node: document.body,
- index: 0,
- maxIndex: 1,
- };
- }
- const n = container;
- const childCount = n.childNodes.length;
- if (isNodeText(n)) {
- return {
- node: n,
- index: offset,
- maxIndex: n.nodeValue.length,
- };
- } else if (childCount === 0) {
- return {
- node: n,
- index: 0,
- maxIndex: 1,
- };
- // treat point between two nodes as BEFORE the second (rather than after the first)
- // if possible; this way point at end of a line block-element is treated as
- // at beginning of next line
- } else if (offset === childCount) {
- const nd = n.childNodes.item(childCount - 1);
- const max = nodeMaxIndex(nd);
- return {
- node: nd,
- index: max,
- maxIndex: max,
- };
- } else {
- const nd = n.childNodes.item(offset);
- const max = nodeMaxIndex(nd);
- return {
- node: nd,
- index: 0,
- maxIndex: max,
- };
- }
- };
- const selection = {
- startPoint: pointFromRangeBound(range.startContainer, range.startOffset),
- endPoint: pointFromRangeBound(range.endContainer, range.endOffset),
- focusAtStart:
- (range.startContainer !== range.endContainer || range.startOffset !== range.endOffset) &&
- browserSelection.anchorNode &&
- browserSelection.anchorNode === range.endContainer &&
- browserSelection.anchorOffset === range.endOffset,
- };
-
- if (selection.startPoint.node.ownerDocument !== window.document) {
- return null;
- }
-
- return selection;
- };
-
- const childIndex = (n) => {
- let idx = 0;
- while (n.previousSibling) {
- idx++;
- n = n.previousSibling;
- }
- return idx;
- };
-
- const fixView = () => {
- // calling this method repeatedly should be fast
- if (getInnerWidth() === 0 || getInnerHeight() === 0) {
- return;
- }
-
- enforceEditability();
-
- $(sideDiv).addClass('sidedivdelayed');
- };
-
- const _teardownActions = [];
-
- const teardown = () => { for (const a of _teardownActions) a(); };
-
- let inInternationalComposition = null;
- editorInfo.ace_getInInternationalComposition = () => inInternationalComposition;
-
- const bindTheEventHandlers = () => {
- $(document).on('keydown', handleKeyEvent);
- $(document).on('keypress', handleKeyEvent);
- $(document).on('keyup', handleKeyEvent);
- $(document).on('click', handleClick);
- // dropdowns on edit bar need to be closed on clicks on both pad inner and pad outer
- $(outerDoc).on('click', hideEditBarDropdowns);
-
- // If non-nullish, pasting on a link should be suppressed.
- let suppressPasteOnLink = null;
-
- $(document.body).on('auxclick', (e) => {
- if (e.originalEvent.button === 1 && (e.target.a || e.target.localName === 'a')) {
- // The user middle-clicked on a link. Usually users do this to open a link in a new tab, but
- // in X11 (Linux) this will instead paste the contents of the primary selection at the mouse
- // cursor. Users almost certainly do not want to paste when middle-clicking on a link, so
- // tell the 'paste' event handler to suppress the paste. This is done by starting a
- // short-lived timer that suppresses paste (when the target is a link) until either the
- // paste event arrives or the timer fires.
- //
- // Why it is implemented this way:
- // * Users want to be able to paste on a link via Ctrl-V, the Edit menu, or the context
- // menu (https://github.com/ether/etherpad-lite/issues/2775) so we cannot simply
- // suppress all paste actions when the target is a link.
- // * Non-X11 systems do not paste when the user middle-clicks, so the paste suppression
- // must be self-resetting.
- // * On non-X11 systems, middle click should continue to open the link in a new tab.
- // Suppressing the middle click here in the 'auxclick' handler (via e.preventDefault())
- // would break that behavior.
- suppressPasteOnLink = scheduler.setTimeout(() => { suppressPasteOnLink = null; }, 0);
- }
- });
-
- $(document.body).on('paste', (e) => {
- if (suppressPasteOnLink != null && (e.target.a || e.target.localName === 'a')) {
- scheduler.clearTimeout(suppressPasteOnLink);
- suppressPasteOnLink = null;
- e.preventDefault();
- return;
- }
-
- // Call paste hook
- hooks.callAll('acePaste', {
- editorInfo,
- rep,
- documentAttributeManager,
- e,
- });
- });
-
- // We reference document here, this is because if we don't this will expose a bug
- // in Google Chrome. This bug will cause the last character on the last line to
- // not fire an event when dropped into..
- $(document).on('drop', (e) => {
- if (e.target.a || e.target.localName === 'a') {
- e.preventDefault();
- }
-
- // Bug fix: when user drags some content and drop it far from its origin, we
- // need to merge the changes into a single changeset. So mark origin with empty ',
- wantHTML: 'empty ',
- wantText: 'empty\n\n',
- },
- 'indentedListsAreNotBullets': {
- description: 'Indented lists are represented with tabs and without bullets',
- input: '',
- wantHTML: ' ',
- wantText: '\tindent\n\tindent\n\n',
- },
- 'lineWithMultipleSpaces': {
- description: 'Multiple spaces should be collapsed',
- input: 'Text with more than one space. ',
- wantHTML: 'Text with more than one space. ',
- wantText: 'Text with more than one space.\n\n',
- },
- 'lineWithMultipleNonBreakingAndNormalSpaces': {
- // XXX the HTML between "than" and "one" looks strange
- description: 'non-breaking space should be preserved, but can be replaced when it',
- input: 'Text with more than one space. ',
- wantHTML: 'Text with more than one space. ',
- wantText: 'Text with more than one space.\n\n',
- },
- 'multiplenbsp': {
- description: 'Multiple non-breaking space should be preserved',
- input: ' ',
- wantHTML: ' ',
- wantText: ' \n\n',
- },
- 'multipleNonBreakingSpaceBetweenWords': {
- description: 'A normal space is always inserted before a word',
- input: ' word1 word2 word3 ',
- wantHTML: ' word1 word2 word3 ',
- wantText: ' word1 word2 word3\n\n',
- },
- 'nonBreakingSpacePreceededBySpaceBetweenWords': {
- description: 'A non-breaking space preceded by a normal space',
- input: ' word1 word2 word3 ',
- wantHTML: ' word1 word2 word3 ',
- wantText: ' word1 word2 word3\n\n',
- },
- 'nonBreakingSpaceFollowededBySpaceBetweenWords': {
- description: 'A non-breaking space followed by a normal space',
- input: ' word1 word2 word3 ',
- wantHTML: ' word1 word2 word3 ',
- wantText: ' word1 word2 word3\n\n',
- },
- 'spacesAfterNewline': {
- description: 'Collapse spaces that follow a newline',
- input: 'something something ',
- wantHTML: 'something something ',
- wantText: 'something\nsomething\n\n',
- },
- 'spacesAfterNewlineP': {
- description: 'Collapse spaces that follow a paragraph',
- input: 'something
something ',
- wantHTML: 'something something ',
- wantText: 'something\n\nsomething\n\n',
- },
- 'spacesAtEndOfLine': {
- description: 'Collapse spaces that preceed/follow a newline',
- input: 'something something ',
- wantHTML: 'something something ',
- wantText: 'something\nsomething\n\n',
- },
- 'spacesAtEndOfLineP': {
- description: 'Collapse spaces that preceed/follow a paragraph',
- input: 'something
something ',
- wantHTML: 'something something ',
- wantText: 'something\n\nsomething\n\n',
- },
- 'nonBreakingSpacesAfterNewlines': {
- description: 'Don\'t collapse non-breaking spaces that follow a newline',
- input: 'something something ',
- wantHTML: 'something something ',
- wantText: 'something\n something\n\n',
- },
- 'nonBreakingSpacesAfterNewlinesP': {
- description: 'Don\'t collapse non-breaking spaces that follow a paragraph',
- input: 'something
something ',
- wantHTML: 'something something ',
- wantText: 'something\n\n something\n\n',
- },
- 'collapseSpacesInsideElements': {
- description: 'Preserve only one space when multiple are present',
- input: 'Need more space s ! ',
- wantHTML: 'Need more space s ! ',
- wantText: 'Need more space s !\n\n',
- },
- 'collapseSpacesAcrossNewlines': {
- description: 'Newlines and multiple spaces across newlines should be collapsed',
- input: `
+ 'malformed': {
+ input: 'wtf',
+ wantHTML: 'wtf ',
+ wantText: 'wtf\n\n',
+ disabled: true,
+ },
+ 'nonelistiteminlist #3620': {
+ input: '',
+ wantHTML: ' ',
+ wantText: '\ttest\n\t* FOO\n\n',
+ disabled: true,
+ },
+ 'whitespaceinlist #3620': {
+ input: '',
+ wantHTML: ' ',
+ wantText: '\t* FOO\n\n',
+ },
+ 'prefixcorrectlinenumber': {
+ input: 'should be 1 should be 2 ',
+ wantHTML: 'should be 1 should be 2 ',
+ wantText: '\t1. should be 1\n\t2. should be 2\n\n',
+ },
+ 'prefixcorrectlinenumbernested': {
+ input: 'should be 1 foo should be 2 ',
+ wantHTML: 'should be 1foo should be 2 ',
+ wantText: '\t1. should be 1\n\t\t1.1. foo\n\t2. should be 2\n\n',
+ },
+ /*
+ "prefixcorrectlinenumber when introduced none list item - currently not supported see #3450": {
+ input: 'should be 1 testshould be 2 ',
+ wantHTML: 'should be 1 testshould be 2 ',
+ wantText: '\t1. should be 1\n\ttest\n\t2. should be 2\n\n',
+ }
+ ,
+ "newlinesshouldntresetlinenumber #2194": {
+ input: 'should be 1 testshould be 2 ',
+ wantHTML: 'should be 1 testshould be 2 ',
+ wantText: '\t1. should be 1\n\ttest\n\t2. should be 2\n\n',
+ }
+ */
+ 'ignoreAnyTagsOutsideBody': {
+ description: 'Content outside body should be ignored',
+ input: 'title empty ',
+ wantHTML: 'empty ',
+ wantText: 'empty\n\n',
+ },
+ 'indentedListsAreNotBullets': {
+ description: 'Indented lists are represented with tabs and without bullets',
+ input: '',
+ wantHTML: ' ',
+ wantText: '\tindent\n\tindent\n\n',
+ },
+ 'lineWithMultipleSpaces': {
+ description: 'Multiple spaces should be collapsed',
+ input: 'Text with more than one space. ',
+ wantHTML: 'Text with more than one space. ',
+ wantText: 'Text with more than one space.\n\n',
+ },
+ 'lineWithMultipleNonBreakingAndNormalSpaces': {
+ // XXX the HTML between "than" and "one" looks strange
+ description: 'non-breaking space should be preserved, but can be replaced when it',
+ input: 'Text with more than one space. ',
+ wantHTML: 'Text with more than one space. ',
+ wantText: 'Text with more than one space.\n\n',
+ },
+ 'multiplenbsp': {
+ description: 'Multiple non-breaking space should be preserved',
+ input: ' ',
+ wantHTML: ' ',
+ wantText: ' \n\n',
+ },
+ 'multipleNonBreakingSpaceBetweenWords': {
+ description: 'A normal space is always inserted before a word',
+ input: ' word1 word2 word3 ',
+ wantHTML: ' word1 word2 word3 ',
+ wantText: ' word1 word2 word3\n\n',
+ },
+ 'nonBreakingSpacePreceededBySpaceBetweenWords': {
+ description: 'A non-breaking space preceded by a normal space',
+ input: ' word1 word2 word3 ',
+ wantHTML: ' word1 word2 word3 ',
+ wantText: ' word1 word2 word3\n\n',
+ },
+ 'nonBreakingSpaceFollowededBySpaceBetweenWords': {
+ description: 'A non-breaking space followed by a normal space',
+ input: ' word1 word2 word3 ',
+ wantHTML: ' word1 word2 word3 ',
+ wantText: ' word1 word2 word3\n\n',
+ },
+ 'spacesAfterNewline': {
+ description: 'Collapse spaces that follow a newline',
+ input: 'something something ',
+ wantHTML: 'something something ',
+ wantText: 'something\nsomething\n\n',
+ },
+ 'spacesAfterNewlineP': {
+ description: 'Collapse spaces that follow a paragraph',
+ input: 'something
something ',
+ wantHTML: 'something something ',
+ wantText: 'something\n\nsomething\n\n',
+ },
+ 'spacesAtEndOfLine': {
+ description: 'Collapse spaces that preceed/follow a newline',
+ input: 'something something ',
+ wantHTML: 'something something ',
+ wantText: 'something\nsomething\n\n',
+ },
+ 'spacesAtEndOfLineP': {
+ description: 'Collapse spaces that preceed/follow a paragraph',
+ input: 'something
something ',
+ wantHTML: 'something something ',
+ wantText: 'something\n\nsomething\n\n',
+ },
+ 'nonBreakingSpacesAfterNewlines': {
+ description: 'Don\'t collapse non-breaking spaces that follow a newline',
+ input: 'something something ',
+ wantHTML: 'something something ',
+ wantText: 'something\n something\n\n',
+ },
+ 'nonBreakingSpacesAfterNewlinesP': {
+ description: 'Don\'t collapse non-breaking spaces that follow a paragraph',
+ input: 'something
something ',
+ wantHTML: 'something something ',
+ wantText: 'something\n\n something\n\n',
+ },
+ 'collapseSpacesInsideElements': {
+ description: 'Preserve only one space when multiple are present',
+ input: 'Need more space s ! ',
+ wantHTML: 'Need more space s ! ',
+ wantText: 'Need more space s !\n\n',
+ },
+ 'collapseSpacesAcrossNewlines': {
+ description: 'Newlines and multiple spaces across newlines should be collapsed',
+ input: `
Need
more
space
s
! `,
- wantHTML: 'Need more space s ! ',
- wantText: 'Need more space s !\n\n',
- },
- 'multipleNewLinesAtBeginning': {
- description: 'Multiple new lines and paragraphs at the beginning should be preserved',
- input: '
first line second line ',
- wantHTML: ' first line second line ',
- wantText: '\n\n\n\nfirst line\n\nsecond line\n\n',
- },
- 'multiLineParagraph': {
- description: 'A paragraph with multiple lines should not loose spaces when lines are combined',
- input: `
+ wantHTML: 'Need more space s ! ',
+ wantText: 'Need more space s !\n\n',
+ },
+ 'multipleNewLinesAtBeginning': {
+ description: 'Multiple new lines and paragraphs at the beginning should be preserved',
+ input: '
first line second line ',
+ wantHTML: ' first line second line ',
+ wantText: '\n\n\n\nfirst line\n\nsecond line\n\n',
+ },
+ 'multiLineParagraph': {
+ description: 'A paragraph with multiple lines should not loose spaces when lines are combined',
+ input: `
а б в г ґ д е є ж з и і ї й к л м н о
п р с т у ф х ц ч ш щ ю я ь
`,
- wantHTML: 'а б в г ґ д е є ж з и і ї й к л м н о п р с т у ф х ц ч ш щ ю я ь ',
- wantText: 'а б в г ґ д е є ж з и і ї й к л м н о п р с т у ф х ц ч ш щ ю я ь\n\n',
- },
- 'multiLineParagraphWithPre': {
- // XXX why is there before "in"?
- description: 'lines in preformatted text should be kept intact',
- input: `
+ wantHTML: 'а б в г ґ д е є ж з и і ї й к л м н о п р с т у ф х ц ч ш щ ю я ь ',
+ wantText: 'а б в г ґ д е є ж з и і ї й к л м н о п р с т у ф х ц ч ш щ ю я ь\n\n',
+ },
+ 'multiLineParagraphWithPre': {
+ // XXX why is there before "in"?
+ description: 'lines in preformatted text should be kept intact',
+ input: `
а б в г ґ д е є ж з и і ї й к л м н о
multiple
lines
@@ -188,97 +184,88 @@ const testImports = {
п р с т у ф х ц ч ш щ ю я
ь
`,
- wantHTML: 'а б в г ґ д е є ж з и і ї й к л м н о multiple lines in pre п р с т у ф х ц ч ш щ ю я ь ',
- wantText: 'а б в г ґ д е є ж з и і ї й к л м н о\nmultiple\n lines\n in\n pre\n\nп р с т у ф х ц ч ш щ ю я ь\n\n',
- },
- 'preIntroducesASpace': {
- description: 'pre should be on a new line not preceded by a space',
- input: `
+ wantHTML: '
а б в г ґ д е є ж з и і ї й к л м н о multiple lines in pre п р с т у ф х ц ч ш щ ю я ь ',
+ wantText: 'а б в г ґ д е є ж з и і ї й к л м н о\nmultiple\n lines\n in\n pre\n\nп р с т у ф х ц ч ш щ ю я ь\n\n',
+ },
+ 'preIntroducesASpace': {
+ description: 'pre should be on a new line not preceded by a space',
+ input: `
1
preline
`,
- wantHTML: '1 preline ',
- wantText: '1\npreline\n\n\n',
- },
- 'dontDeleteSpaceInsideElements': {
- description: 'Preserve spaces inside elements',
- input: 'Need more space s ! ',
- wantHTML: 'Need more space s ! ',
- wantText: 'Need more space s !\n\n',
- },
- 'dontDeleteSpaceOutsideElements': {
- description: 'Preserve spaces outside elements',
- input: 'Need more space s ! ',
- wantHTML: 'Need more space s ! ',
- wantText: 'Need more space s !\n\n',
- },
- 'dontDeleteSpaceAtEndOfElement': {
- description: 'Preserve spaces at the end of an element',
- input: 'Need more space s ! ',
- wantHTML: 'Need more space s ! ',
- wantText: 'Need more space s !\n\n',
- },
- 'dontDeleteSpaceAtBeginOfElements': {
- description: 'Preserve spaces at the start of an element',
- input: 'Need more space s ! ',
- wantHTML: 'Need more space s ! ',
- wantText: 'Need more space s !\n\n',
- },
+ wantHTML: '1 preline ',
+ wantText: '1\npreline\n\n\n',
+ },
+ 'dontDeleteSpaceInsideElements': {
+ description: 'Preserve spaces inside elements',
+ input: 'Need more space s ! ',
+ wantHTML: 'Need more space s ! ',
+ wantText: 'Need more space s !\n\n',
+ },
+ 'dontDeleteSpaceOutsideElements': {
+ description: 'Preserve spaces outside elements',
+ input: 'Need more space s ! ',
+ wantHTML: 'Need more space s ! ',
+ wantText: 'Need more space s !\n\n',
+ },
+ 'dontDeleteSpaceAtEndOfElement': {
+ description: 'Preserve spaces at the end of an element',
+ input: 'Need more space s ! ',
+ wantHTML: 'Need more space s ! ',
+ wantText: 'Need more space s !\n\n',
+ },
+ 'dontDeleteSpaceAtBeginOfElements': {
+ description: 'Preserve spaces at the start of an element',
+ input: 'Need more space s ! ',
+ wantHTML: 'Need more space s ! ',
+ wantText: 'Need more space s !\n\n',
+ },
};
-
describe(__filename, function () {
- this.timeout(1000);
-
- before(async function () { agent = await common.init(); });
-
- Object.keys(testImports).forEach((testName) => {
- describe(testName, function () {
- const testPadId = makeid();
- const test = testImports[testName];
- if (test.disabled) {
- return xit(`DISABLED: ${testName}`, function (done) {
- done();
+ this.timeout(1000);
+ before(async function () { agent = await common.init(); });
+ Object.keys(testImports).forEach((testName) => {
+ describe(testName, function () {
+ const testPadId = makeid();
+ const test = testImports[testName];
+ if (test.disabled) {
+ return xit(`DISABLED: ${testName}`, function (done) {
+ done();
+ });
+ }
+ it('createPad', async function () {
+ const res = await agent.get(`${endPoint('createPad')}&padID=${testPadId}`)
+ .expect(200)
+ .expect('Content-Type', /json/);
+ assert.equal(res.body.code, 0);
+ });
+ it('setHTML', async function () {
+ const res = await agent.get(`${endPoint('setHTML')}&padID=${testPadId}` +
+ `&html=${encodeURIComponent(test.input)}`)
+ .expect(200)
+ .expect('Content-Type', /json/);
+ assert.equal(res.body.code, 0);
+ });
+ it('getHTML', async function () {
+ const res = await agent.get(`${endPoint('getHTML')}&padID=${testPadId}`)
+ .expect(200)
+ .expect('Content-Type', /json/);
+ assert.equal(res.body.data.html, test.wantHTML);
+ });
+ it('getText', async function () {
+ const res = await agent.get(`${endPoint('getText')}&padID=${testPadId}`)
+ .expect(200)
+ .expect('Content-Type', /json/);
+ assert.equal(res.body.data.text, test.wantText);
+ });
});
- }
-
- it('createPad', async function () {
- const res = await agent.get(`${endPoint('createPad')}&padID=${testPadId}`)
- .expect(200)
- .expect('Content-Type', /json/);
- assert.equal(res.body.code, 0);
- });
-
- it('setHTML', async function () {
- const res = await agent.get(`${endPoint('setHTML')}&padID=${testPadId}` +
- `&html=${encodeURIComponent(test.input)}`)
- .expect(200)
- .expect('Content-Type', /json/);
- assert.equal(res.body.code, 0);
- });
-
- it('getHTML', async function () {
- const res = await agent.get(`${endPoint('getHTML')}&padID=${testPadId}`)
- .expect(200)
- .expect('Content-Type', /json/);
- assert.equal(res.body.data.html, test.wantHTML);
- });
-
- it('getText', async function () {
- const res = await agent.get(`${endPoint('getText')}&padID=${testPadId}`)
- .expect(200)
- .expect('Content-Type', /json/);
- assert.equal(res.body.data.text, test.wantText);
- });
});
- });
});
-
function makeid() {
- let text = '';
- const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
-
- for (let i = 0; i < 5; i++) {
- text += possible.charAt(Math.floor(Math.random() * possible.length));
- }
- return text;
+ let text = '';
+ const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
+ for (let i = 0; i < 5; i++) {
+ text += possible.charAt(Math.floor(Math.random() * possible.length));
+ }
+ return text;
}
diff --git a/src/tests/backend/specs/caching_middleware.js b/src/tests/backend/specs/caching_middleware.js
index ebfd65d9ff0..ca2377d9540 100644
--- a/src/tests/backend/specs/caching_middleware.js
+++ b/src/tests/backend/specs/caching_middleware.js
@@ -1,18 +1,10 @@
+import * as common from "../common.js";
+import assertLegacy from "../assert-legacy.js";
+import queryString from "querystring";
+import * as settings from "../../../node/utils/Settings.js";
'use strict';
-
-/**
- * caching_middleware is responsible for serving everything under path `/javascripts/`
- * That includes packages as defined in `src/node/utils/tar.json` and probably also plugin code
- *
- */
-
-const common = require('../common');
-const assert = require('../assert-legacy').strict;
-const queryString = require('querystring');
-const settings = require('../../../node/utils/Settings');
-
+const assert = assertLegacy.strict;
let agent;
-
/**
* Hack! Returns true if the resource is not plaintext
* The file should start with the callback method, so we need the
@@ -23,95 +15,87 @@ let agent;
* @returns {boolean} if it is plaintext
*/
const isPlaintextResponse = (fileContent, resource) => {
- // callback=require.define&v=1234
- const query = (new URL(resource, 'http://localhost')).search.slice(1);
- // require.define
- const jsonp = queryString.parse(query).callback;
-
- // returns true if the first letters in fileContent equal the content of `jsonp`
- return fileContent.substring(0, jsonp.length) === jsonp;
+ // callback=require.define&v=1234
+ const query = (new URL(resource, 'http://localhost')).search.slice(1);
+ // require.define
+ const jsonp = queryString.parse(query).callback;
+ // returns true if the first letters in fileContent equal the content of `jsonp`
+ return fileContent.substring(0, jsonp.length) === jsonp;
};
-
/**
* A hack to disable `superagent`'s auto unzip functionality
*
* @param {Request} request
*/
const disableAutoDeflate = (request) => {
- request._shouldUnzip = () => false;
+ request._shouldUnzip = () => false;
};
-
describe(__filename, function () {
- const backups = {};
- const fantasyEncoding = 'brainwaves'; // non-working encoding until https://github.com/visionmedia/superagent/pull/1560 is resolved
- const packages = [
- '/javascripts/lib/ep_etherpad-lite/static/js/ace2_common.js?callback=require.define',
- '/javascripts/lib/ep_etherpad-lite/static/js/ace2_inner.js?callback=require.define',
- '/javascripts/lib/ep_etherpad-lite/static/js/pad.js?callback=require.define',
- '/javascripts/lib/ep_etherpad-lite/static/js/timeslider.js?callback=require.define',
- ];
-
- before(async function () {
- agent = await common.init();
- backups.settings = {};
- backups.settings.minify = settings.minify;
- });
- after(async function () {
- Object.assign(settings, backups.settings);
- });
-
- for (const minify of [false, true]) {
- context(`when minify is ${minify}`, function () {
- before(async function () {
- settings.minify = minify;
- });
-
- describe('gets packages uncompressed without Accept-Encoding gzip', function () {
- for (const resource of packages) {
- it(resource, async function () {
- await agent.get(resource)
- .set('Accept-Encoding', fantasyEncoding)
- .use(disableAutoDeflate)
- .expect(200)
- .expect('Content-Type', /application\/javascript/)
- .expect((res) => {
- assert.equal(res.header['content-encoding'], undefined);
- assert(isPlaintextResponse(res.text, resource));
- });
- });
- }
- });
-
- describe('gets packages compressed with Accept-Encoding gzip', function () {
- for (const resource of packages) {
- it(resource, async function () {
- await agent.get(resource)
- .set('Accept-Encoding', 'gzip')
- .use(disableAutoDeflate)
- .expect(200)
- .expect('Content-Type', /application\/javascript/)
- .expect('Content-Encoding', 'gzip')
- .expect((res) => {
- assert(!isPlaintextResponse(res.text, resource));
- });
- });
- }
- });
-
- it('does not cache content-encoding headers', async function () {
- await agent.get(packages[0])
- .set('Accept-Encoding', fantasyEncoding)
- .expect(200)
- .expect((res) => assert.equal(res.header['content-encoding'], undefined));
- await agent.get(packages[0])
- .set('Accept-Encoding', 'gzip')
- .expect(200)
- .expect('Content-Encoding', 'gzip');
- await agent.get(packages[0])
- .set('Accept-Encoding', fantasyEncoding)
- .expect(200)
- .expect((res) => assert.equal(res.header['content-encoding'], undefined));
- });
+ const backups = {};
+ const fantasyEncoding = 'brainwaves'; // non-working encoding until https://github.com/visionmedia/superagent/pull/1560 is resolved
+ const packages = [
+ '/javascripts/lib/ep_etherpad-lite/static/js/ace2_common.js?callback=require.define',
+ '/javascripts/lib/ep_etherpad-lite/static/js/ace2_inner.js?callback=require.define',
+ '/javascripts/lib/ep_etherpad-lite/static/js/pad.js?callback=require.define',
+ '/javascripts/lib/ep_etherpad-lite/static/js/timeslider.js?callback=require.define',
+ ];
+ before(async function () {
+ agent = await common.init();
+ backups.settings = {};
+ backups.settings.minify = settings.minify;
+ });
+ after(async function () {
+ Object.assign(settings, backups.settings);
});
- }
+ for (const minify of [false, true]) {
+ context(`when minify is ${minify}`, function () {
+ before(async function () {
+ settings.minify = minify;
+ });
+ describe('gets packages uncompressed without Accept-Encoding gzip', function () {
+ for (const resource of packages) {
+ it(resource, async function () {
+ await agent.get(resource)
+ .set('Accept-Encoding', fantasyEncoding)
+ .use(disableAutoDeflate)
+ .expect(200)
+ .expect('Content-Type', /application\/javascript/)
+ .expect((res) => {
+ assert.equal(res.header['content-encoding'], undefined);
+ assert(isPlaintextResponse(res.text, resource));
+ });
+ });
+ }
+ });
+ describe('gets packages compressed with Accept-Encoding gzip', function () {
+ for (const resource of packages) {
+ it(resource, async function () {
+ await agent.get(resource)
+ .set('Accept-Encoding', 'gzip')
+ .use(disableAutoDeflate)
+ .expect(200)
+ .expect('Content-Type', /application\/javascript/)
+ .expect('Content-Encoding', 'gzip')
+ .expect((res) => {
+ assert(!isPlaintextResponse(res.text, resource));
+ });
+ });
+ }
+ });
+ it('does not cache content-encoding headers', async function () {
+ await agent.get(packages[0])
+ .set('Accept-Encoding', fantasyEncoding)
+ .expect(200)
+ .expect((res) => assert.equal(res.header['content-encoding'], undefined));
+ await agent.get(packages[0])
+ .set('Accept-Encoding', 'gzip')
+ .expect(200)
+ .expect('Content-Encoding', 'gzip');
+ await agent.get(packages[0])
+ .set('Accept-Encoding', fantasyEncoding)
+ .expect(200)
+ .expect((res) => assert.equal(res.header['content-encoding'], undefined));
+ });
+ });
+ }
});
diff --git a/src/tests/backend/specs/chat.js b/src/tests/backend/specs/chat.js
index aefa64183f6..1bf0c1114cb 100644
--- a/src/tests/backend/specs/chat.js
+++ b/src/tests/backend/specs/chat.js
@@ -1,160 +1,153 @@
+import ChatMessage from "../../../static/js/ChatMessage.js";
+import { Pad } from "../../../node/db/Pad.js";
+import assert$0 from "assert";
+import * as common from "../common.js";
+import * as padManager from "../../../node/db/PadManager.js";
+import * as pluginDefs from "../../../static/js/pluginfw/plugin_defs.js";
'use strict';
-
-const ChatMessage = require('../../../static/js/ChatMessage');
-const {Pad} = require('../../../node/db/Pad');
-const assert = require('assert').strict;
-const common = require('../common');
-const padManager = require('../../../node/db/PadManager');
-const pluginDefs = require('../../../static/js/pluginfw/plugin_defs');
-
+const assert = assert$0.strict;
const logger = common.logger;
-
const checkHook = async (hookName, checkFn) => {
- if (pluginDefs.hooks[hookName] == null) pluginDefs.hooks[hookName] = [];
- await new Promise((resolve, reject) => {
- pluginDefs.hooks[hookName].push({
- hook_fn: async (hookName, context) => {
- if (checkFn == null) return;
- logger.debug(`hook ${hookName} invoked`);
- try {
- // Make sure checkFn is called only once.
- const _checkFn = checkFn;
- checkFn = null;
- await _checkFn(context);
- } catch (err) {
- reject(err);
- return;
- }
- resolve();
- },
+ if (pluginDefs.hooks[hookName] == null)
+ pluginDefs.hooks[hookName] = [];
+ await new Promise((resolve, reject) => {
+ pluginDefs.hooks[hookName].push({
+ hook_fn: async (hookName, context) => {
+ if (checkFn == null)
+ return;
+ logger.debug(`hook ${hookName} invoked`);
+ try {
+ // Make sure checkFn is called only once.
+ const _checkFn = checkFn;
+ checkFn = null;
+ await _checkFn(context);
+ }
+ catch (err) {
+ reject(err);
+ return;
+ }
+ resolve();
+ },
+ });
});
- });
};
-
const sendMessage = (socket, data) => {
- socket.send({
- type: 'COLLABROOM',
- component: 'pad',
- data,
- });
+ socket.send({
+ type: 'COLLABROOM',
+ component: 'pad',
+ data,
+ });
};
-
-const sendChat = (socket, message) => sendMessage(socket, {type: 'CHAT_MESSAGE', message});
-
+const sendChat = (socket, message) => sendMessage(socket, { type: 'CHAT_MESSAGE', message });
describe(__filename, function () {
- const padId = 'testChatPad';
- const hooksBackup = {};
-
- before(async function () {
- for (const [name, defs] of Object.entries(pluginDefs.hooks)) {
- if (defs == null) continue;
- hooksBackup[name] = defs;
- }
- });
-
- beforeEach(async function () {
- for (const [name, defs] of Object.entries(hooksBackup)) pluginDefs.hooks[name] = [...defs];
- for (const name of Object.keys(pluginDefs.hooks)) {
- if (hooksBackup[name] == null) delete pluginDefs.hooks[name];
- }
- if (await padManager.doesPadExist(padId)) {
- const pad = await padManager.getPad(padId);
- await pad.remove();
- }
- });
-
- after(async function () {
- Object.assign(pluginDefs.hooks, hooksBackup);
- for (const name of Object.keys(pluginDefs.hooks)) {
- if (hooksBackup[name] == null) delete pluginDefs.hooks[name];
- }
- });
-
- describe('chatNewMessage hook', function () {
- let authorId;
- let socket;
-
- beforeEach(async function () {
- socket = await common.connect();
- const {data: clientVars} = await common.handshake(socket, padId);
- authorId = clientVars.userId;
- });
-
- afterEach(async function () {
- socket.close();
- });
-
- it('message', async function () {
- const start = Date.now();
- await Promise.all([
- checkHook('chatNewMessage', ({message}) => {
- assert(message != null);
- assert(message instanceof ChatMessage);
- assert.equal(message.authorId, authorId);
- assert.equal(message.text, this.test.title);
- assert(message.time >= start);
- assert(message.time <= Date.now());
- }),
- sendChat(socket, {text: this.test.title}),
- ]);
+ const padId = 'testChatPad';
+ const hooksBackup = {};
+ before(async function () {
+ for (const [name, defs] of Object.entries(pluginDefs.hooks)) {
+ if (defs == null)
+ continue;
+ hooksBackup[name] = defs;
+ }
});
-
- it('pad', async function () {
- await Promise.all([
- checkHook('chatNewMessage', ({pad}) => {
- assert(pad != null);
- assert(pad instanceof Pad);
- assert.equal(pad.id, padId);
- }),
- sendChat(socket, {text: this.test.title}),
- ]);
+ beforeEach(async function () {
+ for (const [name, defs] of Object.entries(hooksBackup))
+ pluginDefs.hooks[name] = [...defs];
+ for (const name of Object.keys(pluginDefs.hooks)) {
+ if (hooksBackup[name] == null)
+ delete pluginDefs.hooks[name];
+ }
+ if (await padManager.doesPadExist(padId)) {
+ const pad = await padManager.getPad(padId);
+ await pad.remove();
+ }
});
-
- it('padId', async function () {
- await Promise.all([
- checkHook('chatNewMessage', (context) => {
- assert.equal(context.padId, padId);
- }),
- sendChat(socket, {text: this.test.title}),
- ]);
+ after(async function () {
+ Object.assign(pluginDefs.hooks, hooksBackup);
+ for (const name of Object.keys(pluginDefs.hooks)) {
+ if (hooksBackup[name] == null)
+ delete pluginDefs.hooks[name];
+ }
});
-
- it('mutations propagate', async function () {
- const listen = async (type) => await new Promise((resolve) => {
- const handler = (msg) => {
- if (msg.type !== 'COLLABROOM') return;
- if (msg.data == null || msg.data.type !== type) return;
- resolve(msg.data);
- socket.off('message', handler);
- };
- socket.on('message', handler);
- });
-
- const modifiedText = `${this.test.title} `;
- const customMetadata = {foo: this.test.title};
- await Promise.all([
- checkHook('chatNewMessage', ({message}) => {
- message.text = modifiedText;
- message.customMetadata = customMetadata;
- }),
- (async () => {
- const {message} = await listen('CHAT_MESSAGE');
- assert(message != null);
- assert.equal(message.text, modifiedText);
- assert.deepEqual(message.customMetadata, customMetadata);
- })(),
- sendChat(socket, {text: this.test.title}),
- ]);
- // Simulate fetch of historical chat messages when a pad is first loaded.
- await Promise.all([
- (async () => {
- const {messages: [message]} = await listen('CHAT_MESSAGES');
- assert(message != null);
- assert.equal(message.text, modifiedText);
- assert.deepEqual(message.customMetadata, customMetadata);
- })(),
- sendMessage(socket, {type: 'GET_CHAT_MESSAGES', start: 0, end: 0}),
- ]);
+ describe('chatNewMessage hook', function () {
+ let authorId;
+ let socket;
+ beforeEach(async function () {
+ socket = await common.connect();
+ const { data: clientVars } = await common.handshake(socket, padId);
+ authorId = clientVars.userId;
+ });
+ afterEach(async function () {
+ socket.close();
+ });
+ it('message', async function () {
+ const start = Date.now();
+ await Promise.all([
+ checkHook('chatNewMessage', ({ message }) => {
+ assert(message != null);
+ assert(message instanceof ChatMessage);
+ assert.equal(message.authorId, authorId);
+ assert.equal(message.text, this.test.title);
+ assert(message.time >= start);
+ assert(message.time <= Date.now());
+ }),
+ sendChat(socket, { text: this.test.title }),
+ ]);
+ });
+ it('pad', async function () {
+ await Promise.all([
+ checkHook('chatNewMessage', ({ pad }) => {
+ assert(pad != null);
+ assert(pad instanceof Pad);
+ assert.equal(pad.id, padId);
+ }),
+ sendChat(socket, { text: this.test.title }),
+ ]);
+ });
+ it('padId', async function () {
+ await Promise.all([
+ checkHook('chatNewMessage', (context) => {
+ assert.equal(context.padId, padId);
+ }),
+ sendChat(socket, { text: this.test.title }),
+ ]);
+ });
+ it('mutations propagate', async function () {
+ const listen = async (type) => await new Promise((resolve) => {
+ const handler = (msg) => {
+ if (msg.type !== 'COLLABROOM')
+ return;
+ if (msg.data == null || msg.data.type !== type)
+ return;
+ resolve(msg.data);
+ socket.off('message', handler);
+ };
+ socket.on('message', handler);
+ });
+ const modifiedText = `${this.test.title} `;
+ const customMetadata = { foo: this.test.title };
+ await Promise.all([
+ checkHook('chatNewMessage', ({ message }) => {
+ message.text = modifiedText;
+ message.customMetadata = customMetadata;
+ }),
+ (async () => {
+ const { message } = await listen('CHAT_MESSAGE');
+ assert(message != null);
+ assert.equal(message.text, modifiedText);
+ assert.deepEqual(message.customMetadata, customMetadata);
+ })(),
+ sendChat(socket, { text: this.test.title }),
+ ]);
+ // Simulate fetch of historical chat messages when a pad is first loaded.
+ await Promise.all([
+ (async () => {
+ const { messages: [message] } = await listen('CHAT_MESSAGES');
+ assert(message != null);
+ assert.equal(message.text, modifiedText);
+ assert.deepEqual(message.customMetadata, customMetadata);
+ })(),
+ sendMessage(socket, { type: 'GET_CHAT_MESSAGES', start: 0, end: 0 }),
+ ]);
+ });
});
- });
});
diff --git a/src/tests/backend/specs/contentcollector.js b/src/tests/backend/specs/contentcollector.js
index a4696307edf..5e4ad92d946 100644
--- a/src/tests/backend/specs/contentcollector.js
+++ b/src/tests/backend/specs/contentcollector.js
@@ -1,284 +1,273 @@
+import AttributePool from "../../../static/js/AttributePool.js";
+import * as Changeset from "../../../static/js/Changeset.js";
+import assert$0 from "assert";
+import * as attributes from "../../../static/js/attributes.js";
+import * as contentcollector from "../../../static/js/contentcollector.js";
+import * as jsdom from "jsdom";
'use strict';
-
-/*
- * While importexport tests target the `setHTML` API endpoint, which is nearly identical to what
- * happens when a user manually imports a document via the UI, the contentcollector tests here don't
- * use rehype to process the document. Rehype removes spaces and newĺines were applicable, so the
- * expected results here can differ from importexport.js.
- *
- * If you add tests here, please also add them to importexport.js
- */
-
-const AttributePool = require('../../../static/js/AttributePool');
-const Changeset = require('../../../static/js/Changeset');
-const assert = require('assert').strict;
-const attributes = require('../../../static/js/attributes');
-const contentcollector = require('../../../static/js/contentcollector');
-const jsdom = require('jsdom');
-
+const assert = assert$0.strict;
// All test case `wantAlines` values must only refer to attributes in this list so that the
// attribute numbers do not change due to changes in pool insertion order.
const knownAttribs = [
- ['insertorder', 'first'],
- ['italic', 'true'],
- ['list', 'bullet1'],
- ['list', 'bullet2'],
- ['list', 'number1'],
- ['list', 'number2'],
- ['lmkr', '1'],
- ['start', '1'],
- ['start', '2'],
+ ['insertorder', 'first'],
+ ['italic', 'true'],
+ ['list', 'bullet1'],
+ ['list', 'bullet2'],
+ ['list', 'number1'],
+ ['list', 'number2'],
+ ['lmkr', '1'],
+ ['start', '1'],
+ ['start', '2'],
];
-
const testCases = [
- {
- description: 'Simple',
- html: 'foo
',
- wantAlines: ['+3'],
- wantText: ['foo'],
- },
- {
- description: 'Line starts with asterisk',
- html: '*foo
',
- wantAlines: ['+4'],
- wantText: ['*foo'],
- },
- {
- description: 'Complex nested Li',
- html: 'one 1.1 two ',
- wantAlines: [
- '*0*4*6*7+1+3',
- '*0*5*6*8+1+3',
- '*0*4*6*8+1+3',
- ],
- wantText: [
- '*one', '*1.1', '*two',
- ],
- },
- {
- description: 'Complex list of different types',
- html: 'itemitem1 item2 ',
- wantAlines: [
- '*0*2*6+1+3',
- '*0*2*6+1+3',
- '*0*2*6+1+1',
- '*0*2*6+1+1',
- '*0*2*6+1+1',
- '*0*3*6+1+1',
- '*0*3*6+1+1',
- '*0*4*6*7+1+4',
- '*0*5*6*8+1+5',
- '*0*5*6*8+1+5',
- ],
- wantText: [
- '*one',
- '*two',
- '*0',
- '*1',
- '*2',
- '*3',
- '*4',
- '*item',
- '*item1',
- '*item2',
- ],
- },
- {
- description: 'Tests if uls properly get attributes',
- html: 'div
foo
',
- wantAlines: [
- '*0*2*6+1+1',
- '*0*2*6+1+1',
- '+3',
- '+3',
- ],
- wantText: ['*a', '*b', 'div', 'foo'],
- },
- {
- description: 'Tests if indented uls properly get attributes',
- html: 'foo
',
- wantAlines: [
- '*0*2*6+1+1',
- '*0*3*6+1+1',
- '*0*2*6+1+1',
- '+3',
- ],
- wantText: ['*a', '*b', '*a', 'foo'],
- },
- {
- description: 'Tests if ols properly get line numbers when in a normal OL',
- html: 'a b c test
',
- wantAlines: [
- '*0*4*6*7+1+1',
- '*0*4*6*7+1+1',
- '*0*4*6*7+1+1',
- '+4',
- ],
- wantText: ['*a', '*b', '*c', 'test'],
- noteToSelf: 'Ensure empty P does not induce line attribute marker, wont this break the editor?',
- },
- {
- description: 'A single completely empty line break within an ol should reset count if OL is closed off..',
- html: 'should be 1 hello
should be 1 should be 2
',
- wantAlines: [
- '*0*4*6*7+1+b',
- '+5',
- '*0*4*6*8+1+b',
- '*0*4*6*8+1+b',
- '',
- ],
- wantText: ['*should be 1', 'hello', '*should be 1', '*should be 2', ''],
- noteToSelf: "Shouldn't include attribute marker in the line",
- },
- {
- description: 'A single
should create a new line',
- html: '
',
- wantAlines: ['', ''],
- wantText: ['', ''],
- noteToSelf: '
should create a line break but not break numbering',
- },
- {
- description: 'Tests if ols properly get line numbers when in a normal OL #2',
- html: 'abc notlistfoo
',
- wantAlines: [
- '+1',
- '*0*4*6*7+1+1',
- '*0*5*6*8+1+1',
- '+7',
- '+3',
- ],
- wantText: ['a', '*b', '*c', 'notlist', 'foo'],
- noteToSelf: 'Ensure empty P does not induce line attribute marker, wont this break the editor?',
- },
- {
- description: 'First item being an UL then subsequent being OL will fail',
- html: '',
- wantAlines: ['+1', '*0*1*2*3+1+1', '*0*4*2*5+1+1'],
- wantText: ['a', '*b', '*c'],
- noteToSelf: 'Ensure empty P does not induce line attribute marker, wont this break the editor?',
- disabled: true,
- },
- {
- description: 'A single completely empty line break within an ol should NOT reset count',
- html: 'should be 1
should be 2 should be 3
',
- wantAlines: [],
- wantText: ['*should be 1', '*should be 2', '*should be 3'],
- noteToSelf: "
should create a line break but not break numbering -- This is what I can't get working!",
- disabled: true,
- },
- {
- description: 'Content outside body should be ignored',
- html: 'title empty ',
- wantAlines: ['+5'],
- wantText: ['empty'],
- },
- {
- description: 'Multiple spaces should be preserved',
- html: 'Text with more than one space. ',
- wantAlines: ['+10'],
- wantText: ['Text with more than one space.'],
- },
- {
- description: 'non-breaking and normal space should be preserved',
- html: 'Text with more than one space. ',
- wantAlines: ['+10'],
- wantText: ['Text with more than one space.'],
- },
- {
- description: 'Multiple nbsp should be preserved',
- html: ' ',
- wantAlines: ['+2'],
- wantText: [' '],
- },
- {
- description: 'Multiple nbsp between words ',
- html: ' word1 word2 word3 ',
- wantAlines: ['+m'],
- wantText: [' word1 word2 word3'],
- },
- {
- description: 'A non-breaking space preceded by a normal space',
- html: ' word1 word2 word3 ',
- wantAlines: ['+l'],
- wantText: [' word1 word2 word3'],
- },
- {
- description: 'A non-breaking space followed by a normal space',
- html: ' word1 word2 word3 ',
- wantAlines: ['+l'],
- wantText: [' word1 word2 word3'],
- },
- {
- description: 'Don\'t collapse spaces that follow a newline',
- html: 'something something ',
- wantAlines: ['+9', '+m'],
- wantText: ['something', ' something'],
- },
- {
- description: 'Don\'t collapse spaces that follow a empty paragraph',
- html: 'something
something ',
- wantAlines: ['+9', '', '+m'],
- wantText: ['something', '', ' something'],
- },
- {
- description: 'Don\'t collapse spaces that preceed/follow a newline',
- html: 'something something ',
- wantAlines: ['+l', '+m'],
- wantText: ['something ', ' something'],
- },
- {
- description: 'Don\'t collapse spaces that preceed/follow a empty paragraph',
- html: 'something
something ',
- wantAlines: ['+l', '', '+m'],
- wantText: ['something ', '', ' something'],
- },
- {
- description: 'Don\'t collapse non-breaking spaces that follow a newline',
- html: 'something something ',
- wantAlines: ['+9', '+c'],
- wantText: ['something', ' something'],
- },
- {
- description: 'Don\'t collapse non-breaking spaces that follow a paragraph',
- html: 'something
something ',
- wantAlines: ['+9', '', '+c'],
- wantText: ['something', '', ' something'],
- },
- {
- description: 'Preserve all spaces when multiple are present',
- html: 'Need more space s ! ',
- wantAlines: ['+h*1+4+2'],
- wantText: ['Need more space s !'],
- },
- {
- description: 'Newlines and multiple spaces across newlines should be preserved',
- html: `
+ {
+ description: 'Simple',
+ html: 'foo
',
+ wantAlines: ['+3'],
+ wantText: ['foo'],
+ },
+ {
+ description: 'Line starts with asterisk',
+ html: '*foo
',
+ wantAlines: ['+4'],
+ wantText: ['*foo'],
+ },
+ {
+ description: 'Complex nested Li',
+ html: 'one 1.1 two ',
+ wantAlines: [
+ '*0*4*6*7+1+3',
+ '*0*5*6*8+1+3',
+ '*0*4*6*8+1+3',
+ ],
+ wantText: [
+ '*one', '*1.1', '*two',
+ ],
+ },
+ {
+ description: 'Complex list of different types',
+ html: 'itemitem1 item2 ',
+ wantAlines: [
+ '*0*2*6+1+3',
+ '*0*2*6+1+3',
+ '*0*2*6+1+1',
+ '*0*2*6+1+1',
+ '*0*2*6+1+1',
+ '*0*3*6+1+1',
+ '*0*3*6+1+1',
+ '*0*4*6*7+1+4',
+ '*0*5*6*8+1+5',
+ '*0*5*6*8+1+5',
+ ],
+ wantText: [
+ '*one',
+ '*two',
+ '*0',
+ '*1',
+ '*2',
+ '*3',
+ '*4',
+ '*item',
+ '*item1',
+ '*item2',
+ ],
+ },
+ {
+ description: 'Tests if uls properly get attributes',
+ html: 'div
foo
',
+ wantAlines: [
+ '*0*2*6+1+1',
+ '*0*2*6+1+1',
+ '+3',
+ '+3',
+ ],
+ wantText: ['*a', '*b', 'div', 'foo'],
+ },
+ {
+ description: 'Tests if indented uls properly get attributes',
+ html: 'foo
',
+ wantAlines: [
+ '*0*2*6+1+1',
+ '*0*3*6+1+1',
+ '*0*2*6+1+1',
+ '+3',
+ ],
+ wantText: ['*a', '*b', '*a', 'foo'],
+ },
+ {
+ description: 'Tests if ols properly get line numbers when in a normal OL',
+ html: 'a b c test
',
+ wantAlines: [
+ '*0*4*6*7+1+1',
+ '*0*4*6*7+1+1',
+ '*0*4*6*7+1+1',
+ '+4',
+ ],
+ wantText: ['*a', '*b', '*c', 'test'],
+ noteToSelf: 'Ensure empty P does not induce line attribute marker, wont this break the editor?',
+ },
+ {
+ description: 'A single completely empty line break within an ol should reset count if OL is closed off..',
+ html: 'should be 1 hello
should be 1 should be 2
',
+ wantAlines: [
+ '*0*4*6*7+1+b',
+ '+5',
+ '*0*4*6*8+1+b',
+ '*0*4*6*8+1+b',
+ '',
+ ],
+ wantText: ['*should be 1', 'hello', '*should be 1', '*should be 2', ''],
+ noteToSelf: "Shouldn't include attribute marker in the line",
+ },
+ {
+ description: 'A single
should create a new line',
+ html: '
',
+ wantAlines: ['', ''],
+ wantText: ['', ''],
+ noteToSelf: '
should create a line break but not break numbering',
+ },
+ {
+ description: 'Tests if ols properly get line numbers when in a normal OL #2',
+ html: 'abc notlistfoo
',
+ wantAlines: [
+ '+1',
+ '*0*4*6*7+1+1',
+ '*0*5*6*8+1+1',
+ '+7',
+ '+3',
+ ],
+ wantText: ['a', '*b', '*c', 'notlist', 'foo'],
+ noteToSelf: 'Ensure empty P does not induce line attribute marker, wont this break the editor?',
+ },
+ {
+ description: 'First item being an UL then subsequent being OL will fail',
+ html: '',
+ wantAlines: ['+1', '*0*1*2*3+1+1', '*0*4*2*5+1+1'],
+ wantText: ['a', '*b', '*c'],
+ noteToSelf: 'Ensure empty P does not induce line attribute marker, wont this break the editor?',
+ disabled: true,
+ },
+ {
+ description: 'A single completely empty line break within an ol should NOT reset count',
+ html: 'should be 1
should be 2 should be 3
',
+ wantAlines: [],
+ wantText: ['*should be 1', '*should be 2', '*should be 3'],
+ noteToSelf: "
should create a line break but not break numbering -- This is what I can't get working!",
+ disabled: true,
+ },
+ {
+ description: 'Content outside body should be ignored',
+ html: 'title empty ',
+ wantAlines: ['+5'],
+ wantText: ['empty'],
+ },
+ {
+ description: 'Multiple spaces should be preserved',
+ html: 'Text with more than one space. ',
+ wantAlines: ['+10'],
+ wantText: ['Text with more than one space.'],
+ },
+ {
+ description: 'non-breaking and normal space should be preserved',
+ html: 'Text with more than one space. ',
+ wantAlines: ['+10'],
+ wantText: ['Text with more than one space.'],
+ },
+ {
+ description: 'Multiple nbsp should be preserved',
+ html: ' ',
+ wantAlines: ['+2'],
+ wantText: [' '],
+ },
+ {
+ description: 'Multiple nbsp between words ',
+ html: ' word1 word2 word3 ',
+ wantAlines: ['+m'],
+ wantText: [' word1 word2 word3'],
+ },
+ {
+ description: 'A non-breaking space preceded by a normal space',
+ html: ' word1 word2 word3 ',
+ wantAlines: ['+l'],
+ wantText: [' word1 word2 word3'],
+ },
+ {
+ description: 'A non-breaking space followed by a normal space',
+ html: ' word1 word2 word3 ',
+ wantAlines: ['+l'],
+ wantText: [' word1 word2 word3'],
+ },
+ {
+ description: 'Don\'t collapse spaces that follow a newline',
+ html: 'something something ',
+ wantAlines: ['+9', '+m'],
+ wantText: ['something', ' something'],
+ },
+ {
+ description: 'Don\'t collapse spaces that follow a empty paragraph',
+ html: 'something
something ',
+ wantAlines: ['+9', '', '+m'],
+ wantText: ['something', '', ' something'],
+ },
+ {
+ description: 'Don\'t collapse spaces that preceed/follow a newline',
+ html: 'something something ',
+ wantAlines: ['+l', '+m'],
+ wantText: ['something ', ' something'],
+ },
+ {
+ description: 'Don\'t collapse spaces that preceed/follow a empty paragraph',
+ html: 'something
something ',
+ wantAlines: ['+l', '', '+m'],
+ wantText: ['something ', '', ' something'],
+ },
+ {
+ description: 'Don\'t collapse non-breaking spaces that follow a newline',
+ html: 'something something ',
+ wantAlines: ['+9', '+c'],
+ wantText: ['something', ' something'],
+ },
+ {
+ description: 'Don\'t collapse non-breaking spaces that follow a paragraph',
+ html: 'something
something ',
+ wantAlines: ['+9', '', '+c'],
+ wantText: ['something', '', ' something'],
+ },
+ {
+ description: 'Preserve all spaces when multiple are present',
+ html: 'Need more space s ! ',
+ wantAlines: ['+h*1+4+2'],
+ wantText: ['Need more space s !'],
+ },
+ {
+ description: 'Newlines and multiple spaces across newlines should be preserved',
+ html: `
Need
more
space
s
! `,
- wantAlines: ['+19*1+4+b'],
- wantText: ['Need more space s !'],
- },
- {
- description: 'Multiple new lines at the beginning should be preserved',
- html: '
first line second line ',
- wantAlines: ['', '', '', '', '+a', '', '+b'],
- wantText: ['', '', '', '', 'first line', '', 'second line'],
- },
- {
- description: 'A paragraph with multiple lines should not loose spaces when lines are combined',
- html: `
+ wantAlines: ['+19*1+4+b'],
+ wantText: ['Need more space s !'],
+ },
+ {
+ description: 'Multiple new lines at the beginning should be preserved',
+ html: '
first line second line ',
+ wantAlines: ['', '', '', '', '+a', '', '+b'],
+ wantText: ['', '', '', '', 'first line', '', 'second line'],
+ },
+ {
+ description: 'A paragraph with multiple lines should not loose spaces when lines are combined',
+ html: `
а б в г ґ д е є ж з и і ї й к л м н о
п р с т у ф х ц ч ш щ ю я ь
`,
- wantAlines: ['+1t'],
- wantText: ['а б в г ґ д е є ж з и і ї й к л м н о п р с т у ф х ц ч ш щ ю я ь'],
- },
- {
- description: 'lines in preformatted text should be kept intact',
- html: `
+ wantAlines: ['+1t'],
+ wantText: ['а б в г ґ д е є ж з и і ї й к л м н о п р с т у ф х ц ч ш щ ю я ь'],
+ },
+ {
+ description: 'lines in preformatted text should be kept intact',
+ html: `
а б в г ґ д е є ж з и і ї й к л м н о
multiple
lines
in
@@ -286,101 +275,98 @@ pre
п р с т у ф х ц ч ш щ ю я
ь
`,
- wantAlines: ['+11', '+8', '+5', '+2', '+3', '+r'],
- wantText: [
- 'а б в г ґ д е є ж з и і ї й к л м н о',
- 'multiple',
- 'lines',
- 'in',
- 'pre',
- 'п р с т у ф х ц ч ш щ ю я ь',
- ],
- },
- {
- description: 'pre should be on a new line not preceded by a space',
- html: `
+ wantAlines: ['+11', '+8', '+5', '+2', '+3', '+r'],
+ wantText: [
+ 'а б в г ґ д е є ж з и і ї й к л м н о',
+ 'multiple',
+ 'lines',
+ 'in',
+ 'pre',
+ 'п р с т у ф х ц ч ш щ ю я ь',
+ ],
+ },
+ {
+ description: 'pre should be on a new line not preceded by a space',
+ html: `
1
preline
`,
- wantAlines: ['+6', '+7'],
- wantText: [' 1 ', 'preline'],
- },
- {
- description: 'Preserve spaces on the beginning and end of a element',
- html: 'Need more space s ! ',
- wantAlines: ['+f*1+3+1'],
- wantText: ['Need more space s !'],
- },
- {
- description: 'Preserve spaces outside elements',
- html: 'Need more space s ! ',
- wantAlines: ['+g*1+1+2'],
- wantText: ['Need more space s !'],
- },
- {
- description: 'Preserve spaces at the end of an element',
- html: 'Need more space s ! ',
- wantAlines: ['+g*1+2+1'],
- wantText: ['Need more space s !'],
- },
- {
- description: 'Preserve spaces at the start of an element',
- html: 'Need more space s ! ',
- wantAlines: ['+f*1+2+2'],
- wantText: ['Need more space s !'],
- },
+ wantAlines: ['+6', '+7'],
+ wantText: [' 1 ', 'preline'],
+ },
+ {
+ description: 'Preserve spaces on the beginning and end of a element',
+ html: 'Need more space s ! ',
+ wantAlines: ['+f*1+3+1'],
+ wantText: ['Need more space s !'],
+ },
+ {
+ description: 'Preserve spaces outside elements',
+ html: 'Need more space s ! ',
+ wantAlines: ['+g*1+1+2'],
+ wantText: ['Need more space s !'],
+ },
+ {
+ description: 'Preserve spaces at the end of an element',
+ html: 'Need more space s ! ',
+ wantAlines: ['+g*1+2+1'],
+ wantText: ['Need more space s !'],
+ },
+ {
+ description: 'Preserve spaces at the start of an element',
+ html: 'Need more space s ! ',
+ wantAlines: ['+f*1+2+2'],
+ wantText: ['Need more space s !'],
+ },
];
-
describe(__filename, function () {
- for (const tc of testCases) {
- describe(tc.description, function () {
- let apool;
- let result;
-
- before(async function () {
- if (tc.disabled) return this.skip();
- const {window: {document}} = new jsdom.JSDOM(tc.html);
- apool = new AttributePool();
- // To reduce test fragility, the attribute pool is seeded with `knownAttribs`, and all
- // attributes in `tc.wantAlines` must be in `knownAttribs`. (This guarantees that attribute
- // numbers do not change if the attribute processing code changes.)
- for (const attrib of knownAttribs) apool.putAttrib(attrib);
- for (const aline of tc.wantAlines) {
- for (const op of Changeset.deserializeOps(aline)) {
- for (const n of attributes.decodeAttribString(op.attribs)) {
- assert(n < knownAttribs.length);
- }
- }
- }
- const cc = contentcollector.makeContentCollector(true, null, apool);
- cc.collectContent(document.body);
- result = cc.finish();
- });
-
- it('text matches', async function () {
- assert.deepEqual(result.lines, tc.wantText);
- });
-
- it('alines match', async function () {
- assert.deepEqual(result.lineAttribs, tc.wantAlines);
- });
-
- it('attributes are sorted in canonical order', async function () {
- const gotAttribs = [];
- const wantAttribs = [];
- for (const aline of result.lineAttribs) {
- const gotAlineAttribs = [];
- gotAttribs.push(gotAlineAttribs);
- const wantAlineAttribs = [];
- wantAttribs.push(wantAlineAttribs);
- for (const op of Changeset.deserializeOps(aline)) {
- const gotOpAttribs = [...attributes.attribsFromString(op.attribs, apool)];
- gotAlineAttribs.push(gotOpAttribs);
- wantAlineAttribs.push(attributes.sort([...gotOpAttribs]));
- }
- }
- assert.deepEqual(gotAttribs, wantAttribs);
- });
- });
- }
+ for (const tc of testCases) {
+ describe(tc.description, function () {
+ let apool;
+ let result;
+ before(async function () {
+ if (tc.disabled)
+ return this.skip();
+ const { window: { document } } = new jsdom.JSDOM(tc.html);
+ apool = new AttributePool();
+ // To reduce test fragility, the attribute pool is seeded with `knownAttribs`, and all
+ // attributes in `tc.wantAlines` must be in `knownAttribs`. (This guarantees that attribute
+ // numbers do not change if the attribute processing code changes.)
+ for (const attrib of knownAttribs)
+ apool.putAttrib(attrib);
+ for (const aline of tc.wantAlines) {
+ for (const op of Changeset.deserializeOps(aline)) {
+ for (const n of attributes.decodeAttribString(op.attribs)) {
+ assert(n < knownAttribs.length);
+ }
+ }
+ }
+ const cc = contentcollector.makeContentCollector(true, null, apool);
+ cc.collectContent(document.body);
+ result = cc.finish();
+ });
+ it('text matches', async function () {
+ assert.deepEqual(result.lines, tc.wantText);
+ });
+ it('alines match', async function () {
+ assert.deepEqual(result.lineAttribs, tc.wantAlines);
+ });
+ it('attributes are sorted in canonical order', async function () {
+ const gotAttribs = [];
+ const wantAttribs = [];
+ for (const aline of result.lineAttribs) {
+ const gotAlineAttribs = [];
+ gotAttribs.push(gotAlineAttribs);
+ const wantAlineAttribs = [];
+ wantAttribs.push(wantAlineAttribs);
+ for (const op of Changeset.deserializeOps(aline)) {
+ const gotOpAttribs = [...attributes.attribsFromString(op.attribs, apool)];
+ gotAlineAttribs.push(gotOpAttribs);
+ wantAlineAttribs.push(attributes.sort([...gotOpAttribs]));
+ }
+ }
+ assert.deepEqual(gotAttribs, wantAttribs);
+ });
+ });
+ }
});
diff --git a/src/tests/backend/specs/export.js b/src/tests/backend/specs/export.js
index d2fcde131dc..ea4a50be035 100644
--- a/src/tests/backend/specs/export.js
+++ b/src/tests/backend/specs/export.js
@@ -1,26 +1,21 @@
+import * as common from "../common.js";
+import * as padManager from "../../../node/db/PadManager.js";
+import * as settings from "../../../node/utils/Settings.js";
'use strict';
-
-const common = require('../common');
-const padManager = require('../../../node/db/PadManager');
-const settings = require('../../../node/utils/Settings');
-
describe(__filename, function () {
- let agent;
- const settingsBackup = {};
-
- before(async function () {
- agent = await common.init();
- settingsBackup.soffice = settings.soffice;
- await padManager.getPad('testExportPad', 'test content');
- });
-
- after(async function () {
- Object.assign(settings, settingsBackup);
- });
-
- it('returns 500 on export error', async function () {
- settings.soffice = 'false'; // '/bin/false' doesn't work on Windows
- await agent.get('/p/testExportPad/export/doc')
- .expect(500);
- });
+ let agent;
+ const settingsBackup = {};
+ before(async function () {
+ agent = await common.init();
+ settingsBackup.soffice = settings.soffice;
+ await padManager.getPad('testExportPad', 'test content');
+ });
+ after(async function () {
+ Object.assign(settings, settingsBackup);
+ });
+ it('returns 500 on export error', async function () {
+ settings.soffice = 'false'; // '/bin/false' doesn't work on Windows
+ await agent.get('/p/testExportPad/export/doc')
+ .expect(500);
+ });
});
diff --git a/src/tests/backend/specs/favicon.js b/src/tests/backend/specs/favicon.js
index a5e3095dee8..c69dfb3af82 100644
--- a/src/tests/backend/specs/favicon.js
+++ b/src/tests/backend/specs/favicon.js
@@ -1,91 +1,83 @@
+import assert$0 from "assert";
+import * as common from "../common.js";
+import fs from "fs";
+import path from "path";
+import * as settings from "../../../node/utils/Settings.js";
+import superagent from "superagent";
'use strict';
-
-const assert = require('assert').strict;
-const common = require('../common');
-const fs = require('fs');
+const assert = assert$0.strict;
const fsp = fs.promises;
-const path = require('path');
-const settings = require('../../../node/utils/Settings');
-const superagent = require('superagent');
-
describe(__filename, function () {
- let agent;
- let backupSettings;
- let skinDir;
- let wantCustomIcon;
- let wantDefaultIcon;
- let wantSkinIcon;
-
- before(async function () {
- agent = await common.init();
- wantCustomIcon = await fsp.readFile(path.join(__dirname, 'favicon-test-custom.png'));
- wantDefaultIcon = await fsp.readFile(path.join(settings.root, 'src', 'static', 'favicon.ico'));
- wantSkinIcon = await fsp.readFile(path.join(__dirname, 'favicon-test-skin.png'));
- });
-
- beforeEach(async function () {
- backupSettings = {...settings};
- skinDir = await fsp.mkdtemp(path.join(settings.root, 'src', 'static', 'skins', 'test-'));
- settings.skinName = path.basename(skinDir);
- });
-
- afterEach(async function () {
- delete settings.favicon;
- delete settings.skinName;
- Object.assign(settings, backupSettings);
- try {
- // TODO: The {recursive: true} option wasn't added to fsp.rmdir() until Node.js v12.10.0 so we
- // can't rely on it until support for Node.js v10 is dropped.
- await fsp.unlink(path.join(skinDir, 'favicon.ico'));
- await fsp.rmdir(skinDir, {recursive: true});
- } catch (err) { /* intentionally ignored */ }
- });
-
- it('uses custom favicon if set (relative pathname)', async function () {
- settings.favicon =
- path.relative(settings.root, path.join(__dirname, 'favicon-test-custom.png'));
- assert(!path.isAbsolute(settings.favicon));
- const {body: gotIcon} = await agent.get('/favicon.ico')
- .accept('png').buffer(true).parse(superagent.parse.image)
- .expect(200);
- assert(gotIcon.equals(wantCustomIcon));
- });
-
- it('uses custom favicon if set (absolute pathname)', async function () {
- settings.favicon = path.join(__dirname, 'favicon-test-custom.png');
- assert(path.isAbsolute(settings.favicon));
- const {body: gotIcon} = await agent.get('/favicon.ico')
- .accept('png').buffer(true).parse(superagent.parse.image)
- .expect(200);
- assert(gotIcon.equals(wantCustomIcon));
- });
-
- it('falls back if custom favicon is missing', async function () {
- // The previous default for settings.favicon was 'favicon.ico', so many users will continue to
- // have that in their settings.json for a long time. There is unlikely to be a favicon at
- // path.resolve(settings.root, 'favicon.ico'), so this test ensures that 'favicon.ico' won't be
- // a problem for those users.
- settings.favicon = 'favicon.ico';
- const {body: gotIcon} = await agent.get('/favicon.ico')
- .accept('png').buffer(true).parse(superagent.parse.image)
- .expect(200);
- assert(gotIcon.equals(wantDefaultIcon));
- });
-
- it('uses skin favicon if present', async function () {
- await fsp.writeFile(path.join(skinDir, 'favicon.ico'), wantSkinIcon);
- settings.favicon = null;
- const {body: gotIcon} = await agent.get('/favicon.ico')
- .accept('png').buffer(true).parse(superagent.parse.image)
- .expect(200);
- assert(gotIcon.equals(wantSkinIcon));
- });
-
- it('falls back to default favicon', async function () {
- settings.favicon = null;
- const {body: gotIcon} = await agent.get('/favicon.ico')
- .accept('png').buffer(true).parse(superagent.parse.image)
- .expect(200);
- assert(gotIcon.equals(wantDefaultIcon));
- });
+ let agent;
+ let backupSettings;
+ let skinDir;
+ let wantCustomIcon;
+ let wantDefaultIcon;
+ let wantSkinIcon;
+ before(async function () {
+ agent = await common.init();
+ wantCustomIcon = await fsp.readFile(path.join(__dirname, 'favicon-test-custom.png'));
+ wantDefaultIcon = await fsp.readFile(path.join(settings.root, 'src', 'static', 'favicon.ico'));
+ wantSkinIcon = await fsp.readFile(path.join(__dirname, 'favicon-test-skin.png'));
+ });
+ beforeEach(async function () {
+ backupSettings = { ...settings };
+ skinDir = await fsp.mkdtemp(path.join(settings.root, 'src', 'static', 'skins', 'test-'));
+ settings.skinName = path.basename(skinDir);
+ });
+ afterEach(async function () {
+ delete settings.favicon;
+ delete settings.skinName;
+ Object.assign(settings, backupSettings);
+ try {
+ // TODO: The {recursive: true} option wasn't added to fsp.rmdir() until Node.js v12.10.0 so we
+ // can't rely on it until support for Node.js v10 is dropped.
+ await fsp.unlink(path.join(skinDir, 'favicon.ico'));
+ await fsp.rmdir(skinDir, { recursive: true });
+ }
+ catch (err) { /* intentionally ignored */ }
+ });
+ it('uses custom favicon if set (relative pathname)', async function () {
+ settings.favicon =
+ path.relative(settings.root, path.join(__dirname, 'favicon-test-custom.png'));
+ assert(!path.isAbsolute(settings.favicon));
+ const { body: gotIcon } = await agent.get('/favicon.ico')
+ .accept('png').buffer(true).parse(superagent.parse.image)
+ .expect(200);
+ assert(gotIcon.equals(wantCustomIcon));
+ });
+ it('uses custom favicon if set (absolute pathname)', async function () {
+ settings.favicon = path.join(__dirname, 'favicon-test-custom.png');
+ assert(path.isAbsolute(settings.favicon));
+ const { body: gotIcon } = await agent.get('/favicon.ico')
+ .accept('png').buffer(true).parse(superagent.parse.image)
+ .expect(200);
+ assert(gotIcon.equals(wantCustomIcon));
+ });
+ it('falls back if custom favicon is missing', async function () {
+ // The previous default for settings.favicon was 'favicon.ico', so many users will continue to
+ // have that in their settings.json for a long time. There is unlikely to be a favicon at
+ // path.resolve(settings.root, 'favicon.ico'), so this test ensures that 'favicon.ico' won't be
+ // a problem for those users.
+ settings.favicon = 'favicon.ico';
+ const { body: gotIcon } = await agent.get('/favicon.ico')
+ .accept('png').buffer(true).parse(superagent.parse.image)
+ .expect(200);
+ assert(gotIcon.equals(wantDefaultIcon));
+ });
+ it('uses skin favicon if present', async function () {
+ await fsp.writeFile(path.join(skinDir, 'favicon.ico'), wantSkinIcon);
+ settings.favicon = null;
+ const { body: gotIcon } = await agent.get('/favicon.ico')
+ .accept('png').buffer(true).parse(superagent.parse.image)
+ .expect(200);
+ assert(gotIcon.equals(wantSkinIcon));
+ });
+ it('falls back to default favicon', async function () {
+ settings.favicon = null;
+ const { body: gotIcon } = await agent.get('/favicon.ico')
+ .accept('png').buffer(true).parse(superagent.parse.image)
+ .expect(200);
+ assert(gotIcon.equals(wantDefaultIcon));
+ });
});
diff --git a/src/tests/backend/specs/health.js b/src/tests/backend/specs/health.js
index 0090aedbb90..bc640af239e 100644
--- a/src/tests/backend/specs/health.js
+++ b/src/tests/backend/specs/health.js
@@ -1,56 +1,48 @@
+import assert$0 from "assert";
+import * as common from "../common.js";
+import * as settings from "../../../node/utils/Settings.js";
+import superagent from "superagent";
'use strict';
-
-const assert = require('assert').strict;
-const common = require('../common');
-const settings = require('../../../node/utils/Settings');
-const superagent = require('superagent');
-
+const assert = assert$0.strict;
describe(__filename, function () {
- let agent;
- const backup = {};
-
- const getHealth = () => agent.get('/health')
- .accept('application/health+json')
- .buffer(true)
- .parse(superagent.parse['application/json'])
- .expect(200)
- .expect((res) => assert.equal(res.type, 'application/health+json'));
-
- before(async function () {
- agent = await common.init();
- });
-
- beforeEach(async function () {
- backup.settings = {};
- for (const setting of ['requireAuthentication', 'requireAuthorization']) {
- backup.settings[setting] = settings[setting];
- }
- });
-
- afterEach(async function () {
- Object.assign(settings, backup.settings);
- });
-
- it('/health works', async function () {
- const res = await getHealth();
- assert.equal(res.body.status, 'pass');
- assert.equal(res.body.releaseId, settings.getEpVersion());
- });
-
- it('auth is not required', async function () {
- settings.requireAuthentication = true;
- settings.requireAuthorization = true;
- const res = await getHealth();
- assert.equal(res.body.status, 'pass');
- });
-
- // We actually want to test that no express-session state is created, but that is difficult to do
- // without intrusive changes or unpleasant ueberdb digging. Instead, we assume that the lack of a
- // cookie means that no express-session state was created (how would express-session look up the
- // session state if no ID was returned to the client?).
- it('no cookie is returned', async function () {
- const res = await getHealth();
- const cookie = res.headers['set-cookie'];
- assert(cookie == null, `unexpected Set-Cookie: ${cookie}`);
- });
+ let agent;
+ const backup = {};
+ const getHealth = () => agent.get('/health')
+ .accept('application/health+json')
+ .buffer(true)
+ .parse(superagent.parse['application/json'])
+ .expect(200)
+ .expect((res) => assert.equal(res.type, 'application/health+json'));
+ before(async function () {
+ agent = await common.init();
+ });
+ beforeEach(async function () {
+ backup.settings = {};
+ for (const setting of ['requireAuthentication', 'requireAuthorization']) {
+ backup.settings[setting] = settings[setting];
+ }
+ });
+ afterEach(async function () {
+ Object.assign(settings, backup.settings);
+ });
+ it('/health works', async function () {
+ const res = await getHealth();
+ assert.equal(res.body.status, 'pass');
+ assert.equal(res.body.releaseId, settings.getEpVersion());
+ });
+ it('auth is not required', async function () {
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = true;
+ const res = await getHealth();
+ assert.equal(res.body.status, 'pass');
+ });
+ // We actually want to test that no express-session state is created, but that is difficult to do
+ // without intrusive changes or unpleasant ueberdb digging. Instead, we assume that the lack of a
+ // cookie means that no express-session state was created (how would express-session look up the
+ // session state if no ID was returned to the client?).
+ it('no cookie is returned', async function () {
+ const res = await getHealth();
+ const cookie = res.headers['set-cookie'];
+ assert(cookie == null, `unexpected Set-Cookie: ${cookie}`);
+ });
});
diff --git a/src/tests/backend/specs/hooks.js b/src/tests/backend/specs/hooks.js
index 3120911aea2..e8972943a7a 100644
--- a/src/tests/backend/specs/hooks.js
+++ b/src/tests/backend/specs/hooks.js
@@ -1,1209 +1,1106 @@
+import assertLegacy from "../assert-legacy.js";
+import * as hooks from "../../../static/js/pluginfw/hooks.js";
+import * as plugins from "../../../static/js/pluginfw/plugin_defs.js";
+import sinon from "sinon";
'use strict';
-
-const assert = require('../assert-legacy').strict;
-const hooks = require('../../../static/js/pluginfw/hooks');
-const plugins = require('../../../static/js/pluginfw/plugin_defs');
-const sinon = require('sinon');
-
+const assert = assertLegacy.strict;
describe(__filename, function () {
- const hookName = 'testHook';
- const hookFnName = 'testPluginFileName:testHookFunctionName';
- let testHooks; // Convenience shorthand for plugins.hooks[hookName].
- let hook; // Convenience shorthand for plugins.hooks[hookName][0].
-
- beforeEach(async function () {
- // Make sure these are not already set so that we don't accidentally step on someone else's
- // toes:
- assert(plugins.hooks[hookName] == null);
- assert(hooks.deprecationNotices[hookName] == null);
- assert(hooks.exportedForTestingOnly.deprecationWarned[hookFnName] == null);
-
- // Many of the tests only need a single registered hook function. Set that up here to reduce
- // boilerplate.
- hook = makeHook();
- plugins.hooks[hookName] = [hook];
- testHooks = plugins.hooks[hookName];
- });
-
- afterEach(async function () {
- sinon.restore();
- delete plugins.hooks[hookName];
- delete hooks.deprecationNotices[hookName];
- delete hooks.exportedForTestingOnly.deprecationWarned[hookFnName];
- });
-
- const makeHook = (ret) => ({
- hook_name: hookName,
- // Many tests will likely want to change this. Unfortunately, we can't use a convenience
- // wrapper like `(...args) => hookFn(..args)` because the hooks look at Function.length and
- // change behavior depending on the number of parameters.
- hook_fn: (hn, ctx, cb) => cb(ret),
- hook_fn_name: hookFnName,
- part: {plugin: 'testPluginName'},
- });
-
- // Hook functions that should work for both synchronous and asynchronous hooks.
- const supportedSyncHookFunctions = [
- {
- name: 'return non-Promise value, with callback parameter',
- fn: (hn, ctx, cb) => 'val',
- want: 'val',
- syncOk: true,
- },
- {
- name: 'return non-Promise value, without callback parameter',
- fn: (hn, ctx) => 'val',
- want: 'val',
- syncOk: true,
- },
- {
- name: 'return undefined, without callback parameter',
- fn: (hn, ctx) => {},
- want: undefined,
- syncOk: true,
- },
- {
- name: 'pass non-Promise value to callback',
- fn: (hn, ctx, cb) => { cb('val'); },
- want: 'val',
- syncOk: true,
- },
- {
- name: 'pass undefined to callback',
- fn: (hn, ctx, cb) => { cb(); },
- want: undefined,
- syncOk: true,
- },
- {
- name: 'return the value returned from the callback',
- fn: (hn, ctx, cb) => cb('val'),
- want: 'val',
- syncOk: true,
- },
- {
- name: 'throw',
- fn: (hn, ctx, cb) => { throw new Error('test exception'); },
- wantErr: 'test exception',
- syncOk: true,
- },
- ];
-
- describe('callHookFnSync', function () {
- const callHookFnSync = hooks.exportedForTestingOnly.callHookFnSync; // Convenience shorthand.
-
- describe('basic behavior', function () {
- it('passes hook name', async function () {
- hook.hook_fn = (hn) => { assert.equal(hn, hookName); };
- callHookFnSync(hook);
- });
-
- it('passes context', async function () {
- for (const val of ['value', null, undefined]) {
- hook.hook_fn = (hn, ctx) => { assert.equal(ctx, val); };
- callHookFnSync(hook, val);
- }
- });
-
- it('returns the value provided to the callback', async function () {
- for (const val of ['value', null, undefined]) {
- hook.hook_fn = (hn, ctx, cb) => { cb(ctx); };
- assert.equal(callHookFnSync(hook, val), val);
- }
- });
-
- it('returns the value returned by the hook function', async function () {
- for (const val of ['value', null, undefined]) {
- // Must not have the cb parameter otherwise returning undefined will error.
- hook.hook_fn = (hn, ctx) => ctx;
- assert.equal(callHookFnSync(hook, val), val);
- }
- });
-
- it('does not catch exceptions', async function () {
- hook.hook_fn = () => { throw new Error('test exception'); };
- assert.throws(() => callHookFnSync(hook), {message: 'test exception'});
- });
-
- it('callback returns undefined', async function () {
- hook.hook_fn = (hn, ctx, cb) => { assert.equal(cb('foo'), undefined); };
- callHookFnSync(hook);
- });
-
- it('checks for deprecation', async function () {
- sinon.stub(console, 'warn');
- hooks.deprecationNotices[hookName] = 'test deprecation';
- callHookFnSync(hook);
- assert.equal(hooks.exportedForTestingOnly.deprecationWarned[hookFnName], true);
- assert.equal(console.warn.callCount, 1);
- assert.match(console.warn.getCall(0).args[0], /test deprecation/);
- });
+ const hookName = 'testHook';
+ const hookFnName = 'testPluginFileName:testHookFunctionName';
+ let testHooks; // Convenience shorthand for plugins.hooks[hookName].
+ let hook; // Convenience shorthand for plugins.hooks[hookName][0].
+ beforeEach(async function () {
+ // Make sure these are not already set so that we don't accidentally step on someone else's
+ // toes:
+ assert(plugins.hooks[hookName] == null);
+ assert(hooks.deprecationNotices[hookName] == null);
+ assert(hooks.exportedForTestingOnly.deprecationWarned[hookFnName] == null);
+ // Many of the tests only need a single registered hook function. Set that up here to reduce
+ // boilerplate.
+ hook = makeHook();
+ plugins.hooks[hookName] = [hook];
+ testHooks = plugins.hooks[hookName];
});
-
- describe('supported hook function styles', function () {
- for (const tc of supportedSyncHookFunctions) {
- it(tc.name, async function () {
- sinon.stub(console, 'warn');
- sinon.stub(console, 'error');
- hook.hook_fn = tc.fn;
- const call = () => callHookFnSync(hook);
- if (tc.wantErr) {
- assert.throws(call, {message: tc.wantErr});
- } else {
- assert.equal(call(), tc.want);
- }
- assert.equal(console.warn.callCount, 0);
- assert.equal(console.error.callCount, 0);
- });
- }
+ afterEach(async function () {
+ sinon.restore();
+ delete plugins.hooks[hookName];
+ delete hooks.deprecationNotices[hookName];
+ delete hooks.exportedForTestingOnly.deprecationWarned[hookFnName];
});
-
- describe('bad hook function behavior (other than double settle)', function () {
- const promise1 = Promise.resolve('val1');
- const promise2 = Promise.resolve('val2');
-
- const testCases = [
+ const makeHook = (ret) => ({
+ hook_name: hookName,
+ // Many tests will likely want to change this. Unfortunately, we can't use a convenience
+ // wrapper like `(...args) => hookFn(..args)` because the hooks look at Function.length and
+ // change behavior depending on the number of parameters.
+ hook_fn: (hn, ctx, cb) => cb(ret),
+ hook_fn_name: hookFnName,
+ part: { plugin: 'testPluginName' },
+ });
+ // Hook functions that should work for both synchronous and asynchronous hooks.
+ const supportedSyncHookFunctions = [
{
- name: 'never settles -> buggy hook detected',
- // Note that returning undefined without calling the callback is permitted if the function
- // has 2 or fewer parameters, so this test function must have 3 parameters.
- fn: (hn, ctx, cb) => {},
- wantVal: undefined,
- wantError: /UNSETTLED FUNCTION BUG/,
+ name: 'return non-Promise value, with callback parameter',
+ fn: (hn, ctx, cb) => 'val',
+ want: 'val',
+ syncOk: true,
},
{
- name: 'returns a Promise -> buggy hook detected',
- fn: () => promise1,
- wantVal: promise1,
- wantError: /PROHIBITED PROMISE BUG/,
+ name: 'return non-Promise value, without callback parameter',
+ fn: (hn, ctx) => 'val',
+ want: 'val',
+ syncOk: true,
},
{
- name: 'passes a Promise to cb -> buggy hook detected',
- fn: (hn, ctx, cb) => cb(promise2),
- wantVal: promise2,
- wantError: /PROHIBITED PROMISE BUG/,
+ name: 'return undefined, without callback parameter',
+ fn: (hn, ctx) => { },
+ want: undefined,
+ syncOk: true,
},
- ];
-
- for (const tc of testCases) {
- it(tc.name, async function () {
- sinon.stub(console, 'error');
- hook.hook_fn = tc.fn;
- assert.equal(callHookFnSync(hook), tc.wantVal);
- assert.equal(console.error.callCount, tc.wantError ? 1 : 0);
- if (tc.wantError) assert.match(console.error.getCall(0).args[0], tc.wantError);
- });
- }
- });
-
- // Test various ways a hook might attempt to settle twice. (Examples: call the callback a second
- // time, or call the callback and then return a value.)
- describe('bad hook function behavior (double settle)', function () {
- beforeEach(async function () {
- sinon.stub(console, 'error');
- });
-
- // Each item in this array codifies a way to settle a synchronous hook function. Each of the
- // test cases below combines two of these behaviors in a single hook function and confirms
- // that callHookFnSync both (1) returns the result of the first settle attempt, and
- // (2) detects the second settle attempt.
- const behaviors = [
{
- name: 'throw',
- fn: (cb, err, val) => { throw err; },
- rejects: true,
+ name: 'pass non-Promise value to callback',
+ fn: (hn, ctx, cb) => { cb('val'); },
+ want: 'val',
+ syncOk: true,
},
{
- name: 'return value',
- fn: (cb, err, val) => val,
+ name: 'pass undefined to callback',
+ fn: (hn, ctx, cb) => { cb(); },
+ want: undefined,
+ syncOk: true,
},
{
- name: 'immediately call cb(value)',
- fn: (cb, err, val) => cb(val),
+ name: 'return the value returned from the callback',
+ fn: (hn, ctx, cb) => cb('val'),
+ want: 'val',
+ syncOk: true,
},
{
- name: 'defer call to cb(value)',
- fn: (cb, err, val) => { process.nextTick(cb, val); },
- async: true,
+ name: 'throw',
+ fn: (hn, ctx, cb) => { throw new Error('test exception'); },
+ wantErr: 'test exception',
+ syncOk: true,
},
- ];
-
- for (const step1 of behaviors) {
- // There can't be a second step if the first step is to return or throw.
- if (step1.name.startsWith('return ') || step1.name === 'throw') continue;
- for (const step2 of behaviors) {
- // If step1 and step2 are both async then there would be three settle attempts (first an
- // erroneous unsettled return, then async step 1, then async step 2). Handling triple
- // settle would complicate the tests, and it is sufficient to test only double settles.
- if (step1.async && step2.async) continue;
-
- it(`${step1.name} then ${step2.name} (diff. outcomes) -> log+throw`, async function () {
- hook.hook_fn = (hn, ctx, cb) => {
- step1.fn(cb, new Error(ctx.ret1), ctx.ret1);
- return step2.fn(cb, new Error(ctx.ret2), ctx.ret2);
- };
-
- // Temporarily remove unhandled error listeners so that the errors we expect to see
- // don't trigger a test failure (or terminate node).
- const events = ['uncaughtException', 'unhandledRejection'];
- const listenerBackups = {};
- for (const event of events) {
- listenerBackups[event] = process.rawListeners(event);
- process.removeAllListeners(event);
- }
-
- // We should see an asynchronous error (either an unhandled Promise rejection or an
- // uncaught exception) if and only if one of the two steps was asynchronous or there was
- // a throw (in which case the double settle is deferred so that the caller sees the
- // original error).
- const wantAsyncErr = step1.async || step2.async || step2.rejects;
- let tempListener;
- let asyncErr;
- try {
- const seenErrPromise = new Promise((resolve) => {
- tempListener = (err) => {
- assert.equal(asyncErr, undefined);
- asyncErr = err;
- resolve();
- };
- if (!wantAsyncErr) resolve();
- });
- events.forEach((event) => process.on(event, tempListener));
- const call = () => callHookFnSync(hook, {ret1: 'val1', ret2: 'val2'});
- if (step2.rejects) {
- assert.throws(call, {message: 'val2'});
- } else if (!step1.async && !step2.async) {
- assert.throws(call, {message: /DOUBLE SETTLE BUG/});
- } else {
- assert.equal(call(), step1.async ? 'val2' : 'val1');
- }
- await seenErrPromise;
- } finally {
- // Restore the original listeners.
- for (const event of events) {
- process.off(event, tempListener);
- for (const listener of listenerBackups[event]) {
- process.on(event, listener);
+ ];
+ describe('callHookFnSync', function () {
+ const callHookFnSync = hooks.exportedForTestingOnly.callHookFnSync; // Convenience shorthand.
+ describe('basic behavior', function () {
+ it('passes hook name', async function () {
+ hook.hook_fn = (hn) => { assert.equal(hn, hookName); };
+ callHookFnSync(hook);
+ });
+ it('passes context', async function () {
+ for (const val of ['value', null, undefined]) {
+ hook.hook_fn = (hn, ctx) => { assert.equal(ctx, val); };
+ callHookFnSync(hook, val);
+ }
+ });
+ it('returns the value provided to the callback', async function () {
+ for (const val of ['value', null, undefined]) {
+ hook.hook_fn = (hn, ctx, cb) => { cb(ctx); };
+ assert.equal(callHookFnSync(hook, val), val);
}
- }
+ });
+ it('returns the value returned by the hook function', async function () {
+ for (const val of ['value', null, undefined]) {
+ // Must not have the cb parameter otherwise returning undefined will error.
+ hook.hook_fn = (hn, ctx) => ctx;
+ assert.equal(callHookFnSync(hook, val), val);
+ }
+ });
+ it('does not catch exceptions', async function () {
+ hook.hook_fn = () => { throw new Error('test exception'); };
+ assert.throws(() => callHookFnSync(hook), { message: 'test exception' });
+ });
+ it('callback returns undefined', async function () {
+ hook.hook_fn = (hn, ctx, cb) => { assert.equal(cb('foo'), undefined); };
+ callHookFnSync(hook);
+ });
+ it('checks for deprecation', async function () {
+ sinon.stub(console, 'warn');
+ hooks.deprecationNotices[hookName] = 'test deprecation';
+ callHookFnSync(hook);
+ assert.equal(hooks.exportedForTestingOnly.deprecationWarned[hookFnName], true);
+ assert.equal(console.warn.callCount, 1);
+ assert.match(console.warn.getCall(0).args[0], /test deprecation/);
+ });
+ });
+ describe('supported hook function styles', function () {
+ for (const tc of supportedSyncHookFunctions) {
+ it(tc.name, async function () {
+ sinon.stub(console, 'warn');
+ sinon.stub(console, 'error');
+ hook.hook_fn = tc.fn;
+ const call = () => callHookFnSync(hook);
+ if (tc.wantErr) {
+ assert.throws(call, { message: tc.wantErr });
+ }
+ else {
+ assert.equal(call(), tc.want);
+ }
+ assert.equal(console.warn.callCount, 0);
+ assert.equal(console.error.callCount, 0);
+ });
}
- assert.equal(console.error.callCount, 1);
- assert.match(console.error.getCall(0).args[0], /DOUBLE SETTLE BUG/);
- if (wantAsyncErr) {
- assert(asyncErr instanceof Error);
- assert.match(asyncErr.message, /DOUBLE SETTLE BUG/);
+ });
+ describe('bad hook function behavior (other than double settle)', function () {
+ const promise1 = Promise.resolve('val1');
+ const promise2 = Promise.resolve('val2');
+ const testCases = [
+ {
+ name: 'never settles -> buggy hook detected',
+ // Note that returning undefined without calling the callback is permitted if the function
+ // has 2 or fewer parameters, so this test function must have 3 parameters.
+ fn: (hn, ctx, cb) => { },
+ wantVal: undefined,
+ wantError: /UNSETTLED FUNCTION BUG/,
+ },
+ {
+ name: 'returns a Promise -> buggy hook detected',
+ fn: () => promise1,
+ wantVal: promise1,
+ wantError: /PROHIBITED PROMISE BUG/,
+ },
+ {
+ name: 'passes a Promise to cb -> buggy hook detected',
+ fn: (hn, ctx, cb) => cb(promise2),
+ wantVal: promise2,
+ wantError: /PROHIBITED PROMISE BUG/,
+ },
+ ];
+ for (const tc of testCases) {
+ it(tc.name, async function () {
+ sinon.stub(console, 'error');
+ hook.hook_fn = tc.fn;
+ assert.equal(callHookFnSync(hook), tc.wantVal);
+ assert.equal(console.error.callCount, tc.wantError ? 1 : 0);
+ if (tc.wantError)
+ assert.match(console.error.getCall(0).args[0], tc.wantError);
+ });
}
- });
-
- // This next test is the same as the above test, except the second settle attempt is for
- // the same outcome. The two outcomes can't be the same if one step throws and the other
- // doesn't, so skip those cases.
- if (step1.rejects !== step2.rejects) continue;
-
- it(`${step1.name} then ${step2.name} (same outcome) -> only log`, async function () {
- const err = new Error('val');
- hook.hook_fn = (hn, ctx, cb) => {
- step1.fn(cb, err, 'val');
- return step2.fn(cb, err, 'val');
- };
-
- const errorLogged = new Promise((resolve) => console.error.callsFake(resolve));
- const call = () => callHookFnSync(hook);
- if (step2.rejects) {
- assert.throws(call, {message: 'val'});
- } else {
- assert.equal(call(), 'val');
+ });
+ // Test various ways a hook might attempt to settle twice. (Examples: call the callback a second
+ // time, or call the callback and then return a value.)
+ describe('bad hook function behavior (double settle)', function () {
+ beforeEach(async function () {
+ sinon.stub(console, 'error');
+ });
+ // Each item in this array codifies a way to settle a synchronous hook function. Each of the
+ // test cases below combines two of these behaviors in a single hook function and confirms
+ // that callHookFnSync both (1) returns the result of the first settle attempt, and
+ // (2) detects the second settle attempt.
+ const behaviors = [
+ {
+ name: 'throw',
+ fn: (cb, err, val) => { throw err; },
+ rejects: true,
+ },
+ {
+ name: 'return value',
+ fn: (cb, err, val) => val,
+ },
+ {
+ name: 'immediately call cb(value)',
+ fn: (cb, err, val) => cb(val),
+ },
+ {
+ name: 'defer call to cb(value)',
+ fn: (cb, err, val) => { process.nextTick(cb, val); },
+ async: true,
+ },
+ ];
+ for (const step1 of behaviors) {
+ // There can't be a second step if the first step is to return or throw.
+ if (step1.name.startsWith('return ') || step1.name === 'throw')
+ continue;
+ for (const step2 of behaviors) {
+ // If step1 and step2 are both async then there would be three settle attempts (first an
+ // erroneous unsettled return, then async step 1, then async step 2). Handling triple
+ // settle would complicate the tests, and it is sufficient to test only double settles.
+ if (step1.async && step2.async)
+ continue;
+ it(`${step1.name} then ${step2.name} (diff. outcomes) -> log+throw`, async function () {
+ hook.hook_fn = (hn, ctx, cb) => {
+ step1.fn(cb, new Error(ctx.ret1), ctx.ret1);
+ return step2.fn(cb, new Error(ctx.ret2), ctx.ret2);
+ };
+ // Temporarily remove unhandled error listeners so that the errors we expect to see
+ // don't trigger a test failure (or terminate node).
+ const events = ['uncaughtException', 'unhandledRejection'];
+ const listenerBackups = {};
+ for (const event of events) {
+ listenerBackups[event] = process.rawListeners(event);
+ process.removeAllListeners(event);
+ }
+ // We should see an asynchronous error (either an unhandled Promise rejection or an
+ // uncaught exception) if and only if one of the two steps was asynchronous or there was
+ // a throw (in which case the double settle is deferred so that the caller sees the
+ // original error).
+ const wantAsyncErr = step1.async || step2.async || step2.rejects;
+ let tempListener;
+ let asyncErr;
+ try {
+ const seenErrPromise = new Promise((resolve) => {
+ tempListener = (err) => {
+ assert.equal(asyncErr, undefined);
+ asyncErr = err;
+ resolve();
+ };
+ if (!wantAsyncErr)
+ resolve();
+ });
+ events.forEach((event) => process.on(event, tempListener));
+ const call = () => callHookFnSync(hook, { ret1: 'val1', ret2: 'val2' });
+ if (step2.rejects) {
+ assert.throws(call, { message: 'val2' });
+ }
+ else if (!step1.async && !step2.async) {
+ assert.throws(call, { message: /DOUBLE SETTLE BUG/ });
+ }
+ else {
+ assert.equal(call(), step1.async ? 'val2' : 'val1');
+ }
+ await seenErrPromise;
+ }
+ finally {
+ // Restore the original listeners.
+ for (const event of events) {
+ process.off(event, tempListener);
+ for (const listener of listenerBackups[event]) {
+ process.on(event, listener);
+ }
+ }
+ }
+ assert.equal(console.error.callCount, 1);
+ assert.match(console.error.getCall(0).args[0], /DOUBLE SETTLE BUG/);
+ if (wantAsyncErr) {
+ assert(asyncErr instanceof Error);
+ assert.match(asyncErr.message, /DOUBLE SETTLE BUG/);
+ }
+ });
+ // This next test is the same as the above test, except the second settle attempt is for
+ // the same outcome. The two outcomes can't be the same if one step throws and the other
+ // doesn't, so skip those cases.
+ if (step1.rejects !== step2.rejects)
+ continue;
+ it(`${step1.name} then ${step2.name} (same outcome) -> only log`, async function () {
+ const err = new Error('val');
+ hook.hook_fn = (hn, ctx, cb) => {
+ step1.fn(cb, err, 'val');
+ return step2.fn(cb, err, 'val');
+ };
+ const errorLogged = new Promise((resolve) => console.error.callsFake(resolve));
+ const call = () => callHookFnSync(hook);
+ if (step2.rejects) {
+ assert.throws(call, { message: 'val' });
+ }
+ else {
+ assert.equal(call(), 'val');
+ }
+ await errorLogged;
+ assert.equal(console.error.callCount, 1);
+ assert.match(console.error.getCall(0).args[0], /DOUBLE SETTLE BUG/);
+ });
+ }
}
- await errorLogged;
- assert.equal(console.error.callCount, 1);
- assert.match(console.error.getCall(0).args[0], /DOUBLE SETTLE BUG/);
- });
- }
- }
- });
- });
-
- describe('hooks.callAll', function () {
- describe('basic behavior', function () {
- it('calls all in order', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(1), makeHook(2), makeHook(3));
- assert.deepEqual(hooks.callAll(hookName), [1, 2, 3]);
- });
-
- it('passes hook name', async function () {
- hook.hook_fn = (hn) => { assert.equal(hn, hookName); };
- hooks.callAll(hookName);
- });
-
- it('undefined context -> {}', async function () {
- hook.hook_fn = (hn, ctx) => { assert.deepEqual(ctx, {}); };
- hooks.callAll(hookName);
- });
-
- it('null context -> {}', async function () {
- hook.hook_fn = (hn, ctx) => { assert.deepEqual(ctx, {}); };
- hooks.callAll(hookName, null);
- });
-
- it('context unmodified', async function () {
- const wantContext = {};
- hook.hook_fn = (hn, ctx) => { assert.equal(ctx, wantContext); };
- hooks.callAll(hookName, wantContext);
- });
- });
-
- describe('result processing', function () {
- it('no registered hooks (undefined) -> []', async function () {
- delete plugins.hooks.testHook;
- assert.deepEqual(hooks.callAll(hookName), []);
- });
-
- it('no registered hooks (empty list) -> []', async function () {
- testHooks.length = 0;
- assert.deepEqual(hooks.callAll(hookName), []);
- });
-
- it('flattens one level', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(1), makeHook([2]), makeHook([[3]]));
- assert.deepEqual(hooks.callAll(hookName), [1, 2, [3]]);
- });
-
- it('filters out undefined', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(), makeHook([2]), makeHook([[3]]));
- assert.deepEqual(hooks.callAll(hookName), [2, [3]]);
- });
-
- it('preserves null', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(null), makeHook([2]), makeHook([[3]]));
- assert.deepEqual(hooks.callAll(hookName), [null, 2, [3]]);
- });
-
- it('all undefined -> []', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(), makeHook());
- assert.deepEqual(hooks.callAll(hookName), []);
- });
- });
- });
-
- describe('hooks.callFirst', function () {
- it('no registered hooks (undefined) -> []', async function () {
- delete plugins.hooks.testHook;
- assert.deepEqual(hooks.callFirst(hookName), []);
- });
-
- it('no registered hooks (empty list) -> []', async function () {
- testHooks.length = 0;
- assert.deepEqual(hooks.callFirst(hookName), []);
- });
-
- it('passes hook name => {}', async function () {
- hook.hook_fn = (hn) => { assert.equal(hn, hookName); };
- hooks.callFirst(hookName);
- });
-
- it('undefined context => {}', async function () {
- hook.hook_fn = (hn, ctx) => { assert.deepEqual(ctx, {}); };
- hooks.callFirst(hookName);
- });
-
- it('null context => {}', async function () {
- hook.hook_fn = (hn, ctx) => { assert.deepEqual(ctx, {}); };
- hooks.callFirst(hookName, null);
- });
-
- it('context unmodified', async function () {
- const wantContext = {};
- hook.hook_fn = (hn, ctx) => { assert.equal(ctx, wantContext); };
- hooks.callFirst(hookName, wantContext);
- });
-
- it('predicate never satisfied -> calls all in order', async function () {
- const gotCalls = [];
- testHooks.length = 0;
- for (let i = 0; i < 3; i++) {
- const hook = makeHook();
- hook.hook_fn = () => { gotCalls.push(i); };
- testHooks.push(hook);
- }
- assert.deepEqual(hooks.callFirst(hookName), []);
- assert.deepEqual(gotCalls, [0, 1, 2]);
- });
-
- it('stops when predicate is satisfied', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(), makeHook('val1'), makeHook('val2'));
- assert.deepEqual(hooks.callFirst(hookName), ['val1']);
- });
-
- it('skips values that do not satisfy predicate (undefined)', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(), makeHook('val1'));
- assert.deepEqual(hooks.callFirst(hookName), ['val1']);
- });
-
- it('skips values that do not satisfy predicate (empty list)', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook([]), makeHook('val1'));
- assert.deepEqual(hooks.callFirst(hookName), ['val1']);
- });
-
- it('null satisifes the predicate', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(null), makeHook('val1'));
- assert.deepEqual(hooks.callFirst(hookName), [null]);
- });
-
- it('non-empty arrays are returned unmodified', async function () {
- const want = ['val1'];
- testHooks.length = 0;
- testHooks.push(makeHook(want), makeHook(['val2']));
- assert.equal(hooks.callFirst(hookName), want); // Note: *NOT* deepEqual!
- });
-
- it('value can be passed via callback', async function () {
- const want = {};
- hook.hook_fn = (hn, ctx, cb) => { cb(want); };
- const got = hooks.callFirst(hookName);
- assert.deepEqual(got, [want]);
- assert.equal(got[0], want); // Note: *NOT* deepEqual!
+ });
});
- });
-
- describe('callHookFnAsync', function () {
- const callHookFnAsync = hooks.exportedForTestingOnly.callHookFnAsync; // Convenience shorthand.
-
- describe('basic behavior', function () {
- it('passes hook name', async function () {
- hook.hook_fn = (hn) => { assert.equal(hn, hookName); };
- await callHookFnAsync(hook);
- });
-
- it('passes context', async function () {
- for (const val of ['value', null, undefined]) {
- hook.hook_fn = (hn, ctx) => { assert.equal(ctx, val); };
- await callHookFnAsync(hook, val);
- }
- });
-
- it('returns the value provided to the callback', async function () {
- for (const val of ['value', null, undefined]) {
- hook.hook_fn = (hn, ctx, cb) => { cb(ctx); };
- assert.equal(await callHookFnAsync(hook, val), val);
- assert.equal(await callHookFnAsync(hook, Promise.resolve(val)), val);
- }
- });
-
- it('returns the value returned by the hook function', async function () {
- for (const val of ['value', null, undefined]) {
- // Must not have the cb parameter otherwise returning undefined will never resolve.
- hook.hook_fn = (hn, ctx) => ctx;
- assert.equal(await callHookFnAsync(hook, val), val);
- assert.equal(await callHookFnAsync(hook, Promise.resolve(val)), val);
- }
- });
-
- it('rejects if it throws an exception', async function () {
- hook.hook_fn = () => { throw new Error('test exception'); };
- await assert.rejects(callHookFnAsync(hook), {message: 'test exception'});
- });
-
- it('rejects if rejected Promise passed to callback', async function () {
- hook.hook_fn = (hn, ctx, cb) => cb(Promise.reject(new Error('test exception')));
- await assert.rejects(callHookFnAsync(hook), {message: 'test exception'});
- });
-
- it('rejects if rejected Promise returned', async function () {
- hook.hook_fn = (hn, ctx, cb) => Promise.reject(new Error('test exception'));
- await assert.rejects(callHookFnAsync(hook), {message: 'test exception'});
- });
-
- it('callback returns undefined', async function () {
- hook.hook_fn = (hn, ctx, cb) => { assert.equal(cb('foo'), undefined); };
- await callHookFnAsync(hook);
- });
-
- it('checks for deprecation', async function () {
- sinon.stub(console, 'warn');
- hooks.deprecationNotices[hookName] = 'test deprecation';
- await callHookFnAsync(hook);
- assert.equal(hooks.exportedForTestingOnly.deprecationWarned[hookFnName], true);
- assert.equal(console.warn.callCount, 1);
- assert.match(console.warn.getCall(0).args[0], /test deprecation/);
- });
+ describe('hooks.callAll', function () {
+ describe('basic behavior', function () {
+ it('calls all in order', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(1), makeHook(2), makeHook(3));
+ assert.deepEqual(hooks.callAll(hookName), [1, 2, 3]);
+ });
+ it('passes hook name', async function () {
+ hook.hook_fn = (hn) => { assert.equal(hn, hookName); };
+ hooks.callAll(hookName);
+ });
+ it('undefined context -> {}', async function () {
+ hook.hook_fn = (hn, ctx) => { assert.deepEqual(ctx, {}); };
+ hooks.callAll(hookName);
+ });
+ it('null context -> {}', async function () {
+ hook.hook_fn = (hn, ctx) => { assert.deepEqual(ctx, {}); };
+ hooks.callAll(hookName, null);
+ });
+ it('context unmodified', async function () {
+ const wantContext = {};
+ hook.hook_fn = (hn, ctx) => { assert.equal(ctx, wantContext); };
+ hooks.callAll(hookName, wantContext);
+ });
+ });
+ describe('result processing', function () {
+ it('no registered hooks (undefined) -> []', async function () {
+ delete plugins.hooks.testHook;
+ assert.deepEqual(hooks.callAll(hookName), []);
+ });
+ it('no registered hooks (empty list) -> []', async function () {
+ testHooks.length = 0;
+ assert.deepEqual(hooks.callAll(hookName), []);
+ });
+ it('flattens one level', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(1), makeHook([2]), makeHook([[3]]));
+ assert.deepEqual(hooks.callAll(hookName), [1, 2, [3]]);
+ });
+ it('filters out undefined', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(), makeHook([2]), makeHook([[3]]));
+ assert.deepEqual(hooks.callAll(hookName), [2, [3]]);
+ });
+ it('preserves null', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(null), makeHook([2]), makeHook([[3]]));
+ assert.deepEqual(hooks.callAll(hookName), [null, 2, [3]]);
+ });
+ it('all undefined -> []', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(), makeHook());
+ assert.deepEqual(hooks.callAll(hookName), []);
+ });
+ });
});
-
- describe('supported hook function styles', function () {
- const supportedHookFunctions = supportedSyncHookFunctions.concat([
- {
- name: 'legacy async cb',
- fn: (hn, ctx, cb) => { process.nextTick(cb, 'val'); },
- want: 'val',
- },
- // Already resolved Promises:
- {
- name: 'return resolved Promise, with callback parameter',
- fn: (hn, ctx, cb) => Promise.resolve('val'),
- want: 'val',
- },
- {
- name: 'return resolved Promise, without callback parameter',
- fn: (hn, ctx) => Promise.resolve('val'),
- want: 'val',
- },
- {
- name: 'pass resolved Promise to callback',
- fn: (hn, ctx, cb) => { cb(Promise.resolve('val')); },
- want: 'val',
- },
- // Not yet resolved Promises:
- {
- name: 'return unresolved Promise, with callback parameter',
- fn: (hn, ctx, cb) => new Promise((resolve) => process.nextTick(resolve, 'val')),
- want: 'val',
- },
- {
- name: 'return unresolved Promise, without callback parameter',
- fn: (hn, ctx) => new Promise((resolve) => process.nextTick(resolve, 'val')),
- want: 'val',
- },
- {
- name: 'pass unresolved Promise to callback',
- fn: (hn, ctx, cb) => { cb(new Promise((resolve) => process.nextTick(resolve, 'val'))); },
- want: 'val',
- },
- // Already rejected Promises:
- {
- name: 'return rejected Promise, with callback parameter',
- fn: (hn, ctx, cb) => Promise.reject(new Error('test rejection')),
- wantErr: 'test rejection',
- },
- {
- name: 'return rejected Promise, without callback parameter',
- fn: (hn, ctx) => Promise.reject(new Error('test rejection')),
- wantErr: 'test rejection',
- },
- {
- name: 'pass rejected Promise to callback',
- fn: (hn, ctx, cb) => { cb(Promise.reject(new Error('test rejection'))); },
- wantErr: 'test rejection',
- },
- // Not yet rejected Promises:
- {
- name: 'return unrejected Promise, with callback parameter',
- fn: (hn, ctx, cb) => new Promise((resolve, reject) => {
- process.nextTick(reject, new Error('test rejection'));
- }),
- wantErr: 'test rejection',
- },
- {
- name: 'return unrejected Promise, without callback parameter',
- fn: (hn, ctx) => new Promise((resolve, reject) => {
- process.nextTick(reject, new Error('test rejection'));
- }),
- wantErr: 'test rejection',
- },
- {
- name: 'pass unrejected Promise to callback',
- fn: (hn, ctx, cb) => {
- cb(new Promise((resolve, reject) => {
- process.nextTick(reject, new Error('test rejection'));
- }));
- },
- wantErr: 'test rejection',
- },
- ]);
-
- for (const tc of supportedSyncHookFunctions.concat(supportedHookFunctions)) {
- it(tc.name, async function () {
- sinon.stub(console, 'warn');
- sinon.stub(console, 'error');
- hook.hook_fn = tc.fn;
- const p = callHookFnAsync(hook);
- if (tc.wantErr) {
- await assert.rejects(p, {message: tc.wantErr});
- } else {
- assert.equal(await p, tc.want);
- }
- assert.equal(console.warn.callCount, 0);
- assert.equal(console.error.callCount, 0);
+ describe('hooks.callFirst', function () {
+ it('no registered hooks (undefined) -> []', async function () {
+ delete plugins.hooks.testHook;
+ assert.deepEqual(hooks.callFirst(hookName), []);
+ });
+ it('no registered hooks (empty list) -> []', async function () {
+ testHooks.length = 0;
+ assert.deepEqual(hooks.callFirst(hookName), []);
+ });
+ it('passes hook name => {}', async function () {
+ hook.hook_fn = (hn) => { assert.equal(hn, hookName); };
+ hooks.callFirst(hookName);
+ });
+ it('undefined context => {}', async function () {
+ hook.hook_fn = (hn, ctx) => { assert.deepEqual(ctx, {}); };
+ hooks.callFirst(hookName);
+ });
+ it('null context => {}', async function () {
+ hook.hook_fn = (hn, ctx) => { assert.deepEqual(ctx, {}); };
+ hooks.callFirst(hookName, null);
+ });
+ it('context unmodified', async function () {
+ const wantContext = {};
+ hook.hook_fn = (hn, ctx) => { assert.equal(ctx, wantContext); };
+ hooks.callFirst(hookName, wantContext);
+ });
+ it('predicate never satisfied -> calls all in order', async function () {
+ const gotCalls = [];
+ testHooks.length = 0;
+ for (let i = 0; i < 3; i++) {
+ const hook = makeHook();
+ hook.hook_fn = () => { gotCalls.push(i); };
+ testHooks.push(hook);
+ }
+ assert.deepEqual(hooks.callFirst(hookName), []);
+ assert.deepEqual(gotCalls, [0, 1, 2]);
+ });
+ it('stops when predicate is satisfied', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(), makeHook('val1'), makeHook('val2'));
+ assert.deepEqual(hooks.callFirst(hookName), ['val1']);
+ });
+ it('skips values that do not satisfy predicate (undefined)', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(), makeHook('val1'));
+ assert.deepEqual(hooks.callFirst(hookName), ['val1']);
+ });
+ it('skips values that do not satisfy predicate (empty list)', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook([]), makeHook('val1'));
+ assert.deepEqual(hooks.callFirst(hookName), ['val1']);
+ });
+ it('null satisifes the predicate', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(null), makeHook('val1'));
+ assert.deepEqual(hooks.callFirst(hookName), [null]);
+ });
+ it('non-empty arrays are returned unmodified', async function () {
+ const want = ['val1'];
+ testHooks.length = 0;
+ testHooks.push(makeHook(want), makeHook(['val2']));
+ assert.equal(hooks.callFirst(hookName), want); // Note: *NOT* deepEqual!
+ });
+ it('value can be passed via callback', async function () {
+ const want = {};
+ hook.hook_fn = (hn, ctx, cb) => { cb(want); };
+ const got = hooks.callFirst(hookName);
+ assert.deepEqual(got, [want]);
+ assert.equal(got[0], want); // Note: *NOT* deepEqual!
});
- }
});
-
- // Test various ways a hook might attempt to settle twice. (Examples: call the callback a second
- // time, or call the callback and then return a value.)
- describe('bad hook function behavior (double settle)', function () {
- beforeEach(async function () {
- sinon.stub(console, 'error');
- });
-
- // Each item in this array codifies a way to settle an asynchronous hook function. Each of the
- // test cases below combines two of these behaviors in a single hook function and confirms
- // that callHookFnAsync both (1) resolves to the result of the first settle attempt, and (2)
- // detects the second settle attempt.
- //
- // The 'when' property specifies the relative time that two behaviors will cause the hook
- // function to settle:
- // * If behavior1.when <= behavior2.when and behavior1 is called before behavior2 then
- // behavior1 will settle the hook function before behavior2.
- // * Otherwise, behavior2 will settle the hook function before behavior1.
- const behaviors = [
- {
- name: 'throw',
- fn: (cb, err, val) => { throw err; },
- rejects: true,
- when: 0,
- },
- {
- name: 'return value',
- fn: (cb, err, val) => val,
- // This behavior has a later relative settle time vs. the 'throw' behavior because 'throw'
- // immediately settles the hook function, whereas the 'return value' case is settled by a
- // .then() function attached to a Promise. EcmaScript guarantees that a .then() function
- // attached to a Promise is enqueued on the event loop (not executed immediately) when the
- // Promise settles.
- when: 1,
- },
- {
- name: 'immediately call cb(value)',
- fn: (cb, err, val) => cb(val),
- // This behavior has the same relative time as the 'return value' case because it too is
- // settled by a .then() function attached to a Promise.
- when: 1,
- },
- {
- name: 'return resolvedPromise',
- fn: (cb, err, val) => Promise.resolve(val),
- // This behavior has the same relative time as the 'return value' case because the return
- // value is wrapped in a Promise via Promise.resolve(). The EcmaScript standard guarantees
- // that Promise.resolve(Promise.resolve(value)) is equivalent to Promise.resolve(value),
- // so returning an already resolved Promise vs. returning a non-Promise value are
- // equivalent.
- when: 1,
- },
- {
- name: 'immediately call cb(resolvedPromise)',
- fn: (cb, err, val) => cb(Promise.resolve(val)),
- when: 1,
- },
- {
- name: 'return rejectedPromise',
- fn: (cb, err, val) => Promise.reject(err),
- rejects: true,
- when: 1,
- },
- {
- name: 'immediately call cb(rejectedPromise)',
- fn: (cb, err, val) => cb(Promise.reject(err)),
- rejects: true,
- when: 1,
- },
- {
- name: 'return unresolvedPromise',
- fn: (cb, err, val) => new Promise((resolve) => process.nextTick(resolve, val)),
- when: 2,
- },
- {
- name: 'immediately call cb(unresolvedPromise)',
- fn: (cb, err, val) => cb(new Promise((resolve) => process.nextTick(resolve, val))),
- when: 2,
- },
- {
- name: 'return unrejectedPromise',
- fn: (cb, err, val) => new Promise((resolve, reject) => process.nextTick(reject, err)),
- rejects: true,
- when: 2,
- },
- {
- name: 'immediately call cb(unrejectedPromise)',
- fn: (cb, err, val) => cb(new Promise((resolve, reject) => process.nextTick(reject, err))),
- rejects: true,
- when: 2,
- },
- {
- name: 'defer call to cb(value)',
- fn: (cb, err, val) => { process.nextTick(cb, val); },
- when: 2,
- },
- {
- name: 'defer call to cb(resolvedPromise)',
- fn: (cb, err, val) => { process.nextTick(cb, Promise.resolve(val)); },
- when: 2,
- },
- {
- name: 'defer call to cb(rejectedPromise)',
- fn: (cb, err, val) => { process.nextTick(cb, Promise.reject(err)); },
- rejects: true,
- when: 2,
- },
- {
- name: 'defer call to cb(unresolvedPromise)',
- fn: (cb, err, val) => {
- process.nextTick(() => {
- cb(new Promise((resolve) => process.nextTick(resolve, val)));
+ describe('callHookFnAsync', function () {
+ const callHookFnAsync = hooks.exportedForTestingOnly.callHookFnAsync; // Convenience shorthand.
+ describe('basic behavior', function () {
+ it('passes hook name', async function () {
+ hook.hook_fn = (hn) => { assert.equal(hn, hookName); };
+ await callHookFnAsync(hook);
});
- },
- when: 3,
- },
- {
- name: 'defer call cb(unrejectedPromise)',
- fn: (cb, err, val) => {
- process.nextTick(() => {
- cb(new Promise((resolve, reject) => process.nextTick(reject, err)));
+ it('passes context', async function () {
+ for (const val of ['value', null, undefined]) {
+ hook.hook_fn = (hn, ctx) => { assert.equal(ctx, val); };
+ await callHookFnAsync(hook, val);
+ }
});
- },
- rejects: true,
- when: 3,
- },
- ];
-
- for (const step1 of behaviors) {
- // There can't be a second step if the first step is to return or throw.
- if (step1.name.startsWith('return ') || step1.name === 'throw') continue;
- for (const step2 of behaviors) {
- it(`${step1.name} then ${step2.name} (diff. outcomes) -> log+throw`, async function () {
- hook.hook_fn = (hn, ctx, cb) => {
- step1.fn(cb, new Error(ctx.ret1), ctx.ret1);
- return step2.fn(cb, new Error(ctx.ret2), ctx.ret2);
- };
-
- // Temporarily remove unhandled Promise rejection listeners so that the unhandled
- // rejections we expect to see don't trigger a test failure (or terminate node).
- const event = 'unhandledRejection';
- const listenersBackup = process.rawListeners(event);
- process.removeAllListeners(event);
-
- let tempListener;
- let asyncErr;
- try {
- const seenErrPromise = new Promise((resolve) => {
- tempListener = (err) => {
- assert.equal(asyncErr, undefined);
- asyncErr = err;
- resolve();
- };
- });
- process.on(event, tempListener);
- const step1Wins = step1.when <= step2.when;
- const winningStep = step1Wins ? step1 : step2;
- const winningVal = step1Wins ? 'val1' : 'val2';
- const p = callHookFnAsync(hook, {ret1: 'val1', ret2: 'val2'});
- if (winningStep.rejects) {
- await assert.rejects(p, {message: winningVal});
- } else {
- assert.equal(await p, winningVal);
- }
- await seenErrPromise;
- } finally {
- // Restore the original listeners.
- process.off(event, tempListener);
- for (const listener of listenersBackup) {
- process.on(event, listener);
- }
+ it('returns the value provided to the callback', async function () {
+ for (const val of ['value', null, undefined]) {
+ hook.hook_fn = (hn, ctx, cb) => { cb(ctx); };
+ assert.equal(await callHookFnAsync(hook, val), val);
+ assert.equal(await callHookFnAsync(hook, Promise.resolve(val)), val);
+ }
+ });
+ it('returns the value returned by the hook function', async function () {
+ for (const val of ['value', null, undefined]) {
+ // Must not have the cb parameter otherwise returning undefined will never resolve.
+ hook.hook_fn = (hn, ctx) => ctx;
+ assert.equal(await callHookFnAsync(hook, val), val);
+ assert.equal(await callHookFnAsync(hook, Promise.resolve(val)), val);
+ }
+ });
+ it('rejects if it throws an exception', async function () {
+ hook.hook_fn = () => { throw new Error('test exception'); };
+ await assert.rejects(callHookFnAsync(hook), { message: 'test exception' });
+ });
+ it('rejects if rejected Promise passed to callback', async function () {
+ hook.hook_fn = (hn, ctx, cb) => cb(Promise.reject(new Error('test exception')));
+ await assert.rejects(callHookFnAsync(hook), { message: 'test exception' });
+ });
+ it('rejects if rejected Promise returned', async function () {
+ hook.hook_fn = (hn, ctx, cb) => Promise.reject(new Error('test exception'));
+ await assert.rejects(callHookFnAsync(hook), { message: 'test exception' });
+ });
+ it('callback returns undefined', async function () {
+ hook.hook_fn = (hn, ctx, cb) => { assert.equal(cb('foo'), undefined); };
+ await callHookFnAsync(hook);
+ });
+ it('checks for deprecation', async function () {
+ sinon.stub(console, 'warn');
+ hooks.deprecationNotices[hookName] = 'test deprecation';
+ await callHookFnAsync(hook);
+ assert.equal(hooks.exportedForTestingOnly.deprecationWarned[hookFnName], true);
+ assert.equal(console.warn.callCount, 1);
+ assert.match(console.warn.getCall(0).args[0], /test deprecation/);
+ });
+ });
+ describe('supported hook function styles', function () {
+ const supportedHookFunctions = supportedSyncHookFunctions.concat([
+ {
+ name: 'legacy async cb',
+ fn: (hn, ctx, cb) => { process.nextTick(cb, 'val'); },
+ want: 'val',
+ },
+ // Already resolved Promises:
+ {
+ name: 'return resolved Promise, with callback parameter',
+ fn: (hn, ctx, cb) => Promise.resolve('val'),
+ want: 'val',
+ },
+ {
+ name: 'return resolved Promise, without callback parameter',
+ fn: (hn, ctx) => Promise.resolve('val'),
+ want: 'val',
+ },
+ {
+ name: 'pass resolved Promise to callback',
+ fn: (hn, ctx, cb) => { cb(Promise.resolve('val')); },
+ want: 'val',
+ },
+ // Not yet resolved Promises:
+ {
+ name: 'return unresolved Promise, with callback parameter',
+ fn: (hn, ctx, cb) => new Promise((resolve) => process.nextTick(resolve, 'val')),
+ want: 'val',
+ },
+ {
+ name: 'return unresolved Promise, without callback parameter',
+ fn: (hn, ctx) => new Promise((resolve) => process.nextTick(resolve, 'val')),
+ want: 'val',
+ },
+ {
+ name: 'pass unresolved Promise to callback',
+ fn: (hn, ctx, cb) => { cb(new Promise((resolve) => process.nextTick(resolve, 'val'))); },
+ want: 'val',
+ },
+ // Already rejected Promises:
+ {
+ name: 'return rejected Promise, with callback parameter',
+ fn: (hn, ctx, cb) => Promise.reject(new Error('test rejection')),
+ wantErr: 'test rejection',
+ },
+ {
+ name: 'return rejected Promise, without callback parameter',
+ fn: (hn, ctx) => Promise.reject(new Error('test rejection')),
+ wantErr: 'test rejection',
+ },
+ {
+ name: 'pass rejected Promise to callback',
+ fn: (hn, ctx, cb) => { cb(Promise.reject(new Error('test rejection'))); },
+ wantErr: 'test rejection',
+ },
+ // Not yet rejected Promises:
+ {
+ name: 'return unrejected Promise, with callback parameter',
+ fn: (hn, ctx, cb) => new Promise((resolve, reject) => {
+ process.nextTick(reject, new Error('test rejection'));
+ }),
+ wantErr: 'test rejection',
+ },
+ {
+ name: 'return unrejected Promise, without callback parameter',
+ fn: (hn, ctx) => new Promise((resolve, reject) => {
+ process.nextTick(reject, new Error('test rejection'));
+ }),
+ wantErr: 'test rejection',
+ },
+ {
+ name: 'pass unrejected Promise to callback',
+ fn: (hn, ctx, cb) => {
+ cb(new Promise((resolve, reject) => {
+ process.nextTick(reject, new Error('test rejection'));
+ }));
+ },
+ wantErr: 'test rejection',
+ },
+ ]);
+ for (const tc of supportedSyncHookFunctions.concat(supportedHookFunctions)) {
+ it(tc.name, async function () {
+ sinon.stub(console, 'warn');
+ sinon.stub(console, 'error');
+ hook.hook_fn = tc.fn;
+ const p = callHookFnAsync(hook);
+ if (tc.wantErr) {
+ await assert.rejects(p, { message: tc.wantErr });
+ }
+ else {
+ assert.equal(await p, tc.want);
+ }
+ assert.equal(console.warn.callCount, 0);
+ assert.equal(console.error.callCount, 0);
+ });
}
- assert.equal(console.error.callCount, 1,
- `Got errors:\n${
- console.error.getCalls().map((call) => call.args[0]).join('\n')}`);
- assert.match(console.error.getCall(0).args[0], /DOUBLE SETTLE BUG/);
- assert(asyncErr instanceof Error);
- assert.match(asyncErr.message, /DOUBLE SETTLE BUG/);
- });
-
- // This next test is the same as the above test, except the second settle attempt is for
- // the same outcome. The two outcomes can't be the same if one step rejects and the other
- // doesn't, so skip those cases.
- if (step1.rejects !== step2.rejects) continue;
-
- it(`${step1.name} then ${step2.name} (same outcome) -> only log`, async function () {
- const err = new Error('val');
- hook.hook_fn = (hn, ctx, cb) => {
- step1.fn(cb, err, 'val');
- return step2.fn(cb, err, 'val');
- };
- const winningStep = (step1.when <= step2.when) ? step1 : step2;
- const errorLogged = new Promise((resolve) => console.error.callsFake(resolve));
- const p = callHookFnAsync(hook);
- if (winningStep.rejects) {
- await assert.rejects(p, {message: 'val'});
- } else {
- assert.equal(await p, 'val');
+ });
+ // Test various ways a hook might attempt to settle twice. (Examples: call the callback a second
+ // time, or call the callback and then return a value.)
+ describe('bad hook function behavior (double settle)', function () {
+ beforeEach(async function () {
+ sinon.stub(console, 'error');
+ });
+ // Each item in this array codifies a way to settle an asynchronous hook function. Each of the
+ // test cases below combines two of these behaviors in a single hook function and confirms
+ // that callHookFnAsync both (1) resolves to the result of the first settle attempt, and (2)
+ // detects the second settle attempt.
+ //
+ // The 'when' property specifies the relative time that two behaviors will cause the hook
+ // function to settle:
+ // * If behavior1.when <= behavior2.when and behavior1 is called before behavior2 then
+ // behavior1 will settle the hook function before behavior2.
+ // * Otherwise, behavior2 will settle the hook function before behavior1.
+ const behaviors = [
+ {
+ name: 'throw',
+ fn: (cb, err, val) => { throw err; },
+ rejects: true,
+ when: 0,
+ },
+ {
+ name: 'return value',
+ fn: (cb, err, val) => val,
+ // This behavior has a later relative settle time vs. the 'throw' behavior because 'throw'
+ // immediately settles the hook function, whereas the 'return value' case is settled by a
+ // .then() function attached to a Promise. EcmaScript guarantees that a .then() function
+ // attached to a Promise is enqueued on the event loop (not executed immediately) when the
+ // Promise settles.
+ when: 1,
+ },
+ {
+ name: 'immediately call cb(value)',
+ fn: (cb, err, val) => cb(val),
+ // This behavior has the same relative time as the 'return value' case because it too is
+ // settled by a .then() function attached to a Promise.
+ when: 1,
+ },
+ {
+ name: 'return resolvedPromise',
+ fn: (cb, err, val) => Promise.resolve(val),
+ // This behavior has the same relative time as the 'return value' case because the return
+ // value is wrapped in a Promise via Promise.resolve(). The EcmaScript standard guarantees
+ // that Promise.resolve(Promise.resolve(value)) is equivalent to Promise.resolve(value),
+ // so returning an already resolved Promise vs. returning a non-Promise value are
+ // equivalent.
+ when: 1,
+ },
+ {
+ name: 'immediately call cb(resolvedPromise)',
+ fn: (cb, err, val) => cb(Promise.resolve(val)),
+ when: 1,
+ },
+ {
+ name: 'return rejectedPromise',
+ fn: (cb, err, val) => Promise.reject(err),
+ rejects: true,
+ when: 1,
+ },
+ {
+ name: 'immediately call cb(rejectedPromise)',
+ fn: (cb, err, val) => cb(Promise.reject(err)),
+ rejects: true,
+ when: 1,
+ },
+ {
+ name: 'return unresolvedPromise',
+ fn: (cb, err, val) => new Promise((resolve) => process.nextTick(resolve, val)),
+ when: 2,
+ },
+ {
+ name: 'immediately call cb(unresolvedPromise)',
+ fn: (cb, err, val) => cb(new Promise((resolve) => process.nextTick(resolve, val))),
+ when: 2,
+ },
+ {
+ name: 'return unrejectedPromise',
+ fn: (cb, err, val) => new Promise((resolve, reject) => process.nextTick(reject, err)),
+ rejects: true,
+ when: 2,
+ },
+ {
+ name: 'immediately call cb(unrejectedPromise)',
+ fn: (cb, err, val) => cb(new Promise((resolve, reject) => process.nextTick(reject, err))),
+ rejects: true,
+ when: 2,
+ },
+ {
+ name: 'defer call to cb(value)',
+ fn: (cb, err, val) => { process.nextTick(cb, val); },
+ when: 2,
+ },
+ {
+ name: 'defer call to cb(resolvedPromise)',
+ fn: (cb, err, val) => { process.nextTick(cb, Promise.resolve(val)); },
+ when: 2,
+ },
+ {
+ name: 'defer call to cb(rejectedPromise)',
+ fn: (cb, err, val) => { process.nextTick(cb, Promise.reject(err)); },
+ rejects: true,
+ when: 2,
+ },
+ {
+ name: 'defer call to cb(unresolvedPromise)',
+ fn: (cb, err, val) => {
+ process.nextTick(() => {
+ cb(new Promise((resolve) => process.nextTick(resolve, val)));
+ });
+ },
+ when: 3,
+ },
+ {
+ name: 'defer call cb(unrejectedPromise)',
+ fn: (cb, err, val) => {
+ process.nextTick(() => {
+ cb(new Promise((resolve, reject) => process.nextTick(reject, err)));
+ });
+ },
+ rejects: true,
+ when: 3,
+ },
+ ];
+ for (const step1 of behaviors) {
+ // There can't be a second step if the first step is to return or throw.
+ if (step1.name.startsWith('return ') || step1.name === 'throw')
+ continue;
+ for (const step2 of behaviors) {
+ it(`${step1.name} then ${step2.name} (diff. outcomes) -> log+throw`, async function () {
+ hook.hook_fn = (hn, ctx, cb) => {
+ step1.fn(cb, new Error(ctx.ret1), ctx.ret1);
+ return step2.fn(cb, new Error(ctx.ret2), ctx.ret2);
+ };
+ // Temporarily remove unhandled Promise rejection listeners so that the unhandled
+ // rejections we expect to see don't trigger a test failure (or terminate node).
+ const event = 'unhandledRejection';
+ const listenersBackup = process.rawListeners(event);
+ process.removeAllListeners(event);
+ let tempListener;
+ let asyncErr;
+ try {
+ const seenErrPromise = new Promise((resolve) => {
+ tempListener = (err) => {
+ assert.equal(asyncErr, undefined);
+ asyncErr = err;
+ resolve();
+ };
+ });
+ process.on(event, tempListener);
+ const step1Wins = step1.when <= step2.when;
+ const winningStep = step1Wins ? step1 : step2;
+ const winningVal = step1Wins ? 'val1' : 'val2';
+ const p = callHookFnAsync(hook, { ret1: 'val1', ret2: 'val2' });
+ if (winningStep.rejects) {
+ await assert.rejects(p, { message: winningVal });
+ }
+ else {
+ assert.equal(await p, winningVal);
+ }
+ await seenErrPromise;
+ }
+ finally {
+ // Restore the original listeners.
+ process.off(event, tempListener);
+ for (const listener of listenersBackup) {
+ process.on(event, listener);
+ }
+ }
+ assert.equal(console.error.callCount, 1, `Got errors:\n${console.error.getCalls().map((call) => call.args[0]).join('\n')}`);
+ assert.match(console.error.getCall(0).args[0], /DOUBLE SETTLE BUG/);
+ assert(asyncErr instanceof Error);
+ assert.match(asyncErr.message, /DOUBLE SETTLE BUG/);
+ });
+ // This next test is the same as the above test, except the second settle attempt is for
+ // the same outcome. The two outcomes can't be the same if one step rejects and the other
+ // doesn't, so skip those cases.
+ if (step1.rejects !== step2.rejects)
+ continue;
+ it(`${step1.name} then ${step2.name} (same outcome) -> only log`, async function () {
+ const err = new Error('val');
+ hook.hook_fn = (hn, ctx, cb) => {
+ step1.fn(cb, err, 'val');
+ return step2.fn(cb, err, 'val');
+ };
+ const winningStep = (step1.when <= step2.when) ? step1 : step2;
+ const errorLogged = new Promise((resolve) => console.error.callsFake(resolve));
+ const p = callHookFnAsync(hook);
+ if (winningStep.rejects) {
+ await assert.rejects(p, { message: 'val' });
+ }
+ else {
+ assert.equal(await p, 'val');
+ }
+ await errorLogged;
+ assert.equal(console.error.callCount, 1);
+ assert.match(console.error.getCall(0).args[0], /DOUBLE SETTLE BUG/);
+ });
+ }
}
- await errorLogged;
- assert.equal(console.error.callCount, 1);
- assert.match(console.error.getCall(0).args[0], /DOUBLE SETTLE BUG/);
- });
- }
- }
- });
- });
-
- describe('hooks.aCallAll', function () {
- describe('basic behavior', function () {
- it('calls all asynchronously, returns values in order', async function () {
- testHooks.length = 0; // Delete the boilerplate hook -- this test doesn't use it.
- let nextIndex = 0;
- const hookPromises = [];
- const hookStarted = [];
- const hookFinished = [];
- const makeHook = () => {
- const i = nextIndex++;
- const entry = {};
- hookStarted[i] = false;
- hookFinished[i] = false;
- hookPromises[i] = entry;
- entry.promise = new Promise((resolve) => {
- entry.resolve = () => {
- hookFinished[i] = true;
- resolve(i);
- };
- });
- return {hook_fn: () => {
- hookStarted[i] = true;
- return entry.promise;
- }};
- };
- testHooks.push(makeHook(), makeHook());
- const p = hooks.aCallAll(hookName);
- assert.deepEqual(hookStarted, [true, true]);
- assert.deepEqual(hookFinished, [false, false]);
- hookPromises[1].resolve();
- await hookPromises[1].promise;
- assert.deepEqual(hookFinished, [false, true]);
- hookPromises[0].resolve();
- assert.deepEqual(await p, [0, 1]);
- });
-
- it('passes hook name', async function () {
- hook.hook_fn = async (hn) => { assert.equal(hn, hookName); };
- await hooks.aCallAll(hookName);
- });
-
- it('undefined context -> {}', async function () {
- hook.hook_fn = async (hn, ctx) => { assert.deepEqual(ctx, {}); };
- await hooks.aCallAll(hookName);
- });
-
- it('null context -> {}', async function () {
- hook.hook_fn = async (hn, ctx) => { assert.deepEqual(ctx, {}); };
- await hooks.aCallAll(hookName, null);
- });
-
- it('context unmodified', async function () {
- const wantContext = {};
- hook.hook_fn = async (hn, ctx) => { assert.equal(ctx, wantContext); };
- await hooks.aCallAll(hookName, wantContext);
- });
+ });
});
-
- describe('aCallAll callback', function () {
- it('exception in callback rejects', async function () {
- const p = hooks.aCallAll(hookName, {}, () => { throw new Error('test exception'); });
- await assert.rejects(p, {message: 'test exception'});
- });
-
- it('propagates error on exception', async function () {
- hook.hook_fn = () => { throw new Error('test exception'); };
- await hooks.aCallAll(hookName, {}, (err) => {
- assert(err instanceof Error);
- assert.equal(err.message, 'test exception');
+ describe('hooks.aCallAll', function () {
+ describe('basic behavior', function () {
+ it('calls all asynchronously, returns values in order', async function () {
+ testHooks.length = 0; // Delete the boilerplate hook -- this test doesn't use it.
+ let nextIndex = 0;
+ const hookPromises = [];
+ const hookStarted = [];
+ const hookFinished = [];
+ const makeHook = () => {
+ const i = nextIndex++;
+ const entry = {};
+ hookStarted[i] = false;
+ hookFinished[i] = false;
+ hookPromises[i] = entry;
+ entry.promise = new Promise((resolve) => {
+ entry.resolve = () => {
+ hookFinished[i] = true;
+ resolve(i);
+ };
+ });
+ return { hook_fn: () => {
+ hookStarted[i] = true;
+ return entry.promise;
+ } };
+ };
+ testHooks.push(makeHook(), makeHook());
+ const p = hooks.aCallAll(hookName);
+ assert.deepEqual(hookStarted, [true, true]);
+ assert.deepEqual(hookFinished, [false, false]);
+ hookPromises[1].resolve();
+ await hookPromises[1].promise;
+ assert.deepEqual(hookFinished, [false, true]);
+ hookPromises[0].resolve();
+ assert.deepEqual(await p, [0, 1]);
+ });
+ it('passes hook name', async function () {
+ hook.hook_fn = async (hn) => { assert.equal(hn, hookName); };
+ await hooks.aCallAll(hookName);
+ });
+ it('undefined context -> {}', async function () {
+ hook.hook_fn = async (hn, ctx) => { assert.deepEqual(ctx, {}); };
+ await hooks.aCallAll(hookName);
+ });
+ it('null context -> {}', async function () {
+ hook.hook_fn = async (hn, ctx) => { assert.deepEqual(ctx, {}); };
+ await hooks.aCallAll(hookName, null);
+ });
+ it('context unmodified', async function () {
+ const wantContext = {};
+ hook.hook_fn = async (hn, ctx) => { assert.equal(ctx, wantContext); };
+ await hooks.aCallAll(hookName, wantContext);
+ });
});
- });
-
- it('propagages null error on success', async function () {
- await hooks.aCallAll(hookName, {}, (err) => {
- assert(err == null, `got non-null error: ${err}`);
+ describe('aCallAll callback', function () {
+ it('exception in callback rejects', async function () {
+ const p = hooks.aCallAll(hookName, {}, () => { throw new Error('test exception'); });
+ await assert.rejects(p, { message: 'test exception' });
+ });
+ it('propagates error on exception', async function () {
+ hook.hook_fn = () => { throw new Error('test exception'); };
+ await hooks.aCallAll(hookName, {}, (err) => {
+ assert(err instanceof Error);
+ assert.equal(err.message, 'test exception');
+ });
+ });
+ it('propagages null error on success', async function () {
+ await hooks.aCallAll(hookName, {}, (err) => {
+ assert(err == null, `got non-null error: ${err}`);
+ });
+ });
+ it('propagages results on success', async function () {
+ hook.hook_fn = () => 'val';
+ await hooks.aCallAll(hookName, {}, (err, results) => {
+ assert.deepEqual(results, ['val']);
+ });
+ });
+ it('returns callback return value', async function () {
+ assert.equal(await hooks.aCallAll(hookName, {}, () => 'val'), 'val');
+ });
});
- });
-
- it('propagages results on success', async function () {
- hook.hook_fn = () => 'val';
- await hooks.aCallAll(hookName, {}, (err, results) => {
- assert.deepEqual(results, ['val']);
+ describe('result processing', function () {
+ it('no registered hooks (undefined) -> []', async function () {
+ delete plugins.hooks[hookName];
+ assert.deepEqual(await hooks.aCallAll(hookName), []);
+ });
+ it('no registered hooks (empty list) -> []', async function () {
+ testHooks.length = 0;
+ assert.deepEqual(await hooks.aCallAll(hookName), []);
+ });
+ it('flattens one level', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(1), makeHook([2]), makeHook([[3]]));
+ assert.deepEqual(await hooks.aCallAll(hookName), [1, 2, [3]]);
+ });
+ it('filters out undefined', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(), makeHook([2]), makeHook([[3]]), makeHook(Promise.resolve()));
+ assert.deepEqual(await hooks.aCallAll(hookName), [2, [3]]);
+ });
+ it('preserves null', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(null), makeHook([2]), makeHook(Promise.resolve(null)));
+ assert.deepEqual(await hooks.aCallAll(hookName), [null, 2, null]);
+ });
+ it('all undefined -> []', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(), makeHook(Promise.resolve()));
+ assert.deepEqual(await hooks.aCallAll(hookName), []);
+ });
});
- });
-
- it('returns callback return value', async function () {
- assert.equal(await hooks.aCallAll(hookName, {}, () => 'val'), 'val');
- });
- });
-
- describe('result processing', function () {
- it('no registered hooks (undefined) -> []', async function () {
- delete plugins.hooks[hookName];
- assert.deepEqual(await hooks.aCallAll(hookName), []);
- });
-
- it('no registered hooks (empty list) -> []', async function () {
- testHooks.length = 0;
- assert.deepEqual(await hooks.aCallAll(hookName), []);
- });
-
- it('flattens one level', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(1), makeHook([2]), makeHook([[3]]));
- assert.deepEqual(await hooks.aCallAll(hookName), [1, 2, [3]]);
- });
-
- it('filters out undefined', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(), makeHook([2]), makeHook([[3]]), makeHook(Promise.resolve()));
- assert.deepEqual(await hooks.aCallAll(hookName), [2, [3]]);
- });
-
- it('preserves null', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(null), makeHook([2]), makeHook(Promise.resolve(null)));
- assert.deepEqual(await hooks.aCallAll(hookName), [null, 2, null]);
- });
-
- it('all undefined -> []', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(), makeHook(Promise.resolve()));
- assert.deepEqual(await hooks.aCallAll(hookName), []);
- });
});
- });
-
- describe('hooks.callAllSerial', function () {
- describe('basic behavior', function () {
- it('calls all asynchronously, serially, in order', async function () {
- const gotCalls = [];
- testHooks.length = 0;
- for (let i = 0; i < 3; i++) {
- const hook = makeHook();
- hook.hook_fn = async () => {
- gotCalls.push(i);
- // Check gotCalls asynchronously to ensure that the next hook function does not start
- // executing before this hook function has resolved.
- return await new Promise((resolve) => {
- setImmediate(() => {
- assert.deepEqual(gotCalls, [...Array(i + 1).keys()]);
- resolve(i);
- });
+ describe('hooks.callAllSerial', function () {
+ describe('basic behavior', function () {
+ it('calls all asynchronously, serially, in order', async function () {
+ const gotCalls = [];
+ testHooks.length = 0;
+ for (let i = 0; i < 3; i++) {
+ const hook = makeHook();
+ hook.hook_fn = async () => {
+ gotCalls.push(i);
+ // Check gotCalls asynchronously to ensure that the next hook function does not start
+ // executing before this hook function has resolved.
+ return await new Promise((resolve) => {
+ setImmediate(() => {
+ assert.deepEqual(gotCalls, [...Array(i + 1).keys()]);
+ resolve(i);
+ });
+ });
+ };
+ testHooks.push(hook);
+ }
+ assert.deepEqual(await hooks.callAllSerial(hookName), [0, 1, 2]);
+ assert.deepEqual(gotCalls, [0, 1, 2]);
});
- };
- testHooks.push(hook);
- }
- assert.deepEqual(await hooks.callAllSerial(hookName), [0, 1, 2]);
- assert.deepEqual(gotCalls, [0, 1, 2]);
- });
-
- it('passes hook name', async function () {
- hook.hook_fn = async (hn) => { assert.equal(hn, hookName); };
- await hooks.callAllSerial(hookName);
- });
-
- it('undefined context -> {}', async function () {
- hook.hook_fn = async (hn, ctx) => { assert.deepEqual(ctx, {}); };
- await hooks.callAllSerial(hookName);
- });
-
- it('null context -> {}', async function () {
- hook.hook_fn = async (hn, ctx) => { assert.deepEqual(ctx, {}); };
- await hooks.callAllSerial(hookName, null);
- });
-
- it('context unmodified', async function () {
- const wantContext = {};
- hook.hook_fn = async (hn, ctx) => { assert.equal(ctx, wantContext); };
- await hooks.callAllSerial(hookName, wantContext);
- });
- });
-
- describe('result processing', function () {
- it('no registered hooks (undefined) -> []', async function () {
- delete plugins.hooks[hookName];
- assert.deepEqual(await hooks.callAllSerial(hookName), []);
- });
-
- it('no registered hooks (empty list) -> []', async function () {
- testHooks.length = 0;
- assert.deepEqual(await hooks.callAllSerial(hookName), []);
- });
-
- it('flattens one level', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(1), makeHook([2]), makeHook([[3]]));
- assert.deepEqual(await hooks.callAllSerial(hookName), [1, 2, [3]]);
- });
-
- it('filters out undefined', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(), makeHook([2]), makeHook([[3]]), makeHook(Promise.resolve()));
- assert.deepEqual(await hooks.callAllSerial(hookName), [2, [3]]);
- });
-
- it('preserves null', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(null), makeHook([2]), makeHook(Promise.resolve(null)));
- assert.deepEqual(await hooks.callAllSerial(hookName), [null, 2, null]);
- });
-
- it('all undefined -> []', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(), makeHook(Promise.resolve()));
- assert.deepEqual(await hooks.callAllSerial(hookName), []);
- });
- });
- });
-
- describe('hooks.aCallFirst', function () {
- it('no registered hooks (undefined) -> []', async function () {
- delete plugins.hooks.testHook;
- assert.deepEqual(await hooks.aCallFirst(hookName), []);
- });
-
- it('no registered hooks (empty list) -> []', async function () {
- testHooks.length = 0;
- assert.deepEqual(await hooks.aCallFirst(hookName), []);
- });
-
- it('passes hook name => {}', async function () {
- hook.hook_fn = (hn) => { assert.equal(hn, hookName); };
- await hooks.aCallFirst(hookName);
- });
-
- it('undefined context => {}', async function () {
- hook.hook_fn = (hn, ctx) => { assert.deepEqual(ctx, {}); };
- await hooks.aCallFirst(hookName);
- });
-
- it('null context => {}', async function () {
- hook.hook_fn = (hn, ctx) => { assert.deepEqual(ctx, {}); };
- await hooks.aCallFirst(hookName, null);
- });
-
- it('context unmodified', async function () {
- const wantContext = {};
- hook.hook_fn = (hn, ctx) => { assert.equal(ctx, wantContext); };
- await hooks.aCallFirst(hookName, wantContext);
- });
-
- it('default predicate: predicate never satisfied -> calls all in order', async function () {
- const gotCalls = [];
- testHooks.length = 0;
- for (let i = 0; i < 3; i++) {
- const hook = makeHook();
- hook.hook_fn = () => { gotCalls.push(i); };
- testHooks.push(hook);
- }
- assert.deepEqual(await hooks.aCallFirst(hookName), []);
- assert.deepEqual(gotCalls, [0, 1, 2]);
- });
-
- it('calls hook functions serially', async function () {
- const gotCalls = [];
- testHooks.length = 0;
- for (let i = 0; i < 3; i++) {
- const hook = makeHook();
- hook.hook_fn = async () => {
- gotCalls.push(i);
- // Check gotCalls asynchronously to ensure that the next hook function does not start
- // executing before this hook function has resolved.
- return await new Promise((resolve) => {
- setImmediate(() => {
- assert.deepEqual(gotCalls, [...Array(i + 1).keys()]);
- resolve();
+ it('passes hook name', async function () {
+ hook.hook_fn = async (hn) => { assert.equal(hn, hookName); };
+ await hooks.callAllSerial(hookName);
});
- });
- };
- testHooks.push(hook);
- }
- assert.deepEqual(await hooks.aCallFirst(hookName), []);
- assert.deepEqual(gotCalls, [0, 1, 2]);
- });
-
- it('default predicate: stops when satisfied', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(), makeHook('val1'), makeHook('val2'));
- assert.deepEqual(await hooks.aCallFirst(hookName), ['val1']);
- });
-
- it('default predicate: skips values that do not satisfy (undefined)', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(), makeHook('val1'));
- assert.deepEqual(await hooks.aCallFirst(hookName), ['val1']);
- });
-
- it('default predicate: skips values that do not satisfy (empty list)', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook([]), makeHook('val1'));
- assert.deepEqual(await hooks.aCallFirst(hookName), ['val1']);
- });
-
- it('default predicate: null satisifes', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(null), makeHook('val1'));
- assert.deepEqual(await hooks.aCallFirst(hookName), [null]);
- });
-
- it('custom predicate: called for each hook function', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(0), makeHook(1), makeHook(2));
- let got = 0;
- await hooks.aCallFirst(hookName, null, null, (val) => { ++got; return false; });
- assert.equal(got, 3);
- });
-
- it('custom predicate: boolean false/true continues/stops iteration', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(1), makeHook(2), makeHook(3));
- let nCall = 0;
- const predicate = (val) => {
- assert.deepEqual(val, [++nCall]);
- return nCall === 2;
- };
- assert.deepEqual(await hooks.aCallFirst(hookName, null, null, predicate), [2]);
- assert.equal(nCall, 2);
- });
-
- it('custom predicate: non-boolean falsy/truthy continues/stops iteration', async function () {
- testHooks.length = 0;
- testHooks.push(makeHook(1), makeHook(2), makeHook(3));
- let nCall = 0;
- const predicate = (val) => {
- assert.deepEqual(val, [++nCall]);
- return nCall === 2 ? {} : null;
- };
- assert.deepEqual(await hooks.aCallFirst(hookName, null, null, predicate), [2]);
- assert.equal(nCall, 2);
- });
-
- it('custom predicate: array value passed unmodified to predicate', async function () {
- const want = [0];
- hook.hook_fn = () => want;
- const predicate = (got) => { assert.equal(got, want); }; // Note: *NOT* deepEqual!
- await hooks.aCallFirst(hookName, null, null, predicate);
- });
-
- it('custom predicate: normalized value passed to predicate (undefined)', async function () {
- const predicate = (got) => { assert.deepEqual(got, []); };
- await hooks.aCallFirst(hookName, null, null, predicate);
- });
-
- it('custom predicate: normalized value passed to predicate (null)', async function () {
- hook.hook_fn = () => null;
- const predicate = (got) => { assert.deepEqual(got, [null]); };
- await hooks.aCallFirst(hookName, null, null, predicate);
- });
-
- it('non-empty arrays are returned unmodified', async function () {
- const want = ['val1'];
- testHooks.length = 0;
- testHooks.push(makeHook(want), makeHook(['val2']));
- assert.equal(await hooks.aCallFirst(hookName), want); // Note: *NOT* deepEqual!
+ it('undefined context -> {}', async function () {
+ hook.hook_fn = async (hn, ctx) => { assert.deepEqual(ctx, {}); };
+ await hooks.callAllSerial(hookName);
+ });
+ it('null context -> {}', async function () {
+ hook.hook_fn = async (hn, ctx) => { assert.deepEqual(ctx, {}); };
+ await hooks.callAllSerial(hookName, null);
+ });
+ it('context unmodified', async function () {
+ const wantContext = {};
+ hook.hook_fn = async (hn, ctx) => { assert.equal(ctx, wantContext); };
+ await hooks.callAllSerial(hookName, wantContext);
+ });
+ });
+ describe('result processing', function () {
+ it('no registered hooks (undefined) -> []', async function () {
+ delete plugins.hooks[hookName];
+ assert.deepEqual(await hooks.callAllSerial(hookName), []);
+ });
+ it('no registered hooks (empty list) -> []', async function () {
+ testHooks.length = 0;
+ assert.deepEqual(await hooks.callAllSerial(hookName), []);
+ });
+ it('flattens one level', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(1), makeHook([2]), makeHook([[3]]));
+ assert.deepEqual(await hooks.callAllSerial(hookName), [1, 2, [3]]);
+ });
+ it('filters out undefined', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(), makeHook([2]), makeHook([[3]]), makeHook(Promise.resolve()));
+ assert.deepEqual(await hooks.callAllSerial(hookName), [2, [3]]);
+ });
+ it('preserves null', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(null), makeHook([2]), makeHook(Promise.resolve(null)));
+ assert.deepEqual(await hooks.callAllSerial(hookName), [null, 2, null]);
+ });
+ it('all undefined -> []', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(), makeHook(Promise.resolve()));
+ assert.deepEqual(await hooks.callAllSerial(hookName), []);
+ });
+ });
});
-
- it('value can be passed via callback', async function () {
- const want = {};
- hook.hook_fn = (hn, ctx, cb) => { cb(want); };
- const got = await hooks.aCallFirst(hookName);
- assert.deepEqual(got, [want]);
- assert.equal(got[0], want); // Note: *NOT* deepEqual!
+ describe('hooks.aCallFirst', function () {
+ it('no registered hooks (undefined) -> []', async function () {
+ delete plugins.hooks.testHook;
+ assert.deepEqual(await hooks.aCallFirst(hookName), []);
+ });
+ it('no registered hooks (empty list) -> []', async function () {
+ testHooks.length = 0;
+ assert.deepEqual(await hooks.aCallFirst(hookName), []);
+ });
+ it('passes hook name => {}', async function () {
+ hook.hook_fn = (hn) => { assert.equal(hn, hookName); };
+ await hooks.aCallFirst(hookName);
+ });
+ it('undefined context => {}', async function () {
+ hook.hook_fn = (hn, ctx) => { assert.deepEqual(ctx, {}); };
+ await hooks.aCallFirst(hookName);
+ });
+ it('null context => {}', async function () {
+ hook.hook_fn = (hn, ctx) => { assert.deepEqual(ctx, {}); };
+ await hooks.aCallFirst(hookName, null);
+ });
+ it('context unmodified', async function () {
+ const wantContext = {};
+ hook.hook_fn = (hn, ctx) => { assert.equal(ctx, wantContext); };
+ await hooks.aCallFirst(hookName, wantContext);
+ });
+ it('default predicate: predicate never satisfied -> calls all in order', async function () {
+ const gotCalls = [];
+ testHooks.length = 0;
+ for (let i = 0; i < 3; i++) {
+ const hook = makeHook();
+ hook.hook_fn = () => { gotCalls.push(i); };
+ testHooks.push(hook);
+ }
+ assert.deepEqual(await hooks.aCallFirst(hookName), []);
+ assert.deepEqual(gotCalls, [0, 1, 2]);
+ });
+ it('calls hook functions serially', async function () {
+ const gotCalls = [];
+ testHooks.length = 0;
+ for (let i = 0; i < 3; i++) {
+ const hook = makeHook();
+ hook.hook_fn = async () => {
+ gotCalls.push(i);
+ // Check gotCalls asynchronously to ensure that the next hook function does not start
+ // executing before this hook function has resolved.
+ return await new Promise((resolve) => {
+ setImmediate(() => {
+ assert.deepEqual(gotCalls, [...Array(i + 1).keys()]);
+ resolve();
+ });
+ });
+ };
+ testHooks.push(hook);
+ }
+ assert.deepEqual(await hooks.aCallFirst(hookName), []);
+ assert.deepEqual(gotCalls, [0, 1, 2]);
+ });
+ it('default predicate: stops when satisfied', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(), makeHook('val1'), makeHook('val2'));
+ assert.deepEqual(await hooks.aCallFirst(hookName), ['val1']);
+ });
+ it('default predicate: skips values that do not satisfy (undefined)', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(), makeHook('val1'));
+ assert.deepEqual(await hooks.aCallFirst(hookName), ['val1']);
+ });
+ it('default predicate: skips values that do not satisfy (empty list)', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook([]), makeHook('val1'));
+ assert.deepEqual(await hooks.aCallFirst(hookName), ['val1']);
+ });
+ it('default predicate: null satisifes', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(null), makeHook('val1'));
+ assert.deepEqual(await hooks.aCallFirst(hookName), [null]);
+ });
+ it('custom predicate: called for each hook function', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(0), makeHook(1), makeHook(2));
+ let got = 0;
+ await hooks.aCallFirst(hookName, null, null, (val) => { ++got; return false; });
+ assert.equal(got, 3);
+ });
+ it('custom predicate: boolean false/true continues/stops iteration', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(1), makeHook(2), makeHook(3));
+ let nCall = 0;
+ const predicate = (val) => {
+ assert.deepEqual(val, [++nCall]);
+ return nCall === 2;
+ };
+ assert.deepEqual(await hooks.aCallFirst(hookName, null, null, predicate), [2]);
+ assert.equal(nCall, 2);
+ });
+ it('custom predicate: non-boolean falsy/truthy continues/stops iteration', async function () {
+ testHooks.length = 0;
+ testHooks.push(makeHook(1), makeHook(2), makeHook(3));
+ let nCall = 0;
+ const predicate = (val) => {
+ assert.deepEqual(val, [++nCall]);
+ return nCall === 2 ? {} : null;
+ };
+ assert.deepEqual(await hooks.aCallFirst(hookName, null, null, predicate), [2]);
+ assert.equal(nCall, 2);
+ });
+ it('custom predicate: array value passed unmodified to predicate', async function () {
+ const want = [0];
+ hook.hook_fn = () => want;
+ const predicate = (got) => { assert.equal(got, want); }; // Note: *NOT* deepEqual!
+ await hooks.aCallFirst(hookName, null, null, predicate);
+ });
+ it('custom predicate: normalized value passed to predicate (undefined)', async function () {
+ const predicate = (got) => { assert.deepEqual(got, []); };
+ await hooks.aCallFirst(hookName, null, null, predicate);
+ });
+ it('custom predicate: normalized value passed to predicate (null)', async function () {
+ hook.hook_fn = () => null;
+ const predicate = (got) => { assert.deepEqual(got, [null]); };
+ await hooks.aCallFirst(hookName, null, null, predicate);
+ });
+ it('non-empty arrays are returned unmodified', async function () {
+ const want = ['val1'];
+ testHooks.length = 0;
+ testHooks.push(makeHook(want), makeHook(['val2']));
+ assert.equal(await hooks.aCallFirst(hookName), want); // Note: *NOT* deepEqual!
+ });
+ it('value can be passed via callback', async function () {
+ const want = {};
+ hook.hook_fn = (hn, ctx, cb) => { cb(want); };
+ const got = await hooks.aCallFirst(hookName);
+ assert.deepEqual(got, [want]);
+ assert.equal(got[0], want); // Note: *NOT* deepEqual!
+ });
});
- });
});
diff --git a/src/tests/backend/specs/messages.js b/src/tests/backend/specs/messages.js
index bccb2584dc0..e79a7e3d08b 100644
--- a/src/tests/backend/specs/messages.js
+++ b/src/tests/backend/specs/messages.js
@@ -1,171 +1,159 @@
+import assert$0 from "assert";
+import * as common from "../common.js";
+import * as padManager from "../../../node/db/PadManager.js";
+import * as plugins from "../../../static/js/pluginfw/plugin_defs.js";
+import * as readOnlyManager from "../../../node/db/ReadOnlyManager.js";
'use strict';
-
-const assert = require('assert').strict;
-const common = require('../common');
-const padManager = require('../../../node/db/PadManager');
-const plugins = require('../../../static/js/pluginfw/plugin_defs');
-const readOnlyManager = require('../../../node/db/ReadOnlyManager');
-
+const assert = assert$0.strict;
describe(__filename, function () {
- let agent;
- let pad;
- let padId;
- let roPadId;
- let rev;
- let socket;
- let roSocket;
- const backups = {};
-
- before(async function () {
- agent = await common.init();
- });
-
- beforeEach(async function () {
- backups.hooks = {handleMessageSecurity: plugins.hooks.handleMessageSecurity};
- plugins.hooks.handleMessageSecurity = [];
- padId = common.randomString();
- assert(!await padManager.doesPadExist(padId));
- pad = await padManager.getPad(padId, 'dummy text\n');
- await pad.setText('\n'); // Make sure the pad is created.
- assert.equal(pad.text(), '\n');
- let res = await agent.get(`/p/${padId}`).expect(200);
- socket = await common.connect(res);
- const {type, data: clientVars} = await common.handshake(socket, padId);
- assert.equal(type, 'CLIENT_VARS');
- rev = clientVars.collab_client_vars.rev;
-
- roPadId = await readOnlyManager.getReadOnlyId(padId);
- res = await agent.get(`/p/${roPadId}`).expect(200);
- roSocket = await common.connect(res);
- await common.handshake(roSocket, roPadId);
- });
-
- afterEach(async function () {
- Object.assign(plugins.hooks, backups.hooks);
- if (socket != null) socket.close();
- socket = null;
- if (roSocket != null) roSocket.close();
- roSocket = null;
- if (pad != null) await pad.remove();
- pad = null;
- });
-
- describe('CHANGESET_REQ', function () {
- it('users are unable to read changesets from other pads', async function () {
- const otherPadId = `${padId}other`;
- assert(!await padManager.doesPadExist(otherPadId));
- const otherPad = await padManager.getPad(otherPadId, 'other text\n');
- try {
- await otherPad.setText('other text\n');
- const resP = common.waitForSocketEvent(roSocket, 'message');
- await common.sendMessage(roSocket, {
- component: 'pad',
- padId: otherPadId, // The server should ignore this.
- type: 'CHANGESET_REQ',
- data: {
- granularity: 1,
- start: 0,
- requestID: 'requestId',
- },
- });
- const res = await resP;
- assert.equal(res.type, 'CHANGESET_REQ');
- assert.equal(res.data.requestID, 'requestId');
- // Should match padId's text, not otherPadId's text.
- assert.match(res.data.forwardsChangesets[0], /^[^$]*\$dummy text\n/);
- } finally {
- await otherPad.remove();
- }
- });
- });
-
- describe('USER_CHANGES', function () {
- const sendUserChanges =
- async (socket, cs) => await common.sendUserChanges(socket, {baseRev: rev, changeset: cs});
- const assertAccepted = async (socket, wantRev) => {
- await common.waitForAcceptCommit(socket, wantRev);
- rev = wantRev;
- };
- const assertRejected = async (socket) => {
- const msg = await common.waitForSocketEvent(socket, 'message');
- assert.deepEqual(msg, {disconnect: 'badChangeset'});
- };
-
- it('changes are applied', async function () {
- await Promise.all([
- assertAccepted(socket, rev + 1),
- sendUserChanges(socket, 'Z:1>5+5$hello'),
- ]);
- assert.equal(pad.text(), 'hello\n');
- });
-
- it('bad changeset is rejected', async function () {
- await Promise.all([
- assertRejected(socket),
- sendUserChanges(socket, 'this is not a valid changeset'),
- ]);
+ let agent;
+ let pad;
+ let padId;
+ let roPadId;
+ let rev;
+ let socket;
+ let roSocket;
+ const backups = {};
+ before(async function () {
+ agent = await common.init();
});
-
- it('retransmission is accepted, has no effect', async function () {
- const cs = 'Z:1>5+5$hello';
- await Promise.all([
- assertAccepted(socket, rev + 1),
- sendUserChanges(socket, cs),
- ]);
- --rev;
- await Promise.all([
- assertAccepted(socket, rev + 1),
- sendUserChanges(socket, cs),
- ]);
- assert.equal(pad.text(), 'hello\n');
+ beforeEach(async function () {
+ backups.hooks = { handleMessageSecurity: plugins.hooks.handleMessageSecurity };
+ plugins.hooks.handleMessageSecurity = [];
+ padId = common.randomString();
+ assert(!await padManager.doesPadExist(padId));
+ pad = await padManager.getPad(padId, 'dummy text\n');
+ await pad.setText('\n'); // Make sure the pad is created.
+ assert.equal(pad.text(), '\n');
+ let res = await agent.get(`/p/${padId}`).expect(200);
+ socket = await common.connect(res);
+ const { type, data: clientVars } = await common.handshake(socket, padId);
+ assert.equal(type, 'CLIENT_VARS');
+ rev = clientVars.collab_client_vars.rev;
+ roPadId = await readOnlyManager.getReadOnlyId(padId);
+ res = await agent.get(`/p/${roPadId}`).expect(200);
+ roSocket = await common.connect(res);
+ await common.handshake(roSocket, roPadId);
});
-
- it('identity changeset is accepted, has no effect', async function () {
- await Promise.all([
- assertAccepted(socket, rev + 1),
- sendUserChanges(socket, 'Z:1>5+5$hello'),
- ]);
- await Promise.all([
- assertAccepted(socket, rev),
- sendUserChanges(socket, 'Z:6>0$'),
- ]);
- assert.equal(pad.text(), 'hello\n');
+ afterEach(async function () {
+ Object.assign(plugins.hooks, backups.hooks);
+ if (socket != null)
+ socket.close();
+ socket = null;
+ if (roSocket != null)
+ roSocket.close();
+ roSocket = null;
+ if (pad != null)
+ await pad.remove();
+ pad = null;
});
-
- it('non-identity changeset with no net change is accepted, has no effect', async function () {
- await Promise.all([
- assertAccepted(socket, rev + 1),
- sendUserChanges(socket, 'Z:1>5+5$hello'),
- ]);
- await Promise.all([
- assertAccepted(socket, rev),
- sendUserChanges(socket, 'Z:6>0-5+5$hello'),
- ]);
- assert.equal(pad.text(), 'hello\n');
+ describe('CHANGESET_REQ', function () {
+ it('users are unable to read changesets from other pads', async function () {
+ const otherPadId = `${padId}other`;
+ assert(!await padManager.doesPadExist(otherPadId));
+ const otherPad = await padManager.getPad(otherPadId, 'other text\n');
+ try {
+ await otherPad.setText('other text\n');
+ const resP = common.waitForSocketEvent(roSocket, 'message');
+ await common.sendMessage(roSocket, {
+ component: 'pad',
+ padId: otherPadId,
+ type: 'CHANGESET_REQ',
+ data: {
+ granularity: 1,
+ start: 0,
+ requestID: 'requestId',
+ },
+ });
+ const res = await resP;
+ assert.equal(res.type, 'CHANGESET_REQ');
+ assert.equal(res.data.requestID, 'requestId');
+ // Should match padId's text, not otherPadId's text.
+ assert.match(res.data.forwardsChangesets[0], /^[^$]*\$dummy text\n/);
+ }
+ finally {
+ await otherPad.remove();
+ }
+ });
});
-
- it('handleMessageSecurity can grant one-time write access', async function () {
- const cs = 'Z:1>5+5$hello';
- const errRegEx = /write attempt on read-only pad/;
- // First try to send a change and verify that it was dropped.
- await assert.rejects(sendUserChanges(roSocket, cs), errRegEx);
- // sendUserChanges() waits for message ack, so if the message was accepted then head should
- // have already incremented by the time we get here.
- assert.equal(pad.head, rev); // Not incremented.
-
- // Now allow the change.
- plugins.hooks.handleMessageSecurity.push({hook_fn: () => 'permitOnce'});
- await Promise.all([
- assertAccepted(roSocket, rev + 1),
- sendUserChanges(roSocket, cs),
- ]);
- assert.equal(pad.text(), 'hello\n');
-
- // The next change should be dropped.
- plugins.hooks.handleMessageSecurity = [];
- await assert.rejects(sendUserChanges(roSocket, 'Z:6>6=5+6$ world'), errRegEx);
- assert.equal(pad.head, rev); // Not incremented.
- assert.equal(pad.text(), 'hello\n');
+ describe('USER_CHANGES', function () {
+ const sendUserChanges = async (socket, cs) => await common.sendUserChanges(socket, { baseRev: rev, changeset: cs });
+ const assertAccepted = async (socket, wantRev) => {
+ await common.waitForAcceptCommit(socket, wantRev);
+ rev = wantRev;
+ };
+ const assertRejected = async (socket) => {
+ const msg = await common.waitForSocketEvent(socket, 'message');
+ assert.deepEqual(msg, { disconnect: 'badChangeset' });
+ };
+ it('changes are applied', async function () {
+ await Promise.all([
+ assertAccepted(socket, rev + 1),
+ sendUserChanges(socket, 'Z:1>5+5$hello'),
+ ]);
+ assert.equal(pad.text(), 'hello\n');
+ });
+ it('bad changeset is rejected', async function () {
+ await Promise.all([
+ assertRejected(socket),
+ sendUserChanges(socket, 'this is not a valid changeset'),
+ ]);
+ });
+ it('retransmission is accepted, has no effect', async function () {
+ const cs = 'Z:1>5+5$hello';
+ await Promise.all([
+ assertAccepted(socket, rev + 1),
+ sendUserChanges(socket, cs),
+ ]);
+ --rev;
+ await Promise.all([
+ assertAccepted(socket, rev + 1),
+ sendUserChanges(socket, cs),
+ ]);
+ assert.equal(pad.text(), 'hello\n');
+ });
+ it('identity changeset is accepted, has no effect', async function () {
+ await Promise.all([
+ assertAccepted(socket, rev + 1),
+ sendUserChanges(socket, 'Z:1>5+5$hello'),
+ ]);
+ await Promise.all([
+ assertAccepted(socket, rev),
+ sendUserChanges(socket, 'Z:6>0$'),
+ ]);
+ assert.equal(pad.text(), 'hello\n');
+ });
+ it('non-identity changeset with no net change is accepted, has no effect', async function () {
+ await Promise.all([
+ assertAccepted(socket, rev + 1),
+ sendUserChanges(socket, 'Z:1>5+5$hello'),
+ ]);
+ await Promise.all([
+ assertAccepted(socket, rev),
+ sendUserChanges(socket, 'Z:6>0-5+5$hello'),
+ ]);
+ assert.equal(pad.text(), 'hello\n');
+ });
+ it('handleMessageSecurity can grant one-time write access', async function () {
+ const cs = 'Z:1>5+5$hello';
+ const errRegEx = /write attempt on read-only pad/;
+ // First try to send a change and verify that it was dropped.
+ await assert.rejects(sendUserChanges(roSocket, cs), errRegEx);
+ // sendUserChanges() waits for message ack, so if the message was accepted then head should
+ // have already incremented by the time we get here.
+ assert.equal(pad.head, rev); // Not incremented.
+ // Now allow the change.
+ plugins.hooks.handleMessageSecurity.push({ hook_fn: () => 'permitOnce' });
+ await Promise.all([
+ assertAccepted(roSocket, rev + 1),
+ sendUserChanges(roSocket, cs),
+ ]);
+ assert.equal(pad.text(), 'hello\n');
+ // The next change should be dropped.
+ plugins.hooks.handleMessageSecurity = [];
+ await assert.rejects(sendUserChanges(roSocket, 'Z:6>6=5+6$ world'), errRegEx);
+ assert.equal(pad.head, rev); // Not incremented.
+ assert.equal(pad.text(), 'hello\n');
+ });
});
- });
});
diff --git a/src/tests/backend/specs/pad_utils.js b/src/tests/backend/specs/pad_utils.js
index b4e815187b6..b2adae91c8e 100644
--- a/src/tests/backend/specs/pad_utils.js
+++ b/src/tests/backend/specs/pad_utils.js
@@ -1,43 +1,38 @@
+import assert$0 from "assert";
+import { padutils } from "../../../static/js/pad_utils.js";
'use strict';
-
-const assert = require('assert').strict;
-const {padutils} = require('../../../static/js/pad_utils');
-
+const assert = assert$0.strict;
describe(__filename, function () {
- describe('warnDeprecated', function () {
- const {warnDeprecated} = padutils;
- const backups = {};
-
- before(async function () {
- backups.logger = warnDeprecated.logger;
+ describe('warnDeprecated', function () {
+ const { warnDeprecated } = padutils;
+ const backups = {};
+ before(async function () {
+ backups.logger = warnDeprecated.logger;
+ });
+ afterEach(async function () {
+ warnDeprecated.logger = backups.logger;
+ delete warnDeprecated._rl; // Reset internal rate limiter state.
+ });
+ it('includes the stack', async function () {
+ let got;
+ warnDeprecated.logger = { warn: (stack) => got = stack };
+ warnDeprecated();
+ assert(got.includes(__filename));
+ });
+ it('rate limited', async function () {
+ let got = 0;
+ warnDeprecated.logger = { warn: () => ++got };
+ warnDeprecated(); // Initialize internal rate limiter state.
+ const { period } = warnDeprecated._rl;
+ got = 0;
+ const testCases = [[0, 1], [0, 1], [period - 1, 1], [period, 2]];
+ for (const [now, want] of testCases) { // In a loop so that the stack trace is the same.
+ warnDeprecated._rl.now = () => now;
+ warnDeprecated();
+ assert.equal(got, want);
+ }
+ warnDeprecated(); // Should have a different stack trace.
+ assert.equal(got, testCases[testCases.length - 1][1] + 1);
+ });
});
-
- afterEach(async function () {
- warnDeprecated.logger = backups.logger;
- delete warnDeprecated._rl; // Reset internal rate limiter state.
- });
-
- it('includes the stack', async function () {
- let got;
- warnDeprecated.logger = {warn: (stack) => got = stack};
- warnDeprecated();
- assert(got.includes(__filename));
- });
-
- it('rate limited', async function () {
- let got = 0;
- warnDeprecated.logger = {warn: () => ++got};
- warnDeprecated(); // Initialize internal rate limiter state.
- const {period} = warnDeprecated._rl;
- got = 0;
- const testCases = [[0, 1], [0, 1], [period - 1, 1], [period, 2]];
- for (const [now, want] of testCases) { // In a loop so that the stack trace is the same.
- warnDeprecated._rl.now = () => now;
- warnDeprecated();
- assert.equal(got, want);
- }
- warnDeprecated(); // Should have a different stack trace.
- assert.equal(got, testCases[testCases.length - 1][1] + 1);
- });
- });
});
diff --git a/src/tests/backend/specs/pads-with-spaces.js b/src/tests/backend/specs/pads-with-spaces.js
index 0db99865b80..f855340ff02 100644
--- a/src/tests/backend/specs/pads-with-spaces.js
+++ b/src/tests/backend/specs/pads-with-spaces.js
@@ -1,24 +1,20 @@
+import * as common from "../common.js";
+import assertLegacy from "../assert-legacy.js";
'use strict';
-
-const common = require('../common');
-const assert = require('../assert-legacy').strict;
-
+const assert = assertLegacy.strict;
let agent;
-
describe(__filename, function () {
- before(async function () {
- agent = await common.init();
- });
-
- it('supports pads with spaces, regression test for #4883', async function () {
- await agent.get('/p/pads with spaces')
- .expect(302)
- .expect('location', 'pads_with_spaces');
- });
-
- it('supports pads with spaces and query, regression test for #4883', async function () {
- await agent.get('/p/pads with spaces?showChat=true&noColors=false')
- .expect(302)
- .expect('location', 'pads_with_spaces?showChat=true&noColors=false');
- });
+ before(async function () {
+ agent = await common.init();
+ });
+ it('supports pads with spaces, regression test for #4883', async function () {
+ await agent.get('/p/pads with spaces')
+ .expect(302)
+ .expect('location', 'pads_with_spaces');
+ });
+ it('supports pads with spaces and query, regression test for #4883', async function () {
+ await agent.get('/p/pads with spaces?showChat=true&noColors=false')
+ .expect(302)
+ .expect('location', 'pads_with_spaces?showChat=true&noColors=false');
+ });
});
diff --git a/src/tests/backend/specs/promises.js b/src/tests/backend/specs/promises.js
index ad0c1ad9269..45fb135cb9b 100644
--- a/src/tests/backend/specs/promises.js
+++ b/src/tests/backend/specs/promises.js
@@ -1,85 +1,76 @@
-const assert = require('assert').strict;
-const promises = require('../../../node/utils/promises');
-
+import assert$0 from "assert";
+import * as promises from "../../../node/utils/promises.js";
+const assert = assert$0.strict;
describe(__filename, function () {
- describe('promises.timesLimit', function () {
- let wantIndex = 0;
- const testPromises = [];
- const makePromise = (index) => {
- // Make sure index increases by one each time.
- assert.equal(index, wantIndex++);
- // Save the resolve callback (so the test can trigger resolution)
- // and the promise itself (to wait for resolve to take effect).
- const p = {};
- const promise = new Promise((resolve) => {
- p.resolve = resolve;
- });
- p.promise = promise;
- testPromises.push(p);
- return p.promise;
- };
-
- const total = 11;
- const concurrency = 7;
- const timesLimitPromise = promises.timesLimit(total, concurrency, makePromise);
-
- it('honors concurrency', async function () {
- assert.equal(wantIndex, concurrency);
+ describe('promises.timesLimit', function () {
+ let wantIndex = 0;
+ const testPromises = [];
+ const makePromise = (index) => {
+ // Make sure index increases by one each time.
+ assert.equal(index, wantIndex++);
+ // Save the resolve callback (so the test can trigger resolution)
+ // and the promise itself (to wait for resolve to take effect).
+ const p = {};
+ const promise = new Promise((resolve) => {
+ p.resolve = resolve;
+ });
+ p.promise = promise;
+ testPromises.push(p);
+ return p.promise;
+ };
+ const total = 11;
+ const concurrency = 7;
+ const timesLimitPromise = promises.timesLimit(total, concurrency, makePromise);
+ it('honors concurrency', async function () {
+ assert.equal(wantIndex, concurrency);
+ });
+ it('creates another when one completes', async function () {
+ const { promise, resolve } = testPromises.shift();
+ resolve();
+ await promise;
+ assert.equal(wantIndex, concurrency + 1);
+ });
+ it('creates the expected total number of promises', async function () {
+ while (testPromises.length > 0) {
+ // Resolve them in random order to ensure that the resolution order doesn't matter.
+ const i = Math.floor(Math.random() * Math.floor(testPromises.length));
+ const { promise, resolve } = testPromises.splice(i, 1)[0];
+ resolve();
+ await promise;
+ }
+ assert.equal(wantIndex, total);
+ });
+ it('resolves', async function () {
+ await timesLimitPromise;
+ });
+ it('does not create too many promises if total < concurrency', async function () {
+ wantIndex = 0;
+ assert.equal(testPromises.length, 0);
+ const total = 7;
+ const concurrency = 11;
+ const timesLimitPromise = promises.timesLimit(total, concurrency, makePromise);
+ while (testPromises.length > 0) {
+ const { promise, resolve } = testPromises.pop();
+ resolve();
+ await promise;
+ }
+ await timesLimitPromise;
+ assert.equal(wantIndex, total);
+ });
+ it('accepts total === 0, concurrency > 0', async function () {
+ wantIndex = 0;
+ assert.equal(testPromises.length, 0);
+ await promises.timesLimit(0, concurrency, makePromise);
+ assert.equal(wantIndex, 0);
+ });
+ it('accepts total === 0, concurrency === 0', async function () {
+ wantIndex = 0;
+ assert.equal(testPromises.length, 0);
+ await promises.timesLimit(0, 0, makePromise);
+ assert.equal(wantIndex, 0);
+ });
+ it('rejects total > 0, concurrency === 0', async function () {
+ await assert.rejects(promises.timesLimit(total, 0, makePromise), RangeError);
+ });
});
-
- it('creates another when one completes', async function () {
- const {promise, resolve} = testPromises.shift();
- resolve();
- await promise;
- assert.equal(wantIndex, concurrency + 1);
- });
-
- it('creates the expected total number of promises', async function () {
- while (testPromises.length > 0) {
- // Resolve them in random order to ensure that the resolution order doesn't matter.
- const i = Math.floor(Math.random() * Math.floor(testPromises.length));
- const {promise, resolve} = testPromises.splice(i, 1)[0];
- resolve();
- await promise;
- }
- assert.equal(wantIndex, total);
- });
-
- it('resolves', async function () {
- await timesLimitPromise;
- });
-
- it('does not create too many promises if total < concurrency', async function () {
- wantIndex = 0;
- assert.equal(testPromises.length, 0);
- const total = 7;
- const concurrency = 11;
- const timesLimitPromise = promises.timesLimit(total, concurrency, makePromise);
- while (testPromises.length > 0) {
- const {promise, resolve} = testPromises.pop();
- resolve();
- await promise;
- }
- await timesLimitPromise;
- assert.equal(wantIndex, total);
- });
-
- it('accepts total === 0, concurrency > 0', async function () {
- wantIndex = 0;
- assert.equal(testPromises.length, 0);
- await promises.timesLimit(0, concurrency, makePromise);
- assert.equal(wantIndex, 0);
- });
-
- it('accepts total === 0, concurrency === 0', async function () {
- wantIndex = 0;
- assert.equal(testPromises.length, 0);
- await promises.timesLimit(0, 0, makePromise);
- assert.equal(wantIndex, 0);
- });
-
- it('rejects total > 0, concurrency === 0', async function () {
- await assert.rejects(promises.timesLimit(total, 0, makePromise), RangeError);
- });
- });
});
diff --git a/src/tests/backend/specs/regression-db.js b/src/tests/backend/specs/regression-db.js
index 388b8346ab4..aa81bace2db 100644
--- a/src/tests/backend/specs/regression-db.js
+++ b/src/tests/backend/specs/regression-db.js
@@ -1,30 +1,25 @@
+import * as AuthorManager from "../../../node/db/AuthorManager.js";
+import assert$0 from "assert";
+import * as common from "../common.js";
+import * as db from "../../../node/db/DB.js";
'use strict';
-
-const AuthorManager = require('../../../node/db/AuthorManager');
-const assert = require('assert').strict;
-const common = require('../common');
-const db = require('../../../node/db/DB');
-
+const assert = assert$0.strict;
describe(__filename, function () {
- let setBackup;
-
- before(async function () {
- await common.init();
- setBackup = db.set;
-
- db.set = async (...args) => {
- // delay db.set
- await new Promise((resolve) => { setTimeout(() => resolve(), 500); });
- return await setBackup.call(db, ...args);
- };
- });
-
- after(async function () {
- db.set = setBackup;
- });
-
- it('regression test for missing await in createAuthor (#5000)', async function () {
- const {authorID} = await AuthorManager.createAuthor(); // Should block until db.set() finishes.
- assert(await AuthorManager.doesAuthorExist(authorID));
- });
+ let setBackup;
+ before(async function () {
+ await common.init();
+ setBackup = db.set;
+ db.set = async (...args) => {
+ // delay db.set
+ await new Promise((resolve) => { setTimeout(() => resolve(), 500); });
+ return await setBackup.call(db, ...args);
+ };
+ });
+ after(async function () {
+ db.set = setBackup;
+ });
+ it('regression test for missing await in createAuthor (#5000)', async function () {
+ const { authorID } = await AuthorManager.createAuthor(); // Should block until db.set() finishes.
+ assert(await AuthorManager.doesAuthorExist(authorID));
+ });
});
diff --git a/src/tests/backend/specs/sanitizePathname.js b/src/tests/backend/specs/sanitizePathname.js
index 767221920dd..c99f3aafec6 100644
--- a/src/tests/backend/specs/sanitizePathname.js
+++ b/src/tests/backend/specs/sanitizePathname.js
@@ -1,96 +1,93 @@
+import assert$0 from "assert";
+import path from "path";
+import sanitizePathname from "../../../node/utils/sanitizePathname.js";
'use strict';
-
-const assert = require('assert').strict;
-const path = require('path');
-const sanitizePathname = require('../../../node/utils/sanitizePathname');
-
+const assert = assert$0.strict;
describe(__filename, function () {
- describe('absolute paths rejected', function () {
- const testCases = [
- ['posix', '/'],
- ['posix', '/foo'],
- ['win32', '/'],
- ['win32', '\\'],
- ['win32', 'C:/foo'],
- ['win32', 'C:\\foo'],
- ['win32', 'c:/foo'],
- ['win32', 'c:\\foo'],
- ['win32', '/foo'],
- ['win32', '\\foo'],
- ];
- for (const [platform, p] of testCases) {
- it(`${platform} ${p}`, async function () {
- assert.throws(() => sanitizePathname(p, path[platform]), {message: /absolute path/});
- });
- }
- });
- describe('directory traversal rejected', function () {
- const testCases = [
- ['posix', '..'],
- ['posix', '../'],
- ['posix', '../foo'],
- ['posix', 'foo/../..'],
- ['win32', '..'],
- ['win32', '../'],
- ['win32', '..\\'],
- ['win32', '../foo'],
- ['win32', '..\\foo'],
- ['win32', 'foo/../..'],
- ['win32', 'foo\\..\\..'],
- ];
- for (const [platform, p] of testCases) {
- it(`${platform} ${p}`, async function () {
- assert.throws(() => sanitizePathname(p, path[platform]), {message: /travers/});
- });
- }
- });
-
- describe('accepted paths', function () {
- const testCases = [
- ['posix', '', '.'],
- ['posix', '.'],
- ['posix', './'],
- ['posix', 'foo'],
- ['posix', 'foo/'],
- ['posix', 'foo/bar/..', 'foo'],
- ['posix', 'foo/bar/../', 'foo/'],
- ['posix', './foo', 'foo'],
- ['posix', 'foo/bar'],
- ['posix', 'foo\\bar'],
- ['posix', '\\foo'],
- ['posix', '..\\foo'],
- ['posix', 'foo/../bar', 'bar'],
- ['posix', 'C:/foo'],
- ['posix', 'C:\\foo'],
- ['win32', '', '.'],
- ['win32', '.'],
- ['win32', './'],
- ['win32', '.\\', './'],
- ['win32', 'foo'],
- ['win32', 'foo/'],
- ['win32', 'foo\\', 'foo/'],
- ['win32', 'foo/bar/..', 'foo'],
- ['win32', 'foo\\bar\\..', 'foo'],
- ['win32', 'foo/bar/../', 'foo/'],
- ['win32', 'foo\\bar\\..\\', 'foo/'],
- ['win32', './foo', 'foo'],
- ['win32', '.\\foo', 'foo'],
- ['win32', 'foo/bar'],
- ['win32', 'foo\\bar', 'foo/bar'],
- ['win32', 'foo/../bar', 'bar'],
- ['win32', 'foo\\..\\bar', 'bar'],
- ['win32', 'foo/..\\bar', 'bar'],
- ['win32', 'foo\\../bar', 'bar'],
- ];
- for (const [platform, p, tcWant] of testCases) {
- const want = tcWant == null ? p : tcWant;
- it(`${platform} ${p || ''} -> ${want}`, async function () {
- assert.equal(sanitizePathname(p, path[platform]), want);
- });
- }
- });
-
- it('default path API', async function () {
- assert.equal(sanitizePathname('foo'), 'foo');
- });
+ describe('absolute paths rejected', function () {
+ const testCases = [
+ ['posix', '/'],
+ ['posix', '/foo'],
+ ['win32', '/'],
+ ['win32', '\\'],
+ ['win32', 'C:/foo'],
+ ['win32', 'C:\\foo'],
+ ['win32', 'c:/foo'],
+ ['win32', 'c:\\foo'],
+ ['win32', '/foo'],
+ ['win32', '\\foo'],
+ ];
+ for (const [platform, p] of testCases) {
+ it(`${platform} ${p}`, async function () {
+ assert.throws(() => sanitizePathname(p, path[platform]), { message: /absolute path/ });
+ });
+ }
+ });
+ describe('directory traversal rejected', function () {
+ const testCases = [
+ ['posix', '..'],
+ ['posix', '../'],
+ ['posix', '../foo'],
+ ['posix', 'foo/../..'],
+ ['win32', '..'],
+ ['win32', '../'],
+ ['win32', '..\\'],
+ ['win32', '../foo'],
+ ['win32', '..\\foo'],
+ ['win32', 'foo/../..'],
+ ['win32', 'foo\\..\\..'],
+ ];
+ for (const [platform, p] of testCases) {
+ it(`${platform} ${p}`, async function () {
+ assert.throws(() => sanitizePathname(p, path[platform]), { message: /travers/ });
+ });
+ }
+ });
+ describe('accepted paths', function () {
+ const testCases = [
+ ['posix', '', '.'],
+ ['posix', '.'],
+ ['posix', './'],
+ ['posix', 'foo'],
+ ['posix', 'foo/'],
+ ['posix', 'foo/bar/..', 'foo'],
+ ['posix', 'foo/bar/../', 'foo/'],
+ ['posix', './foo', 'foo'],
+ ['posix', 'foo/bar'],
+ ['posix', 'foo\\bar'],
+ ['posix', '\\foo'],
+ ['posix', '..\\foo'],
+ ['posix', 'foo/../bar', 'bar'],
+ ['posix', 'C:/foo'],
+ ['posix', 'C:\\foo'],
+ ['win32', '', '.'],
+ ['win32', '.'],
+ ['win32', './'],
+ ['win32', '.\\', './'],
+ ['win32', 'foo'],
+ ['win32', 'foo/'],
+ ['win32', 'foo\\', 'foo/'],
+ ['win32', 'foo/bar/..', 'foo'],
+ ['win32', 'foo\\bar\\..', 'foo'],
+ ['win32', 'foo/bar/../', 'foo/'],
+ ['win32', 'foo\\bar\\..\\', 'foo/'],
+ ['win32', './foo', 'foo'],
+ ['win32', '.\\foo', 'foo'],
+ ['win32', 'foo/bar'],
+ ['win32', 'foo\\bar', 'foo/bar'],
+ ['win32', 'foo/../bar', 'bar'],
+ ['win32', 'foo\\..\\bar', 'bar'],
+ ['win32', 'foo/..\\bar', 'bar'],
+ ['win32', 'foo\\../bar', 'bar'],
+ ];
+ for (const [platform, p, tcWant] of testCases) {
+ const want = tcWant == null ? p : tcWant;
+ it(`${platform} ${p || ''} -> ${want}`, async function () {
+ assert.equal(sanitizePathname(p, path[platform]), want);
+ });
+ }
+ });
+ it('default path API', async function () {
+ assert.equal(sanitizePathname('foo'), 'foo');
+ });
});
diff --git a/src/tests/backend/specs/settings.js b/src/tests/backend/specs/settings.js
index e737f4f3445..6de6fae4110 100644
--- a/src/tests/backend/specs/settings.js
+++ b/src/tests/backend/specs/settings.js
@@ -1,61 +1,60 @@
+import assert$0 from "assert";
+import { exportedForTestingOnly } from "../../../node/utils/Settings.js";
+import path from "path";
+import process from "process";
'use strict';
-
-const assert = require('assert').strict;
-const {parseSettings} = require('../../../node/utils/Settings').exportedForTestingOnly;
-const path = require('path');
-const process = require('process');
-
+const assert = assert$0.strict;
+const { parseSettings } = { exportedForTestingOnly }.exportedForTestingOnly;
describe(__filename, function () {
- describe('parseSettings', function () {
- let settings;
- const envVarSubstTestCases = [
- {name: 'true', val: 'true', var: 'SET_VAR_TRUE', want: true},
- {name: 'false', val: 'false', var: 'SET_VAR_FALSE', want: false},
- {name: 'null', val: 'null', var: 'SET_VAR_NULL', want: null},
- {name: 'undefined', val: 'undefined', var: 'SET_VAR_UNDEFINED', want: undefined},
- {name: 'number', val: '123', var: 'SET_VAR_NUMBER', want: 123},
- {name: 'string', val: 'foo', var: 'SET_VAR_STRING', want: 'foo'},
- {name: 'empty string', val: '', var: 'SET_VAR_EMPTY_STRING', want: ''},
- ];
-
- before(async function () {
- for (const tc of envVarSubstTestCases) process.env[tc.var] = tc.val;
- delete process.env.UNSET_VAR;
- settings = parseSettings(path.join(__dirname, 'settings.json'), true);
- assert(settings != null);
- });
-
- describe('environment variable substitution', function () {
- describe('set', function () {
- for (const tc of envVarSubstTestCases) {
- it(tc.name, async function () {
- const obj = settings['environment variable substitution'].set;
- if (tc.name === 'undefined') {
- assert(!(tc.name in obj));
- } else {
- assert.equal(obj[tc.name], tc.want);
- }
- });
- }
- });
-
- describe('unset', function () {
- it('no default', async function () {
- const obj = settings['environment variable substitution'].unset;
- assert.equal(obj['no default'], null);
+ describe('parseSettings', function () {
+ let settings;
+ const envVarSubstTestCases = [
+ { name: 'true', val: 'true', var: 'SET_VAR_TRUE', want: true },
+ { name: 'false', val: 'false', var: 'SET_VAR_FALSE', want: false },
+ { name: 'null', val: 'null', var: 'SET_VAR_NULL', want: null },
+ { name: 'undefined', val: 'undefined', var: 'SET_VAR_UNDEFINED', want: undefined },
+ { name: 'number', val: '123', var: 'SET_VAR_NUMBER', want: 123 },
+ { name: 'string', val: 'foo', var: 'SET_VAR_STRING', want: 'foo' },
+ { name: 'empty string', val: '', var: 'SET_VAR_EMPTY_STRING', want: '' },
+ ];
+ before(async function () {
+ for (const tc of envVarSubstTestCases)
+ process.env[tc.var] = tc.val;
+ delete process.env.UNSET_VAR;
+ settings = parseSettings(path.join(__dirname, 'settings.json'), true);
+ assert(settings != null);
+ });
+ describe('environment variable substitution', function () {
+ describe('set', function () {
+ for (const tc of envVarSubstTestCases) {
+ it(tc.name, async function () {
+ const obj = settings['environment variable substitution'].set;
+ if (tc.name === 'undefined') {
+ assert(!(tc.name in obj));
+ }
+ else {
+ assert.equal(obj[tc.name], tc.want);
+ }
+ });
+ }
+ });
+ describe('unset', function () {
+ it('no default', async function () {
+ const obj = settings['environment variable substitution'].unset;
+ assert.equal(obj['no default'], null);
+ });
+ for (const tc of envVarSubstTestCases) {
+ it(tc.name, async function () {
+ const obj = settings['environment variable substitution'].unset;
+ if (tc.name === 'undefined') {
+ assert(!(tc.name in obj));
+ }
+ else {
+ assert.equal(obj[tc.name], tc.want);
+ }
+ });
+ }
+ });
});
-
- for (const tc of envVarSubstTestCases) {
- it(tc.name, async function () {
- const obj = settings['environment variable substitution'].unset;
- if (tc.name === 'undefined') {
- assert(!(tc.name in obj));
- } else {
- assert.equal(obj[tc.name], tc.want);
- }
- });
- }
- });
});
- });
});
diff --git a/src/tests/backend/specs/socketio.js b/src/tests/backend/specs/socketio.js
index 15f56177499..7f95d648a61 100644
--- a/src/tests/backend/specs/socketio.js
+++ b/src/tests/backend/specs/socketio.js
@@ -1,426 +1,405 @@
+import assert$0 from "assert";
+import * as common from "../common.js";
+import * as padManager from "../../../node/db/PadManager.js";
+import * as plugins from "../../../static/js/pluginfw/plugin_defs.js";
+import * as readOnlyManager from "../../../node/db/ReadOnlyManager.js";
+import * as settings from "../../../node/utils/Settings.js";
+import * as socketIoRouter from "../../../node/handler/SocketIORouter.js";
'use strict';
-
-const assert = require('assert').strict;
-const common = require('../common');
-const padManager = require('../../../node/db/PadManager');
-const plugins = require('../../../static/js/pluginfw/plugin_defs');
-const readOnlyManager = require('../../../node/db/ReadOnlyManager');
-const settings = require('../../../node/utils/Settings');
-const socketIoRouter = require('../../../node/handler/SocketIORouter');
-
+const assert = assert$0.strict;
describe(__filename, function () {
- this.timeout(30000);
- let agent;
- let authorize;
- const backups = {};
- const cleanUpPads = async () => {
- const padIds = ['pad', 'other-pad', 'päd'];
- await Promise.all(padIds.map(async (padId) => {
- if (await padManager.doesPadExist(padId)) {
- const pad = await padManager.getPad(padId);
- await pad.remove();
- }
- }));
- };
- let socket;
-
- before(async function () { agent = await common.init(); });
- beforeEach(async function () {
- backups.hooks = {};
- for (const hookName of ['preAuthorize', 'authenticate', 'authorize']) {
- backups.hooks[hookName] = plugins.hooks[hookName];
- plugins.hooks[hookName] = [];
- }
- backups.settings = {};
- for (const setting of ['editOnly', 'requireAuthentication', 'requireAuthorization', 'users']) {
- backups.settings[setting] = settings[setting];
- }
- settings.editOnly = false;
- settings.requireAuthentication = false;
- settings.requireAuthorization = false;
- settings.users = {
- admin: {password: 'admin-password', is_admin: true},
- user: {password: 'user-password'},
+ this.timeout(30000);
+ let agent;
+ let authorize;
+ const backups = {};
+ const cleanUpPads = async () => {
+ const padIds = ['pad', 'other-pad', 'päd'];
+ await Promise.all(padIds.map(async (padId) => {
+ if (await padManager.doesPadExist(padId)) {
+ const pad = await padManager.getPad(padId);
+ await pad.remove();
+ }
+ }));
};
- assert(socket == null);
- authorize = () => true;
- plugins.hooks.authorize = [{hook_fn: (hookName, {req}, cb) => cb([authorize(req)])}];
- await cleanUpPads();
- });
- afterEach(async function () {
- if (socket) socket.close();
- socket = null;
- await cleanUpPads();
- Object.assign(plugins.hooks, backups.hooks);
- Object.assign(settings, backups.settings);
- });
-
- describe('Normal accesses', function () {
- it('!authn anonymous cookie /p/pad -> 200, ok', async function () {
- const res = await agent.get('/p/pad').expect(200);
- socket = await common.connect(res);
- const clientVars = await common.handshake(socket, 'pad');
- assert.equal(clientVars.type, 'CLIENT_VARS');
- });
- it('!authn !cookie -> ok', async function () {
- socket = await common.connect(null);
- const clientVars = await common.handshake(socket, 'pad');
- assert.equal(clientVars.type, 'CLIENT_VARS');
- });
- it('!authn user /p/pad -> 200, ok', async function () {
- const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- const clientVars = await common.handshake(socket, 'pad');
- assert.equal(clientVars.type, 'CLIENT_VARS');
- });
- it('authn user /p/pad -> 200, ok', async function () {
- settings.requireAuthentication = true;
- const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- const clientVars = await common.handshake(socket, 'pad');
- assert.equal(clientVars.type, 'CLIENT_VARS');
- });
-
- for (const authn of [false, true]) {
- const desc = authn ? 'authn user' : '!authn anonymous';
- it(`${desc} read-only /p/pad -> 200, ok`, async function () {
- const get = (ep) => {
- let res = agent.get(ep);
- if (authn) res = res.auth('user', 'user-password');
- return res.expect(200);
- };
- settings.requireAuthentication = authn;
- let res = await get('/p/pad');
- socket = await common.connect(res);
- let clientVars = await common.handshake(socket, 'pad');
- assert.equal(clientVars.type, 'CLIENT_VARS');
- assert.equal(clientVars.data.readonly, false);
- const readOnlyId = clientVars.data.readOnlyId;
- assert(readOnlyManager.isReadOnlyId(readOnlyId));
- socket.close();
- res = await get(`/p/${readOnlyId}`);
- socket = await common.connect(res);
- clientVars = await common.handshake(socket, readOnlyId);
- assert.equal(clientVars.type, 'CLIENT_VARS');
- assert.equal(clientVars.data.readonly, true);
- });
- }
-
- it('authz user /p/pad -> 200, ok', async function () {
- settings.requireAuthentication = true;
- settings.requireAuthorization = true;
- const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- const clientVars = await common.handshake(socket, 'pad');
- assert.equal(clientVars.type, 'CLIENT_VARS');
- });
- it('supports pad names with characters that must be percent-encoded', async function () {
- settings.requireAuthentication = true;
- // requireAuthorization is set to true here to guarantee that the user's padAuthorizations
- // object is populated. Technically this isn't necessary because the user's padAuthorizations
- // is currently populated even if requireAuthorization is false, but setting this to true
- // ensures the test remains useful if the implementation ever changes.
- settings.requireAuthorization = true;
- const encodedPadId = encodeURIComponent('päd');
- const res = await agent.get(`/p/${encodedPadId}`).auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- const clientVars = await common.handshake(socket, 'päd');
- assert.equal(clientVars.type, 'CLIENT_VARS');
- });
- });
-
- describe('Abnormal access attempts', function () {
- it('authn anonymous /p/pad -> 401, error', async function () {
- settings.requireAuthentication = true;
- const res = await agent.get('/p/pad').expect(401);
- // Despite the 401, try to create the pad via a socket.io connection anyway.
- socket = await common.connect(res);
- const message = await common.handshake(socket, 'pad');
- assert.equal(message.accessStatus, 'deny');
- });
-
- it('authn anonymous read-only /p/pad -> 401, error', async function () {
- settings.requireAuthentication = true;
- let res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- const clientVars = await common.handshake(socket, 'pad');
- assert.equal(clientVars.type, 'CLIENT_VARS');
- const readOnlyId = clientVars.data.readOnlyId;
- assert(readOnlyManager.isReadOnlyId(readOnlyId));
- socket.close();
- res = await agent.get(`/p/${readOnlyId}`).expect(401);
- // Despite the 401, try to read the pad via a socket.io connection anyway.
- socket = await common.connect(res);
- const message = await common.handshake(socket, readOnlyId);
- assert.equal(message.accessStatus, 'deny');
- });
-
- it('authn !cookie -> error', async function () {
- settings.requireAuthentication = true;
- socket = await common.connect(null);
- const message = await common.handshake(socket, 'pad');
- assert.equal(message.accessStatus, 'deny');
- });
- it('authorization bypass attempt -> error', async function () {
- // Only allowed to access /p/pad.
- authorize = (req) => req.path === '/p/pad';
- settings.requireAuthentication = true;
- settings.requireAuthorization = true;
- // First authenticate and establish a session.
- const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- // Accessing /p/other-pad should fail, despite the successful fetch of /p/pad.
- const message = await common.handshake(socket, 'other-pad');
- assert.equal(message.accessStatus, 'deny');
- });
- });
-
- describe('Authorization levels via authorize hook', function () {
+ let socket;
+ before(async function () { agent = await common.init(); });
beforeEach(async function () {
- settings.requireAuthentication = true;
- settings.requireAuthorization = true;
- });
-
- it("level='create' -> can create", async function () {
- authorize = () => 'create';
- const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- const clientVars = await common.handshake(socket, 'pad');
- assert.equal(clientVars.type, 'CLIENT_VARS');
- assert.equal(clientVars.data.readonly, false);
- });
- it('level=true -> can create', async function () {
- authorize = () => true;
- const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- const clientVars = await common.handshake(socket, 'pad');
- assert.equal(clientVars.type, 'CLIENT_VARS');
- assert.equal(clientVars.data.readonly, false);
- });
- it("level='modify' -> can modify", async function () {
- await padManager.getPad('pad'); // Create the pad.
- authorize = () => 'modify';
- const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- const clientVars = await common.handshake(socket, 'pad');
- assert.equal(clientVars.type, 'CLIENT_VARS');
- assert.equal(clientVars.data.readonly, false);
- });
- it("level='create' settings.editOnly=true -> unable to create", async function () {
- authorize = () => 'create';
- settings.editOnly = true;
- const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- const message = await common.handshake(socket, 'pad');
- assert.equal(message.accessStatus, 'deny');
- });
- it("level='modify' settings.editOnly=false -> unable to create", async function () {
- authorize = () => 'modify';
- settings.editOnly = false;
- const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- const message = await common.handshake(socket, 'pad');
- assert.equal(message.accessStatus, 'deny');
- });
- it("level='readOnly' -> unable to create", async function () {
- authorize = () => 'readOnly';
- const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- const message = await common.handshake(socket, 'pad');
- assert.equal(message.accessStatus, 'deny');
- });
- it("level='readOnly' -> unable to modify", async function () {
- await padManager.getPad('pad'); // Create the pad.
- authorize = () => 'readOnly';
- const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- const clientVars = await common.handshake(socket, 'pad');
- assert.equal(clientVars.type, 'CLIENT_VARS');
- assert.equal(clientVars.data.readonly, true);
- });
- });
-
- describe('Authorization levels via user settings', function () {
- beforeEach(async function () {
- settings.requireAuthentication = true;
- });
-
- it('user.canCreate = true -> can create and modify', async function () {
- settings.users.user.canCreate = true;
- const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- const clientVars = await common.handshake(socket, 'pad');
- assert.equal(clientVars.type, 'CLIENT_VARS');
- assert.equal(clientVars.data.readonly, false);
- });
- it('user.canCreate = false -> unable to create', async function () {
- settings.users.user.canCreate = false;
- const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- const message = await common.handshake(socket, 'pad');
- assert.equal(message.accessStatus, 'deny');
- });
- it('user.readOnly = true -> unable to create', async function () {
- settings.users.user.readOnly = true;
- const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- const message = await common.handshake(socket, 'pad');
- assert.equal(message.accessStatus, 'deny');
- });
- it('user.readOnly = true -> unable to modify', async function () {
- await padManager.getPad('pad'); // Create the pad.
- settings.users.user.readOnly = true;
- const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- const clientVars = await common.handshake(socket, 'pad');
- assert.equal(clientVars.type, 'CLIENT_VARS');
- assert.equal(clientVars.data.readonly, true);
- });
- it('user.readOnly = false -> can create and modify', async function () {
- settings.users.user.readOnly = false;
- const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- const clientVars = await common.handshake(socket, 'pad');
- assert.equal(clientVars.type, 'CLIENT_VARS');
- assert.equal(clientVars.data.readonly, false);
- });
- it('user.readOnly = true, user.canCreate = true -> unable to create', async function () {
- settings.users.user.canCreate = true;
- settings.users.user.readOnly = true;
- const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- const message = await common.handshake(socket, 'pad');
- assert.equal(message.accessStatus, 'deny');
- });
- });
-
- describe('Authorization level interaction between authorize hook and user settings', function () {
- beforeEach(async function () {
- settings.requireAuthentication = true;
- settings.requireAuthorization = true;
- });
-
- it('authorize hook does not elevate level from user settings', async function () {
- settings.users.user.readOnly = true;
- authorize = () => 'create';
- const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- const message = await common.handshake(socket, 'pad');
- assert.equal(message.accessStatus, 'deny');
- });
- it('user settings does not elevate level from authorize hook', async function () {
- settings.users.user.readOnly = false;
- settings.users.user.canCreate = true;
- authorize = () => 'readOnly';
- const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
- socket = await common.connect(res);
- const message = await common.handshake(socket, 'pad');
- assert.equal(message.accessStatus, 'deny');
- });
- });
-
- describe('SocketIORouter.js', function () {
- const Module = class {
- setSocketIO(io) {}
- handleConnect(socket) {}
- handleDisconnect(socket) {}
- handleMessage(socket, message) {}
- };
-
- afterEach(async function () {
- socketIoRouter.deleteComponent(this.test.fullTitle());
- socketIoRouter.deleteComponent(`${this.test.fullTitle()} #2`);
- });
-
- it('setSocketIO', async function () {
- let ioServer;
- socketIoRouter.addComponent(this.test.fullTitle(), new class extends Module {
- setSocketIO(io) { ioServer = io; }
- }());
- assert(ioServer != null);
- });
-
- it('handleConnect', async function () {
- let serverSocket;
- socketIoRouter.addComponent(this.test.fullTitle(), new class extends Module {
- handleConnect(socket) { serverSocket = socket; }
- }());
- socket = await common.connect();
- assert(serverSocket != null);
- });
-
- it('handleDisconnect', async function () {
- let resolveConnected;
- const connected = new Promise((resolve) => resolveConnected = resolve);
- let resolveDisconnected;
- const disconnected = new Promise((resolve) => resolveDisconnected = resolve);
- socketIoRouter.addComponent(this.test.fullTitle(), new class extends Module {
- handleConnect(socket) {
- this._socket = socket;
- resolveConnected();
+ backups.hooks = {};
+ for (const hookName of ['preAuthorize', 'authenticate', 'authorize']) {
+ backups.hooks[hookName] = plugins.hooks[hookName];
+ plugins.hooks[hookName] = [];
}
- handleDisconnect(socket) {
- assert(socket != null);
- // There might be lingering disconnect events from sockets created by other tests.
- if (this._socket == null || socket.id !== this._socket.id) return;
- assert.equal(socket, this._socket);
- resolveDisconnected();
+ backups.settings = {};
+ for (const setting of ['editOnly', 'requireAuthentication', 'requireAuthorization', 'users']) {
+ backups.settings[setting] = settings[setting];
}
- }());
- socket = await common.connect();
- await connected;
- socket.close();
- socket = null;
- await disconnected;
- });
-
- it('handleMessage (success)', async function () {
- let serverSocket;
- const want = {
- component: this.test.fullTitle(),
- foo: {bar: 'asdf'},
- };
- let rx;
- const got = new Promise((resolve) => { rx = resolve; });
- socketIoRouter.addComponent(this.test.fullTitle(), new class extends Module {
- handleConnect(socket) { serverSocket = socket; }
- handleMessage(socket, message) { assert.equal(socket, serverSocket); rx(message); }
- }());
- socketIoRouter.addComponent(`${this.test.fullTitle()} #2`, new class extends Module {
- handleMessage(socket, message) { assert.fail('wrong handler called'); }
- }());
- socket = await common.connect();
- socket.send(want);
- assert.deepEqual(await got, want);
- });
-
- const tx = async (socket, message = {}) => await new Promise((resolve, reject) => {
- const AckErr = class extends Error {
- constructor(name, ...args) { super(...args); this.name = name; }
- };
- socket.send(message,
- (errj, val) => errj != null ? reject(new AckErr(errj.name, errj.message)) : resolve(val));
- });
-
- it('handleMessage with ack (success)', async function () {
- const want = 'value';
- socketIoRouter.addComponent(this.test.fullTitle(), new class extends Module {
- handleMessage(socket, msg) { return want; }
- }());
- socket = await common.connect();
- const got = await tx(socket, {component: this.test.fullTitle()});
- assert.equal(got, want);
+ settings.editOnly = false;
+ settings.requireAuthentication = false;
+ settings.requireAuthorization = false;
+ settings.users = {
+ admin: { password: 'admin-password', is_admin: true },
+ user: { password: 'user-password' },
+ };
+ assert(socket == null);
+ authorize = () => true;
+ plugins.hooks.authorize = [{ hook_fn: (hookName, { req }, cb) => cb([authorize(req)]) }];
+ await cleanUpPads();
});
-
- it('handleMessage with ack (error)', async function () {
- const InjectedError = class extends Error {
- constructor() { super('injected test error'); this.name = 'InjectedError'; }
- };
- socketIoRouter.addComponent(this.test.fullTitle(), new class extends Module {
- handleMessage(socket, msg) { throw new InjectedError(); }
- }());
- socket = await common.connect();
- await assert.rejects(tx(socket, {component: this.test.fullTitle()}), new InjectedError());
+ afterEach(async function () {
+ if (socket)
+ socket.close();
+ socket = null;
+ await cleanUpPads();
+ Object.assign(plugins.hooks, backups.hooks);
+ Object.assign(settings, backups.settings);
+ });
+ describe('Normal accesses', function () {
+ it('!authn anonymous cookie /p/pad -> 200, ok', async function () {
+ const res = await agent.get('/p/pad').expect(200);
+ socket = await common.connect(res);
+ const clientVars = await common.handshake(socket, 'pad');
+ assert.equal(clientVars.type, 'CLIENT_VARS');
+ });
+ it('!authn !cookie -> ok', async function () {
+ socket = await common.connect(null);
+ const clientVars = await common.handshake(socket, 'pad');
+ assert.equal(clientVars.type, 'CLIENT_VARS');
+ });
+ it('!authn user /p/pad -> 200, ok', async function () {
+ const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ const clientVars = await common.handshake(socket, 'pad');
+ assert.equal(clientVars.type, 'CLIENT_VARS');
+ });
+ it('authn user /p/pad -> 200, ok', async function () {
+ settings.requireAuthentication = true;
+ const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ const clientVars = await common.handshake(socket, 'pad');
+ assert.equal(clientVars.type, 'CLIENT_VARS');
+ });
+ for (const authn of [false, true]) {
+ const desc = authn ? 'authn user' : '!authn anonymous';
+ it(`${desc} read-only /p/pad -> 200, ok`, async function () {
+ const get = (ep) => {
+ let res = agent.get(ep);
+ if (authn)
+ res = res.auth('user', 'user-password');
+ return res.expect(200);
+ };
+ settings.requireAuthentication = authn;
+ let res = await get('/p/pad');
+ socket = await common.connect(res);
+ let clientVars = await common.handshake(socket, 'pad');
+ assert.equal(clientVars.type, 'CLIENT_VARS');
+ assert.equal(clientVars.data.readonly, false);
+ const readOnlyId = clientVars.data.readOnlyId;
+ assert(readOnlyManager.isReadOnlyId(readOnlyId));
+ socket.close();
+ res = await get(`/p/${readOnlyId}`);
+ socket = await common.connect(res);
+ clientVars = await common.handshake(socket, readOnlyId);
+ assert.equal(clientVars.type, 'CLIENT_VARS');
+ assert.equal(clientVars.data.readonly, true);
+ });
+ }
+ it('authz user /p/pad -> 200, ok', async function () {
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = true;
+ const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ const clientVars = await common.handshake(socket, 'pad');
+ assert.equal(clientVars.type, 'CLIENT_VARS');
+ });
+ it('supports pad names with characters that must be percent-encoded', async function () {
+ settings.requireAuthentication = true;
+ // requireAuthorization is set to true here to guarantee that the user's padAuthorizations
+ // object is populated. Technically this isn't necessary because the user's padAuthorizations
+ // is currently populated even if requireAuthorization is false, but setting this to true
+ // ensures the test remains useful if the implementation ever changes.
+ settings.requireAuthorization = true;
+ const encodedPadId = encodeURIComponent('päd');
+ const res = await agent.get(`/p/${encodedPadId}`).auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ const clientVars = await common.handshake(socket, 'päd');
+ assert.equal(clientVars.type, 'CLIENT_VARS');
+ });
+ });
+ describe('Abnormal access attempts', function () {
+ it('authn anonymous /p/pad -> 401, error', async function () {
+ settings.requireAuthentication = true;
+ const res = await agent.get('/p/pad').expect(401);
+ // Despite the 401, try to create the pad via a socket.io connection anyway.
+ socket = await common.connect(res);
+ const message = await common.handshake(socket, 'pad');
+ assert.equal(message.accessStatus, 'deny');
+ });
+ it('authn anonymous read-only /p/pad -> 401, error', async function () {
+ settings.requireAuthentication = true;
+ let res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ const clientVars = await common.handshake(socket, 'pad');
+ assert.equal(clientVars.type, 'CLIENT_VARS');
+ const readOnlyId = clientVars.data.readOnlyId;
+ assert(readOnlyManager.isReadOnlyId(readOnlyId));
+ socket.close();
+ res = await agent.get(`/p/${readOnlyId}`).expect(401);
+ // Despite the 401, try to read the pad via a socket.io connection anyway.
+ socket = await common.connect(res);
+ const message = await common.handshake(socket, readOnlyId);
+ assert.equal(message.accessStatus, 'deny');
+ });
+ it('authn !cookie -> error', async function () {
+ settings.requireAuthentication = true;
+ socket = await common.connect(null);
+ const message = await common.handshake(socket, 'pad');
+ assert.equal(message.accessStatus, 'deny');
+ });
+ it('authorization bypass attempt -> error', async function () {
+ // Only allowed to access /p/pad.
+ authorize = (req) => req.path === '/p/pad';
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = true;
+ // First authenticate and establish a session.
+ const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ // Accessing /p/other-pad should fail, despite the successful fetch of /p/pad.
+ const message = await common.handshake(socket, 'other-pad');
+ assert.equal(message.accessStatus, 'deny');
+ });
+ });
+ describe('Authorization levels via authorize hook', function () {
+ beforeEach(async function () {
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = true;
+ });
+ it("level='create' -> can create", async function () {
+ authorize = () => 'create';
+ const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ const clientVars = await common.handshake(socket, 'pad');
+ assert.equal(clientVars.type, 'CLIENT_VARS');
+ assert.equal(clientVars.data.readonly, false);
+ });
+ it('level=true -> can create', async function () {
+ authorize = () => true;
+ const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ const clientVars = await common.handshake(socket, 'pad');
+ assert.equal(clientVars.type, 'CLIENT_VARS');
+ assert.equal(clientVars.data.readonly, false);
+ });
+ it("level='modify' -> can modify", async function () {
+ await padManager.getPad('pad'); // Create the pad.
+ authorize = () => 'modify';
+ const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ const clientVars = await common.handshake(socket, 'pad');
+ assert.equal(clientVars.type, 'CLIENT_VARS');
+ assert.equal(clientVars.data.readonly, false);
+ });
+ it("level='create' settings.editOnly=true -> unable to create", async function () {
+ authorize = () => 'create';
+ settings.editOnly = true;
+ const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ const message = await common.handshake(socket, 'pad');
+ assert.equal(message.accessStatus, 'deny');
+ });
+ it("level='modify' settings.editOnly=false -> unable to create", async function () {
+ authorize = () => 'modify';
+ settings.editOnly = false;
+ const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ const message = await common.handshake(socket, 'pad');
+ assert.equal(message.accessStatus, 'deny');
+ });
+ it("level='readOnly' -> unable to create", async function () {
+ authorize = () => 'readOnly';
+ const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ const message = await common.handshake(socket, 'pad');
+ assert.equal(message.accessStatus, 'deny');
+ });
+ it("level='readOnly' -> unable to modify", async function () {
+ await padManager.getPad('pad'); // Create the pad.
+ authorize = () => 'readOnly';
+ const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ const clientVars = await common.handshake(socket, 'pad');
+ assert.equal(clientVars.type, 'CLIENT_VARS');
+ assert.equal(clientVars.data.readonly, true);
+ });
+ });
+ describe('Authorization levels via user settings', function () {
+ beforeEach(async function () {
+ settings.requireAuthentication = true;
+ });
+ it('user.canCreate = true -> can create and modify', async function () {
+ settings.users.user.canCreate = true;
+ const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ const clientVars = await common.handshake(socket, 'pad');
+ assert.equal(clientVars.type, 'CLIENT_VARS');
+ assert.equal(clientVars.data.readonly, false);
+ });
+ it('user.canCreate = false -> unable to create', async function () {
+ settings.users.user.canCreate = false;
+ const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ const message = await common.handshake(socket, 'pad');
+ assert.equal(message.accessStatus, 'deny');
+ });
+ it('user.readOnly = true -> unable to create', async function () {
+ settings.users.user.readOnly = true;
+ const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ const message = await common.handshake(socket, 'pad');
+ assert.equal(message.accessStatus, 'deny');
+ });
+ it('user.readOnly = true -> unable to modify', async function () {
+ await padManager.getPad('pad'); // Create the pad.
+ settings.users.user.readOnly = true;
+ const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ const clientVars = await common.handshake(socket, 'pad');
+ assert.equal(clientVars.type, 'CLIENT_VARS');
+ assert.equal(clientVars.data.readonly, true);
+ });
+ it('user.readOnly = false -> can create and modify', async function () {
+ settings.users.user.readOnly = false;
+ const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ const clientVars = await common.handshake(socket, 'pad');
+ assert.equal(clientVars.type, 'CLIENT_VARS');
+ assert.equal(clientVars.data.readonly, false);
+ });
+ it('user.readOnly = true, user.canCreate = true -> unable to create', async function () {
+ settings.users.user.canCreate = true;
+ settings.users.user.readOnly = true;
+ const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ const message = await common.handshake(socket, 'pad');
+ assert.equal(message.accessStatus, 'deny');
+ });
+ });
+ describe('Authorization level interaction between authorize hook and user settings', function () {
+ beforeEach(async function () {
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = true;
+ });
+ it('authorize hook does not elevate level from user settings', async function () {
+ settings.users.user.readOnly = true;
+ authorize = () => 'create';
+ const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ const message = await common.handshake(socket, 'pad');
+ assert.equal(message.accessStatus, 'deny');
+ });
+ it('user settings does not elevate level from authorize hook', async function () {
+ settings.users.user.readOnly = false;
+ settings.users.user.canCreate = true;
+ authorize = () => 'readOnly';
+ const res = await agent.get('/p/pad').auth('user', 'user-password').expect(200);
+ socket = await common.connect(res);
+ const message = await common.handshake(socket, 'pad');
+ assert.equal(message.accessStatus, 'deny');
+ });
+ });
+ describe('SocketIORouter.js', function () {
+ const Module = class {
+ setSocketIO(io) { }
+ handleConnect(socket) { }
+ handleDisconnect(socket) { }
+ handleMessage(socket, message) { }
+ };
+ afterEach(async function () {
+ socketIoRouter.deleteComponent(this.test.fullTitle());
+ socketIoRouter.deleteComponent(`${this.test.fullTitle()} #2`);
+ });
+ it('setSocketIO', async function () {
+ let ioServer;
+ socketIoRouter.addComponent(this.test.fullTitle(), new class extends Module {
+ setSocketIO(io) { ioServer = io; }
+ }());
+ assert(ioServer != null);
+ });
+ it('handleConnect', async function () {
+ let serverSocket;
+ socketIoRouter.addComponent(this.test.fullTitle(), new class extends Module {
+ handleConnect(socket) { serverSocket = socket; }
+ }());
+ socket = await common.connect();
+ assert(serverSocket != null);
+ });
+ it('handleDisconnect', async function () {
+ let resolveConnected;
+ const connected = new Promise((resolve) => resolveConnected = resolve);
+ let resolveDisconnected;
+ const disconnected = new Promise((resolve) => resolveDisconnected = resolve);
+ socketIoRouter.addComponent(this.test.fullTitle(), new class extends Module {
+ handleConnect(socket) {
+ this._socket = socket;
+ resolveConnected();
+ }
+ handleDisconnect(socket) {
+ assert(socket != null);
+ // There might be lingering disconnect events from sockets created by other tests.
+ if (this._socket == null || socket.id !== this._socket.id)
+ return;
+ assert.equal(socket, this._socket);
+ resolveDisconnected();
+ }
+ }());
+ socket = await common.connect();
+ await connected;
+ socket.close();
+ socket = null;
+ await disconnected;
+ });
+ it('handleMessage (success)', async function () {
+ let serverSocket;
+ const want = {
+ component: this.test.fullTitle(),
+ foo: { bar: 'asdf' },
+ };
+ let rx;
+ const got = new Promise((resolve) => { rx = resolve; });
+ socketIoRouter.addComponent(this.test.fullTitle(), new class extends Module {
+ handleConnect(socket) { serverSocket = socket; }
+ handleMessage(socket, message) { assert.equal(socket, serverSocket); rx(message); }
+ }());
+ socketIoRouter.addComponent(`${this.test.fullTitle()} #2`, new class extends Module {
+ handleMessage(socket, message) { assert.fail('wrong handler called'); }
+ }());
+ socket = await common.connect();
+ socket.send(want);
+ assert.deepEqual(await got, want);
+ });
+ const tx = async (socket, message = {}) => await new Promise((resolve, reject) => {
+ const AckErr = class extends Error {
+ constructor(name, ...args) { super(...args); this.name = name; }
+ };
+ socket.send(message, (errj, val) => errj != null ? reject(new AckErr(errj.name, errj.message)) : resolve(val));
+ });
+ it('handleMessage with ack (success)', async function () {
+ const want = 'value';
+ socketIoRouter.addComponent(this.test.fullTitle(), new class extends Module {
+ handleMessage(socket, msg) { return want; }
+ }());
+ socket = await common.connect();
+ const got = await tx(socket, { component: this.test.fullTitle() });
+ assert.equal(got, want);
+ });
+ it('handleMessage with ack (error)', async function () {
+ const InjectedError = class extends Error {
+ constructor() { super('injected test error'); this.name = 'InjectedError'; }
+ };
+ socketIoRouter.addComponent(this.test.fullTitle(), new class extends Module {
+ handleMessage(socket, msg) { throw new InjectedError(); }
+ }());
+ socket = await common.connect();
+ await assert.rejects(tx(socket, { component: this.test.fullTitle() }), new InjectedError());
+ });
});
- });
});
diff --git a/src/tests/backend/specs/specialpages.js b/src/tests/backend/specs/specialpages.js
index 93c8b3bc4ac..8be1b00fb8f 100644
--- a/src/tests/backend/specs/specialpages.js
+++ b/src/tests/backend/specs/specialpages.js
@@ -1,28 +1,25 @@
+import * as common from "../common.js";
+import * as settings from "../../../node/utils/Settings.js";
'use strict';
-
-const common = require('../common');
-const settings = require('../../../node/utils/Settings');
-
describe(__filename, function () {
- this.timeout(30000);
- let agent;
- const backups = {};
- before(async function () { agent = await common.init(); });
- beforeEach(async function () {
- backups.settings = {};
- for (const setting of ['requireAuthentication', 'requireAuthorization']) {
- backups.settings[setting] = settings[setting];
- }
- settings.requireAuthentication = false;
- settings.requireAuthorization = false;
- });
- afterEach(async function () {
- Object.assign(settings, backups.settings);
- });
-
- describe('/javascript', function () {
- it('/javascript -> 200', async function () {
- await agent.get('/javascript').expect(200);
+ this.timeout(30000);
+ let agent;
+ const backups = {};
+ before(async function () { agent = await common.init(); });
+ beforeEach(async function () {
+ backups.settings = {};
+ for (const setting of ['requireAuthentication', 'requireAuthorization']) {
+ backups.settings[setting] = settings[setting];
+ }
+ settings.requireAuthentication = false;
+ settings.requireAuthorization = false;
+ });
+ afterEach(async function () {
+ Object.assign(settings, backups.settings);
+ });
+ describe('/javascript', function () {
+ it('/javascript -> 200', async function () {
+ await agent.get('/javascript').expect(200);
+ });
});
- });
});
diff --git a/src/tests/backend/specs/webaccess.js b/src/tests/backend/specs/webaccess.js
index 23cd2d88968..ced776ca487 100644
--- a/src/tests/backend/specs/webaccess.js
+++ b/src/tests/backend/specs/webaccess.js
@@ -1,494 +1,478 @@
+import assert$0 from "assert";
+import * as common from "../common.js";
+import * as plugins from "../../../static/js/pluginfw/plugin_defs.js";
+import * as settings from "../../../node/utils/Settings.js";
'use strict';
-
-const assert = require('assert').strict;
-const common = require('../common');
-const plugins = require('../../../static/js/pluginfw/plugin_defs');
-const settings = require('../../../node/utils/Settings');
-
+const assert = assert$0.strict;
describe(__filename, function () {
- this.timeout(30000);
- let agent;
- const backups = {};
- const authHookNames = ['preAuthorize', 'authenticate', 'authorize'];
- const failHookNames = ['preAuthzFailure', 'authnFailure', 'authzFailure', 'authFailure'];
- const makeHook = (hookName, hookFn) => ({
- hook_fn: hookFn,
- hook_fn_name: `fake_plugin/${hookName}`,
- hook_name: hookName,
- part: {plugin: 'fake_plugin'},
- });
-
- before(async function () { agent = await common.init(); });
- beforeEach(async function () {
- backups.hooks = {};
- for (const hookName of authHookNames.concat(failHookNames)) {
- backups.hooks[hookName] = plugins.hooks[hookName];
- plugins.hooks[hookName] = [];
- }
- backups.settings = {};
- for (const setting of ['requireAuthentication', 'requireAuthorization', 'users']) {
- backups.settings[setting] = settings[setting];
- }
- settings.requireAuthentication = false;
- settings.requireAuthorization = false;
- settings.users = {
- admin: {password: 'admin-password', is_admin: true},
- user: {password: 'user-password'},
- };
- });
- afterEach(async function () {
- Object.assign(plugins.hooks, backups.hooks);
- Object.assign(settings, backups.settings);
- });
-
- describe('webaccess: without plugins', function () {
- it('!authn !authz anonymous / -> 200', async function () {
- settings.requireAuthentication = false;
- settings.requireAuthorization = false;
- await agent.get('/').expect(200);
+ this.timeout(30000);
+ let agent;
+ const backups = {};
+ const authHookNames = ['preAuthorize', 'authenticate', 'authorize'];
+ const failHookNames = ['preAuthzFailure', 'authnFailure', 'authzFailure', 'authFailure'];
+ const makeHook = (hookName, hookFn) => ({
+ hook_fn: hookFn,
+ hook_fn_name: `fake_plugin/${hookName}`,
+ hook_name: hookName,
+ part: { plugin: 'fake_plugin' },
});
- it('!authn !authz anonymous /admin/ -> 401', async function () {
- settings.requireAuthentication = false;
- settings.requireAuthorization = false;
- await agent.get('/admin/').expect(401);
- });
- it('authn !authz anonymous / -> 401', async function () {
- settings.requireAuthentication = true;
- settings.requireAuthorization = false;
- await agent.get('/').expect(401);
- });
- it('authn !authz user / -> 200', async function () {
- settings.requireAuthentication = true;
- settings.requireAuthorization = false;
- await agent.get('/').auth('user', 'user-password').expect(200);
- });
- it('authn !authz user /admin/ -> 403', async function () {
- settings.requireAuthentication = true;
- settings.requireAuthorization = false;
- await agent.get('/admin/').auth('user', 'user-password').expect(403);
- });
- it('authn !authz admin / -> 200', async function () {
- settings.requireAuthentication = true;
- settings.requireAuthorization = false;
- await agent.get('/').auth('admin', 'admin-password').expect(200);
- });
- it('authn !authz admin /admin/ -> 200', async function () {
- settings.requireAuthentication = true;
- settings.requireAuthorization = false;
- await agent.get('/admin/').auth('admin', 'admin-password').expect(200);
- });
- it('authn authz anonymous /robots.txt -> 200', async function () {
- settings.requireAuthentication = true;
- settings.requireAuthorization = true;
- await agent.get('/robots.txt').expect(200);
- });
- it('authn authz user / -> 403', async function () {
- settings.requireAuthentication = true;
- settings.requireAuthorization = true;
- await agent.get('/').auth('user', 'user-password').expect(403);
- });
- it('authn authz user /admin/ -> 403', async function () {
- settings.requireAuthentication = true;
- settings.requireAuthorization = true;
- await agent.get('/admin/').auth('user', 'user-password').expect(403);
- });
- it('authn authz admin / -> 200', async function () {
- settings.requireAuthentication = true;
- settings.requireAuthorization = true;
- await agent.get('/').auth('admin', 'admin-password').expect(200);
- });
- it('authn authz admin /admin/ -> 200', async function () {
- settings.requireAuthentication = true;
- settings.requireAuthorization = true;
- await agent.get('/admin/').auth('admin', 'admin-password').expect(200);
- });
-
- describe('login fails if password is nullish', function () {
- for (const adminPassword of [undefined, null]) {
- // https://tools.ietf.org/html/rfc7617 says that the username and password are sent as
- // base64(username + ':' + password), but there's nothing stopping a malicious user from
- // sending just base64(username) (no colon). The lack of colon could throw off credential
- // parsing, resulting in successful comparisons against a null or undefined password.
- for (const creds of ['admin', 'admin:']) {
- it(`admin password: ${adminPassword} credentials: ${creds}`, async function () {
- settings.users.admin.password = adminPassword;
- const encCreds = Buffer.from(creds).toString('base64');
- await agent.get('/admin/').set('Authorization', `Basic ${encCreds}`).expect(401);
- });
- }
- }
- });
- });
-
- describe('webaccess: preAuthorize, authenticate, and authorize hooks', function () {
- let callOrder;
- const Handler = class {
- constructor(hookName, suffix) {
- this.called = false;
- this.hookName = hookName;
- this.innerHandle = () => [];
- this.id = hookName + suffix;
- this.checkContext = () => {};
- }
- handle(hookName, context, cb) {
- assert.equal(hookName, this.hookName);
- assert(context != null);
- assert(context.req != null);
- assert(context.res != null);
- assert(context.next != null);
- this.checkContext(context);
- assert(!this.called);
- this.called = true;
- callOrder.push(this.id);
- return cb(this.innerHandle(context));
- }
- };
- const handlers = {};
-
+ before(async function () { agent = await common.init(); });
beforeEach(async function () {
- callOrder = [];
- for (const hookName of authHookNames) {
- // Create two handlers for each hook to test deferral to the next function.
- const h0 = new Handler(hookName, '_0');
- const h1 = new Handler(hookName, '_1');
- handlers[hookName] = [h0, h1];
- plugins.hooks[hookName] = [
- makeHook(hookName, h0.handle.bind(h0)),
- makeHook(hookName, h1.handle.bind(h1)),
- ];
- }
- });
-
- describe('preAuthorize', function () {
- beforeEach(async function () {
- settings.requireAuthentication = false;
- settings.requireAuthorization = false;
- });
-
- it('defers if it returns []', async function () {
- await agent.get('/').expect(200);
- // Note: The preAuthorize hook always runs even if requireAuthorization is false.
- assert.deepEqual(callOrder, ['preAuthorize_0', 'preAuthorize_1']);
- });
- it('bypasses authenticate and authorize hooks when true is returned', async function () {
- settings.requireAuthentication = true;
- settings.requireAuthorization = true;
- handlers.preAuthorize[0].innerHandle = () => [true];
- await agent.get('/').expect(200);
- assert.deepEqual(callOrder, ['preAuthorize_0']);
- });
- it('bypasses authenticate and authorize hooks when false is returned', async function () {
- settings.requireAuthentication = true;
- settings.requireAuthorization = true;
- handlers.preAuthorize[0].innerHandle = () => [false];
- await agent.get('/').expect(403);
- assert.deepEqual(callOrder, ['preAuthorize_0']);
- });
- it('bypasses authenticate and authorize hooks when next is called', async function () {
- settings.requireAuthentication = true;
- settings.requireAuthorization = true;
- handlers.preAuthorize[0].innerHandle = ({next}) => next();
- await agent.get('/').expect(200);
- assert.deepEqual(callOrder, ['preAuthorize_0']);
- });
- it('static content (expressPreSession) bypasses all auth checks', async function () {
- settings.requireAuthentication = true;
- settings.requireAuthorization = true;
- await agent.get('/static/robots.txt').expect(200);
- assert.deepEqual(callOrder, []);
- });
- it('cannot grant access to /admin', async function () {
- handlers.preAuthorize[0].innerHandle = () => [true];
- await agent.get('/admin/').expect(401);
- // Notes:
- // * preAuthorize[1] is called despite preAuthorize[0] returning a non-empty list because
- // 'true' entries are ignored for /admin/* requests.
- // * The authenticate hook always runs for /admin/* requests even if
- // settings.requireAuthentication is false.
- assert.deepEqual(callOrder, ['preAuthorize_0',
- 'preAuthorize_1',
- 'authenticate_0',
- 'authenticate_1']);
- });
- it('can deny access to /admin', async function () {
- handlers.preAuthorize[0].innerHandle = () => [false];
- await agent.get('/admin/').auth('admin', 'admin-password').expect(403);
- assert.deepEqual(callOrder, ['preAuthorize_0']);
- });
- it('runs preAuthzFailure hook when access is denied', async function () {
- handlers.preAuthorize[0].innerHandle = () => [false];
- let called = false;
- plugins.hooks.preAuthzFailure = [makeHook('preAuthzFailure', (hookName, {req, res}, cb) => {
- assert.equal(hookName, 'preAuthzFailure');
- assert(req != null);
- assert(res != null);
- assert(!called);
- called = true;
- res.status(200).send('injected');
- return cb([true]);
- })];
- await agent.get('/admin/').auth('admin', 'admin-password').expect(200, 'injected');
- assert(called);
- });
- it('returns 500 if an exception is thrown', async function () {
- handlers.preAuthorize[0].innerHandle = () => { throw new Error('exception test'); };
- await agent.get('/').expect(500);
- });
- });
-
- describe('authenticate', function () {
- beforeEach(async function () {
- settings.requireAuthentication = true;
- settings.requireAuthorization = false;
- });
-
- it('is not called if !requireAuthentication and not /admin/*', async function () {
- settings.requireAuthentication = false;
- await agent.get('/').expect(200);
- assert.deepEqual(callOrder, ['preAuthorize_0', 'preAuthorize_1']);
- });
- it('is called if !requireAuthentication and /admin/*', async function () {
+ backups.hooks = {};
+ for (const hookName of authHookNames.concat(failHookNames)) {
+ backups.hooks[hookName] = plugins.hooks[hookName];
+ plugins.hooks[hookName] = [];
+ }
+ backups.settings = {};
+ for (const setting of ['requireAuthentication', 'requireAuthorization', 'users']) {
+ backups.settings[setting] = settings[setting];
+ }
settings.requireAuthentication = false;
- await agent.get('/admin/').expect(401);
- assert.deepEqual(callOrder, ['preAuthorize_0',
- 'preAuthorize_1',
- 'authenticate_0',
- 'authenticate_1']);
- });
- it('defers if empty list returned', async function () {
- await agent.get('/').expect(401);
- assert.deepEqual(callOrder, ['preAuthorize_0',
- 'preAuthorize_1',
- 'authenticate_0',
- 'authenticate_1']);
- });
- it('does not defer if return [true], 200', async function () {
- handlers.authenticate[0].innerHandle = ({req}) => { req.session.user = {}; return [true]; };
- await agent.get('/').expect(200);
- // Note: authenticate_1 was not called because authenticate_0 handled it.
- assert.deepEqual(callOrder, ['preAuthorize_0', 'preAuthorize_1', 'authenticate_0']);
- });
- it('does not defer if return [false], 401', async function () {
- handlers.authenticate[0].innerHandle = () => [false];
- await agent.get('/').expect(401);
- // Note: authenticate_1 was not called because authenticate_0 handled it.
- assert.deepEqual(callOrder, ['preAuthorize_0', 'preAuthorize_1', 'authenticate_0']);
- });
- it('falls back to HTTP basic auth', async function () {
- await agent.get('/').auth('user', 'user-password').expect(200);
- assert.deepEqual(callOrder, ['preAuthorize_0',
- 'preAuthorize_1',
- 'authenticate_0',
- 'authenticate_1']);
- });
- it('passes settings.users in context', async function () {
- handlers.authenticate[0].checkContext = ({users}) => {
- assert.equal(users, settings.users);
- };
- await agent.get('/').expect(401);
- assert.deepEqual(callOrder, ['preAuthorize_0',
- 'preAuthorize_1',
- 'authenticate_0',
- 'authenticate_1']);
- });
- it('passes user, password in context if provided', async function () {
- handlers.authenticate[0].checkContext = ({username, password}) => {
- assert.equal(username, 'user');
- assert.equal(password, 'user-password');
- };
- await agent.get('/').auth('user', 'user-password').expect(200);
- assert.deepEqual(callOrder, ['preAuthorize_0',
- 'preAuthorize_1',
- 'authenticate_0',
- 'authenticate_1']);
- });
- it('does not pass user, password in context if not provided', async function () {
- handlers.authenticate[0].checkContext = ({username, password}) => {
- assert(username == null);
- assert(password == null);
- };
- await agent.get('/').expect(401);
- assert.deepEqual(callOrder, ['preAuthorize_0',
- 'preAuthorize_1',
- 'authenticate_0',
- 'authenticate_1']);
- });
- it('errors if req.session.user is not created', async function () {
- handlers.authenticate[0].innerHandle = () => [true];
- await agent.get('/').expect(500);
- assert.deepEqual(callOrder, ['preAuthorize_0', 'preAuthorize_1', 'authenticate_0']);
- });
- it('returns 500 if an exception is thrown', async function () {
- handlers.authenticate[0].innerHandle = () => { throw new Error('exception test'); };
- await agent.get('/').expect(500);
- assert.deepEqual(callOrder, ['preAuthorize_0', 'preAuthorize_1', 'authenticate_0']);
- });
- });
-
- describe('authorize', function () {
- beforeEach(async function () {
- settings.requireAuthentication = true;
- settings.requireAuthorization = true;
- });
-
- it('is not called if !requireAuthorization (non-/admin)', async function () {
settings.requireAuthorization = false;
- await agent.get('/').auth('user', 'user-password').expect(200);
- assert.deepEqual(callOrder, ['preAuthorize_0',
- 'preAuthorize_1',
- 'authenticate_0',
- 'authenticate_1']);
- });
- it('is not called if !requireAuthorization (/admin)', async function () {
- settings.requireAuthorization = false;
- await agent.get('/admin/').auth('admin', 'admin-password').expect(200);
- assert.deepEqual(callOrder, ['preAuthorize_0',
- 'preAuthorize_1',
- 'authenticate_0',
- 'authenticate_1']);
- });
- it('defers if empty list returned', async function () {
- await agent.get('/').auth('user', 'user-password').expect(403);
- assert.deepEqual(callOrder, ['preAuthorize_0',
- 'preAuthorize_1',
- 'authenticate_0',
- 'authenticate_1',
- 'authorize_0',
- 'authorize_1']);
- });
- it('does not defer if return [true], 200', async function () {
- handlers.authorize[0].innerHandle = () => [true];
- await agent.get('/').auth('user', 'user-password').expect(200);
- // Note: authorize_1 was not called because authorize_0 handled it.
- assert.deepEqual(callOrder, ['preAuthorize_0',
- 'preAuthorize_1',
- 'authenticate_0',
- 'authenticate_1',
- 'authorize_0']);
- });
- it('does not defer if return [false], 403', async function () {
- handlers.authorize[0].innerHandle = () => [false];
- await agent.get('/').auth('user', 'user-password').expect(403);
- // Note: authorize_1 was not called because authorize_0 handled it.
- assert.deepEqual(callOrder, ['preAuthorize_0',
- 'preAuthorize_1',
- 'authenticate_0',
- 'authenticate_1',
- 'authorize_0']);
- });
- it('passes req.path in context', async function () {
- handlers.authorize[0].checkContext = ({resource}) => {
- assert.equal(resource, '/');
+ settings.users = {
+ admin: { password: 'admin-password', is_admin: true },
+ user: { password: 'user-password' },
};
- await agent.get('/').auth('user', 'user-password').expect(403);
- assert.deepEqual(callOrder, ['preAuthorize_0',
- 'preAuthorize_1',
- 'authenticate_0',
- 'authenticate_1',
- 'authorize_0',
- 'authorize_1']);
- });
- it('returns 500 if an exception is thrown', async function () {
- handlers.authorize[0].innerHandle = () => { throw new Error('exception test'); };
- await agent.get('/').auth('user', 'user-password').expect(500);
- assert.deepEqual(callOrder, ['preAuthorize_0',
- 'preAuthorize_1',
- 'authenticate_0',
- 'authenticate_1',
- 'authorize_0']);
- });
});
- });
-
- describe('webaccess: authnFailure, authzFailure, authFailure hooks', function () {
- const Handler = class {
- constructor(hookName) {
- this.hookName = hookName;
- this.shouldHandle = false;
- this.called = false;
- }
- handle(hookName, context, cb) {
- assert.equal(hookName, this.hookName);
- assert(context != null);
- assert(context.req != null);
- assert(context.res != null);
- assert(!this.called);
- this.called = true;
- if (this.shouldHandle) {
- context.res.status(200).send(this.hookName);
- return cb([true]);
- }
- return cb([]);
- }
- };
- const handlers = {};
-
- beforeEach(async function () {
- failHookNames.forEach((hookName) => {
- const handler = new Handler(hookName);
- handlers[hookName] = handler;
- plugins.hooks[hookName] = [makeHook(hookName, handler.handle.bind(handler))];
- });
- settings.requireAuthentication = true;
- settings.requireAuthorization = true;
- });
-
- // authn failure tests
- it('authn fail, no hooks handle -> 401', async function () {
- await agent.get('/').expect(401);
- assert(handlers.authnFailure.called);
- assert(!handlers.authzFailure.called);
- assert(handlers.authFailure.called);
- });
- it('authn fail, authnFailure handles', async function () {
- handlers.authnFailure.shouldHandle = true;
- await agent.get('/').expect(200, 'authnFailure');
- assert(handlers.authnFailure.called);
- assert(!handlers.authzFailure.called);
- assert(!handlers.authFailure.called);
- });
- it('authn fail, authFailure handles', async function () {
- handlers.authFailure.shouldHandle = true;
- await agent.get('/').expect(200, 'authFailure');
- assert(handlers.authnFailure.called);
- assert(!handlers.authzFailure.called);
- assert(handlers.authFailure.called);
+ afterEach(async function () {
+ Object.assign(plugins.hooks, backups.hooks);
+ Object.assign(settings, backups.settings);
});
- it('authnFailure trumps authFailure', async function () {
- handlers.authnFailure.shouldHandle = true;
- handlers.authFailure.shouldHandle = true;
- await agent.get('/').expect(200, 'authnFailure');
- assert(handlers.authnFailure.called);
- assert(!handlers.authFailure.called);
+ describe('webaccess: without plugins', function () {
+ it('!authn !authz anonymous / -> 200', async function () {
+ settings.requireAuthentication = false;
+ settings.requireAuthorization = false;
+ await agent.get('/').expect(200);
+ });
+ it('!authn !authz anonymous /admin/ -> 401', async function () {
+ settings.requireAuthentication = false;
+ settings.requireAuthorization = false;
+ await agent.get('/admin/').expect(401);
+ });
+ it('authn !authz anonymous / -> 401', async function () {
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = false;
+ await agent.get('/').expect(401);
+ });
+ it('authn !authz user / -> 200', async function () {
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = false;
+ await agent.get('/').auth('user', 'user-password').expect(200);
+ });
+ it('authn !authz user /admin/ -> 403', async function () {
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = false;
+ await agent.get('/admin/').auth('user', 'user-password').expect(403);
+ });
+ it('authn !authz admin / -> 200', async function () {
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = false;
+ await agent.get('/').auth('admin', 'admin-password').expect(200);
+ });
+ it('authn !authz admin /admin/ -> 200', async function () {
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = false;
+ await agent.get('/admin/').auth('admin', 'admin-password').expect(200);
+ });
+ it('authn authz anonymous /robots.txt -> 200', async function () {
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = true;
+ await agent.get('/robots.txt').expect(200);
+ });
+ it('authn authz user / -> 403', async function () {
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = true;
+ await agent.get('/').auth('user', 'user-password').expect(403);
+ });
+ it('authn authz user /admin/ -> 403', async function () {
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = true;
+ await agent.get('/admin/').auth('user', 'user-password').expect(403);
+ });
+ it('authn authz admin / -> 200', async function () {
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = true;
+ await agent.get('/').auth('admin', 'admin-password').expect(200);
+ });
+ it('authn authz admin /admin/ -> 200', async function () {
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = true;
+ await agent.get('/admin/').auth('admin', 'admin-password').expect(200);
+ });
+ describe('login fails if password is nullish', function () {
+ for (const adminPassword of [undefined, null]) {
+ // https://tools.ietf.org/html/rfc7617 says that the username and password are sent as
+ // base64(username + ':' + password), but there's nothing stopping a malicious user from
+ // sending just base64(username) (no colon). The lack of colon could throw off credential
+ // parsing, resulting in successful comparisons against a null or undefined password.
+ for (const creds of ['admin', 'admin:']) {
+ it(`admin password: ${adminPassword} credentials: ${creds}`, async function () {
+ settings.users.admin.password = adminPassword;
+ const encCreds = Buffer.from(creds).toString('base64');
+ await agent.get('/admin/').set('Authorization', `Basic ${encCreds}`).expect(401);
+ });
+ }
+ }
+ });
});
-
- // authz failure tests
- it('authz fail, no hooks handle -> 403', async function () {
- await agent.get('/').auth('user', 'user-password').expect(403);
- assert(!handlers.authnFailure.called);
- assert(handlers.authzFailure.called);
- assert(handlers.authFailure.called);
- });
- it('authz fail, authzFailure handles', async function () {
- handlers.authzFailure.shouldHandle = true;
- await agent.get('/').auth('user', 'user-password').expect(200, 'authzFailure');
- assert(!handlers.authnFailure.called);
- assert(handlers.authzFailure.called);
- assert(!handlers.authFailure.called);
- });
- it('authz fail, authFailure handles', async function () {
- handlers.authFailure.shouldHandle = true;
- await agent.get('/').auth('user', 'user-password').expect(200, 'authFailure');
- assert(!handlers.authnFailure.called);
- assert(handlers.authzFailure.called);
- assert(handlers.authFailure.called);
+ describe('webaccess: preAuthorize, authenticate, and authorize hooks', function () {
+ let callOrder;
+ const Handler = class {
+ constructor(hookName, suffix) {
+ this.called = false;
+ this.hookName = hookName;
+ this.innerHandle = () => [];
+ this.id = hookName + suffix;
+ this.checkContext = () => { };
+ }
+ handle(hookName, context, cb) {
+ assert.equal(hookName, this.hookName);
+ assert(context != null);
+ assert(context.req != null);
+ assert(context.res != null);
+ assert(context.next != null);
+ this.checkContext(context);
+ assert(!this.called);
+ this.called = true;
+ callOrder.push(this.id);
+ return cb(this.innerHandle(context));
+ }
+ };
+ const handlers = {};
+ beforeEach(async function () {
+ callOrder = [];
+ for (const hookName of authHookNames) {
+ // Create two handlers for each hook to test deferral to the next function.
+ const h0 = new Handler(hookName, '_0');
+ const h1 = new Handler(hookName, '_1');
+ handlers[hookName] = [h0, h1];
+ plugins.hooks[hookName] = [
+ makeHook(hookName, h0.handle.bind(h0)),
+ makeHook(hookName, h1.handle.bind(h1)),
+ ];
+ }
+ });
+ describe('preAuthorize', function () {
+ beforeEach(async function () {
+ settings.requireAuthentication = false;
+ settings.requireAuthorization = false;
+ });
+ it('defers if it returns []', async function () {
+ await agent.get('/').expect(200);
+ // Note: The preAuthorize hook always runs even if requireAuthorization is false.
+ assert.deepEqual(callOrder, ['preAuthorize_0', 'preAuthorize_1']);
+ });
+ it('bypasses authenticate and authorize hooks when true is returned', async function () {
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = true;
+ handlers.preAuthorize[0].innerHandle = () => [true];
+ await agent.get('/').expect(200);
+ assert.deepEqual(callOrder, ['preAuthorize_0']);
+ });
+ it('bypasses authenticate and authorize hooks when false is returned', async function () {
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = true;
+ handlers.preAuthorize[0].innerHandle = () => [false];
+ await agent.get('/').expect(403);
+ assert.deepEqual(callOrder, ['preAuthorize_0']);
+ });
+ it('bypasses authenticate and authorize hooks when next is called', async function () {
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = true;
+ handlers.preAuthorize[0].innerHandle = ({ next }) => next();
+ await agent.get('/').expect(200);
+ assert.deepEqual(callOrder, ['preAuthorize_0']);
+ });
+ it('static content (expressPreSession) bypasses all auth checks', async function () {
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = true;
+ await agent.get('/static/robots.txt').expect(200);
+ assert.deepEqual(callOrder, []);
+ });
+ it('cannot grant access to /admin', async function () {
+ handlers.preAuthorize[0].innerHandle = () => [true];
+ await agent.get('/admin/').expect(401);
+ // Notes:
+ // * preAuthorize[1] is called despite preAuthorize[0] returning a non-empty list because
+ // 'true' entries are ignored for /admin/* requests.
+ // * The authenticate hook always runs for /admin/* requests even if
+ // settings.requireAuthentication is false.
+ assert.deepEqual(callOrder, ['preAuthorize_0',
+ 'preAuthorize_1',
+ 'authenticate_0',
+ 'authenticate_1']);
+ });
+ it('can deny access to /admin', async function () {
+ handlers.preAuthorize[0].innerHandle = () => [false];
+ await agent.get('/admin/').auth('admin', 'admin-password').expect(403);
+ assert.deepEqual(callOrder, ['preAuthorize_0']);
+ });
+ it('runs preAuthzFailure hook when access is denied', async function () {
+ handlers.preAuthorize[0].innerHandle = () => [false];
+ let called = false;
+ plugins.hooks.preAuthzFailure = [makeHook('preAuthzFailure', (hookName, { req, res }, cb) => {
+ assert.equal(hookName, 'preAuthzFailure');
+ assert(req != null);
+ assert(res != null);
+ assert(!called);
+ called = true;
+ res.status(200).send('injected');
+ return cb([true]);
+ })];
+ await agent.get('/admin/').auth('admin', 'admin-password').expect(200, 'injected');
+ assert(called);
+ });
+ it('returns 500 if an exception is thrown', async function () {
+ handlers.preAuthorize[0].innerHandle = () => { throw new Error('exception test'); };
+ await agent.get('/').expect(500);
+ });
+ });
+ describe('authenticate', function () {
+ beforeEach(async function () {
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = false;
+ });
+ it('is not called if !requireAuthentication and not /admin/*', async function () {
+ settings.requireAuthentication = false;
+ await agent.get('/').expect(200);
+ assert.deepEqual(callOrder, ['preAuthorize_0', 'preAuthorize_1']);
+ });
+ it('is called if !requireAuthentication and /admin/*', async function () {
+ settings.requireAuthentication = false;
+ await agent.get('/admin/').expect(401);
+ assert.deepEqual(callOrder, ['preAuthorize_0',
+ 'preAuthorize_1',
+ 'authenticate_0',
+ 'authenticate_1']);
+ });
+ it('defers if empty list returned', async function () {
+ await agent.get('/').expect(401);
+ assert.deepEqual(callOrder, ['preAuthorize_0',
+ 'preAuthorize_1',
+ 'authenticate_0',
+ 'authenticate_1']);
+ });
+ it('does not defer if return [true], 200', async function () {
+ handlers.authenticate[0].innerHandle = ({ req }) => { req.session.user = {}; return [true]; };
+ await agent.get('/').expect(200);
+ // Note: authenticate_1 was not called because authenticate_0 handled it.
+ assert.deepEqual(callOrder, ['preAuthorize_0', 'preAuthorize_1', 'authenticate_0']);
+ });
+ it('does not defer if return [false], 401', async function () {
+ handlers.authenticate[0].innerHandle = () => [false];
+ await agent.get('/').expect(401);
+ // Note: authenticate_1 was not called because authenticate_0 handled it.
+ assert.deepEqual(callOrder, ['preAuthorize_0', 'preAuthorize_1', 'authenticate_0']);
+ });
+ it('falls back to HTTP basic auth', async function () {
+ await agent.get('/').auth('user', 'user-password').expect(200);
+ assert.deepEqual(callOrder, ['preAuthorize_0',
+ 'preAuthorize_1',
+ 'authenticate_0',
+ 'authenticate_1']);
+ });
+ it('passes settings.users in context', async function () {
+ handlers.authenticate[0].checkContext = ({ users }) => {
+ assert.equal(users, settings.users);
+ };
+ await agent.get('/').expect(401);
+ assert.deepEqual(callOrder, ['preAuthorize_0',
+ 'preAuthorize_1',
+ 'authenticate_0',
+ 'authenticate_1']);
+ });
+ it('passes user, password in context if provided', async function () {
+ handlers.authenticate[0].checkContext = ({ username, password }) => {
+ assert.equal(username, 'user');
+ assert.equal(password, 'user-password');
+ };
+ await agent.get('/').auth('user', 'user-password').expect(200);
+ assert.deepEqual(callOrder, ['preAuthorize_0',
+ 'preAuthorize_1',
+ 'authenticate_0',
+ 'authenticate_1']);
+ });
+ it('does not pass user, password in context if not provided', async function () {
+ handlers.authenticate[0].checkContext = ({ username, password }) => {
+ assert(username == null);
+ assert(password == null);
+ };
+ await agent.get('/').expect(401);
+ assert.deepEqual(callOrder, ['preAuthorize_0',
+ 'preAuthorize_1',
+ 'authenticate_0',
+ 'authenticate_1']);
+ });
+ it('errors if req.session.user is not created', async function () {
+ handlers.authenticate[0].innerHandle = () => [true];
+ await agent.get('/').expect(500);
+ assert.deepEqual(callOrder, ['preAuthorize_0', 'preAuthorize_1', 'authenticate_0']);
+ });
+ it('returns 500 if an exception is thrown', async function () {
+ handlers.authenticate[0].innerHandle = () => { throw new Error('exception test'); };
+ await agent.get('/').expect(500);
+ assert.deepEqual(callOrder, ['preAuthorize_0', 'preAuthorize_1', 'authenticate_0']);
+ });
+ });
+ describe('authorize', function () {
+ beforeEach(async function () {
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = true;
+ });
+ it('is not called if !requireAuthorization (non-/admin)', async function () {
+ settings.requireAuthorization = false;
+ await agent.get('/').auth('user', 'user-password').expect(200);
+ assert.deepEqual(callOrder, ['preAuthorize_0',
+ 'preAuthorize_1',
+ 'authenticate_0',
+ 'authenticate_1']);
+ });
+ it('is not called if !requireAuthorization (/admin)', async function () {
+ settings.requireAuthorization = false;
+ await agent.get('/admin/').auth('admin', 'admin-password').expect(200);
+ assert.deepEqual(callOrder, ['preAuthorize_0',
+ 'preAuthorize_1',
+ 'authenticate_0',
+ 'authenticate_1']);
+ });
+ it('defers if empty list returned', async function () {
+ await agent.get('/').auth('user', 'user-password').expect(403);
+ assert.deepEqual(callOrder, ['preAuthorize_0',
+ 'preAuthorize_1',
+ 'authenticate_0',
+ 'authenticate_1',
+ 'authorize_0',
+ 'authorize_1']);
+ });
+ it('does not defer if return [true], 200', async function () {
+ handlers.authorize[0].innerHandle = () => [true];
+ await agent.get('/').auth('user', 'user-password').expect(200);
+ // Note: authorize_1 was not called because authorize_0 handled it.
+ assert.deepEqual(callOrder, ['preAuthorize_0',
+ 'preAuthorize_1',
+ 'authenticate_0',
+ 'authenticate_1',
+ 'authorize_0']);
+ });
+ it('does not defer if return [false], 403', async function () {
+ handlers.authorize[0].innerHandle = () => [false];
+ await agent.get('/').auth('user', 'user-password').expect(403);
+ // Note: authorize_1 was not called because authorize_0 handled it.
+ assert.deepEqual(callOrder, ['preAuthorize_0',
+ 'preAuthorize_1',
+ 'authenticate_0',
+ 'authenticate_1',
+ 'authorize_0']);
+ });
+ it('passes req.path in context', async function () {
+ handlers.authorize[0].checkContext = ({ resource }) => {
+ assert.equal(resource, '/');
+ };
+ await agent.get('/').auth('user', 'user-password').expect(403);
+ assert.deepEqual(callOrder, ['preAuthorize_0',
+ 'preAuthorize_1',
+ 'authenticate_0',
+ 'authenticate_1',
+ 'authorize_0',
+ 'authorize_1']);
+ });
+ it('returns 500 if an exception is thrown', async function () {
+ handlers.authorize[0].innerHandle = () => { throw new Error('exception test'); };
+ await agent.get('/').auth('user', 'user-password').expect(500);
+ assert.deepEqual(callOrder, ['preAuthorize_0',
+ 'preAuthorize_1',
+ 'authenticate_0',
+ 'authenticate_1',
+ 'authorize_0']);
+ });
+ });
});
- it('authzFailure trumps authFailure', async function () {
- handlers.authzFailure.shouldHandle = true;
- handlers.authFailure.shouldHandle = true;
- await agent.get('/').auth('user', 'user-password').expect(200, 'authzFailure');
- assert(handlers.authzFailure.called);
- assert(!handlers.authFailure.called);
+ describe('webaccess: authnFailure, authzFailure, authFailure hooks', function () {
+ const Handler = class {
+ constructor(hookName) {
+ this.hookName = hookName;
+ this.shouldHandle = false;
+ this.called = false;
+ }
+ handle(hookName, context, cb) {
+ assert.equal(hookName, this.hookName);
+ assert(context != null);
+ assert(context.req != null);
+ assert(context.res != null);
+ assert(!this.called);
+ this.called = true;
+ if (this.shouldHandle) {
+ context.res.status(200).send(this.hookName);
+ return cb([true]);
+ }
+ return cb([]);
+ }
+ };
+ const handlers = {};
+ beforeEach(async function () {
+ failHookNames.forEach((hookName) => {
+ const handler = new Handler(hookName);
+ handlers[hookName] = handler;
+ plugins.hooks[hookName] = [makeHook(hookName, handler.handle.bind(handler))];
+ });
+ settings.requireAuthentication = true;
+ settings.requireAuthorization = true;
+ });
+ // authn failure tests
+ it('authn fail, no hooks handle -> 401', async function () {
+ await agent.get('/').expect(401);
+ assert(handlers.authnFailure.called);
+ assert(!handlers.authzFailure.called);
+ assert(handlers.authFailure.called);
+ });
+ it('authn fail, authnFailure handles', async function () {
+ handlers.authnFailure.shouldHandle = true;
+ await agent.get('/').expect(200, 'authnFailure');
+ assert(handlers.authnFailure.called);
+ assert(!handlers.authzFailure.called);
+ assert(!handlers.authFailure.called);
+ });
+ it('authn fail, authFailure handles', async function () {
+ handlers.authFailure.shouldHandle = true;
+ await agent.get('/').expect(200, 'authFailure');
+ assert(handlers.authnFailure.called);
+ assert(!handlers.authzFailure.called);
+ assert(handlers.authFailure.called);
+ });
+ it('authnFailure trumps authFailure', async function () {
+ handlers.authnFailure.shouldHandle = true;
+ handlers.authFailure.shouldHandle = true;
+ await agent.get('/').expect(200, 'authnFailure');
+ assert(handlers.authnFailure.called);
+ assert(!handlers.authFailure.called);
+ });
+ // authz failure tests
+ it('authz fail, no hooks handle -> 403', async function () {
+ await agent.get('/').auth('user', 'user-password').expect(403);
+ assert(!handlers.authnFailure.called);
+ assert(handlers.authzFailure.called);
+ assert(handlers.authFailure.called);
+ });
+ it('authz fail, authzFailure handles', async function () {
+ handlers.authzFailure.shouldHandle = true;
+ await agent.get('/').auth('user', 'user-password').expect(200, 'authzFailure');
+ assert(!handlers.authnFailure.called);
+ assert(handlers.authzFailure.called);
+ assert(!handlers.authFailure.called);
+ });
+ it('authz fail, authFailure handles', async function () {
+ handlers.authFailure.shouldHandle = true;
+ await agent.get('/').auth('user', 'user-password').expect(200, 'authFailure');
+ assert(!handlers.authnFailure.called);
+ assert(handlers.authzFailure.called);
+ assert(handlers.authFailure.called);
+ });
+ it('authzFailure trumps authFailure', async function () {
+ handlers.authzFailure.shouldHandle = true;
+ handlers.authFailure.shouldHandle = true;
+ await agent.get('/').auth('user', 'user-password').expect(200, 'authzFailure');
+ assert(handlers.authzFailure.called);
+ assert(!handlers.authFailure.called);
+ });
});
- });
});
From aa6323e4884dd3acefec18448d3f7c68ecce3d7c Mon Sep 17 00:00:00 2001
From: SamTV12345 <40429738+samtv12345@users.noreply.github.com>
Date: Sun, 25 Jun 2023 13:22:01 +0200
Subject: [PATCH 06/11] Fixed startup to "Running npm to get a list of
installed plugins"
---
src/node/db/API.ts | 14 +-
src/node/handler/PadMessageHandler.ts | 64 +-
src/node/hooks/i18n.ts | 2 +-
src/node/utils/ExportHelper.ts | 8 +-
src/node/utils/ExportHtml.ts | 30 +-
src/node/utils/ImportHtml.ts | 14 +-
src/node/utils/Settings.ts | 4 +-
src/node/utils/UpdateCheck.ts | 7 +-
src/node/utils/padDiff.ts | 79 +-
src/package-lock.json | 9 +-
src/package.json | 3 +-
...ttributeManager.js => AttributeManager.ts} | 6 +-
.../js/{AttributeMap.js => AttributeMap.ts} | 1 +
src/static/js/{Changeset.js => Changeset.ts} | 37 +-
.../{ChangesetUtils.js => ChangesetUtils.ts} | 2 +-
.../js/{ChatMessage.js => ChatMessage.ts} | 11 +-
src/static/js/ace.ts | 13 +-
.../js/{attributes.js => attributes.ts} | 0
...rror_handler.js => basic_error_handler.ts} | 4 +-
src/static/js/{broadcast.js => broadcast.ts} | 65 +-
...st_revisions.js => broadcast_revisions.ts} | 12 +-
...roadcast_slider.js => broadcast_slider.ts} | 28 +-
.../js/{caretPosition.js => caretPosition.ts} | 4 +-
...hangesettracker.js => changesettracker.ts} | 5 +-
src/static/js/{chat.js => chat.ts} | 33 +-
.../js/{collab_client.js => collab_client.ts} | 38 +-
src/static/js/colorutils.js | 102 --
src/static/js/colorutils.ts | 113 +++
...ontentcollector.js => contentcollector.ts} | 456 +++++++--
.../js/{cssmanager.js => cssmanager.ts} | 0
src/static/js/domline.js | 244 -----
src/static/js/domline.ts | 408 ++++++++
src/static/js/{index.js => index.ts} | 15 +-
src/static/js/l10n.js | 14 -
...{linestylefilter.js => linestylefilter.ts} | 247 ++---
src/static/js/{pad.js => pad.ts} | 10 +-
...econnect.js => pad_automatic_reconnect.ts} | 7 +-
...ctionstatus.js => pad_connectionstatus.ts} | 9 +-
.../js/{pad_cookie.js => pad_cookie.ts} | 9 +-
.../js/{pad_editbar.js => pad_editbar.ts} | 2 +
.../js/{pad_editor.js => pad_editor.ts} | 2 +
.../js/{pad_impexp.js => pad_impexp.ts} | 28 +-
.../js/{pad_modals.js => pad_modals.ts} | 0
.../js/{pad_savedrevs.js => pad_savedrevs.ts} | 9 +-
.../js/{pad_userlist.js => pad_userlist.ts} | 50 +-
src/static/js/pad_utils.ts | 15 +-
.../{client_plugins.js => client_plugins.ts} | 2 +
src/static/js/pluginfw/plugin_defs.ts | 4 +-
src/static/js/pluginfw/plugins.ts | 8 +-
src/static/js/{rjquery.js => rjquery.ts} | 2 +
src/static/js/{scroll.js => scroll.ts} | 7 +-
src/static/js/security.js | 2 -
src/static/js/security.ts | 10 +
.../js/{skin_variants.js => skin_variants.ts} | 0
src/static/js/{skiplist.js => skiplist.ts} | 18 +-
src/static/js/{socketio.js => socketio.ts} | 8 +-
.../js/{timeslider.js => timeslider.ts} | 2 +
src/static/js/underscore.js | 2 -
.../js/{undomodule.js => undomodule.ts} | 2 +-
src/static/js/vendors/html10n.js | 943 ------------------
src/static/js/vendors/i18next.ts | 15 +
src/static/module/CustomWindow.ts | 40 +
src/tsconfig.json | 3 +-
63 files changed, 1535 insertions(+), 1766 deletions(-)
rename src/static/js/{AttributeManager.js => AttributeManager.ts} (99%)
rename src/static/js/{AttributeMap.js => AttributeMap.ts} (99%)
rename src/static/js/{Changeset.js => Changeset.ts} (98%)
rename src/static/js/{ChangesetUtils.js => ChangesetUtils.ts} (98%)
rename src/static/js/{ChatMessage.js => ChatMessage.ts} (92%)
rename src/static/js/{attributes.js => attributes.ts} (100%)
rename src/static/js/{basic_error_handler.js => basic_error_handler.ts} (94%)
rename src/static/js/{broadcast.js => broadcast.ts} (89%)
rename src/static/js/{broadcast_revisions.js => broadcast_revisions.ts} (92%)
rename src/static/js/{broadcast_slider.js => broadcast_slider.ts} (89%)
rename src/static/js/{caretPosition.js => caretPosition.ts} (97%)
rename src/static/js/{changesettracker.js => changesettracker.ts} (97%)
rename src/static/js/{chat.js => chat.ts} (90%)
mode change 100755 => 100644
rename src/static/js/{collab_client.js => collab_client.ts} (94%)
delete mode 100644 src/static/js/colorutils.js
create mode 100644 src/static/js/colorutils.ts
rename src/static/js/{contentcollector.js => contentcollector.ts} (57%)
rename src/static/js/{cssmanager.js => cssmanager.ts} (100%)
delete mode 100644 src/static/js/domline.js
create mode 100644 src/static/js/domline.ts
rename src/static/js/{index.js => index.ts} (83%)
delete mode 100644 src/static/js/l10n.js
rename src/static/js/{linestylefilter.js => linestylefilter.ts} (51%)
rename src/static/js/{pad.js => pad.ts} (99%)
rename src/static/js/{pad_automatic_reconnect.js => pad_automatic_reconnect.ts} (96%)
rename src/static/js/{pad_connectionstatus.js => pad_connectionstatus.ts} (95%)
rename src/static/js/{pad_cookie.js => pad_cookie.ts} (87%)
rename src/static/js/{pad_editbar.js => pad_editbar.ts} (99%)
rename src/static/js/{pad_editor.js => pad_editor.ts} (99%)
rename src/static/js/{pad_impexp.js => pad_impexp.ts} (85%)
rename src/static/js/{pad_modals.js => pad_modals.ts} (100%)
rename src/static/js/{pad_savedrevs.js => pad_savedrevs.ts} (81%)
rename src/static/js/{pad_userlist.js => pad_userlist.ts} (94%)
rename src/static/js/pluginfw/{client_plugins.js => client_plugins.ts} (99%)
rename src/static/js/{rjquery.js => rjquery.ts} (73%)
rename src/static/js/{scroll.js => scroll.ts} (97%)
delete mode 100644 src/static/js/security.js
create mode 100644 src/static/js/security.ts
rename src/static/js/{skin_variants.js => skin_variants.ts} (100%)
rename src/static/js/{skiplist.js => skiplist.ts} (96%)
rename src/static/js/{socketio.js => socketio.ts} (84%)
rename src/static/js/{timeslider.js => timeslider.ts} (98%)
delete mode 100644 src/static/js/underscore.js
rename src/static/js/{undomodule.js => undomodule.ts} (99%)
delete mode 100644 src/static/js/vendors/html10n.js
create mode 100644 src/static/js/vendors/i18next.ts
diff --git a/src/node/db/API.ts b/src/node/db/API.ts
index 6f585ccee09..5f07339085b 100644
--- a/src/node/db/API.ts
+++ b/src/node/db/API.ts
@@ -19,7 +19,7 @@
* limitations under the License.
*/
-import Changeset from '../../static/js/Changeset';
+import {builder, deserializeOps} from '../../static/js/Changeset';
import ChatMessage from '../../static/js/ChatMessage';
import {CustomError} from '../utils/customError';
import {doesPadExist, getPad, isValidPadId, listAllPads} from './PadManager';
@@ -518,7 +518,7 @@ export const restoreRevision = async (padID, rev, authorId = '') => {
let textIndex = 0;
const newTextStart = 0;
const newTextEnd = atext.text.length;
- for (const op of Changeset.deserializeOps(attribs)) {
+ for (const op of deserializeOps(attribs)) {
const nextIndex = textIndex + op.chars;
if (!(nextIndex <= newTextStart || textIndex >= newTextEnd)) {
func(Math.max(newTextStart, textIndex), Math.min(newTextEnd, nextIndex), op.attribs);
@@ -528,19 +528,19 @@ export const restoreRevision = async (padID, rev, authorId = '') => {
};
// create a new changeset with a helper builder object
- const builder = Changeset.builder(oldText.length);
+ const builder2 = builder(oldText.length);
// assemble each line into the builder
eachAttribRun(atext.attribs, (start, end, attribs) => {
- builder.insert(atext.text.substring(start, end), attribs);
+ builder2.insert(atext.text.substring(start, end), attribs);
});
const lastNewlinePos = oldText.lastIndexOf('\n');
if (lastNewlinePos < 0) {
- builder.remove(oldText.length - 1, 0);
+ builder2.remove(oldText.length - 1, 0);
} else {
- builder.remove(lastNewlinePos, oldText.match(/\n/g).length - 1);
- builder.remove(oldText.length - lastNewlinePos - 1, 0);
+ builder2.remove(lastNewlinePos, oldText.match(/\n/g).length - 1);
+ builder2.remove(oldText.length - lastNewlinePos - 1, 0);
}
const changeset = builder.toString();
diff --git a/src/node/handler/PadMessageHandler.ts b/src/node/handler/PadMessageHandler.ts
index 07f939fa713..52f47092612 100644
--- a/src/node/handler/PadMessageHandler.ts
+++ b/src/node/handler/PadMessageHandler.ts
@@ -21,7 +21,16 @@
import AttributeMap from '../../static/js/AttributeMap';
import {getPad} from '../db/PadManager';
-import {} from '../../static/js/Changeset';
+import {
+ builder,
+ checkRep, cloneAText, compose,
+ deserializeOps,
+ follow, inverse, makeAText,
+ makeSplice,
+ moveOpsToNewPool, mutateAttributionLines, mutateTextLines,
+ oldLen, prepareForWire, splitAttributionLines, splitTextLines,
+ unpack
+} from '../../static/js/Changeset';
import ChatMessage from '../../static/js/ChatMessage';
import {AttributePool} from '../../static/js/AttributePool';
import AttributeManager from '../../static/js/AttributeManager';
@@ -62,6 +71,7 @@ import {ErrorCaused} from "../models/ErrorCaused";
import {Pad} from "../db/Pad";
import {SessionInfo} from "../models/SessionInfo";
import {randomString} from "../utils/randomstring";
+import {identity} from "lodash";
const securityManager = require('../db/SecurityManager');
@@ -610,10 +620,10 @@ const handleUserChanges = async (socket, message) => {
const pad = await getPad(thisSession.padId, null, thisSession.author);
// Verify that the changeset has valid syntax and is in canonical form
- Changeset.checkRep(changeset);
+ checkRep(changeset);
// Validate all added 'author' attribs to be the same value as the current user
- for (const op of Changeset.deserializeOps(Changeset.unpack(changeset).ops)) {
+ for (const op of deserializeOps(unpack(changeset).ops)) {
// + can add text with attribs
// = can change or add attribs
// - can have attribs, but they are discarded and don't show up in the attribs -
@@ -632,7 +642,7 @@ const handleUserChanges = async (socket, message) => {
// ex. adoptChangesetAttribs
// Afaik, it copies the new attributes from the changeset, to the global Attribute Pool
- let rebasedChangeset = Changeset.moveOpsToNewPool(changeset, wireApool, pad.pool);
+ let rebasedChangeset = moveOpsToNewPool(changeset, wireApool, pad.pool);
// ex. applyUserChanges
let r = baseRev;
@@ -645,21 +655,21 @@ const handleUserChanges = async (socket, message) => {
const {changeset: c, meta: {author: authorId}} = await pad.getRevision(r);
if (changeset === c && thisSession.author === authorId) {
// Assume this is a retransmission of an already applied changeset.
- rebasedChangeset = Changeset.identity(Changeset.unpack(changeset).oldLen);
+ rebasedChangeset = identity(unpack(changeset).oldLen);
}
// At this point, both "c" (from the pad) and "changeset" (from the
// client) are relative to revision r - 1. The follow function
// rebases "changeset" so that it is relative to revision r
// and can be applied after "c".
- rebasedChangeset = Changeset.follow(c, rebasedChangeset, false, pad.pool);
+ rebasedChangeset = follow(c, rebasedChangeset, false, pad.pool);
}
const prevText = pad.text();
- if (Changeset.oldLen(rebasedChangeset) !== prevText.length) {
+ if (oldLen(rebasedChangeset) !== prevText.length) {
throw new Error(
`Can't apply changeset ${rebasedChangeset} with oldLen ` +
- `${Changeset.oldLen(rebasedChangeset)} to document of length ${prevText.length}`);
+ `${oldLen(rebasedChangeset)} to document of length ${prevText.length}`);
}
const newRev = await pad.appendRevision(rebasedChangeset, thisSession.author);
@@ -674,7 +684,7 @@ const handleUserChanges = async (socket, message) => {
// Make sure the pad always ends with an empty line.
if (pad.text().lastIndexOf('\n') !== pad.text().length - 1) {
- const nlChangeset = Changeset.makeSplice(pad.text(), pad.text().length - 1, 0, '\n');
+ const nlChangeset = makeSplice(pad.text(), pad.text().length - 1, 0, '\n');
await pad.appendRevision(nlChangeset, thisSession.author);
}
@@ -729,7 +739,7 @@ export const updatePadClients = async (pad) => {
const revChangeset = revision.changeset;
const currentTime = revision.meta.timestamp;
- const forWire = Changeset.prepareForWire(revChangeset, pad.pool);
+ const forWire = prepareForWire(revChangeset, pad.pool);
const msg = {
type: 'COLLABROOM',
data: {
@@ -764,7 +774,7 @@ const _correctMarkersInPad = (atext, apool) => {
// that aren't at the start of a line
const badMarkers = [];
let offset = 0;
- for (const op of Changeset.deserializeOps(atext.attribs)) {
+ for (const op of deserializeOps(atext.attribs)) {
const attribs = AttributeMap.fromString(op.attribs, apool);
const hasMarker = AttributeManager.lineAttributes.some((a) => attribs.has(a));
if (hasMarker) {
@@ -786,15 +796,15 @@ const _correctMarkersInPad = (atext, apool) => {
// create changeset that removes these bad markers
offset = 0;
- const builder = Changeset.builder(text.length);
+ const builder2 = builder(text.length);
badMarkers.forEach((pos) => {
- builder.keepText(text.substring(offset, pos));
- builder.remove(1);
+ builder2.keepText(text.substring(offset, pos));
+ builder2.remove(1);
offset = pos + 1;
});
- return builder.toString();
+ return builder2.toString();
};
export let clientVars:any
@@ -918,7 +928,7 @@ const handleClientReady = async (socket, message) => {
// return pending changesets
for (const r of revisionsNeeded) {
- const forWire = Changeset.prepareForWire(changesets[r].changeset, pad.pool);
+ const forWire = prepareForWire(changesets[r].changeset, pad.pool);
const wireMsg = {type: 'COLLABROOM',
data: {type: 'CLIENT_RECONNECT',
headRev: pad.getHeadRevisionNumber(),
@@ -943,8 +953,8 @@ const handleClientReady = async (socket, message) => {
let apool;
// prepare all values for the wire, there's a chance that this throws, if the pad is corrupted
try {
- atext = Changeset.cloneAText(pad.atext);
- const attribsForWire = Changeset.prepareForWire(atext.attribs, pad.pool);
+ atext = cloneAText(pad.atext);
+ const attribsForWire = prepareForWire(atext.attribs, pad.pool);
apool = attribsForWire.pool.toJsonable();
atext.attribs = attribsForWire.translated;
} catch (e) {
@@ -1175,13 +1185,13 @@ const getChangesetInfo = async (pad: Pad, startNum: number, endNum: number, gran
if (compositeEnd > endNum || compositeEnd > headRevision + 1) break;
const forwards = composedChangesets[`${compositeStart}/${compositeEnd}`];
- const backwards = Changeset.inverse(forwards, lines.textlines, lines.alines, pad.apool());
+ const backwards = inverse(forwards, lines.textlines, lines.alines, pad.apool());
- Changeset.mutateAttributionLines(forwards, lines.alines, pad.apool());
- Changeset.mutateTextLines(forwards, lines.textlines);
+ mutateAttributionLines(forwards, lines.alines, pad.apool());
+ mutateTextLines(forwards, lines.textlines);
- const forwards2 = Changeset.moveOpsToNewPool(forwards, pad.apool(), apool);
- const backwards2 = Changeset.moveOpsToNewPool(backwards, pad.apool(), apool);
+ const forwards2 = moveOpsToNewPool(forwards, pad.apool(), apool);
+ const backwards2 = moveOpsToNewPool(backwards, pad.apool(), apool);
const t1 = (compositeStart === 0) ? revisionDate[0] : revisionDate[compositeStart - 1];
const t2 = revisionDate[compositeEnd - 1];
@@ -1209,12 +1219,12 @@ const getPadLines = async (pad, revNum) => {
if (revNum >= 0) {
atext = await pad.getInternalRevisionAText(revNum);
} else {
- atext = Changeset.makeAText('\n');
+ atext = makeAText('\n');
}
return {
- textlines: Changeset.splitTextLines(atext.text),
- alines: Changeset.splitAttributionLines(atext.attribs, atext.text),
+ textlines: splitTextLines(atext.text),
+ alines: splitAttributionLines(atext.attribs, atext.text),
};
};
@@ -1249,7 +1259,7 @@ const composePadChangesets = async (pad, startNum, endNum) => {
for (r = startNum + 1; r < endNum; r++) {
const cs = changesets[r];
- changeset = Changeset.compose(changeset, cs, pool);
+ changeset = compose(changeset, cs, pool);
}
return changeset;
} catch (e) {
diff --git a/src/node/hooks/i18n.ts b/src/node/hooks/i18n.ts
index 7ce55f74482..001e87bd07d 100644
--- a/src/node/hooks/i18n.ts
+++ b/src/node/hooks/i18n.ts
@@ -50,7 +50,7 @@ const getAllLocales = () => {
// Build a locale index (merge all locale data other than user-supplied overrides)
const locales = {};
- _.each(locales2paths, (files, langcode) => {
+ _.each(locales2paths, (files:[], langcode) => {
locales[langcode] = {};
files.forEach((file) => {
diff --git a/src/node/utils/ExportHelper.ts b/src/node/utils/ExportHelper.ts
index b4a5765eed6..814ceef335d 100644
--- a/src/node/utils/ExportHelper.ts
+++ b/src/node/utils/ExportHelper.ts
@@ -20,12 +20,12 @@
*/
import AttributeMap from '../../static/js/AttributeMap';
-import Changeset from '../../static/js/Changeset';
+import {deserializeOps, splitAttributionLines, subattribution} from '../../static/js/Changeset';
export const getPadPlainText = (pad, revNum) => {
const atext = ((revNum !== undefined) ? pad.getInternalRevisionAText(revNum) : pad.atext);
const textLines = atext.text.slice(0, -1).split('\n');
- const attribLines = Changeset.splitAttributionLines(atext.attribs, atext.text);
+ const attribLines = splitAttributionLines(atext.attribs, atext.text);
const apool = pad.pool;
const pieces = [];
@@ -57,7 +57,7 @@ export const _analyzeLine = (text, aline, apool) => {
let lineMarker = 0;
line.listLevel = 0;
if (aline) {
- const [op] = Changeset.deserializeOps(aline);
+ const [op] = deserializeOps(aline);
if (op != null) {
const attribs = AttributeMap.fromString(op.attribs, apool);
let listType = attribs.get('list');
@@ -77,7 +77,7 @@ export const _analyzeLine = (text, aline, apool) => {
}
if (lineMarker) {
line.text = text.substring(1);
- line.aline = Changeset.subattribution(aline, 1);
+ line.aline = subattribution(aline, 1);
} else {
line.text = text;
line.aline = aline;
diff --git a/src/node/utils/ExportHtml.ts b/src/node/utils/ExportHtml.ts
index 8ec4fc104cf..5de740f5516 100644
--- a/src/node/utils/ExportHtml.ts
+++ b/src/node/utils/ExportHtml.ts
@@ -15,14 +15,22 @@
* limitations under the License.
*/
-import Changeset from '../../static/js/Changeset';
-import attributes from "../../static/js/attributes";
+import {
+ deserializeOps,
+ splitAttributionLines,
+ stringAssembler,
+ stringIterator,
+ subattribution
+} from '../../static/js/Changeset';
+import {decodeAttribString} from "../../static/js/attributes";
import {getPad} from "../db/PadManager";
import _ from "underscore";
-import Security from '../../static/js/security';
+// FIXME this is a hack to get around the fact that we don't have a good way
+// @ts-ignore
+import {escapeHTML,escapeHTMLAttribute} from '../../static/js/security';
import {aCallAll} from '../../static/js/pluginfw/hooks';
import {required} from '../eejs';
import {_analyzeLine, _encodeWhitespace} from "./ExportHelper";
@@ -44,7 +52,7 @@ const getPadHTML = async (pad, revNum) => {
export const getHTMLFromAtext = async (pad, atext, authorColors?) => {
const apool = pad.apool();
const textLines = atext.text.slice(0, -1).split('\n');
- const attribLines = Changeset.splitAttributionLines(atext.attribs, atext.text);
+ const attribLines = splitAttributionLines(atext.attribs, atext.text);
const tags = ['h1', 'h2', 'strong', 'em', 'u', 's'];
const props = ['heading1', 'heading2', 'bold', 'italic', 'underline', 'strikethrough'];
@@ -127,8 +135,8 @@ export const getHTMLFromAtext = async (pad, atext, authorColors?) => {
// Just bold Bold and italics Just italics
// becomes
// Just bold Bold and italics Just italics
- const taker = Changeset.stringIterator(text);
- const assem = Changeset.stringAssembler();
+ const taker = stringIterator(text);
+ const assem = stringAssembler();
const openTags = [];
const getSpanClassFor = (i) => {
@@ -200,7 +208,7 @@ export const getHTMLFromAtext = async (pad, atext, authorColors?) => {
return;
}
- const ops = Changeset.deserializeOps(Changeset.subattribution(attribs, idx, idx + numChars));
+ const ops = deserializeOps(subattribution(attribs, idx, idx + numChars));
idx += numChars;
// this iterates over every op string and decides which tags to open or to close
@@ -209,7 +217,7 @@ export const getHTMLFromAtext = async (pad, atext, authorColors?) => {
const usedAttribs = [];
// mark all attribs as used
- for (const a of attributes.decodeAttribString(o.attribs)) {
+ for (const a of decodeAttribString(o.attribs)) {
if (a in anumMap) {
usedAttribs.push(anumMap[a]); // i = 0 => bold, etc.
}
@@ -249,7 +257,7 @@ export const getHTMLFromAtext = async (pad, atext, authorColors?) => {
// from but they break the abiword parser and are completly useless
s = s.replace(String.fromCharCode(12), '');
- assem.append(_encodeWhitespace(Security.escapeHTML(s)));
+ assem.append(_encodeWhitespace(escapeHTML(s)));
} // end iteration over spans in line
// close all the tags that are open after the last op
@@ -272,7 +280,7 @@ export const getHTMLFromAtext = async (pad, atext, authorColors?) => {
// https://html.spec.whatwg.org/multipage/links.html#link-type-noopener
// https://mathiasbynens.github.io/rel-noopener/
// https://github.com/ether/etherpad-lite/pull/3636
- assem.append(``);
+ assem.append(` `);
processNextChars(urlLength);
assem.append(' ');
});
@@ -477,7 +485,7 @@ export const getPadHTMLDocument = async (padId, revNum, readOnlyId?) => {
return required('ep_etherpad-lite/templates/export_html.html', {
body: html,
- padId: Security.escapeHTML(readOnlyId || padId),
+ padId: escapeHTML(readOnlyId || padId),
extraCSS: stylesForExportCSS,
});
};
diff --git a/src/node/utils/ImportHtml.ts b/src/node/utils/ImportHtml.ts
index 2e5de910aff..34dfb05e42e 100644
--- a/src/node/utils/ImportHtml.ts
+++ b/src/node/utils/ImportHtml.ts
@@ -16,8 +16,8 @@
*/
import log4js from 'log4js';
-import Changeset from '../../static/js/Changeset';
-import contentcollector from '../../static/js/contentcollector';
+import {builder, deserializeOps} from '../../static/js/Changeset';
+import {makeContentCollector} from '../../static/js/contentcollector';
import jsdom from 'jsdom';
const apiLogger = log4js.getLogger('ImportHtml');
@@ -42,7 +42,7 @@ export const setPadHTML = async (pad, html, authorId = '') => {
// Convert a dom tree into a list of lines and attribute liens
// using the content collector object
- const cc = contentcollector.makeContentCollector(true, null, pad.pool);
+ const cc = makeContentCollector(true, null, pad.pool);
try {
// we use a try here because if the HTML is bad it will blow up
cc.collectContent(document.body);
@@ -68,24 +68,24 @@ export const setPadHTML = async (pad, html, authorId = '') => {
const newAttribs = `${result.lineAttribs.join('|1+1')}|1+1`;
// create a new changeset with a helper builder object
- const builder = Changeset.builder(1);
+ const builder2 = builder(1);
// assemble each line into the builder
let textIndex = 0;
const newTextStart = 0;
const newTextEnd = newText.length;
- for (const op of Changeset.deserializeOps(newAttribs)) {
+ for (const op of deserializeOps(newAttribs)) {
const nextIndex = textIndex + op.chars;
if (!(nextIndex <= newTextStart || textIndex >= newTextEnd)) {
const start = Math.max(newTextStart, textIndex);
const end = Math.min(newTextEnd, nextIndex);
- builder.insert(newText.substring(start, end), op.attribs);
+ builder2.insert(newText.substring(start, end), op.attribs);
}
textIndex = nextIndex;
}
// the changeset is ready!
- const theChangeset = builder.toString();
+ const theChangeset = builder2.toString();
apiLogger.debug(`The changeset: ${theChangeset}`);
await pad.setText('\n', authorId);
diff --git a/src/node/utils/Settings.ts b/src/node/utils/Settings.ts
index a505974698e..e12c14c7f3b 100644
--- a/src/node/utils/Settings.ts
+++ b/src/node/utils/Settings.ts
@@ -28,7 +28,7 @@
*/
import exp from "constants";
-
+import packageJSON from '../../../package.json'
import {findEtherpadRoot, makeAbsolute, isSubdir} from './AbsolutePaths';
import deepEqual from 'fast-deep-equal/es6';
import fs from 'fs';
@@ -507,7 +507,7 @@ export const getGitCommit = () => {
};
// Return etherpad version from package.json
-export const getEpVersion = () => require('../../package.json').version;
+export const getEpVersion = () => packageJSON.version;
/**
* Receives a settingsObj and, if the property name is a valid configuration
diff --git a/src/node/utils/UpdateCheck.ts b/src/node/utils/UpdateCheck.ts
index de18d2f179e..b80bfb954d3 100644
--- a/src/node/utils/UpdateCheck.ts
+++ b/src/node/utils/UpdateCheck.ts
@@ -48,12 +48,11 @@ export const needsUpdate = (cb?:(arg0: boolean)=>void) => {
}
const check = () => {
- const needsUpdate = ((needsUpdate: boolean) => {
- if (needsUpdate && infos) {
- console.warn(`Update available: Download the latest version ${infos.latestVersion}`);
+ needsUpdate((needsUpdate)=>{
+ if (needsUpdate) {
+ console.warn(`Update available: Download the actual version ${infos.latestVersion}`);
}
})
- needsUpdate(infos.latestVersion > getEpVersion());
}
export default {check, getLatestVersion}
diff --git a/src/node/utils/padDiff.ts b/src/node/utils/padDiff.ts
index 88dd3d4b407..737f830676a 100644
--- a/src/node/utils/padDiff.ts
+++ b/src/node/utils/padDiff.ts
@@ -1,9 +1,18 @@
'use strict';
import AttributeMap from '../../static/js/AttributeMap';
-import Changeset from '../../static/js/Changeset';
-import attributes from '../../static/js/attributes';
+import {
+ applyToAText,
+ builder, checkRep,
+ compose,
+ deserializeOps,
+ numToString, Op,
+ opAssembler, pack, splitAttributionLines, splitTextLines, stringAssembler,
+ unpack
+} from '../../static/js/Changeset';
+import {attribsFromString} from '../../static/js/attributes';
import {getHTMLFromAtext} from './ExportHtml';
+// @ts-ignore
import {PadDiffModel} from "ep_etherpad-lite/node/models/PadDiffModel";
export const PadDiff = (pad, fromRev, toRev)=> {
@@ -30,7 +39,7 @@ export const PadDiff = (pad, fromRev, toRev)=> {
PadDiff.prototype._isClearAuthorship = function (changeset) {
// unpack
- const unpacked = Changeset.unpack(changeset);
+ const unpacked = unpack(changeset);
// check if there is nothing in the charBank
if (unpacked.charBank !== '') {
@@ -42,7 +51,7 @@ PadDiff.prototype._isClearAuthorship = function (changeset) {
return false;
}
- const [clearOperator, anotherOp] = Changeset.deserializeOps(unpacked.ops);
+ const [clearOperator, anotherOp] = deserializeOps(unpacked.ops);
// check if there is only one operator
if (anotherOp != null) return false;
@@ -59,7 +68,7 @@ PadDiff.prototype._isClearAuthorship = function (changeset) {
}
const [appliedAttribute, anotherAttribute] =
- attributes.attribsFromString(clearOperator.attribs, this._pad.pool);
+ attribsFromString(clearOperator.attribs, this._pad.pool);
// Check that the operation has exactly one attribute.
if (appliedAttribute == null || anotherAttribute != null) return false;
@@ -76,9 +85,9 @@ PadDiff.prototype._createClearAuthorship = async function (rev) {
const atext = await this._pad.getInternalRevisionAText(rev);
// build clearAuthorship changeset
- const builder = Changeset.builder(atext.text.length);
- builder.keepText(atext.text, [['author', '']], this._pad.pool);
- const changeset = builder.toString();
+ const builder2 = builder(atext.text.length);
+ builder2.keepText(atext.text, [['author', '']], this._pad.pool);
+ const changeset = builder2.toString();
return changeset;
};
@@ -91,7 +100,7 @@ PadDiff.prototype._createClearStartAtext = async function (rev) {
const changeset = await this._createClearAuthorship(rev);
// apply the clearAuthorship changeset
- const newAText = Changeset.applyToAText(changeset, atext, this._pad.pool);
+ const newAText = applyToAText(changeset, atext, this._pad.pool);
return newAText;
};
@@ -160,7 +169,7 @@ PadDiff.prototype._createDiffAtext = async function () {
if (superChangeset == null) {
superChangeset = changeset;
} else {
- superChangeset = Changeset.compose(superChangeset, changeset, this._pad.pool);
+ superChangeset = compose(superChangeset, changeset, this._pad.pool);
}
}
@@ -174,10 +183,10 @@ PadDiff.prototype._createDiffAtext = async function () {
const deletionChangeset = this._createDeletionChangeset(superChangeset, atext, this._pad.pool);
// apply the superChangeset, which includes all addings
- atext = Changeset.applyToAText(superChangeset, atext, this._pad.pool);
+ atext = applyToAText(superChangeset, atext, this._pad.pool);
// apply the deletionChangeset, which adds a deletions
- atext = Changeset.applyToAText(deletionChangeset, atext, this._pad.pool);
+ atext = applyToAText(deletionChangeset, atext, this._pad.pool);
}
return atext;
@@ -217,22 +226,22 @@ PadDiff.prototype.getAuthors = async function () {
PadDiff.prototype._extendChangesetWithAuthor = (changeset, author, apool) => {
// unpack
- const unpacked = Changeset.unpack(changeset);
+ const unpacked = unpack(changeset);
- const assem = Changeset.opAssembler();
+ const assem = opAssembler();
// create deleted attribs
const authorAttrib = apool.putAttrib(['author', author || '']);
const deletedAttrib = apool.putAttrib(['removed', true]);
- const attribs = `*${Changeset.numToString(authorAttrib)}*${Changeset.numToString(deletedAttrib)}`;
+ const attribs = `*${numToString(authorAttrib)}*${numToString(deletedAttrib)}`;
- for (const operator of Changeset.deserializeOps(unpacked.ops)) {
+ for (const operator of deserializeOps(unpacked.ops)) {
if (operator.opcode === '-') {
// this is a delete operator, extend it with the author
operator.attribs = attribs;
} else if (operator.opcode === '=' && operator.attribs) {
// this is operator changes only attributes, let's mark which author did that
- operator.attribs += `*${Changeset.numToString(authorAttrib)}`;
+ operator.attribs += `*${numToString(authorAttrib)}`;
}
// append the new operator to our assembler
@@ -240,14 +249,14 @@ PadDiff.prototype._extendChangesetWithAuthor = (changeset, author, apool) => {
}
// return the modified changeset
- return Changeset.pack(unpacked.oldLen, unpacked.newLen, assem.toString(), unpacked.charBank);
+ return pack(unpacked.oldLen, unpacked.newLen, assem.toString(), unpacked.charBank);
};
// this method is 80% like Changeset.inverse. I just changed so instead of reverting,
// it adds deletions and attribute changes to to the atext.
PadDiff.prototype._createDeletionChangeset = function (cs, startAText, apool) {
- const lines = Changeset.splitTextLines(startAText.text);
- const alines = Changeset.splitAttributionLines(startAText.attribs, startAText.text);
+ const lines = splitTextLines(startAText.text);
+ const alines = splitAttributionLines(startAText.attribs, startAText.text);
// lines and alines are what the exports is meant to apply to.
// They may be arrays or objects with .get(i) and .length methods.
@@ -274,14 +283,14 @@ PadDiff.prototype._createDeletionChangeset = function (cs, startAText, apool) {
let curLineOps = null;
let curLineOpsNext = null;
let curLineOpsLine;
- let curLineNextOp = new Changeset.Op('+');
+ let curLineNextOp = new Op('+');
- const unpacked = Changeset.unpack(cs);
- const builder = Changeset.builder(unpacked.newLen);
+ const unpacked = unpack(cs);
+ const builder2 = builder(unpacked.newLen);
const consumeAttribRuns = (numChars, func /* (len, attribs, endsLine)*/) => {
if (!curLineOps || curLineOpsLine !== curLine) {
- curLineOps = Changeset.deserializeOps(aLinesGet(curLine));
+ curLineOps = deserializeOps(aLinesGet(curLine));
curLineOpsNext = curLineOps.next();
curLineOpsLine = curLine;
let indexIntoLine = 0;
@@ -302,13 +311,13 @@ PadDiff.prototype._createDeletionChangeset = function (cs, startAText, apool) {
curChar = 0;
curLineOpsLine = curLine;
curLineNextOp.chars = 0;
- curLineOps = Changeset.deserializeOps(aLinesGet(curLine));
+ curLineOps = deserializeOps(aLinesGet(curLine));
curLineOpsNext = curLineOps.next();
}
if (!curLineNextOp.chars) {
if (curLineOpsNext.done) {
- curLineNextOp = new Changeset.Op();
+ curLineNextOp = new Op();
} else {
curLineNextOp = curLineOpsNext.value;
curLineOpsNext = curLineOps.next();
@@ -343,7 +352,7 @@ PadDiff.prototype._createDeletionChangeset = function (cs, startAText, apool) {
const nextText = (numChars) => {
let len = 0;
- const assem = Changeset.stringAssembler();
+ const assem = stringAssembler();
const firstString = linesGet(curLine).substring(curChar);
len += firstString.length;
assem.append(firstString);
@@ -371,7 +380,7 @@ PadDiff.prototype._createDeletionChangeset = function (cs, startAText, apool) {
};
};
- for (const csOp of Changeset.deserializeOps(unpacked.ops)) {
+ for (const csOp of deserializeOps(unpacked.ops)) {
if (csOp.opcode === '=') {
const textBank = nextText(csOp.chars);
@@ -417,7 +426,7 @@ PadDiff.prototype._createDeletionChangeset = function (cs, startAText, apool) {
textLeftToProcess = textLeftToProcess.substr(lengthToProcess);
if (lineBreak) {
- builder.keep(1, 1); // just skip linebreaks, don't do a insert + keep for a linebreak
+ builder2.keep(1, 1); // just skip linebreaks, don't do a insert + keep for a linebreak
// consume the attributes of this linebreak
consumeAttribRuns(1, () => {});
@@ -429,31 +438,31 @@ PadDiff.prototype._createDeletionChangeset = function (cs, startAText, apool) {
// get the old attributes back
const oldAttribs = undoBackToAttribs(attribs);
- builder.insert(processText.substr(textBankIndex, len), oldAttribs);
+ builder2.insert(processText.substr(textBankIndex, len), oldAttribs);
textBankIndex += len;
});
- builder.keep(lengthToProcess, 0);
+ builder2.keep(lengthToProcess, 0);
}
}
} else {
skip(csOp.chars, csOp.lines);
- builder.keep(csOp.chars, csOp.lines);
+ builder2.keep(csOp.chars, csOp.lines);
}
} else if (csOp.opcode === '+') {
- builder.keep(csOp.chars, csOp.lines);
+ builder2.keep(csOp.chars, csOp.lines);
} else if (csOp.opcode === '-') {
const textBank = nextText(csOp.chars);
let textBankIndex = 0;
consumeAttribRuns(csOp.chars, (len, attribs, endsLine) => {
- builder.insert(textBank.substr(textBankIndex, len), attribs + csOp.attribs);
+ builder2.insert(textBank.substr(textBankIndex, len), attribs + csOp.attribs);
textBankIndex += len;
});
}
}
- return Changeset.checkRep(builder.toString());
+ return checkRep(builder.toString());
};
// export the constructor
diff --git a/src/package-lock.json b/src/package-lock.json
index 47345ad47bc..4a9eb06ba79 100644
--- a/src/package-lock.json
+++ b/src/package-lock.json
@@ -40,7 +40,7 @@
"rehype-minify-whitespace": "^5.0.1",
"request": "2.88.2",
"resolve": "1.22.2",
- "security": "1.0.0",
+ "security": "^1.0.0",
"semver": "^7.5.2",
"socket.io": "^2.4.1",
"superagent": "^8.0.9",
@@ -62,6 +62,7 @@
"@types/jquery": "^3.5.16",
"@types/js-cookie": "^3.0.3",
"@types/node": "^20.3.1",
+ "@types/underscore": "^1.11.5",
"concurrently": "^8.2.0",
"eslint": "^8.14.0",
"eslint-config-etherpad": "^3.0.13",
@@ -1227,6 +1228,12 @@
"@types/node": "*"
}
},
+ "node_modules/@types/underscore": {
+ "version": "1.11.5",
+ "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.5.tgz",
+ "integrity": "sha512-b8e//LrIlhoXaaBcMC0J/s2/lIF9y5VJYKqbW4nA+tW/nqqDk1Dacd1ULLT7zgGsKs7PGbSnqCPzqEniZ0RxYg==",
+ "dev": true
+ },
"node_modules/@types/unist": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
diff --git a/src/package.json b/src/package.json
index 9b8a08abe2b..df513c468e2 100644
--- a/src/package.json
+++ b/src/package.json
@@ -61,7 +61,7 @@
"rehype-minify-whitespace": "^5.0.1",
"request": "2.88.2",
"resolve": "1.22.2",
- "security": "1.0.0",
+ "security": "^1.0.0",
"semver": "^7.5.2",
"socket.io": "^2.4.1",
"superagent": "^8.0.9",
@@ -83,6 +83,7 @@
"@types/jquery": "^3.5.16",
"@types/js-cookie": "^3.0.3",
"@types/node": "^20.3.1",
+ "@types/underscore": "^1.11.5",
"concurrently": "^8.2.0",
"eslint": "^8.14.0",
"eslint-config-etherpad": "^3.0.13",
diff --git a/src/static/js/AttributeManager.js b/src/static/js/AttributeManager.ts
similarity index 99%
rename from src/static/js/AttributeManager.js
rename to src/static/js/AttributeManager.ts
index 5734769f687..67a71c0ee6a 100644
--- a/src/static/js/AttributeManager.js
+++ b/src/static/js/AttributeManager.ts
@@ -2,7 +2,9 @@ import AttributeMap from "./AttributeMap.js";
import * as Changeset from "./Changeset.js";
import * as ChangesetUtils from "./ChangesetUtils.js";
import * as attributes from "./attributes.js";
-import * as _ from "./underscore.js";
+import _ from "underscore";
+export { map, each, identity} from "underscore";
+
'use strict';
const lineMarkerAttribute = 'lmkr';
// Some of these attributes are kept for compatibility purposes.
@@ -255,7 +257,7 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({
@param lineNum: the number of the line to set the attribute for
@param attributeKey: the name of the attribute to set, e.g. list
@param attributeValue: an optional parameter to pass to the attribute (e.g. indention level)
-
+
*/
setAttributeOnLine(lineNum, attributeName, attributeValue) {
let loc = [0, 0];
diff --git a/src/static/js/AttributeMap.js b/src/static/js/AttributeMap.ts
similarity index 99%
rename from src/static/js/AttributeMap.js
rename to src/static/js/AttributeMap.ts
index 4e55eb8a71f..ae39f9a05b9 100644
--- a/src/static/js/AttributeMap.js
+++ b/src/static/js/AttributeMap.ts
@@ -17,6 +17,7 @@ import * as attributes from "./attributes.js";
* Convenience class to convert an Op's attribute string to/from a Map of key, value pairs.
*/
class AttributeMap extends Map {
+ pool: any;
/**
* Converts an attribute string into an AttributeMap.
*
diff --git a/src/static/js/Changeset.js b/src/static/js/Changeset.ts
similarity index 98%
rename from src/static/js/Changeset.js
rename to src/static/js/Changeset.ts
index c6fa8402ecb..db29738abcc 100644
--- a/src/static/js/Changeset.js
+++ b/src/static/js/Changeset.ts
@@ -1,7 +1,8 @@
import AttributeMap from "./AttributeMap.js";
-import AttributePool from "./AttributePool.js";
+import {AttributePool} from "./AttributePool";
import * as attributes from "./attributes.js";
import { padutils } from "./pad_utils.js";
+import {CustomError} from "../../node/utils/customError";
'use strict';
/**
* A `[key, value]` pair of strings describing a text attribute.
@@ -22,7 +23,7 @@ import { padutils } from "./pad_utils.js";
* @param {string} msg - Just some message
*/
const error = (msg) => {
- const e = new Error(msg);
+ const e = new CustomError(msg);
e.easysync = true;
throw e;
};
@@ -42,6 +43,10 @@ const assert = (b, msg) => {
* An operation to apply to a shared document.
*/
class Op {
+ chars: number;
+ opcode: string;
+ lines: number;
+ attribs: string;
/**
* @param {(''|'='|'+'|'-')} [opcode=''] - Initial value of the `opcode` property.
*/
@@ -113,6 +118,8 @@ class Op {
* @deprecated Use `deserializeOps` instead.
*/
class OpIter {
+ private _gen: any;
+ private _next: any;
/**
* @param {string} ops - String encoding the change operations to iterate over.
*/
@@ -240,6 +247,12 @@ const opsFromText = function* (opcode, text, attribs = '', pool = null) {
* with no newlines.
*/
class TextLinesMutator {
+ _lines: any;
+ // FIXME What is this for a type?
+ _curSplice: any[];
+ _inSplice: boolean;
+ _curLine: number;
+ _curCol: number;
/**
* @param {(string[]|StringArrayLike)} lines - Lines to mutate (in place).
*/
@@ -362,7 +375,7 @@ class TextLinesMutator {
* @param {number} L -
* @param {boolean} includeInSplice - Indicates that attributes are present.
*/
- skipLines(L, includeInSplice) {
+ skipLines(L, includeInSplice?) {
if (!L)
return;
if (includeInSplice) {
@@ -906,7 +919,7 @@ export const mergingOpAssembler = () => {
/**
* @param {boolean} [isEndDocument]
*/
- const flush = (isEndDocument) => {
+ const flush = (isEndDocument?: boolean) => {
if (!bufOp.opcode)
return;
if (isEndDocument && bufOp.opcode === '=' && !bufOp.attribs) {
@@ -1325,7 +1338,7 @@ export const attributeTester = (attribPair, pool) => {
return (attribs) => re.test(attribs);
};
export const identity = (N) => exports.pack(N, N, '', '');
-export const makeSplice = (orig, start, ndel, ins, attribs, pool) => {
+export const makeSplice = (orig, start, ndel, ins, attribs?, pool?) => {
if (start < 0)
throw new RangeError(`start index must be non-negative (is ${start})`);
if (ndel < 0)
@@ -1346,7 +1359,7 @@ export const makeSplice = (orig, start, ndel, ins, attribs, pool) => {
assem.endDocument();
return exports.pack(orig.length, orig.length + ins.length - ndel, assem.toString(), ins);
};
-export const characterRangeFollow = (cs, startChar, endChar, insertionsAfter) => {
+export const characterRangeFollow = (cs, startChar, endChar, insertionsAfter?) => {
let newStartChar = startChar;
let newEndChar = endChar;
let lengthChangeSoFar = 0;
@@ -1451,7 +1464,7 @@ export const mapAttribNumbers = (cs, func) => {
});
return newUpToDollar + cs.substring(dollarPos);
};
-export const makeAText = (text, attribs) => ({
+export const makeAText = (text, attribs?) => ({
text,
attribs: (attribs || exports.makeAttribution(text)),
});
@@ -1538,7 +1551,7 @@ export const builder = (oldLen) => {
* attribute key, value pairs.
* @returns {Builder} this
*/
- keep: (N, L, attribs, pool) => {
+ keep: (N, L, attribs?, pool?) => {
o.opcode = '=';
o.attribs = typeof attribs === 'string'
? attribs : new AttributeMap(pool).update(attribs || []).toString();
@@ -1555,7 +1568,7 @@ export const builder = (oldLen) => {
* attribute key, value pairs.
* @returns {Builder} this
*/
- keepText: (text, attribs, pool) => {
+ keepText: (text, attribs?, pool?) => {
for (const op of opsFromText('=', text, attribs, pool))
assem.append(op);
return self;
@@ -1568,7 +1581,7 @@ export const builder = (oldLen) => {
* attribute key, value pairs.
* @returns {Builder} this
*/
- insert: (text, attribs, pool) => {
+ insert: (text, attribs, pool?) => {
for (const op of opsFromText('+', text, attribs, pool))
assem.append(op);
charBank.append(text);
@@ -1580,7 +1593,7 @@ export const builder = (oldLen) => {
* character must be a newline.
* @returns {Builder} this
*/
- remove: (N, L) => {
+ remove: (N, L?) => {
o.opcode = '-';
o.attribs = '';
o.chars = N;
@@ -1605,7 +1618,7 @@ export const makeAttribsString = (opcode, attribs, pool) => {
return attribs;
return new AttributeMap(pool).update(attribs, opcode === '+').toString();
};
-export const subattribution = (astr, start, optEnd) => {
+export const subattribution = (astr, start, optEnd?) => {
const attOps = exports.deserializeOps(astr);
let attOpsNext = attOps.next();
const assem = exports.smartOpAssembler();
diff --git a/src/static/js/ChangesetUtils.js b/src/static/js/ChangesetUtils.ts
similarity index 98%
rename from src/static/js/ChangesetUtils.js
rename to src/static/js/ChangesetUtils.ts
index b63481a5167..a527f1e74f0 100644
--- a/src/static/js/ChangesetUtils.js
+++ b/src/static/js/ChangesetUtils.ts
@@ -10,7 +10,7 @@ export const buildRemoveRange = (rep, builder, start, end) => {
builder.remove(end[1] - start[1]);
}
};
-export const buildKeepRange = (rep, builder, start, end, attribs, pool) => {
+export const buildKeepRange = (rep, builder, start, end, attribs?, pool?) => {
const startLineOffset = rep.lines.offsetOfIndex(start[0]);
const endLineOffset = rep.lines.offsetOfIndex(end[0]);
if (end[0] > start[0]) {
diff --git a/src/static/js/ChatMessage.js b/src/static/js/ChatMessage.ts
similarity index 92%
rename from src/static/js/ChatMessage.js
rename to src/static/js/ChatMessage.ts
index c9cc87e2879..3873e00004a 100644
--- a/src/static/js/ChatMessage.js
+++ b/src/static/js/ChatMessage.ts
@@ -8,6 +8,10 @@ const { padutils: { warnDeprecated } } = { padutils };
* Supports serialization to JSON.
*/
class ChatMessage {
+ private text: any;
+ authorId: any;
+ private time: any;
+ displayName: null;
static fromObject(obj) {
// The userId property was renamed to authorId, and userName was renamed to displayName. Accept
// the old names in case the db record was written by an older version of Etherpad.
@@ -83,9 +87,10 @@ class ChatMessage {
// doesn't support authorId and displayName.
toJSON() {
const { authorId, displayName, ...obj } = this;
- obj.userId = authorId;
- obj.userName = displayName;
- return obj;
+ let objExtendable = obj as any
+ objExtendable.userId = authorId;
+ objExtendable.userName = displayName;
+ return objExtendable;
}
}
export default ChatMessage;
diff --git a/src/static/js/ace.ts b/src/static/js/ace.ts
index e6878c72043..310171dd41d 100644
--- a/src/static/js/ace.ts
+++ b/src/static/js/ace.ts
@@ -3,7 +3,8 @@ import { makeCSSManager as makeCSSManager$0 } from "./cssmanager.js";
import * as pluginUtils from "./pluginfw/shared.js";
import {Ace2EditorInfo, AceDocType} from "../module/Ace2EditorInfo";
import {clientVars} from "../../node/handler/PadMessageHandler";
-import {CustomWindow} from "../module/CustomWindow";
+import {CustomElementWithSheet, CustomWindow} from "../module/CustomWindow";
+import {required} from "../../node/eejs";
'use strict';
const makeCSSManager = { makeCSSManager: makeCSSManager$0 }.makeCSSManager;
@@ -244,17 +245,17 @@ const Ace2Editor = function () {
require.setLibraryURI(absUrl('../javascripts/lib'));
require.setGlobalKeyPath('require');
// intentially moved before requiring client_plugins to save a 307
- innerWindow.Ace2Inner = require('ep_etherpad-lite/static/js/ace2_inner');
- innerWindow.plugins = require('ep_etherpad-lite/static/js/pluginfw/client_plugins');
+ innerWindow.Ace2Inner = required('ep_etherpad-lite/static/js/ace2_inner');
+ innerWindow.plugins = required('ep_etherpad-lite/static/js/pluginfw/client_plugins');
innerWindow.plugins.adoptPluginsFromAncestorsOf(innerWindow);
- innerWindow.$ = innerWindow.jQuery = require('ep_etherpad-lite/static/js/rjquery').jQuery;
+ innerWindow.$ = innerWindow.jQuery = required('ep_etherpad-lite/static/js/rjquery').jQuery;
debugLog('Ace2Editor.init() waiting for plugins');
- await new Promise((resolve, reject) => innerWindow.plugins.ensure((err) => err != null ? reject(err) : resolve()));
+ await new Promise((resolve, reject) => innerWindow.plugins.ensure((err) => err != null ? reject(err) : resolve()));
debugLog('Ace2Editor.init() waiting for Ace2Inner.init()');
await innerWindow.Ace2Inner.init(info, {
inner: makeCSSManager(innerStyle.sheet),
outer: makeCSSManager(outerStyle.sheet),
- parent: makeCSSManager(document.querySelector('style[title="dynamicsyntax"]').sheet),
+ parent: makeCSSManager((document.querySelector('style[title="dynamicsyntax"]') as unknown as CustomElementWithSheet).sheet),
});
debugLog('Ace2Editor.init() Ace2Inner.init() returned');
loaded = true;
diff --git a/src/static/js/attributes.js b/src/static/js/attributes.ts
similarity index 100%
rename from src/static/js/attributes.js
rename to src/static/js/attributes.ts
diff --git a/src/static/js/basic_error_handler.js b/src/static/js/basic_error_handler.ts
similarity index 94%
rename from src/static/js/basic_error_handler.js
rename to src/static/js/basic_error_handler.ts
index 77f93f5d27d..e162aad625a 100644
--- a/src/static/js/basic_error_handler.js
+++ b/src/static/js/basic_error_handler.ts
@@ -20,7 +20,9 @@
const msgBlock = document.createElement('blockquote');
box.appendChild(msgBlock);
msgBlock.style.fontWeight = 'bold';
- msgBlock.appendChild(document.createTextNode(msg));
+ if (typeof msg === "string") {
+ msgBlock.appendChild(document.createTextNode(msg));
+ }
const loc = document.createElement('p');
box.appendChild(loc);
loc.appendChild(document.createTextNode(`in ${url}`));
diff --git a/src/static/js/broadcast.js b/src/static/js/broadcast.ts
similarity index 89%
rename from src/static/js/broadcast.js
rename to src/static/js/broadcast.ts
index d891b0d8163..0d8824c65f0 100644
--- a/src/static/js/broadcast.js
+++ b/src/static/js/broadcast.ts
@@ -1,12 +1,15 @@
import { makeCSSManager as makeCSSManager$0 } from "./cssmanager.js";
import { domline as domline$0 } from "./domline.js";
-import AttribPool from "./AttributePool.js";
+import {AttributePool} from "./AttributePool.js";
import * as Changeset from "./Changeset.js";
import * as attributes from "./attributes.js";
import { linestylefilter as linestylefilter$0 } from "./linestylefilter.js";
import { colorutils as colorutils$0 } from "./colorutils.js";
-import * as _ from "./underscore.js";
+import * as _ from "underscore";
import * as hooks from "./pluginfw/hooks.js";
+import {clientVars} from "../../node/handler/PadMessageHandler";
+import {Author, AuthorData, CustomElementWithSheet, CustomWindow} from "../module/CustomWindow";
+import {i18nextvar} from "./vendors/i18next";
'use strict';
/**
* This code is mostly from the old Etherpad. Please help us to comment this code.
@@ -53,9 +56,10 @@ const loadBroadcastJS = (socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro
currentLines: Changeset.splitTextLines(clientVars.collab_client_vars.initialAttributedText.text),
currentDivs: null,
// to be filled in once the dom loads
- apool: (new AttribPool()).fromJsonable(clientVars.collab_client_vars.apool),
+ apool: (new AttributePool()).fromJsonable(clientVars.collab_client_vars.apool),
alines: Changeset.splitAttributionLines(clientVars.collab_client_vars.initialAttributedText.attribs, clientVars.collab_client_vars.initialAttributedText.text),
// generates a jquery element containing HTML for a line
+ targetRevision: undefined,
lineToElement(line, aline) {
const element = document.createElement('div');
const emptyLine = (line === '\n');
@@ -64,7 +68,7 @@ const loadBroadcastJS = (socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro
domInfo.prepareForAdd();
element.className = domInfo.node.className;
element.innerHTML = domInfo.node.innerHTML;
- element.id = Math.random();
+ element.id = String(Math.random());
return $(element);
},
// splice the lines
@@ -172,11 +176,12 @@ const loadBroadcastJS = (socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro
padContents.currentRevision = revision;
padContents.currentTime += timeDelta * 1000;
updateTimer();
+ // @ts-ignore
const authors = _.map(padContents.getActiveAuthors(), (name) => authorData[name]);
BroadcastSlider.setAuthors(authors);
};
const loadedNewChangeset = (changesetForward, changesetBackward, revision, timeDelta) => {
- const revisionInfo = window.revisionInfo;
+ const revisionInfo = (window as unknown as CustomWindow).revisionInfo;
const broadcasting = (BroadcastSlider.getSliderPosition() === revisionInfo.latest);
revisionInfo.addChangeset(revision, revision + 1, changesetForward, changesetBackward, timeDelta);
BroadcastSlider.setSliderLength(revisionInfo.latest);
@@ -203,7 +208,7 @@ const loadBroadcastJS = (socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro
const hours = zpad(date.getHours(), 2);
const minutes = zpad(date.getMinutes(), 2);
const seconds = zpad(date.getSeconds(), 2);
- return (html10n.get('timeslider.dateformat', {
+ return (i18nextvar('timeslider.dateformat', {
day,
month,
year,
@@ -213,21 +218,21 @@ const loadBroadcastJS = (socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro
}));
};
$('#timer').html(dateFormat());
- const revisionDate = html10n.get('timeslider.saved', {
+ const revisionDate = i18nextvar('timeslider.saved', {
day: date.getDate(),
month: [
- html10n.get('timeslider.month.january'),
- html10n.get('timeslider.month.february'),
- html10n.get('timeslider.month.march'),
- html10n.get('timeslider.month.april'),
- html10n.get('timeslider.month.may'),
- html10n.get('timeslider.month.june'),
- html10n.get('timeslider.month.july'),
- html10n.get('timeslider.month.august'),
- html10n.get('timeslider.month.september'),
- html10n.get('timeslider.month.october'),
- html10n.get('timeslider.month.november'),
- html10n.get('timeslider.month.december'),
+ i18nextvar('timeslider.month.january'),
+ i18nextvar('timeslider.month.february'),
+ i18nextvar('timeslider.month.march'),
+ i18nextvar('timeslider.month.april'),
+ i18nextvar('timeslider.month.may'),
+ i18nextvar('timeslider.month.june'),
+ i18nextvar('timeslider.month.july'),
+ i18nextvar('timeslider.month.august'),
+ i18nextvar('timeslider.month.september'),
+ i18nextvar('timeslider.month.october'),
+ i18nextvar('timeslider.month.november'),
+ i18nextvar('timeslider.month.december'),
][date.getMonth()],
year: date.getFullYear(),
});
@@ -236,7 +241,7 @@ const loadBroadcastJS = (socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro
updateTimer();
const goToRevision = (newRevision) => {
padContents.targetRevision = newRevision;
- const path = window.revisionInfo.getPath(padContents.currentRevision, newRevision);
+ const path = (window as unknown as CustomWindow).revisionInfo.getPath(padContents.currentRevision, newRevision);
hooks.aCallAll('goToRevisionEvent', {
rev: newRevision,
});
@@ -273,10 +278,11 @@ const loadBroadcastJS = (socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro
// Loading changeset history for old revision (to make diff between old and new revision)
loadChangesetsForRevision(padContents.currentRevision - 1);
}
+ // @ts-ignore
const authors = _.map(padContents.getActiveAuthors(), (name) => authorData[name]);
BroadcastSlider.setAuthors(authors);
};
- const loadChangesetsForRevision = (revision, callback) => {
+ const loadChangesetsForRevision = (revision, callback?) => {
if (BroadcastSlider.getSliderLength() > 10000) {
const start = (Math.floor((revision) / 10000) * 10000); // revision 0 to 10
changesetLoader.queueUp(start, 100);
@@ -348,7 +354,7 @@ const loadBroadcastJS = (socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro
setTimeout(() => this.loadFromQueue(), 10);
},
handleResponse: (data, start, granularity, callback) => {
- const pool = (new AttribPool()).fromJsonable(data.apool);
+ const pool = (new AttributePool()).fromJsonable(data.apool);
for (let i = 0; i < data.forwardsChangesets.length; i++) {
const astart = start + i * granularity - 1; // rev -1 is a blank single line
let aend = start + (i + 1) * granularity - 1; // totalRevs is the most recent revision
@@ -357,7 +363,7 @@ const loadBroadcastJS = (socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro
// debugLog("adding changeset:", astart, aend);
const forwardcs = Changeset.moveOpsToNewPool(data.forwardsChangesets[i], pool, padContents.apool);
const backwardcs = Changeset.moveOpsToNewPool(data.backwardsChangesets[i], pool, padContents.apool);
- window.revisionInfo.addChangeset(astart, aend, forwardcs, backwardcs, data.timeDeltas[i]);
+ (window as unknown as CustomWindow).revisionInfo.addChangeset(astart, aend, forwardcs, backwardcs, data.timeDeltas[i]);
}
if (callback)
callback(start - 1, start + data.forwardsChangesets.length * granularity - 1);
@@ -366,15 +372,16 @@ const loadBroadcastJS = (socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro
if (obj.type === 'COLLABROOM') {
obj = obj.data;
if (obj.type === 'NEW_CHANGES') {
- const changeset = Changeset.moveOpsToNewPool(obj.changeset, (new AttribPool()).fromJsonable(obj.apool), padContents.apool);
+ const changeset = Changeset.moveOpsToNewPool(obj.changeset, (new AttributePool()).fromJsonable(obj.apool), padContents.apool);
let changesetBack = Changeset.inverse(obj.changeset, padContents.currentLines, padContents.alines, padContents.apool);
- changesetBack = Changeset.moveOpsToNewPool(changesetBack, (new AttribPool()).fromJsonable(obj.apool), padContents.apool);
+ changesetBack = Changeset.moveOpsToNewPool(changesetBack, (new AttributePool()).fromJsonable(obj.apool), padContents.apool);
loadedNewChangeset(changeset, changesetBack, obj.newRev - 1, obj.timeDelta);
}
else if (obj.type === 'NEW_AUTHORDATA') {
const authorMap = {};
authorMap[obj.author] = obj.data;
receiveAuthorData(authorMap);
+ // @ts-ignore
const authors = _.map(padContents.getActiveAuthors(), (name) => authorData[name]);
BroadcastSlider.setAuthors(authors);
}
@@ -412,13 +419,15 @@ const loadBroadcastJS = (socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro
goToRevisionIfEnabledCount--;
}
else {
+ //FIXME what to do?
+ // @ts-ignore
goToRevision(...args);
}
- };
+ }
BroadcastSlider.onSlider(goToRevisionIfEnabled);
- const dynamicCSS = makeCSSManager(document.querySelector('style[title="dynamicsyntax"]').sheet);
+ const dynamicCSS = makeCSSManager((document.querySelector('style[title="dynamicsyntax"]') as unknown as CustomElementWithSheet).sheet);
const authorData = {};
- const receiveAuthorData = (newAuthorData) => {
+ const receiveAuthorData = (newAuthorData: Author) => {
for (const [author, data] of Object.entries(newAuthorData)) {
const bgcolor = typeof data.colorId === 'number'
? clientVars.colorPalette[data.colorId] : data.colorId;
diff --git a/src/static/js/broadcast_revisions.js b/src/static/js/broadcast_revisions.ts
similarity index 92%
rename from src/static/js/broadcast_revisions.js
rename to src/static/js/broadcast_revisions.ts
index 9409cd978f4..f29e570b406 100644
--- a/src/static/js/broadcast_revisions.js
+++ b/src/static/js/broadcast_revisions.ts
@@ -4,6 +4,9 @@
* This helps other people to understand this code better and helps them to improve it.
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
*/
+import {clientVars} from "../../node/handler/PadMessageHandler";
+import {CustomWindow} from "../module/CustomWindow";
+
/**
* Copyright 2009 Google Inc.
*
@@ -36,7 +39,12 @@ const loadBroadcastRevisionsJS = () => {
this.changesets.push(changesetWrapper);
this.changesets.sort((a, b) => (b.deltaRev - a.deltaRev));
};
- const revisionInfo = {};
+ const revisionInfo = {
+ latest: undefined,
+ addChangeset: undefined,
+ createNew: undefined,
+ getPath: undefined
+ };
revisionInfo.addChangeset = function (fromIndex, toIndex, changeset, backChangeset, timeDelta) {
const startRevision = this[fromIndex] || this.createNew(fromIndex);
const endRevision = this[toIndex] || this.createNew(toIndex);
@@ -95,6 +103,6 @@ const loadBroadcastRevisionsJS = () => {
times,
};
};
- window.revisionInfo = revisionInfo;
+ (window as unknown as CustomWindow).revisionInfo = revisionInfo;
};
export { loadBroadcastRevisionsJS };
diff --git a/src/static/js/broadcast_slider.js b/src/static/js/broadcast_slider.ts
similarity index 89%
rename from src/static/js/broadcast_slider.js
rename to src/static/js/broadcast_slider.ts
index c2478ae48cf..46d6866d314 100644
--- a/src/static/js/broadcast_slider.js
+++ b/src/static/js/broadcast_slider.ts
@@ -1,13 +1,17 @@
-import * as _ from "./underscore.js";
+import _ from "underscore";
+
import { padmodals as padmodals$0 } from "./pad_modals.js";
import { colorutils as colorutils$0 } from "./colorutils.js";
+import {i18nextvar} from "./vendors/i18next";
+import {clientVars} from "../../node/handler/PadMessageHandler";
+import {CustomElementWithSheet} from "../module/CustomWindow";
'use strict';
const padmodals = { padmodals: padmodals$0 }.padmodals;
const colorutils = { colorutils: colorutils$0 }.colorutils;
const loadBroadcastSliderJS = (fireWhenAllScriptsAreLoaded) => {
let BroadcastSlider;
// Hack to ensure timeslider i18n values are in
- $("[data-key='timeslider_returnToPad'] > a > span").html(html10n.get('timeslider.toolbar.returnbutton'));
+ $("[data-key='timeslider_returnToPad'] > a > span").html(i18nextvar('timeslider.toolbar.returnbutton'));
(() => {
let sliderLength = 1000;
let sliderPos = 0;
@@ -56,7 +60,7 @@ const loadBroadcastSliderJS = (fireWhenAllScriptsAreLoaded) => {
$('a.tlink').map(function () {
$(this).attr('href', $(this).attr('thref').replace('%revision%', newpos));
});
- $('#revision_label').html(html10n.get('timeslider.version', { version: newpos }));
+ $('#revision_label').html(i18nextvar('timeslider.version', { version: newpos }));
$('#leftstar, #leftstep').toggleClass('disabled', newpos === 0);
$('#rightstar, #rightstep').toggleClass('disabled', newpos === sliderLength);
sliderPos = newpos;
@@ -100,7 +104,7 @@ const loadBroadcastSliderJS = (fireWhenAllScriptsAreLoaded) => {
}
});
if (numAnonymous > 0) {
- const anonymousAuthorString = html10n.get('timeslider.unnamedauthors', { num: numAnonymous });
+ const anonymousAuthorString = i18nextvar('timeslider.unnamedauthors', { num: numAnonymous });
if (numNamed !== 0) {
authorsList.append(` + ${anonymousAuthorString}`);
}
@@ -121,7 +125,7 @@ const loadBroadcastSliderJS = (fireWhenAllScriptsAreLoaded) => {
}
}
if (authors.length === 0) {
- authorsList.append(html10n.get('timeslider.toolbar.authorsList'));
+ authorsList.append(i18nextvar('timeslider.toolbar.authorsList'));
}
};
const playButtonUpdater = () => {
@@ -163,7 +167,7 @@ const loadBroadcastSliderJS = (fireWhenAllScriptsAreLoaded) => {
fireWhenAllScriptsAreLoaded.push(() => {
$(document).keyup((e) => {
if (!e)
- e = window.event;
+ e = window.event as any
const code = e.keyCode || e.which;
if (code === 37) { // left
if (e.shiftKey) {
@@ -196,19 +200,19 @@ const loadBroadcastSliderJS = (fireWhenAllScriptsAreLoaded) => {
});
// Slider dragging
$('#ui-slider-handle').mousedown(function (evt) {
- this.startLoc = evt.clientX;
- this.currentLoc = parseInt($(this).css('left'));
+ (this as unknown as CustomElementWithSheet).startLoc = evt.clientX;
+ (this as unknown as CustomElementWithSheet).currentLoc = parseInt($(this).css('left'));
sliderActive = true;
$(document).mousemove((evt2) => {
$(this).css('pointer', 'move');
- let newloc = this.currentLoc + (evt2.clientX - this.startLoc);
+ let newloc = (this as unknown as CustomElementWithSheet).currentLoc + (evt2.clientX - (this as unknown as CustomElementWithSheet).startLoc);
if (newloc < 0)
newloc = 0;
const maxPos = $('#ui-slider-bar').width() - 2;
if (newloc > maxPos)
newloc = maxPos;
const version = Math.floor(newloc * sliderLength / maxPos);
- $('#revision_label').html(html10n.get('timeslider.version', { version }));
+ $('#revision_label').html(i18nextvar('timeslider.version', { version }));
$(this).css('left', newloc);
if (getSliderPosition() !== version)
_callSliderCallbacks(version);
@@ -217,7 +221,7 @@ const loadBroadcastSliderJS = (fireWhenAllScriptsAreLoaded) => {
$(document).unbind('mousemove');
$(document).unbind('mouseup');
sliderActive = false;
- let newloc = this.currentLoc + (evt2.clientX - this.startLoc);
+ let newloc = (this as unknown as CustomElementWithSheet).currentLoc + (evt2.clientX - (this as unknown as CustomElementWithSheet).startLoc);
if (newloc < 0)
newloc = 0;
const maxPos = $('#ui-slider-bar').width() - 2;
@@ -229,7 +233,7 @@ const loadBroadcastSliderJS = (fireWhenAllScriptsAreLoaded) => {
$(this).css('left', '2px');
}
else {
- this.currentLoc = parseInt($(this).css('left'));
+ (this as unknown as CustomElementWithSheet).currentLoc = parseInt($(this).css('left'));
}
});
});
diff --git a/src/static/js/caretPosition.js b/src/static/js/caretPosition.ts
similarity index 97%
rename from src/static/js/caretPosition.js
rename to src/static/js/caretPosition.ts
index 3a27b0d606e..688bb8f875d 100644
--- a/src/static/js/caretPosition.js
+++ b/src/static/js/caretPosition.ts
@@ -1,4 +1,6 @@
'use strict';
+import {CustomElementWithSheet} from "../module/CustomWindow";
+
const createSelectionRange = (range) => {
const clonedRange = range.cloneRange();
// we set the selection start and end to avoid error when user selects a text bigger than
@@ -122,7 +124,7 @@ const getSelectionRange = () => {
};
export const getPosition = () => {
const range = getSelectionRange();
- if (!range || $(range.endContainer).closest('body')[0].id !== 'innerdocbody')
+ if (!range || ($(range.endContainer).closest('body')[0] as unknown as CustomElementWithSheet).id !== 'innerdocbody')
return null;
// When there's a or any element that has no height, we can't get the dimension of the
// element where the caret is. As we can't get the element height, we create a text node to get
diff --git a/src/static/js/changesettracker.js b/src/static/js/changesettracker.ts
similarity index 97%
rename from src/static/js/changesettracker.js
rename to src/static/js/changesettracker.ts
index 5db0fb1920e..e4f8ed0295f 100644
--- a/src/static/js/changesettracker.js
+++ b/src/static/js/changesettracker.ts
@@ -1,6 +1,7 @@
import AttributeMap from "./AttributeMap.js";
-import AttributePool from "./AttributePool.js";
+import {AttributePool} from "./AttributePool.js";
import * as Changeset from "./Changeset.js";
+import {CustomWindow} from "../module/CustomWindow";
'use strict';
const makeChangesetTracker = (scheduler, apool, aceCallbacksProvider) => {
// latest official text from server
@@ -111,7 +112,7 @@ const makeChangesetTracker = (scheduler, apool, aceCallbacksProvider) => {
}
else {
// Get my authorID
- const authorId = parent.parent.pad.myUserInfo.userId;
+ const authorId = (parent.parent as unknown as CustomWindow).pad.myUserInfo.userId;
// Sanitize authorship: Replace all author attributes with this user's author ID in case the
// text was copied from another author.
const cs = Changeset.unpack(userChangeset);
diff --git a/src/static/js/chat.js b/src/static/js/chat.ts
old mode 100755
new mode 100644
similarity index 90%
rename from src/static/js/chat.js
rename to src/static/js/chat.ts
index 74d45104472..66257668cf7
--- a/src/static/js/chat.js
+++ b/src/static/js/chat.ts
@@ -4,6 +4,9 @@ import { padcookie as padcookie$0 } from "./pad_cookie.js";
import Tinycon from "tinycon/tinycon";
import * as hooks from "./pluginfw/hooks.js";
import { padeditor as padeditor$0 } from "./pad_editor.js";
+import {CustomWindow, JQueryGritter} from "../module/CustomWindow";
+import {pad} from "./pad";
+import {i18nextvar} from "./vendors/i18next";
'use strict';
const padutils = { padutils: padutils$0 }.padutils;
const padcookie = { padcookie: padcookie$0 }.padcookie;
@@ -15,6 +18,8 @@ export const chat = (() => {
let userAndChat = false;
let chatMentions = 0;
return {
+ historyPointer: undefined, gotInitalMessages: false,
+
show() {
$('#chaticon').removeClass('visible');
$('#chatbox').addClass('visible');
@@ -22,7 +27,7 @@ export const chat = (() => {
chatMentions = 0;
Tinycon.setBubble(0);
$('.chat-gritter-msg').each(function () {
- $.gritter.remove(this.id);
+ ($ as unknown as JQueryGritter).gritter.remove(this.id);
});
},
focus: () => {
@@ -31,7 +36,7 @@ export const chat = (() => {
}, 100);
},
// Make chat stick to right hand side of screen
- stickToScreen(fromInitialCall) {
+ stickToScreen(fromInitialCall?) {
if (pad.settings.hideChat) {
return;
}
@@ -46,7 +51,7 @@ export const chat = (() => {
padcookie.setPref('chatAlwaysVisible', isStuck);
$('#options-stickychat').prop('checked', isStuck);
},
- chatAndUsers(fromInitialCall) {
+ chatAndUsers(fromInitialCall?) {
const toEnable = $('#options-chatandusers').is(':checked');
if (toEnable || !userAndChat || fromInitialCall) {
this.stickToScreen(true);
@@ -76,7 +81,7 @@ export const chat = (() => {
$('#chatbox').removeClass('visible');
}
},
- scrollDown(force) {
+ scrollDown(force?) {
if ($('#chatbox').hasClass('visible')) {
if (force || !this.lastMessage || !this.lastMessage.position() ||
this.lastMessage.position().top < ($('#chattext').outerHeight() + 20)) {
@@ -89,7 +94,7 @@ export const chat = (() => {
},
async send() {
const text = $('#chatinput').val();
- if (text.replace(/\s+/, '').length === 0)
+ if (typeof text !== "string" || text?.replace(/\s+/, '').length === 0)
return;
const message = new ChatMessage(text);
await hooks.aCallAll('chatSendMessage', Object.freeze({ message }));
@@ -117,7 +122,7 @@ export const chat = (() => {
})}`;
// the hook args
const ctx = {
- authorName: msg.displayName != null ? msg.displayName : html10n.get('pad.userlist.unnamed'),
+ authorName: msg.displayName != null ? msg.displayName : i18nextvar('pad.userlist.unnamed'),
author: msg.authorId,
text: padutils.escapeHtmlWithClickableLinks(msg.text, '_blank'),
message: msg,
@@ -140,8 +145,8 @@ export const chat = (() => {
// does the user already have the chatbox open?
const chatOpen = $('#chatbox').hasClass('visible');
// does this message contain this user's name? (is the current user mentioned?)
- const wasMentioned = msg.authorId !== window.clientVars.userId &&
- ctx.authorName !== html10n.get('pad.userlist.unnamed') &&
+ const wasMentioned = msg.authorId !== (window as unknown as CustomWindow).clientVars.userId &&
+ ctx.authorName !== i18nextvar('pad.userlist.unnamed') &&
normalize(ctx.text).includes(normalize(ctx.authorName));
// If the user was mentioned, make the message sticky
if (wasMentioned && !alreadyFocused && !isHistoryAdd && !chatOpen) {
@@ -169,7 +174,10 @@ export const chat = (() => {
chatMsg.insertAfter('#chatloadmessagesbutton');
else
$('#chattext').append(chatMsg);
- chatMsg.each((i, e) => html10n.translateElement(html10n.translations, e));
+ chatMsg.each((i, e) => {
+ //TODO Fix this and return the component
+ i18nextvar(e)
+ });
// should we increment the counter??
if (increment && !isHistoryAdd) {
// Update the counter of unread messages
@@ -182,8 +190,11 @@ export const chat = (() => {
// ctx.text was HTML-escaped before calling the hook. Hook functions are trusted
// to not introduce an XSS vulnerability by adding unescaped user input.
.append($('').html(ctx.text).contents());
- text.each((i, e) => html10n.translateElement(html10n.translations, e));
- $.gritter.add({
+ text.each((i, e) => {
+ //TODO Fix this and return the component
+ i18nextvar(e.getAttribute('data-l10n-id'))
+ });;
+ ($ as unknown as JQueryGritter).gritter.add({
text,
sticky: ctx.sticky,
time: ctx.duration,
diff --git a/src/static/js/collab_client.js b/src/static/js/collab_client.ts
similarity index 94%
rename from src/static/js/collab_client.js
rename to src/static/js/collab_client.ts
index 5652c331c02..e29f33d7d55 100644
--- a/src/static/js/collab_client.js
+++ b/src/static/js/collab_client.ts
@@ -1,6 +1,8 @@
import { chat as chat$0 } from "./chat.js";
import * as hooks from "./pluginfw/hooks.js";
import browser from "./vendors/browser.js";
+import {clientVars} from "../../node/handler/PadMessageHandler";
+import {AuthorData} from "../module/CustomWindow";
'use strict';
/**
* This code is mostly from the old Etherpad. Please help us to comment this code.
@@ -46,14 +48,14 @@ const getCollabClient = (ace2editor, serverVars, initialUserInfo, options, _pad)
userSet[userId] = initialUserInfo;
let isPendingRevision = false;
const callbacks = {
- onUserJoin: () => { },
- onUserLeave: () => { },
- onUpdateUserInfo: () => { },
- onChannelStateChange: () => { },
- onClientMessage: () => { },
- onInternalAction: () => { },
- onConnectionTrouble: () => { },
- onServerMessage: () => { },
+ onUserJoin: (arg?) => { },
+ onUserLeave: (arg?) => { },
+ onUpdateUserInfo: (arg?) => { },
+ onChannelStateChange: (arg?, addArg?) => { },
+ onClientMessage: (arg?) => { },
+ onInternalAction: (arg?) => { },
+ onConnectionTrouble: (arg?) => { },
+ onServerMessage: (arg?) => { },
};
if (browser.firefox) {
// Prevent "escape" from taking effect and canceling a comet connection;
@@ -151,6 +153,7 @@ const getCollabClient = (ace2editor, serverVars, initialUserInfo, options, _pad)
});
};
const serverMessageTaskQueue = new class {
+ private _promiseChain: Promise
;
constructor() {
this._promiseChain = Promise.resolve();
}
@@ -309,7 +312,7 @@ const getCollabClient = (ace2editor, serverVars, initialUserInfo, options, _pad)
const tellAceActiveAuthorInfo = (userInfo) => {
tellAceAuthorInfo(userInfo.userId, userInfo.colorId);
};
- const tellAceAuthorInfo = (userId, colorId, inactive) => {
+ const tellAceAuthorInfo = (userId, colorId, inactive?) => {
if (typeof colorId === 'number') {
colorId = clientVars.colorPalette[colorId];
}
@@ -333,11 +336,11 @@ const getCollabClient = (ace2editor, serverVars, initialUserInfo, options, _pad)
const tellAceAboutHistoricalAuthors = (hadata) => {
for (const [author, data] of Object.entries(hadata)) {
if (!userSet[author]) {
- tellAceAuthorInfo(author, data.colorId, true);
+ tellAceAuthorInfo(author, (data as AuthorData).colorId, true);
}
}
};
- const setChannelState = (newChannelState, moreInfo) => {
+ const setChannelState = (newChannelState, moreInfo?) => {
if (newChannelState !== channelState) {
channelState = newChannelState;
callbacks.onChannelStateChange(channelState, moreInfo);
@@ -353,7 +356,7 @@ const getCollabClient = (ace2editor, serverVars, initialUserInfo, options, _pad)
// We need to present a working interface even before the socket
// is connected for the first time.
let deferredActions = [];
- const defer = (func, tag) => function (...args) {
+ const defer = (func, tag?) => function (...args) {
const action = () => {
func.call(this, ...args);
};
@@ -365,7 +368,7 @@ const getCollabClient = (ace2editor, serverVars, initialUserInfo, options, _pad)
action();
}
};
- const doDeferredActions = (tag) => {
+ const doDeferredActions = (tag?) => {
const newArray = [];
for (let i = 0; i < deferredActions.length; i++) {
const a = deferredActions[i];
@@ -386,7 +389,14 @@ const getCollabClient = (ace2editor, serverVars, initialUserInfo, options, _pad)
};
const getCurrentRevisionNumber = () => rev;
const getMissedChanges = () => {
- const obj = {};
+ const obj = {
+ furtherChangeset: undefined,
+ furtherChangesetAPool: undefined,
+ committedChangesetAPool: undefined,
+ committedChangeset: undefined,
+ userInfo: undefined,
+ baseRev: undefined
+ };
obj.userInfo = userSet[userId];
obj.baseRev = rev;
if (committing && stateMessage) {
diff --git a/src/static/js/colorutils.js b/src/static/js/colorutils.js
deleted file mode 100644
index 25d67872862..00000000000
--- a/src/static/js/colorutils.js
+++ /dev/null
@@ -1,102 +0,0 @@
-'use strict';
-/**
- * This code is mostly from the old Etherpad. Please help us to comment this code.
- * This helps other people to understand this code better and helps them to improve it.
- * TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
- */
-// DO NOT EDIT THIS FILE, edit infrastructure/ace/www/colorutils.js
-// THIS FILE IS ALSO SERVED AS CLIENT-SIDE JS
-/**
- * Copyright 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS-IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-const colorutils = {};
-// Check that a given value is a css hex color value, e.g.
-// "#ffffff" or "#fff"
-colorutils.isCssHex = (cssColor) => /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(cssColor);
-// "#ffffff" or "#fff" or "ffffff" or "fff" to [1.0, 1.0, 1.0]
-colorutils.css2triple = (cssColor) => {
- const sixHex = colorutils.css2sixhex(cssColor);
- const hexToFloat = (hh) => Number(`0x${hh}`) / 255;
- return [
- hexToFloat(sixHex.substr(0, 2)),
- hexToFloat(sixHex.substr(2, 2)),
- hexToFloat(sixHex.substr(4, 2)),
- ];
-};
-// "#ffffff" or "#fff" or "ffffff" or "fff" to "ffffff"
-colorutils.css2sixhex = (cssColor) => {
- let h = /[0-9a-fA-F]+/.exec(cssColor)[0];
- if (h.length !== 6) {
- const a = h.charAt(0);
- const b = h.charAt(1);
- const c = h.charAt(2);
- h = a + a + b + b + c + c;
- }
- return h;
-};
-// [1.0, 1.0, 1.0] -> "#ffffff"
-colorutils.triple2css = (triple) => {
- const floatToHex = (n) => {
- const n2 = colorutils.clamp(Math.round(n * 255), 0, 255);
- return (`0${n2.toString(16)}`).slice(-2);
- };
- return `#${floatToHex(triple[0])}${floatToHex(triple[1])}${floatToHex(triple[2])}`;
-};
-colorutils.clamp = (v, bot, top) => v < bot ? bot : (v > top ? top : v);
-colorutils.min3 = (a, b, c) => (a < b) ? (a < c ? a : c) : (b < c ? b : c);
-colorutils.max3 = (a, b, c) => (a > b) ? (a > c ? a : c) : (b > c ? b : c);
-colorutils.colorMin = (c) => colorutils.min3(c[0], c[1], c[2]);
-colorutils.colorMax = (c) => colorutils.max3(c[0], c[1], c[2]);
-colorutils.scale = (v, bot, top) => colorutils.clamp(bot + v * (top - bot), 0, 1);
-colorutils.unscale = (v, bot, top) => colorutils.clamp((v - bot) / (top - bot), 0, 1);
-colorutils.scaleColor = (c, bot, top) => [
- colorutils.scale(c[0], bot, top),
- colorutils.scale(c[1], bot, top),
- colorutils.scale(c[2], bot, top),
-];
-colorutils.unscaleColor = (c, bot, top) => [
- colorutils.unscale(c[0], bot, top),
- colorutils.unscale(c[1], bot, top),
- colorutils.unscale(c[2], bot, top),
-];
-// rule of thumb for RGB brightness; 1.0 is white
-colorutils.luminosity = (c) => c[0] * 0.30 + c[1] * 0.59 + c[2] * 0.11;
-colorutils.saturate = (c) => {
- const min = colorutils.colorMin(c);
- const max = colorutils.colorMax(c);
- if (max - min <= 0)
- return [1.0, 1.0, 1.0];
- return colorutils.unscaleColor(c, min, max);
-};
-colorutils.blend = (c1, c2, t) => [
- colorutils.scale(t, c1[0], c2[0]),
- colorutils.scale(t, c1[1], c2[1]),
- colorutils.scale(t, c1[2], c2[2]),
-];
-colorutils.invert = (c) => [1 - c[0], 1 - c[1], 1 - c[2]];
-colorutils.complementary = (c) => {
- const inv = colorutils.invert(c);
- return [
- (inv[0] >= c[0]) ? Math.min(inv[0] * 1.30, 1) : (c[0] * 0.30),
- (inv[1] >= c[1]) ? Math.min(inv[1] * 1.59, 1) : (c[1] * 0.59),
- (inv[2] >= c[2]) ? Math.min(inv[2] * 1.11, 1) : (c[2] * 0.11),
- ];
-};
-colorutils.textColorFromBackgroundColor = (bgcolor, skinName) => {
- const white = skinName === 'colibris' ? 'var(--super-light-color)' : '#fff';
- const black = skinName === 'colibris' ? 'var(--super-dark-color)' : '#222';
- return colorutils.luminosity(colorutils.css2triple(bgcolor)) < 0.5 ? white : black;
-};
-export { colorutils };
diff --git a/src/static/js/colorutils.ts b/src/static/js/colorutils.ts
new file mode 100644
index 00000000000..a12db7d1155
--- /dev/null
+++ b/src/static/js/colorutils.ts
@@ -0,0 +1,113 @@
+'use strict';
+/**
+ * This code is mostly from the old Etherpad. Please help us to comment this code.
+ * This helps other people to understand this code better and helps them to improve it.
+ * TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
+ */
+// DO NOT EDIT THIS FILE, edit infrastructure/ace/www/colorutils.js
+// THIS FILE IS ALSO SERVED AS CLIENT-SIDE JS
+/**
+ * Copyright 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS-IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+const colorutils = {
+ css2triple: (cssColor) => {
+ const sixHex = colorutils.css2sixhex(cssColor);
+ const hexToFloat = (hh) => Number(`0x${hh}`) / 255;
+ return [
+ hexToFloat(sixHex.substr(0, 2)),
+ hexToFloat(sixHex.substr(2, 2)),
+ hexToFloat(sixHex.substr(4, 2)),
+ ];
+ },
+ // "#ffffff" or "#fff" or "ffffff" or "fff" to "ffffff"
+ css2sixhex: (cssColor) => {
+ let h = /[0-9a-fA-F]+/.exec(cssColor)[0];
+ if (h.length !== 6) {
+ const a = h.charAt(0);
+ const b = h.charAt(1);
+ const c = h.charAt(2);
+ h = a + a + b + b + c + c;
+ }
+ return h;
+ },
+ // [1.0, 1.0, 1.0] -> "#ffffff"
+ triple2css: (triple) => {
+ const floatToHex = (n) => {
+ const n2 = colorutils.clamp(Math.round(n * 255), 0, 255);
+ return (`0${n2.toString(16)}`).slice(-2);
+ };
+ return `#${floatToHex(triple[0])}${floatToHex(triple[1])}${floatToHex(triple[2])}`;
+ },
+ isCssHex: (cssColor) => /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(cssColor),
+ clamp: (v, bot, top) => v < bot ? bot : (v > top ? top : v),
+ min3: (a, b, c) => (a < b) ? (a < c ? a : c) : (b < c ? b : c),
+ max3: (a, b, c) => (a > b) ? (a > c ? a : c) : (b > c ? b : c),
+ colorMin: (c) => colorutils.min3(c[0], c[1], c[2]),
+ colorMax: (c) => colorutils.max3(c[0], c[1], c[2]),
+ scale: (v, bot, top) => colorutils.clamp(bot + v * (top - bot), 0, 1),
+ unscale: (v, bot, top) => colorutils.clamp((v - bot) / (top - bot), 0, 1),
+ scaleColor:(c, bot, top) => [
+ colorutils.scale(c[0], bot, top),
+ colorutils.scale(c[1], bot, top),
+ colorutils.scale(c[2], bot, top),
+ ],
+ unscaleColor: (c, bot, top) => [
+ colorutils.unscale(c[0], bot, top),
+ colorutils.unscale(c[1], bot, top),
+ colorutils.unscale(c[2], bot, top),
+ ],
+// rule of thumb for RGB brightness; 1.0 is white
+ luminosity: (c) => c[0] * 0.30 + c[1] * 0.59 + c[2] * 0.11,
+ saturate: (c) => {
+ const min = colorutils.colorMin(c);
+ const max = colorutils.colorMax(c);
+ if (max - min <= 0)
+ return [1.0, 1.0, 1.0];
+ return colorutils.unscaleColor(c, min, max);
+ },
+ blend: (c1, c2, t) => [
+ colorutils.scale(t, c1[0], c2[0]),
+ colorutils.scale(t, c1[1], c2[1]),
+ colorutils.scale(t, c1[2], c2[2]),
+ ],
+ invert: (c) => [1 - c[0], 1 - c[1], 1 - c[2]],
+ complementary: (c) => {
+ const inv = colorutils.invert(c);
+ return [
+ (inv[0] >= c[0]) ? Math.min(inv[0] * 1.30, 1) : (c[0] * 0.30),
+ (inv[1] >= c[1]) ? Math.min(inv[1] * 1.59, 1) : (c[1] * 0.59),
+ (inv[2] >= c[2]) ? Math.min(inv[2] * 1.11, 1) : (c[2] * 0.11),
+ ];
+ },
+ textColorFromBackgroundColor: (bgcolor, skinName) => {
+ const white = skinName === 'colibris' ? 'var(--super-light-color)' : '#fff';
+ const black = skinName === 'colibris' ? 'var(--super-dark-color)' : '#222';
+ return colorutils.luminosity(colorutils.css2triple(bgcolor)) < 0.5 ? white : black;
+ },
+};
+// Check that a given value is a css hex color value, e.g.
+// "#ffffff" or "#fff"
+// "#ffffff" or "#fff" or "ffffff" or "fff" to [1.0, 1.0, 1.0]
+colorutils.css2triple = (cssColor) => {
+ const sixHex = colorutils.css2sixhex(cssColor);
+ const hexToFloat = (hh) => Number(`0x${hh}`) / 255;
+ return [
+ hexToFloat(sixHex.substr(0, 2)),
+ hexToFloat(sixHex.substr(2, 2)),
+ hexToFloat(sixHex.substr(4, 2)),
+ ];
+};
+
+export { colorutils };
diff --git a/src/static/js/contentcollector.js b/src/static/js/contentcollector.ts
similarity index 57%
rename from src/static/js/contentcollector.js
rename to src/static/js/contentcollector.ts
index 41ec41c379a..0b78b393fa4 100644
--- a/src/static/js/contentcollector.js
+++ b/src/static/js/contentcollector.ts
@@ -1,3 +1,5 @@
+// @ts-nocheck
+//TODO make this file compatible with Typescript
import AttributeMap from "./AttributeMap.js";
import UNorm from "unorm";
import * as Changeset from "./Changeset.js";
@@ -51,7 +53,7 @@ const supportedElems = new Set([
'u',
'ul',
]);
-const makeContentCollector = (collectStyles, abrowser, apool, className2Author) => {
+const makeContentCollector = (collectStyles, abrowser, apool?, className2Author?) => {
const _blockElems = {
div: 1,
p: 1,
@@ -101,7 +103,380 @@ const makeContentCollector = (collectStyles, abrowser, apool, className2Author)
self.startNew();
return self;
})();
- const cc = {};
+ const cc = {
+ collectContent(body, state?) {
+ let unsupportedElements = null;
+ if (!state) {
+ state = {
+ flags: { /* name -> nesting counter*/},
+ localAttribs: null,
+ attribs: { /* name -> nesting counter*/},
+ attribString: '',
+ // lineAttributes maintain a map from attributes to attribute values set on a line
+ lineAttributes: {
+ /*
+ example:
+ 'list': 'bullet1',
+ */
+ },
+ unsupportedElements: new Set(),
+ };
+ unsupportedElements = state.unsupportedElements;
+ }
+ const localAttribs = state.localAttribs;
+ state.localAttribs = null;
+ const isBlock = isBlockElement(node);
+ if (!isBlock && node.name && (node.name !== 'body')) {
+ if (!supportedElems.has(node.name))
+ state.unsupportedElements.add(node.name);
+ }
+ const isEmpty = _isEmpty(node, state);
+ if (isBlock)
+ _ensureColumnZero(state);
+ const startLine = lines.length() - 1;
+ _reachBlockPoint(node, 0, state);
+ if (node.nodeType === node.TEXT_NODE) {
+ const tname = node.parentNode.getAttribute('name');
+ const context = { cc: this, state, tname, node, text: node.nodeValue };
+ // Hook functions may either return a string (deprecated) or modify context.text. If any hook
+ // function modifies context.text then all returned strings are ignored. If no hook functions
+ // modify context.text, the first hook function to return a string wins.
+ const [hookTxt] = hooks.callAll('collectContentLineText', context).filter((s) => typeof s === 'string');
+ let txt = context.text === node.nodeValue && hookTxt != null ? hookTxt : context.text;
+ let rest = '';
+ let x = 0; // offset into original text
+ if (txt.length === 0) {
+ if (startPoint && node === startPoint.node) {
+ selStart = _pointHere(0, state);
+ }
+ if (endPoint && node === endPoint.node) {
+ selEnd = _pointHere(0, state);
+ }
+ }
+ while (txt.length > 0) {
+ let consumed = 0;
+ if (state.flags.preMode) {
+ const firstLine = txt.split('\n', 1)[0];
+ consumed = firstLine.length + 1;
+ rest = txt.substring(consumed);
+ txt = firstLine;
+ }
+ else { /* will only run this loop body once */
+ }
+ if (startPoint && node === startPoint.node && startPoint.index - x <= txt.length) {
+ selStart = _pointHere(startPoint.index - x, state);
+ }
+ if (endPoint && node === endPoint.node && endPoint.index - x <= txt.length) {
+ selEnd = _pointHere(endPoint.index - x, state);
+ }
+ let txt2 = txt;
+ if ((!state.flags.preMode) && /^[\r\n]*$/.exec(txt)) {
+ // prevents textnodes containing just "\n" from being significant
+ // in safari when pasting text, now that we convert them to
+ // spaces instead of removing them, because in other cases
+ // removing "\n" from pasted HTML will collapse words together.
+ txt2 = '';
+ }
+ const atBeginningOfLine = lines.textOfLine(lines.length() - 1).length === 0;
+ if (atBeginningOfLine) {
+ // newlines in the source mustn't become spaces at beginning of line box
+ txt2 = txt2.replace(/^\n*/, '');
+ }
+ if (atBeginningOfLine && Object.keys(state.lineAttributes).length !== 0) {
+ _produceLineAttributesMarker(state);
+ }
+ lines.appendText(textify(txt2), state.attribString);
+ x += consumed;
+ txt = rest;
+ if (txt.length > 0) {
+ cc.startNewLine(state);
+ }
+ }
+ }
+ else if (node.nodeType === node.ELEMENT_NODE) {
+ const tname = tagName(node) || '';
+ if (tname === 'img') {
+ hooks.callAll('collectContentImage', {
+ cc,
+ state,
+ tname,
+ styl: null,
+ cls: null,
+ node,
+ });
+ }
+ else {
+ // THIS SEEMS VERY HACKY! -- Please submit a better fix!
+ delete state.lineAttributes.img;
+ }
+ if (tname === 'br') {
+ this.breakLine = true;
+ const tvalue = node.getAttribute('value');
+ const [startNewLine = true] = hooks.callAll('collectContentLineBreak', {
+ cc: this,
+ state,
+ tname,
+ tvalue,
+ styl: null,
+ cls: null,
+ });
+ if (startNewLine) {
+ cc.startNewLine(state);
+ }
+ }
+ else if (tname === 'script' || tname === 'style') {
+ // ignore
+ }
+ else if (!isEmpty) {
+ let styl = node.getAttribute('style');
+ let cls = node.getAttribute('class');
+ let isPre = (tname === 'pre');
+ if ((!isPre) && abrowser && abrowser.safari) {
+ isPre = (styl && /\bwhite-space:\s*pre\b/i.exec(styl));
+ }
+ if (isPre)
+ cc.incrementFlag(state, 'preMode');
+ let oldListTypeOrNull = null;
+ let oldAuthorOrNull = null;
+ // LibreOffice Writer puts in weird items during import or copy/paste, we should drop them.
+ if (cls === 'Numbering_20_Symbols' || cls === 'Bullet_20_Symbols') {
+ styl = null;
+ cls = null;
+ // We have to return here but this could break things in the future,
+ // for now it shows how to fix the problem
+ return;
+ }
+ if (collectStyles) {
+ hooks.callAll('collectContentPre', {
+ cc,
+ state,
+ tname,
+ styl,
+ cls,
+ });
+ if (tname === 'b' ||
+ (styl && /\bfont-weight:\s*bold\b/i.exec(styl)) ||
+ tname === 'strong') {
+ cc.doAttrib(state, 'bold');
+ }
+ if (tname === 'i' ||
+ (styl && /\bfont-style:\s*italic\b/i.exec(styl)) ||
+ tname === 'em') {
+ cc.doAttrib(state, 'italic');
+ }
+ if (tname === 'u' ||
+ (styl && /\btext-decoration:\s*underline\b/i.exec(styl)) ||
+ tname === 'ins') {
+ cc.doAttrib(state, 'underline');
+ }
+ if (tname === 's' ||
+ (styl && /\btext-decoration:\s*line-through\b/i.exec(styl)) ||
+ tname === 'del') {
+ cc.doAttrib(state, 'strikethrough');
+ }
+ if (tname === 'ul' || tname === 'ol') {
+ let type = node.getAttribute('class');
+ const rr = cls && /(?:^| )list-([a-z]+[0-9]+)\b/.exec(cls);
+ // lists do not need to have a type, so before we make a wrong guess
+ // check if we find a better hint within the node's children
+ if (!rr && !type) {
+ for (const child of node.childNodes) {
+ if (tagName(child) !== 'ul')
+ continue;
+ type = child.getAttribute('class');
+ if (type)
+ break;
+ }
+ }
+ if (rr && rr[1]) {
+ type = rr[1];
+ }
+ else {
+ if (tname === 'ul') {
+ const cls = node.getAttribute('class');
+ if ((type && type.match('indent')) || (cls && cls.match('indent'))) {
+ type = 'indent';
+ }
+ else {
+ type = 'bullet';
+ }
+ }
+ else {
+ type = 'number';
+ }
+ type += String(Math.min(_MAX_LIST_LEVEL, (state.listNesting || 0) + 1));
+ }
+ oldListTypeOrNull = (_enterList(state, type) || 'none');
+ }
+ else if ((tname === 'div' || tname === 'p') && cls && cls.match(/(?:^| )ace-line\b/)) {
+ // This has undesirable behavior in Chrome but is right in other browsers.
+ // See https://github.com/ether/etherpad-lite/issues/2412 for reasoning
+ if (!abrowser.chrome)
+ oldListTypeOrNull = (_enterList(state, undefined) || 'none');
+ }
+ else if (tname === 'li') {
+ state.lineAttributes.start = state.start || 0;
+ _recalcAttribString(state);
+ if (state.lineAttributes.list.indexOf('number') !== -1) {
+ /*
+ Nested OLs are not --> 1 nested
+ They are --> 1 nested
+ Note how the item has to be inside a
+ Because of this we don't increment the start number
+ */
+ if (node.parentNode && tagName(node.parentNode) !== 'ol') {
+ /*
+ TODO: start number has to increment based on indentLevel(numberX)
+ This means we have to build an object IE
+ {
+ 1: 4
+ 2: 3
+ 3: 5
+ }
+ But the browser seems to handle it fine using CSS.. Why can't we do the same
+ with exports? We can.. But let's leave this comment in because it might be useful
+ in the future..
+ */
+ state.start++; // not if it's parent is an OL or UL.
+ }
+ }
+ // UL list items never modify the start value.
+ if (node.parentNode && tagName(node.parentNode) === 'ul') {
+ state.start++;
+ // TODO, this is hacky.
+ // Because if the first item is an UL it will increment a list no?
+ // A much more graceful way would be to say, ul increases if it's within an OL
+ // But I don't know a way to do that because we're only aware of the previous Line
+ // As the concept of parent's doesn't exist when processing each domline...
+ }
+ }
+ else {
+ // Below needs more testin if it's neccesary as _exitList should take care of this.
+ // delete state.start;
+ // delete state.listNesting;
+ // _recalcAttribString(state);
+ }
+ if (className2Author && cls) {
+ const classes = cls.match(/\S+/g);
+ if (classes && classes.length > 0) {
+ for (let i = 0; i < classes.length; i++) {
+ const c = classes[i];
+ const a = className2Author(c);
+ if (a) {
+ oldAuthorOrNull = (_enterAuthor(state, a) || 'none');
+ break;
+ }
+ }
+ }
+ }
+ }
+ for (const c of node.childNodes) {
+ cc.collectContent(c, state);
+ }
+ if (collectStyles) {
+ hooks.callAll('collectContentPost', {
+ cc,
+ state,
+ tname,
+ styl,
+ cls,
+ });
+ }
+ if (isPre)
+ cc.decrementFlag(state, 'preMode');
+ if (state.localAttribs) {
+ for (let i = 0; i < state.localAttribs.length; i++) {
+ cc.decrementAttrib(state, state.localAttribs[i]);
+ }
+ }
+ if (oldListTypeOrNull) {
+ _exitList(state, oldListTypeOrNull);
+ }
+ if (oldAuthorOrNull) {
+ _exitAuthor(state, oldAuthorOrNull);
+ }
+ }
+ }
+ },
+ finish() {
+ lines.flush();
+ const lineAttribs = lines.attribLines();
+ const lineStrings = cc.getLines();
+ lineStrings.length--;
+ lineAttribs.length--;
+ const ss = getSelectionStart();
+ const se = getSelectionEnd();
+ const fixLongLines = () => {
+ // design mode does not deal with with really long lines!
+ const lineLimit = 2000; // chars
+ const buffer = 10; // chars allowed over before wrapping
+ let linesWrapped = 0;
+ let numLinesAfter = 0;
+ for (let i = lineStrings.length - 1; i >= 0; i--) {
+ let oldString = lineStrings[i];
+ let oldAttribString = lineAttribs[i];
+ if (oldString.length > lineLimit + buffer) {
+ const newStrings = [];
+ const newAttribStrings = [];
+ while (oldString.length > lineLimit) {
+ // var semiloc = oldString.lastIndexOf(';', lineLimit-1);
+ // var lengthToTake = (semiloc >= 0 ? (semiloc+1) : lineLimit);
+ const lengthToTake = lineLimit;
+ newStrings.push(oldString.substring(0, lengthToTake));
+ oldString = oldString.substring(lengthToTake);
+ newAttribStrings.push(Changeset.subattribution(oldAttribString, 0, lengthToTake));
+ oldAttribString = Changeset.subattribution(oldAttribString, lengthToTake);
+ }
+ if (oldString.length > 0) {
+ newStrings.push(oldString);
+ newAttribStrings.push(oldAttribString);
+ }
+ const fixLineNumber = (lineChar) => {
+ if (lineChar[0] < 0)
+ return;
+ let n = lineChar[0];
+ let c = lineChar[1];
+ if (n > i) {
+ n += (newStrings.length - 1);
+ }
+ else if (n === i) {
+ let a = 0;
+ while (c > newStrings[a].length) {
+ c -= newStrings[a].length;
+ a++;
+ }
+ n += a;
+ }
+ lineChar[0] = n;
+ lineChar[1] = c;
+ };
+ fixLineNumber(ss);
+ fixLineNumber(se);
+ linesWrapped++;
+ numLinesAfter += newStrings.length;
+ lineStrings.splice(i, 1, ...newStrings);
+ lineAttribs.splice(i, 1, ...newAttribStrings);
+ }
+ }
+ return {
+ linesWrapped,
+ numLinesAfter,
+ };
+ };
+ const wrapData = fixLongLines();
+ return {
+ selStart: ss,
+ selEnd: se,
+ linesWrapped: wrapData.linesWrapped,
+ numLinesAfter: wrapData.numLinesAfter,
+ lines: lineStrings,
+ lineAttribs,
+ };
+ }
+
+ }
+ return cc;
+ }
const _ensureColumnZero = (state) => {
if (!lines.atColumnZero()) {
cc.startNewLine(state);
@@ -615,83 +990,6 @@ const makeContentCollector = (collectStyles, abrowser, apool, className2Author)
// last line is complete (i.e. if a following span should be on a new line).
// can be called at any point
cc.getLines = () => lines.textLines();
- cc.finish = () => {
- lines.flush();
- const lineAttribs = lines.attribLines();
- const lineStrings = cc.getLines();
- lineStrings.length--;
- lineAttribs.length--;
- const ss = getSelectionStart();
- const se = getSelectionEnd();
- const fixLongLines = () => {
- // design mode does not deal with with really long lines!
- const lineLimit = 2000; // chars
- const buffer = 10; // chars allowed over before wrapping
- let linesWrapped = 0;
- let numLinesAfter = 0;
- for (let i = lineStrings.length - 1; i >= 0; i--) {
- let oldString = lineStrings[i];
- let oldAttribString = lineAttribs[i];
- if (oldString.length > lineLimit + buffer) {
- const newStrings = [];
- const newAttribStrings = [];
- while (oldString.length > lineLimit) {
- // var semiloc = oldString.lastIndexOf(';', lineLimit-1);
- // var lengthToTake = (semiloc >= 0 ? (semiloc+1) : lineLimit);
- const lengthToTake = lineLimit;
- newStrings.push(oldString.substring(0, lengthToTake));
- oldString = oldString.substring(lengthToTake);
- newAttribStrings.push(Changeset.subattribution(oldAttribString, 0, lengthToTake));
- oldAttribString = Changeset.subattribution(oldAttribString, lengthToTake);
- }
- if (oldString.length > 0) {
- newStrings.push(oldString);
- newAttribStrings.push(oldAttribString);
- }
- const fixLineNumber = (lineChar) => {
- if (lineChar[0] < 0)
- return;
- let n = lineChar[0];
- let c = lineChar[1];
- if (n > i) {
- n += (newStrings.length - 1);
- }
- else if (n === i) {
- let a = 0;
- while (c > newStrings[a].length) {
- c -= newStrings[a].length;
- a++;
- }
- n += a;
- }
- lineChar[0] = n;
- lineChar[1] = c;
- };
- fixLineNumber(ss);
- fixLineNumber(se);
- linesWrapped++;
- numLinesAfter += newStrings.length;
- lineStrings.splice(i, 1, ...newStrings);
- lineAttribs.splice(i, 1, ...newAttribStrings);
- }
- }
- return {
- linesWrapped,
- numLinesAfter,
- };
- };
- const wrapData = fixLongLines();
- return {
- selStart: ss,
- selEnd: se,
- linesWrapped: wrapData.linesWrapped,
- numLinesAfter: wrapData.numLinesAfter,
- lines: lineStrings,
- lineAttribs,
- };
- };
- return cc;
-};
export { sanitizeUnicode };
export { makeContentCollector };
export { supportedElems };
diff --git a/src/static/js/cssmanager.js b/src/static/js/cssmanager.ts
similarity index 100%
rename from src/static/js/cssmanager.js
rename to src/static/js/cssmanager.ts
diff --git a/src/static/js/domline.js b/src/static/js/domline.js
deleted file mode 100644
index aea7f84fa1b..00000000000
--- a/src/static/js/domline.js
+++ /dev/null
@@ -1,244 +0,0 @@
-import * as Security from "./security.js";
-import * as hooks from "./pluginfw/hooks.js";
-import * as _ from "./underscore.js";
-import { lineAttributeMarker as lineAttributeMarker$0 } from "./linestylefilter.js";
-'use strict';
-const lineAttributeMarker = { lineAttributeMarker: lineAttributeMarker$0 }.lineAttributeMarker;
-const noop = () => { };
-const domline = {};
-domline.addToLineClass = (lineClass, cls) => {
- // an "empty span" at any point can be used to add classes to
- // the line, using line:className. otherwise, we ignore
- // the span.
- cls.replace(/\S+/g, (c) => {
- if (c.indexOf('line:') === 0) {
- // add class to line
- lineClass = (lineClass ? `${lineClass} ` : '') + c.substring(5);
- }
- });
- return lineClass;
-};
-// if "document" is falsy we don't create a DOM node, just
-// an object with innerHTML and className
-domline.createDomLine = (nonEmpty, doesWrap, optBrowser, optDocument) => {
- const result = {
- node: null,
- appendSpan: noop,
- prepareForAdd: noop,
- notifyAdded: noop,
- clearSpans: noop,
- finishUpdate: noop,
- lineMarker: 0,
- };
- const document = optDocument;
- if (document) {
- result.node = document.createElement('div');
- // JAWS and NVDA screen reader compatibility. Only needed if in a real browser.
- result.node.setAttribute('aria-live', 'assertive');
- }
- else {
- result.node = {
- innerHTML: '',
- className: '',
- };
- }
- let html = [];
- let preHtml = '';
- let postHtml = '';
- let curHTML = null;
- const processSpaces = (s) => domline.processSpaces(s, doesWrap);
- const perTextNodeProcess = (doesWrap ? _.identity : processSpaces);
- const perHtmlLineProcess = (doesWrap ? processSpaces : _.identity);
- let lineClass = 'ace-line';
- result.appendSpan = (txt, cls) => {
- let processedMarker = false;
- // Handle lineAttributeMarker, if present
- if (cls.indexOf(lineAttributeMarker) >= 0) {
- let listType = /(?:^| )list:(\S+)/.exec(cls);
- const start = /(?:^| )start:(\S+)/.exec(cls);
- _.map(hooks.callAll('aceDomLinePreProcessLineAttributes', {
- domline,
- cls,
- }), (modifier) => {
- preHtml += modifier.preHtml;
- postHtml += modifier.postHtml;
- processedMarker |= modifier.processedMarker;
- });
- if (listType) {
- listType = listType[1];
- if (listType) {
- if (listType.indexOf('number') < 0) {
- preHtml += `${postHtml}`;
- }
- else {
- if (start) { // is it a start of a list with more than one item in?
- if (Number.parseInt(start[1]) === 1) { // if its the first one at this level?
- // Add start class to DIV node
- lineClass = `${lineClass} ` + `list-start-${listType}`;
- }
- preHtml +=
- ``;
- }
- else {
- // Handles pasted contents into existing lists
- preHtml += ``;
- }
- postHtml += ' ';
- }
- }
- processedMarker = true;
- }
- _.map(hooks.callAll('aceDomLineProcessLineAttributes', {
- domline,
- cls,
- }), (modifier) => {
- preHtml += modifier.preHtml;
- postHtml += modifier.postHtml;
- processedMarker |= modifier.processedMarker;
- });
- if (processedMarker) {
- result.lineMarker += txt.length;
- return; // don't append any text
- }
- }
- let href = null;
- let simpleTags = null;
- if (cls.indexOf('url') >= 0) {
- cls = cls.replace(/(^| )url:(\S+)/g, (x0, space, url) => {
- href = url;
- return `${space}url`;
- });
- }
- if (cls.indexOf('tag') >= 0) {
- cls = cls.replace(/(^| )tag:(\S+)/g, (x0, space, tag) => {
- if (!simpleTags)
- simpleTags = [];
- simpleTags.push(tag.toLowerCase());
- return space + tag;
- });
- }
- let extraOpenTags = '';
- let extraCloseTags = '';
- _.map(hooks.callAll('aceCreateDomLine', {
- domline,
- cls,
- }), (modifier) => {
- cls = modifier.cls;
- extraOpenTags += modifier.extraOpenTags;
- extraCloseTags = modifier.extraCloseTags + extraCloseTags;
- });
- if ((!txt) && cls) {
- lineClass = domline.addToLineClass(lineClass, cls);
- }
- else if (txt) {
- if (href) {
- const urn_schemes = new RegExp('^(about|geo|mailto|tel):');
- // if the url doesn't include a protocol prefix, assume http
- if (!~href.indexOf('://') && !urn_schemes.test(href)) {
- href = `http://${href}`;
- }
- // Using rel="noreferrer" stops leaking the URL/location of the pad when
- // clicking links in the document.
- // Not all browsers understand this attribute, but it's part of the HTML5 standard.
- // https://html.spec.whatwg.org/multipage/links.html#link-type-noreferrer
- // Additionally, we do rel="noopener" to ensure a higher level of referrer security.
- // https://html.spec.whatwg.org/multipage/links.html#link-type-noopener
- // https://mathiasbynens.github.io/rel-noopener/
- // https://github.com/ether/etherpad-lite/pull/3636
- const escapedHref = Security.escapeHTMLAttribute(href);
- extraOpenTags = `${extraOpenTags}`;
- extraCloseTags = ` ${extraCloseTags}`;
- }
- if (simpleTags) {
- simpleTags.sort();
- extraOpenTags = `${extraOpenTags}<${simpleTags.join('><')}>`;
- simpleTags.reverse();
- extraCloseTags = `${simpleTags.join('>')}>${extraCloseTags}`;
- }
- html.push('', extraOpenTags, perTextNodeProcess(Security.escapeHTML(txt)), extraCloseTags, ' ');
- }
- };
- result.clearSpans = () => {
- html = [];
- lineClass = 'ace-line';
- result.lineMarker = 0;
- };
- const writeHTML = () => {
- let newHTML = perHtmlLineProcess(html.join(''));
- if (!newHTML) {
- if ((!document) || (!optBrowser)) {
- newHTML += ' ';
- }
- else {
- newHTML += ' ';
- }
- }
- if (nonEmpty) {
- newHTML = (preHtml || '') + newHTML + (postHtml || '');
- }
- html = preHtml = postHtml = ''; // free memory
- if (newHTML !== curHTML) {
- curHTML = newHTML;
- result.node.innerHTML = curHTML;
- }
- if (lineClass != null)
- result.node.className = lineClass;
- hooks.callAll('acePostWriteDomLineHTML', {
- node: result.node,
- });
- };
- result.prepareForAdd = writeHTML;
- result.finishUpdate = writeHTML;
- return result;
-};
-domline.processSpaces = (s, doesWrap) => {
- if (s.indexOf('<') < 0 && !doesWrap) {
- // short-cut
- return s.replace(/ /g, ' ');
- }
- const parts = [];
- s.replace(/<[^>]*>?| |[^ <]+/g, (m) => {
- parts.push(m);
- });
- if (doesWrap) {
- let endOfLine = true;
- let beforeSpace = false;
- // last space in a run is normal, others are nbsp,
- // end of line is nbsp
- for (let i = parts.length - 1; i >= 0; i--) {
- const p = parts[i];
- if (p === ' ') {
- if (endOfLine || beforeSpace)
- parts[i] = ' ';
- endOfLine = false;
- beforeSpace = true;
- }
- else if (p.charAt(0) !== '<') {
- endOfLine = false;
- beforeSpace = false;
- }
- }
- // beginning of line is nbsp
- for (let i = 0; i < parts.length; i++) {
- const p = parts[i];
- if (p === ' ') {
- parts[i] = ' ';
- break;
- }
- else if (p.charAt(0) !== '<') {
- break;
- }
- }
- }
- else {
- for (let i = 0; i < parts.length; i++) {
- const p = parts[i];
- if (p === ' ') {
- parts[i] = ' ';
- }
- }
- }
- return parts.join('');
-};
-export { domline };
diff --git a/src/static/js/domline.ts b/src/static/js/domline.ts
new file mode 100644
index 00000000000..6b62a2231bb
--- /dev/null
+++ b/src/static/js/domline.ts
@@ -0,0 +1,408 @@
+import * as Security from "./security.js";
+import * as hooks from "./pluginfw/hooks.js";
+import * as _ from "underscore";
+import { lineAttributeMarker as lineAttributeMarker$0 } from "./linestylefilter.js";
+'use strict';
+const lineAttributeMarker = { lineAttributeMarker: lineAttributeMarker$0 }.lineAttributeMarker;
+const noop = () => { };
+const domline = {
+ processSpaces: (s, doesWrap) => {
+ if (s.indexOf('<') < 0 && !doesWrap) {
+ // short-cut
+ return s.replace(/ /g, ' ');
+ }
+ const parts = [];
+ s.replace(/<[^>]*>?| |[^ <]+/g, (m) => {
+ parts.push(m);
+ });
+ if (doesWrap) {
+ let endOfLine = true;
+ let beforeSpace = false;
+ // last space in a run is normal, others are nbsp,
+ // end of line is nbsp
+ for (let i = parts.length - 1; i >= 0; i--) {
+ const p = parts[i];
+ if (p === ' ') {
+ if (endOfLine || beforeSpace)
+ parts[i] = ' ';
+ endOfLine = false;
+ beforeSpace = true;
+ }
+ else if (p.charAt(0) !== '<') {
+ endOfLine = false;
+ beforeSpace = false;
+ }
+ }
+ // beginning of line is nbsp
+ for (let i = 0; i < parts.length; i++) {
+ const p = parts[i];
+ if (p === ' ') {
+ parts[i] = ' ';
+ break;
+ }
+ else if (p.charAt(0) !== '<') {
+ break;
+ }
+ }
+ }
+ else {
+ for (let i = 0; i < parts.length; i++) {
+ const p = parts[i];
+ if (p === ' ') {
+ parts[i] = ' ';
+ }
+ }
+ }
+ return parts.join('');
+ },
+ addToLineClass: (lineClass, cls) => {
+ // an "empty span" at any point can be used to add classes to
+ // the line, using line:className. otherwise, we ignore
+ // the span.
+ cls.replace(/\S+/g, (c) => {
+ if (c.indexOf('line:') === 0) {
+ // add class to line
+ lineClass = (lineClass ? `${lineClass} ` : '') + c.substring(5);
+ }
+ });
+ return lineClass;
+ },
+ createDomLine: (nonEmpty, doesWrap, optBrowser?, optDocument?) => {
+ const result = {
+ node: null,
+ prepareForAdd: noop,
+ notifyAdded: noop,
+ finishUpdate: noop,
+ lineMarker: 0,
+ clearSpans: () => {
+ html = [];
+ lineClass = 'ace-line';
+ result.lineMarker = 0;
+ },
+ appendSpan: (txt, cls) => {
+ let processedMarker:any = false;
+ // Handle lineAttributeMarker, if present
+ if (cls.indexOf(lineAttributeMarker) >= 0) {
+ let listType:any = /(?:^| )list:(\S+)/.exec(cls);
+ const start = /(?:^| )start:(\S+)/.exec(cls);
+ _.map(hooks.callAll('aceDomLinePreProcessLineAttributes', {
+ domline,
+ cls,
+ }), (modifier) => {
+ preHtml += modifier.preHtml;
+ postHtml += modifier.postHtml;
+ processedMarker |= modifier.processedMarker;
+ });
+ if (listType) {
+ listType = listType[1];
+ if (listType) {
+ if (listType.indexOf('number') < 0) {
+ preHtml += `${postHtml}`;
+ } else {
+ if (start) { // is it a start of a list with more than one item in?
+ if (Number.parseInt(start[1]) === 1) { // if its the first one at this level?
+ // Add start class to DIV node
+ lineClass = `${lineClass} ` + `list-start-${listType}`;
+ }
+ preHtml +=
+ ``;
+ } else {
+ // Handles pasted contents into existing lists
+ preHtml += ``;
+ }
+ postHtml += ' ';
+ }
+ }
+ processedMarker = true;
+ }
+ _.map(hooks.callAll('aceDomLineProcessLineAttributes', {
+ domline,
+ cls,
+ }), (modifier) => {
+ preHtml += modifier.preHtml;
+ postHtml += modifier.postHtml;
+ processedMarker |= modifier.processedMarker;
+ });
+ if (processedMarker) {
+ result.lineMarker += txt.length;
+ return; // don't append any text
+ }
+ }
+ let href = null;
+ let simpleTags = null;
+ if (cls.indexOf('url') >= 0) {
+ cls = cls.replace(/(^| )url:(\S+)/g, (x0, space, url) => {
+ href = url;
+ return `${space}url`;
+ });
+ }
+ if (cls.indexOf('tag') >= 0) {
+ cls = cls.replace(/(^| )tag:(\S+)/g, (x0, space, tag) => {
+ if (!simpleTags)
+ simpleTags = [];
+ simpleTags.push(tag.toLowerCase());
+ return space + tag;
+ });
+ }
+ let extraOpenTags = '';
+ let extraCloseTags = '';
+ _.map(hooks.callAll('aceCreateDomLine', {
+ domline,
+ cls,
+ }), (modifier) => {
+ cls = modifier.cls;
+ extraOpenTags += modifier.extraOpenTags;
+ extraCloseTags = modifier.extraCloseTags + extraCloseTags;
+ });
+ if ((!txt) && cls) {
+ lineClass = domline.addToLineClass(lineClass, cls);
+ } else if (txt) {
+ if (href) {
+ const urn_schemes = new RegExp('^(about|geo|mailto|tel):');
+ // if the url doesn't include a protocol prefix, assume http
+ if (!~href.indexOf('://') && !urn_schemes.test(href)) {
+ href = `http://${href}`;
+ }
+ // Using rel="noreferrer" stops leaking the URL/location of the pad when
+ // clicking links in the document.
+ // Not all browsers understand this attribute, but it's part of the HTML5 standard.
+ // https://html.spec.whatwg.org/multipage/links.html#link-type-noreferrer
+ // Additionally, we do rel="noopener" to ensure a higher level of referrer security.
+ // https://html.spec.whatwg.org/multipage/links.html#link-type-noopener
+ // https://mathiasbynens.github.io/rel-noopener/
+ // https://github.com/ether/etherpad-lite/pull/3636
+ const escapedHref = Security.escapeHTMLAttribute(href);
+ extraOpenTags = `${extraOpenTags}`;
+ extraCloseTags = ` ${extraCloseTags}`;
+ }
+ if (simpleTags) {
+ simpleTags.sort();
+ extraOpenTags = `${extraOpenTags}<${simpleTags.join('><')}>`;
+ simpleTags.reverse();
+ extraCloseTags = `${simpleTags.join('>')}>${extraCloseTags}`;
+ }
+ (html as any[]).push('', extraOpenTags,
+ perTextNodeProcess(Security.escapeHTML(txt)), extraCloseTags, ' ');
+ }
+ }
+
+ }
+ const document = optDocument;
+ if (document) {
+ result.node = document.createElement('div');
+ // JAWS and NVDA screen reader compatibility. Only needed if in a real browser.
+ result.node.setAttribute('aria-live', 'assertive');
+ }
+ else {
+ result.node = {
+ innerHTML: '',
+ className: '',
+ };
+ }
+ let html:any[]|string = [];
+ let preHtml = '';
+ let postHtml = '';
+ let curHTML = null;
+ const processSpaces = (s) => domline.processSpaces(s, doesWrap);
+ const perTextNodeProcess = (doesWrap ? _.identity : processSpaces);
+ const perHtmlLineProcess = (doesWrap ? processSpaces : _.identity);
+ let lineClass = 'ace-line';
+ const writeHTML = () => {
+ let newHTML = perHtmlLineProcess((html as any[]).join(''));
+ if (!newHTML) {
+ if ((!document) || (!optBrowser)) {
+ newHTML += ' ';
+ }
+ else {
+ newHTML += ' ';
+ }
+ }
+ if (nonEmpty) {
+ newHTML = (preHtml || '') + newHTML + (postHtml || '');
+ }
+ html = preHtml = postHtml = ''; // free memory
+ if (newHTML !== curHTML) {
+ curHTML = newHTML;
+ result.node.innerHTML = curHTML;
+ }
+ if (lineClass != null)
+ result.node.className = lineClass;
+ hooks.callAll('acePostWriteDomLineHTML', {
+ node: result.node,
+ });
+ };
+ result.prepareForAdd = writeHTML;
+ result.finishUpdate = writeHTML;
+ return result;
+ }
+}
+// if "document" is falsy we don't create a DOM node, just
+// an object with innerHTML and className
+domline.createDomLine = (nonEmpty, doesWrap, optBrowser, optDocument) => {
+ const result = {
+ node: null,
+ prepareForAdd: noop,
+ notifyAdded: noop,
+ clearSpans: noop,
+ finishUpdate: noop,
+ lineMarker: 0,
+ appendSpan: (txt, cls) => {
+ let processedMarker:any = false;
+ // Handle lineAttributeMarker, if present
+ if (cls.indexOf(lineAttributeMarker) >= 0) {
+ let listType:any = /(?:^| )list:(\S+)/.exec(cls);
+ const start = /(?:^| )start:(\S+)/.exec(cls);
+ _.map(hooks.callAll('aceDomLinePreProcessLineAttributes', {
+ domline,
+ cls,
+ }), (modifier) => {
+ preHtml += modifier.preHtml;
+ postHtml += modifier.postHtml;
+ processedMarker |= modifier.processedMarker;
+ });
+ if (listType) {
+ listType = listType[1];
+ if (listType) {
+ if (listType.indexOf('number') < 0) {
+ preHtml += `${postHtml}`;
+ }
+ else {
+ if (start) { // is it a start of a list with more than one item in?
+ if (Number.parseInt(start[1]) === 1) { // if its the first one at this level?
+ // Add start class to DIV node
+ lineClass = `${lineClass} ` + `list-start-${listType}`;
+ }
+ preHtml +=
+ ``;
+ }
+ else {
+ // Handles pasted contents into existing lists
+ preHtml += ``;
+ }
+ postHtml += ' ';
+ }
+ }
+ processedMarker = true;
+ }
+ _.map(hooks.callAll('aceDomLineProcessLineAttributes', {
+ domline,
+ cls,
+ }), (modifier) => {
+ preHtml += modifier.preHtml;
+ postHtml += modifier.postHtml;
+ processedMarker |= modifier.processedMarker;
+ });
+ if (processedMarker) {
+ result.lineMarker += txt.length;
+ return; // don't append any text
+ }
+ }
+ let href = null;
+ let simpleTags = null;
+ if (cls.indexOf('url') >= 0) {
+ cls = cls.replace(/(^| )url:(\S+)/g, (x0, space, url) => {
+ href = url;
+ return `${space}url`;
+ });
+ }
+ if (cls.indexOf('tag') >= 0) {
+ cls = cls.replace(/(^| )tag:(\S+)/g, (x0, space, tag) => {
+ if (!simpleTags)
+ simpleTags = [];
+ simpleTags.push(tag.toLowerCase());
+ return space + tag;
+ });
+ }
+ let extraOpenTags = '';
+ let extraCloseTags = '';
+ _.map(hooks.callAll('aceCreateDomLine', {
+ domline,
+ cls,
+ }), (modifier) => {
+ cls = modifier.cls;
+ extraOpenTags += modifier.extraOpenTags;
+ extraCloseTags = modifier.extraCloseTags + extraCloseTags;
+ });
+ if ((!txt) && cls) {
+ lineClass = domline.addToLineClass(lineClass, cls);
+ }
+ else if (txt) {
+ if (href) {
+ const urn_schemes = new RegExp('^(about|geo|mailto|tel):');
+ // if the url doesn't include a protocol prefix, assume http
+ if (!~href.indexOf('://') && !urn_schemes.test(href)) {
+ href = `http://${href}`;
+ }
+ // Using rel="noreferrer" stops leaking the URL/location of the pad when
+ // clicking links in the document.
+ // Not all browsers understand this attribute, but it's part of the HTML5 standard.
+ // https://html.spec.whatwg.org/multipage/links.html#link-type-noreferrer
+ // Additionally, we do rel="noopener" to ensure a higher level of referrer security.
+ // https://html.spec.whatwg.org/multipage/links.html#link-type-noopener
+ // https://mathiasbynens.github.io/rel-noopener/
+ // https://github.com/ether/etherpad-lite/pull/3636
+ const escapedHref = Security.escapeHTMLAttribute(href);
+ extraOpenTags = `${extraOpenTags}`;
+ extraCloseTags = ` ${extraCloseTags}`;
+ }
+ if (simpleTags) {
+ simpleTags.sort();
+ extraOpenTags = `${extraOpenTags}<${simpleTags.join('><')}>`;
+ simpleTags.reverse();
+ extraCloseTags = `${simpleTags.join('>')}>${extraCloseTags}`;
+ }
+ html.push('', extraOpenTags, perTextNodeProcess(Security.escapeHTML(txt)), extraCloseTags, ' ');
+ }
+ }
+ };
+ const document = optDocument;
+ if (document) {
+ result.node = document.createElement('div');
+ // JAWS and NVDA screen reader compatibility. Only needed if in a real browser.
+ result.node.setAttribute('aria-live', 'assertive');
+ }
+ else {
+ result.node = {
+ innerHTML: '',
+ className: '',
+ };
+ }
+ let html:any|any[] = [];
+ let preHtml = '';
+ let postHtml = '';
+ let curHTML = null;
+ const processSpaces = (s) => domline.processSpaces(s, doesWrap);
+ const perTextNodeProcess = (doesWrap ? _.identity : processSpaces);
+ const perHtmlLineProcess = (doesWrap ? processSpaces : _.identity);
+ let lineClass = 'ace-line';
+ const writeHTML = () => {
+ let newHTML = perHtmlLineProcess(html.join(''));
+ if (!newHTML) {
+ if ((!document) || (!optBrowser)) {
+ newHTML += ' ';
+ }
+ else {
+ newHTML += ' ';
+ }
+ }
+ if (nonEmpty) {
+ newHTML = (preHtml || '') + newHTML + (postHtml || '');
+ }
+ html = preHtml = postHtml = ''; // free memory
+ if (newHTML !== curHTML) {
+ curHTML = newHTML;
+ result.node.innerHTML = curHTML;
+ }
+ if (lineClass != null)
+ result.node.className = lineClass;
+ hooks.callAll('acePostWriteDomLineHTML', {
+ node: result.node,
+ });
+ };
+ result.prepareForAdd = writeHTML;
+ result.finishUpdate = writeHTML;
+ return result;
+};
+export { domline };
diff --git a/src/static/js/index.js b/src/static/js/index.ts
similarity index 83%
rename from src/static/js/index.js
rename to src/static/js/index.ts
index bc7ae68f682..ef33b3e1143 100644
--- a/src/static/js/index.js
+++ b/src/static/js/index.ts
@@ -1,6 +1,7 @@
'use strict';
/* eslint-disable-next-line max-len */
// @license magnet:?xt=urn:btih:8e4f440f4c65981c5bf93c76d35135ba5064d8b7&dn=apache-2.0.txt Apache-2.0
+
/**
* Copyright 2011 Peter Martischka, Primary Technology.
* Copyright 2020 Richard Hansen
@@ -17,6 +18,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
+// FIXME Why should this variable be a rename?
+// @ts-ignore
+// @ts-ignore
const randomPadName = () => {
// the number of distinct chars (64) is chosen to ensure that the selection will be uniform when
// using the PRNG below
@@ -26,7 +31,7 @@ const randomPadName = () => {
// make room for 8-bit integer values that span from 0 to 255.
const randomarray = new Uint8Array(stringLength);
// use browser's PRNG to generate a "unique" sequence
- const cryptoObj = window.crypto || window.msCrypto; // for IE 11
+ const cryptoObj = window.crypto; // for IE 11
cryptoObj.getRandomValues(randomarray);
let randomstring = '';
for (let i = 0; i < stringLength; i++) {
@@ -40,8 +45,8 @@ const randomPadName = () => {
$(() => {
$('#go2Name').submit(() => {
const padname = $('#padname').val();
- if (padname.length > 0) {
- window.location = `p/${encodeURIComponent(padname.trim())}`;
+ if (typeof padname === "string" && padname.length > 0) {
+ window.location.href = `p/${encodeURIComponent(padname.trim())}`;
}
else {
alert('Please enter a name');
@@ -49,9 +54,9 @@ $(() => {
return false;
});
$('#button').click(() => {
- window.location = `p/${randomPadName()}`;
+ window.location.href = `p/${randomPadName()}`;
});
// start the custom js
- if (typeof window.customStart === 'function')
+ if ("customStart" in window && typeof window.customStart === 'function')
window.customStart();
});
diff --git a/src/static/js/l10n.js b/src/static/js/l10n.js
deleted file mode 100644
index 78674942959..00000000000
--- a/src/static/js/l10n.js
+++ /dev/null
@@ -1,14 +0,0 @@
-'use strict';
-((document) => {
- // Set language for l10n
- let language = document.cookie.match(/language=((\w{2,3})(-\w+)?)/);
- if (language)
- language = language[1];
- html10n.bind('indexed', () => {
- html10n.localize([language, navigator.language, navigator.userLanguage, 'en']);
- });
- html10n.bind('localized', () => {
- document.documentElement.lang = html10n.getLanguage();
- document.documentElement.dir = html10n.getDirection();
- });
-})(document);
diff --git a/src/static/js/linestylefilter.js b/src/static/js/linestylefilter.ts
similarity index 51%
rename from src/static/js/linestylefilter.js
rename to src/static/js/linestylefilter.ts
index b8cd5b6f558..499c2402aaa 100644
--- a/src/static/js/linestylefilter.js
+++ b/src/static/js/linestylefilter.ts
@@ -4,23 +4,24 @@ import * as hooks from "./pluginfw/hooks.js";
import AttributeManager from "./AttributeManager.js";
import { padutils as padutils$0 } from "./pad_utils.js";
'use strict';
-const linestylefilter = {};
+
+
const padutils = { padutils: padutils$0 }.padutils;
-linestylefilter.ATTRIB_CLASSES = {
- bold: 'tag:b',
- italic: 'tag:i',
- underline: 'tag:u',
- strikethrough: 'tag:s',
-};
-const lineAttributeMarker = 'lineAttribMarker';
-linestylefilter.getAuthorClassName = (author) => `author-${author.replace(/[^a-y0-9]/g, (c) => {
- if (c === '.')
- return '-';
- return `z${c.charCodeAt(0)}z`;
-})}`;
-// lineLength is without newline; aline includes newline,
-// but may be falsy if lineLength == 0
-linestylefilter.getLineStyleFilter = (lineLength, aline, textAndClassFunc, apool) => {
+
+// @ts-ignore
+const linestylefilter = {
+ ATTRIB_CLASSES: {
+ bold: 'tag:b',
+ italic: 'tag:i',
+ underline: 'tag:u',
+ strikethrough: 'tag:s',
+ },
+ getAuthorClassName: (author) => `author-${author.replace(/[^a-y0-9]/g, (c) => {
+ if (c === '.')
+ return '-';
+ return `z${c.charCodeAt(0)}z`;
+ })}`,
+ getLineStyleFilter: (lineLength, aline, textAndClassFunc, apool) => {
// Plugin Hook to add more Attrib Classes
for (const attribClasses of hooks.callAll('aceAttribClasses', linestylefilter.ATTRIB_CLASSES)) {
Object.assign(linestylefilter.ATTRIB_CLASSES, attribClasses);
@@ -115,126 +116,132 @@ linestylefilter.getLineStyleFilter = (lineLength, aline, textAndClassFunc, apool
};
})();
return authorColorFunc;
-};
-linestylefilter.getAtSignSplitterFilter = (lineText, textAndClassFunc) => {
- const at = /@/g;
- at.lastIndex = 0;
- let splitPoints = null;
- let execResult;
- while ((execResult = at.exec(lineText))) {
- if (!splitPoints) {
- splitPoints = [];
- }
- splitPoints.push(execResult.index);
- }
- if (!splitPoints)
- return textAndClassFunc;
- return linestylefilter.textAndClassFuncSplitter(textAndClassFunc, splitPoints);
-};
-linestylefilter.getRegexpFilter = (regExp, tag) => (lineText, textAndClassFunc) => {
- regExp.lastIndex = 0;
- let regExpMatchs = null;
- let splitPoints = null;
- let execResult;
- while ((execResult = regExp.exec(lineText))) {
- if (!regExpMatchs) {
- regExpMatchs = [];
- splitPoints = [];
+},
+ getAtSignSplitterFilter: (lineText, textAndClassFunc) => {
+ const at = /@/g;
+ at.lastIndex = 0;
+ let splitPoints = null;
+ let execResult;
+ while ((execResult = at.exec(lineText))) {
+ if (!splitPoints) {
+ splitPoints = [];
+ }
+ splitPoints.push(execResult.index);
}
- const startIndex = execResult.index;
- const regExpMatch = execResult[0];
- regExpMatchs.push([startIndex, regExpMatch]);
- splitPoints.push(startIndex, startIndex + regExpMatch.length);
- }
- if (!regExpMatchs)
- return textAndClassFunc;
- const regExpMatchForIndex = (idx) => {
- for (let k = 0; k < regExpMatchs.length; k++) {
- const u = regExpMatchs[k];
- if (idx >= u[0] && idx < u[0] + u[1].length) {
- return u[1];
+ if (!splitPoints)
+ return textAndClassFunc;
+ return linestylefilter.textAndClassFuncSplitter(textAndClassFunc, splitPoints);
+ },
+ getRegexpFilter: (regExp, tag) => (lineText, textAndClassFunc) => {
+ regExp.lastIndex = 0;
+ let regExpMatchs = null;
+ let splitPoints = null;
+ let execResult;
+ while ((execResult = regExp.exec(lineText))) {
+ if (!regExpMatchs) {
+ regExpMatchs = [];
+ splitPoints = [];
}
+ const startIndex = execResult.index;
+ const regExpMatch = execResult[0];
+ regExpMatchs.push([startIndex, regExpMatch]);
+ splitPoints.push(startIndex, startIndex + regExpMatch.length);
}
- return false;
- };
- const handleRegExpMatchsAfterSplit = (() => {
- let curIndex = 0;
- return (txt, cls) => {
- const txtlen = txt.length;
- let newCls = cls;
- const regExpMatch = regExpMatchForIndex(curIndex);
- if (regExpMatch) {
- newCls += ` ${tag}:${regExpMatch}`;
+ if (!regExpMatchs)
+ return textAndClassFunc;
+ const regExpMatchForIndex = (idx) => {
+ for (let k = 0; k < regExpMatchs.length; k++) {
+ const u = regExpMatchs[k];
+ if (idx >= u[0] && idx < u[0] + u[1].length) {
+ return u[1];
+ }
}
- textAndClassFunc(txt, newCls);
- curIndex += txtlen;
+ return false;
};
- })();
- return linestylefilter.textAndClassFuncSplitter(handleRegExpMatchsAfterSplit, splitPoints);
-};
-linestylefilter.getURLFilter = linestylefilter.getRegexpFilter(padutils.urlRegex, 'url');
-linestylefilter.textAndClassFuncSplitter = (func, splitPointsOpt) => {
- let nextPointIndex = 0;
- let idx = 0;
- // don't split at 0
- while (splitPointsOpt &&
+ const handleRegExpMatchsAfterSplit = (() => {
+ let curIndex = 0;
+ return (txt, cls) => {
+ const txtlen = txt.length;
+ let newCls = cls;
+ const regExpMatch = regExpMatchForIndex(curIndex);
+ if (regExpMatch) {
+ newCls += ` ${tag}:${regExpMatch}`;
+ }
+ textAndClassFunc(txt, newCls);
+ curIndex += txtlen;
+ };
+ })();
+ return linestylefilter.textAndClassFuncSplitter(handleRegExpMatchsAfterSplit, splitPoints);
+ },
+ getURLFilter: ()=>{
+ return linestylefilter.getRegexpFilter(padutils.urlRegex, 'url')
+ },
+ textAndClassFuncSplitter: (func, splitPointsOpt) => {
+ let nextPointIndex = 0;
+ let idx = 0;
+ // don't split at 0
+ while (splitPointsOpt &&
nextPointIndex < splitPointsOpt.length &&
splitPointsOpt[nextPointIndex] === 0) {
- nextPointIndex++;
- }
- const spanHandler = (txt, cls) => {
- if ((!splitPointsOpt) || nextPointIndex >= splitPointsOpt.length) {
- func(txt, cls);
- idx += txt.length;
+ nextPointIndex++;
}
- else {
- const splitPoints = splitPointsOpt;
- const pointLocInSpan = splitPoints[nextPointIndex] - idx;
- const txtlen = txt.length;
- if (pointLocInSpan >= txtlen) {
+ const spanHandler = (txt, cls) => {
+ if ((!splitPointsOpt) || nextPointIndex >= splitPointsOpt.length) {
func(txt, cls);
idx += txt.length;
- if (pointLocInSpan === txtlen) {
- nextPointIndex++;
- }
}
else {
- if (pointLocInSpan > 0) {
- func(txt.substring(0, pointLocInSpan), cls);
- idx += pointLocInSpan;
+ const splitPoints = splitPointsOpt;
+ const pointLocInSpan = splitPoints[nextPointIndex] - idx;
+ const txtlen = txt.length;
+ if (pointLocInSpan >= txtlen) {
+ func(txt, cls);
+ idx += txt.length;
+ if (pointLocInSpan === txtlen) {
+ nextPointIndex++;
+ }
+ }
+ else {
+ if (pointLocInSpan > 0) {
+ func(txt.substring(0, pointLocInSpan), cls);
+ idx += pointLocInSpan;
+ }
+ nextPointIndex++;
+ // recurse
+ spanHandler(txt.substring(pointLocInSpan), cls);
}
- nextPointIndex++;
- // recurse
- spanHandler(txt.substring(pointLocInSpan), cls);
}
+ };
+ return spanHandler;
+ },
+ getFilterStack: (lineText, textAndClassFunc, abrowser?) => {
+ let func = linestylefilter.getURLFilter();
+ const hookFilters = hooks.callAll('aceGetFilterStack', {
+ linestylefilter,
+ browser: abrowser,
+ });
+ hookFilters.map((hookFilter) => {
+ func = hookFilter(lineText, func);
+ });
+ return func;
+ },
+ populateDomLine: (textLine, aline, apool, domLineObj) => {
+ // remove final newline from text if any
+ let text = textLine;
+ if (text.slice(-1) === '\n') {
+ text = text.substring(0, text.length - 1);
}
- };
- return spanHandler;
-};
-linestylefilter.getFilterStack = (lineText, textAndClassFunc, abrowser) => {
- let func = linestylefilter.getURLFilter(lineText, textAndClassFunc);
- const hookFilters = hooks.callAll('aceGetFilterStack', {
- linestylefilter,
- browser: abrowser,
- });
- hookFilters.map((hookFilter) => {
- func = hookFilter(lineText, func);
- });
- return func;
-};
-// domLineObj is like that returned by domline.createDomLine
-linestylefilter.populateDomLine = (textLine, aline, apool, domLineObj) => {
- // remove final newline from text if any
- let text = textLine;
- if (text.slice(-1) === '\n') {
- text = text.substring(0, text.length - 1);
+ const textAndClassFunc = (tokenText, tokenClass) => {
+ domLineObj.appendSpan(tokenText, tokenClass);
+ };
+ let func = linestylefilter.getFilterStack(text, textAndClassFunc);
+ func = linestylefilter.getLineStyleFilter(text.length, aline, func, apool);
+ func(text, '');
}
- const textAndClassFunc = (tokenText, tokenClass) => {
- domLineObj.appendSpan(tokenText, tokenClass);
- };
- let func = linestylefilter.getFilterStack(text, textAndClassFunc);
- func = linestylefilter.getLineStyleFilter(text.length, aline, func, apool);
- func(text, '');
};
+const lineAttributeMarker = 'lineAttribMarker';
+// lineLength is without newline; aline includes newline,
+// but may be falsy if lineLength == 0
+// domLineObj is like that returned by domline.createDomLine
export { lineAttributeMarker };
export { linestylefilter };
diff --git a/src/static/js/pad.js b/src/static/js/pad.ts
similarity index 99%
rename from src/static/js/pad.js
rename to src/static/js/pad.ts
index eba61f78d53..f19ee73c955 100644
--- a/src/static/js/pad.js
+++ b/src/static/js/pad.ts
@@ -1,3 +1,5 @@
+// @ts-nocheck
+//FIXME this file needs some insights
import "./vendors/jquery.js";
import "./vendors/farbtastic.js";
import "./vendors/gritter.js";
@@ -15,6 +17,8 @@ import { paduserlist as paduserlist$0 } from "./pad_userlist.js";
import { colorutils as colorutils$0 } from "./colorutils.js";
import * as socketio from "./socketio.js";
import * as hooks from "./pluginfw/hooks.js";
+import {clientVars} from "../../node/handler/PadMessageHandler";
+import {i18nextvar} from "./vendors/i18next";
'use strict';
/**
* This code is mostly from the old Etherpad. Please help us to comment this code.
@@ -139,7 +143,7 @@ const getParameters = [
name: 'lang',
checkVal: null,
callback: (val) => {
- window.html10n.localize([val, 'en']);
+ i18nextvar([val, 'en']);
Cookies.set('language', val);
},
},
@@ -347,6 +351,7 @@ const pad = {
padOptions: {},
_messageQ: new MessageQueue(),
// these don't require init; clientVars should all go through here
+ settings: undefined,
getPadId: () => clientVars.padId,
getClientIp: () => clientVars.clientIp,
getColorPalette: () => clientVars.colorPalette,
@@ -705,7 +710,8 @@ const settings = {
useMonospaceFontGlobal: false,
globalUserName: false,
globalUserColor: false,
- rtlIsTrue: false,
+ rtlIsTrue: false, hideChat: false
+
};
pad.settings = settings;
export const baseURL = '';
diff --git a/src/static/js/pad_automatic_reconnect.js b/src/static/js/pad_automatic_reconnect.ts
similarity index 96%
rename from src/static/js/pad_automatic_reconnect.js
rename to src/static/js/pad_automatic_reconnect.ts
index b161c831c0b..2518713dd7d 100644
--- a/src/static/js/pad_automatic_reconnect.js
+++ b/src/static/js/pad_automatic_reconnect.ts
@@ -1,4 +1,7 @@
'use strict';
+import {i18nextvar} from "./vendors/i18next";
+import {clientVars} from "../../node/handler/PadMessageHandler";
+
const createCountDownElementsIfNecessary = ($modal) => {
const elementsDoNotExist = $modal.find('#cancelreconnect').length === 0;
if (elementsDoNotExist) {
@@ -24,7 +27,7 @@ const createCountDownElementsIfNecessary = ($modal) => {
}
};
const localize = ($element) => {
- html10n.translateElement(html10n.translations, $element.get(0));
+ i18nextvar($element.get(0));
};
const createTimerForModal = ($modal, pad) => {
const timeUntilReconnection = clientVars.automaticReconnectionTimeout * reconnectionTries.nextTry();
@@ -87,7 +90,7 @@ const reconnectionTries = {
// duration: how many **seconds** until the timer ends
// granularity (optional): how many **milliseconds**
// between each 'tick' of timer. Default: 1000ms (1s)
-const CountDownTimer = function (duration, granularity) {
+const CountDownTimer = function (duration, granularity?) {
this.duration = duration;
this.granularity = granularity || 1000;
this.running = false;
diff --git a/src/static/js/pad_connectionstatus.js b/src/static/js/pad_connectionstatus.ts
similarity index 95%
rename from src/static/js/pad_connectionstatus.js
rename to src/static/js/pad_connectionstatus.ts
index a84f2924464..9a71344d77f 100644
--- a/src/static/js/pad_connectionstatus.js
+++ b/src/static/js/pad_connectionstatus.ts
@@ -20,10 +20,17 @@ import { padmodals as padmodals$0 } from "./pad_modals.js";
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+type Pad_connectionStatus = {
+ what: string,
+ why?: string
+}
+
+
const padmodals = { padmodals: padmodals$0 }.padmodals;
const padconnectionstatus = (() => {
- let status = {
+ let status:Pad_connectionStatus = {
what: 'connecting',
+ why: undefined
};
const self = {
init: () => {
diff --git a/src/static/js/pad_cookie.js b/src/static/js/pad_cookie.ts
similarity index 87%
rename from src/static/js/pad_cookie.js
rename to src/static/js/pad_cookie.ts
index 1a988719a52..6b99981ab15 100644
--- a/src/static/js/pad_cookie.js
+++ b/src/static/js/pad_cookie.ts
@@ -1,4 +1,6 @@
import * as padUtils from "./pad_utils.js";
+import {JQueryGritter} from "../module/CustomWindow";
+import {i18nextvar} from "./vendors/i18next";
'use strict';
/**
* Copyright 2009 Google Inc.
@@ -17,6 +19,7 @@ import * as padUtils from "./pad_utils.js";
*/
const Cookies = { Cookies: padUtils }.Cookies;
export const padcookie = new class {
+ cookieName_: string;
constructor() {
this.cookieName_ = window.location.protocol === 'https:' ? 'prefs' : 'prefsHttp';
}
@@ -28,9 +31,9 @@ export const padcookie = new class {
this.writePrefs_(prefs);
// Re-read the saved cookie to test if cookies are enabled.
if (this.readPrefs_() == null) {
- $.gritter.add({
+ ($ as unknown as JQueryGritter).gritter.add({
title: 'Error',
- text: html10n.get('pad.noCookie'),
+ text: i18nextvar('pad.noCookie'),
sticky: true,
class_name: 'error',
});
@@ -38,6 +41,7 @@ export const padcookie = new class {
}
readPrefs_() {
try {
+ // @ts-ignore
const json = Cookies.get(this.cookieName_);
if (json == null)
return null;
@@ -48,6 +52,7 @@ export const padcookie = new class {
}
}
writePrefs_(prefs) {
+ // @ts-ignore
Cookies.set(this.cookieName_, JSON.stringify(prefs), { expires: 365 * 100 });
}
getPref(prefName) {
diff --git a/src/static/js/pad_editbar.js b/src/static/js/pad_editbar.ts
similarity index 99%
rename from src/static/js/pad_editbar.js
rename to src/static/js/pad_editbar.ts
index 2554b689bed..483e0bda387 100644
--- a/src/static/js/pad_editbar.js
+++ b/src/static/js/pad_editbar.ts
@@ -1,3 +1,5 @@
+// @ts-nocheck
+//FIXME lots of errors
import browser from "./vendors/browser.js";
import * as hooks from "./pluginfw/hooks.js";
import { padutils as padutils$0 } from "./pad_utils.js";
diff --git a/src/static/js/pad_editor.js b/src/static/js/pad_editor.ts
similarity index 99%
rename from src/static/js/pad_editor.js
rename to src/static/js/pad_editor.ts
index 2af32ffce19..1e1045c54fb 100644
--- a/src/static/js/pad_editor.js
+++ b/src/static/js/pad_editor.ts
@@ -1,3 +1,5 @@
+// @ts-nocheck
+//Lots of methods are set onto padutils
import * as padUtils from "./pad_utils.js";
import { padcookie as padcookie$0 } from "./pad_cookie.js";
'use strict';
diff --git a/src/static/js/pad_impexp.js b/src/static/js/pad_impexp.ts
similarity index 85%
rename from src/static/js/pad_impexp.js
rename to src/static/js/pad_impexp.ts
index 7bf9e1e88ec..2c45e6ff3d1 100644
--- a/src/static/js/pad_impexp.js
+++ b/src/static/js/pad_impexp.ts
@@ -4,6 +4,10 @@
* This helps other people to understand this code better and helps them to improve it.
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
*/
+import {i18nextvar} from "./vendors/i18next";
+import {AjaxDirectDatabaseAccess} from "../module/CustomWindow";
+import {clientVars} from "../../node/handler/PadMessageHandler";
+
/**
* Copyright 2009 Google Inc.
*
@@ -39,14 +43,14 @@ const padimpexp = (() => {
const fileInputSubmit = function (e) {
e.preventDefault();
$('#importmessagefail').fadeOut('fast');
- if (!window.confirm(html10n.get('pad.impexp.confirmimport')))
+ if (!window.confirm(i18nextvar('pad.impexp.confirmimport')))
return;
- $('#importsubmitinput').attr({ disabled: true }).val(html10n.get('pad.impexp.importing'));
+ $('#importsubmitinput').attr({ disabled: true }).val(i18nextvar('pad.impexp.importing'));
window.setTimeout(() => $('#importfileinput').attr({ disabled: true }), 0);
$('#importarrow').stop(true, true).hide();
$('#importstatusball').show();
(async () => {
- const { code, message, data: { directDatabaseAccess } = {} } = await $.ajax({
+ const { code, message, data: { directDatabaseAccess } = {} }:AjaxDirectDatabaseAccess = await $.ajax({
url: `${window.location.href.split('?')[0].split('#')[0]}/import`,
method: 'POST',
data: new FormData(this),
@@ -67,7 +71,7 @@ const padimpexp = (() => {
if (directDatabaseAccess)
window.location.reload();
}
- $('#importsubmitinput').removeAttr('disabled').val(html10n.get('pad.impexp.importbutton'));
+ $('#importsubmitinput').removeAttr('disabled').val(i18nextvar('pad.impexp.importbutton'));
window.setTimeout(() => $('#importfileinput').removeAttr('disabled'), 0);
$('#importstatusball').hide();
addImportFrames();
@@ -81,12 +85,12 @@ const padimpexp = (() => {
'maxFileSize',
'permission',
];
- const msg = html10n.get(`pad.impexp.${known.indexOf(status) !== -1 ? status : 'copypaste'}`);
- const showError = (fade) => {
+ const msg = i18nextvar(`pad.impexp.${known.indexOf(status) !== -1 ? status : 'copypaste'}`);
+ const showError = (fade?) => {
const popup = $('#importmessagefail').empty()
.append($('')
.css('color', 'red')
- .text(`${html10n.get('pad.impexp.importfailed')}: `))
+ .text(`${i18nextvar('pad.impexp.importfailed')}: `))
.append(document.createTextNode(msg));
popup[(fade ? 'fadeIn' : 'show')]();
};
@@ -100,7 +104,7 @@ const padimpexp = (() => {
};
// /// export
function cantExport() {
- let type = $(this);
+ let type: JQuery|string = $(this);
if (type.hasClass('exporthrefpdf')) {
type = 'PDF';
}
@@ -113,7 +117,7 @@ const padimpexp = (() => {
else {
type = 'this file';
}
- alert(html10n.get('pad.impexp.exportdisabled', { type }));
+ alert(i18nextvar('pad.impexp.exportdisabled', { type }));
return false;
}
// ///
@@ -124,9 +128,9 @@ const padimpexp = (() => {
// if /p/ isn't available due to a rewrite we use the clientVars padId
const padRootPath = /.*\/p\/[^/]+/.exec(document.location.pathname) || clientVars.padId;
// i10l buttom import
- $('#importsubmitinput').val(html10n.get('pad.impexp.importbutton'));
- html10n.bind('localized', () => {
- $('#importsubmitinput').val(html10n.get('pad.impexp.importbutton'));
+ $('#importsubmitinput').val(i18nextvar('pad.impexp.importbutton'));
+ i18nextvar.bind('localized', () => {
+ $('#importsubmitinput').val(i18nextvar('pad.impexp.importbutton'));
});
// build the export links
$('#exporthtmla').attr('href', `${padRootPath}/export/html`);
diff --git a/src/static/js/pad_modals.js b/src/static/js/pad_modals.ts
similarity index 100%
rename from src/static/js/pad_modals.js
rename to src/static/js/pad_modals.ts
diff --git a/src/static/js/pad_savedrevs.js b/src/static/js/pad_savedrevs.ts
similarity index 81%
rename from src/static/js/pad_savedrevs.js
rename to src/static/js/pad_savedrevs.ts
index 684dd7a12b5..7340873e14a 100644
--- a/src/static/js/pad_savedrevs.js
+++ b/src/static/js/pad_savedrevs.ts
@@ -1,4 +1,7 @@
'use strict';
+import {JQueryGritter} from "../module/CustomWindow";
+import {i18nextvar} from "./vendors/i18next";
+
/**
* Copyright 2012 Peter 'Pita' Martischka
*
@@ -17,11 +20,11 @@
let pad;
export const saveNow = () => {
pad.collabClient.sendMessage({ type: 'SAVE_REVISION' });
- $.gritter.add({
+ ($ as unknown as JQueryGritter).gritter.add({
// (string | mandatory) the heading of the notification
- title: html10n.get('pad.savedrevs.marked'),
+ title: i18nextvar('pad.savedrevs.marked'),
// (string | mandatory) the text inside the notification
- text: html10n.get('pad.savedrevs.timeslider') ||
+ text: i18nextvar('pad.savedrevs.timeslider') ||
'You can view saved revisions in the timeslider',
// (bool | optional) if you want it to fade out on its own or just sit there
sticky: false,
diff --git a/src/static/js/pad_userlist.js b/src/static/js/pad_userlist.ts
similarity index 94%
rename from src/static/js/pad_userlist.js
rename to src/static/js/pad_userlist.ts
index 531080d32a5..04941175acd 100644
--- a/src/static/js/pad_userlist.js
+++ b/src/static/js/pad_userlist.ts
@@ -1,5 +1,9 @@
import { padutils as padutils$0 } from "./pad_utils.js";
import * as hooks from "./pluginfw/hooks.js";
+import {i18nextvar} from "./vendors/i18next";
+import {clientVars} from "../../node/handler/PadMessageHandler";
+import {HistoricalAuthorData, JQueryGritter} from "../module/CustomWindow";
+import {pad} from "./pad";
'use strict';
/**
* Copyright 2009 Google Inc.
@@ -17,7 +21,12 @@ import * as hooks from "./pluginfw/hooks.js";
* limitations under the License.
*/
const padutils = { padutils: padutils$0 }.padutils;
-let myUserInfo = {};
+let myUserInfo = {
+ name: undefined, userId: undefined,
+ colorId: undefined
+
+
+};
let colorPickerOpen = false;
let colorPickerSetup = false;
const paduserlist = (() => {
@@ -83,7 +92,7 @@ const paduserlist = (() => {
handleOtherUserInputs();
return (rowsFadingIn.length > 0) || (rowsFadingOut.length > 0); // is more to do
};
- const getAnimationHeight = (step, power) => {
+ const getAnimationHeight = (step, power?) => {
let a = Math.abs(step / 12);
if (power === 2)
a **= 2;
@@ -138,7 +147,7 @@ const paduserlist = (() => {
.attr('type', 'text')
.addClass('editempty')
.addClass('newinput')
- .attr('value', html10n.get('pad.userlist.unnamed'));
+ .attr('value', i18nextvar('pad.userlist.unnamed'));
if (isNameEditable(data))
name.attr('disabled', 'disabled');
}
@@ -148,7 +157,7 @@ const paduserlist = (() => {
.addClass('usertdswatch')
.append($('')
.addClass('swatch')
- .css('background', padutils.escapeHtml(data.color))
+ .css('background', padutils.escapeHtml(data.color) as unknown as string)
.html(' ')))
.add($('
')
.css('height', `${height}px`)
@@ -187,7 +196,7 @@ const paduserlist = (() => {
}).removeClass('newinput');
};
// animationPower is 0 to skip animation, 1 for linear, 2 for quadratic, etc.
- const insertRow = (position, data, animationPower) => {
+ const insertRow = (position, data, animationPower?) => {
position = Math.max(0, Math.min(rowsPresent.length, position));
animationPower = (animationPower === undefined ? 4 : animationPower);
const domId = nextRowId();
@@ -237,7 +246,7 @@ const paduserlist = (() => {
}
}
};
- const removeRow = (position, animationPower) => {
+ const removeRow = (position, animationPower?) => {
animationPower = (animationPower === undefined ? 4 : animationPower);
const row = rowsPresent[position];
if (row) {
@@ -257,7 +266,7 @@ const paduserlist = (() => {
}
};
// newPosition is position after the row has been removed
- const moveRow = (oldPosition, newPosition, animationPower) => {
+ const moveRow = (oldPosition, newPosition, animationPower?) => {
animationPower = (animationPower === undefined ? 1 : animationPower); // linear is best
const row = rowsPresent[oldPosition];
if (row && oldPosition !== newPosition) {
@@ -288,7 +297,7 @@ const paduserlist = (() => {
}, (newName) => {
if (!newName) {
jnode.addClass('editempty');
- jnode.val(html10n.get('pad.userlist.unnamed'));
+ jnode.val(i18nextvar('pad.userlist.unnamed'));
}
else {
jnode.attr('disabled', 'disabled');
@@ -372,11 +381,12 @@ const paduserlist = (() => {
const userList = self.usersOnline();
// Now we add historical authors
const historical = clientVars.collab_client_vars.historicalAuthorData;
- for (const [key, { userId }] of Object.entries(historical)) {
+ for (const [key, res] of Object.entries(historical)) {
+ const resMapped = res as HistoricalAuthorData
// Check we don't already have this author in our array
let exists = false;
userList.forEach((user) => {
- if (user.userId === userId)
+ if (user.userId === resMapped.userId)
exists = true;
});
if (exists === false) {
@@ -401,18 +411,20 @@ const paduserlist = (() => {
hooks.callAll('userJoinOrUpdate', {
userInfo: info,
});
- const userData = {};
- userData.color = typeof info.colorId === 'number'
- ? clientVars.colorPalette[info.colorId] : info.colorId;
- userData.name = info.name;
- userData.status = '';
- userData.activity = '';
- userData.id = info.userId;
+ const userData = {
+ status: '',
+ name: info.name,
+ activity: '',
+ id: info.userId,
+ color: typeof info.colorId === 'number'
+ ? clientVars.colorPalette[info.colorId] : info.colorId
+ };
const existingIndex = findExistingIndex(info.userId);
let numUsersBesides = otherUsersInfo.length;
if (existingIndex >= 0) {
numUsersBesides--;
}
+ //@ts-ignore
const newIndex = padutils.binarySearch(numUsersBesides, (n) => {
if (existingIndex >= 0 && n >= existingIndex) {
// pretend existingIndex isn't there
@@ -495,7 +507,7 @@ const paduserlist = (() => {
$('#myusernameedit').removeClass('editempty').val(myUserInfo.name);
}
else {
- $('#myusernameedit').attr('placeholder', html10n.get('pad.userlist.entername'));
+ $('#myusernameedit').attr('placeholder', i18nextvar('pad.userlist.entername'));
}
if (colorPickerOpen) {
$('#myswatchbox').addClass('myswatchboxunhoverable').removeClass('myswatchboxhoverable');
@@ -536,7 +548,7 @@ const closeColorPicker = (accept) => {
$('#mycolorpicker').removeClass('popup-show');
};
const showColorPicker = () => {
- $.farbtastic('#colorpicker').setColor(myUserInfo.colorId);
+ ($ as unknown as JQueryGritter).farbtastic('#colorpicker').setColor(myUserInfo.colorId);
if (!colorPickerOpen) {
const palette = pad.getColorPalette();
if (!colorPickerSetup) {
diff --git a/src/static/js/pad_utils.ts b/src/static/js/pad_utils.ts
index 537f9916997..29995876dd5 100644
--- a/src/static/js/pad_utils.ts
+++ b/src/static/js/pad_utils.ts
@@ -1,3 +1,6 @@
+
+
+
'use strict';
/**
@@ -22,7 +25,9 @@
* limitations under the License.
*/
-import Security from './security';
+//FIXME Security does not have a typescript file
+// @ts-ignore
+import {escapeHTML,escapeHTMLAttribute} from './security';
/**
* Generates a random String with the given length. Is needed to generate the Author, Group,
@@ -137,7 +142,7 @@ export const padutils = {
}
},
- escapeHtml: (x) => Security.escapeHTML(String(x)),
+ escapeHtml: (x) => escapeHTML(String(x)),
uniqueId: () => {
const pad = require('./pad').pad; // Sidestep circular dependency
// returns string that is exactly 'width' chars, padding with zeros and taking rightmost digits
@@ -198,7 +203,7 @@ export const padutils = {
const advanceTo = (i) => {
if (i > idx) {
- pieces.push(Security.escapeHTML(text.substring(idx, i)));
+ pieces.push(escapeHTML(text.substring(idx, i)));
idx = i;
}
};
@@ -216,9 +221,9 @@ export const padutils = {
// https://github.com/ether/etherpad-lite/pull/3636
pieces.push(
'');
advanceTo(startIndex + href.length);
pieces.push(' ');
diff --git a/src/static/js/pluginfw/client_plugins.js b/src/static/js/pluginfw/client_plugins.ts
similarity index 99%
rename from src/static/js/pluginfw/client_plugins.js
rename to src/static/js/pluginfw/client_plugins.ts
index e8ac41e213b..0f5236763fd 100644
--- a/src/static/js/pluginfw/client_plugins.js
+++ b/src/static/js/pluginfw/client_plugins.ts
@@ -1,6 +1,8 @@
+// @ts-nocheck
import * as pluginUtils from "./shared.js";
import * as defs from "./plugin_defs.js";
'use strict';
+
const adoptPluginsFromAncestorsOf = (frame) => {
// Bind plugins with parent;
let parentRequire = null;
diff --git a/src/static/js/pluginfw/plugin_defs.ts b/src/static/js/pluginfw/plugin_defs.ts
index 1a75537575d..5a5dbee3fcd 100644
--- a/src/static/js/pluginfw/plugin_defs.ts
+++ b/src/static/js/pluginfw/plugin_defs.ts
@@ -8,13 +8,13 @@
// * hook_fn: Plugin-supplied hook function.
// * hook_fn_name: Name of the hook function, with the form :.
// * part: The ep.json part object that declared the hook. See exports.plugins.
-export const hooks = {};
+export let hooks = {};
// Whether the plugins have been loaded.
export let loaded = false;
// Topologically sorted list of parts from exports.plugins.
-export const parts = [];
+export let parts = [];
// Maps the name of a plugin to the plugin's definition provided in ep.json. The ep.json object is
// augmented with additional metadata:
diff --git a/src/static/js/pluginfw/plugins.ts b/src/static/js/pluginfw/plugins.ts
index ddb9f3c2986..d4ca42735e0 100644
--- a/src/static/js/pluginfw/plugins.ts
+++ b/src/static/js/pluginfw/plugins.ts
@@ -94,7 +94,7 @@ export const pathNormalization = (part, hookFnName, hookName) => {
};
export const update = async () => {
- const packages = await exports.getPackages();
+ const packages = await getPackages();
let parts:{[keys: string]:any} = {}; // Key is full name. sortParts converts this into a topologically sorted array.
let plugins = {};
@@ -107,7 +107,7 @@ export const update = async () => {
setPlugins(plugins);
setParts(sortParts(parts))
- setHooks(extractHooks(parts, 'hooks', exports.pathNormalization));
+ setHooks(extractHooks(parts, 'hooks', pathNormalization));
setLoaded(true)
await Promise.all(Object.keys(plugins).map(async (p) => {
const logger = log4js.getLogger(`plugin:${p}`);
@@ -115,7 +115,7 @@ export const update = async () => {
}));
};
-exports.getPackages = async () => {
+const getPackages = async () => {
logger.info('Running npm to get a list of installed plugins...');
// Notes:
// * Do not pass `--prod` otherwise `npm ls` will fail if there is no `package.json`.
@@ -125,7 +125,7 @@ exports.getPackages = async () => {
const cmd = ['npm', 'ls', '--long', '--json', '--depth=0', '--no-production'];
const {dependencies = {}} = JSON.parse(await exportCMD(cmd, {stdio: [null, 'string']}) as unknown as string);
await Promise.all(Object.entries(dependencies).map(async ([pkg, info]) => {
- if (!pkg.startsWith(exports.prefix)) {
+ if (!pkg.startsWith(prefix)) {
delete dependencies[pkg];
return;
}
diff --git a/src/static/js/rjquery.js b/src/static/js/rjquery.ts
similarity index 73%
rename from src/static/js/rjquery.js
rename to src/static/js/rjquery.ts
index 6bd4bbe5f7b..130a46f60f1 100644
--- a/src/static/js/rjquery.js
+++ b/src/static/js/rjquery.ts
@@ -1,3 +1,5 @@
+// @ts-nocheck
+//FIXME Could be interesting to have a look at this
'use strict';
// Provides a require'able version of jQuery without leaking $ and jQuery;
window.$ = require('./vendors/jquery');
diff --git a/src/static/js/scroll.js b/src/static/js/scroll.ts
similarity index 97%
rename from src/static/js/scroll.js
rename to src/static/js/scroll.ts
index eb7edbe4ce6..11120ad24d8 100644
--- a/src/static/js/scroll.js
+++ b/src/static/js/scroll.ts
@@ -1,8 +1,9 @@
import * as caretPosition from "./caretPosition.js";
+import {CustomWindow} from "../module/CustomWindow";
'use strict';
function Scroll(outerWin) {
// scroll settings
- this.scrollSettings = parent.parent.clientVars.scrollWhenFocusLineIsOutOfViewport;
+ this.scrollSettings = (parent.parent as unknown as CustomWindow).clientVars.scrollWhenFocusLineIsOutOfViewport;
// DOM reference
this.outerWin = outerWin;
this.doc = this.outerWin.document;
@@ -166,7 +167,7 @@ Scroll.prototype._getPixelsRelativeToPercentageOfViewport =
let pixels = 0;
const scrollPercentageRelativeToViewport = this._getPercentageToScroll(aboveOfViewport);
if (scrollPercentageRelativeToViewport > 0 && scrollPercentageRelativeToViewport <= 1) {
- pixels = parseInt(innerHeight * scrollPercentageRelativeToViewport);
+ pixels = parseInt(String(innerHeight * scrollPercentageRelativeToViewport));
}
return pixels;
};
@@ -183,7 +184,7 @@ Scroll.prototype._getPixelsToScrollWhenUserPressesArrowUp = function (innerHeigh
let pixels = 0;
const percentageToScrollUp = this.scrollSettings.percentageToScrollWhenUserPressesArrowUp;
if (percentageToScrollUp > 0 && percentageToScrollUp <= 1) {
- pixels = parseInt(innerHeight * percentageToScrollUp);
+ pixels = parseInt(String(innerHeight * percentageToScrollUp));
}
return pixels;
};
diff --git a/src/static/js/security.js b/src/static/js/security.js
deleted file mode 100644
index 869914a6d18..00000000000
--- a/src/static/js/security.js
+++ /dev/null
@@ -1,2 +0,0 @@
-'use strict';
-export * from "security";
diff --git a/src/static/js/security.ts b/src/static/js/security.ts
new file mode 100644
index 00000000000..90de9b6bff2
--- /dev/null
+++ b/src/static/js/security.ts
@@ -0,0 +1,10 @@
+'use strict';
+export * from "security";
+
+export function escapeHTMLAttribute(href) {
+ throw new Error("Function not implemented.");
+}
+export function escapeHTML(txt) {
+ throw new Error("Function not implemented.");
+}
+
diff --git a/src/static/js/skin_variants.js b/src/static/js/skin_variants.ts
similarity index 100%
rename from src/static/js/skin_variants.js
rename to src/static/js/skin_variants.ts
diff --git a/src/static/js/skiplist.js b/src/static/js/skiplist.ts
similarity index 96%
rename from src/static/js/skiplist.js
rename to src/static/js/skiplist.ts
index d64fd20e347..ce73d4b590f 100644
--- a/src/static/js/skiplist.js
+++ b/src/static/js/skiplist.ts
@@ -21,6 +21,13 @@
*/
const _entryWidth = (e) => (e && e.width) || 0;
class Node {
+ key: any;
+ private entry: any;
+ levels: number;
+ upPtrs: any[];
+ downPtrs: any[];
+ downSkips: any[];
+ downSkipWidths: any[];
constructor(entry, levels = 0, downSkips = 1, downSkipWidths = 0) {
this.key = entry != null ? entry.key : null;
this.entry = entry;
@@ -51,6 +58,11 @@ class Node {
// is still valid and points to the same index in the skiplist. Other operations with other points
// invalidate this point.
class Point {
+ private _skipList: any;
+ private loc: any;
+ private idxs: any[];
+ private nodes: any[];
+ private widthSkips: any[];
constructor(skipList, loc) {
this._skipList = skipList;
this.loc = loc;
@@ -172,6 +184,10 @@ class Point {
* property that is a string.
*/
class SkipList {
+ private _keyToNodeMap: Map;
+ private _start: Node;
+ private _end: Node;
+ private _totalWidth: number;
constructor() {
// if there are N elements in the skiplist, "start" is element -1 and "end" is element N
this._start = new Node(null, 1);
@@ -199,7 +215,7 @@ class SkipList {
}
return n;
}
- _getNodeIndex(node, byWidth) {
+ _getNodeIndex(node, byWidth?) {
let dist = (byWidth ? 0 : -1);
let n = node;
while (n !== this._start) {
diff --git a/src/static/js/socketio.js b/src/static/js/socketio.ts
similarity index 84%
rename from src/static/js/socketio.js
rename to src/static/js/socketio.ts
index 6d8e41850d4..5271cca796c 100644
--- a/src/static/js/socketio.js
+++ b/src/static/js/socketio.ts
@@ -1,4 +1,6 @@
'use strict';
+import {CustomWindow} from "../module/CustomWindow";
+
/**
* Creates a socket.io connection.
* @param etherpadBaseUrl - Etherpad URL. If relative, it is assumed to be relative to
@@ -8,6 +10,8 @@
* https://socket.io/docs/v2/client-api/#new-Manager-url-options
* @return socket.io Socket object
*/
+
+import io from 'socket.io-client';
const connect = (etherpadBaseUrl, namespace = '/', options = {}) => {
// The API for socket.io's io() function is awkward. The documentation says that the first
// argument is a URL, but it is not the URL of the socket.io endpoint. The URL's path part is used
@@ -15,7 +19,7 @@ const connect = (etherpadBaseUrl, namespace = '/', options = {}) => {
// parameters, if present) is combined with the `path` option (which defaults to '/socket.io', but
// is overridden here to allow users to host Etherpad at something like '/etherpad') to get the
// URL of the socket.io endpoint.
- const baseUrl = new URL(etherpadBaseUrl, window.location);
+ const baseUrl = new URL(etherpadBaseUrl, window.location.href);
const socketioUrl = new URL('socket.io', baseUrl);
const namespaceUrl = new URL(namespace, new URL('/', baseUrl));
return io(namespaceUrl.href, Object.assign({ path: socketioUrl.pathname }, options));
@@ -23,6 +27,6 @@ const connect = (etherpadBaseUrl, namespace = '/', options = {}) => {
if (typeof exports === 'object') {
}
else {
- window.socketio = { connect };
+ (window as unknown as CustomWindow).socketio = { connect };
}
export { connect };
diff --git a/src/static/js/timeslider.js b/src/static/js/timeslider.ts
similarity index 98%
rename from src/static/js/timeslider.js
rename to src/static/js/timeslider.ts
index 9ac1163e7e6..85b90c279bb 100644
--- a/src/static/js/timeslider.js
+++ b/src/static/js/timeslider.ts
@@ -1,3 +1,5 @@
+// @ts-nocheck
+//FIXME Could be interesting to have a look at this
import "./vendors/jquery.js";
import * as padUtils from "./pad_utils.js";
import * as hooks from "./pluginfw/hooks.js";
diff --git a/src/static/js/underscore.js b/src/static/js/underscore.js
deleted file mode 100644
index 6a5f1c1edf5..00000000000
--- a/src/static/js/underscore.js
+++ /dev/null
@@ -1,2 +0,0 @@
-'use strict';
-export { default } from "underscore";
diff --git a/src/static/js/undomodule.js b/src/static/js/undomodule.ts
similarity index 99%
rename from src/static/js/undomodule.js
rename to src/static/js/undomodule.ts
index 96d7bca6a88..2080a860372 100644
--- a/src/static/js/undomodule.js
+++ b/src/static/js/undomodule.ts
@@ -1,5 +1,5 @@
import * as Changeset from "./Changeset.js";
-import * as _ from "./underscore.js";
+import _ from "underscore";
'use strict';
const undoModule = (() => {
const stack = (() => {
diff --git a/src/static/js/vendors/html10n.js b/src/static/js/vendors/html10n.js
deleted file mode 100644
index 73db3597a70..00000000000
--- a/src/static/js/vendors/html10n.js
+++ /dev/null
@@ -1,943 +0,0 @@
-// WARNING: This file has been modified from the Original
-/**
- * Copyright (c) 2012 Marcel Klehr
- * Copyright (c) 2011-2012 Fabien Cazenave, Mozilla
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-window.html10n = (function (window, document, undefined) {
- // fix console
- (function () {
- var noop = function () { };
- var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
- var console = (window.console = window.console || {});
- for (var i = 0; i < names.length; ++i) {
- if (!console[names[i]]) {
- console[names[i]] = noop;
- }
- }
- }());
- // fix Array#forEach in IE
- // taken from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
- if (!Array.prototype.forEach) {
- Array.prototype.forEach = function (fn, scope) {
- for (var i = 0, len = this.length; i < len; ++i) {
- if (i in this) {
- fn.call(scope, this[i], i, this);
- }
- }
- };
- }
- // fix Array#indexOf in, guess what, IE! <3
- // taken from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
- if (!Array.prototype.indexOf) {
- Array.prototype.indexOf = function (searchElement /*, fromIndex */) {
- "use strict";
- if (this == null) {
- throw new TypeError();
- }
- var t = Object(this);
- var len = t.length >>> 0;
- if (len === 0) {
- return -1;
- }
- var n = 0;
- if (arguments.length > 1) {
- n = Number(arguments[1]);
- if (n != n) { // shortcut for verifying if it's NaN
- n = 0;
- }
- else if (n != 0 && n != Infinity && n != -Infinity) {
- n = (n > 0 || -1) * Math.floor(Math.abs(n));
- }
- }
- if (n >= len) {
- return -1;
- }
- var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
- for (; k < len; k++) {
- if (k in t && t[k] === searchElement) {
- return k;
- }
- }
- return -1;
- };
- }
- /**
- * MicroEvent - to make any js object an event emitter (server or browser)
- */
- var MicroEvent = function () { };
- MicroEvent.prototype = {
- bind: function (event, fct) {
- this._events = this._events || {};
- this._events[event] = this._events[event] || [];
- this._events[event].push(fct);
- },
- unbind: function (event, fct) {
- this._events = this._events || {};
- if (event in this._events === false)
- return;
- this._events[event].splice(this._events[event].indexOf(fct), 1);
- },
- trigger: function (event /* , args... */) {
- this._events = this._events || {};
- if (event in this._events === false)
- return;
- for (var i = 0; i < this._events[event].length; i++) {
- this._events[event][i].apply(this, Array.prototype.slice.call(arguments, 1));
- }
- }
- };
- /**
- * mixin will delegate all MicroEvent.js function in the destination object
- * @param {Object} the object which will support MicroEvent
- */
- MicroEvent.mixin = function (destObject) {
- var props = ['bind', 'unbind', 'trigger'];
- if (!destObject)
- return;
- for (var i = 0; i < props.length; i++) {
- destObject[props[i]] = MicroEvent.prototype[props[i]];
- }
- };
- /**
- * Loader
- * The loader is responsible for loading
- * and caching all necessary resources
- */
- function Loader(resources) {
- this.resources = resources;
- this.cache = {}; // file => contents
- this.langs = {}; // lang => strings
- }
- Loader.prototype.load = function (lang, cb) {
- if (this.langs[lang])
- return cb();
- if (this.resources.length > 0) {
- var reqs = 0;
- for (var i = 0, n = this.resources.length; i < n; i++) {
- this.fetch(this.resources[i], lang, function (e) {
- reqs++;
- if (e)
- console.warn(e);
- if (reqs < n)
- return; // Call back once all reqs are completed
- cb && cb();
- });
- }
- }
- };
- Loader.prototype.fetch = function (href, lang, cb) {
- var that = this;
- if (this.cache[href]) {
- this.parse(lang, href, this.cache[href], cb);
- return;
- }
- var xhr = new XMLHttpRequest();
- xhr.open('GET', href, /*async: */ true);
- if (xhr.overrideMimeType) {
- xhr.overrideMimeType('application/json; charset=utf-8');
- }
- xhr.onreadystatechange = function () {
- if (xhr.readyState == 4) {
- if (xhr.status == 200 || xhr.status === 0) {
- var data = JSON.parse(xhr.responseText);
- that.cache[href] = data;
- // Pass on the contents for parsing
- that.parse(lang, href, data, cb);
- }
- else {
- cb(new Error('Failed to load ' + href));
- }
- }
- };
- xhr.send(null);
- };
- Loader.prototype.parse = function (lang, currHref, data, cb) {
- if ('object' != typeof data) {
- cb(new Error('A file couldn\'t be parsed as json.'));
- return;
- }
- // Check if lang exists
- if (!data[lang]) {
- // lang not found
- // This may be due to formatting (expected 'ru' but browser sent 'ru-RU')
- // Set err msg before mutating lang (we may need this later)
- var msg = 'Couldn\'t find translations for ' + lang;
- // Check for '-' ('ROOT-VARIANT')
- if (lang.indexOf('-') > -1) {
- // ROOT-VARIANT formatting detected
- lang = lang.split('-')[0]; // set lang to ROOT lang
- }
- // Check if ROOT lang exists (e.g 'ru')
- if (!data[lang]) {
- // ROOT lang not found. (e.g 'zh')
- // Loop through langs data. Maybe we have a variant? e.g (zh-hans)
- var l; // langs item. Declare outside of loop
- for (l in data) {
- // Is not ROOT?
- // And index of ROOT equals 0?
- // And is known lang?
- if (lang != l && l.indexOf(lang) === 0 && data[l]) {
- lang = l; // set lang to ROOT-VARIANT (e.g 'zh-hans')
- break;
- }
- }
- // Did we find a variant? If not, return err.
- if (lang != l) {
- return cb(new Error(msg));
- }
- }
- }
- if ('string' == typeof data[lang]) {
- // Import rule
- // absolute path
- var importUrl = data[lang];
- // relative path
- if (data[lang].indexOf("http") != 0 && data[lang].indexOf("/") != 0) {
- importUrl = currHref + "/../" + data[lang];
- }
- this.fetch(importUrl, lang, cb);
- return;
- }
- if ('object' != typeof data[lang]) {
- cb(new Error('Translations should be specified as JSON objects!'));
- return;
- }
- this.langs[lang] = data[lang];
- // TODO: Also store accompanying langs
- cb();
- };
- /**
- * The html10n object
- */
- var html10n = { language: null
- };
- MicroEvent.mixin(html10n);
- html10n.macros = {};
- html10n.rtl = ["ar", "dv", "fa", "ha", "he", "ks", "ku", "ps", "ur", "yi"];
- /**
- * Get rules for plural forms (shared with JetPack), see:
- * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
- * https://github.com/mozilla/addon-sdk/blob/master/python-lib/plural-rules-generator.p
- *
- * @param {string} lang
- * locale (language) used.
- *
- * @return {Function}
- * returns a function that gives the plural form name for a given integer:
- * var fun = getPluralRules('en');
- * fun(1) -> 'one'
- * fun(0) -> 'other'
- * fun(1000) -> 'other'.
- */
- function getPluralRules(lang) {
- var locales2rules = {
- 'af': 3,
- 'ak': 4,
- 'am': 4,
- 'ar': 1,
- 'asa': 3,
- 'az': 0,
- 'be': 11,
- 'bem': 3,
- 'bez': 3,
- 'bg': 3,
- 'bh': 4,
- 'bm': 0,
- 'bn': 3,
- 'bo': 0,
- 'br': 20,
- 'brx': 3,
- 'bs': 11,
- 'ca': 3,
- 'cgg': 3,
- 'chr': 3,
- 'cs': 12,
- 'cy': 17,
- 'da': 3,
- 'de': 3,
- 'dv': 3,
- 'dz': 0,
- 'ee': 3,
- 'el': 3,
- 'en': 3,
- 'eo': 3,
- 'es': 3,
- 'et': 3,
- 'eu': 3,
- 'fa': 0,
- 'ff': 5,
- 'fi': 3,
- 'fil': 4,
- 'fo': 3,
- 'fr': 5,
- 'fur': 3,
- 'fy': 3,
- 'ga': 8,
- 'gd': 24,
- 'gl': 3,
- 'gsw': 3,
- 'gu': 3,
- 'guw': 4,
- 'gv': 23,
- 'ha': 3,
- 'haw': 3,
- 'he': 2,
- 'hi': 4,
- 'hr': 11,
- 'hu': 0,
- 'id': 0,
- 'ig': 0,
- 'ii': 0,
- 'is': 3,
- 'it': 3,
- 'iu': 7,
- 'ja': 0,
- 'jmc': 3,
- 'jv': 0,
- 'ka': 0,
- 'kab': 5,
- 'kaj': 3,
- 'kcg': 3,
- 'kde': 0,
- 'kea': 0,
- 'kk': 3,
- 'kl': 3,
- 'km': 0,
- 'kn': 0,
- 'ko': 0,
- 'ksb': 3,
- 'ksh': 21,
- 'ku': 3,
- 'kw': 7,
- 'lag': 18,
- 'lb': 3,
- 'lg': 3,
- 'ln': 4,
- 'lo': 0,
- 'lt': 10,
- 'lv': 6,
- 'mas': 3,
- 'mg': 4,
- 'mk': 16,
- 'ml': 3,
- 'mn': 3,
- 'mo': 9,
- 'mr': 3,
- 'ms': 0,
- 'mt': 15,
- 'my': 0,
- 'nah': 3,
- 'naq': 7,
- 'nb': 3,
- 'nd': 3,
- 'ne': 3,
- 'nl': 3,
- 'nn': 3,
- 'no': 3,
- 'nr': 3,
- 'nso': 4,
- 'ny': 3,
- 'nyn': 3,
- 'om': 3,
- 'or': 3,
- 'pa': 3,
- 'pap': 3,
- 'pl': 13,
- 'ps': 3,
- 'pt': 3,
- 'rm': 3,
- 'ro': 9,
- 'rof': 3,
- 'ru': 11,
- 'rwk': 3,
- 'sah': 0,
- 'saq': 3,
- 'se': 7,
- 'seh': 3,
- 'ses': 0,
- 'sg': 0,
- 'sh': 11,
- 'shi': 19,
- 'sk': 12,
- 'sl': 14,
- 'sma': 7,
- 'smi': 7,
- 'smj': 7,
- 'smn': 7,
- 'sms': 7,
- 'sn': 3,
- 'so': 3,
- 'sq': 3,
- 'sr': 11,
- 'ss': 3,
- 'ssy': 3,
- 'st': 3,
- 'sv': 3,
- 'sw': 3,
- 'syr': 3,
- 'ta': 3,
- 'te': 3,
- 'teo': 3,
- 'th': 0,
- 'ti': 4,
- 'tig': 3,
- 'tk': 3,
- 'tl': 4,
- 'tn': 3,
- 'to': 0,
- 'tr': 0,
- 'ts': 3,
- 'tzm': 22,
- 'uk': 11,
- 'ur': 3,
- 've': 3,
- 'vi': 0,
- 'vun': 3,
- 'wa': 4,
- 'wae': 3,
- 'wo': 0,
- 'xh': 3,
- 'xog': 3,
- 'yo': 0,
- 'zh': 0,
- 'zu': 3
- };
- // utility functions for plural rules methods
- function isIn(n, list) {
- return list.indexOf(n) !== -1;
- }
- function isBetween(n, start, end) {
- return start <= n && n <= end;
- }
- // list of all plural rules methods:
- // map an integer to the plural form name to use
- var pluralRules = {
- '0': function (n) {
- return 'other';
- },
- '1': function (n) {
- if ((isBetween((n % 100), 3, 10)))
- return 'few';
- if (n === 0)
- return 'zero';
- if ((isBetween((n % 100), 11, 99)))
- return 'many';
- if (n == 2)
- return 'two';
- if (n == 1)
- return 'one';
- return 'other';
- },
- '2': function (n) {
- if (n !== 0 && (n % 10) === 0)
- return 'many';
- if (n == 2)
- return 'two';
- if (n == 1)
- return 'one';
- return 'other';
- },
- '3': function (n) {
- if (n == 1)
- return 'one';
- return 'other';
- },
- '4': function (n) {
- if ((isBetween(n, 0, 1)))
- return 'one';
- return 'other';
- },
- '5': function (n) {
- if ((isBetween(n, 0, 2)) && n != 2)
- return 'one';
- return 'other';
- },
- '6': function (n) {
- if (n === 0)
- return 'zero';
- if ((n % 10) == 1 && (n % 100) != 11)
- return 'one';
- return 'other';
- },
- '7': function (n) {
- if (n == 2)
- return 'two';
- if (n == 1)
- return 'one';
- return 'other';
- },
- '8': function (n) {
- if ((isBetween(n, 3, 6)))
- return 'few';
- if ((isBetween(n, 7, 10)))
- return 'many';
- if (n == 2)
- return 'two';
- if (n == 1)
- return 'one';
- return 'other';
- },
- '9': function (n) {
- if (n === 0 || n != 1 && (isBetween((n % 100), 1, 19)))
- return 'few';
- if (n == 1)
- return 'one';
- return 'other';
- },
- '10': function (n) {
- if ((isBetween((n % 10), 2, 9)) && !(isBetween((n % 100), 11, 19)))
- return 'few';
- if ((n % 10) == 1 && !(isBetween((n % 100), 11, 19)))
- return 'one';
- return 'other';
- },
- '11': function (n) {
- if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14)))
- return 'few';
- if ((n % 10) === 0 ||
- (isBetween((n % 10), 5, 9)) ||
- (isBetween((n % 100), 11, 14)))
- return 'many';
- if ((n % 10) == 1 && (n % 100) != 11)
- return 'one';
- return 'other';
- },
- '12': function (n) {
- if ((isBetween(n, 2, 4)))
- return 'few';
- if (n == 1)
- return 'one';
- return 'other';
- },
- '13': function (n) {
- if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14)))
- return 'few';
- if (n != 1 && (isBetween((n % 10), 0, 1)) ||
- (isBetween((n % 10), 5, 9)) ||
- (isBetween((n % 100), 12, 14)))
- return 'many';
- if (n == 1)
- return 'one';
- return 'other';
- },
- '14': function (n) {
- if ((isBetween((n % 100), 3, 4)))
- return 'few';
- if ((n % 100) == 2)
- return 'two';
- if ((n % 100) == 1)
- return 'one';
- return 'other';
- },
- '15': function (n) {
- if (n === 0 || (isBetween((n % 100), 2, 10)))
- return 'few';
- if ((isBetween((n % 100), 11, 19)))
- return 'many';
- if (n == 1)
- return 'one';
- return 'other';
- },
- '16': function (n) {
- if ((n % 10) == 1 && n != 11)
- return 'one';
- return 'other';
- },
- '17': function (n) {
- if (n == 3)
- return 'few';
- if (n === 0)
- return 'zero';
- if (n == 6)
- return 'many';
- if (n == 2)
- return 'two';
- if (n == 1)
- return 'one';
- return 'other';
- },
- '18': function (n) {
- if (n === 0)
- return 'zero';
- if ((isBetween(n, 0, 2)) && n !== 0 && n != 2)
- return 'one';
- return 'other';
- },
- '19': function (n) {
- if ((isBetween(n, 2, 10)))
- return 'few';
- if ((isBetween(n, 0, 1)))
- return 'one';
- return 'other';
- },
- '20': function (n) {
- if ((isBetween((n % 10), 3, 4) || ((n % 10) == 9)) && !(isBetween((n % 100), 10, 19) ||
- isBetween((n % 100), 70, 79) ||
- isBetween((n % 100), 90, 99)))
- return 'few';
- if ((n % 1000000) === 0 && n !== 0)
- return 'many';
- if ((n % 10) == 2 && !isIn((n % 100), [12, 72, 92]))
- return 'two';
- if ((n % 10) == 1 && !isIn((n % 100), [11, 71, 91]))
- return 'one';
- return 'other';
- },
- '21': function (n) {
- if (n === 0)
- return 'zero';
- if (n == 1)
- return 'one';
- return 'other';
- },
- '22': function (n) {
- if ((isBetween(n, 0, 1)) || (isBetween(n, 11, 99)))
- return 'one';
- return 'other';
- },
- '23': function (n) {
- if ((isBetween((n % 10), 1, 2)) || (n % 20) === 0)
- return 'one';
- return 'other';
- },
- '24': function (n) {
- if ((isBetween(n, 3, 10) || isBetween(n, 13, 19)))
- return 'few';
- if (isIn(n, [2, 12]))
- return 'two';
- if (isIn(n, [1, 11]))
- return 'one';
- return 'other';
- }
- };
- // return a function that gives the plural form name for a given integer
- var index = locales2rules[lang.replace(/-.*$/, '')];
- if (!(index in pluralRules)) {
- console.warn('plural form unknown for [' + lang + ']');
- return function () { return 'other'; };
- }
- return pluralRules[index];
- }
- /**
- * pre-defined 'plural' macro
- */
- html10n.macros.plural = function (key, param, opts) {
- var str, n = parseFloat(param);
- if (isNaN(n))
- return;
- // initialize _pluralRules
- if (!this._pluralRules)
- this._pluralRules = getPluralRules(html10n.language);
- var index = this._pluralRules(n);
- // try to find a [zero|one|two] key if it's defined
- if (n === 0 && ('zero') in opts) {
- str = opts['zero'];
- }
- else if (n == 1 && ('one') in opts) {
- str = opts['one'];
- }
- else if (n == 2 && ('two') in opts) {
- str = opts['two'];
- }
- else if (index in opts) {
- str = opts[index];
- }
- return str;
- };
- /**
- * Localize a document
- * @param langs An array of lang codes defining fallbacks
- */
- html10n.localize = function (langs) {
- var that = this;
- // if only one string => create an array
- if ('string' == typeof langs)
- langs = [langs];
- // Expand two-part locale specs
- var i = 0;
- langs.forEach(function (lang) {
- if (!lang)
- return;
- langs[i++] = lang;
- if (~lang.indexOf('-'))
- langs[i++] = lang.substr(0, lang.indexOf('-'));
- });
- this.build(langs, function (er, translations) {
- html10n.translations = translations;
- html10n.translateElement(translations);
- that.trigger('localized');
- });
- };
- /**
- * Triggers the translation process
- * for an element
- * @param translations A hash of all translation strings
- * @param element A DOM element, if omitted, the document element will be used
- */
- html10n.translateElement = function (translations, element) {
- element = element || document.documentElement;
- var children = element ? getTranslatableChildren(element) : document.childNodes;
- for (var i = 0, n = children.length; i < n; i++) {
- this.translateNode(translations, children[i]);
- }
- // translate element itself if necessary
- this.translateNode(translations, element);
- };
- function asyncForEach(list, iterator, cb) {
- var i = 0, n = list.length;
- iterator(list[i], i, function each(err) {
- if (err)
- console.error(err);
- i++;
- if (i < n)
- return iterator(list[i], i, each);
- cb();
- });
- }
- function getTranslatableChildren(element) {
- if (!document.querySelectorAll) {
- if (!element)
- return [];
- var nodes = element.getElementsByTagName('*'), l10nElements = [];
- for (var i = 0, n = nodes.length; i < n; i++) {
- if (nodes[i].getAttribute('data-l10n-id'))
- l10nElements.push(nodes[i]);
- }
- return l10nElements;
- }
- return element.querySelectorAll('*[data-l10n-id]');
- }
- html10n.get = function (id, args) {
- var translations = html10n.translations;
- if (!translations)
- return console.warn('No translations available (yet)');
- if (!translations[id])
- return console.warn('Could not find string ' + id);
- // apply macros
- var str = translations[id];
- str = substMacros(id, str, args);
- // apply args
- str = substArguments(str, args);
- return str;
- };
- // replace {{arguments}} with their values or the
- // associated translation string (based on its key)
- function substArguments(str, args) {
- var reArgs = /\{\{\s*([a-zA-Z\.]+)\s*\}\}/, match;
- var translations = html10n.translations;
- while (match = reArgs.exec(str)) {
- if (!match || match.length < 2)
- return str; // argument key not found
- var arg = match[1], sub = '';
- if (args && arg in args) {
- sub = args[arg];
- }
- else if (translations && arg in translations) {
- sub = translations[arg];
- }
- else {
- console.warn('Could not find argument {{' + arg + '}}');
- return str;
- }
- str = str.substring(0, match.index) + sub + str.substr(match.index + match[0].length);
- }
- return str;
- }
- // replace {[macros]} with their values
- function substMacros(key, str, args) {
- var regex = /\{\[\s*([a-zA-Z]+)\(([a-zA-Z]+)\)((\s*([a-zA-Z]+)\: ?([ a-zA-Z{}]+),?)+)*\s*\]\}/ //.exec('{[ plural(n) other: are {{n}}, one: is ]}')
- , match;
- while (match = regex.exec(str)) {
- // a macro has been found
- // Note: at the moment, only one parameter is supported
- var macroName = match[1], paramName = match[2], optv = match[3], opts = {};
- if (!(macroName in html10n.macros))
- continue;
- if (optv) {
- optv.match(/(?=\s*)([a-zA-Z]+)\: ?([ a-zA-Z{}]+)(?=,?)/g).forEach(function (arg) {
- var parts = arg.split(':'), name = parts[0], value = parts[1].trim();
- opts[name] = value;
- });
- }
- var param;
- if (args && paramName in args) {
- param = args[paramName];
- }
- else if (paramName in html10n.translations) {
- param = translations[paramName];
- }
- // there's no macro parser: it has to be defined in html10n.macros
- var macro = html10n.macros[macroName];
- str = str.substr(0, match.index) + macro(key, param, opts) + str.substr(match.index + match[0].length);
- }
- return str;
- }
- /**
- * Applies translations to a DOM node (recursive)
- */
- html10n.translateNode = function (translations, node) {
- var str = {};
- // get id
- str.id = node.getAttribute('data-l10n-id');
- if (!str.id)
- return;
- if (!translations[str.id])
- return console.warn('Couldn\'t find translation key ' + str.id);
- // get args
- if (window.JSON) {
- str.args = JSON.parse(node.getAttribute('data-l10n-args'));
- }
- else {
- try {
- str.args = eval(node.getAttribute('data-l10n-args'));
- }
- catch (e) {
- console.warn('Couldn\'t parse args for ' + str.id);
- }
- }
- str.str = html10n.get(str.id, str.args);
- // get attribute name to apply str to
- var prop, index = str.id.lastIndexOf('.'), attrList = // allowed attributes
- { "title": 1,
- "innerHTML": 1,
- "alt": 1,
- "textContent": 1,
- "value": 1,
- "placeholder": 1
- };
- if (index > 0 && str.id.substr(index + 1) in attrList) {
- // an attribute has been specified (example: "my_translation_key.placeholder")
- prop = str.id.substr(index + 1);
- }
- else { // no attribute: assuming text content by default
- prop = document.body.textContent ? 'textContent' : 'innerText';
- }
- // Apply translation
- if (node.children.length === 0 || prop != 'textContent') {
- node[prop] = str.str;
- node.setAttribute("aria-label", str.str); // Sets the aria-label
- // The idea of the above is that we always have an aria value
- // This might be a bit of an abrupt solution but let's see how it goes
- }
- else {
- var children = node.childNodes, found = false;
- for (var i = 0, n = children.length; i < n; i++) {
- if (children[i].nodeType === 3 && /\S/.test(children[i].textContent)) {
- if (!found) {
- children[i].nodeValue = str.str;
- found = true;
- }
- else {
- children[i].nodeValue = '';
- }
- }
- }
- if (!found) {
- console.warn('Unexpected error: could not translate element content for key ' + str.id, node);
- }
- }
- };
- /**
- * Builds a translation object from a list of langs (loads the necessary translations)
- * @param langs Array - a list of langs sorted by priority (default langs should go last)
- */
- html10n.build = function (langs, cb) {
- var that = this, build = {};
- asyncForEach(langs, function (lang, i, next) {
- if (!lang)
- return next();
- that.loader.load(lang, next);
- }, function () {
- var lang;
- langs.reverse();
- // loop through the priority array...
- for (var i = 0, n = langs.length; i < n; i++) {
- lang = langs[i];
- if (!lang)
- continue;
- if (!(lang in that.loader.langs)) { // uh, we don't have this lang availbable..
- // then check for related langs
- if (~lang.indexOf('-'))
- lang = lang.split('-')[0];
- for (var l in that.loader.langs) {
- if (lang != l && l.indexOf(lang) === 0) {
- lang = l;
- break;
- }
- }
- if (lang != l)
- continue;
- }
- // ... and apply all strings of the current lang in the list
- // to our build object
- for (var string in that.loader.langs[lang]) {
- build[string] = that.loader.langs[lang][string];
- }
- // the last applied lang will be exposed as the
- // lang the page was translated to
- that.language = lang;
- }
- cb(null, build);
- });
- };
- /**
- * Returns the language that was last applied to the translations hash
- * thus overriding most of the formerly applied langs
- */
- html10n.getLanguage = function () {
- return this.language;
- };
- /**
- * Returns the direction of the language returned be html10n#getLanguage
- */
- html10n.getDirection = function () {
- if (!this.language)
- return;
- var langCode = this.language.indexOf('-') == -1 ? this.language : this.language.substr(0, this.language.indexOf('-'));
- return html10n.rtl.indexOf(langCode) == -1 ? 'ltr' : 'rtl';
- };
- /**
- * Index all s
- */
- html10n.index = function () {
- // Find all s
- var links = document.getElementsByTagName('link'), resources = [];
- for (var i = 0, n = links.length; i < n; i++) {
- if (links[i].type != 'application/l10n+json')
- continue;
- resources.push(links[i].href);
- }
- this.loader = new Loader(resources);
- this.trigger('indexed');
- };
- if (document.addEventListener) // modern browsers and IE9+
- document.addEventListener('DOMContentLoaded', function () {
- html10n.index();
- }, false);
- else if (window.attachEvent)
- window.attachEvent('onload', function () {
- html10n.index();
- }, false);
- // gettext-like shortcut
- if (window._ === undefined)
- window._ = html10n.get;
- return html10n;
-})(window, document);
diff --git a/src/static/js/vendors/i18next.ts b/src/static/js/vendors/i18next.ts
new file mode 100644
index 00000000000..2311d544d99
--- /dev/null
+++ b/src/static/js/vendors/i18next.ts
@@ -0,0 +1,15 @@
+import i18next, {TFunction} from 'i18next'
+import Backend from 'i18next-fs-backend';
+
+
+export let i18nextvar: TFunction
+const i18next2 = i18next
+ .use(Backend)
+ .init({
+ fallbackLng: 'en', // Default language fallback
+ backend: {
+ loadPath: 'locales/{{lng}}.json', // Path pattern to load locale files
+ },
+ }).then(t=>{
+ i18nextvar = t
+ });
diff --git a/src/static/module/CustomWindow.ts b/src/static/module/CustomWindow.ts
index 40711b98d56..255b536aa7d 100644
--- a/src/static/module/CustomWindow.ts
+++ b/src/static/module/CustomWindow.ts
@@ -1,9 +1,16 @@
+import {extend} from "jquery";
+
export type CustomWindow = {
+ revisionInfo: any;
+ $: any;
require: RequireFunction,
Ace2Inner:any,
plugins: any,
jQuery: any,
document: any,
+ pad: any,
+ clientVars: any,
+ socketio: any,
}
@@ -12,3 +19,36 @@ export type RequireFunction= {
setLibraryURI: (url: string)=>void,
setGlobalKeyPath: (path: string)=>void,
}
+
+export type CustomElementWithSheet = {
+ sheet: CSSStyleSheet,
+ startLoc: number
+ currentLoc: number,
+ id
+}
+
+
+export type AuthorData = {
+ colorId: number|string
+}
+
+export type Author = {
+ [author:string]:AuthorData
+}
+
+export type JQueryGritter = {
+ gritter: any;
+ farbtastic: any;
+}
+
+export type AjaxDirectDatabaseAccess = {
+ code : number
+ message: string
+ data: {
+ directDatabaseAccess?: boolean
+ }
+}
+
+export type HistoricalAuthorData = {
+ userId: string,
+}
diff --git a/src/tsconfig.json b/src/tsconfig.json
index c2b23ed4266..9ad402434d9 100644
--- a/src/tsconfig.json
+++ b/src/tsconfig.json
@@ -1,13 +1,14 @@
{
"compilerOptions": {
+ "resolveJsonModule": true,
"allowJs": true,
"typeRoots": ["node_modules/@types"],
"types": ["node", "jquery"],
"module": "commonjs",
"esModuleInterop": true,
- "target": "es6",
"moduleResolution": "node",
"sourceMap": true,
+ "target": "ES2015",
"outDir": "dist"
},
"lib": ["es2015"]
From 798543fb457b08c74f33366189a7e277dd98aed1 Mon Sep 17 00:00:00 2001
From: SamTV12345 <40429738+samtv12345@users.noreply.github.com>
Date: Sun, 25 Jun 2023 15:26:34 +0200
Subject: [PATCH 07/11] Server starts up.
---
src/node/hooks/express.ts | 14 +-
src/node/hooks/express/webaccess.ts | 6 +-
src/node/server.ts | 13 +-
src/node/utils/LibreOffice.ts | 2 +-
src/node/utils/Settings.ts | 2 +
src/node/utils/run_cmd.ts | 59 +-
src/package-lock.json | 4249 +---------------------
src/package.json | 4 +-
src/static/js/pluginfw/client_plugins.ts | 6 +-
src/static/js/pluginfw/installer.ts | 2 +-
src/static/js/pluginfw/plugin_defs.ts | 2 +-
src/static/js/pluginfw/plugins.ts | 16 +-
src/static/js/pluginfw/shared.ts | 2 +-
src/static/js/pluginfw/tsort.ts | 4 +-
14 files changed, 121 insertions(+), 4260 deletions(-)
diff --git a/src/node/hooks/express.ts b/src/node/hooks/express.ts
index 61b1bf96c3e..4de2c9b0ab2 100644
--- a/src/node/hooks/express.ts
+++ b/src/node/hooks/express.ts
@@ -79,32 +79,32 @@ const closeServer = async () => {
};
export const createServer = async () => {
- console.log('Report bugs at https://github.com/ether/etherpad-lite/issues');
+ logger.info('Report bugs at https://github.com/ether/etherpad-lite/issues');
serverName = `Etherpad ${getGitCommit()} (https://etherpad.org)`;
- console.log(`Your Etherpad version is ${getEpVersion()} (${getGitCommit()})`);
+ logger.info(`Your Etherpad version is ${getEpVersion()} (${getGitCommit()})`);
await restartServer();
if (ip.length===0) {
// using Unix socket for connectivity
- console.log(`You can access your Etherpad instance using the Unix socket at ${port}`);
+ logger.info(`You can access your Etherpad instance using the Unix socket at ${port}`);
} else {
- console.log(`You can access your Etherpad instance at http://${ip}:${port}/`);
+ logger.info(`You can access your Etherpad instance at http://${ip}:${port}/`);
}
if (!_.isEmpty(users)) {
- console.log(`The plugin admin page is at http://${ip}:${port}/admin/plugins`);
+ logger.info(`The plugin admin page is at http://${ip}:${port}/admin/plugins`);
} else {
- console.warn('Admin username and password not set in settings.json. ' +
+ logger.info('Admin username and password not set in settings.json. ' +
'To access admin please uncomment and edit "users" in settings.json');
}
const env = process.env.NODE_ENV || 'development';
if (env !== 'production') {
- console.warn('Etherpad is running in Development mode. This mode is slower for users and ' +
+ logger.warn('Etherpad is running in Development mode. This mode is slower for users and ' +
'less secure than production mode. You should set the NODE_ENV environment ' +
'variable to production by using: export NODE_ENV=production');
}
diff --git a/src/node/hooks/express/webaccess.ts b/src/node/hooks/express/webaccess.ts
index 4aac3064397..4b7ac5d847f 100644
--- a/src/node/hooks/express/webaccess.ts
+++ b/src/node/hooks/express/webaccess.ts
@@ -12,12 +12,14 @@ import {getPadId, isReadOnlyId} from "../../db/ReadOnlyManager";
import {UserIndexedModel} from "../../models/UserIndexedModel";
const httpLogger = log4js.getLogger('http');
+
+import {aCallFirst as hookCall} from "../../../static/js/pluginfw/hooks";
+
deprecationNotices.authFailure = 'use the authnFailure and authzFailure hooks instead';
// Promisified wrapper around hooks.aCallFirst.
const aCallFirst = (hookName, context, pred = null) => new Promise((resolve, reject) => {
- // FIXME Why are there 4 arguments but only 3 parameters?
- aCallFirst(hookName, context, (err, r) => err != null ? reject(err) : resolve(r));
+ hookCall(hookName, context, (err, r) => err != null ? reject(err) : resolve(r));
});
const aCallFirst0 =
diff --git a/src/node/server.ts b/src/node/server.ts
index 2797c8d740c..fe41f4fc58c 100644
--- a/src/node/server.ts
+++ b/src/node/server.ts
@@ -47,7 +47,7 @@ checkDeprecationStatus('12.17.0', '1.9.0');
import db = require('./db/DB');
import {} from './db/DB'
-import express = require('./hooks/express');
+import {createServer, server} from './hooks/express';
import hooks = require('../static/js/pluginfw/hooks');
import pluginDefs = require('../static/js/pluginfw/plugin_defs');
import plugins = require('../static/js/pluginfw/plugins');
@@ -87,7 +87,7 @@ export const start = async () => {
// Retry. Don't fall through because it might have transitioned to STATE_TRANSITION_FAILED.
return await start();
case State.RUNNING:
- return express.server;
+ return server;
case State.STOPPING:
case State.STOPPED:
case State.EXITING:
@@ -152,7 +152,7 @@ export const start = async () => {
logger.debug(`Installed parts:\n${plugins.formatParts()}`);
logger.debug(`Installed server-side hooks:\n${plugins.formatHooks('hooks', false)}`);
await hooks.aCallAll('loadSettings', {settings});
- await hooks.aCallAll('createServer');
+ await hooks.aCallAll(createServer())
} catch (err) {
logger.error('Error occurred while starting Etherpad');
state = State.STATE_TRANSITION_FAILED;
@@ -163,9 +163,8 @@ export const start = async () => {
logger.info('Etherpad is running');
state = State.RUNNING;
startDoneGate.resolve();
-
// Return the HTTP server to make it easier to write tests.
- return express.server;
+ return server;
};
const stopDoneGate = new Gate();
@@ -277,7 +276,7 @@ export const exit = async (err = null) => {
logger.info('Waiting for Node.js to exit...');
state = State.WAITING_FOR_EXIT;
- /* eslint-enable no-process-exit */
};
-if (require.main === module) start();
+start()
+ .then(c=>logger.info("Server started"));
diff --git a/src/node/utils/LibreOffice.ts b/src/node/utils/LibreOffice.ts
index dddaf071db9..26f818d30ea 100644
--- a/src/node/utils/LibreOffice.ts
+++ b/src/node/utils/LibreOffice.ts
@@ -24,7 +24,7 @@ import {promises as fs} from "fs";
import os from 'os';
import path from "path";
-import {exportCMD} from "./run_cmd";
+import exportCMD from "./run_cmd";
import {soffice} from "./Settings";
diff --git a/src/node/utils/Settings.ts b/src/node/utils/Settings.ts
index e12c14c7f3b..2da1321faa1 100644
--- a/src/node/utils/Settings.ts
+++ b/src/node/utils/Settings.ts
@@ -28,6 +28,8 @@
*/
import exp from "constants";
+// FIXME Is there a better way to enter dynamic package.json path
+// @ts-ignore
import packageJSON from '../../../package.json'
import {findEtherpadRoot, makeAbsolute, isSubdir} from './AbsolutePaths';
import deepEqual from 'fast-deep-equal/es6';
diff --git a/src/node/utils/run_cmd.ts b/src/node/utils/run_cmd.ts
index b98cb9b4535..3738d48a9ae 100644
--- a/src/node/utils/run_cmd.ts
+++ b/src/node/utils/run_cmd.ts
@@ -1,12 +1,22 @@
+
'use strict';
import spawn from 'cross-spawn';
import log4js from 'log4js';
import path from 'path';
-import {root} from "./Settings";
-import {CMDOptions, CMDPromise} from '../models/CMDOptions'
+import {root} from './Settings';
+import {CustomError} from "./customError";
+
const logger = log4js.getLogger('runCmd');
-import {CustomError} from './customError'
+
+type CMDPromise = {
+ stdout: Promise,
+ stderr: Promise,
+ status: Promise,
+ signal: Promise,
+}
+
+
const logLines = (readable, logLineFn) => {
readable.setEncoding('utf8');
// The process won't necessarily write full lines every time -- it might write a part of a line
@@ -69,14 +79,23 @@ const logLines = (readable, logLineFn) => {
* - `stderr`: Similar to `stdout` but for stderr.
* - `child`: The ChildProcess object.
*/
-export const exportCMD: (args: string[], opts?:CMDOptions)=>void = async (args, opts = {
- cwd: undefined,
- stdio: undefined,
- env: undefined
+
+type RunOpts = {
+ cwd?: string;
+ env?: any;
+ stdio?: any;
+ detached?: boolean;
+ uid?: number
+}
+
+
+const run_cmd = (args, opts:RunOpts = {
+ stdio: undefined
}) => {
- logger.debug(`Executing command: ${args.join(' ')}`);
+ logger.info(`Executing command: ${args.join(' ')}`);
+
opts = {cwd: root, ...opts};
- logger.debug(`cwd: ${opts.cwd}`);
+ logger.info(`cwd: ${opts.cwd}`);
// Log stdout and stderr by default.
const stdio =
@@ -85,24 +104,20 @@ export const exportCMD: (args: string[], opts?:CMDOptions)=>void = async (args,
: opts.stdio === 'string' ? [null, 'string', 'string']
: Array(3).fill(opts.stdio);
const cmdLogger = log4js.getLogger(`runCmd|${args[0]}`);
- if (stdio[1] == null && stdio instanceof Array) stdio[1] = (line) => cmdLogger.info(line);
- if (stdio[2] == null && stdio instanceof Array) stdio[2] = (line) => cmdLogger.error(line);
+ if (stdio[1] == null) stdio[1] = (line) => cmdLogger.info(line);
+ if (stdio[2] == null) stdio[2] = (line) => cmdLogger.error(line);
const stdioLoggers = [];
const stdioSaveString = [];
for (const fd of [1, 2]) {
if (typeof stdio[fd] === 'function') {
stdioLoggers[fd] = stdio[fd];
- if (stdio instanceof Array)
- stdio[fd] = 'pipe';
+ stdio[fd] = 'pipe';
} else if (stdio[fd] === 'string') {
stdioSaveString[fd] = true;
- if (stdio instanceof Array)
- stdio[fd] = 'pipe';
+ stdio[fd] = 'pipe';
}
}
- if (opts.stdio instanceof Array) {
- opts.stdio = stdio;
- }
+ opts.stdio = stdio;
// On Windows the PATH environment var might be spelled "Path".
const pathVarName =
@@ -123,15 +138,13 @@ export const exportCMD: (args: string[], opts?:CMDOptions)=>void = async (args,
// Create an error object to use in case the process fails. This is done here rather than in the
// process's `exit` handler so that we get a useful stack trace.
- const procFailedErr:CustomError = new CustomError({});
+ const procFailedErr = new CustomError({});
const proc = spawn(args[0], args.slice(1), opts);
const streams = [undefined, proc.stdout, proc.stderr];
let px;
- const p = await new Promise((resolve, reject) => {
- px = {resolve, reject};
- });
+ const p = new Promise((resolve, reject) => { px = {resolve, reject}; });
[, p.stdout, p.stderr] = streams;
p.child = proc;
@@ -141,7 +154,6 @@ export const exportCMD: (args: string[], opts?:CMDOptions)=>void = async (args,
if (stdioLoggers[fd] != null) {
logLines(streams[fd], stdioLoggers[fd]);
} else if (stdioSaveString[fd]) {
- //FIXME How to solve this?
// @ts-ignore
p[[null, 'stdout', 'stderr'][fd]] = stdioStringPromises[fd] = (async () => {
const chunks = [];
@@ -166,3 +178,4 @@ export const exportCMD: (args: string[], opts?:CMDOptions)=>void = async (args,
});
return p;
};
+export default run_cmd;
diff --git a/src/package-lock.json b/src/package-lock.json
index 4a9eb06ba79..6087e5103b9 100644
--- a/src/package-lock.json
+++ b/src/package-lock.json
@@ -32,7 +32,6 @@
"log4js": "^6.9.1",
"measured-core": "^2.0.0",
"mime-types": "^2.1.35",
- "npm": "^6.14.15",
"openapi-backend": "^5.9.2",
"proxy-addr": "^2.0.7",
"rate-limiter-flexible": "^2.4.1",
@@ -58,6 +57,7 @@
"etherpad-lite": "node/server.js"
},
"devDependencies": {
+ "@types/cross-spawn": "^6.0.2",
"@types/express": "4.17.17",
"@types/jquery": "^3.5.16",
"@types/js-cookie": "^3.0.3",
@@ -67,6 +67,8 @@
"eslint": "^8.14.0",
"eslint-config-etherpad": "^3.0.13",
"etherpad-cli-client": "^2.0.1",
+ "i18next": "^23.2.3",
+ "i18next-fs-backend": "^2.1.5",
"mocha": "^9.2.2",
"mocha-froth": "^0.2.10",
"nodeify": "^1.0.1",
@@ -1042,6 +1044,15 @@
"@types/node": "*"
}
},
+ "node_modules/@types/cross-spawn": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.2.tgz",
+ "integrity": "sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@types/es-aggregate-error": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@types/es-aggregate-error/-/es-aggregate-error-1.0.2.tgz",
@@ -12033,6 +12044,35 @@
"ms": "^2.0.0"
}
},
+ "node_modules/i18next": {
+ "version": "23.2.3",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.2.3.tgz",
+ "integrity": "sha512-5spO7L0rNmW0jFuNhz+gfirlFt1anle4mTy4+gFkgsH0+T3R5++4oncBrzeKa7v8pweRyGBoGmOpboqlxovg6A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://locize.com"
+ },
+ {
+ "type": "individual",
+ "url": "https://locize.com/i18next.html"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"
+ }
+ ],
+ "dependencies": {
+ "@babel/runtime": "^7.22.5"
+ }
+ },
+ "node_modules/i18next-fs-backend": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.1.5.tgz",
+ "integrity": "sha512-7fgSH8nVhXSBYPHR/W3tEXXhcnwHwNiND4Dfx9knzPzdsWTUTL/TdDVV+DY0dL0asHKLbdoJaXS4LdVW6R8MVQ==",
+ "dev": true
+ },
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -14347,4213 +14387,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/npm": {
- "version": "6.14.16",
- "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.16.tgz",
- "integrity": "sha512-LMiLGYsVNJfVPlQg7v2NYjG7iRIapcLv+oMunlq7fkXVx0BATCjRu7XyWl0G+iuZzHy4CjtM32QB8ox8juTgaw==",
- "bundleDependencies": [
- "abbrev",
- "ansicolors",
- "ansistyles",
- "aproba",
- "archy",
- "bin-links",
- "bluebird",
- "byte-size",
- "cacache",
- "call-limit",
- "chownr",
- "ci-info",
- "cli-columns",
- "cli-table3",
- "cmd-shim",
- "columnify",
- "config-chain",
- "debuglog",
- "detect-indent",
- "detect-newline",
- "dezalgo",
- "editor",
- "figgy-pudding",
- "find-npm-prefix",
- "fs-vacuum",
- "fs-write-stream-atomic",
- "gentle-fs",
- "glob",
- "graceful-fs",
- "has-unicode",
- "hosted-git-info",
- "iferr",
- "imurmurhash",
- "infer-owner",
- "inflight",
- "inherits",
- "ini",
- "init-package-json",
- "is-cidr",
- "json-parse-better-errors",
- "JSONStream",
- "lazy-property",
- "libcipm",
- "libnpm",
- "libnpmaccess",
- "libnpmhook",
- "libnpmorg",
- "libnpmsearch",
- "libnpmteam",
- "libnpx",
- "lock-verify",
- "lockfile",
- "lodash._baseindexof",
- "lodash._baseuniq",
- "lodash._bindcallback",
- "lodash._cacheindexof",
- "lodash._createcache",
- "lodash._getnative",
- "lodash.clonedeep",
- "lodash.restparam",
- "lodash.union",
- "lodash.uniq",
- "lodash.without",
- "lru-cache",
- "meant",
- "mississippi",
- "mkdirp",
- "move-concurrently",
- "node-gyp",
- "nopt",
- "normalize-package-data",
- "npm-audit-report",
- "npm-cache-filename",
- "npm-install-checks",
- "npm-lifecycle",
- "npm-package-arg",
- "npm-packlist",
- "npm-pick-manifest",
- "npm-profile",
- "npm-registry-fetch",
- "npm-user-validate",
- "npmlog",
- "once",
- "opener",
- "osenv",
- "pacote",
- "path-is-inside",
- "promise-inflight",
- "qrcode-terminal",
- "query-string",
- "qw",
- "read-cmd-shim",
- "read-installed",
- "read-package-json",
- "read-package-tree",
- "read",
- "readable-stream",
- "readdir-scoped-modules",
- "request",
- "retry",
- "rimraf",
- "safe-buffer",
- "semver",
- "sha",
- "slide",
- "sorted-object",
- "sorted-union-stream",
- "ssri",
- "stringify-package",
- "tar",
- "text-table",
- "tiny-relative-date",
- "uid-number",
- "umask",
- "unique-filename",
- "unpipe",
- "update-notifier",
- "uuid",
- "validate-npm-package-license",
- "validate-npm-package-name",
- "which",
- "worker-farm",
- "write-file-atomic"
- ],
- "dependencies": {
- "abbrev": "~1.1.1",
- "ansicolors": "~0.3.2",
- "ansistyles": "~0.1.3",
- "aproba": "^2.0.0",
- "archy": "~1.0.0",
- "bin-links": "^1.1.8",
- "bluebird": "^3.5.5",
- "byte-size": "^5.0.1",
- "cacache": "^12.0.3",
- "call-limit": "^1.1.1",
- "chownr": "^1.1.4",
- "ci-info": "^2.0.0",
- "cli-columns": "^3.1.2",
- "cli-table3": "^0.5.1",
- "cmd-shim": "^3.0.3",
- "columnify": "~1.5.4",
- "config-chain": "^1.1.12",
- "debuglog": "*",
- "detect-indent": "~5.0.0",
- "detect-newline": "^2.1.0",
- "dezalgo": "~1.0.3",
- "editor": "~1.0.0",
- "figgy-pudding": "^3.5.1",
- "find-npm-prefix": "^1.0.2",
- "fs-vacuum": "~1.2.10",
- "fs-write-stream-atomic": "~1.0.10",
- "gentle-fs": "^2.3.1",
- "glob": "^7.1.6",
- "graceful-fs": "^4.2.4",
- "has-unicode": "~2.0.1",
- "hosted-git-info": "^2.8.9",
- "iferr": "^1.0.2",
- "imurmurhash": "*",
- "infer-owner": "^1.0.4",
- "inflight": "~1.0.6",
- "inherits": "^2.0.4",
- "ini": "^1.3.8",
- "init-package-json": "^1.10.3",
- "is-cidr": "^3.0.0",
- "json-parse-better-errors": "^1.0.2",
- "JSONStream": "^1.3.5",
- "lazy-property": "~1.0.0",
- "libcipm": "^4.0.8",
- "libnpm": "^3.0.1",
- "libnpmaccess": "^3.0.2",
- "libnpmhook": "^5.0.3",
- "libnpmorg": "^1.0.1",
- "libnpmsearch": "^2.0.2",
- "libnpmteam": "^1.0.2",
- "libnpx": "^10.2.4",
- "lock-verify": "^2.1.0",
- "lockfile": "^1.0.4",
- "lodash._baseindexof": "*",
- "lodash._baseuniq": "~4.6.0",
- "lodash._bindcallback": "*",
- "lodash._cacheindexof": "*",
- "lodash._createcache": "*",
- "lodash._getnative": "*",
- "lodash.clonedeep": "~4.5.0",
- "lodash.restparam": "*",
- "lodash.union": "~4.6.0",
- "lodash.uniq": "~4.5.0",
- "lodash.without": "~4.4.0",
- "lru-cache": "^5.1.1",
- "meant": "^1.0.2",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.5",
- "move-concurrently": "^1.0.1",
- "node-gyp": "^5.1.0",
- "nopt": "^4.0.3",
- "normalize-package-data": "^2.5.0",
- "npm-audit-report": "^1.3.3",
- "npm-cache-filename": "~1.0.2",
- "npm-install-checks": "^3.0.2",
- "npm-lifecycle": "^3.1.5",
- "npm-package-arg": "^6.1.1",
- "npm-packlist": "^1.4.8",
- "npm-pick-manifest": "^3.0.2",
- "npm-profile": "^4.0.4",
- "npm-registry-fetch": "^4.0.7",
- "npm-user-validate": "^1.0.1",
- "npmlog": "~4.1.2",
- "once": "~1.4.0",
- "opener": "^1.5.2",
- "osenv": "^0.1.5",
- "pacote": "^9.5.12",
- "path-is-inside": "~1.0.2",
- "promise-inflight": "~1.0.1",
- "qrcode-terminal": "^0.12.0",
- "query-string": "^6.8.2",
- "qw": "~1.0.1",
- "read": "~1.0.7",
- "read-cmd-shim": "^1.0.5",
- "read-installed": "~4.0.3",
- "read-package-json": "^2.1.1",
- "read-package-tree": "^5.3.1",
- "readable-stream": "^3.6.0",
- "readdir-scoped-modules": "^1.1.0",
- "request": "^2.88.0",
- "retry": "^0.12.0",
- "rimraf": "^2.7.1",
- "safe-buffer": "^5.1.2",
- "semver": "^5.7.1",
- "sha": "^3.0.0",
- "slide": "~1.1.6",
- "sorted-object": "~2.0.1",
- "sorted-union-stream": "~2.1.3",
- "ssri": "^6.0.2",
- "stringify-package": "^1.0.1",
- "tar": "^4.4.19",
- "text-table": "~0.2.0",
- "tiny-relative-date": "^1.3.0",
- "uid-number": "0.0.6",
- "umask": "~1.1.0",
- "unique-filename": "^1.1.1",
- "unpipe": "~1.0.0",
- "update-notifier": "^2.5.0",
- "uuid": "^3.3.3",
- "validate-npm-package-license": "^3.0.4",
- "validate-npm-package-name": "~3.0.0",
- "which": "^1.3.1",
- "worker-farm": "^1.7.0",
- "write-file-atomic": "^2.4.3"
- },
- "bin": {
- "npm": "bin/npm-cli.js",
- "npx": "bin/npx-cli.js"
- },
- "engines": {
- "node": "6 >=6.2.0 || 8 || >=9.3.0"
- }
- },
- "node_modules/npm/node_modules/abbrev": {
- "version": "1.1.1",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/agent-base": {
- "version": "4.3.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "es6-promisify": "^5.0.0"
- },
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/npm/node_modules/agentkeepalive": {
- "version": "3.5.2",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "humanize-ms": "^1.2.1"
- },
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/npm/node_modules/ansi-align": {
- "version": "2.0.0",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^2.0.0"
- }
- },
- "node_modules/npm/node_modules/ansi-regex": {
- "version": "2.1.1",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/ansi-styles": {
- "version": "3.2.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/ansicolors": {
- "version": "0.3.2",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/ansistyles": {
- "version": "0.1.3",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/aproba": {
- "version": "2.0.0",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/archy": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/are-we-there-yet": {
- "version": "1.1.4",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream": {
- "version": "2.3.6",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "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"
- }
- },
- "node_modules/npm/node_modules/are-we-there-yet/node_modules/string_decoder": {
- "version": "1.1.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/npm/node_modules/asap": {
- "version": "2.0.6",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/asn1": {
- "version": "0.2.4",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "safer-buffer": "~2.1.0"
- }
- },
- "node_modules/npm/node_modules/assert-plus": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/npm/node_modules/asynckit": {
- "version": "0.4.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/aws-sign2": {
- "version": "0.7.0",
- "inBundle": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/npm/node_modules/aws4": {
- "version": "1.8.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/balanced-match": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/bcrypt-pbkdf": {
- "version": "1.0.2",
- "inBundle": true,
- "license": "BSD-3-Clause",
- "optional": true,
- "dependencies": {
- "tweetnacl": "^0.14.3"
- }
- },
- "node_modules/npm/node_modules/bin-links": {
- "version": "1.1.8",
- "inBundle": true,
- "license": "Artistic-2.0",
- "dependencies": {
- "bluebird": "^3.5.3",
- "cmd-shim": "^3.0.0",
- "gentle-fs": "^2.3.0",
- "graceful-fs": "^4.1.15",
- "npm-normalize-package-bin": "^1.0.0",
- "write-file-atomic": "^2.3.0"
- }
- },
- "node_modules/npm/node_modules/bluebird": {
- "version": "3.5.5",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/boxen": {
- "version": "1.3.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ansi-align": "^2.0.0",
- "camelcase": "^4.0.0",
- "chalk": "^2.0.1",
- "cli-boxes": "^1.0.0",
- "string-width": "^2.0.0",
- "term-size": "^1.2.0",
- "widest-line": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/brace-expansion": {
- "version": "1.1.11",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/npm/node_modules/buffer-from": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/builtins": {
- "version": "1.0.3",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/byline": {
- "version": "5.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/byte-size": {
- "version": "5.0.1",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/npm/node_modules/cacache": {
- "version": "12.0.3",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "bluebird": "^3.5.5",
- "chownr": "^1.1.1",
- "figgy-pudding": "^3.5.1",
- "glob": "^7.1.4",
- "graceful-fs": "^4.1.15",
- "infer-owner": "^1.0.3",
- "lru-cache": "^5.1.1",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.6.3",
- "ssri": "^6.0.1",
- "unique-filename": "^1.1.1",
- "y18n": "^4.0.0"
- }
- },
- "node_modules/npm/node_modules/call-limit": {
- "version": "1.1.1",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/camelcase": {
- "version": "4.1.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/capture-stack-trace": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/caseless": {
- "version": "0.12.0",
- "inBundle": true,
- "license": "Apache-2.0"
- },
- "node_modules/npm/node_modules/chalk": {
- "version": "2.4.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/chownr": {
- "version": "1.1.4",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/ci-info": {
- "version": "2.0.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/cidr-regex": {
- "version": "2.0.10",
- "inBundle": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "ip-regex": "^2.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/cli-boxes": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/cli-columns": {
- "version": "3.1.2",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "string-width": "^2.0.0",
- "strip-ansi": "^3.0.1"
- },
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/npm/node_modules/cli-table3": {
- "version": "0.5.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "object-assign": "^4.1.0",
- "string-width": "^2.1.1"
- },
- "engines": {
- "node": ">=6"
- },
- "optionalDependencies": {
- "colors": "^1.1.2"
- }
- },
- "node_modules/npm/node_modules/cliui": {
- "version": "5.0.0",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
- }
- },
- "node_modules/npm/node_modules/cliui/node_modules/ansi-regex": {
- "version": "4.1.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/cliui/node_modules/is-fullwidth-code-point": {
- "version": "2.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/cliui/node_modules/string-width": {
- "version": "3.1.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/cliui/node_modules/strip-ansi": {
- "version": "5.2.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^4.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/clone": {
- "version": "1.0.4",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/npm/node_modules/cmd-shim": {
- "version": "3.0.3",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "mkdirp": "~0.5.0"
- }
- },
- "node_modules/npm/node_modules/code-point-at": {
- "version": "1.1.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/color-convert": {
- "version": "1.9.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "^1.1.1"
- }
- },
- "node_modules/npm/node_modules/color-name": {
- "version": "1.1.3",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/colors": {
- "version": "1.3.3",
- "inBundle": true,
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=0.1.90"
- }
- },
- "node_modules/npm/node_modules/columnify": {
- "version": "1.5.4",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "strip-ansi": "^3.0.0",
- "wcwidth": "^1.0.0"
- }
- },
- "node_modules/npm/node_modules/combined-stream": {
- "version": "1.0.6",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/npm/node_modules/concat-map": {
- "version": "0.0.1",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/concat-stream": {
- "version": "1.6.2",
- "engines": [
- "node >= 0.8"
- ],
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
- },
- "node_modules/npm/node_modules/concat-stream/node_modules/readable-stream": {
- "version": "2.3.6",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "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"
- }
- },
- "node_modules/npm/node_modules/concat-stream/node_modules/string_decoder": {
- "version": "1.1.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/npm/node_modules/config-chain": {
- "version": "1.1.12",
- "inBundle": true,
- "dependencies": {
- "ini": "^1.3.4",
- "proto-list": "~1.2.1"
- }
- },
- "node_modules/npm/node_modules/configstore": {
- "version": "3.1.5",
- "inBundle": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "dot-prop": "^4.2.1",
- "graceful-fs": "^4.1.2",
- "make-dir": "^1.0.0",
- "unique-string": "^1.0.0",
- "write-file-atomic": "^2.0.0",
- "xdg-basedir": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/console-control-strings": {
- "version": "1.1.0",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/copy-concurrently": {
- "version": "1.0.5",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "aproba": "^1.1.1",
- "fs-write-stream-atomic": "^1.0.8",
- "iferr": "^0.1.5",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.0"
- }
- },
- "node_modules/npm/node_modules/copy-concurrently/node_modules/aproba": {
- "version": "1.2.0",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/copy-concurrently/node_modules/iferr": {
- "version": "0.1.5",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/core-util-is": {
- "version": "1.0.2",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/create-error-class": {
- "version": "3.0.2",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "capture-stack-trace": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/cross-spawn": {
- "version": "5.1.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "node_modules/npm/node_modules/cross-spawn/node_modules/lru-cache": {
- "version": "4.1.5",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "node_modules/npm/node_modules/cross-spawn/node_modules/yallist": {
- "version": "2.1.2",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/crypto-random-string": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/cyclist": {
- "version": "0.2.2",
- "inBundle": true
- },
- "node_modules/npm/node_modules/dashdash": {
- "version": "1.14.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "assert-plus": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/npm/node_modules/debug": {
- "version": "3.1.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/npm/node_modules/debug/node_modules/ms": {
- "version": "2.0.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/debuglog": {
- "version": "1.0.1",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/npm/node_modules/decamelize": {
- "version": "1.2.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/decode-uri-component": {
- "version": "0.2.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/npm/node_modules/deep-extend": {
- "version": "0.6.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/npm/node_modules/defaults": {
- "version": "1.0.3",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "clone": "^1.0.2"
- }
- },
- "node_modules/npm/node_modules/define-properties": {
- "version": "1.1.3",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "object-keys": "^1.0.12"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/npm/node_modules/delayed-stream": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/npm/node_modules/delegates": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/detect-indent": {
- "version": "5.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/detect-newline": {
- "version": "2.1.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/dezalgo": {
- "version": "1.0.3",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "asap": "^2.0.0",
- "wrappy": "1"
- }
- },
- "node_modules/npm/node_modules/dot-prop": {
- "version": "4.2.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "is-obj": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/dotenv": {
- "version": "5.0.1",
- "inBundle": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.6.0"
- }
- },
- "node_modules/npm/node_modules/duplexer3": {
- "version": "0.1.4",
- "inBundle": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/npm/node_modules/duplexify": {
- "version": "3.6.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "stream-shift": "^1.0.0"
- }
- },
- "node_modules/npm/node_modules/duplexify/node_modules/readable-stream": {
- "version": "2.3.6",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "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"
- }
- },
- "node_modules/npm/node_modules/duplexify/node_modules/string_decoder": {
- "version": "1.1.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/npm/node_modules/ecc-jsbn": {
- "version": "0.1.2",
- "inBundle": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "node_modules/npm/node_modules/editor": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/emoji-regex": {
- "version": "7.0.3",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/encoding": {
- "version": "0.1.12",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "iconv-lite": "~0.4.13"
- }
- },
- "node_modules/npm/node_modules/end-of-stream": {
- "version": "1.4.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "once": "^1.4.0"
- }
- },
- "node_modules/npm/node_modules/env-paths": {
- "version": "2.2.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/err-code": {
- "version": "1.1.2",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/errno": {
- "version": "0.1.7",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "prr": "~1.0.1"
- },
- "bin": {
- "errno": "cli.js"
- }
- },
- "node_modules/npm/node_modules/es-abstract": {
- "version": "1.12.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "es-to-primitive": "^1.1.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.1",
- "is-callable": "^1.1.3",
- "is-regex": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/npm/node_modules/es-to-primitive": {
- "version": "1.2.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/npm/node_modules/es6-promise": {
- "version": "4.2.8",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/es6-promisify": {
- "version": "5.0.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "es6-promise": "^4.0.3"
- }
- },
- "node_modules/npm/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/npm/node_modules/execa": {
- "version": "0.7.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/execa/node_modules/get-stream": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/extend": {
- "version": "3.0.2",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/extsprintf": {
- "version": "1.3.0",
- "engines": [
- "node >=0.6.0"
- ],
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/fast-json-stable-stringify": {
- "version": "2.0.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/figgy-pudding": {
- "version": "3.5.1",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/find-npm-prefix": {
- "version": "1.0.2",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/flush-write-stream": {
- "version": "1.0.3",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.4"
- }
- },
- "node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream": {
- "version": "2.3.6",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "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"
- }
- },
- "node_modules/npm/node_modules/flush-write-stream/node_modules/string_decoder": {
- "version": "1.1.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/npm/node_modules/forever-agent": {
- "version": "0.6.1",
- "inBundle": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/npm/node_modules/form-data": {
- "version": "2.3.2",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "1.0.6",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 0.12"
- }
- },
- "node_modules/npm/node_modules/from2": {
- "version": "2.3.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0"
- }
- },
- "node_modules/npm/node_modules/from2/node_modules/readable-stream": {
- "version": "2.3.6",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "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"
- }
- },
- "node_modules/npm/node_modules/from2/node_modules/string_decoder": {
- "version": "1.1.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/npm/node_modules/fs-minipass": {
- "version": "1.2.7",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "minipass": "^2.6.0"
- }
- },
- "node_modules/npm/node_modules/fs-minipass/node_modules/minipass": {
- "version": "2.9.0",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "node_modules/npm/node_modules/fs-vacuum": {
- "version": "1.2.10",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "path-is-inside": "^1.0.1",
- "rimraf": "^2.5.2"
- }
- },
- "node_modules/npm/node_modules/fs-write-stream-atomic": {
- "version": "1.0.10",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "iferr": "^0.1.5",
- "imurmurhash": "^0.1.4",
- "readable-stream": "1 || 2"
- }
- },
- "node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/iferr": {
- "version": "0.1.5",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream": {
- "version": "2.3.6",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "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"
- }
- },
- "node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/string_decoder": {
- "version": "1.1.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/npm/node_modules/fs.realpath": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/function-bind": {
- "version": "1.1.1",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/gauge": {
- "version": "2.7.4",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "node_modules/npm/node_modules/gauge/node_modules/aproba": {
- "version": "1.2.0",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/gauge/node_modules/string-width": {
- "version": "1.0.2",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/genfun": {
- "version": "5.0.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/gentle-fs": {
- "version": "2.3.1",
- "inBundle": true,
- "license": "Artistic-2.0",
- "dependencies": {
- "aproba": "^1.1.2",
- "chownr": "^1.1.2",
- "cmd-shim": "^3.0.3",
- "fs-vacuum": "^1.2.10",
- "graceful-fs": "^4.1.11",
- "iferr": "^0.1.5",
- "infer-owner": "^1.0.4",
- "mkdirp": "^0.5.1",
- "path-is-inside": "^1.0.2",
- "read-cmd-shim": "^1.0.1",
- "slide": "^1.1.6"
- }
- },
- "node_modules/npm/node_modules/gentle-fs/node_modules/aproba": {
- "version": "1.2.0",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/gentle-fs/node_modules/iferr": {
- "version": "0.1.5",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/get-caller-file": {
- "version": "2.0.5",
- "inBundle": true,
- "license": "ISC",
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/npm/node_modules/get-stream": {
- "version": "4.1.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/getpass": {
- "version": "0.1.7",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "assert-plus": "^1.0.0"
- }
- },
- "node_modules/npm/node_modules/glob": {
- "version": "7.1.6",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/npm/node_modules/global-dirs": {
- "version": "0.1.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ini": "^1.3.4"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/got": {
- "version": "6.7.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "create-error-class": "^3.0.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^3.0.0",
- "is-redirect": "^1.0.0",
- "is-retry-allowed": "^1.0.0",
- "is-stream": "^1.0.0",
- "lowercase-keys": "^1.0.0",
- "safe-buffer": "^5.0.1",
- "timed-out": "^4.0.0",
- "unzip-response": "^2.0.1",
- "url-parse-lax": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/got/node_modules/get-stream": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/graceful-fs": {
- "version": "4.2.4",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/har-schema": {
- "version": "2.0.0",
- "inBundle": true,
- "license": "ISC",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/har-validator": {
- "version": "5.1.5",
- "deprecated": "this library is no longer supported",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/har-validator/node_modules/ajv": {
- "version": "6.12.6",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/npm/node_modules/har-validator/node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/har-validator/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/has": {
- "version": "1.0.3",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/npm/node_modules/has-flag": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/has-symbols": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/npm/node_modules/has-unicode": {
- "version": "2.0.1",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/hosted-git-info": {
- "version": "2.8.9",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/http-cache-semantics": {
- "version": "3.8.1",
- "inBundle": true,
- "license": "BSD-2-Clause"
- },
- "node_modules/npm/node_modules/http-proxy-agent": {
- "version": "2.1.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "agent-base": "4",
- "debug": "3.1.0"
- },
- "engines": {
- "node": ">= 4.5.0"
- }
- },
- "node_modules/npm/node_modules/http-signature": {
- "version": "1.2.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- },
- "engines": {
- "node": ">=0.8",
- "npm": ">=1.3.7"
- }
- },
- "node_modules/npm/node_modules/https-proxy-agent": {
- "version": "2.2.4",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "agent-base": "^4.3.0",
- "debug": "^3.1.0"
- },
- "engines": {
- "node": ">= 4.5.0"
- }
- },
- "node_modules/npm/node_modules/humanize-ms": {
- "version": "1.2.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.0.0"
- }
- },
- "node_modules/npm/node_modules/iconv-lite": {
- "version": "0.4.23",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/iferr": {
- "version": "1.0.2",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/npm/node_modules/ignore-walk": {
- "version": "3.0.3",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "minimatch": "^3.0.4"
- }
- },
- "node_modules/npm/node_modules/import-lazy": {
- "version": "2.1.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/imurmurhash": {
- "version": "0.1.4",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/npm/node_modules/infer-owner": {
- "version": "1.0.4",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/inflight": {
- "version": "1.0.6",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/npm/node_modules/inherits": {
- "version": "2.0.4",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/ini": {
- "version": "1.3.8",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/init-package-json": {
- "version": "1.10.3",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "glob": "^7.1.1",
- "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0",
- "promzard": "^0.3.0",
- "read": "~1.0.1",
- "read-package-json": "1 || 2",
- "semver": "2.x || 3.x || 4 || 5",
- "validate-npm-package-license": "^3.0.1",
- "validate-npm-package-name": "^3.0.0"
- }
- },
- "node_modules/npm/node_modules/ip": {
- "version": "1.1.5",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/ip-regex": {
- "version": "2.1.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/is-callable": {
- "version": "1.1.4",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/npm/node_modules/is-ci": {
- "version": "1.2.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ci-info": "^1.5.0"
- },
- "bin": {
- "is-ci": "bin.js"
- }
- },
- "node_modules/npm/node_modules/is-ci/node_modules/ci-info": {
- "version": "1.6.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/is-cidr": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "cidr-regex": "^2.0.10"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/is-date-object": {
- "version": "1.0.1",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/npm/node_modules/is-fullwidth-code-point": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "number-is-nan": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/is-installed-globally": {
- "version": "0.1.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "global-dirs": "^0.1.0",
- "is-path-inside": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/is-npm": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/is-obj": {
- "version": "1.0.1",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/is-path-inside": {
- "version": "1.0.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "path-is-inside": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/is-redirect": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/is-regex": {
- "version": "1.0.4",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "has": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/npm/node_modules/is-retry-allowed": {
- "version": "1.2.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/is-stream": {
- "version": "1.1.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/is-symbol": {
- "version": "1.0.2",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "has-symbols": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/npm/node_modules/is-typedarray": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/isarray": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/isexe": {
- "version": "2.0.0",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/isstream": {
- "version": "0.1.2",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/jsbn": {
- "version": "0.1.1",
- "inBundle": true,
- "license": "MIT",
- "optional": true
- },
- "node_modules/npm/node_modules/json-parse-better-errors": {
- "version": "1.0.2",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/json-schema": {
- "version": "0.4.0",
- "inBundle": true,
- "license": "(AFL-2.1 OR BSD-3-Clause)"
- },
- "node_modules/npm/node_modules/json-stringify-safe": {
- "version": "5.0.1",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/jsonparse": {
- "version": "1.3.1",
- "engines": [
- "node >= 0.2.0"
- ],
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/JSONStream": {
- "version": "1.3.5",
- "inBundle": true,
- "license": "(MIT OR Apache-2.0)",
- "dependencies": {
- "jsonparse": "^1.2.0",
- "through": ">=2.2.7 <3"
- },
- "bin": {
- "JSONStream": "bin.js"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/npm/node_modules/jsprim": {
- "version": "1.4.2",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.4.0",
- "verror": "1.10.0"
- },
- "engines": {
- "node": ">=0.6.0"
- }
- },
- "node_modules/npm/node_modules/latest-version": {
- "version": "3.1.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "package-json": "^4.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/lazy-property": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/libcipm": {
- "version": "4.0.8",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "bin-links": "^1.1.2",
- "bluebird": "^3.5.1",
- "figgy-pudding": "^3.5.1",
- "find-npm-prefix": "^1.0.2",
- "graceful-fs": "^4.1.11",
- "ini": "^1.3.5",
- "lock-verify": "^2.1.0",
- "mkdirp": "^0.5.1",
- "npm-lifecycle": "^3.0.0",
- "npm-logical-tree": "^1.2.1",
- "npm-package-arg": "^6.1.0",
- "pacote": "^9.1.0",
- "read-package-json": "^2.0.13",
- "rimraf": "^2.6.2",
- "worker-farm": "^1.6.0"
- }
- },
- "node_modules/npm/node_modules/libnpm": {
- "version": "3.0.1",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "bin-links": "^1.1.2",
- "bluebird": "^3.5.3",
- "find-npm-prefix": "^1.0.2",
- "libnpmaccess": "^3.0.2",
- "libnpmconfig": "^1.2.1",
- "libnpmhook": "^5.0.3",
- "libnpmorg": "^1.0.1",
- "libnpmpublish": "^1.1.2",
- "libnpmsearch": "^2.0.2",
- "libnpmteam": "^1.0.2",
- "lock-verify": "^2.0.2",
- "npm-lifecycle": "^3.0.0",
- "npm-logical-tree": "^1.2.1",
- "npm-package-arg": "^6.1.0",
- "npm-profile": "^4.0.2",
- "npm-registry-fetch": "^4.0.0",
- "npmlog": "^4.1.2",
- "pacote": "^9.5.3",
- "read-package-json": "^2.0.13",
- "stringify-package": "^1.0.0"
- }
- },
- "node_modules/npm/node_modules/libnpmaccess": {
- "version": "3.0.2",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "aproba": "^2.0.0",
- "get-stream": "^4.0.0",
- "npm-package-arg": "^6.1.0",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "node_modules/npm/node_modules/libnpmconfig": {
- "version": "1.2.1",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "figgy-pudding": "^3.5.1",
- "find-up": "^3.0.0",
- "ini": "^1.3.5"
- }
- },
- "node_modules/npm/node_modules/libnpmconfig/node_modules/find-up": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/libnpmconfig/node_modules/locate-path": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/libnpmconfig/node_modules/p-limit": {
- "version": "2.2.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/libnpmconfig/node_modules/p-locate": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/libnpmconfig/node_modules/p-try": {
- "version": "2.2.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/libnpmhook": {
- "version": "5.0.3",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "aproba": "^2.0.0",
- "figgy-pudding": "^3.4.1",
- "get-stream": "^4.0.0",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "node_modules/npm/node_modules/libnpmorg": {
- "version": "1.0.1",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "aproba": "^2.0.0",
- "figgy-pudding": "^3.4.1",
- "get-stream": "^4.0.0",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "node_modules/npm/node_modules/libnpmpublish": {
- "version": "1.1.2",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "aproba": "^2.0.0",
- "figgy-pudding": "^3.5.1",
- "get-stream": "^4.0.0",
- "lodash.clonedeep": "^4.5.0",
- "normalize-package-data": "^2.4.0",
- "npm-package-arg": "^6.1.0",
- "npm-registry-fetch": "^4.0.0",
- "semver": "^5.5.1",
- "ssri": "^6.0.1"
- }
- },
- "node_modules/npm/node_modules/libnpmsearch": {
- "version": "2.0.2",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "figgy-pudding": "^3.5.1",
- "get-stream": "^4.0.0",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "node_modules/npm/node_modules/libnpmteam": {
- "version": "1.0.2",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "aproba": "^2.0.0",
- "figgy-pudding": "^3.4.1",
- "get-stream": "^4.0.0",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "node_modules/npm/node_modules/libnpx": {
- "version": "10.2.4",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "dotenv": "^5.0.1",
- "npm-package-arg": "^6.0.0",
- "rimraf": "^2.6.2",
- "safe-buffer": "^5.1.0",
- "update-notifier": "^2.3.0",
- "which": "^1.3.0",
- "y18n": "^4.0.0",
- "yargs": "^14.2.3"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/lock-verify": {
- "version": "2.1.0",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "npm-package-arg": "^6.1.0",
- "semver": "^5.4.1"
- }
- },
- "node_modules/npm/node_modules/lockfile": {
- "version": "1.0.4",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "signal-exit": "^3.0.2"
- }
- },
- "node_modules/npm/node_modules/lodash._baseindexof": {
- "version": "3.1.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/lodash._baseuniq": {
- "version": "4.6.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "lodash._createset": "~4.0.0",
- "lodash._root": "~3.0.0"
- }
- },
- "node_modules/npm/node_modules/lodash._bindcallback": {
- "version": "3.0.1",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/lodash._cacheindexof": {
- "version": "3.0.2",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/lodash._createcache": {
- "version": "3.1.2",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "lodash._getnative": "^3.0.0"
- }
- },
- "node_modules/npm/node_modules/lodash._createset": {
- "version": "4.0.3",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/lodash._getnative": {
- "version": "3.9.1",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/lodash._root": {
- "version": "3.0.1",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/lodash.clonedeep": {
- "version": "4.5.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/lodash.restparam": {
- "version": "3.6.1",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/lodash.union": {
- "version": "4.6.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/lodash.uniq": {
- "version": "4.5.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/lodash.without": {
- "version": "4.4.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/lowercase-keys": {
- "version": "1.0.1",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/lru-cache": {
- "version": "5.1.1",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
- "node_modules/npm/node_modules/make-dir": {
- "version": "1.3.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "pify": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/make-fetch-happen": {
- "version": "5.0.2",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "agentkeepalive": "^3.4.1",
- "cacache": "^12.0.0",
- "http-cache-semantics": "^3.8.1",
- "http-proxy-agent": "^2.1.0",
- "https-proxy-agent": "^2.2.3",
- "lru-cache": "^5.1.1",
- "mississippi": "^3.0.0",
- "node-fetch-npm": "^2.0.2",
- "promise-retry": "^1.1.1",
- "socks-proxy-agent": "^4.0.0",
- "ssri": "^6.0.0"
- }
- },
- "node_modules/npm/node_modules/meant": {
- "version": "1.0.2",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/mime-db": {
- "version": "1.35.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/npm/node_modules/mime-types": {
- "version": "2.1.19",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "mime-db": "~1.35.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/npm/node_modules/minimatch": {
- "version": "3.0.4",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/npm/node_modules/minimist": {
- "version": "1.2.5",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/minizlib": {
- "version": "1.3.3",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "minipass": "^2.9.0"
- }
- },
- "node_modules/npm/node_modules/minizlib/node_modules/minipass": {
- "version": "2.9.0",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "node_modules/npm/node_modules/mississippi": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "concat-stream": "^1.5.0",
- "duplexify": "^3.4.2",
- "end-of-stream": "^1.1.0",
- "flush-write-stream": "^1.0.0",
- "from2": "^2.1.0",
- "parallel-transform": "^1.1.0",
- "pump": "^3.0.0",
- "pumpify": "^1.3.3",
- "stream-each": "^1.1.0",
- "through2": "^2.0.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/npm/node_modules/mkdirp": {
- "version": "0.5.5",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "minimist": "^1.2.5"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
- "node_modules/npm/node_modules/mkdirp/node_modules/minimist": {
- "version": "1.2.5",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/move-concurrently": {
- "version": "1.0.1",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "aproba": "^1.1.1",
- "copy-concurrently": "^1.0.0",
- "fs-write-stream-atomic": "^1.0.8",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.3"
- }
- },
- "node_modules/npm/node_modules/move-concurrently/node_modules/aproba": {
- "version": "1.2.0",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/ms": {
- "version": "2.1.1",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/mute-stream": {
- "version": "0.0.7",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/node-fetch-npm": {
- "version": "2.0.2",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "encoding": "^0.1.11",
- "json-parse-better-errors": "^1.0.0",
- "safe-buffer": "^5.1.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/node-gyp": {
- "version": "5.1.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "env-paths": "^2.2.0",
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.2",
- "mkdirp": "^0.5.1",
- "nopt": "^4.0.1",
- "npmlog": "^4.1.2",
- "request": "^2.88.0",
- "rimraf": "^2.6.3",
- "semver": "^5.7.1",
- "tar": "^4.4.12",
- "which": "^1.3.1"
- },
- "bin": {
- "node-gyp": "bin/node-gyp.js"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/npm/node_modules/nopt": {
- "version": "4.0.3",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- },
- "bin": {
- "nopt": "bin/nopt.js"
- }
- },
- "node_modules/npm/node_modules/normalize-package-data": {
- "version": "2.5.0",
- "inBundle": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "node_modules/npm/node_modules/normalize-package-data/node_modules/resolve": {
- "version": "1.10.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "path-parse": "^1.0.6"
- }
- },
- "node_modules/npm/node_modules/npm-audit-report": {
- "version": "1.3.3",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "cli-table3": "^0.5.0",
- "console-control-strings": "^1.1.0"
- }
- },
- "node_modules/npm/node_modules/npm-bundled": {
- "version": "1.1.1",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "node_modules/npm/node_modules/npm-cache-filename": {
- "version": "1.0.2",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/npm-install-checks": {
- "version": "3.0.2",
- "inBundle": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "semver": "^2.3.0 || 3.x || 4 || 5"
- }
- },
- "node_modules/npm/node_modules/npm-lifecycle": {
- "version": "3.1.5",
- "inBundle": true,
- "license": "Artistic-2.0",
- "dependencies": {
- "byline": "^5.0.0",
- "graceful-fs": "^4.1.15",
- "node-gyp": "^5.0.2",
- "resolve-from": "^4.0.0",
- "slide": "^1.1.6",
- "uid-number": "0.0.6",
- "umask": "^1.1.0",
- "which": "^1.3.1"
- }
- },
- "node_modules/npm/node_modules/npm-logical-tree": {
- "version": "1.2.1",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/npm-normalize-package-bin": {
- "version": "1.0.1",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/npm-package-arg": {
- "version": "6.1.1",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "hosted-git-info": "^2.7.1",
- "osenv": "^0.1.5",
- "semver": "^5.6.0",
- "validate-npm-package-name": "^3.0.0"
- }
- },
- "node_modules/npm/node_modules/npm-packlist": {
- "version": "1.4.8",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1",
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "node_modules/npm/node_modules/npm-pick-manifest": {
- "version": "3.0.2",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "figgy-pudding": "^3.5.1",
- "npm-package-arg": "^6.0.0",
- "semver": "^5.4.1"
- }
- },
- "node_modules/npm/node_modules/npm-profile": {
- "version": "4.0.4",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "aproba": "^1.1.2 || 2",
- "figgy-pudding": "^3.4.1",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "node_modules/npm/node_modules/npm-registry-fetch": {
- "version": "4.0.7",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "bluebird": "^3.5.1",
- "figgy-pudding": "^3.4.1",
- "JSONStream": "^1.3.4",
- "lru-cache": "^5.1.1",
- "make-fetch-happen": "^5.0.0",
- "npm-package-arg": "^6.1.0",
- "safe-buffer": "^5.2.0"
- }
- },
- "node_modules/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer": {
- "version": "5.2.1",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/npm-run-path": {
- "version": "2.0.2",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/npm-user-validate": {
- "version": "1.0.1",
- "inBundle": true,
- "license": "BSD-2-Clause"
- },
- "node_modules/npm/node_modules/npmlog": {
- "version": "4.1.2",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "node_modules/npm/node_modules/number-is-nan": {
- "version": "1.0.1",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/oauth-sign": {
- "version": "0.9.0",
- "inBundle": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/npm/node_modules/object-assign": {
- "version": "4.1.1",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/object-keys": {
- "version": "1.0.12",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/npm/node_modules/object.getownpropertydescriptors": {
- "version": "2.0.3",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "define-properties": "^1.1.2",
- "es-abstract": "^1.5.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/npm/node_modules/once": {
- "version": "1.4.0",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/npm/node_modules/opener": {
- "version": "1.5.2",
- "inBundle": true,
- "license": "(WTFPL OR MIT)",
- "bin": {
- "opener": "bin/opener-bin.js"
- }
- },
- "node_modules/npm/node_modules/os-homedir": {
- "version": "1.0.2",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/os-tmpdir": {
- "version": "1.0.2",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/osenv": {
- "version": "0.1.5",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "node_modules/npm/node_modules/p-finally": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/package-json": {
- "version": "4.0.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "got": "^6.7.1",
- "registry-auth-token": "^3.0.1",
- "registry-url": "^3.0.3",
- "semver": "^5.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/pacote": {
- "version": "9.5.12",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "bluebird": "^3.5.3",
- "cacache": "^12.0.2",
- "chownr": "^1.1.2",
- "figgy-pudding": "^3.5.1",
- "get-stream": "^4.1.0",
- "glob": "^7.1.3",
- "infer-owner": "^1.0.4",
- "lru-cache": "^5.1.1",
- "make-fetch-happen": "^5.0.0",
- "minimatch": "^3.0.4",
- "minipass": "^2.3.5",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "normalize-package-data": "^2.4.0",
- "npm-normalize-package-bin": "^1.0.0",
- "npm-package-arg": "^6.1.0",
- "npm-packlist": "^1.1.12",
- "npm-pick-manifest": "^3.0.0",
- "npm-registry-fetch": "^4.0.0",
- "osenv": "^0.1.5",
- "promise-inflight": "^1.0.1",
- "promise-retry": "^1.1.1",
- "protoduck": "^5.0.1",
- "rimraf": "^2.6.2",
- "safe-buffer": "^5.1.2",
- "semver": "^5.6.0",
- "ssri": "^6.0.1",
- "tar": "^4.4.10",
- "unique-filename": "^1.1.1",
- "which": "^1.3.1"
- }
- },
- "node_modules/npm/node_modules/pacote/node_modules/minipass": {
- "version": "2.9.0",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "node_modules/npm/node_modules/parallel-transform": {
- "version": "1.1.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "cyclist": "~0.2.2",
- "inherits": "^2.0.3",
- "readable-stream": "^2.1.5"
- }
- },
- "node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream": {
- "version": "2.3.6",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "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"
- }
- },
- "node_modules/npm/node_modules/parallel-transform/node_modules/string_decoder": {
- "version": "1.1.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/npm/node_modules/path-exists": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/path-is-absolute": {
- "version": "1.0.1",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/path-is-inside": {
- "version": "1.0.2",
- "inBundle": true,
- "license": "(WTFPL OR MIT)"
- },
- "node_modules/npm/node_modules/path-key": {
- "version": "2.0.1",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/path-parse": {
- "version": "1.0.7",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/performance-now": {
- "version": "2.1.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/pify": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/prepend-http": {
- "version": "1.0.4",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/process-nextick-args": {
- "version": "2.0.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/promise-inflight": {
- "version": "1.0.1",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/promise-retry": {
- "version": "1.1.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "err-code": "^1.0.0",
- "retry": "^0.10.0"
- },
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/npm/node_modules/promise-retry/node_modules/retry": {
- "version": "0.10.1",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/npm/node_modules/promzard": {
- "version": "0.3.0",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "read": "1"
- }
- },
- "node_modules/npm/node_modules/proto-list": {
- "version": "1.2.4",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/protoduck": {
- "version": "5.0.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "genfun": "^5.0.0"
- }
- },
- "node_modules/npm/node_modules/prr": {
- "version": "1.0.1",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/pseudomap": {
- "version": "1.0.2",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/psl": {
- "version": "1.1.29",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/pump": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/npm/node_modules/pumpify": {
- "version": "1.5.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
- }
- },
- "node_modules/npm/node_modules/pumpify/node_modules/pump": {
- "version": "2.0.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/npm/node_modules/punycode": {
- "version": "1.4.1",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/qrcode-terminal": {
- "version": "0.12.0",
- "inBundle": true,
- "bin": {
- "qrcode-terminal": "bin/qrcode-terminal.js"
- }
- },
- "node_modules/npm/node_modules/qs": {
- "version": "6.5.2",
- "inBundle": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/npm/node_modules/query-string": {
- "version": "6.8.2",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "decode-uri-component": "^0.2.0",
- "split-on-first": "^1.0.0",
- "strict-uri-encode": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/qw": {
- "version": "1.0.1",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/rc": {
- "version": "1.2.8",
- "inBundle": true,
- "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
- "dependencies": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "bin": {
- "rc": "cli.js"
- }
- },
- "node_modules/npm/node_modules/read": {
- "version": "1.0.7",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "mute-stream": "~0.0.4"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/npm/node_modules/read-cmd-shim": {
- "version": "1.0.5",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "graceful-fs": "^4.1.2"
- }
- },
- "node_modules/npm/node_modules/read-installed": {
- "version": "4.0.3",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "debuglog": "^1.0.1",
- "read-package-json": "^2.0.0",
- "readdir-scoped-modules": "^1.0.0",
- "semver": "2 || 3 || 4 || 5",
- "slide": "~1.1.3",
- "util-extend": "^1.0.1"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.2"
- }
- },
- "node_modules/npm/node_modules/read-package-json": {
- "version": "2.1.1",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "glob": "^7.1.1",
- "json-parse-better-errors": "^1.0.1",
- "normalize-package-data": "^2.0.0",
- "npm-normalize-package-bin": "^1.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.2"
- }
- },
- "node_modules/npm/node_modules/read-package-tree": {
- "version": "5.3.1",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "read-package-json": "^2.0.0",
- "readdir-scoped-modules": "^1.0.0",
- "util-promisify": "^2.1.0"
- }
- },
- "node_modules/npm/node_modules/readable-stream": {
- "version": "3.6.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/npm/node_modules/readdir-scoped-modules": {
- "version": "1.1.0",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "debuglog": "^1.0.1",
- "dezalgo": "^1.0.0",
- "graceful-fs": "^4.1.2",
- "once": "^1.3.0"
- }
- },
- "node_modules/npm/node_modules/registry-auth-token": {
- "version": "3.4.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "rc": "^1.1.6",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/npm/node_modules/registry-url": {
- "version": "3.1.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "rc": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/request": {
- "version": "2.88.0",
- "inBundle": true,
- "license": "Apache-2.0",
- "dependencies": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.0",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.4.3",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- },
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/npm/node_modules/require-directory": {
- "version": "2.1.1",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/require-main-filename": {
- "version": "2.0.0",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/resolve-from": {
- "version": "4.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/retry": {
- "version": "0.12.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/npm/node_modules/rimraf": {
- "version": "2.7.1",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- }
- },
- "node_modules/npm/node_modules/run-queue": {
- "version": "1.0.3",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "aproba": "^1.1.1"
- }
- },
- "node_modules/npm/node_modules/run-queue/node_modules/aproba": {
- "version": "1.2.0",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/safe-buffer": {
- "version": "5.1.2",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/safer-buffer": {
- "version": "2.1.2",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/semver": {
- "version": "5.7.1",
- "inBundle": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/npm/node_modules/semver-diff": {
- "version": "2.1.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "semver": "^5.0.3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/set-blocking": {
- "version": "2.0.0",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/sha": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "(BSD-2-Clause OR MIT)",
- "dependencies": {
- "graceful-fs": "^4.1.2"
- }
- },
- "node_modules/npm/node_modules/shebang-command": {
- "version": "1.2.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "shebang-regex": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/shebang-regex": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/signal-exit": {
- "version": "3.0.2",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/slide": {
- "version": "1.1.6",
- "inBundle": true,
- "license": "ISC",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/npm/node_modules/smart-buffer": {
- "version": "4.1.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">= 6.0.0",
- "npm": ">= 3.0.0"
- }
- },
- "node_modules/npm/node_modules/socks": {
- "version": "2.3.3",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ip": "1.1.5",
- "smart-buffer": "^4.1.0"
- },
- "engines": {
- "node": ">= 6.0.0",
- "npm": ">= 3.0.0"
- }
- },
- "node_modules/npm/node_modules/socks-proxy-agent": {
- "version": "4.0.2",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "agent-base": "~4.2.1",
- "socks": "~2.3.2"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/npm/node_modules/socks-proxy-agent/node_modules/agent-base": {
- "version": "4.2.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "es6-promisify": "^5.0.0"
- },
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/npm/node_modules/sorted-object": {
- "version": "2.0.1",
- "inBundle": true,
- "license": "(WTFPL OR MIT)"
- },
- "node_modules/npm/node_modules/sorted-union-stream": {
- "version": "2.1.3",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "from2": "^1.3.0",
- "stream-iterate": "^1.1.0"
- }
- },
- "node_modules/npm/node_modules/sorted-union-stream/node_modules/from2": {
- "version": "1.3.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "inherits": "~2.0.1",
- "readable-stream": "~1.1.10"
- }
- },
- "node_modules/npm/node_modules/sorted-union-stream/node_modules/isarray": {
- "version": "0.0.1",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream": {
- "version": "1.1.14",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "node_modules/npm/node_modules/sorted-union-stream/node_modules/string_decoder": {
- "version": "0.10.31",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/spdx-correct": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "Apache-2.0",
- "dependencies": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/npm/node_modules/spdx-exceptions": {
- "version": "2.1.0",
- "inBundle": true,
- "license": "CC-BY-3.0"
- },
- "node_modules/npm/node_modules/spdx-expression-parse": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/npm/node_modules/spdx-license-ids": {
- "version": "3.0.5",
- "inBundle": true,
- "license": "CC0-1.0"
- },
- "node_modules/npm/node_modules/split-on-first": {
- "version": "1.1.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/sshpk": {
- "version": "1.14.2",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "dashdash": "^1.12.0",
- "getpass": "^0.1.1",
- "safer-buffer": "^2.0.2"
- },
- "bin": {
- "sshpk-conv": "bin/sshpk-conv",
- "sshpk-sign": "bin/sshpk-sign",
- "sshpk-verify": "bin/sshpk-verify"
- },
- "engines": {
- "node": ">=0.10.0"
- },
- "optionalDependencies": {
- "bcrypt-pbkdf": "^1.0.0",
- "ecc-jsbn": "~0.1.1",
- "jsbn": "~0.1.0",
- "tweetnacl": "~0.14.0"
- }
- },
- "node_modules/npm/node_modules/ssri": {
- "version": "6.0.2",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "figgy-pudding": "^3.5.1"
- }
- },
- "node_modules/npm/node_modules/stream-each": {
- "version": "1.2.2",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "stream-shift": "^1.0.0"
- }
- },
- "node_modules/npm/node_modules/stream-iterate": {
- "version": "1.2.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "readable-stream": "^2.1.5",
- "stream-shift": "^1.0.0"
- }
- },
- "node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream": {
- "version": "2.3.6",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "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"
- }
- },
- "node_modules/npm/node_modules/stream-iterate/node_modules/string_decoder": {
- "version": "1.1.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/npm/node_modules/stream-shift": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/strict-uri-encode": {
- "version": "2.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/string_decoder": {
- "version": "1.3.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/npm/node_modules/string_decoder/node_modules/safe-buffer": {
- "version": "5.2.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/string-width": {
- "version": "2.1.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/string-width/node_modules/ansi-regex": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/string-width/node_modules/is-fullwidth-code-point": {
- "version": "2.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/string-width/node_modules/strip-ansi": {
- "version": "4.0.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/stringify-package": {
- "version": "1.0.1",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/strip-ansi": {
- "version": "3.0.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/strip-eof": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/strip-json-comments": {
- "version": "2.0.1",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/supports-color": {
- "version": "5.4.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/tar": {
- "version": "4.4.19",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "chownr": "^1.1.4",
- "fs-minipass": "^1.2.7",
- "minipass": "^2.9.0",
- "minizlib": "^1.3.3",
- "mkdirp": "^0.5.5",
- "safe-buffer": "^5.2.1",
- "yallist": "^3.1.1"
- },
- "engines": {
- "node": ">=4.5"
- }
- },
- "node_modules/npm/node_modules/tar/node_modules/minipass": {
- "version": "2.9.0",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "node_modules/npm/node_modules/tar/node_modules/safe-buffer": {
- "version": "5.2.1",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/tar/node_modules/yallist": {
- "version": "3.1.1",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/term-size": {
- "version": "1.2.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "execa": "^0.7.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/text-table": {
- "version": "0.2.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/through": {
- "version": "2.3.8",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/through2": {
- "version": "2.0.3",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "readable-stream": "^2.1.5",
- "xtend": "~4.0.1"
- }
- },
- "node_modules/npm/node_modules/through2/node_modules/readable-stream": {
- "version": "2.3.6",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "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"
- }
- },
- "node_modules/npm/node_modules/through2/node_modules/string_decoder": {
- "version": "1.1.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/npm/node_modules/timed-out": {
- "version": "4.0.1",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/tiny-relative-date": {
- "version": "1.3.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/tough-cookie": {
- "version": "2.4.3",
- "inBundle": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "psl": "^1.1.24",
- "punycode": "^1.4.1"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/npm/node_modules/tunnel-agent": {
- "version": "0.6.0",
- "inBundle": true,
- "license": "Apache-2.0",
- "dependencies": {
- "safe-buffer": "^5.0.1"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/npm/node_modules/tweetnacl": {
- "version": "0.14.5",
- "inBundle": true,
- "license": "Unlicense",
- "optional": true
- },
- "node_modules/npm/node_modules/typedarray": {
- "version": "0.0.6",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/uid-number": {
- "version": "0.0.6",
- "inBundle": true,
- "license": "ISC",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/npm/node_modules/umask": {
- "version": "1.1.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/unique-filename": {
- "version": "1.1.1",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "unique-slug": "^2.0.0"
- }
- },
- "node_modules/npm/node_modules/unique-slug": {
- "version": "2.0.0",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "imurmurhash": "^0.1.4"
- }
- },
- "node_modules/npm/node_modules/unique-string": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "crypto-random-string": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/unpipe": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/npm/node_modules/unzip-response": {
- "version": "2.0.1",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/update-notifier": {
- "version": "2.5.0",
- "inBundle": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "boxen": "^1.2.1",
- "chalk": "^2.0.1",
- "configstore": "^3.0.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^1.0.10",
- "is-installed-globally": "^0.1.0",
- "is-npm": "^1.0.0",
- "latest-version": "^3.0.0",
- "semver-diff": "^2.0.0",
- "xdg-basedir": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/uri-js": {
- "version": "4.4.0",
- "inBundle": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/npm/node_modules/uri-js/node_modules/punycode": {
- "version": "2.1.1",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/url-parse-lax": {
- "version": "1.0.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "prepend-http": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/util-deprecate": {
- "version": "1.0.2",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/util-extend": {
- "version": "1.0.3",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/util-promisify": {
- "version": "2.1.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "object.getownpropertydescriptors": "^2.0.3"
- }
- },
- "node_modules/npm/node_modules/uuid": {
- "version": "3.3.3",
- "inBundle": true,
- "license": "MIT",
- "bin": {
- "uuid": "bin/uuid"
- }
- },
- "node_modules/npm/node_modules/validate-npm-package-license": {
- "version": "3.0.4",
- "inBundle": true,
- "license": "Apache-2.0",
- "dependencies": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "node_modules/npm/node_modules/validate-npm-package-name": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "builtins": "^1.0.3"
- }
- },
- "node_modules/npm/node_modules/verror": {
- "version": "1.10.0",
- "engines": [
- "node >=0.6.0"
- ],
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "node_modules/npm/node_modules/wcwidth": {
- "version": "1.0.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "defaults": "^1.0.3"
- }
- },
- "node_modules/npm/node_modules/which": {
- "version": "1.3.1",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
- "node_modules/npm/node_modules/which-module": {
- "version": "2.0.0",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/wide-align": {
- "version": "1.1.2",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^1.0.2"
- }
- },
- "node_modules/npm/node_modules/wide-align/node_modules/string-width": {
- "version": "1.0.2",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm/node_modules/widest-line": {
- "version": "2.0.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "string-width": "^2.1.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/worker-farm": {
- "version": "1.7.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "errno": "~0.1.7"
- }
- },
- "node_modules/npm/node_modules/wrap-ansi": {
- "version": "5.1.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": {
- "version": "4.1.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": {
- "version": "2.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": {
- "version": "3.1.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": {
- "version": "5.2.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^4.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/wrappy": {
- "version": "1.0.2",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/write-file-atomic": {
- "version": "2.4.3",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
- }
- },
- "node_modules/npm/node_modules/xdg-basedir": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/xtend": {
- "version": "4.0.1",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.4"
- }
- },
- "node_modules/npm/node_modules/y18n": {
- "version": "4.0.1",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/yallist": {
- "version": "3.0.3",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/yargs": {
- "version": "14.2.3",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "cliui": "^5.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^3.0.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^15.0.1"
- }
- },
- "node_modules/npm/node_modules/yargs-parser": {
- "version": "15.0.1",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- },
- "node_modules/npm/node_modules/yargs-parser/node_modules/camelcase": {
- "version": "5.3.1",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/yargs/node_modules/ansi-regex": {
- "version": "4.1.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/yargs/node_modules/find-up": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/yargs/node_modules/is-fullwidth-code-point": {
- "version": "2.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm/node_modules/yargs/node_modules/locate-path": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/yargs/node_modules/p-limit": {
- "version": "2.3.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/npm/node_modules/yargs/node_modules/p-locate": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/yargs/node_modules/p-try": {
- "version": "2.2.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/yargs/node_modules/string-width": {
- "version": "3.1.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/npm/node_modules/yargs/node_modules/strip-ansi": {
- "version": "5.2.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^4.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/npmlog": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
diff --git a/src/package.json b/src/package.json
index df513c468e2..c69775a0093 100644
--- a/src/package.json
+++ b/src/package.json
@@ -53,7 +53,6 @@
"log4js": "^6.9.1",
"measured-core": "^2.0.0",
"mime-types": "^2.1.35",
- "npm": "^6.14.15",
"openapi-backend": "^5.9.2",
"proxy-addr": "^2.0.7",
"rate-limiter-flexible": "^2.4.1",
@@ -79,9 +78,12 @@
"etherpad-lite": "node/server.js"
},
"devDependencies": {
+ "@types/cross-spawn": "^6.0.2",
"@types/express": "4.17.17",
"@types/jquery": "^3.5.16",
"@types/js-cookie": "^3.0.3",
+ "i18next": "^23.2.3",
+ "i18next-fs-backend": "^2.1.5",
"@types/node": "^20.3.1",
"@types/underscore": "^1.11.5",
"concurrently": "^8.2.0",
diff --git a/src/static/js/pluginfw/client_plugins.ts b/src/static/js/pluginfw/client_plugins.ts
index 0f5236763fd..55753987829 100644
--- a/src/static/js/pluginfw/client_plugins.ts
+++ b/src/static/js/pluginfw/client_plugins.ts
@@ -1,6 +1,7 @@
// @ts-nocheck
import * as pluginUtils from "./shared.js";
import * as defs from "./plugin_defs.js";
+import {getLogger} from "log4js";
'use strict';
const adoptPluginsFromAncestorsOf = (frame) => {
@@ -37,9 +38,12 @@ export const update = (cb) => {
// of execution on Firefox. This schedules the response in the run-loop,
// which appears to fix the issue.
const callback = () => setTimeout(cb, 0);
- jQuery.getJSON(`${exports.baseURL}pluginfw/plugin-definitions.json?v=${clientVars.randomVersionString}`).done((data) => {
+ jQuery.getJSON(`${exports.baseURL}pluginfw/plugin-definitions.json?v=${clientVars.randomVersionString}`)
+ .done((data) => {
defs.plugins = data.plugins;
defs.parts = data.parts;
+ const logger = getLogger("client_plugins")
+ logger.info(data.parts)
defs.hooks = pluginUtils.extractHooks(defs.parts, 'client_hooks');
defs.loaded = true;
callback();
diff --git a/src/static/js/pluginfw/installer.ts b/src/static/js/pluginfw/installer.ts
index e10e41971f0..a01d894060b 100644
--- a/src/static/js/pluginfw/installer.ts
+++ b/src/static/js/pluginfw/installer.ts
@@ -7,7 +7,7 @@ import {aCallAll} from "./hooks";
import request from "request";
-import {exportCMD} from "../../../node/utils/run_cmd";
+import exportCMD from "../../../node/utils/run_cmd";
import {reloadSettings} from "../../../node/utils/Settings";
import {InstallerModel} from "../../module/InstallerModel";
diff --git a/src/static/js/pluginfw/plugin_defs.ts b/src/static/js/pluginfw/plugin_defs.ts
index 5a5dbee3fcd..37ecfe79257 100644
--- a/src/static/js/pluginfw/plugin_defs.ts
+++ b/src/static/js/pluginfw/plugin_defs.ts
@@ -25,7 +25,7 @@ export let parts = [];
// - version
// - path
// - realPath
-export const plugins = {};
+export let plugins = {};
export const setPlugins = (newPlugins) => {
Object.assign(plugins, newPlugins);
diff --git a/src/static/js/pluginfw/plugins.ts b/src/static/js/pluginfw/plugins.ts
index d4ca42735e0..2f806f6cb1e 100644
--- a/src/static/js/pluginfw/plugins.ts
+++ b/src/static/js/pluginfw/plugins.ts
@@ -8,13 +8,13 @@ import log4js from "log4js";
import path from "path";
-import {exportCMD} from "../../../node/utils/run_cmd";
+import exportCMD from "../../../node/utils/run_cmd";
-import {tsort} from "./tsort";
+import tsort from "./tsort";
import {extractHooks} from "./shared";
-import {loaded, parts, plugins, setHooks, setLoaded, setParts, setPlugins} from "./plugin_defs";
+import {parts, plugins, setHooks, setLoaded, setParts, setPlugins} from "./plugin_defs";
import {PluginInfo} from "../../module/PluginInfo";
const logger = log4js.getLogger('plugins');
@@ -95,8 +95,8 @@ export const pathNormalization = (part, hookFnName, hookName) => {
export const update = async () => {
const packages = await getPackages();
- let parts:{[keys: string]:any} = {}; // Key is full name. sortParts converts this into a topologically sorted array.
- let plugins = {};
+ let parts = []; // Key is full name. sortParts converts this into a topologically sorted array.
+ let plugins = {}
// Load plugin metadata ep.json
await Promise.all(Object.keys(packages).map(async (pluginName) => {
@@ -105,6 +105,7 @@ export const update = async () => {
}));
logger.info(`Loaded ${Object.keys(packages).length} plugins`);
+ logger.info(parts)
setPlugins(plugins);
setParts(sortParts(parts))
setHooks(extractHooks(parts, 'hooks', pathNormalization));
@@ -123,7 +124,10 @@ const getPackages = async () => {
// unset or set to `development`) because otherwise `npm ls` will not mention any packages
// that are not included in `package.json` (which is expected to not exist).
const cmd = ['npm', 'ls', '--long', '--json', '--depth=0', '--no-production'];
- const {dependencies = {}} = JSON.parse(await exportCMD(cmd, {stdio: [null, 'string']}) as unknown as string);
+ logger.info("Before exportCMD")
+ const cmdReturn = await exportCMD(cmd, {stdio: [null, 'string']})
+ logger.info("After exportCMD")
+ const {dependencies = {}} = JSON.parse(cmdReturn as string);
await Promise.all(Object.entries(dependencies).map(async ([pkg, info]) => {
if (!pkg.startsWith(prefix)) {
delete dependencies[pkg];
diff --git a/src/static/js/pluginfw/shared.ts b/src/static/js/pluginfw/shared.ts
index ec22b8cc6be..604fe400a7b 100644
--- a/src/static/js/pluginfw/shared.ts
+++ b/src/static/js/pluginfw/shared.ts
@@ -33,7 +33,7 @@ export const loadFn = (path, hookName) => {
return fn;
};
-export const extractHooks = (parts, hookSetName, normalizer) => {
+export const extractHooks = (parts: any[], hookSetName, normalizer) => {
const hooks = {};
for (const part of parts) {
for (const [hookName, regHookFnName] of Object.entries(part[hookSetName] || {})) {
diff --git a/src/static/js/pluginfw/tsort.ts b/src/static/js/pluginfw/tsort.ts
index bebac95c0fc..3fcffff4308 100644
--- a/src/static/js/pluginfw/tsort.ts
+++ b/src/static/js/pluginfw/tsort.ts
@@ -55,7 +55,7 @@ export const tsort = (edges: (string|number)[][]) => {
Object.keys(nodes).forEach(visit);
return sorted;
-};
+}
/**
* TEST
@@ -111,3 +111,5 @@ if (typeof exports === 'object' && exports === this) {
module.exports = tsort;
if (process.argv[1] === __filename) tsortTest();
}
+
+export default tsort;
From 8926677a66df460db03327ceb9418380d80ecf44 Mon Sep 17 00:00:00 2001
From: SamTV12345 <40429738+samtv12345@users.noreply.github.com>
Date: Sun, 25 Jun 2023 16:49:17 +0200
Subject: [PATCH 08/11] Start server without paths.
---
src/.babelrc | 3 +
src/bin/run.sh | 2 +-
src/node/hooks/express.ts | 9 +-
src/node/hooks/express/apicalls.ts | 4 +-
src/node/hooks/express/webaccess.ts | 7 +-
src/node/server.ts | 4 +-
src/node/utils/Settings.ts | 36 +-
src/package-lock.json | 2838 ++++++++++++++++++--
src/package.json | 10 +-
src/static/js/pluginfw/hooks.ts | 10 +-
src/static/js/pluginfw/plugins.ts | 4 +-
src/static/js/pluginfw/shared.ts | 10 +-
src/tests/backend/{common.js => common.ts} | 64 +-
13 files changed, 2792 insertions(+), 209 deletions(-)
create mode 100644 src/.babelrc
rename src/tests/backend/{common.js => common.ts} (81%)
diff --git a/src/.babelrc b/src/.babelrc
new file mode 100644
index 00000000000..1320b9a3272
--- /dev/null
+++ b/src/.babelrc
@@ -0,0 +1,3 @@
+{
+ "presets": ["@babel/preset-env"]
+}
diff --git a/src/bin/run.sh b/src/bin/run.sh
index b655e96354a..0e681bdf67b 100755
--- a/src/bin/run.sh
+++ b/src/bin/run.sh
@@ -32,4 +32,4 @@ src/bin/installDeps.sh "$@" || exit 1
# Move to the node folder and start
log "Starting Etherpad..."
-exec node src/node/server.js "$@"
+exec node src/dist/node/server.js "$@"
diff --git a/src/node/hooks/express.ts b/src/node/hooks/express.ts
index 4de2c9b0ab2..ef43d451685 100644
--- a/src/node/hooks/express.ts
+++ b/src/node/hooks/express.ts
@@ -109,11 +109,15 @@ export const createServer = async () => {
'variable to production by using: export NODE_ENV=production');
}
};
+export const app = express();
+
+import http from 'http'
+import https from 'https'
export const restartServer = async () => {
await closeServer();
- const app = express(); // New syntax for express v3
+ // New syntax for express v3
if (ssl) {
console.log('SSL -- enabled');
@@ -133,11 +137,8 @@ export const restartServer = async () => {
options.ca.push(fs.readFileSync(caFileName));
}
}
-
- const https = require('https');
server = https.createServer(options, app);
} else {
- const http = require('http');
server = http.createServer(app);
}
diff --git a/src/node/hooks/express/apicalls.ts b/src/node/hooks/express/apicalls.ts
index 0c84864491a..dc15d893849 100644
--- a/src/node/hooks/express/apicalls.ts
+++ b/src/node/hooks/express/apicalls.ts
@@ -44,5 +44,5 @@ export const expressPreSession = async (hookName, {app}) => {
// Provide a possibility to query the latest available API version
app.get('/api', (req, res) => {
res.json({currentVersion: latestApiVersion});
- });
-};
+ })
+}
diff --git a/src/node/hooks/express/webaccess.ts b/src/node/hooks/express/webaccess.ts
index 4b7ac5d847f..a7ea8c573be 100644
--- a/src/node/hooks/express/webaccess.ts
+++ b/src/node/hooks/express/webaccess.ts
@@ -51,7 +51,7 @@ export const userCanModify = (padId, req) => {
};
// Exported so that tests can set this to 0 to avoid unnecessary test slowness.
-export const authnFailureDelayMs = 1000;
+export let authnFailureDelayMs = 1000;
export const checkAccess = async (req, res, next) => {
const requireAdmin = req.path.toLowerCase().startsWith('/admin');
@@ -204,3 +204,8 @@ export const checkAccess = async (req, res, next) => {
export const checkAccess2 = (req, res, next) => {
checkAccess(req, res, next).catch((err) => next(err || new Error(err)));
};
+
+// Setters
+export const setauthnFailureDelayMs = (value) => {
+ authnFailureDelayMs = value;
+}
diff --git a/src/node/server.ts b/src/node/server.ts
index fe41f4fc58c..ed572effe80 100644
--- a/src/node/server.ts
+++ b/src/node/server.ts
@@ -51,9 +51,7 @@ import {createServer, server} from './hooks/express';
import hooks = require('../static/js/pluginfw/hooks');
import pluginDefs = require('../static/js/pluginfw/plugin_defs');
import plugins = require('../static/js/pluginfw/plugins');
-import stats = require('./stats');
import {createCollection} from "./stats";
-
const logger = log4js.getLogger('server');
console.log = logger.info.bind(logger); // do the same for others - console.debug, etc.
@@ -152,7 +150,7 @@ export const start = async () => {
logger.debug(`Installed parts:\n${plugins.formatParts()}`);
logger.debug(`Installed server-side hooks:\n${plugins.formatHooks('hooks', false)}`);
await hooks.aCallAll('loadSettings', {settings});
- await hooks.aCallAll(createServer())
+ await hooks.aCallAll(createServer());
} catch (err) {
logger.error('Error occurred while starting Etherpad');
state = State.STATE_TRANSITION_FAILED;
diff --git a/src/node/utils/Settings.ts b/src/node/utils/Settings.ts
index 2da1321faa1..0bf766339d5 100644
--- a/src/node/utils/Settings.ts
+++ b/src/node/utils/Settings.ts
@@ -109,12 +109,12 @@ export const skinVariants = 'super-light-toolbar super-light-editor light-backgr
/**
* The IP ep-lite should listen to
*/
-export const ip:String = '0.0.0.0';
+export let ip:String = '0.0.0.0';
/**
* The Port ep-lite should listen to
*/
-export const port = process.env.PORT || 9001;
+export let port = process.env.PORT || 9001;
/**
* Should we suppress Error messages from being in Pad Contents
@@ -125,7 +125,7 @@ export const suppressErrorsInPadText = false;
* The SSL signed server key and the Certificate Authority's own certificate
* default case: ep-lite does *not* use SSL. A signed server key is not required in this case.
*/
-export const ssl = false;
+export let ssl = false;
export const sslKeys = {
cert: undefined,
@@ -319,7 +319,7 @@ export let sessionKey: string|boolean = false;
/*
* Trust Proxy, whether or not trust the x-forwarded-for header.
*/
-export const trustProxy = false;
+export let trustProxy = false;
/*
* Settings controlling the session cookie issued by Etherpad.
@@ -412,7 +412,7 @@ export const setUsers = (newUsers:any) => {
*
* See https://github.com/nfriedly/express-rate-limit for more options
*/
-export const importExportRateLimiting = {
+export let importExportRateLimiting = {
// duration of the rate limit window (milliseconds)
windowMs: 90000,
@@ -429,7 +429,7 @@ export const importExportRateLimiting = {
*
* See https://github.com/animir/node-rate-limiter-flexible/wiki/Overall-example#websocket-single-connection-prevent-flooding for more options
*/
-export const commitRateLimiting = {
+export let commitRateLimiting = {
// duration of the rate limit window (seconds)
duration: 1,
@@ -884,3 +884,27 @@ export const exportedForTestingOnly = {
reloadSettings();
+// Setters
+export const setPort = (value: number) => {
+ port = value;
+}
+
+export const setIp = (value: string) => {
+ ip = value;
+}
+
+export const setTrustProxy = (value: boolean) => {
+ trustProxy = value;
+}
+
+export const setSsl = (value: boolean) => {
+ ssl = value;
+}
+
+export const setimportExportRateLimiting = (value: any) => {
+ importExportRateLimiting = value;
+}
+
+export const setCommitRateLimiting = (value: any) => {
+ commitRateLimiting = value;
+}
diff --git a/src/package-lock.json b/src/package-lock.json
index 6087e5103b9..b7097618475 100644
--- a/src/package-lock.json
+++ b/src/package-lock.json
@@ -57,6 +57,10 @@
"etherpad-lite": "node/server.js"
},
"devDependencies": {
+ "@babel/cli": "^7.22.5",
+ "@babel/core": "^7.22.5",
+ "@babel/preset-env": "^7.22.5",
+ "@babel/register": "^7.22.5",
"@types/cross-spawn": "^6.0.2",
"@types/express": "4.17.17",
"@types/jquery": "^3.5.16",
@@ -86,6 +90,19 @@
"npm": ">=6.14.0"
}
},
+ "node_modules/@ampproject/remapping": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
+ "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/@apidevtools/json-schema-ref-parser": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-10.1.0.tgz",
@@ -430,99 +447,2166 @@
"xml2js": "^0.5.0"
}
},
- "node_modules/@azure/ms-rest-js/node_modules/form-data": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
- "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "node_modules/@azure/ms-rest-js/node_modules/form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/@azure/ms-rest-js/node_modules/tough-cookie": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz",
+ "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "ip-regex": "^2.1.0",
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@azure/ms-rest-js/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@azure/ms-rest-js/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "dev": true,
+ "peer": true,
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/@azure/ms-rest-nodeauth": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@azure/ms-rest-nodeauth/-/ms-rest-nodeauth-3.1.1.tgz",
+ "integrity": "sha512-UA/8dgLy3+ZiwJjAZHxL4MUB14fFQPkaAOZ94jsTW/Z6WmoOeny2+cLk0+dyIX/iH6qSrEWKwbStEeB970B9pA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@azure/ms-rest-azure-env": "^2.0.0",
+ "@azure/ms-rest-js": "^2.0.4",
+ "adal-node": "^0.2.2"
+ }
+ },
+ "node_modules/@azure/msal-browser": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.24.0.tgz",
+ "integrity": "sha512-P4Z8mQ6hTuA9ss3HCltso7fRmuX1raaU6444G35c0FhaD6hfqViFYRa7hk16AiAs9HkUQHbBaL3gLjKMpX3heA==",
+ "dependencies": {
+ "@azure/msal-common": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@azure/msal-browser/node_modules/@azure/msal-common": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-6.3.0.tgz",
+ "integrity": "sha512-ZyLq9GdnLBi/83YpysE86TFKbA0TuvfNAN5Psqu20cdAjLo/4rw4ttiItdh1G//XeGErHk9qn57gi2AYU1b5/Q==",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@azure/msal-common": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-4.5.1.tgz",
+ "integrity": "sha512-/i5dXM+QAtO+6atYd5oHGBAx48EGSISkXNXViheliOQe+SIFMDo3gSq3lL54W0suOSAsVPws3XnTaIHlla0PIQ==",
+ "dependencies": {
+ "debug": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@azure/msal-common/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@azure/msal-common/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/@azure/msal-node": {
+ "version": "1.14.6",
+ "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.14.6.tgz",
+ "integrity": "sha512-em/qqFL5tLMxMPl9vormAs13OgZpmQoJbiQ/GlWr+BA77eCLoL+Ehr5xRHowYo+LFe5b+p+PJVkRvT+mLvOkwA==",
+ "dependencies": {
+ "@azure/msal-common": "^9.0.2",
+ "jsonwebtoken": "^9.0.0",
+ "uuid": "^8.3.0"
+ },
+ "engines": {
+ "node": "10 || 12 || 14 || 16 || 18"
+ }
+ },
+ "node_modules/@azure/msal-node/node_modules/@azure/msal-common": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-9.0.2.tgz",
+ "integrity": "sha512-qzwxuF8kZAp+rNUactMCgJh8fblq9D4lSqrrIxMDzLjgSZtjN32ix7r/HBe8QdOr76II9SVVPcMkX4sPzPfQ7w==",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@azure/msal-node/node_modules/jsonwebtoken": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz",
+ "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==",
+ "dependencies": {
+ "jws": "^3.2.2",
+ "lodash": "^4.17.21",
+ "ms": "^2.1.1",
+ "semver": "^7.3.8"
+ },
+ "engines": {
+ "node": ">=12",
+ "npm": ">=6"
+ }
+ },
+ "node_modules/@azure/msal-node/node_modules/jws": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+ "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+ "dependencies": {
+ "jwa": "^1.4.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/@azure/msal-node/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/@azure/msal-node/node_modules/semver": {
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@azure/msal-node/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/@babel/cli": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.22.5.tgz",
+ "integrity": "sha512-N5d7MjzwsQ2wppwjhrsicVDhJSqF9labEP/swYiHhio4Ca2XjEehpgPmerjnLQl7BPE59BLud0PTWGYwqFl/cQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "commander": "^4.0.1",
+ "convert-source-map": "^1.1.0",
+ "fs-readdir-recursive": "^1.1.0",
+ "glob": "^7.2.0",
+ "make-dir": "^2.1.0",
+ "slash": "^2.0.0"
+ },
+ "bin": {
+ "babel": "bin/babel.js",
+ "babel-external-helpers": "bin/babel-external-helpers.js"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "optionalDependencies": {
+ "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3",
+ "chokidar": "^3.4.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/cli/node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@babel/cli/node_modules/make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@babel/cli/node_modules/pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@babel/cli/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/@babel/cli/node_modules/slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz",
+ "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/highlight": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz",
+ "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz",
+ "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==",
+ "dev": true,
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.22.5",
+ "@babel/generator": "^7.22.5",
+ "@babel/helper-compilation-targets": "^7.22.5",
+ "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helpers": "^7.22.5",
+ "@babel/parser": "^7.22.5",
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.5",
+ "@babel/types": "^7.22.5",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.2",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/core/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@babel/core/node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@babel/core/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/@babel/core/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz",
+ "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jsesc": "^2.5.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-annotate-as-pure": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
+ "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz",
+ "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz",
+ "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.5",
+ "browserslist": "^4.21.3",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets/node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
+ },
+ "node_modules/@babel/helper-create-class-features-plugin": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz",
+ "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/helper-member-expression-to-functions": "^7.22.5",
+ "@babel/helper-optimise-call-expression": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.5",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/helper-create-regexp-features-plugin": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz",
+ "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "regexpu-core": "^5.3.1",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/helper-define-polyfill-provider": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz",
+ "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.17.7",
+ "@babel/helper-plugin-utils": "^7.16.7",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2",
+ "semver": "^6.1.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0-0"
+ }
+ },
+ "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/helper-environment-visitor": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz",
+ "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-function-name": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz",
+ "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-hoist-variables": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
+ "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-member-expression-to-functions": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz",
+ "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz",
+ "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz",
+ "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-module-imports": "^7.22.5",
+ "@babel/helper-simple-access": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.5",
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-optimise-call-expression": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
+ "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
+ "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-remap-async-to-generator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz",
+ "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-wrap-function": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-replace-supers": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz",
+ "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-member-expression-to-functions": "^7.22.5",
+ "@babel/helper-optimise-call-expression": "^7.22.5",
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-simple-access": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
+ "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
+ "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-split-export-declaration": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz",
+ "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
+ "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz",
+ "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz",
+ "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-wrap-function": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz",
+ "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz",
+ "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz",
+ "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.22.5",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "node_modules/@babel/highlight/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz",
+ "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==",
+ "dev": true,
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz",
+ "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz",
+ "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/plugin-transform-optional-chaining": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.13.0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-private-property-in-object": {
+ "version": "7.21.0-placeholder-for-preset-env.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
+ "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz",
+ "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-class-properties": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.12.13"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-class-static-block": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-dynamic-import": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-export-namespace-from": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
+ "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-assertions": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz",
+ "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-attributes": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz",
+ "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-meta": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+ "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-private-property-in-object": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-top-level-await": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-unicode-sets-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
+ "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-arrow-functions": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz",
+ "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-async-generator-functions": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz",
+ "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-remap-async-to-generator": "^7.22.5",
+ "@babel/plugin-syntax-async-generators": "^7.8.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-async-to-generator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz",
+ "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-remap-async-to-generator": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz",
+ "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-block-scoping": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz",
+ "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-class-properties": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz",
+ "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-class-static-block": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz",
+ "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.12.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-classes": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz",
+ "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-compilation-targets": "^7.22.5",
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/helper-optimise-call-expression": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.5",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-classes/node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-computed-properties": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz",
+ "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/template": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-destructuring": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz",
+ "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-dotall-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz",
+ "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-duplicate-keys": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz",
+ "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-dynamic-import": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz",
+ "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz",
+ "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-export-namespace-from": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz",
+ "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-for-of": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz",
+ "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-function-name": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz",
+ "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.22.5",
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-json-strings": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz",
+ "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-json-strings": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-literals": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz",
+ "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-logical-assignment-operators": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz",
+ "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-member-expression-literals": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz",
+ "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-amd": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz",
+ "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-commonjs": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz",
+ "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-simple-access": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-systemjs": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz",
+ "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-umd": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz",
+ "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz",
+ "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-new-target": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz",
+ "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz",
+ "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-numeric-separator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz",
+ "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-object-rest-spread": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz",
+ "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.22.5",
+ "@babel/helper-compilation-targets": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-transform-parameters": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-object-super": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz",
+ "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-optional-catch-binding": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz",
+ "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-optional-chaining": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz",
+ "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-parameters": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz",
+ "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-private-methods": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz",
+ "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-private-property-in-object": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz",
+ "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-create-class-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-property-literals": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz",
+ "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-regenerator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz",
+ "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "regenerator-transform": "^0.15.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-reserved-words": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz",
+ "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-shorthand-properties": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz",
+ "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-spread": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz",
+ "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-sticky-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz",
+ "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-template-literals": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz",
+ "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-typeof-symbol": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz",
+ "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-escapes": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz",
+ "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-property-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz",
+ "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz",
+ "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-sets-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz",
+ "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/preset-env": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz",
+ "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.22.5",
+ "@babel/helper-compilation-targets": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.5",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5",
+ "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-class-properties": "^7.12.13",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+ "@babel/plugin-syntax-import-assertions": "^7.22.5",
+ "@babel/plugin-syntax-import-attributes": "^7.22.5",
+ "@babel/plugin-syntax-import-meta": "^7.10.4",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+ "@babel/plugin-syntax-top-level-await": "^7.14.5",
+ "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
+ "@babel/plugin-transform-arrow-functions": "^7.22.5",
+ "@babel/plugin-transform-async-generator-functions": "^7.22.5",
+ "@babel/plugin-transform-async-to-generator": "^7.22.5",
+ "@babel/plugin-transform-block-scoped-functions": "^7.22.5",
+ "@babel/plugin-transform-block-scoping": "^7.22.5",
+ "@babel/plugin-transform-class-properties": "^7.22.5",
+ "@babel/plugin-transform-class-static-block": "^7.22.5",
+ "@babel/plugin-transform-classes": "^7.22.5",
+ "@babel/plugin-transform-computed-properties": "^7.22.5",
+ "@babel/plugin-transform-destructuring": "^7.22.5",
+ "@babel/plugin-transform-dotall-regex": "^7.22.5",
+ "@babel/plugin-transform-duplicate-keys": "^7.22.5",
+ "@babel/plugin-transform-dynamic-import": "^7.22.5",
+ "@babel/plugin-transform-exponentiation-operator": "^7.22.5",
+ "@babel/plugin-transform-export-namespace-from": "^7.22.5",
+ "@babel/plugin-transform-for-of": "^7.22.5",
+ "@babel/plugin-transform-function-name": "^7.22.5",
+ "@babel/plugin-transform-json-strings": "^7.22.5",
+ "@babel/plugin-transform-literals": "^7.22.5",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.22.5",
+ "@babel/plugin-transform-member-expression-literals": "^7.22.5",
+ "@babel/plugin-transform-modules-amd": "^7.22.5",
+ "@babel/plugin-transform-modules-commonjs": "^7.22.5",
+ "@babel/plugin-transform-modules-systemjs": "^7.22.5",
+ "@babel/plugin-transform-modules-umd": "^7.22.5",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
+ "@babel/plugin-transform-new-target": "^7.22.5",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5",
+ "@babel/plugin-transform-numeric-separator": "^7.22.5",
+ "@babel/plugin-transform-object-rest-spread": "^7.22.5",
+ "@babel/plugin-transform-object-super": "^7.22.5",
+ "@babel/plugin-transform-optional-catch-binding": "^7.22.5",
+ "@babel/plugin-transform-optional-chaining": "^7.22.5",
+ "@babel/plugin-transform-parameters": "^7.22.5",
+ "@babel/plugin-transform-private-methods": "^7.22.5",
+ "@babel/plugin-transform-private-property-in-object": "^7.22.5",
+ "@babel/plugin-transform-property-literals": "^7.22.5",
+ "@babel/plugin-transform-regenerator": "^7.22.5",
+ "@babel/plugin-transform-reserved-words": "^7.22.5",
+ "@babel/plugin-transform-shorthand-properties": "^7.22.5",
+ "@babel/plugin-transform-spread": "^7.22.5",
+ "@babel/plugin-transform-sticky-regex": "^7.22.5",
+ "@babel/plugin-transform-template-literals": "^7.22.5",
+ "@babel/plugin-transform-typeof-symbol": "^7.22.5",
+ "@babel/plugin-transform-unicode-escapes": "^7.22.5",
+ "@babel/plugin-transform-unicode-property-regex": "^7.22.5",
+ "@babel/plugin-transform-unicode-regex": "^7.22.5",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.22.5",
+ "@babel/preset-modules": "^0.1.5",
+ "@babel/types": "^7.22.5",
+ "babel-plugin-polyfill-corejs2": "^0.4.3",
+ "babel-plugin-polyfill-corejs3": "^0.8.1",
+ "babel-plugin-polyfill-regenerator": "^0.5.0",
+ "core-js-compat": "^3.30.2",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/preset-env/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/preset-modules": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz",
+ "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==",
"dev": true,
- "peer": true,
"dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+ "@babel/plugin-transform-dotall-regex": "^7.4.4",
+ "@babel/types": "^7.4.4",
+ "esutils": "^2.0.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/register": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.5.tgz",
+ "integrity": "sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ==",
+ "dev": true,
+ "dependencies": {
+ "clone-deep": "^4.0.1",
+ "find-cache-dir": "^2.0.0",
+ "make-dir": "^2.1.0",
+ "pirates": "^4.0.5",
+ "source-map-support": "^0.5.16"
},
"engines": {
- "node": ">= 0.12"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@azure/ms-rest-js/node_modules/tough-cookie": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz",
- "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==",
+ "node_modules/@babel/register/node_modules/make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
"dev": true,
- "peer": true,
"dependencies": {
- "ip-regex": "^2.1.0",
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
},
"engines": {
"node": ">=6"
}
},
- "node_modules/@azure/ms-rest-js/node_modules/tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "node_modules/@babel/register/node_modules/pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true,
- "peer": true
+ "engines": {
+ "node": ">=6"
+ }
},
- "node_modules/@azure/ms-rest-js/node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "node_modules/@babel/register/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true,
- "peer": true,
"bin": {
- "uuid": "dist/bin/uuid"
+ "semver": "bin/semver"
}
},
- "node_modules/@azure/ms-rest-nodeauth": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@azure/ms-rest-nodeauth/-/ms-rest-nodeauth-3.1.1.tgz",
- "integrity": "sha512-UA/8dgLy3+ZiwJjAZHxL4MUB14fFQPkaAOZ94jsTW/Z6WmoOeny2+cLk0+dyIX/iH6qSrEWKwbStEeB970B9pA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@azure/ms-rest-azure-env": "^2.0.0",
- "@azure/ms-rest-js": "^2.0.4",
- "adal-node": "^0.2.2"
- }
+ "node_modules/@babel/regjsgen": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
+ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
+ "dev": true
},
- "node_modules/@azure/msal-browser": {
- "version": "2.24.0",
- "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.24.0.tgz",
- "integrity": "sha512-P4Z8mQ6hTuA9ss3HCltso7fRmuX1raaU6444G35c0FhaD6hfqViFYRa7hk16AiAs9HkUQHbBaL3gLjKMpX3heA==",
+ "node_modules/@babel/runtime": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz",
+ "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==",
+ "dev": true,
"dependencies": {
- "@azure/msal-common": "^6.3.0"
+ "regenerator-runtime": "^0.13.11"
},
"engines": {
- "node": ">=0.8.0"
+ "node": ">=6.9.0"
}
},
- "node_modules/@azure/msal-browser/node_modules/@azure/msal-common": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-6.3.0.tgz",
- "integrity": "sha512-ZyLq9GdnLBi/83YpysE86TFKbA0TuvfNAN5Psqu20cdAjLo/4rw4ttiItdh1G//XeGErHk9qn57gi2AYU1b5/Q==",
+ "node_modules/@babel/template": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz",
+ "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.22.5",
+ "@babel/parser": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
"engines": {
- "node": ">=0.8.0"
+ "node": ">=6.9.0"
}
},
- "node_modules/@azure/msal-common": {
- "version": "4.5.1",
- "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-4.5.1.tgz",
- "integrity": "sha512-/i5dXM+QAtO+6atYd5oHGBAx48EGSISkXNXViheliOQe+SIFMDo3gSq3lL54W0suOSAsVPws3XnTaIHlla0PIQ==",
- "dependencies": {
- "debug": "^4.1.1"
+ "node_modules/@babel/traverse": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz",
+ "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.22.5",
+ "@babel/generator": "^7.22.5",
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.5",
+ "@babel/parser": "^7.22.5",
+ "@babel/types": "^7.22.5",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
},
"engines": {
- "node": ">=0.8.0"
+ "node": ">=6.9.0"
}
},
- "node_modules/@azure/msal-common/node_modules/debug": {
+ "node_modules/@babel/traverse/node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
"dependencies": {
"ms": "2.1.2"
},
@@ -535,90 +2619,30 @@
}
}
},
- "node_modules/@azure/msal-common/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/@azure/msal-node": {
- "version": "1.14.6",
- "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.14.6.tgz",
- "integrity": "sha512-em/qqFL5tLMxMPl9vormAs13OgZpmQoJbiQ/GlWr+BA77eCLoL+Ehr5xRHowYo+LFe5b+p+PJVkRvT+mLvOkwA==",
- "dependencies": {
- "@azure/msal-common": "^9.0.2",
- "jsonwebtoken": "^9.0.0",
- "uuid": "^8.3.0"
- },
- "engines": {
- "node": "10 || 12 || 14 || 16 || 18"
- }
- },
- "node_modules/@azure/msal-node/node_modules/@azure/msal-common": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-9.0.2.tgz",
- "integrity": "sha512-qzwxuF8kZAp+rNUactMCgJh8fblq9D4lSqrrIxMDzLjgSZtjN32ix7r/HBe8QdOr76II9SVVPcMkX4sPzPfQ7w==",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@azure/msal-node/node_modules/jsonwebtoken": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz",
- "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==",
- "dependencies": {
- "jws": "^3.2.2",
- "lodash": "^4.17.21",
- "ms": "^2.1.1",
- "semver": "^7.3.8"
- },
- "engines": {
- "node": ">=12",
- "npm": ">=6"
- }
- },
- "node_modules/@azure/msal-node/node_modules/jws": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
- "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
- "dependencies": {
- "jwa": "^1.4.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/@azure/msal-node/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- },
- "node_modules/@azure/msal-node/node_modules/semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
+ "node_modules/@babel/traverse/node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=4"
}
},
- "node_modules/@azure/msal-node/node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
+ "node_modules/@babel/traverse/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
},
- "node_modules/@babel/runtime": {
+ "node_modules/@babel/types": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz",
- "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz",
+ "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==",
"dev": true,
"dependencies": {
- "regenerator-runtime": "^0.13.11"
+ "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.5",
+ "to-fast-properties": "^2.0.0"
},
"engines": {
"node": ">=6.9.0"
@@ -854,6 +2878,13 @@
"node-pre-gyp": "bin/node-pre-gyp"
}
},
+ "node_modules/@nicolo-ribaudo/chokidar-2": {
+ "version": "2.1.8-no-fsevents.3",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz",
+ "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==",
+ "dev": true,
+ "optional": true
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -2004,6 +4035,54 @@
"tough-cookie": ">=2.3.3"
}
},
+ "node_modules/babel-plugin-polyfill-corejs2": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz",
+ "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.17.7",
+ "@babel/helper-define-polyfill-provider": "^0.4.0",
+ "semver": "^6.1.1"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-corejs3": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz",
+ "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.4.0",
+ "core-js-compat": "^3.30.1"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-regenerator": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz",
+ "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.4.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/backo2": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
@@ -2200,6 +4279,38 @@
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
"dev": true
},
+ "node_modules/browserslist": {
+ "version": "4.21.9",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz",
+ "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001503",
+ "electron-to-chromium": "^1.4.431",
+ "node-releases": "^2.0.12",
+ "update-browserslist-db": "^1.0.11"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
"node_modules/bson": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz",
@@ -2334,6 +4445,26 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001507",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001507.tgz",
+ "integrity": "sha512-SFpUDoSLCaE5XYL2jfqe9ova/pbQHEmbheDf5r4diNwbAgR3qxM9NQtfsiSscjqoya5K7kFcHPUQ+VsUkIJR4A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
+ },
"node_modules/caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
@@ -2573,6 +4704,20 @@
"node": ">=8"
}
},
+ "node_modules/clone-deep": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4",
+ "kind-of": "^6.0.2",
+ "shallow-clone": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/cluster-key-slot": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz",
@@ -2642,6 +4787,12 @@
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
},
+ "node_modules/commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
+ "dev": true
+ },
"node_modules/compatfactory": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/compatfactory/-/compatfactory-1.0.1.tgz",
@@ -2803,6 +4954,12 @@
"node": ">= 0.6"
}
},
+ "node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true
+ },
"node_modules/cookie": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
@@ -2833,6 +4990,19 @@
"resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz",
"integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw=="
},
+ "node_modules/core-js-compat": {
+ "version": "3.31.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz",
+ "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.21.5"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
"node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
@@ -3353,6 +5523,12 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.440",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.440.tgz",
+ "integrity": "sha512-r6dCgNpRhPwiWlxbHzZQ/d9swfPaEJGi8ekqRBwQYaR3WmA5VkqQfBWSDDjuJU1ntO+W9tHx8OHV/96Q8e0dVw==",
+ "dev": true
+ },
"node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -7006,10 +9182,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._baseindexof": {
"version": "3.1.0",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._baseuniq": {
"version": "4.6.0",
@@ -7024,24 +9199,21 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._bindcallback": {
"version": "3.0.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._cacheindexof": {
"version": "3.0.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._createcache": {
"version": "3.1.2",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"lodash._getnative": "^3.0.0"
}
@@ -7055,10 +9227,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._getnative": {
"version": "3.9.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._root": {
"version": "3.0.1",
@@ -7076,10 +9247,9 @@
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.restparam": {
"version": "3.6.1",
- "dev": true,
+ "extraneous": true,
"inBundle": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.union": {
"version": "4.6.0",
@@ -11219,6 +13389,51 @@
"node": ">= 0.8"
}
},
+ "node_modules/find-cache-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "dev": true,
+ "dependencies": {
+ "commondir": "^1.0.1",
+ "make-dir": "^2.0.0",
+ "pkg-dir": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/find-cache-dir/node_modules/make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/find-cache-dir/node_modules/pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/find-cache-dir/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
"node_modules/find-root": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
@@ -11366,6 +13581,12 @@
"node": ">= 8"
}
},
+ "node_modules/fs-readdir-recursive": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
+ "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==",
+ "dev": true
+ },
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -11433,6 +13654,15 @@
"node": ">= 4"
}
},
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -12477,6 +14707,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/is-potential-custom-element-name": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
@@ -12602,6 +14844,15 @@
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
},
+ "node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
@@ -12632,6 +14883,12 @@
"node": ">=14"
}
},
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
"node_modules/js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -12698,6 +14955,18 @@
}
}
},
+ "node_modules/jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/json-schema": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
@@ -12932,6 +15201,15 @@
"optional": true,
"peer": true
},
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/languages4translatewiki": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/languages4translatewiki/-/languages4translatewiki-0.1.3.tgz",
@@ -12995,6 +15273,12 @@
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
"integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
},
+ "node_modules/lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
+ "dev": true
+ },
"node_modules/lodash.defaults": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
@@ -14280,6 +16564,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/node-releases": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz",
+ "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==",
+ "dev": true
+ },
"node_modules/nodeify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/nodeify/-/nodeify-1.0.1.tgz",
@@ -14848,6 +17138,12 @@
"split2": "^4.1.0"
}
},
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
@@ -14872,6 +17168,88 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/pirates": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/postgres-array": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
@@ -15231,12 +17609,39 @@
"node": ">=4"
}
},
+ "node_modules/regenerate": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
+ "dev": true
+ },
+ "node_modules/regenerate-unicode-properties": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz",
+ "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==",
+ "dev": true,
+ "dependencies": {
+ "regenerate": "^1.4.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/regenerator-runtime": {
"version": "0.13.11",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
"integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
"dev": true
},
+ "node_modules/regenerator-transform": {
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz",
+ "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.8.4"
+ }
+ },
"node_modules/regexpp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
@@ -15249,6 +17654,44 @@
"url": "https://github.com/sponsors/mysticatea"
}
},
+ "node_modules/regexpu-core": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
+ "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/regjsgen": "^0.8.0",
+ "regenerate": "^1.4.2",
+ "regenerate-unicode-properties": "^10.1.0",
+ "regjsparser": "^0.9.1",
+ "unicode-match-property-ecmascript": "^2.0.0",
+ "unicode-match-property-value-ecmascript": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/regjsparser": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
+ "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+ "dev": true,
+ "dependencies": {
+ "jsesc": "~0.5.0"
+ },
+ "bin": {
+ "regjsparser": "bin/parser"
+ }
+ },
+ "node_modules/regjsparser/node_modules/jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+ "dev": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ }
+ },
"node_modules/rehype": {
"version": "12.0.1",
"resolved": "https://registry.npmjs.org/rehype/-/rehype-12.0.1.tgz",
@@ -15694,6 +18137,18 @@
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
},
+ "node_modules/shallow-clone": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -16757,6 +19212,15 @@
"resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
"integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
},
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -17173,6 +19637,46 @@
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.3.tgz",
"integrity": "sha512-QvjkYpiD+dJJraRA8+dGAU4i7aBbb2s0S3jA45TFOvg2VgqvdCDd/3N6CqA8gluk1W91GLoXg5enMUx560QzuA=="
},
+ "node_modules/unicode-canonical-property-names-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-match-property-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
+ "dev": true,
+ "dependencies": {
+ "unicode-canonical-property-names-ecmascript": "^2.0.0",
+ "unicode-property-aliases-ecmascript": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-match-property-value-ecmascript": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-property-aliases-ecmascript": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/unified": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/unified/-/unified-10.1.1.tgz",
@@ -17254,6 +19758,36 @@
"node": ">= 0.8"
}
},
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
+ "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
diff --git a/src/package.json b/src/package.json
index c69775a0093..509d6029461 100644
--- a/src/package.json
+++ b/src/package.json
@@ -78,18 +78,22 @@
"etherpad-lite": "node/server.js"
},
"devDependencies": {
+ "@babel/cli": "^7.22.5",
+ "@babel/core": "^7.22.5",
+ "@babel/preset-env": "^7.22.5",
+ "@babel/register": "^7.22.5",
"@types/cross-spawn": "^6.0.2",
"@types/express": "4.17.17",
"@types/jquery": "^3.5.16",
"@types/js-cookie": "^3.0.3",
- "i18next": "^23.2.3",
- "i18next-fs-backend": "^2.1.5",
"@types/node": "^20.3.1",
"@types/underscore": "^1.11.5",
"concurrently": "^8.2.0",
"eslint": "^8.14.0",
"eslint-config-etherpad": "^3.0.13",
"etherpad-cli-client": "^2.0.1",
+ "i18next": "^23.2.3",
+ "i18next-fs-backend": "^2.1.5",
"mocha": "^9.2.2",
"mocha-froth": "^0.2.10",
"nodeify": "^1.0.1",
@@ -112,7 +116,7 @@
},
"scripts": {
"lint": "eslint .",
- "test": "mocha --timeout 120000 --recursive tests/backend/specs ../node_modules/ep_*/static/tests/backend/specs",
+ "test": "mocha --require @babel/register --timeout 120000 --recursive tests/backend/specs ../node_modules/ep_*/static/tests/backend/specs",
"test-container": "mocha --timeout 5000 tests/container/specs/api",
"dev": "concurrently \"npx tsc --watch\" \"nodemon -q dist/server.js\""
},
diff --git a/src/static/js/pluginfw/hooks.ts b/src/static/js/pluginfw/hooks.ts
index 90a479b1801..0399e025199 100644
--- a/src/static/js/pluginfw/hooks.ts
+++ b/src/static/js/pluginfw/hooks.ts
@@ -1,6 +1,7 @@
'use strict';
import {hooks} from './plugin_defs';
+import {getLogger} from "log4js";
// Maps the name of a server-side hook to a string explaining the deprecation
// (e.g., 'use the foo hook instead').
@@ -347,10 +348,15 @@ const callHookFnAsync = async (hook, context) => {
// If cb is non-null, this function resolves to the value returned by cb.
export const aCallAll = async (hookName, context?, cb = null) => {
if (cb != null) return await attachCallback(aCallAll(hookName, context), cb);
- if (context == null) context = {};
+ if (context == null) {
+ context = {};
+ }
const hooksResult = hooks[hookName] || [];
const results = await Promise.all(
- hooksResult.map(async (hook) => normalizeValue(await callHookFnAsync(hook, context))));
+ hooksResult.map(async (hook) => {
+ getLogger().info(`Calling hook ${hook.hook_name} asynchronously`);
+ return normalizeValue(await callHookFnAsync(hook, context))
+ }));
return flatten1(results);
};
diff --git a/src/static/js/pluginfw/plugins.ts b/src/static/js/pluginfw/plugins.ts
index 2f806f6cb1e..ac4c129c4e5 100644
--- a/src/static/js/pluginfw/plugins.ts
+++ b/src/static/js/pluginfw/plugins.ts
@@ -105,7 +105,6 @@ export const update = async () => {
}));
logger.info(`Loaded ${Object.keys(packages).length} plugins`);
- logger.info(parts)
setPlugins(plugins);
setParts(sortParts(parts))
setHooks(extractHooks(parts, 'hooks', pathNormalization));
@@ -129,12 +128,13 @@ const getPackages = async () => {
logger.info("After exportCMD")
const {dependencies = {}} = JSON.parse(cmdReturn as string);
await Promise.all(Object.entries(dependencies).map(async ([pkg, info]) => {
+ logger.info(`Found plugin ${pkg}`)
if (!pkg.startsWith(prefix)) {
delete dependencies[pkg];
return;
}
const mappedInfo = info as PluginInfo
-
+ logger.info(`Found plugin ${pkg} at ${mappedInfo.path}`)
mappedInfo.realPath = await fs.realpath(mappedInfo.path);
}));
return dependencies;
diff --git a/src/static/js/pluginfw/shared.ts b/src/static/js/pluginfw/shared.ts
index 604fe400a7b..e29afee7cf1 100644
--- a/src/static/js/pluginfw/shared.ts
+++ b/src/static/js/pluginfw/shared.ts
@@ -1,6 +1,7 @@
'use strict';
import {parts} from './plugin_defs';
+import {getLogger} from "log4js";
const disabledHookReasons = {
hooks: {
@@ -35,6 +36,7 @@ export const loadFn = (path, hookName) => {
export const extractHooks = (parts: any[], hookSetName, normalizer) => {
const hooks = {};
+ const logger = getLogger('pluginfw:shared')
for (const part of parts) {
for (const [hookName, regHookFnName] of Object.entries(part[hookSetName] || {})) {
/* On the server side, you can't just
@@ -45,10 +47,10 @@ export const extractHooks = (parts: any[], hookSetName, normalizer) => {
const disabledReason = (disabledHookReasons[hookSetName] || {})[hookName];
if (disabledReason) {
- console.error(`Hook ${hookSetName}/${hookName} is disabled. Reason: ${disabledReason}`);
- console.error(`The hook function ${hookFnName} from plugin ${part.plugin} ` +
+ logger.error(`Hook ${hookSetName}/${hookName} is disabled. Reason: ${disabledReason}`);
+ logger.error(`The hook function ${hookFnName} from plugin ${part.plugin} ` +
'will never be called, which may cause the plugin to fail');
- console.error(`Please update the ${part.plugin} plugin to not use the ${hookName} hook`);
+ logger.error(`Please update the ${part.plugin} plugin to not use the ${hookName} hook`);
return;
}
let hookFn;
@@ -56,7 +58,7 @@ export const extractHooks = (parts: any[], hookSetName, normalizer) => {
hookFn = loadFn(hookFnName, hookName);
if (!hookFn) throw new Error('Not a function');
} catch (err) {
- console.error(`Failed to load hook function "${hookFnName}" for plugin "${part.plugin}" ` +
+ logger.error(`Failed to load hook function "${hookFnName}" for plugin "${part.plugin}" ` +
`part "${part.name}" hook set "${hookSetName}" hook "${hookName}": ` +
`${err.stack || err}`);
}
diff --git a/src/tests/backend/common.js b/src/tests/backend/common.ts
similarity index 81%
rename from src/tests/backend/common.js
rename to src/tests/backend/common.ts
index 1433597f795..7134a1e6e02 100644
--- a/src/tests/backend/common.js
+++ b/src/tests/backend/common.ts
@@ -1,22 +1,28 @@
'use strict';
-const AttributePool = require('../../static/js/AttributePool');
-const apiHandler = require('../../node/handler/APIHandler');
-const assert = require('assert').strict;
-const io = require('socket.io-client');
-const log4js = require('log4js');
-const {padutils} = require('../../static/js/pad_utils');
-const process = require('process');
-const server = require('../../node/server');
-const setCookieParser = require('set-cookie-parser');
-const settings = require('../../node/utils/Settings');
-const supertest = require('supertest');
-const webaccess = require('../../node/hooks/express/webaccess');
+import {AttributePool} from '../../static/js/AttributePool';
+import {exportedForTestingOnly as aExportedForTestingOnly} from '../../node/handler/APIHandler';
+import assert, {strict} from 'assert'
+import io from 'socket.io-client';
+import log4js from 'log4js';
+import {padutils} from '../../static/js/pad_utils';
+import processA from 'process';
+import {} from '../../node/server';
+import setCookieParser from 'set-cookie-parser';
+import {setCommitRateLimiting, setimportExportRateLimiting, setIp, setPort} from '../../node/utils/Settings';
+import supertest from 'supertest';
+import {authnFailureDelayMs, setauthnFailureDelayMs} from '../../node/hooks/express/webaccess';
+import { before,after } from 'mocha';
+import * as settings from '../../node/utils/Settings';
+import {server} from "../../node/hooks/express";
-const backups = {};
+const backups:{
+ settings?:any,
+ authnFailureDelayMs?:any
+} = {};
let agentPromise = null;
-exports.apiKey = apiHandler.exportedForTestingOnly.apiKey;
+exports.apiKey = aExportedForTestingOnly.apiKey;
exports.agent = null;
exports.baseUrl = null;
exports.httpServer = null;
@@ -27,7 +33,7 @@ const logLevel = logger.level;
// Mocha doesn't monitor unhandled Promise rejections, so convert them to uncaught exceptions.
// https://github.com/mochajs/mocha/issues/2640
-process.on('unhandledRejection', (reason, promise) => { throw reason; });
+processA.on('unhandledRejection', (reason, promise) => { throw reason; });
before(async function () {
this.timeout(60000);
@@ -42,31 +48,29 @@ exports.init = async function () {
if (!logLevel.isLessThanOrEqualTo(log4js.levels.DEBUG)) {
logger.warn('Disabling non-test logging for the duration of the test. ' +
'To enable non-test logging, change the loglevel setting to DEBUG.');
- log4js.setGlobalLogLevel(log4js.levels.OFF);
logger.setLevel(logLevel);
}
// Note: This is only a shallow backup.
backups.settings = Object.assign({}, settings);
// Start the Etherpad server on a random unused port.
- settings.port = 0;
- settings.ip = 'localhost';
- settings.importExportRateLimiting = {max: 0};
- settings.commitRateLimiting = {duration: 0.001, points: 1e6};
+ setPort(0)
+ setIp('localhost')
+ setimportExportRateLimiting({max: 0})
+ setCommitRateLimiting({duration: 0.001, points: 1e6});
exports.httpServer = await server.start();
exports.baseUrl = `http://localhost:${exports.httpServer.address().port}`;
logger.debug(`HTTP server at ${exports.baseUrl}`);
// Create a supertest user agent for the HTTP server.
exports.agent = supertest(exports.baseUrl);
// Speed up authn tests.
- backups.authnFailureDelayMs = webaccess.authnFailureDelayMs;
- webaccess.authnFailureDelayMs = 0;
+ backups.authnFailureDelayMs = authnFailureDelayMs;
+ setauthnFailureDelayMs(0)
after(async function () {
- webaccess.authnFailureDelayMs = backups.authnFailureDelayMs;
+ setauthnFailureDelayMs(backups.authnFailureDelayMs);
// Note: This does not unset settings that were added.
Object.assign(settings, backups.settings);
- log4js.setGlobalLogLevel(logLevel);
await server.exit();
});
@@ -93,7 +97,7 @@ exports.waitForSocketEvent = async (socket, event) => {
const handlers = new Map();
let cancelTimeout;
try {
- const timeoutP = new Promise((resolve, reject) => {
+ const timeoutP = new Promise((resolve, reject) => {
const timeout = setTimeout(() => {
reject(new Error(`timed out waiting for ${event} event`));
cancelTimeout = () => {};
@@ -139,9 +143,11 @@ exports.waitForSocketEvent = async (socket, event) => {
*/
exports.connect = async (res = null) => {
// Convert the `set-cookie` header(s) into a `cookie` header.
- const resCookies = (res == null) ? {} : setCookieParser.parse(res, {map: true});
- const reqCookieHdr = Object.entries(resCookies).map(
- ([name, cookie]) => `${name}=${encodeURIComponent(cookie.value)}`).join('; ');
+ const resCookies:{
+ [key:string]:{value:string}
+ } = (res == null) ? {} : setCookieParser.parse(res, {map: true});
+ const reqCookieHdr = Object.entries(resCookies)
+ .map(([name, cookie]) => `${name}=${encodeURIComponent(cookie.value)}`).join('; ');
logger.debug('socket.io connecting...');
let padId = null;
@@ -191,7 +197,7 @@ exports.handshake = async (socket, padId, token = padutils.generateAuthorToken()
/**
* Convenience wrapper around `socket.send()` that waits for acknowledgement.
*/
-exports.sendMessage = async (socket, message) => await new Promise((resolve, reject) => {
+exports.sendMessage = async (socket, message) => await new Promise((resolve, reject) => {
socket.send(message, (errInfo) => {
if (errInfo != null) {
const {name, message} = errInfo;
From 8ddac2db45da1a8d6cc6208fef2a7d5dd93cc5b7 Mon Sep 17 00:00:00 2001
From: SamTV12345 <40429738+samtv12345@users.noreply.github.com>
Date: Tue, 4 Jul 2023 21:57:11 +0200
Subject: [PATCH 09/11] Added rollup config.
---
src/bin/buildDebian.sh | 0
src/bin/buildForWindows.sh | 0
src/bin/cleanRun.sh | 0
src/bin/createRelease.sh | 0
src/bin/deb-src/DEBIAN/postinst | 0
src/bin/deb-src/DEBIAN/preinst | 0
src/bin/deb-src/DEBIAN/prerm | 0
src/bin/debugRun.sh | 0
src/bin/etherpad-healthcheck | 0
src/bin/fastRun.sh | 0
src/bin/installDeps.sh | 0
src/bin/nsis/brand.ico | Bin 4286 -> 0 bytes
src/bin/plugins/README.md | 0
src/bin/plugins/checkPlugin.js | 0
src/bin/plugins/getCorePlugins.sh | 0
src/bin/plugins/lib/README.md | 0
src/bin/plugins/lib/gitignore | 0
src/bin/plugins/listOfficialPlugins | 0
src/bin/plugins/reTestAllPlugins.sh | 0
src/bin/plugins/updateAllPluginsScript.sh | 0
src/bin/plugins/updateCorePlugins.sh | 0
src/bin/run.sh | 0
src/bin/safeRun.sh | 0
src/bin/updatePlugins.sh | 0
src/node/db/DB.ts | 4 +-
src/node/server.ts | 19 +-
src/node/utils/Settings.ts | 2 +-
src/node/utils/run_cmd.ts | 2 +
src/package-lock.json | 21796 +++++-----------
src/package.json | 8 +-
src/rollup.config.js | 28 +
src/static/favicon.ico | Bin 660 -> 0 bytes
src/static/font/Aleygreya-ExtraBold.woff | Bin 32372 -> 0 bytes
src/static/font/Aleygreya-ExtraBold.woff2 | Bin 27160 -> 0 bytes
src/static/font/Aleygreya-Medium.woff | Bin 32320 -> 0 bytes
src/static/font/Aleygreya-Medium.woff2 | Bin 27080 -> 0 bytes
src/static/font/Montserrat-Light.otf | Bin 91496 -> 0 bytes
src/static/font/Montserrat-Regular.otf | Bin 93516 -> 0 bytes
src/static/font/Quicksand-Bold.ttf | Bin 77032 -> 0 bytes
src/static/font/Quicksand-Medium.ttf | Bin 77460 -> 0 bytes
src/static/font/Quicksand-Regular.ttf | Bin 77416 -> 0 bytes
src/static/font/Roboto-Bold.ttf | Bin 170348 -> 0 bytes
src/static/font/Roboto-Regular.ttf | Bin 171272 -> 0 bytes
src/static/font/RobotoMono-Bold.ttf | Bin 114752 -> 0 bytes
src/static/font/RobotoMono-Regular.ttf | Bin 114624 -> 0 bytes
src/static/font/fontawesome-etherpad.eot | Bin 28012 -> 0 bytes
src/static/font/fontawesome-etherpad.ttf | Bin 27796 -> 0 bytes
src/static/font/fontawesome-etherpad.woff | Bin 15672 -> 0 bytes
src/static/font/fontawesome-etherpad.woff2 | Bin 13148 -> 0 bytes
src/static/font/opendyslexic.otf | Bin 48076 -> 0 bytes
src/static/img/brand.svg | 0
src/static/js/admin/jquery.autosize.js | 278 +-
src/static/skins/colibris/images/fond.jpg | Bin 186909 -> 0 bytes
.../skins/colibris/images/screenshot.png | Bin 97715 -> 0 bytes
src/tests/backend/specs/api/image.png | Bin 363673 -> 0 bytes
src/tests/backend/specs/api/test.doc | Bin 26624 -> 0 bytes
src/tests/backend/specs/api/test.docx | Bin 4205 -> 0 bytes
src/tests/backend/specs/api/test.odt | Bin 8403 -> 0 bytes
src/tests/backend/specs/api/test.pdf | Bin 13264 -> 0 bytes
.../backend/specs/favicon-test-custom.png | Bin 635 -> 0 bytes
src/tests/backend/specs/favicon-test-skin.png | Bin 419 -> 0 bytes
.../frontend/specs/admintroubleshooting.js | 0
.../frontend/specs/adminupdateplugins.js | 0
...ultiple_authors_clear_authorship_colors.js | 0
src/tests/frontend/specs/scrollTo.js | 0
src/tests/frontend/travis/adminrunner.sh | 0
src/tests/frontend/travis/runner.sh | 0
src/tests/frontend/travis/runnerBackend.sh | 0
src/tests/frontend/travis/runnerLoadTest.sh | 0
src/tests/ratelimit/testlimits.sh | 0
src/tsconfig.json | 3 +-
start.bat | 22 +-
72 files changed, 6247 insertions(+), 15915 deletions(-)
mode change 100755 => 100644 src/bin/buildDebian.sh
mode change 100755 => 100644 src/bin/buildForWindows.sh
mode change 100755 => 100644 src/bin/cleanRun.sh
mode change 100755 => 100644 src/bin/createRelease.sh
mode change 100755 => 100644 src/bin/deb-src/DEBIAN/postinst
mode change 100755 => 100644 src/bin/deb-src/DEBIAN/preinst
mode change 100755 => 100644 src/bin/deb-src/DEBIAN/prerm
mode change 100755 => 100644 src/bin/debugRun.sh
mode change 100755 => 100644 src/bin/etherpad-healthcheck
mode change 100755 => 100644 src/bin/fastRun.sh
mode change 100755 => 100644 src/bin/installDeps.sh
mode change 100755 => 100644 src/bin/plugins/README.md
mode change 100755 => 100644 src/bin/plugins/checkPlugin.js
mode change 100755 => 100644 src/bin/plugins/getCorePlugins.sh
mode change 100755 => 100644 src/bin/plugins/lib/README.md
mode change 100755 => 100644 src/bin/plugins/lib/gitignore
mode change 100755 => 100644 src/bin/plugins/listOfficialPlugins
mode change 100755 => 100644 src/bin/plugins/reTestAllPlugins.sh
mode change 100755 => 100644 src/bin/plugins/updateAllPluginsScript.sh
mode change 100755 => 100644 src/bin/plugins/updateCorePlugins.sh
mode change 100755 => 100644 src/bin/run.sh
mode change 100755 => 100644 src/bin/safeRun.sh
mode change 100755 => 100644 src/bin/updatePlugins.sh
create mode 100644 src/rollup.config.js
mode change 100755 => 100644 src/static/img/brand.svg
mode change 100755 => 100644 src/tests/frontend/specs/admintroubleshooting.js
mode change 100755 => 100644 src/tests/frontend/specs/adminupdateplugins.js
mode change 100755 => 100644 src/tests/frontend/specs/multiple_authors_clear_authorship_colors.js
mode change 100755 => 100644 src/tests/frontend/specs/scrollTo.js
mode change 100755 => 100644 src/tests/frontend/travis/adminrunner.sh
mode change 100755 => 100644 src/tests/frontend/travis/runner.sh
mode change 100755 => 100644 src/tests/frontend/travis/runnerBackend.sh
mode change 100755 => 100644 src/tests/frontend/travis/runnerLoadTest.sh
mode change 100755 => 100644 src/tests/ratelimit/testlimits.sh
diff --git a/src/bin/buildDebian.sh b/src/bin/buildDebian.sh
old mode 100755
new mode 100644
diff --git a/src/bin/buildForWindows.sh b/src/bin/buildForWindows.sh
old mode 100755
new mode 100644
diff --git a/src/bin/cleanRun.sh b/src/bin/cleanRun.sh
old mode 100755
new mode 100644
diff --git a/src/bin/createRelease.sh b/src/bin/createRelease.sh
old mode 100755
new mode 100644
diff --git a/src/bin/deb-src/DEBIAN/postinst b/src/bin/deb-src/DEBIAN/postinst
old mode 100755
new mode 100644
diff --git a/src/bin/deb-src/DEBIAN/preinst b/src/bin/deb-src/DEBIAN/preinst
old mode 100755
new mode 100644
diff --git a/src/bin/deb-src/DEBIAN/prerm b/src/bin/deb-src/DEBIAN/prerm
old mode 100755
new mode 100644
diff --git a/src/bin/debugRun.sh b/src/bin/debugRun.sh
old mode 100755
new mode 100644
diff --git a/src/bin/etherpad-healthcheck b/src/bin/etherpad-healthcheck
old mode 100755
new mode 100644
diff --git a/src/bin/fastRun.sh b/src/bin/fastRun.sh
old mode 100755
new mode 100644
diff --git a/src/bin/installDeps.sh b/src/bin/installDeps.sh
old mode 100755
new mode 100644
diff --git a/src/bin/nsis/brand.ico b/src/bin/nsis/brand.ico
index cb7d6a01979f6a117a77b07a18366948eb5bc986..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
GIT binary patch
literal 0
HcmV?d00001
literal 4286
zcmeHL%WlFj5On{br=F2|>8an)&+Tu(0VH061Emlk2||P*AS6I|v-KDm^^k`nm9_^j
z8Z5kVc6Vmi2N-+cpInaNo4r3W_QV)_;ow{BjRX6_xbOM(it7erq)juR8Tc0roX=-k
zuh+C(E@QFTZ0K^i+$G=DYDKkLjY_3bEEk)`hPVK1KA%&&{Xs$CCms1wpX<6b8jVB_sK>S~
zGEGxS2dNoq%!PV`Hw)e=2`KFET>U~sE(JRZ|<
zI25|?_j~GeKKVR(sqvvbdcRO8WI{flr)INB$Kz4NfbNoW^nzh@X*Qds#>cEcKg+T*
z13fDZ@33uK)Q_CH-Hzx*>A&ZSK7ba}=~RRX!%*lCZhylN7xAGx3|ydosZCN2&=N3o47k8t)AF-nMTz4Yfi7RHMTCGyKTvi6^i!$_*Wtr6L^+?WU)N|kW@ErOE
q^Q!{z41J>v@xf)BKkAI!!#$)5c}B0A0nLDBKr@hy0r@|`U#(v+aH~lG
diff --git a/src/bin/plugins/README.md b/src/bin/plugins/README.md
old mode 100755
new mode 100644
diff --git a/src/bin/plugins/checkPlugin.js b/src/bin/plugins/checkPlugin.js
old mode 100755
new mode 100644
diff --git a/src/bin/plugins/getCorePlugins.sh b/src/bin/plugins/getCorePlugins.sh
old mode 100755
new mode 100644
diff --git a/src/bin/plugins/lib/README.md b/src/bin/plugins/lib/README.md
old mode 100755
new mode 100644
diff --git a/src/bin/plugins/lib/gitignore b/src/bin/plugins/lib/gitignore
old mode 100755
new mode 100644
diff --git a/src/bin/plugins/listOfficialPlugins b/src/bin/plugins/listOfficialPlugins
old mode 100755
new mode 100644
diff --git a/src/bin/plugins/reTestAllPlugins.sh b/src/bin/plugins/reTestAllPlugins.sh
old mode 100755
new mode 100644
diff --git a/src/bin/plugins/updateAllPluginsScript.sh b/src/bin/plugins/updateAllPluginsScript.sh
old mode 100755
new mode 100644
diff --git a/src/bin/plugins/updateCorePlugins.sh b/src/bin/plugins/updateCorePlugins.sh
old mode 100755
new mode 100644
diff --git a/src/bin/run.sh b/src/bin/run.sh
old mode 100755
new mode 100644
diff --git a/src/bin/safeRun.sh b/src/bin/safeRun.sh
old mode 100755
new mode 100644
diff --git a/src/bin/updatePlugins.sh b/src/bin/updatePlugins.sh
old mode 100755
new mode 100644
diff --git a/src/node/db/DB.ts b/src/node/db/DB.ts
index 9d1379fe815..563ba5ec57d 100644
--- a/src/node/db/DB.ts
+++ b/src/node/db/DB.ts
@@ -21,7 +21,7 @@
* limitations under the License.
*/
-import ueberDB from 'ueberdb2';
+import {Database} from 'ueberdb2';
import {dbSettings, dbType} from '../utils/Settings';
import log4js from 'log4js';
import {shutdown as statsShutdown,createCollection} from '../stats';
@@ -37,7 +37,7 @@ let db = null;
* Initializes the database with the settings provided by the settings module
*/
const init = async () => {
- db = new ueberDB.Database(dbType, dbSettings, null, logger);
+ db = new Database(dbType, dbSettings, null, logger);
await db.init();
if (db.metrics != null) {
for (const [metric, value] of Object.entries(db.metrics)) {
diff --git a/src/node/server.ts b/src/node/server.ts
index ed572effe80..3546e458423 100644
--- a/src/node/server.ts
+++ b/src/node/server.ts
@@ -34,6 +34,12 @@ import {checkDeprecationStatus, enforceMinNodeVersion} from './utils/NodeVersion
import {Gate} from './utils/promises';
import * as UpdateCheck from "./utils/UpdateCheck";
import {Plugin} from "./models/Plugin";
+import {db} from './db/DB'
+import {createServer, server} from './hooks/express';
+import {aCallAll} from '../static/js/pluginfw/hooks'
+import * as pluginDefs from '../static/js/pluginfw/plugin_defs'
+import * as plugins from "../static/js/pluginfw/plugins";
+import {createCollection} from "./stats";
let wtfnode;
if (settings.dumpOnUncleanExit) {
@@ -45,13 +51,6 @@ if (settings.dumpOnUncleanExit) {
enforceMinNodeVersion('12.17.0');
checkDeprecationStatus('12.17.0', '1.9.0');
-import db = require('./db/DB');
-import {} from './db/DB'
-import {createServer, server} from './hooks/express';
-import hooks = require('../static/js/pluginfw/hooks');
-import pluginDefs = require('../static/js/pluginfw/plugin_defs');
-import plugins = require('../static/js/pluginfw/plugins');
-import {createCollection} from "./stats";
const logger = log4js.getLogger('server');
console.log = logger.info.bind(logger); // do the same for others - console.debug, etc.
@@ -149,8 +148,8 @@ export const start = async () => {
logger.info(`Installed plugins: ${installedPlugins}`);
logger.debug(`Installed parts:\n${plugins.formatParts()}`);
logger.debug(`Installed server-side hooks:\n${plugins.formatHooks('hooks', false)}`);
- await hooks.aCallAll('loadSettings', {settings});
- await hooks.aCallAll(createServer());
+ await aCallAll('loadSettings', {settings});
+ await aCallAll(createServer());
} catch (err) {
logger.error('Error occurred while starting Etherpad');
state = State.STATE_TRANSITION_FAILED;
@@ -191,7 +190,7 @@ export const stop = async () => {
try {
let timeout = null;
await Promise.race([
- hooks.aCallAll('shutdown'),
+ aCallAll('shutdown'),
new Promise((resolve, reject) => {
timeout = setTimeout(() => reject(new Error('Timed out waiting for shutdown tasks')), 3000);
}),
diff --git a/src/node/utils/Settings.ts b/src/node/utils/Settings.ts
index 0bf766339d5..e785160143a 100644
--- a/src/node/utils/Settings.ts
+++ b/src/node/utils/Settings.ts
@@ -30,7 +30,7 @@
import exp from "constants";
// FIXME Is there a better way to enter dynamic package.json path
// @ts-ignore
-import packageJSON from '../../../package.json'
+import packageJSON from '../../package.json'
import {findEtherpadRoot, makeAbsolute, isSubdir} from './AbsolutePaths';
import deepEqual from 'fast-deep-equal/es6';
import fs from 'fs';
diff --git a/src/node/utils/run_cmd.ts b/src/node/utils/run_cmd.ts
index 3738d48a9ae..a4ee806fe92 100644
--- a/src/node/utils/run_cmd.ts
+++ b/src/node/utils/run_cmd.ts
@@ -145,7 +145,9 @@ const run_cmd = (args, opts:RunOpts = {
let px;
const p = new Promise((resolve, reject) => { px = {resolve, reject}; });
+ // @ts-ignore
[, p.stdout, p.stderr] = streams;
+ // @ts-ignore
p.child = proc;
const stdioStringPromises = [undefined, Promise.resolve(), Promise.resolve()];
diff --git a/src/package-lock.json b/src/package-lock.json
index b7097618475..cc672c317c2 100644
--- a/src/package-lock.json
+++ b/src/package-lock.json
@@ -1,380 +1,145 @@
{
"name": "ep_etherpad-lite",
"version": "1.9.0",
- "lockfileVersion": 3,
+ "lockfileVersion": 1,
"requires": true,
- "packages": {
- "": {
- "name": "ep_etherpad-lite",
- "version": "1.9.0",
- "license": "Apache-2.0",
- "dependencies": {
- "async": "^3.2.2",
- "cjstoesm": "^2.1.2",
- "clean-css": "^5.3.2",
- "cookie-parser": "^1.4.6",
- "cross-spawn": "^7.0.3",
- "ejs": "^3.1.7",
- "etherpad-require-kernel": "^1.0.15",
- "etherpad-yajsml": "0.0.12",
- "express": "4.18.2",
- "express-rate-limit": "^6.7.0",
- "express-session": "npm:@etherpad/express-session@^1.18.1",
- "fast-deep-equal": "^3.1.3",
- "find-root": "1.1.0",
- "formidable": "^2.1.2",
- "http-errors": "^2.0.0",
- "js-cookie": "^3.0.5",
- "jsdom": "^19.0.0",
- "jsonminify": "0.4.2",
- "languages4translatewiki": "0.1.3",
- "lodash.clonedeep": "4.5.0",
- "log4js": "^6.9.1",
- "measured-core": "^2.0.0",
- "mime-types": "^2.1.35",
- "openapi-backend": "^5.9.2",
- "proxy-addr": "^2.0.7",
- "rate-limiter-flexible": "^2.4.1",
- "rehype": "^12.0.1",
- "rehype-minify-whitespace": "^5.0.1",
- "request": "2.88.2",
- "resolve": "1.22.2",
- "security": "^1.0.0",
- "semver": "^7.5.2",
- "socket.io": "^2.4.1",
- "superagent": "^8.0.9",
- "terser": "^5.16.5",
- "threads": "^1.7.0",
- "tinycon": "0.6.8",
- "ueberdb2": "^4.0.1",
- "underscore": "1.13.3",
- "unorm": "1.6.0",
- "wtfnode": "^0.9.1"
- },
- "bin": {
- "etherpad": "node/server.js",
- "etherpad-healthcheck": "bin/etherpad-healthcheck",
- "etherpad-lite": "node/server.js"
- },
- "devDependencies": {
- "@babel/cli": "^7.22.5",
- "@babel/core": "^7.22.5",
- "@babel/preset-env": "^7.22.5",
- "@babel/register": "^7.22.5",
- "@types/cross-spawn": "^6.0.2",
- "@types/express": "4.17.17",
- "@types/jquery": "^3.5.16",
- "@types/js-cookie": "^3.0.3",
- "@types/node": "^20.3.1",
- "@types/underscore": "^1.11.5",
- "concurrently": "^8.2.0",
- "eslint": "^8.14.0",
- "eslint-config-etherpad": "^3.0.13",
- "etherpad-cli-client": "^2.0.1",
- "i18next": "^23.2.3",
- "i18next-fs-backend": "^2.1.5",
- "mocha": "^9.2.2",
- "mocha-froth": "^0.2.10",
- "nodeify": "^1.0.1",
- "nodemon": "^2.0.22",
- "openapi-schema-validation": "^0.4.2",
- "selenium-webdriver": "^4.10.0",
- "set-cookie-parser": "^2.4.8",
- "sinon": "^13.0.2",
- "split-grid": "^1.0.11",
- "supertest": "^6.3.3",
- "typescript": "^4.9.5"
- },
- "engines": {
- "node": ">=14.15.0",
- "npm": ">=6.14.0"
- }
+ "dependencies": {
+ "@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "dev": true
},
- "node_modules/@ampproject/remapping": {
+ "@ampproject/remapping": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
"integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
}
},
- "node_modules/@apidevtools/json-schema-ref-parser": {
+ "@apidevtools/json-schema-ref-parser": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-10.1.0.tgz",
"integrity": "sha512-3e+viyMuXdrcK8v5pvP+SDoAQ77FH6OyRmuK48SZKmdHJRFm87RsSs8qm6kP39a/pOPURByJw+OXzQIqcfmKtA==",
- "dependencies": {
+ "requires": {
"@jsdevtools/ono": "^7.1.3",
"@types/json-schema": "^7.0.11",
"@types/lodash.clonedeep": "^4.5.7",
"js-yaml": "^4.1.0",
"lodash.clonedeep": "^4.5.0"
- },
- "engines": {
- "node": ">= 16"
- },
- "funding": {
- "url": "https://github.com/sponsors/philsturgeon"
}
},
- "node_modules/@apidevtools/json-schema-ref-parser/node_modules/@types/json-schema": {
- "version": "7.0.12",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
- "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA=="
- },
- "node_modules/@azure/abort-controller": {
+ "@azure/abort-controller": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz",
"integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==",
- "dependencies": {
+ "requires": {
"tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/@azure/core-asynciterator-polyfill": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@azure/core-asynciterator-polyfill/-/core-asynciterator-polyfill-1.0.2.tgz",
- "integrity": "sha512-3rkP4LnnlWawl0LZptJOdXNrT/fHp2eQMadoasa6afspXdpGrtPZuAQc2PD0cpgyuoXtUWyC3tv7xfntjGS5Dw==",
- "engines": {
- "node": ">=12.0.0"
}
},
- "node_modules/@azure/core-auth": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.3.2.tgz",
- "integrity": "sha512-7CU6DmCHIZp5ZPiZ9r3J17lTKMmYsm/zGvNkjArQwPkrLlZ1TZ+EUYfGgh2X31OLMVAQCTJZW4cXHJi02EbJnA==",
- "dependencies": {
+ "@azure/core-auth": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.4.0.tgz",
+ "integrity": "sha512-HFrcTgmuSuukRf/EdPmqBrc5l6Q5Uu+2TbuhaKbgaCpP2TfAeiNaQPAadxO+CYBRHGUzIDteMAjFspFLDLnKVQ==",
+ "requires": {
"@azure/abort-controller": "^1.0.0",
"tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=12.0.0"
}
},
- "node_modules/@azure/core-client": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.6.0.tgz",
- "integrity": "sha512-YhSf4cb61ApSjItscp9XoaLq8KRnacPDAhmjAZSMnn/gs6FhFbZNfOBOErG2dDj7JRknVtCmJ5mLmfR2sLa11A==",
- "dependencies": {
+ "@azure/core-client": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.7.3.tgz",
+ "integrity": "sha512-kleJ1iUTxcO32Y06dH9Pfi9K4U+Tlb111WXEnbt7R/ne+NLRwppZiTGJuTD5VVoxTMK5NTbEtm5t2vcdNCFe2g==",
+ "requires": {
"@azure/abort-controller": "^1.0.0",
- "@azure/core-auth": "^1.3.0",
- "@azure/core-rest-pipeline": "^1.5.0",
+ "@azure/core-auth": "^1.4.0",
+ "@azure/core-rest-pipeline": "^1.9.1",
"@azure/core-tracing": "^1.0.0",
"@azure/core-util": "^1.0.0",
"@azure/logger": "^1.0.0",
"tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/@azure/core-client/node_modules/@azure/core-tracing": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz",
- "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==",
- "dependencies": {
- "tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/@azure/core-http": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-2.3.2.tgz",
- "integrity": "sha512-Z4dfbglV9kNZO177CNx4bo5ekFuYwwsvjLiKdZI4r84bYGv3irrbQz7JC3/rUfFH2l4T/W6OFleJaa2X0IaQqw==",
- "dependencies": {
- "@azure/abort-controller": "^1.0.0",
- "@azure/core-auth": "^1.3.0",
- "@azure/core-tracing": "1.0.0-preview.13",
- "@azure/core-util": "^1.1.1",
- "@azure/logger": "^1.0.0",
- "@types/node-fetch": "^2.5.0",
- "@types/tunnel": "^0.0.3",
- "form-data": "^4.0.0",
- "node-fetch": "^2.6.7",
- "process": "^0.11.10",
- "tough-cookie": "^4.0.0",
- "tslib": "^2.2.0",
- "tunnel": "^0.0.6",
- "uuid": "^8.3.0",
- "xml2js": "^0.5.0"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@azure/core-http/node_modules/@azure/core-util": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.3.2.tgz",
- "integrity": "sha512-2bECOUh88RvL1pMZTcc6OzfobBeWDBf5oBbhjIhT1MV9otMVWCzpOJkkiKtrnO88y5GGBelgY8At73KGAdbkeQ==",
- "dependencies": {
- "@azure/abort-controller": "^1.0.0",
- "tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@azure/core-http/node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "bin": {
- "uuid": "dist/bin/uuid"
}
},
- "node_modules/@azure/core-lro": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.2.4.tgz",
- "integrity": "sha512-e1I2v2CZM0mQo8+RSix0x091Av493e4bnT22ds2fcQGslTHzM2oTbswkB65nP4iEpCxBrFxOSDPKExmTmjCVtQ==",
- "dependencies": {
+ "@azure/core-http-compat": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-1.3.0.tgz",
+ "integrity": "sha512-ZN9avruqbQ5TxopzG3ih3KRy52n8OAbitX3fnZT5go4hzu0J+KVPSzkL+Wt3hpJpdG8WIfg1sBD1tWkgUdEpBA==",
+ "requires": {
+ "@azure/abort-controller": "^1.0.4",
+ "@azure/core-client": "^1.3.0",
+ "@azure/core-rest-pipeline": "^1.3.0"
+ }
+ },
+ "@azure/core-lro": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.5.3.tgz",
+ "integrity": "sha512-ubkOf2YCnVtq7KqEJQqAI8dDD5rH1M6OP5kW0KO/JQyTaxLA0N0pjFWvvaysCj9eHMNBcuuoZXhhl0ypjod2DA==",
+ "requires": {
"@azure/abort-controller": "^1.0.0",
- "@azure/core-tracing": "1.0.0-preview.13",
+ "@azure/core-util": "^1.2.0",
"@azure/logger": "^1.0.0",
"tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=12.0.0"
}
},
- "node_modules/@azure/core-paging": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.2.1.tgz",
- "integrity": "sha512-UtH5iMlYsvg+nQYIl4UHlvvSrsBjOlRF4fs0j7mxd3rWdAStrKYrh2durOpHs5C9yZbVhsVDaisoyaf/lL1EVA==",
- "dependencies": {
- "@azure/core-asynciterator-polyfill": "^1.0.0",
+ "@azure/core-paging": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.5.0.tgz",
+ "integrity": "sha512-zqWdVIt+2Z+3wqxEOGzR5hXFZ8MGKK52x4vFLw8n58pR6ZfKRx3EXYTxTaYxYHc/PexPUTyimcTWFJbji9Z6Iw==",
+ "requires": {
"tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=12.0.0"
}
},
- "node_modules/@azure/core-rest-pipeline": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.8.1.tgz",
- "integrity": "sha512-R/XpxZcDgGbnneEifnsAcjLoR2NCmlDxKDmzd8oi5jx5YEnPE6gsxHQWAk2+uY55Ka717x/fdctyoCYKnumrqw==",
- "dependencies": {
+ "@azure/core-rest-pipeline": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.11.0.tgz",
+ "integrity": "sha512-nB4KXl6qAyJmBVLWA7SakT4tzpYZTCk4pvRBeI+Ye0WYSOrlTqlMhc4MSS/8atD3ufeYWdkN380LLoXlUUzThw==",
+ "requires": {
"@azure/abort-controller": "^1.0.0",
- "@azure/core-auth": "^1.3.0",
+ "@azure/core-auth": "^1.4.0",
"@azure/core-tracing": "^1.0.1",
- "@azure/core-util": "^1.0.0",
+ "@azure/core-util": "^1.3.0",
"@azure/logger": "^1.0.0",
"form-data": "^4.0.0",
- "http-proxy-agent": "^4.0.1",
+ "http-proxy-agent": "^5.0.0",
"https-proxy-agent": "^5.0.0",
- "tslib": "^2.2.0",
- "uuid": "^8.3.0"
- },
- "engines": {
- "node": ">=12.0.0"
+ "tslib": "^2.2.0"
}
},
- "node_modules/@azure/core-rest-pipeline/node_modules/@azure/core-tracing": {
+ "@azure/core-tracing": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz",
"integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==",
- "dependencies": {
- "tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/@azure/core-rest-pipeline/node_modules/@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/@azure/core-rest-pipeline/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@azure/core-rest-pipeline/node_modules/http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
- "dependencies": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/@azure/core-rest-pipeline/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/@azure/core-rest-pipeline/node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/@azure/core-tracing": {
- "version": "1.0.0-preview.13",
- "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz",
- "integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==",
- "dependencies": {
- "@opentelemetry/api": "^1.0.1",
+ "requires": {
"tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=12.0.0"
}
},
- "node_modules/@azure/core-util": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.0.0.tgz",
- "integrity": "sha512-yWshY9cdPthlebnb3Zuz/j0Lv4kjU6u7PR5sW7A9FF7EX+0irMRJAtyTq5TPiDHJfjH8gTSlnIYFj9m7Ed76IQ==",
- "dependencies": {
+ "@azure/core-util": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.3.2.tgz",
+ "integrity": "sha512-2bECOUh88RvL1pMZTcc6OzfobBeWDBf5oBbhjIhT1MV9otMVWCzpOJkkiKtrnO88y5GGBelgY8At73KGAdbkeQ==",
+ "requires": {
+ "@azure/abort-controller": "^1.0.0",
"tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=12.0.0"
}
},
- "node_modules/@azure/identity": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-2.0.4.tgz",
- "integrity": "sha512-ZgFubAsmo7dji63NLPaot6O7pmDfceAUPY57uphSCr0hmRj+Cakqb4SUz5SohCHFtscrhcmejRU903Fowz6iXg==",
- "dependencies": {
+ "@azure/identity": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-2.1.0.tgz",
+ "integrity": "sha512-BPDz1sK7Ul9t0l9YKLEa8PHqWU4iCfhGJ+ELJl6c8CP3TpJt2urNCbm0ZHsthmxRsYoMPbz2Dvzj30zXZVmAFw==",
+ "requires": {
"@azure/abort-controller": "^1.0.0",
"@azure/core-auth": "^1.3.0",
"@azure/core-client": "^1.4.0",
"@azure/core-rest-pipeline": "^1.1.0",
- "@azure/core-tracing": "1.0.0-preview.13",
- "@azure/core-util": "^1.0.0-beta.1",
+ "@azure/core-tracing": "^1.0.0",
+ "@azure/core-util": "^1.0.0",
"@azure/logger": "^1.0.0",
- "@azure/msal-browser": "^2.16.0",
- "@azure/msal-common": "^4.5.1",
- "@azure/msal-node": "^1.3.0",
+ "@azure/msal-browser": "^2.26.0",
+ "@azure/msal-common": "^7.0.0",
+ "@azure/msal-node": "^1.10.0",
"events": "^3.0.0",
"jws": "^4.0.0",
"open": "^8.0.0",
@@ -382,572 +147,312 @@
"tslib": "^2.2.0",
"uuid": "^8.3.0"
},
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/@azure/identity/node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "bin": {
- "uuid": "dist/bin/uuid"
+ "dependencies": {
+ "uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+ }
}
},
- "node_modules/@azure/keyvault-keys": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@azure/keyvault-keys/-/keyvault-keys-4.4.0.tgz",
- "integrity": "sha512-W9sPZebXYa3aar7BGIA+fAsq/sy1nf2TZAETbkv7DRawzVLrWv8QoVVceqNHjy3cigT4HNxXjaPYCI49ez5CUA==",
- "dependencies": {
+ "@azure/keyvault-keys": {
+ "version": "4.7.1",
+ "resolved": "https://registry.npmjs.org/@azure/keyvault-keys/-/keyvault-keys-4.7.1.tgz",
+ "integrity": "sha512-zfmlZQCw1Yz+aPhgZmWOYBUzaKmfBzR2yceAE4S6hKDl7YZraTguuXmtFbCqjRvpz+pIMKAK25fENay9mFy1hQ==",
+ "requires": {
"@azure/abort-controller": "^1.0.0",
- "@azure/core-http": "^2.0.0",
+ "@azure/core-auth": "^1.3.0",
+ "@azure/core-client": "^1.5.0",
+ "@azure/core-http-compat": "^1.3.0",
"@azure/core-lro": "^2.2.0",
"@azure/core-paging": "^1.1.1",
- "@azure/core-tracing": "1.0.0-preview.13",
+ "@azure/core-rest-pipeline": "^1.8.0",
+ "@azure/core-tracing": "^1.0.0",
+ "@azure/core-util": "^1.0.0",
"@azure/logger": "^1.0.0",
"tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=12.0.0"
}
},
- "node_modules/@azure/logger": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.3.tgz",
- "integrity": "sha512-aK4s3Xxjrx3daZr3VylxejK3vG5ExXck5WOHDJ8in/k9AqlfIyFMMT1uG7u8mNjX+QRILTIn0/Xgschfh/dQ9g==",
- "dependencies": {
+ "@azure/logger": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.4.tgz",
+ "integrity": "sha512-ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg==",
+ "requires": {
"tslib": "^2.2.0"
+ }
+ },
+ "@azure/msal-browser": {
+ "version": "2.37.1",
+ "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.37.1.tgz",
+ "integrity": "sha512-EoKQISEpIY39Ru1OpWkeFZBcwp6Y0bG81bVmdyy4QJebPPDdVzfm62PSU0XFIRc3bqjZ4PBKBLMYLuo9NZYAow==",
+ "requires": {
+ "@azure/msal-common": "13.1.0"
},
- "engines": {
- "node": ">=12.0.0"
+ "dependencies": {
+ "@azure/msal-common": {
+ "version": "13.1.0",
+ "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.1.0.tgz",
+ "integrity": "sha512-wj+ULrRB0HTuMmtrMjg8j3guCx32GE2BCPbsMCZkHgL1BZetC3o/Su5UJEQMX1HNc9CrIaQNx5WaKWHygYDe0g=="
+ }
}
},
- "node_modules/@azure/ms-rest-azure-env": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@azure/ms-rest-azure-env/-/ms-rest-azure-env-2.0.0.tgz",
- "integrity": "sha512-dG76W7ElfLi+fbTjnZVGj+M9e0BIEJmRxU6fHaUQ12bZBe8EJKYb2GV50YWNaP2uJiVQ5+7nXEVj1VN1UQtaEw==",
- "dev": true,
- "peer": true
+ "@azure/msal-common": {
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-7.6.0.tgz",
+ "integrity": "sha512-XqfbglUTVLdkHQ8F9UQJtKseRr3sSnr9ysboxtoswvaMVaEfvyLtMoHv9XdKUfOc0qKGzNgRFd9yRjIWVepl6Q=="
},
- "node_modules/@azure/ms-rest-js": {
- "version": "2.6.6",
- "resolved": "https://registry.npmjs.org/@azure/ms-rest-js/-/ms-rest-js-2.6.6.tgz",
- "integrity": "sha512-WYIda8VvrkZE68xHgOxUXvjThxNf1nnGPPe0rAljqK5HJHIZ12Pi3YhEDOn3Ge7UnwaaM3eFO0VtAy4nGVI27Q==",
- "dev": true,
- "peer": true,
+ "@azure/msal-node": {
+ "version": "1.17.3",
+ "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.17.3.tgz",
+ "integrity": "sha512-slsa+388bQQWnWH1V91KL+zV57rIp/0OQFfF0EmVMY8gnEIkAnpWWFUVBTTMbxEyjEFMk5ZW9xiHvHBcYFHzDw==",
+ "requires": {
+ "@azure/msal-common": "13.1.0",
+ "jsonwebtoken": "^9.0.0",
+ "uuid": "^8.3.0"
+ },
"dependencies": {
- "@azure/core-auth": "^1.1.4",
- "abort-controller": "^3.0.0",
- "form-data": "^2.5.0",
- "node-fetch": "^2.6.7",
- "tough-cookie": "^3.0.1",
- "tslib": "^1.10.0",
- "tunnel": "0.0.6",
- "uuid": "^8.3.2",
- "xml2js": "^0.5.0"
+ "@azure/msal-common": {
+ "version": "13.1.0",
+ "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.1.0.tgz",
+ "integrity": "sha512-wj+ULrRB0HTuMmtrMjg8j3guCx32GE2BCPbsMCZkHgL1BZetC3o/Su5UJEQMX1HNc9CrIaQNx5WaKWHygYDe0g=="
+ },
+ "uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+ }
}
},
- "node_modules/@azure/ms-rest-js/node_modules/form-data": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
- "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "@babel/cli": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.22.6.tgz",
+ "integrity": "sha512-Be3/RfEDmkMRGT1+ru5nTkfcvWz5jDOYg1V9rXqTz2u9Qt96O1ryboGvxVBp7wOnYWDB8DNHIWb6DThrpudfOw==",
"dev": true,
- "peer": true,
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
+ "requires": {
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3",
+ "chokidar": "^3.4.0",
+ "commander": "^4.0.1",
+ "convert-source-map": "^1.1.0",
+ "fs-readdir-recursive": "^1.1.0",
+ "glob": "^7.2.0",
+ "make-dir": "^2.1.0",
+ "slash": "^2.0.0"
},
- "engines": {
- "node": ">= 0.12"
+ "dependencies": {
+ "commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "dev": true
+ },
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ },
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "dev": true
+ }
}
},
- "node_modules/@azure/ms-rest-js/node_modules/tough-cookie": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz",
- "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==",
+ "@babel/code-frame": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz",
+ "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==",
"dev": true,
- "peer": true,
- "dependencies": {
- "ip-regex": "^2.1.0",
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=6"
+ "requires": {
+ "@babel/highlight": "^7.22.5"
}
},
- "node_modules/@azure/ms-rest-js/node_modules/tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true,
- "peer": true
+ "@babel/compat-data": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz",
+ "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==",
+ "dev": true
},
- "node_modules/@azure/ms-rest-js/node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "@babel/core": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.6.tgz",
+ "integrity": "sha512-HPIyDa6n+HKw5dEuway3vVAhBboYCtREBMp+IWeseZy6TFtzn6MHkCH2KKYUOC/vKKwgSMHQW4htBOrmuRPXfw==",
"dev": true,
- "peer": true,
- "bin": {
- "uuid": "dist/bin/uuid"
+ "requires": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.22.5",
+ "@babel/generator": "^7.22.5",
+ "@babel/helper-compilation-targets": "^7.22.6",
+ "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helpers": "^7.22.6",
+ "@babel/parser": "^7.22.6",
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.6",
+ "@babel/types": "^7.22.5",
+ "@nicolo-ribaudo/semver-v6": "^6.3.3",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.2"
+ },
+ "dependencies": {
+ "@nicolo-ribaudo/semver-v6": {
+ "version": "6.3.3",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz",
+ "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==",
+ "dev": true
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
}
},
- "node_modules/@azure/ms-rest-nodeauth": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@azure/ms-rest-nodeauth/-/ms-rest-nodeauth-3.1.1.tgz",
- "integrity": "sha512-UA/8dgLy3+ZiwJjAZHxL4MUB14fFQPkaAOZ94jsTW/Z6WmoOeny2+cLk0+dyIX/iH6qSrEWKwbStEeB970B9pA==",
+ "@babel/generator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz",
+ "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==",
"dev": true,
- "peer": true,
- "dependencies": {
- "@azure/ms-rest-azure-env": "^2.0.0",
- "@azure/ms-rest-js": "^2.0.4",
- "adal-node": "^0.2.2"
+ "requires": {
+ "@babel/types": "^7.22.5",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jsesc": "^2.5.1"
}
},
- "node_modules/@azure/msal-browser": {
- "version": "2.24.0",
- "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.24.0.tgz",
- "integrity": "sha512-P4Z8mQ6hTuA9ss3HCltso7fRmuX1raaU6444G35c0FhaD6hfqViFYRa7hk16AiAs9HkUQHbBaL3gLjKMpX3heA==",
- "dependencies": {
- "@azure/msal-common": "^6.3.0"
- },
- "engines": {
- "node": ">=0.8.0"
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
+ "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.22.5"
}
},
- "node_modules/@azure/msal-browser/node_modules/@azure/msal-common": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-6.3.0.tgz",
- "integrity": "sha512-ZyLq9GdnLBi/83YpysE86TFKbA0TuvfNAN5Psqu20cdAjLo/4rw4ttiItdh1G//XeGErHk9qn57gi2AYU1b5/Q==",
- "engines": {
- "node": ">=0.8.0"
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz",
+ "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.22.5"
}
},
- "node_modules/@azure/msal-common": {
- "version": "4.5.1",
- "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-4.5.1.tgz",
- "integrity": "sha512-/i5dXM+QAtO+6atYd5oHGBAx48EGSISkXNXViheliOQe+SIFMDo3gSq3lL54W0suOSAsVPws3XnTaIHlla0PIQ==",
- "dependencies": {
- "debug": "^4.1.1"
+ "@babel/helper-compilation-targets": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz",
+ "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.22.6",
+ "@babel/helper-validator-option": "^7.22.5",
+ "@nicolo-ribaudo/semver-v6": "^6.3.3",
+ "browserslist": "^4.21.9",
+ "lru-cache": "^5.1.1"
},
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@azure/msal-common/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
+ "@nicolo-ribaudo/semver-v6": {
+ "version": "6.3.3",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz",
+ "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
}
}
},
- "node_modules/@azure/msal-common/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/@azure/msal-node": {
- "version": "1.14.6",
- "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.14.6.tgz",
- "integrity": "sha512-em/qqFL5tLMxMPl9vormAs13OgZpmQoJbiQ/GlWr+BA77eCLoL+Ehr5xRHowYo+LFe5b+p+PJVkRvT+mLvOkwA==",
- "dependencies": {
- "@azure/msal-common": "^9.0.2",
- "jsonwebtoken": "^9.0.0",
- "uuid": "^8.3.0"
+ "@babel/helper-create-class-features-plugin": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.6.tgz",
+ "integrity": "sha512-iwdzgtSiBxF6ni6mzVnZCF3xt5qE6cEA0J7nFt8QOAWZ0zjCFceEgpn3vtb2V7WFR6QzP2jmIFOHMTRo7eNJjQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/helper-member-expression-to-functions": "^7.22.5",
+ "@babel/helper-optimise-call-expression": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@nicolo-ribaudo/semver-v6": "^6.3.3"
},
- "engines": {
- "node": "10 || 12 || 14 || 16 || 18"
+ "dependencies": {
+ "@nicolo-ribaudo/semver-v6": {
+ "version": "6.3.3",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz",
+ "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==",
+ "dev": true
+ }
}
},
- "node_modules/@azure/msal-node/node_modules/@azure/msal-common": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-9.0.2.tgz",
- "integrity": "sha512-qzwxuF8kZAp+rNUactMCgJh8fblq9D4lSqrrIxMDzLjgSZtjN32ix7r/HBe8QdOr76II9SVVPcMkX4sPzPfQ7w==",
- "engines": {
- "node": ">=0.8.0"
+ "@babel/helper-create-regexp-features-plugin": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.6.tgz",
+ "integrity": "sha512-nBookhLKxAWo/TUCmhnaEJyLz2dekjQvv5SRpE9epWQBcpedWLKt8aZdsuT9XV5ovzR3fENLjRXVT0GsSlGGhA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@nicolo-ribaudo/semver-v6": "^6.3.3",
+ "regexpu-core": "^5.3.1"
+ },
+ "dependencies": {
+ "@nicolo-ribaudo/semver-v6": {
+ "version": "6.3.3",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz",
+ "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==",
+ "dev": true
+ }
}
},
- "node_modules/@azure/msal-node/node_modules/jsonwebtoken": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz",
- "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==",
- "dependencies": {
- "jws": "^3.2.2",
- "lodash": "^4.17.21",
- "ms": "^2.1.1",
- "semver": "^7.3.8"
- },
- "engines": {
- "node": ">=12",
- "npm": ">=6"
- }
- },
- "node_modules/@azure/msal-node/node_modules/jws": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
- "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
- "dependencies": {
- "jwa": "^1.4.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/@azure/msal-node/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- },
- "node_modules/@azure/msal-node/node_modules/semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@azure/msal-node/node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/@babel/cli": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.22.5.tgz",
- "integrity": "sha512-N5d7MjzwsQ2wppwjhrsicVDhJSqF9labEP/swYiHhio4Ca2XjEehpgPmerjnLQl7BPE59BLud0PTWGYwqFl/cQ==",
- "dev": true,
- "dependencies": {
- "@jridgewell/trace-mapping": "^0.3.17",
- "commander": "^4.0.1",
- "convert-source-map": "^1.1.0",
- "fs-readdir-recursive": "^1.1.0",
- "glob": "^7.2.0",
- "make-dir": "^2.1.0",
- "slash": "^2.0.0"
- },
- "bin": {
- "babel": "bin/babel.js",
- "babel-external-helpers": "bin/babel-external-helpers.js"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "optionalDependencies": {
- "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3",
- "chokidar": "^3.4.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/cli/node_modules/commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/@babel/cli/node_modules/make-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
- "dev": true,
- "dependencies": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@babel/cli/node_modules/pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@babel/cli/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/@babel/cli/node_modules/slash": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
- "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@babel/code-frame": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz",
- "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==",
- "dev": true,
- "dependencies": {
- "@babel/highlight": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/compat-data": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz",
- "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/core": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz",
- "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==",
- "dev": true,
- "dependencies": {
- "@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.22.5",
- "@babel/generator": "^7.22.5",
- "@babel/helper-compilation-targets": "^7.22.5",
- "@babel/helper-module-transforms": "^7.22.5",
- "@babel/helpers": "^7.22.5",
- "@babel/parser": "^7.22.5",
- "@babel/template": "^7.22.5",
- "@babel/traverse": "^7.22.5",
- "@babel/types": "^7.22.5",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.2",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
- }
- },
- "node_modules/@babel/core/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@babel/core/node_modules/json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true,
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@babel/core/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/@babel/core/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/generator": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz",
- "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.22.5",
- "@jridgewell/gen-mapping": "^0.3.2",
- "@jridgewell/trace-mapping": "^0.3.17",
- "jsesc": "^2.5.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
- "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz",
- "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz",
- "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==",
- "dev": true,
- "dependencies": {
- "@babel/compat-data": "^7.22.5",
- "@babel/helper-validator-option": "^7.22.5",
- "browserslist": "^4.21.3",
- "lru-cache": "^5.1.1",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
- "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/helper-compilation-targets/node_modules/yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
- },
- "node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz",
- "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==",
- "dev": true,
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-environment-visitor": "^7.22.5",
- "@babel/helper-function-name": "^7.22.5",
- "@babel/helper-member-expression-to-functions": "^7.22.5",
- "@babel/helper-optimise-call-expression": "^7.22.5",
- "@babel/helper-replace-supers": "^7.22.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.5",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/helper-create-regexp-features-plugin": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz",
- "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==",
- "dev": true,
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "regexpu-core": "^5.3.1",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/helper-define-polyfill-provider": {
+ "@babel/helper-define-polyfill-provider": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz",
"integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-compilation-targets": "^7.17.7",
"@babel/helper-plugin-utils": "^7.16.7",
"debug": "^4.1.1",
@@ -955,106 +460,79 @@
"resolve": "^1.14.2",
"semver": "^6.1.2"
},
- "peerDependencies": {
- "@babel/core": "^7.4.0-0"
- }
- },
- "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
}
}
},
- "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/helper-environment-visitor": {
+ "@babel/helper-environment-visitor": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz",
"integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
+ "dev": true
},
- "node_modules/@babel/helper-function-name": {
+ "@babel/helper-function-name": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz",
"integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/template": "^7.22.5",
"@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-hoist-variables": {
+ "@babel/helper-hoist-variables": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
"integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-member-expression-to-functions": {
+ "@babel/helper-member-expression-to-functions": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz",
"integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-module-imports": {
+ "@babel/helper-module-imports": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz",
"integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-module-transforms": {
+ "@babel/helper-module-transforms": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz",
"integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-environment-visitor": "^7.22.5",
"@babel/helper-module-imports": "^7.22.5",
"@babel/helper-simple-access": "^7.22.5",
@@ -1063,1331 +541,891 @@
"@babel/template": "^7.22.5",
"@babel/traverse": "^7.22.5",
"@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-optimise-call-expression": {
+ "@babel/helper-optimise-call-expression": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
"integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-plugin-utils": {
+ "@babel/helper-plugin-utils": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
"integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
+ "dev": true
},
- "node_modules/@babel/helper-remap-async-to-generator": {
+ "@babel/helper-remap-async-to-generator": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz",
"integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-annotate-as-pure": "^7.22.5",
"@babel/helper-environment-visitor": "^7.22.5",
"@babel/helper-wrap-function": "^7.22.5",
"@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/helper-replace-supers": {
+ "@babel/helper-replace-supers": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz",
"integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-environment-visitor": "^7.22.5",
"@babel/helper-member-expression-to-functions": "^7.22.5",
"@babel/helper-optimise-call-expression": "^7.22.5",
"@babel/template": "^7.22.5",
"@babel/traverse": "^7.22.5",
"@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-simple-access": {
+ "@babel/helper-simple-access": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
"integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+ "@babel/helper-skip-transparent-expression-wrappers": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
"integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-split-export-declaration": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz",
- "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==",
+ "@babel/helper-split-export-declaration": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+ "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-string-parser": {
+ "@babel/helper-string-parser": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
"integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
+ "dev": true
},
- "node_modules/@babel/helper-validator-identifier": {
+ "@babel/helper-validator-identifier": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz",
"integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
+ "dev": true
},
- "node_modules/@babel/helper-validator-option": {
+ "@babel/helper-validator-option": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz",
"integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
+ "dev": true
},
- "node_modules/@babel/helper-wrap-function": {
+ "@babel/helper-wrap-function": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz",
"integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-function-name": "^7.22.5",
"@babel/template": "^7.22.5",
"@babel/traverse": "^7.22.5",
"@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
}
},
- "node_modules/@babel/helpers": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz",
- "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==",
+ "@babel/helpers": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz",
+ "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/template": "^7.22.5",
- "@babel/traverse": "^7.22.5",
+ "@babel/traverse": "^7.22.6",
"@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
}
},
- "node_modules/@babel/highlight": {
+ "@babel/highlight": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz",
"integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-validator-identifier": "^7.22.5",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
},
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
"dependencies": {
- "color-name": "1.1.3"
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
}
},
- "node_modules/@babel/highlight/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "@babel/parser": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.6.tgz",
+ "integrity": "sha512-EIQu22vNkceq3LbjAq7knDf/UmtI2qbcNI8GRBlijez6TpQLvSodJPYfydQmNA5buwkxxxa/PVI44jjYZ+/cLw==",
"dev": true
},
- "node_modules/@babel/highlight/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz",
- "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==",
- "dev": true,
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz",
"integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz",
"integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
"@babel/plugin-transform-optional-chaining": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.13.0"
}
},
- "node_modules/@babel/plugin-proposal-private-property-in-object": {
+ "@babel/plugin-proposal-private-property-in-object": {
"version": "7.21.0-placeholder-for-preset-env.2",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
"integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
+ "dev": true
},
- "node_modules/@babel/plugin-proposal-unicode-property-regex": {
+ "@babel/plugin-proposal-unicode-property-regex": {
"version": "7.18.6",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz",
"integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-create-regexp-features-plugin": "^7.18.6",
"@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-async-generators": {
+ "@babel/plugin-syntax-async-generators": {
"version": "7.8.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
"integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-class-properties": {
+ "@babel/plugin-syntax-class-properties": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
"integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.12.13"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-class-static-block": {
+ "@babel/plugin-syntax-class-static-block": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
"integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-dynamic-import": {
+ "@babel/plugin-syntax-dynamic-import": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
"integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-export-namespace-from": {
+ "@babel/plugin-syntax-export-namespace-from": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
"integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.8.3"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-import-assertions": {
+ "@babel/plugin-syntax-import-assertions": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz",
"integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-import-attributes": {
+ "@babel/plugin-syntax-import-attributes": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz",
"integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-import-meta": {
+ "@babel/plugin-syntax-import-meta": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
"integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-json-strings": {
+ "@babel/plugin-syntax-json-strings": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
"integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
+ "@babel/plugin-syntax-logical-assignment-operators": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
"integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
+ "@babel/plugin-syntax-nullish-coalescing-operator": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
"integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-numeric-separator": {
+ "@babel/plugin-syntax-numeric-separator": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
"integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-object-rest-spread": {
+ "@babel/plugin-syntax-object-rest-spread": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
"integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-optional-catch-binding": {
+ "@babel/plugin-syntax-optional-catch-binding": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
"integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-optional-chaining": {
+ "@babel/plugin-syntax-optional-chaining": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
"integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-private-property-in-object": {
+ "@babel/plugin-syntax-private-property-in-object": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
"integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-top-level-await": {
+ "@babel/plugin-syntax-top-level-await": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
"integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-unicode-sets-regex": {
+ "@babel/plugin-syntax-unicode-sets-regex": {
"version": "7.18.6",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
"integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-create-regexp-features-plugin": "^7.18.6",
"@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/plugin-transform-arrow-functions": {
+ "@babel/plugin-transform-arrow-functions": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz",
"integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-async-generator-functions": {
+ "@babel/plugin-transform-async-generator-functions": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz",
"integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-environment-visitor": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/helper-remap-async-to-generator": "^7.22.5",
"@babel/plugin-syntax-async-generators": "^7.8.4"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-async-to-generator": {
+ "@babel/plugin-transform-async-to-generator": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz",
"integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-module-imports": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/helper-remap-async-to-generator": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-block-scoped-functions": {
+ "@babel/plugin-transform-block-scoped-functions": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz",
"integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-block-scoping": {
+ "@babel/plugin-transform-block-scoping": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz",
"integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-class-properties": {
+ "@babel/plugin-transform-class-properties": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz",
"integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-create-class-features-plugin": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-class-static-block": {
+ "@babel/plugin-transform-class-static-block": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz",
"integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-create-class-features-plugin": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/plugin-syntax-class-static-block": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.12.0"
}
},
- "node_modules/@babel/plugin-transform-classes": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz",
- "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==",
+ "@babel/plugin-transform-classes": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz",
+ "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-compilation-targets": "^7.22.5",
+ "@babel/helper-compilation-targets": "^7.22.6",
"@babel/helper-environment-visitor": "^7.22.5",
"@babel/helper-function-name": "^7.22.5",
"@babel/helper-optimise-call-expression": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/helper-replace-supers": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
"globals": "^11.1.0"
},
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-classes/node_modules/globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true,
- "engines": {
- "node": ">=4"
+ "dependencies": {
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ }
}
},
- "node_modules/@babel/plugin-transform-computed-properties": {
+ "@babel/plugin-transform-computed-properties": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz",
"integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/template": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-destructuring": {
+ "@babel/plugin-transform-destructuring": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz",
"integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-dotall-regex": {
+ "@babel/plugin-transform-dotall-regex": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz",
"integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-create-regexp-features-plugin": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-duplicate-keys": {
+ "@babel/plugin-transform-duplicate-keys": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz",
"integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-dynamic-import": {
+ "@babel/plugin-transform-dynamic-import": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz",
"integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/plugin-syntax-dynamic-import": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-exponentiation-operator": {
+ "@babel/plugin-transform-exponentiation-operator": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz",
"integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-export-namespace-from": {
+ "@babel/plugin-transform-export-namespace-from": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz",
"integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-for-of": {
+ "@babel/plugin-transform-for-of": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz",
"integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-function-name": {
+ "@babel/plugin-transform-function-name": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz",
"integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-compilation-targets": "^7.22.5",
"@babel/helper-function-name": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-json-strings": {
+ "@babel/plugin-transform-json-strings": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz",
"integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/plugin-syntax-json-strings": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-literals": {
+ "@babel/plugin-transform-literals": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz",
"integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-logical-assignment-operators": {
+ "@babel/plugin-transform-logical-assignment-operators": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz",
"integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-member-expression-literals": {
+ "@babel/plugin-transform-member-expression-literals": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz",
"integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-modules-amd": {
+ "@babel/plugin-transform-modules-amd": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz",
"integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-module-transforms": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-modules-commonjs": {
+ "@babel/plugin-transform-modules-commonjs": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz",
"integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-module-transforms": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/helper-simple-access": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-modules-systemjs": {
+ "@babel/plugin-transform-modules-systemjs": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz",
"integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-module-transforms": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/helper-validator-identifier": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-modules-umd": {
+ "@babel/plugin-transform-modules-umd": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz",
"integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-module-transforms": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
+ "@babel/plugin-transform-named-capturing-groups-regex": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz",
"integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-create-regexp-features-plugin": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/plugin-transform-new-target": {
+ "@babel/plugin-transform-new-target": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz",
"integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
+ "@babel/plugin-transform-nullish-coalescing-operator": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz",
"integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-numeric-separator": {
+ "@babel/plugin-transform-numeric-separator": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz",
"integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/plugin-syntax-numeric-separator": "^7.10.4"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-object-rest-spread": {
+ "@babel/plugin-transform-object-rest-spread": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz",
"integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/compat-data": "^7.22.5",
"@babel/helper-compilation-targets": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
"@babel/plugin-transform-parameters": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-object-super": {
+ "@babel/plugin-transform-object-super": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz",
"integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/helper-replace-supers": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-optional-catch-binding": {
+ "@babel/plugin-transform-optional-catch-binding": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz",
"integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-optional-chaining": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz",
- "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==",
+ "@babel/plugin-transform-optional-chaining": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz",
+ "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
"@babel/plugin-syntax-optional-chaining": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-parameters": {
+ "@babel/plugin-transform-parameters": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz",
"integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-private-methods": {
+ "@babel/plugin-transform-private-methods": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz",
"integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-create-class-features-plugin": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-private-property-in-object": {
+ "@babel/plugin-transform-private-property-in-object": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz",
"integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-annotate-as-pure": "^7.22.5",
"@babel/helper-create-class-features-plugin": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-property-literals": {
+ "@babel/plugin-transform-property-literals": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz",
"integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-regenerator": {
+ "@babel/plugin-transform-regenerator": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz",
"integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5",
"regenerator-transform": "^0.15.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-reserved-words": {
+ "@babel/plugin-transform-reserved-words": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz",
"integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-shorthand-properties": {
+ "@babel/plugin-transform-shorthand-properties": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz",
"integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-spread": {
+ "@babel/plugin-transform-spread": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz",
"integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-sticky-regex": {
+ "@babel/plugin-transform-sticky-regex": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz",
"integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-template-literals": {
+ "@babel/plugin-transform-template-literals": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz",
"integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-typeof-symbol": {
+ "@babel/plugin-transform-typeof-symbol": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz",
"integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-unicode-escapes": {
+ "@babel/plugin-transform-unicode-escapes": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz",
"integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-unicode-property-regex": {
+ "@babel/plugin-transform-unicode-property-regex": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz",
"integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-create-regexp-features-plugin": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-unicode-regex": {
+ "@babel/plugin-transform-unicode-regex": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz",
"integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-create-regexp-features-plugin": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-unicode-sets-regex": {
+ "@babel/plugin-transform-unicode-sets-regex": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz",
"integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-create-regexp-features-plugin": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/preset-env": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz",
- "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==",
+ "@babel/preset-env": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.6.tgz",
+ "integrity": "sha512-IHr0AXHGk8oh8HYSs45Mxuv6iySUBwDTIzJSnXN7PURqHdxJVQlCoXmKJgyvSS9bcNf9NVRVE35z+LkCvGmi6w==",
"dev": true,
- "dependencies": {
- "@babel/compat-data": "^7.22.5",
- "@babel/helper-compilation-targets": "^7.22.5",
+ "requires": {
+ "@babel/compat-data": "^7.22.6",
+ "@babel/helper-compilation-targets": "^7.22.6",
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/helper-validator-option": "^7.22.5",
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5",
@@ -2418,7 +1456,7 @@
"@babel/plugin-transform-block-scoping": "^7.22.5",
"@babel/plugin-transform-class-properties": "^7.22.5",
"@babel/plugin-transform-class-static-block": "^7.22.5",
- "@babel/plugin-transform-classes": "^7.22.5",
+ "@babel/plugin-transform-classes": "^7.22.6",
"@babel/plugin-transform-computed-properties": "^7.22.5",
"@babel/plugin-transform-destructuring": "^7.22.5",
"@babel/plugin-transform-dotall-regex": "^7.22.5",
@@ -2443,7 +1481,7 @@
"@babel/plugin-transform-object-rest-spread": "^7.22.5",
"@babel/plugin-transform-object-super": "^7.22.5",
"@babel/plugin-transform-optional-catch-binding": "^7.22.5",
- "@babel/plugin-transform-optional-chaining": "^7.22.5",
+ "@babel/plugin-transform-optional-chaining": "^7.22.6",
"@babel/plugin-transform-parameters": "^7.22.5",
"@babel/plugin-transform-private-methods": "^7.22.5",
"@babel/plugin-transform-private-property-in-object": "^7.22.5",
@@ -2461,409 +1499,385 @@
"@babel/plugin-transform-unicode-sets-regex": "^7.22.5",
"@babel/preset-modules": "^0.1.5",
"@babel/types": "^7.22.5",
+ "@nicolo-ribaudo/semver-v6": "^6.3.3",
"babel-plugin-polyfill-corejs2": "^0.4.3",
"babel-plugin-polyfill-corejs3": "^0.8.1",
"babel-plugin-polyfill-regenerator": "^0.5.0",
- "core-js-compat": "^3.30.2",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=6.9.0"
+ "core-js-compat": "^3.31.0"
},
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "dependencies": {
+ "@nicolo-ribaudo/semver-v6": {
+ "version": "6.3.3",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz",
+ "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==",
+ "dev": true
+ }
}
},
- "node_modules/@babel/preset-env/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/preset-modules": {
+ "@babel/preset-modules": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz",
"integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-plugin-utils": "^7.0.0",
"@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
"@babel/plugin-transform-dotall-regex": "^7.4.4",
"@babel/types": "^7.4.4",
"esutils": "^2.0.2"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/register": {
+ "@babel/register": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.5.tgz",
"integrity": "sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"clone-deep": "^4.0.1",
"find-cache-dir": "^2.0.0",
"make-dir": "^2.1.0",
"pirates": "^4.0.5",
"source-map-support": "^0.5.16"
},
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/register/node_modules/make-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
- "dev": true,
"dependencies": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@babel/register/node_modules/pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@babel/register/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
}
},
- "node_modules/@babel/regjsgen": {
+ "@babel/regjsgen": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
"integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
"dev": true
},
- "node_modules/@babel/runtime": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz",
- "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==",
+ "@babel/runtime": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz",
+ "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"regenerator-runtime": "^0.13.11"
- },
- "engines": {
- "node": ">=6.9.0"
}
},
- "node_modules/@babel/template": {
+ "@babel/template": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz",
"integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/code-frame": "^7.22.5",
"@babel/parser": "^7.22.5",
"@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
}
},
- "node_modules/@babel/traverse": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz",
- "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==",
+ "@babel/traverse": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.6.tgz",
+ "integrity": "sha512-53CijMvKlLIDlOTrdWiHileRddlIiwUIyCKqYa7lYnnPldXCG5dUSN38uT0cA6i7rHWNKJLH0VU/Kxdr1GzB3w==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/code-frame": "^7.22.5",
"@babel/generator": "^7.22.5",
"@babel/helper-environment-visitor": "^7.22.5",
"@babel/helper-function-name": "^7.22.5",
"@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.5",
- "@babel/parser": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/parser": "^7.22.6",
"@babel/types": "^7.22.5",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
}
}
},
- "node_modules/@babel/traverse/node_modules/globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/traverse/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/@babel/types": {
+ "@babel/types": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz",
"integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-string-parser": "^7.22.5",
"@babel/helper-validator-identifier": "^7.22.5",
"to-fast-properties": "^2.0.0"
+ }
+ },
+ "@elastic/transport": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/@elastic/transport/-/transport-8.3.2.tgz",
+ "integrity": "sha512-ZiBYRVPj6pwYW99fueyNU4notDf7ZPs7Ix+4T1btIJsKJmeaORIItIfs+0O7KV4vV+DcvyMhkY1FXQx7kQOODw==",
+ "requires": {
+ "debug": "^4.3.4",
+ "hpagent": "^1.0.0",
+ "ms": "^2.1.3",
+ "secure-json-parse": "^2.4.0",
+ "tslib": "^2.4.0",
+ "undici": "^5.22.1"
},
- "engines": {
- "node": ">=6.9.0"
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ }
}
},
- "node_modules/@eslint/eslintrc": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz",
- "integrity": "sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg==",
+ "@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
"dev": true,
- "dependencies": {
+ "requires": {
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "@eslint-community/regexpp": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz",
+ "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==",
+ "dev": true
+ },
+ "@eslint/eslintrc": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz",
+ "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==",
+ "dev": true,
+ "requires": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
- "espree": "^9.3.1",
- "globals": "^13.9.0",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
"js-yaml": "^4.1.0",
- "minimatch": "^3.0.4",
+ "minimatch": "^3.1.2",
"strip-json-comments": "^3.1.1"
},
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "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"
+ }
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.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==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
}
}
},
- "node_modules/@eslint/eslintrc/node_modules/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==",
- "dev": true
- },
- "node_modules/@eslint/eslintrc/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "@eslint/js": {
+ "version": "8.44.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz",
+ "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==",
"dev": true
},
- "node_modules/@gar/promisify": {
+ "@gar/promisify": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
"integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
"optional": true
},
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.9.5",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
- "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
+ "@humanwhocodes/config-array": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
+ "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@humanwhocodes/object-schema": "^1.2.1",
"debug": "^4.1.1",
- "minimatch": "^3.0.4"
+ "minimatch": "^3.0.5"
},
- "engines": {
- "node": ">=10.10.0"
- }
- },
- "node_modules/@humanwhocodes/config-array/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
}
}
},
- "node_modules/@humanwhocodes/config-array/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
"dev": true
},
- "node_modules/@humanwhocodes/object-schema": {
+ "@humanwhocodes/object-schema": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
"dev": true
},
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
- "dependencies": {
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "dev": true,
+ "requires": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
}
},
- "node_modules/@jridgewell/resolve-uri": {
+ "@jridgewell/resolve-uri": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
"integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
- "engines": {
- "node": ">=6.0.0"
- }
+ "dev": true
},
- "node_modules/@jridgewell/set-array": {
+ "@jridgewell/set-array": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
- "engines": {
- "node": ">=6.0.0"
- }
+ "dev": true
},
- "node_modules/@jridgewell/source-map": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
- "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
+ "@jridgewell/source-map": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.4.tgz",
+ "integrity": "sha512-KE/SxsDqNs3rrWwFHcRh15ZLVFrI0YoZtgAdIyIq9k5hUNmiWRXXThPomIxHuL20sLdgzbDFyvkUMna14bvtrw=="
},
- "node_modules/@jridgewell/sourcemap-codec": {
+ "@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
- "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
+ "dev": true
},
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.17",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
- "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
- "dependencies": {
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.18",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
+ "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
+ "dev": true,
+ "requires": {
"@jridgewell/resolve-uri": "3.1.0",
"@jridgewell/sourcemap-codec": "1.4.14"
}
},
- "node_modules/@js-joda/core": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-4.3.1.tgz",
- "integrity": "sha512-oeaetlodcqVsiZDxnEcqsbs+sXBkASxua0mXs5OXuPQXz3/wdPTMlxwfQ4z2HKcOik3S9voW3QJkp/KLWDhvRQ=="
+ "@js-joda/core": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.5.3.tgz",
+ "integrity": "sha512-7dqNYwG8gCt4hfg5PKgM7xLEcgSBcx/UgC92OMnhMmvAnq11QzDFPrxUkNR/u5kn17WWLZ8beZ4A3Qrz4pZcmQ=="
},
- "node_modules/@jsdevtools/ono": {
+ "@jsdevtools/ono": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
"integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg=="
},
- "node_modules/@kwsites/file-exists": {
+ "@kwsites/file-exists": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
"integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
- "dependencies": {
+ "requires": {
"debug": "^4.1.1"
- }
- },
- "node_modules/@kwsites/file-exists/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dependencies": {
- "ms": "2.1.2"
},
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
- "node_modules/@kwsites/file-exists/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/@kwsites/promise-deferred": {
+ "@kwsites/promise-deferred": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
"integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw=="
},
- "node_modules/@mapbox/node-pre-gyp": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz",
- "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==",
+ "@mapbox/node-pre-gyp": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz",
+ "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==",
"optional": true,
- "dependencies": {
+ "requires": {
"detect-libc": "^2.0.0",
"https-proxy-agent": "^5.0.0",
"make-dir": "^3.1.0",
@@ -2873,1356 +1887,1446 @@
"rimraf": "^3.0.2",
"semver": "^7.3.5",
"tar": "^6.1.11"
- },
- "bin": {
- "node-pre-gyp": "bin/node-pre-gyp"
}
},
- "node_modules/@nicolo-ribaudo/chokidar-2": {
+ "@nicolo-ribaudo/chokidar-2": {
"version": "2.1.8-no-fsevents.3",
"resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz",
"integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==",
"dev": true,
"optional": true
},
- "node_modules/@nodelib/fs.scandir": {
+ "@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dependencies": {
+ "requires": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
}
},
- "node_modules/@nodelib/fs.stat": {
+ "@nodelib/fs.stat": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "engines": {
- "node": ">= 8"
- }
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
},
- "node_modules/@nodelib/fs.walk": {
+ "@nodelib/fs.walk": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dependencies": {
+ "requires": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
}
},
- "node_modules/@npmcli/fs": {
+ "@npmcli/fs": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
"integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
"optional": true,
- "dependencies": {
+ "requires": {
"@gar/promisify": "^1.0.1",
"semver": "^7.3.5"
}
},
- "node_modules/@npmcli/move-file": {
+ "@npmcli/move-file": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
"integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
- "deprecated": "This functionality has been moved to @npmcli/fs",
"optional": true,
- "dependencies": {
+ "requires": {
"mkdirp": "^1.0.4",
"rimraf": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
}
},
- "node_modules/@opentelemetry/api": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.1.0.tgz",
- "integrity": "sha512-hf+3bwuBwtXsugA2ULBc95qxrOqP2pOekLz34BJhcAKawt94vfeNyUKpYc0lZQ/3sCP6LqRa7UAdHA7i5UODzQ==",
- "engines": {
- "node": ">=8.0.0"
+ "@pkgr/utils": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.1.tgz",
+ "integrity": "sha512-JOqwkgFEyi+OROIyq7l4Jy28h/WwhDnG/cPkXG2Z1iFbubB6jsHW1NDvmyOzTBxHr3yg68YGirmh1JUgMqa+9w==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "fast-glob": "^3.2.12",
+ "is-glob": "^4.0.3",
+ "open": "^9.1.0",
+ "picocolors": "^1.0.0",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "define-lazy-prop": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
+ "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
+ "dev": true
+ },
+ "open": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz",
+ "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==",
+ "dev": true,
+ "requires": {
+ "default-browser": "^4.0.0",
+ "define-lazy-prop": "^3.0.0",
+ "is-inside-container": "^1.0.0",
+ "is-wsl": "^2.2.0"
+ }
+ }
}
},
- "node_modules/@redis/bloom": {
+ "@redis/bloom": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz",
- "integrity": "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==",
- "peerDependencies": {
- "@redis/client": "^1.0.0"
- }
+ "integrity": "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg=="
},
- "node_modules/@redis/client": {
+ "@redis/client": {
"version": "1.5.8",
"resolved": "https://registry.npmjs.org/@redis/client/-/client-1.5.8.tgz",
"integrity": "sha512-xzElwHIO6rBAqzPeVnCzgvrnBEcFL1P0w8P65VNLRkdVW8rOE58f52hdj0BDgmsdOm4f1EoXPZtH4Fh7M/qUpw==",
- "dependencies": {
+ "requires": {
"cluster-key-slot": "1.1.2",
"generic-pool": "3.9.0",
"yallist": "4.0.0"
- },
- "engines": {
- "node": ">=14"
}
},
- "node_modules/@redis/graph": {
+ "@redis/graph": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.1.0.tgz",
- "integrity": "sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg==",
- "peerDependencies": {
- "@redis/client": "^1.0.0"
- }
+ "integrity": "sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg=="
},
- "node_modules/@redis/json": {
+ "@redis/json": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.4.tgz",
- "integrity": "sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==",
- "peerDependencies": {
- "@redis/client": "^1.0.0"
- }
+ "integrity": "sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw=="
},
- "node_modules/@redis/search": {
+ "@redis/search": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@redis/search/-/search-1.1.3.tgz",
- "integrity": "sha512-4Dg1JjvCevdiCBTZqjhKkGoC5/BcB7k9j99kdMnaXFXg8x4eyOIVg9487CMv7/BUVkFLZCaIh8ead9mU15DNng==",
- "peerDependencies": {
- "@redis/client": "^1.0.0"
- }
+ "integrity": "sha512-4Dg1JjvCevdiCBTZqjhKkGoC5/BcB7k9j99kdMnaXFXg8x4eyOIVg9487CMv7/BUVkFLZCaIh8ead9mU15DNng=="
},
- "node_modules/@redis/time-series": {
+ "@redis/time-series": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.4.tgz",
- "integrity": "sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng==",
- "peerDependencies": {
- "@redis/client": "^1.0.0"
+ "integrity": "sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng=="
+ },
+ "@rollup/pluginutils": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
+ "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==",
+ "dev": true,
+ "requires": {
+ "estree-walker": "^2.0.1",
+ "picomatch": "^2.2.2"
}
},
- "node_modules/@rushstack/eslint-patch": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz",
- "integrity": "sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw==",
+ "@rushstack/eslint-patch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz",
+ "integrity": "sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==",
"dev": true
},
- "node_modules/@sinonjs/commons": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
- "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
+ "@sinonjs/commons": {
+ "version": "1.8.6",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz",
+ "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"type-detect": "4.0.8"
}
},
- "node_modules/@sinonjs/fake-timers": {
+ "@sinonjs/fake-timers": {
"version": "9.1.2",
"resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz",
"integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==",
"dev": true,
- "dependencies": {
+ "requires": {
"@sinonjs/commons": "^1.7.0"
}
},
- "node_modules/@sinonjs/samsam": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.1.tgz",
- "integrity": "sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA==",
+ "@sinonjs/samsam": {
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.3.tgz",
+ "integrity": "sha512-nhOb2dWPeb1sd3IQXL/dVPnKHDOAFfvichtBf4xV00/rU1QbPCQqKMbvIheIjqwVjh7qIgf2AHTHi391yMOMpQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@sinonjs/commons": "^1.6.0",
"lodash.get": "^4.4.2",
"type-detect": "^4.0.8"
}
},
- "node_modules/@sinonjs/text-encoding": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
- "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
+ "@sinonjs/text-encoding": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz",
+ "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==",
"dev": true
},
- "node_modules/@tediousjs/connection-string": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@tediousjs/connection-string/-/connection-string-0.3.0.tgz",
- "integrity": "sha512-d/keJiNKfpHo+GmSB8QcsAwBx8h+V1UbdozA5TD+eSLXprNY53JAYub47J9evsSKWDdNG5uVj0FiMozLKuzowQ=="
+ "@tediousjs/connection-string": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@tediousjs/connection-string/-/connection-string-0.4.2.tgz",
+ "integrity": "sha512-1R9UC7Qc5wief2oJL+c1+d7v1/oPBayL85u8L/jV2DzIKput1TZ8ZUjj2nxQaSfzu210zp0oFWUrYUiUs8NhBQ=="
},
- "node_modules/@tootallnate/once": {
+ "@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==",
- "engines": {
- "node": ">= 10"
- }
+ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A=="
},
- "node_modules/@types/body-parser": {
+ "@types/body-parser": {
"version": "1.19.2",
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
"integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==",
"dev": true,
- "dependencies": {
+ "requires": {
"@types/connect": "*",
"@types/node": "*"
}
},
- "node_modules/@types/connect": {
+ "@types/connect": {
"version": "3.4.35",
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
"integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@types/node": "*"
}
},
- "node_modules/@types/cross-spawn": {
+ "@types/cross-spawn": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.2.tgz",
"integrity": "sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==",
"dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/es-aggregate-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@types/es-aggregate-error/-/es-aggregate-error-1.0.2.tgz",
- "integrity": "sha512-erqUpFXksaeR2kejKnhnjZjbFxUpGZx4Z7ydNL9ie8tEhXPiZTsLeUDJ6aR1F8j5wWUAtOAQWUqkc7givBJbBA==",
- "dependencies": {
+ "requires": {
"@types/node": "*"
}
},
- "node_modules/@types/express": {
+ "@types/express": {
"version": "4.17.17",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz",
"integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==",
"dev": true,
- "dependencies": {
+ "requires": {
"@types/body-parser": "*",
"@types/express-serve-static-core": "^4.17.33",
"@types/qs": "*",
"@types/serve-static": "*"
}
},
- "node_modules/@types/express-serve-static-core": {
+ "@types/express-serve-static-core": {
"version": "4.17.35",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz",
"integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@types/node": "*",
"@types/qs": "*",
"@types/range-parser": "*",
"@types/send": "*"
}
},
- "node_modules/@types/hast": {
+ "@types/fs-extra": {
+ "version": "8.1.2",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz",
+ "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
+ "dev": true,
+ "requires": {
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/hast": {
"version": "2.3.4",
"resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
"integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==",
- "dependencies": {
+ "requires": {
"@types/unist": "*"
}
},
- "node_modules/@types/jquery": {
+ "@types/http-errors": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz",
+ "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==",
+ "dev": true
+ },
+ "@types/jquery": {
"version": "3.5.16",
"resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.16.tgz",
"integrity": "sha512-bsI7y4ZgeMkmpG9OM710RRzDFp+w4P1RGiIt30C1mSBT+ExCleeh4HObwgArnDFELmRrOpXgSYN9VF1hj+f1lw==",
"dev": true,
- "dependencies": {
+ "requires": {
"@types/sizzle": "*"
}
},
- "node_modules/@types/js-cookie": {
+ "@types/js-cookie": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.3.tgz",
"integrity": "sha512-Xe7IImK09HP1sv2M/aI+48a20VX+TdRJucfq4vfRVy6nWN8PYPOEnlMRSgxJAgYQIXJVL8dZ4/ilAM7dWNaOww==",
"dev": true
},
- "node_modules/@types/json-schema": {
- "version": "7.0.9",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
- "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
- "dev": true
+ "@types/json-schema": {
+ "version": "7.0.12",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
+ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA=="
},
- "node_modules/@types/json5": {
+ "@types/json5": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
- "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
- "dev": true
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="
},
- "node_modules/@types/lodash": {
+ "@types/lodash": {
"version": "4.14.195",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.195.tgz",
"integrity": "sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg=="
},
- "node_modules/@types/lodash.clonedeep": {
+ "@types/lodash.clonedeep": {
"version": "4.5.7",
"resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.7.tgz",
"integrity": "sha512-ccNqkPptFIXrpVqUECi60/DFxjNKsfoQxSQsgcBJCX/fuX1wgyQieojkcWH/KpE3xzLoWN/2k+ZeGqIN3paSvw==",
- "dependencies": {
+ "requires": {
"@types/lodash": "*"
}
},
- "node_modules/@types/long": {
+ "@types/long": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
"integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
},
- "node_modules/@types/mime": {
+ "@types/mime": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
"integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==",
"dev": true
},
- "node_modules/@types/node": {
- "version": "20.3.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz",
- "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg=="
- },
- "node_modules/@types/node-fetch": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz",
- "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==",
- "dependencies": {
- "@types/node": "*",
- "form-data": "^3.0.0"
- }
+ "@types/minimatch": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
+ "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==",
+ "dev": true
},
- "node_modules/@types/node-fetch/node_modules/form-data": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
- "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
+ "@types/node": {
+ "version": "20.3.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz",
+ "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw=="
},
- "node_modules/@types/parse5": {
+ "@types/parse5": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz",
"integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g=="
},
- "node_modules/@types/qs": {
+ "@types/qs": {
"version": "6.9.7",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
"integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==",
"dev": true
},
- "node_modules/@types/range-parser": {
+ "@types/range-parser": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz",
"integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==",
"dev": true
},
- "node_modules/@types/send": {
+ "@types/semver": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz",
+ "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==",
+ "dev": true
+ },
+ "@types/send": {
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz",
"integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==",
"dev": true,
- "dependencies": {
+ "requires": {
"@types/mime": "^1",
"@types/node": "*"
}
},
- "node_modules/@types/serve-static": {
- "version": "1.15.1",
- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz",
- "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==",
+ "@types/serve-static": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz",
+ "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==",
"dev": true,
- "dependencies": {
+ "requires": {
+ "@types/http-errors": "*",
"@types/mime": "*",
"@types/node": "*"
}
},
- "node_modules/@types/sizzle": {
+ "@types/sizzle": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz",
"integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==",
"dev": true
},
- "node_modules/@types/stoppable": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@types/stoppable/-/stoppable-1.1.1.tgz",
- "integrity": "sha512-b8N+fCADRIYYrGZOcmOR8ZNBOqhktWTB/bMUl5LvGtT201QKJZOOH5UsFyI3qtteM6ZAJbJqZoBcLqqxKIwjhw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/tough-cookie": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz",
- "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==",
- "dev": true,
- "peer": true
- },
- "node_modules/@types/tunnel": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.3.tgz",
- "integrity": "sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/underscore": {
+ "@types/underscore": {
"version": "1.11.5",
"resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.5.tgz",
"integrity": "sha512-b8e//LrIlhoXaaBcMC0J/s2/lIF9y5VJYKqbW4nA+tW/nqqDk1Dacd1ULLT7zgGsKs7PGbSnqCPzqEniZ0RxYg==",
"dev": true
},
- "node_modules/@types/unist": {
+ "@types/unist": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
"integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
},
- "node_modules/@typescript-eslint/eslint-plugin": {
- "version": "5.22.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.22.0.tgz",
- "integrity": "sha512-YCiy5PUzpAeOPGQ7VSGDEY2NeYUV1B0swde2e0HzokRsHBYjSdF6DZ51OuRZxVPHx0032lXGLvOMls91D8FXlg==",
+ "@typescript-eslint/eslint-plugin": {
+ "version": "5.60.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.1.tgz",
+ "integrity": "sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==",
"dev": true,
- "dependencies": {
- "@typescript-eslint/scope-manager": "5.22.0",
- "@typescript-eslint/type-utils": "5.22.0",
- "@typescript-eslint/utils": "5.22.0",
- "debug": "^4.3.2",
- "functional-red-black-tree": "^1.0.1",
- "ignore": "^5.1.8",
- "regexpp": "^3.2.0",
- "semver": "^7.3.5",
+ "requires": {
+ "@eslint-community/regexpp": "^4.4.0",
+ "@typescript-eslint/scope-manager": "5.60.1",
+ "@typescript-eslint/type-utils": "5.60.1",
+ "@typescript-eslint/utils": "5.60.1",
+ "debug": "^4.3.4",
+ "grapheme-splitter": "^1.0.4",
+ "ignore": "^5.2.0",
+ "natural-compare-lite": "^1.4.0",
+ "semver": "^7.3.7",
"tsutils": "^3.21.0"
},
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "@typescript-eslint/parser": "^5.0.0",
- "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
}
}
},
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "@typescript-eslint/parser": {
+ "version": "5.60.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.1.tgz",
+ "integrity": "sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q==",
"dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
+ "requires": {
+ "@typescript-eslint/scope-manager": "5.60.1",
+ "@typescript-eslint/types": "5.60.1",
+ "@typescript-eslint/typescript-estree": "5.60.1",
+ "debug": "^4.3.4"
},
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/@typescript-eslint/parser": {
- "version": "5.22.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.22.0.tgz",
- "integrity": "sha512-piwC4krUpRDqPaPbFaycN70KCP87+PC5WZmrWs+DlVOxxmF+zI6b6hETv7Quy4s9wbkV16ikMeZgXsvzwI3icQ==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/scope-manager": "5.22.0",
- "@typescript-eslint/types": "5.22.0",
- "@typescript-eslint/typescript-estree": "5.22.0",
- "debug": "^4.3.2"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/parser/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
}
}
},
- "node_modules/@typescript-eslint/parser/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "5.22.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.22.0.tgz",
- "integrity": "sha512-yA9G5NJgV5esANJCO0oF15MkBO20mIskbZ8ijfmlKIvQKg0ynVKfHZ15/nhAJN5m8Jn3X5qkwriQCiUntC9AbA==",
+ "@typescript-eslint/scope-manager": {
+ "version": "5.60.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz",
+ "integrity": "sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==",
"dev": true,
- "dependencies": {
- "@typescript-eslint/types": "5.22.0",
- "@typescript-eslint/visitor-keys": "5.22.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
+ "requires": {
+ "@typescript-eslint/types": "5.60.1",
+ "@typescript-eslint/visitor-keys": "5.60.1"
}
},
- "node_modules/@typescript-eslint/type-utils": {
- "version": "5.22.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.22.0.tgz",
- "integrity": "sha512-iqfLZIsZhK2OEJ4cQ01xOq3NaCuG5FQRKyHicA3xhZxMgaxQazLUHbH/B2k9y5i7l3+o+B5ND9Mf1AWETeMISA==",
+ "@typescript-eslint/type-utils": {
+ "version": "5.60.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.1.tgz",
+ "integrity": "sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A==",
"dev": true,
- "dependencies": {
- "@typescript-eslint/utils": "5.22.0",
- "debug": "^4.3.2",
+ "requires": {
+ "@typescript-eslint/typescript-estree": "5.60.1",
+ "@typescript-eslint/utils": "5.60.1",
+ "debug": "^4.3.4",
"tsutils": "^3.21.0"
},
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "*"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/type-utils/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
}
}
},
- "node_modules/@typescript-eslint/type-utils/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "@typescript-eslint/types": {
+ "version": "5.60.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.1.tgz",
+ "integrity": "sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==",
"dev": true
},
- "node_modules/@typescript-eslint/types": {
- "version": "5.22.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.22.0.tgz",
- "integrity": "sha512-T7owcXW4l0v7NTijmjGWwWf/1JqdlWiBzPqzAWhobxft0SiEvMJB56QXmeCQjrPuM8zEfGUKyPQr/L8+cFUBLw==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.22.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.22.0.tgz",
- "integrity": "sha512-EyBEQxvNjg80yinGE2xdhpDYm41so/1kOItl0qrjIiJ1kX/L/L8WWGmJg8ni6eG3DwqmOzDqOhe6763bF92nOw==",
+ "@typescript-eslint/typescript-estree": {
+ "version": "5.60.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz",
+ "integrity": "sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==",
"dev": true,
- "dependencies": {
- "@typescript-eslint/types": "5.22.0",
- "@typescript-eslint/visitor-keys": "5.22.0",
- "debug": "^4.3.2",
- "globby": "^11.0.4",
+ "requires": {
+ "@typescript-eslint/types": "5.60.1",
+ "@typescript-eslint/visitor-keys": "5.60.1",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
"is-glob": "^4.0.3",
- "semver": "^7.3.5",
+ "semver": "^7.3.7",
"tsutils": "^3.21.0"
},
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
}
}
},
- "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/@typescript-eslint/utils": {
- "version": "5.22.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.22.0.tgz",
- "integrity": "sha512-HodsGb037iobrWSUMS7QH6Hl1kppikjA1ELiJlNSTYf/UdMEwzgj0WIp+lBNb6WZ3zTwb0tEz51j0Wee3iJ3wQ==",
+ "@typescript-eslint/utils": {
+ "version": "5.60.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.1.tgz",
+ "integrity": "sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==",
"dev": true,
- "dependencies": {
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.2.0",
"@types/json-schema": "^7.0.9",
- "@typescript-eslint/scope-manager": "5.22.0",
- "@typescript-eslint/types": "5.22.0",
- "@typescript-eslint/typescript-estree": "5.22.0",
+ "@types/semver": "^7.3.12",
+ "@typescript-eslint/scope-manager": "5.60.1",
+ "@typescript-eslint/types": "5.60.1",
+ "@typescript-eslint/typescript-estree": "5.60.1",
"eslint-scope": "^5.1.1",
- "eslint-utils": "^3.0.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
+ "semver": "^7.3.7"
},
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
"dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/@typescript-eslint/utils/node_modules/estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true
+ }
}
},
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.22.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.22.0.tgz",
- "integrity": "sha512-DbgTqn2Dv5RFWluG88tn0pP6Ex0ROF+dpDO1TNNZdRtLjUr6bdznjA6f/qNqJLjd2PgguAES2Zgxh/JzwzETDg==",
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.60.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz",
+ "integrity": "sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==",
"dev": true,
- "dependencies": {
- "@typescript-eslint/types": "5.22.0",
- "eslint-visitor-keys": "^3.0.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
+ "requires": {
+ "@typescript-eslint/types": "5.60.1",
+ "eslint-visitor-keys": "^3.3.0"
}
},
- "node_modules/@ungap/promise-all-settled": {
+ "@ungap/promise-all-settled": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
"integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
"dev": true
},
- "node_modules/@wessberg/stringutil": {
+ "@wessberg/stringutil": {
"version": "1.0.19",
"resolved": "https://registry.npmjs.org/@wessberg/stringutil/-/stringutil-1.0.19.tgz",
- "integrity": "sha512-9AZHVXWlpN8Cn9k5BC/O0Dzb9E9xfEMXzYrNunwvkUTvuK7xgQPVRZpLo+jWCOZ5r8oBa8NIrHuPEu1hzbb6bg==",
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/@xmldom/xmldom": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.8.tgz",
- "integrity": "sha512-0LNz4EY8B/8xXY86wMrQ4tz6zEHZv9ehFMJPm8u2gq5lQ71cfRKdaKyxfJAx5aUoyzx0qzgURblTisPGgz3d+Q==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=10.0.0"
- }
+ "integrity": "sha512-9AZHVXWlpN8Cn9k5BC/O0Dzb9E9xfEMXzYrNunwvkUTvuK7xgQPVRZpLo+jWCOZ5r8oBa8NIrHuPEu1hzbb6bg=="
},
- "node_modules/abab": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
- "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q=="
+ "abab": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
+ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA=="
},
- "node_modules/abbrev": {
+ "abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
- "devOptional": true
- },
- "node_modules/abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "event-target-shim": "^5.0.0"
- },
- "engines": {
- "node": ">=6.5"
- }
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
},
- "node_modules/accepts": {
+ "accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
"integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
- "dependencies": {
+ "requires": {
"mime-types": "~2.1.34",
"negotiator": "0.6.3"
- },
- "engines": {
- "node": ">= 0.6"
}
},
- "node_modules/acorn": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
+ "acorn": {
+ "version": "8.9.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz",
+ "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ=="
},
- "node_modules/acorn-globals": {
+ "acorn-globals": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
"integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
- "dependencies": {
+ "requires": {
"acorn": "^7.1.1",
"acorn-walk": "^7.1.1"
- }
- },
- "node_modules/acorn-globals/node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "bin": {
- "acorn": "bin/acorn"
},
- "engines": {
- "node": ">=0.4.0"
+ "dependencies": {
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
+ }
}
},
- "node_modules/acorn-jsx": {
+ "acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
+ "dev": true
},
- "node_modules/acorn-walk": {
+ "acorn-walk": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/adal-node": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/adal-node/-/adal-node-0.2.4.tgz",
- "integrity": "sha512-zIcvbwQFKMUtKxxj8YMHeTT1o/TPXfVNsTXVgXD8sxwV6h4AFQgK77dRciGhuEF9/Sdm3UQPJVPc/6XxrccSeA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@xmldom/xmldom": "^0.8.3",
- "async": "^2.6.3",
- "axios": "^0.21.1",
- "date-utils": "*",
- "jws": "3.x.x",
- "underscore": ">= 1.3.1",
- "uuid": "^3.1.0",
- "xpath.js": "~1.1.0"
- },
- "engines": {
- "node": ">= 0.6.15"
- }
- },
- "node_modules/adal-node/node_modules/async": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
- "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "lodash": "^4.17.14"
- }
- },
- "node_modules/adal-node/node_modules/jws": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
- "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "jwa": "^1.4.1",
- "safe-buffer": "^5.0.1"
- }
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="
},
- "node_modules/adm-zip": {
- "version": "0.5.9",
- "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.9.tgz",
- "integrity": "sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg==",
- "engines": {
- "node": ">=6.0"
- }
+ "adm-zip": {
+ "version": "0.5.10",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz",
+ "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ=="
},
- "node_modules/after": {
+ "after": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
- "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
+ "integrity": "sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA=="
},
- "node_modules/agent-base": {
+ "agent-base": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dependencies": {
+ "requires": {
"debug": "4"
},
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/agent-base/node_modules/debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
- "node_modules/agent-base/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/agentkeepalive": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz",
- "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
+ "agentkeepalive": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz",
+ "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==",
+ "optional": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "depd": "^2.0.0",
"humanize-ms": "^1.2.1"
},
- "engines": {
- "node": ">= 4.0.0"
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "optional": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "optional": true
+ }
}
},
- "node_modules/aggregate-error": {
+ "aggregate-error": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
"integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
"optional": true,
- "dependencies": {
+ "requires": {
"clean-stack": "^2.0.0",
"indent-string": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
}
},
- "node_modules/ajv": {
+ "ajv": {
"version": "8.12.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
- "dependencies": {
+ "requires": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
"uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/ajv-formats": {
+ "ajv-formats": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
"integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
- "dependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependencies": {
+ "requires": {
"ajv": "^8.0.0"
- },
- "peerDependenciesMeta": {
- "ajv": {
- "optional": true
- }
}
},
- "node_modules/ansi-colors": {
+ "ansi-colors": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
"integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "devOptional": true,
- "engines": {
- "node": ">=8"
- }
+ "dev": true
},
- "node_modules/ansi-styles": {
+ "ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
+ "requires": {
"color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
- "dependencies": {
+ "requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
}
},
- "node_modules/aproba": {
+ "aproba": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
"integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
"optional": true
},
- "node_modules/are-we-there-yet": {
+ "are-we-there-yet": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
"integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
"optional": true,
- "dependencies": {
+ "requires": {
"delegates": "^1.0.0",
"readable-stream": "^3.6.0"
- },
- "engines": {
- "node": ">=10"
}
},
- "node_modules/argparse": {
+ "argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
},
- "node_modules/array-flatten": {
+ "array-buffer-byte-length": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
+ "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "is-array-buffer": "^3.0.1"
+ }
+ },
+ "array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
},
- "node_modules/array-includes": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz",
- "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==",
+ "array-includes": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
+ "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
"dev": true,
- "dependencies": {
+ "requires": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1",
- "get-intrinsic": "^1.1.1",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "get-intrinsic": "^1.1.3",
"is-string": "^1.0.7"
},
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "dependencies": {
+ "define-properties": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
+ "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+ "dev": true,
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.21.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz",
+ "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==",
+ "dev": true,
+ "requires": {
+ "array-buffer-byte-length": "^1.0.0",
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "es-set-tostringtag": "^2.0.1",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.2.0",
+ "get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.5",
+ "is-array-buffer": "^3.0.2",
+ "is-callable": "^1.2.7",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.10",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.4.3",
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trim": "^1.2.7",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.9"
+ }
+ },
+ "has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "dev": true
+ },
+ "internal-slot": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+ "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.2.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ }
+ },
+ "is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true
+ },
+ "is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ }
+ }
}
},
- "node_modules/array-union": {
+ "array-union": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
+ "dev": true
},
- "node_modules/array.prototype.flat": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz",
- "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==",
+ "array.prototype.flat": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
+ "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
"dev": true,
- "dependencies": {
+ "requires": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
"es-shim-unscopables": "^1.0.0"
},
- "engines": {
- "node": ">= 0.4"
+ "dependencies": {
+ "define-properties": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
+ "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+ "dev": true,
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.21.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz",
+ "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==",
+ "dev": true,
+ "requires": {
+ "array-buffer-byte-length": "^1.0.0",
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "es-set-tostringtag": "^2.0.1",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.2.0",
+ "get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.5",
+ "is-array-buffer": "^3.0.2",
+ "is-callable": "^1.2.7",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.10",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.4.3",
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trim": "^1.2.7",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.9"
+ }
+ },
+ "has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "dev": true
+ },
+ "internal-slot": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+ "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.2.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ }
+ },
+ "is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true
+ },
+ "is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ }
+ }
+ }
+ },
+ "array.prototype.flatmap": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
+ "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "dependencies": {
+ "define-properties": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
+ "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.21.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz",
+ "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==",
+ "requires": {
+ "array-buffer-byte-length": "^1.0.0",
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "es-set-tostringtag": "^2.0.1",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.2.0",
+ "get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.5",
+ "is-array-buffer": "^3.0.2",
+ "is-callable": "^1.2.7",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.10",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.4.3",
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trim": "^1.2.7",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.9"
+ }
+ },
+ "has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ=="
+ },
+ "internal-slot": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+ "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+ "requires": {
+ "get-intrinsic": "^1.2.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ }
+ },
+ "is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="
+ },
+ "is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ }
+ }
}
},
- "node_modules/arraybuffer.slice": {
+ "arraybuffer.slice": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
"integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog=="
},
- "node_modules/asap": {
+ "asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
},
- "node_modules/asn1": {
+ "asn1": {
"version": "0.2.6",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
"integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
- "dependencies": {
+ "requires": {
"safer-buffer": "~2.1.0"
}
},
- "node_modules/assert-plus": {
+ "assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "engines": {
- "node": ">=0.8"
- }
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="
},
- "node_modules/async": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
- "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g=="
- },
- "node_modules/async-stacktrace": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/async-stacktrace/-/async-stacktrace-0.0.2.tgz",
- "integrity": "sha512-7aRR7I8Vlo3qEqeLzkLzlZHdQFQvWbhDjxeWKKUDI1d3WA6DXqGOlYAHYe0E5dS/uc5Nldyul+Z3EhFcKkPauw==",
- "dev": true,
- "peer": true
+ "async": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
+ "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
},
- "node_modules/asynckit": {
+ "asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "available-typed-arrays": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
+ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw=="
},
- "node_modules/aws-sign2": {
+ "aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "engines": {
- "node": "*"
- }
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="
},
- "node_modules/aws4": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
- "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
+ "aws4": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
+ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
},
- "node_modules/axios": {
- "version": "0.21.4",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
- "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "follow-redirects": "^1.14.0"
+ "axios": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz",
+ "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==",
+ "requires": {
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
}
},
- "node_modules/axios-cookiejar-support": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-1.0.1.tgz",
- "integrity": "sha512-IZJxnAJ99XxiLqNeMOqrPbfR7fRyIfaoSLdPUf4AMQEGkH8URs0ghJK/xtqBsD+KsSr3pKl4DEQjCn834pHMig==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "is-redirect": "^1.0.0",
- "pify": "^5.0.0"
- },
- "engines": {
- "node": ">= 10.0.0"
- },
- "peerDependencies": {
- "@types/tough-cookie": ">=2.3.3",
- "axios": ">=0.16.2",
- "tough-cookie": ">=2.3.3"
- }
- },
- "node_modules/babel-plugin-polyfill-corejs2": {
+ "babel-plugin-polyfill-corejs2": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz",
"integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/compat-data": "^7.17.7",
"@babel/helper-define-polyfill-provider": "^0.4.0",
"semver": "^6.1.1"
},
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
}
},
- "node_modules/babel-plugin-polyfill-corejs3": {
+ "babel-plugin-polyfill-corejs3": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz",
"integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-define-polyfill-provider": "^0.4.0",
"core-js-compat": "^3.30.1"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/babel-plugin-polyfill-regenerator": {
+ "babel-plugin-polyfill-regenerator": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz",
"integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/helper-define-polyfill-provider": "^0.4.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
- "node_modules/backo2": {
+ "backo2": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
- "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
+ "integrity": "sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA=="
},
- "node_modules/bail": {
+ "bail": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
- "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="
},
- "node_modules/balanced-match": {
+ "balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
- "node_modules/base64-arraybuffer": {
+ "base64-arraybuffer": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz",
- "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=",
- "engines": {
- "node": ">= 0.6.0"
- }
+ "integrity": "sha512-a1eIFi4R9ySrbiMuyTGx5e92uRH5tQY6kArNcFaKBUleIoLjdjBg7Zxm3Mqm3Kmkf27HLR/1fnxX9q8GQ7Iavg=="
},
- "node_modules/base64-js": {
+ "base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
- "node_modules/base64id": {
+ "base64id": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
- "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
- "engines": {
- "node": "^4.5.0 || >= 5.9"
- }
+ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="
},
- "node_modules/bath-es5": {
+ "bath-es5": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/bath-es5/-/bath-es5-3.0.3.tgz",
"integrity": "sha512-PdCioDToH3t84lP40kUFCKWCOCH389Dl1kbC8FGoqOwamxsmqxxnJSXdkTOsPoNHXjem4+sJ+bbNoQm5zeCqxg=="
},
- "node_modules/bcrypt-pbkdf": {
+ "bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "dependencies": {
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "requires": {
"tweetnacl": "^0.14.3"
}
},
- "node_modules/bignumber.js": {
+ "big-integer": {
+ "version": "1.6.51",
+ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz",
+ "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==",
+ "dev": true
+ },
+ "bignumber.js": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
- "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==",
- "engines": {
- "node": "*"
- }
+ "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
},
- "node_modules/binary-extensions": {
+ "binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
+ "dev": true
},
- "node_modules/binary-search": {
+ "binary-search": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/binary-search/-/binary-search-1.3.6.tgz",
"integrity": "sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA=="
},
- "node_modules/bl": {
+ "bl": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz",
"integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==",
- "dependencies": {
+ "requires": {
"readable-stream": "^2.3.5",
"safe-buffer": "^5.1.1"
- }
- },
- "node_modules/bl/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "node_modules/bl/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dependencies": {
- "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"
- }
- },
- "node_modules/bl/node_modules/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==",
+ },
"dependencies": {
- "safe-buffer": "~5.1.0"
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "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": {
+ "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=="
+ }
+ }
+ },
+ "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==",
+ "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=="
+ }
+ }
+ }
}
},
- "node_modules/blob": {
+ "blob": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
"integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig=="
},
- "node_modules/bluebird": {
+ "bluebird": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz",
- "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE="
+ "integrity": "sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ=="
},
- "node_modules/body-parser": {
+ "body-parser": {
"version": "1.20.1",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
"integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
- "dependencies": {
+ "requires": {
"bytes": "3.1.2",
"content-type": "~1.0.4",
"debug": "2.6.9",
@@ -4235,154 +3339,122 @@
"raw-body": "2.5.1",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
- },
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
}
},
- "node_modules/boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "bplist-parser": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz",
+ "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==",
"dev": true,
- "peer": true
+ "requires": {
+ "big-integer": "^1.6.44"
+ }
},
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
+ "brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "requires": {
+ "balanced-match": "^1.0.0"
}
},
- "node_modules/braces": {
+ "braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dependencies": {
+ "requires": {
"fill-range": "^7.0.1"
- },
- "engines": {
- "node": ">=8"
}
},
- "node_modules/browser-process-hrtime": {
+ "browser-process-hrtime": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
"integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
},
- "node_modules/browser-stdout": {
+ "browser-stdout": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
"dev": true
},
- "node_modules/browserslist": {
+ "browserslist": {
"version": "4.21.9",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz",
"integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==",
"dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
+ "requires": {
"caniuse-lite": "^1.0.30001503",
"electron-to-chromium": "^1.4.431",
"node-releases": "^2.0.12",
"update-browserslist-db": "^1.0.11"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
- "node_modules/bson": {
+ "bson": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz",
- "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==",
- "engines": {
- "node": ">=0.6.19"
- }
+ "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg=="
},
- "node_modules/buffer": {
+ "buffer": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
+ "requires": {
"base64-js": "^1.3.1",
"ieee754": "^1.2.1"
}
},
- "node_modules/buffer-equal-constant-time": {
+ "buffer-equal-constant-time": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
- "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
+ "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
},
- "node_modules/buffer-from": {
+ "buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
},
- "node_modules/buffer-writer": {
+ "buffer-writer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz",
- "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==",
- "engines": {
- "node": ">=4"
- }
+ "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw=="
},
- "node_modules/builtins": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/builtins/-/builtins-4.1.0.tgz",
- "integrity": "sha512-1bPRZQtmKaO6h7qV1YHXNtr6nCK28k0Zo95KM4dXfILcZZwoHJBN1m3lfLv9LPkcOZlrSr+J1bzMaZFO98Yq0w==",
+ "builtins": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
+ "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"semver": "^7.0.0"
}
},
- "node_modules/bytes": {
+ "bundle-name": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz",
+ "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==",
+ "dev": true,
+ "requires": {
+ "run-applescript": "^5.0.0"
+ }
+ },
+ "busboy": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
+ "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
+ "requires": {
+ "streamsearch": "^1.1.0"
+ }
+ },
+ "bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "engines": {
- "node": ">= 0.8"
- }
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
},
- "node_modules/cacache": {
+ "cacache": {
"version": "15.3.0",
"resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
"integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
"optional": true,
- "dependencies": {
+ "requires": {
"@npmcli/fs": "^1.0.0",
"@npmcli/move-file": "^1.0.1",
"chownr": "^2.0.0",
@@ -4402,218 +3474,122 @@
"tar": "^6.0.2",
"unique-filename": "^1.1.1"
},
- "engines": {
- "node": ">= 10"
+ "dependencies": {
+ "minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "optional": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ }
}
},
- "node_modules/call-bind": {
+ "call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
- "dependencies": {
+ "requires": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/call-me-maybe": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
- "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==",
- "dev": true,
- "peer": true
- },
- "node_modules/callsites": {
+ "callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "engines": {
- "node": ">=6"
- }
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
},
- "node_modules/camelcase": {
+ "camelcase": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "dev": true
},
- "node_modules/caniuse-lite": {
- "version": "1.0.30001507",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001507.tgz",
- "integrity": "sha512-SFpUDoSLCaE5XYL2jfqe9ova/pbQHEmbheDf5r4diNwbAgR3qxM9NQtfsiSscjqoya5K7kFcHPUQ+VsUkIJR4A==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ]
+ "caniuse-lite": {
+ "version": "1.0.30001512",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz",
+ "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==",
+ "dev": true
},
- "node_modules/caseless": {
+ "caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
},
- "node_modules/cassandra-driver": {
- "version": "4.6.3",
- "resolved": "https://registry.npmjs.org/cassandra-driver/-/cassandra-driver-4.6.3.tgz",
- "integrity": "sha512-npW670TXjTHrdb15LUFN01wssb9vvz6SuNYcppesoKcUXx3Q29nXVhRtnvsnkG0BaSnDGvCCR4udrzYLsbh+sg==",
- "dependencies": {
+ "cassandra-driver": {
+ "version": "4.6.4",
+ "resolved": "https://registry.npmjs.org/cassandra-driver/-/cassandra-driver-4.6.4.tgz",
+ "integrity": "sha512-SksbIK0cZ2QZRx8ti7w+PnLqldyY+6kU2gRWFChwXFTtrD/ce8cQICDEHxyPwx+DeILwRnMrPf9cjUGizYw9Vg==",
+ "requires": {
"@types/long": "^4.0.0",
"@types/node": ">=8",
"adm-zip": "^0.5.3",
"long": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
}
},
- "node_modules/ccount": {
+ "ccount": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
- "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="
},
- "node_modules/chalk": {
+ "chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dependencies": {
+ "requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/channels": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/channels/-/channels-0.0.4.tgz",
- "integrity": "sha512-4zRxUJ/sN+GmA0NeB1wIBA8xzU6C30FsGkSIWob7OLIQVwMKE/ct9n3RLfq8XiLUpafK5gWg7+HuUVzXMXYqVw==",
- "dev": true,
- "peer": true
- },
- "node_modules/character-entities-html4": {
+ "character-entities-html4": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
- "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="
},
- "node_modules/character-entities-legacy": {
+ "character-entities-legacy": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
- "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/cheerio": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
- "integrity": "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "css-select": "~1.2.0",
- "dom-serializer": "~0.1.0",
- "entities": "~1.1.1",
- "htmlparser2": "^3.9.1",
- "lodash.assignin": "^4.0.9",
- "lodash.bind": "^4.1.4",
- "lodash.defaults": "^4.0.1",
- "lodash.filter": "^4.4.0",
- "lodash.flatten": "^4.2.0",
- "lodash.foreach": "^4.3.0",
- "lodash.map": "^4.4.0",
- "lodash.merge": "^4.4.0",
- "lodash.pick": "^4.2.1",
- "lodash.reduce": "^4.4.0",
- "lodash.reject": "^4.4.0",
- "lodash.some": "^4.4.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="
},
- "node_modules/chokidar": {
+ "chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
- "dependencies": {
+ "requires": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
+ "fsevents": "~2.3.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
},
- "engines": {
- "node": ">= 8.10.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/chokidar/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
"dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
}
},
- "node_modules/chownr": {
+ "chownr": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
- "optional": true,
- "engines": {
- "node": ">=10"
- }
+ "optional": true
},
- "node_modules/cjstoesm": {
+ "cjstoesm": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/cjstoesm/-/cjstoesm-2.1.2.tgz",
"integrity": "sha512-zAbvVcY+HSxy4tTRfskV7DEK7l8nJTjpO9wuQumUu48JWBezqNgt7p9CFe3KACZJtHk8BJECSvl3ccV1qYT2RA==",
- "dependencies": {
+ "requires": {
"@wessberg/stringutil": "^1.0.19",
"ansi-colors": "^4.1.3",
"commander": "^9.3.0",
@@ -4624,215 +3600,143 @@
"reserved-words": "^0.1.2",
"resolve": "^1.22.0"
},
- "bin": {
- "cjstoesm": "bin/cjstoesm.js"
- },
- "engines": {
- "node": ">=14.9.0"
- },
- "peerDependencies": {
- "typescript": ">=3.2.x || >= 4.x"
- }
- },
- "node_modules/cjstoesm/node_modules/ansi-colors": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
- "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cjstoesm/node_modules/commander": {
- "version": "9.5.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
- "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
- "engines": {
- "node": "^12.20.0 || >=14"
+ "dependencies": {
+ "ansi-colors": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="
+ },
+ "commander": {
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
+ "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ=="
+ }
}
},
- "node_modules/clean-css": {
+ "clean-css": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz",
"integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==",
- "dependencies": {
+ "requires": {
"source-map": "~0.6.0"
- },
- "engines": {
- "node": ">= 10.0"
}
},
- "node_modules/clean-stack": {
+ "clean-stack": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
"integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "optional": true,
- "engines": {
- "node": ">=6"
- }
+ "optional": true
},
- "node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
+ "strip-ansi": "^6.0.1",
"wrap-ansi": "^7.0.0"
}
},
- "node_modules/cliui/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cliui/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/clone-deep": {
+ "clone-deep": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
"integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"is-plain-object": "^2.0.4",
"kind-of": "^6.0.2",
"shallow-clone": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
}
},
- "node_modules/cluster-key-slot": {
+ "cluster-key-slot": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz",
- "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==",
- "dev": true,
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
+ "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA=="
},
- "node_modules/color-convert": {
+ "color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
+ "requires": {
"color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
}
},
- "node_modules/color-name": {
+ "color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
- "node_modules/color-support": {
+ "color-support": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
"integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
- "optional": true,
- "bin": {
- "color-support": "bin.js"
- }
+ "optional": true
+ },
+ "colorette": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
+ "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==",
+ "dev": true
},
- "node_modules/combined-stream": {
+ "combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dependencies": {
+ "requires": {
"delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
}
},
- "node_modules/comma-separated-tokens": {
+ "comma-separated-tokens": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz",
- "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
+ "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg=="
},
- "node_modules/commander": {
+ "commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
},
- "node_modules/commondir": {
+ "commondir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
"integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
"dev": true
},
- "node_modules/compatfactory": {
+ "compatfactory": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/compatfactory/-/compatfactory-1.0.1.tgz",
"integrity": "sha512-hR9u0HSZTKDNNchPtMHg6myeNx0XO+av7UZIJPsi4rPALJBHi/W5Mbwi19hC/xm6y3JkYpxVYjTqnSGsU5X/iw==",
- "dependencies": {
+ "requires": {
"helpertypes": "^0.0.18"
- },
- "engines": {
- "node": ">=14.9.0"
- },
- "peerDependencies": {
- "typescript": ">=3.x || >= 4.x"
}
},
- "node_modules/component-bind": {
+ "component-bind": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
- "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
+ "integrity": "sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw=="
},
- "node_modules/component-emitter": {
+ "component-emitter": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
},
- "node_modules/component-inherit": {
+ "component-inherit": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
- "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
+ "integrity": "sha512-w+LhYREhatpVqTESyGFg3NlP6Iu0kEKUHETY9GoZP/pQyW4mHFZuFWRUCIqVPZ36ueVLtoOEZaAqbCF2RDndaA=="
},
- "node_modules/concat-map": {
+ "concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
},
- "node_modules/concurrently": {
+ "concurrently": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.0.tgz",
"integrity": "sha512-nnLMxO2LU492mTUj9qX/az/lESonSZu81UznYDoXtz1IQf996ixVqPAgHXwvHiHCAef/7S8HIK+fTFK7Ifk8YA==",
"dev": true,
- "dependencies": {
+ "requires": {
"chalk": "^4.1.2",
"date-fns": "^2.30.0",
"lodash": "^4.17.21",
@@ -4843,743 +3747,383 @@
"tree-kill": "^1.2.2",
"yargs": "^17.7.2"
},
- "bin": {
- "conc": "dist/bin/concurrently.js",
- "concurrently": "dist/bin/concurrently.js"
- },
- "engines": {
- "node": "^14.13.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
- }
- },
- "node_modules/concurrently/node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/concurrently/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/concurrently/node_modules/yargs": {
- "version": "17.7.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
- "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
- "dev": true,
"dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/concurrently/node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "dev": true,
- "engines": {
- "node": ">=12"
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
}
},
- "node_modules/console-control-strings": {
+ "console-control-strings": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
"optional": true
},
- "node_modules/content-disposition": {
+ "content-disposition": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
- "dependencies": {
+ "requires": {
"safe-buffer": "5.2.1"
- },
- "engines": {
- "node": ">= 0.6"
}
},
- "node_modules/content-disposition/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/content-type": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
- "engines": {
- "node": ">= 0.6"
- }
+ "content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="
},
- "node_modules/convert-source-map": {
+ "convert-source-map": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
"integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
"dev": true
},
- "node_modules/cookie": {
+ "cookie": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
- "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
- "engines": {
- "node": ">= 0.6"
- }
+ "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
},
- "node_modules/cookie-parser": {
+ "cookie-parser": {
"version": "1.4.6",
"resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz",
"integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==",
- "dependencies": {
+ "requires": {
"cookie": "0.4.1",
"cookie-signature": "1.0.6"
- },
- "engines": {
- "node": ">= 0.8.0"
}
},
- "node_modules/cookie-signature": {
+ "cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
- "node_modules/cookiejar": {
+ "cookiejar": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz",
"integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw=="
},
- "node_modules/core-js-compat": {
+ "core-js-compat": {
"version": "3.31.0",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz",
"integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==",
"dev": true,
- "dependencies": {
+ "requires": {
"browserslist": "^4.21.5"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
}
},
- "node_modules/core-util-is": {
+ "core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
},
- "node_modules/cross-spawn": {
+ "cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dependencies": {
+ "requires": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
}
},
- "node_modules/crosspath": {
+ "crosspath": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/crosspath/-/crosspath-2.0.0.tgz",
"integrity": "sha512-ju88BYCQ2uvjO2bR+SsgLSTwTSctU+6Vp2ePbKPgSCZyy4MWZxYsT738DlKVRE5utUjobjPRm1MkTYKJxCmpTA==",
- "dependencies": {
+ "requires": {
"@types/node": "^17.0.36"
},
- "engines": {
- "node": ">=14.9.0"
- }
- },
- "node_modules/crosspath/node_modules/@types/node": {
- "version": "17.0.45",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz",
- "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
- },
- "node_modules/css-select": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
- "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==",
- "dev": true,
- "peer": true,
"dependencies": {
- "boolbase": "~1.0.0",
- "css-what": "2.1",
- "domutils": "1.5.1",
- "nth-check": "~1.0.1"
- }
- },
- "node_modules/css-what": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
- "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": "*"
+ "@types/node": {
+ "version": "17.0.45",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz",
+ "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
+ }
}
},
- "node_modules/cssom": {
+ "cssom": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
"integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw=="
},
- "node_modules/cssstyle": {
+ "cssstyle": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
"integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
- "dependencies": {
+ "requires": {
"cssom": "~0.3.6"
},
- "engines": {
- "node": ">=8"
+ "dependencies": {
+ "cssom": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
+ }
}
},
- "node_modules/cssstyle/node_modules/cssom": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
- },
- "node_modules/dashdash": {
+ "dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "dependencies": {
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "requires": {
"assert-plus": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10"
}
},
- "node_modules/data-urls": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.1.tgz",
- "integrity": "sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw==",
- "dependencies": {
- "abab": "^2.0.3",
+ "data-urls": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz",
+ "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==",
+ "requires": {
+ "abab": "^2.0.6",
"whatwg-mimetype": "^3.0.0",
- "whatwg-url": "^10.0.0"
+ "whatwg-url": "^11.0.0"
},
- "engines": {
- "node": ">=12"
+ "dependencies": {
+ "whatwg-url": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
+ "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
+ "requires": {
+ "tr46": "^3.0.0",
+ "webidl-conversions": "^7.0.0"
+ }
+ }
}
},
- "node_modules/date-fns": {
+ "date-fns": {
"version": "2.30.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
"integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/runtime": "^7.21.0"
- },
- "engines": {
- "node": ">=0.11"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/date-fns"
}
},
- "node_modules/date-format": {
+ "date-format": {
"version": "4.0.14",
"resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz",
- "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==",
- "engines": {
- "node": ">=4.0"
- }
+ "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg=="
},
- "node_modules/date-utils": {
- "version": "1.2.21",
- "resolved": "https://registry.npmjs.org/date-utils/-/date-utils-1.2.21.tgz",
- "integrity": "sha512-wJMBjqlwXR0Iv0wUo/lFbhSQ7MmG1hl36iuxuE91kW+5b5sWbase73manEqNH9sOLFAMG83B4ffNKq9/Iq0FVA==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">0.4.0"
- }
- },
- "node_modules/debug": {
+ "debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
+ "requires": {
"ms": "2.0.0"
}
},
- "node_modules/decamelize": {
+ "decamelize": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
"integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "dev": true
},
- "node_modules/decimal.js": {
- "version": "10.3.1",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
- "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ=="
+ "decimal.js": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
+ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA=="
},
- "node_modules/decompress-response": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
- "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "default-browser": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz",
+ "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==",
"dev": true,
- "optional": true,
- "peer": true,
- "dependencies": {
- "mimic-response": "^3.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "requires": {
+ "bundle-name": "^3.0.0",
+ "default-browser-id": "^3.0.0",
+ "execa": "^7.1.1",
+ "titleize": "^3.0.0"
}
},
- "node_modules/deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "default-browser-id": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz",
+ "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==",
"dev": true,
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">=4.0.0"
+ "requires": {
+ "bplist-parser": "^0.2.0",
+ "untildify": "^4.0.0"
}
},
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
- },
- "node_modules/define-lazy-prop": {
+ "define-lazy-prop": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
- "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
- "engines": {
- "node": ">=8"
- }
+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="
},
- "node_modules/define-properties": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
- "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
- "dependencies": {
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "requires": {
+ "object-keys": "^1.0.12"
}
},
- "node_modules/delayed-stream": {
+ "delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "engines": {
- "node": ">=0.4.0"
- }
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
},
- "node_modules/delegates": {
+ "delegates": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
"optional": true
},
- "node_modules/denque": {
+ "denque": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz",
- "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==",
- "engines": {
- "node": ">=0.10"
- }
+ "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw=="
},
- "node_modules/depd": {
+ "depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "engines": {
- "node": ">= 0.8"
- }
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
},
- "node_modules/dereference-json-schema": {
+ "dereference-json-schema": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/dereference-json-schema/-/dereference-json-schema-0.2.1.tgz",
"integrity": "sha512-uzJsrg225owJyRQ8FNTPHIuBOdSzIZlHhss9u6W8mp7jJldHqGuLv9cULagP/E26QVJDnjtG8U7Dw139mM1ydA=="
},
- "node_modules/destroy": {
+ "destroy": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
- }
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
},
- "node_modules/detect-libc": {
+ "detect-libc": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz",
"integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==",
- "optional": true,
- "engines": {
- "node": ">=8"
- }
+ "optional": true
},
- "node_modules/dezalgo": {
+ "dezalgo": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
"integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==",
- "dependencies": {
+ "requires": {
"asap": "^2.0.0",
"wrappy": "1"
}
},
- "node_modules/diff": {
+ "diff": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
"integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
- "dev": true,
- "engines": {
- "node": ">=0.3.1"
- }
+ "dev": true
},
- "node_modules/dir-glob": {
+ "dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
"dev": true,
- "dependencies": {
+ "requires": {
"path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
}
},
- "node_modules/dirty": {
+ "dirty": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/dirty/-/dirty-1.1.3.tgz",
- "integrity": "sha512-PlnV9+KeJ6bh8o5qQZqRnD80Wegijyr47dpwxCIuJ6SzwJ6/deO+NRTEnq/mubIYtBvBBgWznlE6dZ+nQsS/og==",
- "engines": {
- "node": ">=12.13.0"
- }
+ "integrity": "sha512-PlnV9+KeJ6bh8o5qQZqRnD80Wegijyr47dpwxCIuJ6SzwJ6/deO+NRTEnq/mubIYtBvBBgWznlE6dZ+nQsS/og=="
},
- "node_modules/doctrine": {
+ "doctrine": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
"integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
"dev": true,
- "dependencies": {
+ "requires": {
"esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/dom-serializer": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
- "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "domelementtype": "^1.3.0",
- "entities": "^1.1.1"
}
},
- "node_modules/domelementtype": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
- "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
- "dev": true,
- "peer": true
- },
- "node_modules/domexception": {
+ "domexception": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
"integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==",
- "dependencies": {
+ "requires": {
"webidl-conversions": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/domhandler": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
- "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "domelementtype": "1"
- }
- },
- "node_modules/domutils": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
- "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "dom-serializer": "0",
- "domelementtype": "1"
}
},
- "node_modules/ecc-jsbn": {
+ "ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "dependencies": {
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "requires": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
}
},
- "node_modules/ecdsa-sig-formatter": {
+ "ecdsa-sig-formatter": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
"integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
- "dependencies": {
+ "requires": {
"safe-buffer": "^5.0.1"
}
},
- "node_modules/ee-first": {
+ "ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
- "node_modules/ejs": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.7.tgz",
- "integrity": "sha512-BIar7R6abbUxDA3bfXrO4DSgwo8I+fB5/1zgujl3HLLjwd6+9iOnrT+t3grn2qbk9vOgBubXOFwX2m9axoFaGw==",
- "dependencies": {
+ "ejs": {
+ "version": "3.1.9",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz",
+ "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==",
+ "requires": {
"jake": "^10.8.5"
- },
- "bin": {
- "ejs": "bin/cli.js"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/elasticsearch": {
- "version": "16.7.3",
- "resolved": "https://registry.npmjs.org/elasticsearch/-/elasticsearch-16.7.3.tgz",
- "integrity": "sha512-e9kUNhwnIlu47fGAr4W6yZJbkpsgQJB0TqNK8rCANe1J4P65B1sGnbCFTgcKY3/dRgCWnuP1AJ4obvzW604xEQ==",
- "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
- "dev": true,
- "peer": true,
- "dependencies": {
- "agentkeepalive": "^3.4.1",
- "chalk": "^1.0.0",
- "lodash": "^4.17.10"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/elasticsearch/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/elasticsearch/node_modules/ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/elasticsearch/node_modules/chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/elasticsearch/node_modules/strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/elasticsearch/node_modules/supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/elasticsearch7": {
- "name": "@elastic/elasticsearch",
- "version": "7.17.0",
- "resolved": "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-7.17.0.tgz",
- "integrity": "sha512-5QLPCjd0uLmLj1lSuKSThjNpq39f6NmlTy9ROLFwG5gjyTgpwSqufDeYG/Fm43Xs05uF7WcscoO7eguI3HuuYA==",
- "dependencies": {
- "debug": "^4.3.1",
- "hpagent": "^0.1.1",
- "ms": "^2.1.3",
- "secure-json-parse": "^2.4.0"
- }
- },
- "node_modules/elasticsearch7/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
}
},
- "node_modules/elasticsearch7/node_modules/debug/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/elasticsearch7/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- },
- "node_modules/electron-to-chromium": {
- "version": "1.4.440",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.440.tgz",
- "integrity": "sha512-r6dCgNpRhPwiWlxbHzZQ/d9swfPaEJGi8ekqRBwQYaR3WmA5VkqQfBWSDDjuJU1ntO+W9tHx8OHV/96Q8e0dVw==",
+ "electron-to-chromium": {
+ "version": "1.4.450",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.450.tgz",
+ "integrity": "sha512-BLG5HxSELlrMx7dJ2s+8SFlsCtJp37Zpk2VAxyC6CZtbc+9AJeZHfYHbrlSgdXp6saQ8StMqOTEDaBKgA7u1sw==",
"dev": true
},
- "node_modules/emoji-regex": {
+ "emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "devOptional": true
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
- "node_modules/encodeurl": {
+ "encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
- "engines": {
- "node": ">= 0.8"
- }
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
},
- "node_modules/encoding": {
+ "encoding": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
"integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
"optional": true,
- "dependencies": {
+ "requires": {
"iconv-lite": "^0.6.2"
- }
- },
- "node_modules/encoding/node_modules/iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "optional": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
},
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "optional": true,
- "peer": true,
"dependencies": {
- "once": "^1.4.0"
+ "iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "optional": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ }
+ }
}
},
- "node_modules/engine.io": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz",
- "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==",
- "dependencies": {
+ "engine.io": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.6.1.tgz",
+ "integrity": "sha512-dfs8EVg/i7QjFsXxn7cCRQ+Wai1G1TlEvHhdYEi80fxn5R1vZ2K661O6v/rezj1FP234SZ14r9CmJke99iYDGg==",
+ "requires": {
"accepts": "~1.3.4",
"base64id": "2.0.0",
"cookie": "~0.4.1",
@@ -5587,15 +4131,32 @@
"engine.io-parser": "~2.2.0",
"ws": "~7.4.2"
},
- "engines": {
- "node": ">=8.0.0"
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "ws": {
+ "version": "7.4.6",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
+ "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A=="
+ }
}
},
- "node_modules/engine.io-client": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz",
- "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==",
- "dependencies": {
+ "engine.io-client": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.3.tgz",
+ "integrity": "sha512-qsgyc/CEhJ6cgMUwxRRtOndGVhIu5hpL5tR4umSpmX/MvkFoIxUTM7oFMDQumHNzlNLwSVy6qhstFPoWTf7dOw==",
+ "requires": {
"component-emitter": "~1.3.0",
"component-inherit": "0.0.3",
"debug": "~3.1.0",
@@ -5607,41 +4168,28 @@
"ws": "~7.4.2",
"xmlhttprequest-ssl": "~1.6.2",
"yeast": "0.1.2"
- }
- },
- "node_modules/engine.io-client/node_modules/debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/engine.io-client/node_modules/ws": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
- "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
- "engines": {
- "node": ">=8.3.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
},
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
},
- "utf-8-validate": {
- "optional": true
+ "ws": {
+ "version": "7.4.6",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
+ "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A=="
}
}
},
- "node_modules/engine.io-parser": {
+ "engine.io-parser": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz",
"integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==",
- "dependencies": {
+ "requires": {
"after": "0.8.2",
"arraybuffer.slice": "~0.0.7",
"base64-arraybuffer": "0.1.4",
@@ -5649,7525 +4197,898 @@
"has-binary2": "~1.0.2"
}
},
- "node_modules/engine.io/node_modules/debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/engine.io/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- },
- "node_modules/engine.io/node_modules/ws": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
- "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
- "engines": {
- "node": ">=8.3.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/entities": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
- "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "enhanced-resolve": {
+ "version": "5.15.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
+ "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==",
"dev": true,
- "peer": true
+ "requires": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ }
},
- "node_modules/env-paths": {
+ "env-paths": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
"integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
- "optional": true,
- "engines": {
- "node": ">=6"
- }
+ "optional": true
},
- "node_modules/ep_etherpad-lite": {
- "version": "1.8.14",
- "resolved": "https://registry.npmjs.org/ep_etherpad-lite/-/ep_etherpad-lite-1.8.14.tgz",
- "integrity": "sha512-w3TRnwsozofewLCRkHV8/Afzyc4yXmQfoYSGEy/aGkGWFtgFYu/VDyPYDedvFQtANqPsHNArtmUPNVuw8nSLKg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "async": "^3.2.0",
- "async-stacktrace": "0.0.2",
- "channels": "0.0.4",
- "cheerio": "0.22.0",
- "clean-css": "4.2.3",
- "cookie-parser": "1.4.5",
- "cross-spawn": "^7.0.3",
- "ejs": "^3.1.6",
- "etherpad-require-kernel": "1.0.11",
- "etherpad-yajsml": "0.0.4",
- "express": "4.17.1",
- "express-rate-limit": "5.2.6",
- "express-session": "1.17.2",
- "find-root": "1.1.0",
- "formidable": "1.2.2",
- "http-errors": "1.8.0",
- "js-cookie": "^2.2.1",
- "jsonminify": "0.4.1",
- "languages4translatewiki": "0.1.3",
- "lodash.clonedeep": "4.5.0",
- "log4js": "0.6.38",
- "measured-core": "1.51.1",
- "mime-types": "^2.1.27",
- "nodeify": "1.0.1",
- "npm": "6.14.13",
- "openapi-backend": "^3.9.1",
- "proxy-addr": "^2.0.6",
- "rate-limiter-flexible": "^2.1.4",
- "rehype": "^10.0.0",
- "rehype-minify-whitespace": "^4.0.5",
- "request": "2.88.2",
- "resolve": "1.20.0",
- "security": "1.0.0",
- "semver": "5.7.1",
- "socket.io": "^2.4.1",
- "terser": "^4.7.0",
- "threads": "^1.4.0",
- "tiny-worker": "^2.3.0",
- "tinycon": "0.6.8",
- "ueberdb2": "^1.4.7",
- "underscore": "1.13.1",
- "unorm": "1.6.0",
- "wtfnode": "^0.9.0"
- },
- "bin": {
- "etherpad-lite": "node/server.js"
- },
- "engines": {
- "node": ">=12.13.0",
- "npm": ">=5.5.1"
- }
+ "err-code": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
+ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
+ "optional": true
},
- "node_modules/ep_etherpad-lite/node_modules/@apidevtools/json-schema-ref-parser": {
- "version": "9.1.2",
- "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.1.2.tgz",
- "integrity": "sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@jsdevtools/ono": "^7.1.3",
- "@types/json-schema": "^7.0.6",
- "call-me-maybe": "^1.0.1",
- "js-yaml": "^4.1.0"
+ "es-abstract": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz",
+ "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.1.1",
+ "get-symbol-description": "^1.0.0",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.2",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
+ "is-negative-zero": "^2.0.1",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.1",
+ "is-string": "^1.0.7",
+ "is-weakref": "^1.0.1",
+ "object-inspect": "^1.11.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.2",
+ "string.prototype.trimend": "^1.0.4",
+ "string.prototype.trimstart": "^1.0.4",
+ "unbox-primitive": "^1.0.1"
}
},
- "node_modules/ep_etherpad-lite/node_modules/@azure/core-tracing": {
- "version": "1.0.0-preview.12",
- "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.12.tgz",
- "integrity": "sha512-nvo2Wc4EKZGN6eFu9n3U7OXmASmL8VxoPIH7xaD6OlQqi44bouF0YIi9ID5rEsKLiAU59IYx6M297nqWVMWPDg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@opentelemetry/api": "^1.0.0",
- "tslib": "^2.2.0"
+ "es-aggregate-error": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/es-aggregate-error/-/es-aggregate-error-1.0.9.tgz",
+ "integrity": "sha512-fvnX40sb538wdU6r4s35cq4EY6Lr09Upj40BEVem4LEsuW8XgQep9yD5Q1U2KftokNp1rWODFJ2qwZSsAjFpbg==",
+ "requires": {
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "function-bind": "^1.1.1",
+ "functions-have-names": "^1.2.3",
+ "get-intrinsic": "^1.1.3",
+ "globalthis": "^1.0.3",
+ "has-property-descriptors": "^1.0.0"
},
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/@azure/identity": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-1.5.2.tgz",
- "integrity": "sha512-vqyeRbd2i0h9F4mqW5JbkP1xfabqKQ21l/81osKhpOQ2LtwaJW6nw4+0PsVYnxcbPHFCIZt6EWAk74a3OGYZJA==",
- "dev": true,
- "peer": true,
"dependencies": {
- "@azure/core-auth": "^1.3.0",
- "@azure/core-client": "^1.0.0",
- "@azure/core-rest-pipeline": "^1.1.0",
- "@azure/core-tracing": "1.0.0-preview.12",
- "@azure/logger": "^1.0.0",
- "@azure/msal-node": "1.0.0-beta.6",
- "@types/stoppable": "^1.1.0",
- "axios": "^0.21.1",
- "events": "^3.0.0",
- "jws": "^4.0.0",
- "msal": "^1.0.2",
- "open": "^7.0.0",
- "qs": "^6.7.0",
- "stoppable": "^1.1.0",
- "tslib": "^2.0.0",
- "uuid": "^8.3.0"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "optionalDependencies": {
- "keytar": "^7.3.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/@azure/identity/node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "dev": true,
- "peer": true,
- "bin": {
- "uuid": "dist/bin/uuid"
+ "define-properties": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
+ "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.21.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz",
+ "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==",
+ "requires": {
+ "array-buffer-byte-length": "^1.0.0",
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "es-set-tostringtag": "^2.0.1",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.2.0",
+ "get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.5",
+ "is-array-buffer": "^3.0.2",
+ "is-callable": "^1.2.7",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.10",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.4.3",
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trim": "^1.2.7",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.9"
+ }
+ },
+ "has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ=="
+ },
+ "internal-slot": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+ "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+ "requires": {
+ "get-intrinsic": "^1.2.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ }
+ },
+ "is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="
+ },
+ "is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ }
+ }
}
},
- "node_modules/ep_etherpad-lite/node_modules/@azure/msal-node": {
- "version": "1.0.0-beta.6",
- "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.0.0-beta.6.tgz",
- "integrity": "sha512-ZQI11Uz1j0HJohb9JZLRD8z0moVcPks1AFW4Q/Gcl67+QvH4aKEJti7fjCcipEEZYb/qzLSO8U6IZgPYytsiJQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@azure/msal-common": "^4.0.0",
- "axios": "^0.21.1",
- "jsonwebtoken": "^8.5.1",
- "uuid": "^8.3.0"
+ "es-set-tostringtag": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
+ "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+ "requires": {
+ "get-intrinsic": "^1.1.3",
+ "has": "^1.0.3",
+ "has-tostringtag": "^1.0.0"
}
},
- "node_modules/ep_etherpad-lite/node_modules/@azure/msal-node/node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "dev": true,
- "peer": true,
- "bin": {
- "uuid": "dist/bin/uuid"
+ "es-shim-unscopables": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "requires": {
+ "has": "^1.0.3"
}
},
- "node_modules/ep_etherpad-lite/node_modules/@js-joda/core": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-3.2.0.tgz",
- "integrity": "sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg==",
- "dev": true,
- "peer": true
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "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"
+ }
},
- "node_modules/ep_etherpad-lite/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "eslint": {
+ "version": "8.44.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz",
+ "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==",
"dev": true,
- "peer": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.4.0",
+ "@eslint/eslintrc": "^2.1.0",
+ "@eslint/js": "8.44.0",
+ "@humanwhocodes/config-array": "^0.11.10",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.0",
+ "eslint-visitor-keys": "^3.4.1",
+ "espree": "^9.6.0",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0"
},
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "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"
+ }
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.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==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
}
},
- "node_modules/ep_etherpad-lite/node_modules/bail": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
- "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==",
+ "eslint-config-etherpad": {
+ "version": "3.0.15",
+ "resolved": "https://registry.npmjs.org/eslint-config-etherpad/-/eslint-config-etherpad-3.0.15.tgz",
+ "integrity": "sha512-gdhxFlnkcFQhH1fTvJg1xQMmSoNAlYmGOEr8dQQFiO/AWxI7yBlrNVNlHOAyxfHx6c+KeXlLdofZslfL3su45w==",
"dev": true,
- "peer": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "requires": {
+ "@rushstack/eslint-patch": "^1.3.2",
+ "@typescript-eslint/eslint-plugin": "^5.60.1",
+ "@typescript-eslint/parser": "^5.60.1",
+ "eslint-import-resolver-typescript": "^3.5.5",
+ "eslint-plugin-cypress": "^2.13.3",
+ "eslint-plugin-eslint-comments": "^3.2.0",
+ "eslint-plugin-import": "^2.27.5",
+ "eslint-plugin-mocha": "^10.1.0",
+ "eslint-plugin-n": "^15.7.0",
+ "eslint-plugin-prefer-arrow": "^1.2.3",
+ "eslint-plugin-promise": "^6.1.1",
+ "eslint-plugin-you-dont-need-lodash-underscore": "^6.12.0"
}
},
- "node_modules/ep_etherpad-lite/node_modules/bl": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz",
- "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==",
+ "eslint-import-resolver-node": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz",
+ "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==",
"dev": true,
- "peer": true,
+ "requires": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.11.0",
+ "resolve": "^1.22.1"
+ },
"dependencies": {
- "buffer": "^6.0.3",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ }
}
},
- "node_modules/ep_etherpad-lite/node_modules/bl/node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "eslint-import-resolver-typescript": {
+ "version": "3.5.5",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz",
+ "integrity": "sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==",
"dev": true,
- "peer": true
+ "requires": {
+ "debug": "^4.3.4",
+ "enhanced-resolve": "^5.12.0",
+ "eslint-module-utils": "^2.7.4",
+ "get-tsconfig": "^4.5.0",
+ "globby": "^13.1.3",
+ "is-core-module": "^2.11.0",
+ "is-glob": "^4.0.3",
+ "synckit": "^0.8.5"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "globby": {
+ "version": "13.2.1",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.1.tgz",
+ "integrity": "sha512-DPCBxctI7dN4EeIqjW2KGqgdcUMbrhJ9AzON+PlxCtvppWhubTLD4+a0GFxiym14ZvacUydTPjLPc2DlKz7EIg==",
+ "dev": true,
+ "requires": {
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.11",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^4.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "slash": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
+ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
+ "dev": true
+ }
+ }
},
- "node_modules/ep_etherpad-lite/node_modules/body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "eslint-module-utils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
+ "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
"dev": true,
- "peer": true,
- "dependencies": {
- "bytes": "3.1.0",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "on-finished": "~2.3.0",
- "qs": "6.7.0",
- "raw-body": "2.4.0",
- "type-is": "~1.6.17"
+ "requires": {
+ "debug": "^3.2.7"
},
- "engines": {
- "node": ">= 0.8"
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ }
}
},
- "node_modules/ep_etherpad-lite/node_modules/body-parser/node_modules/depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
+ "eslint-plugin-cypress": {
+ "version": "2.13.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.13.3.tgz",
+ "integrity": "sha512-nAPjZE5WopCsgJwl3vHm5iafpV+ZRO76Z9hMyRygWhmg5ODXDPd+9MaPl7kdJ2azj+sO87H3P1PRnggIrz848g==",
"dev": true,
- "peer": true,
- "engines": {
- "node": ">= 0.6"
+ "requires": {
+ "globals": "^11.12.0"
+ },
+ "dependencies": {
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ }
}
},
- "node_modules/ep_etherpad-lite/node_modules/body-parser/node_modules/http-errors": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
- "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "eslint-plugin-es": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz",
+ "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==",
"dev": true,
- "peer": true,
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
+ "requires": {
+ "eslint-utils": "^2.0.0",
+ "regexpp": "^3.0.0"
},
- "engines": {
- "node": ">= 0.6"
+ "dependencies": {
+ "eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true
+ }
}
},
- "node_modules/ep_etherpad-lite/node_modules/body-parser/node_modules/qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "eslint-plugin-eslint-comments": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz",
+ "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==",
"dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.6"
+ "requires": {
+ "escape-string-regexp": "^1.0.5",
+ "ignore": "^5.0.5"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true
+ }
}
},
- "node_modules/ep_etherpad-lite/node_modules/body-parser/node_modules/setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "eslint-plugin-import": {
+ "version": "2.27.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz",
+ "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==",
"dev": true,
- "peer": true
+ "requires": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "array.prototype.flatmap": "^1.3.1",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.7",
+ "eslint-module-utils": "^2.7.4",
+ "has": "^1.0.3",
+ "is-core-module": "^2.11.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.values": "^1.1.6",
+ "resolve": "^1.22.1",
+ "semver": "^6.3.0",
+ "tsconfig-paths": "^3.14.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
},
- "node_modules/ep_etherpad-lite/node_modules/bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "eslint-plugin-mocha": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.1.0.tgz",
+ "integrity": "sha512-xLqqWUF17llsogVOC+8C6/jvQ+4IoOREbN7ZCHuOHuD6cT5cDD4h7f2LgsZuzMAiwswWE21tO7ExaknHVDrSkw==",
"dev": true,
- "peer": true,
- "engines": {
- "node": ">= 0.8"
+ "requires": {
+ "eslint-utils": "^3.0.0",
+ "rambda": "^7.1.0"
}
},
- "node_modules/ep_etherpad-lite/node_modules/ccount": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz",
- "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==",
+ "eslint-plugin-n": {
+ "version": "15.7.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz",
+ "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==",
"dev": true,
- "peer": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "requires": {
+ "builtins": "^5.0.1",
+ "eslint-plugin-es": "^4.1.0",
+ "eslint-utils": "^3.0.0",
+ "ignore": "^5.1.1",
+ "is-core-module": "^2.11.0",
+ "minimatch": "^3.1.2",
+ "resolve": "^1.22.1",
+ "semver": "^7.3.8"
}
},
- "node_modules/ep_etherpad-lite/node_modules/character-entities-html4": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz",
- "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==",
+ "eslint-plugin-prefer-arrow": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz",
+ "integrity": "sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==",
+ "dev": true
+ },
+ "eslint-plugin-promise": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz",
+ "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==",
+ "dev": true
+ },
+ "eslint-plugin-you-dont-need-lodash-underscore": {
+ "version": "6.12.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-you-dont-need-lodash-underscore/-/eslint-plugin-you-dont-need-lodash-underscore-6.12.0.tgz",
+ "integrity": "sha512-WF4mNp+k2532iswT6iUd1BX6qjd3AV4cFy/09VC82GY9SsRtvkxhUIx7JNGSe0/bLyd57oTr4inPFiIaENXhGw==",
"dev": true,
- "peer": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "requires": {
+ "kebab-case": "^1.0.0"
}
},
- "node_modules/ep_etherpad-lite/node_modules/character-entities-legacy": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
- "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
+ "eslint-scope": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
+ "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
"dev": true,
- "peer": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
}
},
- "node_modules/ep_etherpad-lite/node_modules/clean-css": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
- "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
+ "eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
"dev": true,
- "peer": true,
- "dependencies": {
- "source-map": "~0.6.0"
+ "requires": {
+ "eslint-visitor-keys": "^2.0.0"
},
- "engines": {
- "node": ">= 4.0"
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true
+ }
}
},
- "node_modules/ep_etherpad-lite/node_modules/comma-separated-tokens": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
- "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==",
+ "eslint-visitor-keys": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
+ "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
+ "dev": true
+ },
+ "esm": {
+ "version": "3.2.25",
+ "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
+ "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
+ "optional": true
+ },
+ "espree": {
+ "version": "9.6.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz",
+ "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==",
"dev": true,
- "peer": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "requires": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
}
},
- "node_modules/ep_etherpad-lite/node_modules/content-disposition": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
- "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "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": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
"dev": true,
- "peer": true,
- "dependencies": {
- "safe-buffer": "5.1.2"
- },
- "engines": {
- "node": ">= 0.6"
+ "requires": {
+ "estraverse": "^5.1.0"
}
},
- "node_modules/ep_etherpad-lite/node_modules/cookie-parser": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz",
- "integrity": "sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw==",
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
- "peer": true,
- "dependencies": {
- "cookie": "0.4.0",
- "cookie-signature": "1.0.6"
- },
- "engines": {
- "node": ">= 0.8.0"
+ "requires": {
+ "estraverse": "^5.2.0"
}
},
- "node_modules/ep_etherpad-lite/node_modules/cookie-parser/node_modules/cookie": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="
+ },
+ "estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
+ },
+ "etherpad-cli-client": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/etherpad-cli-client/-/etherpad-cli-client-2.0.2.tgz",
+ "integrity": "sha512-yPsTD7cfGhnfd4fcrIW7Y8/ru+n93YpriP4Av83O35VYzMQVusgIaRWQ4xj+rbZkd5MBE+nmFaxIGkv0joJSSQ==",
"dev": true,
- "peer": true,
- "engines": {
- "node": ">= 0.6"
+ "requires": {
+ "async": "^3.2.1",
+ "socket.io-client": "^2.3.0",
+ "superagent": "^7.1.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "mime": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
+ "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "superagent": {
+ "version": "7.1.5",
+ "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.5.tgz",
+ "integrity": "sha512-HQYyGuDRFGmZ6GNC4hq2f37KnsY9Lr0/R1marNZTgMweVDQLTLJJ6DGQ9Tj/xVVs5HEnop9EMmTbywb5P30aqw==",
+ "dev": true,
+ "requires": {
+ "component-emitter": "^1.3.0",
+ "cookiejar": "^2.1.3",
+ "debug": "^4.3.4",
+ "fast-safe-stringify": "^2.1.1",
+ "form-data": "^4.0.0",
+ "formidable": "^2.0.1",
+ "methods": "^1.1.2",
+ "mime": "^2.5.0",
+ "qs": "^6.10.3",
+ "readable-stream": "^3.6.0",
+ "semver": "^7.3.7"
+ }
+ }
}
},
- "node_modules/ep_etherpad-lite/node_modules/destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==",
- "dev": true,
- "peer": true
+ "etherpad-require-kernel": {
+ "version": "1.0.15",
+ "resolved": "https://registry.npmjs.org/etherpad-require-kernel/-/etherpad-require-kernel-1.0.15.tgz",
+ "integrity": "sha512-t8Z950sCfgS4ssex6SHhb3Ni8BQL0XdvZhMQWWDLhSWttyHgf+zPSMglBODyAUGh8mBX0XwGK7hpICGBHsvSGQ=="
},
- "node_modules/ep_etherpad-lite/node_modules/etherpad-require-kernel": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/etherpad-require-kernel/-/etherpad-require-kernel-1.0.11.tgz",
- "integrity": "sha512-I03bkNiBMrcsJRSl0IqotUU70s9v6VISrITj/cQgAoVQSoRFbV/NUn2fPIF4LskysTpmwlmwJqgfL2FZpAtxEw==",
- "dev": true,
- "peer": true
+ "etherpad-yajsml": {
+ "version": "0.0.12",
+ "resolved": "https://registry.npmjs.org/etherpad-yajsml/-/etherpad-yajsml-0.0.12.tgz",
+ "integrity": "sha512-lVCqsZYpFsuIz417h+O83I7eadNXJ3MnQavriFa52/KTwj6xPAzEYr0PvH7KTxcqyAFtW7ItoTNVXe2h7zGxlw==",
+ "requires": {
+ "mime": "^1.6.0"
+ }
},
- "node_modules/ep_etherpad-lite/node_modules/etherpad-yajsml": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/etherpad-yajsml/-/etherpad-yajsml-0.0.4.tgz",
- "integrity": "sha512-rxpEOMZmv6DOCQeaDo6tztneaKF9ZxbLo/+hQcV+hn0lNrxJZ7MKIPD2pTWWnNLj6gFFfs6QQ67RfMNWIr3fSA==",
- "dev": true,
- "peer": true
+ "events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
},
- "node_modules/ep_etherpad-lite/node_modules/express": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+ "execa": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz",
+ "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==",
"dev": true,
- "peer": true,
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.1",
+ "human-signals": "^4.3.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^3.0.7",
+ "strip-final-newline": "^3.0.0"
+ },
"dependencies": {
- "accepts": "~1.3.7",
+ "human-signals": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz",
+ "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true
+ },
+ "mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "dev": true
+ },
+ "npm-run-path": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz",
+ "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==",
+ "dev": true,
+ "requires": {
+ "path-key": "^4.0.0"
+ }
+ },
+ "onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^4.0.0"
+ }
+ },
+ "path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "dev": true
+ },
+ "strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "dev": true
+ }
+ }
+ },
+ "express": {
+ "version": "4.18.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
+ "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
+ "requires": {
+ "accepts": "~1.3.8",
"array-flatten": "1.1.1",
- "body-parser": "1.19.0",
- "content-disposition": "0.5.3",
+ "body-parser": "1.20.1",
+ "content-disposition": "0.5.4",
"content-type": "~1.0.4",
- "cookie": "0.4.0",
+ "cookie": "0.5.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
- "depd": "~1.1.2",
+ "depd": "2.0.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
- "finalhandler": "~1.1.2",
+ "finalhandler": "1.2.0",
"fresh": "0.5.2",
+ "http-errors": "2.0.0",
"merge-descriptors": "1.0.1",
"methods": "~1.1.2",
- "on-finished": "~2.3.0",
+ "on-finished": "2.4.1",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.5",
- "qs": "6.7.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.1.2",
- "send": "0.17.1",
- "serve-static": "1.14.1",
- "setprototypeof": "1.1.1",
- "statuses": "~1.5.0",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/express-rate-limit": {
- "version": "5.2.6",
- "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-5.2.6.tgz",
- "integrity": "sha512-nE96xaxGfxiS5jP3tD3kIW1Jg9yQgX0rXCs3rCkZtmbWHEGyotwaezkLj7bnB41Z0uaOLM8W4AX6qHao4IZ2YA==",
- "dev": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/express-session": {
- "version": "1.17.2",
- "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.2.tgz",
- "integrity": "sha512-mPcYcLA0lvh7D4Oqr5aNJFMtBMKPLl++OKKxkHzZ0U0oDq1rpKBnkR5f5vCHR26VeArlTOEF9td4x5IjICksRQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "cookie": "0.4.1",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "~2.0.0",
- "on-headers": "~1.0.2",
- "parseurl": "~1.3.3",
- "safe-buffer": "5.2.1",
- "uid-safe": "~2.1.5"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/express-session/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/express/node_modules/cookie": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/express/node_modules/depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/express/node_modules/qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/express/node_modules/setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
- "dev": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/finalhandler": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "statuses": "~1.5.0",
- "unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/formidable": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz",
- "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==",
- "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau",
- "dev": true,
- "peer": true,
- "funding": {
- "url": "https://ko-fi.com/tunnckoCore/commissions"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/hast-util-embedded": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-1.0.6.tgz",
- "integrity": "sha512-JQMW+TJe0UAIXZMjCJ4Wf6ayDV9Yv3PBDPsHD4ExBpAspJ6MOcCX+nzVF+UJVv7OqPcg852WEMSHQPoRA+FVSw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "hast-util-is-element": "^1.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/hast-util-from-parse5": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz",
- "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "ccount": "^1.0.3",
- "hastscript": "^5.0.0",
- "property-information": "^5.0.0",
- "web-namespaces": "^1.1.2",
- "xtend": "^4.0.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/hast-util-is-element": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz",
- "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==",
- "dev": true,
- "peer": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/hast-util-parse-selector": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz",
- "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==",
- "dev": true,
- "peer": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/hast-util-to-html": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-6.1.0.tgz",
- "integrity": "sha512-IlC+LG2HGv0Y8js3wqdhg9O2sO4iVpRDbHOPwXd7qgeagpGsnY49i8yyazwqS35RA35WCzrBQE/n0M6GG/ewxA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "ccount": "^1.0.0",
- "comma-separated-tokens": "^1.0.1",
- "hast-util-is-element": "^1.0.0",
- "hast-util-whitespace": "^1.0.0",
- "html-void-elements": "^1.0.0",
- "property-information": "^5.2.0",
- "space-separated-tokens": "^1.0.0",
- "stringify-entities": "^2.0.0",
- "unist-util-is": "^3.0.0",
- "xtend": "^4.0.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/hast-util-to-html/node_modules/unist-util-is": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz",
- "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==",
- "dev": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/hast-util-whitespace": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz",
- "integrity": "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==",
- "dev": true,
- "peer": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/hastscript": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz",
- "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "comma-separated-tokens": "^1.0.0",
- "hast-util-parse-selector": "^2.0.0",
- "property-information": "^5.0.0",
- "space-separated-tokens": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/html-void-elements": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz",
- "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==",
- "dev": true,
- "peer": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/http-errors": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz",
- "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/http-errors/node_modules/depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/http-errors/node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/js-cookie": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz",
- "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==",
- "dev": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/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==",
- "dev": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/jsonminify": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/jsonminify/-/jsonminify-0.4.1.tgz",
- "integrity": "sha512-pDzdcFAuojViJ1WFbK/Xosjcjo/avT8XVlntRAvUrna7ghYDrCfXafPsoyTiyEzfk6iOdclkUKH/+Q1+uuW8sA==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.8.0",
- "npm": ">=1.1.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/log4js": {
- "version": "0.6.38",
- "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz",
- "integrity": "sha512-Cd+klbx7lkiaamEId9/0odHxv/PFHDz2E12kEfd6/CzIOZD084DzysASR/Dot4i1dYPBQKC3r2XIER+dfbLOmw==",
- "deprecated": "0.x is no longer supported. Please upgrade to 6.x or higher.",
- "dev": true,
- "peer": true,
- "dependencies": {
- "readable-stream": "~1.0.2",
- "semver": "~4.3.3"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/log4js/node_modules/readable-stream": {
- "version": "1.0.34",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/log4js/node_modules/semver": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
- "integrity": "sha512-IrpJ+yoG4EOH8DFWuVg+8H1kW1Oaof0Wxe7cPcXW3x9BjkN/eVo54F15LyqemnDIUYskQWr9qvl/RihmSy6+xQ==",
- "dev": true,
- "peer": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/measured-core": {
- "version": "1.51.1",
- "resolved": "https://registry.npmjs.org/measured-core/-/measured-core-1.51.1.tgz",
- "integrity": "sha512-DZQP9SEwdqqYRvT2slMK81D/7xwdxXosZZBtLVfPSo6y5P672FBTbzHVdN4IQyUkUpcVOR9pIvtUy5Ryl7NKyg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "binary-search": "^1.3.3",
- "optional-js": "^2.0.0"
- },
- "engines": {
- "node": ">= 5.12"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
- "dev": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/mssql": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/mssql/-/mssql-7.3.5.tgz",
- "integrity": "sha512-LTOSQ3k8yZTBfO/5XwH7zC6fDPBx1sYgMXZyP/k+ErWrhZN8faAvDq+/gMlm9DaFG9yaOipHedF5JSPV17EHNw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@tediousjs/connection-string": "^0.3.0",
- "debug": "^4.3.3",
- "rfdc": "^1.3.0",
- "tarn": "^3.0.1",
- "tedious": "^11.4.0"
- },
- "bin": {
- "mssql": "bin/mssql"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/mssql/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/mssql/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/node-abort-controller": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-2.0.0.tgz",
- "integrity": "sha512-L8RfEgjBTHAISTuagw51PprVAqNZoG6KSB6LQ6H1bskMVkFs5E71IyjauLBv3XbuomJlguWF/VnRHdJ1gqiAqA==",
- "dev": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm": {
- "version": "6.14.13",
- "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.13.tgz",
- "integrity": "sha512-SRl4jJi0EBHY2xKuu98FLRMo3VhYQSA6otyLnjSEiHoSG/9shXCFNJy9tivpUJvtkN9s6VDdItHa5Rn+fNBzag==",
- "bundleDependencies": [
- "abbrev",
- "ansicolors",
- "ansistyles",
- "aproba",
- "archy",
- "bin-links",
- "bluebird",
- "byte-size",
- "cacache",
- "call-limit",
- "chownr",
- "ci-info",
- "cli-columns",
- "cli-table3",
- "cmd-shim",
- "columnify",
- "config-chain",
- "debuglog",
- "detect-indent",
- "detect-newline",
- "dezalgo",
- "editor",
- "figgy-pudding",
- "find-npm-prefix",
- "fs-vacuum",
- "fs-write-stream-atomic",
- "gentle-fs",
- "glob",
- "graceful-fs",
- "has-unicode",
- "hosted-git-info",
- "iferr",
- "imurmurhash",
- "infer-owner",
- "inflight",
- "inherits",
- "ini",
- "init-package-json",
- "is-cidr",
- "json-parse-better-errors",
- "JSONStream",
- "lazy-property",
- "libcipm",
- "libnpm",
- "libnpmaccess",
- "libnpmhook",
- "libnpmorg",
- "libnpmsearch",
- "libnpmteam",
- "libnpx",
- "lock-verify",
- "lockfile",
- "lodash._baseindexof",
- "lodash._baseuniq",
- "lodash._bindcallback",
- "lodash._cacheindexof",
- "lodash._createcache",
- "lodash._getnative",
- "lodash.clonedeep",
- "lodash.restparam",
- "lodash.union",
- "lodash.uniq",
- "lodash.without",
- "lru-cache",
- "meant",
- "mississippi",
- "mkdirp",
- "move-concurrently",
- "node-gyp",
- "nopt",
- "normalize-package-data",
- "npm-audit-report",
- "npm-cache-filename",
- "npm-install-checks",
- "npm-lifecycle",
- "npm-package-arg",
- "npm-packlist",
- "npm-pick-manifest",
- "npm-profile",
- "npm-registry-fetch",
- "npm-user-validate",
- "npmlog",
- "once",
- "opener",
- "osenv",
- "pacote",
- "path-is-inside",
- "promise-inflight",
- "qrcode-terminal",
- "query-string",
- "qw",
- "read-cmd-shim",
- "read-installed",
- "read-package-json",
- "read-package-tree",
- "read",
- "readable-stream",
- "readdir-scoped-modules",
- "request",
- "retry",
- "rimraf",
- "safe-buffer",
- "semver",
- "sha",
- "slide",
- "sorted-object",
- "sorted-union-stream",
- "ssri",
- "stringify-package",
- "tar",
- "text-table",
- "tiny-relative-date",
- "uid-number",
- "umask",
- "unique-filename",
- "unpipe",
- "update-notifier",
- "uuid",
- "validate-npm-package-license",
- "validate-npm-package-name",
- "which",
- "worker-farm",
- "write-file-atomic"
- ],
- "dev": true,
- "peer": true,
- "dependencies": {
- "abbrev": "~1.1.1",
- "ansicolors": "~0.3.2",
- "ansistyles": "~0.1.3",
- "aproba": "^2.0.0",
- "archy": "~1.0.0",
- "bin-links": "^1.1.8",
- "bluebird": "^3.5.5",
- "byte-size": "^5.0.1",
- "cacache": "^12.0.3",
- "call-limit": "^1.1.1",
- "chownr": "^1.1.4",
- "ci-info": "^2.0.0",
- "cli-columns": "^3.1.2",
- "cli-table3": "^0.5.1",
- "cmd-shim": "^3.0.3",
- "columnify": "~1.5.4",
- "config-chain": "^1.1.12",
- "debuglog": "*",
- "detect-indent": "~5.0.0",
- "detect-newline": "^2.1.0",
- "dezalgo": "~1.0.3",
- "editor": "~1.0.0",
- "figgy-pudding": "^3.5.1",
- "find-npm-prefix": "^1.0.2",
- "fs-vacuum": "~1.2.10",
- "fs-write-stream-atomic": "~1.0.10",
- "gentle-fs": "^2.3.1",
- "glob": "^7.1.6",
- "graceful-fs": "^4.2.4",
- "has-unicode": "~2.0.1",
- "hosted-git-info": "^2.8.9",
- "iferr": "^1.0.2",
- "imurmurhash": "*",
- "infer-owner": "^1.0.4",
- "inflight": "~1.0.6",
- "inherits": "^2.0.4",
- "ini": "^1.3.8",
- "init-package-json": "^1.10.3",
- "is-cidr": "^3.0.0",
- "json-parse-better-errors": "^1.0.2",
- "JSONStream": "^1.3.5",
- "lazy-property": "~1.0.0",
- "libcipm": "^4.0.8",
- "libnpm": "^3.0.1",
- "libnpmaccess": "^3.0.2",
- "libnpmhook": "^5.0.3",
- "libnpmorg": "^1.0.1",
- "libnpmsearch": "^2.0.2",
- "libnpmteam": "^1.0.2",
- "libnpx": "^10.2.4",
- "lock-verify": "^2.1.0",
- "lockfile": "^1.0.4",
- "lodash._baseindexof": "*",
- "lodash._baseuniq": "~4.6.0",
- "lodash._bindcallback": "*",
- "lodash._cacheindexof": "*",
- "lodash._createcache": "*",
- "lodash._getnative": "*",
- "lodash.clonedeep": "~4.5.0",
- "lodash.restparam": "*",
- "lodash.union": "~4.6.0",
- "lodash.uniq": "~4.5.0",
- "lodash.without": "~4.4.0",
- "lru-cache": "^5.1.1",
- "meant": "^1.0.2",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.5",
- "move-concurrently": "^1.0.1",
- "node-gyp": "^5.1.0",
- "nopt": "^4.0.3",
- "normalize-package-data": "^2.5.0",
- "npm-audit-report": "^1.3.3",
- "npm-cache-filename": "~1.0.2",
- "npm-install-checks": "^3.0.2",
- "npm-lifecycle": "^3.1.5",
- "npm-package-arg": "^6.1.1",
- "npm-packlist": "^1.4.8",
- "npm-pick-manifest": "^3.0.2",
- "npm-profile": "^4.0.4",
- "npm-registry-fetch": "^4.0.7",
- "npm-user-validate": "^1.0.1",
- "npmlog": "~4.1.2",
- "once": "~1.4.0",
- "opener": "^1.5.2",
- "osenv": "^0.1.5",
- "pacote": "^9.5.12",
- "path-is-inside": "~1.0.2",
- "promise-inflight": "~1.0.1",
- "qrcode-terminal": "^0.12.0",
- "query-string": "^6.8.2",
- "qw": "~1.0.1",
- "read": "~1.0.7",
- "read-cmd-shim": "^1.0.5",
- "read-installed": "~4.0.3",
- "read-package-json": "^2.1.1",
- "read-package-tree": "^5.3.1",
- "readable-stream": "^3.6.0",
- "readdir-scoped-modules": "^1.1.0",
- "request": "^2.88.0",
- "retry": "^0.12.0",
- "rimraf": "^2.7.1",
- "safe-buffer": "^5.1.2",
- "semver": "^5.7.1",
- "sha": "^3.0.0",
- "slide": "~1.1.6",
- "sorted-object": "~2.0.1",
- "sorted-union-stream": "~2.1.3",
- "ssri": "^6.0.2",
- "stringify-package": "^1.0.1",
- "tar": "^4.4.13",
- "text-table": "~0.2.0",
- "tiny-relative-date": "^1.3.0",
- "uid-number": "0.0.6",
- "umask": "~1.1.0",
- "unique-filename": "^1.1.1",
- "unpipe": "~1.0.0",
- "update-notifier": "^2.5.0",
- "uuid": "^3.3.3",
- "validate-npm-package-license": "^3.0.4",
- "validate-npm-package-name": "~3.0.0",
- "which": "^1.3.1",
- "worker-farm": "^1.7.0",
- "write-file-atomic": "^2.4.3"
- },
- "bin": {
- "npm": "bin/npm-cli.js",
- "npx": "bin/npx-cli.js"
- },
- "engines": {
- "node": "6 >=6.2.0 || 8 || >=9.3.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/abbrev": {
- "version": "1.1.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/agent-base": {
- "version": "4.3.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "es6-promisify": "^5.0.0"
- },
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/agentkeepalive": {
- "version": "3.5.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "humanize-ms": "^1.2.1"
- },
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ansi-align": {
- "version": "2.0.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "string-width": "^2.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ansi-regex": {
- "version": "2.1.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ansi-styles": {
- "version": "3.2.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ansicolors": {
- "version": "0.3.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ansistyles": {
- "version": "0.1.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/aproba": {
- "version": "2.0.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/archy": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/are-we-there-yet": {
- "version": "1.1.4",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream": {
- "version": "2.3.6",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "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"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/are-we-there-yet/node_modules/string_decoder": {
- "version": "1.1.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/asap": {
- "version": "2.0.6",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/asn1": {
- "version": "0.2.4",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "safer-buffer": "~2.1.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/assert-plus": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/asynckit": {
- "version": "0.4.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/aws-sign2": {
- "version": "0.7.0",
- "dev": true,
- "inBundle": true,
- "license": "Apache-2.0",
- "peer": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/aws4": {
- "version": "1.8.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/balanced-match": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/bcrypt-pbkdf": {
- "version": "1.0.2",
- "dev": true,
- "inBundle": true,
- "license": "BSD-3-Clause",
- "optional": true,
- "peer": true,
- "dependencies": {
- "tweetnacl": "^0.14.3"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/bin-links": {
- "version": "1.1.8",
- "dev": true,
- "inBundle": true,
- "license": "Artistic-2.0",
- "peer": true,
- "dependencies": {
- "bluebird": "^3.5.3",
- "cmd-shim": "^3.0.0",
- "gentle-fs": "^2.3.0",
- "graceful-fs": "^4.1.15",
- "npm-normalize-package-bin": "^1.0.0",
- "write-file-atomic": "^2.3.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/bluebird": {
- "version": "3.5.5",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/boxen": {
- "version": "1.3.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ansi-align": "^2.0.0",
- "camelcase": "^4.0.0",
- "chalk": "^2.0.1",
- "cli-boxes": "^1.0.0",
- "string-width": "^2.0.0",
- "term-size": "^1.2.0",
- "widest-line": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/brace-expansion": {
- "version": "1.1.11",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/buffer-from": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/builtins": {
- "version": "1.0.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/byline": {
- "version": "5.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/byte-size": {
- "version": "5.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cacache": {
- "version": "12.0.3",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "bluebird": "^3.5.5",
- "chownr": "^1.1.1",
- "figgy-pudding": "^3.5.1",
- "glob": "^7.1.4",
- "graceful-fs": "^4.1.15",
- "infer-owner": "^1.0.3",
- "lru-cache": "^5.1.1",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.6.3",
- "ssri": "^6.0.1",
- "unique-filename": "^1.1.1",
- "y18n": "^4.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/call-limit": {
- "version": "1.1.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/camelcase": {
- "version": "4.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/capture-stack-trace": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/caseless": {
- "version": "0.12.0",
- "dev": true,
- "inBundle": true,
- "license": "Apache-2.0",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/chalk": {
- "version": "2.4.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/chownr": {
- "version": "1.1.4",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ci-info": {
- "version": "2.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cidr-regex": {
- "version": "2.0.10",
- "dev": true,
- "inBundle": true,
- "license": "BSD-2-Clause",
- "peer": true,
- "dependencies": {
- "ip-regex": "^2.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cli-boxes": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cli-columns": {
- "version": "3.1.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "string-width": "^2.0.0",
- "strip-ansi": "^3.0.1"
- },
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cli-table3": {
- "version": "0.5.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "object-assign": "^4.1.0",
- "string-width": "^2.1.1"
- },
- "engines": {
- "node": ">=6"
- },
- "optionalDependencies": {
- "colors": "^1.1.2"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cliui": {
- "version": "5.0.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cliui/node_modules/ansi-regex": {
- "version": "4.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cliui/node_modules/is-fullwidth-code-point": {
- "version": "2.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cliui/node_modules/string-width": {
- "version": "3.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cliui/node_modules/strip-ansi": {
- "version": "5.2.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ansi-regex": "^4.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/clone": {
- "version": "1.0.4",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cmd-shim": {
- "version": "3.0.3",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "mkdirp": "~0.5.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/code-point-at": {
- "version": "1.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/color-convert": {
- "version": "1.9.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "color-name": "^1.1.1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/color-name": {
- "version": "1.1.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/colors": {
- "version": "1.3.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">=0.1.90"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/columnify": {
- "version": "1.5.4",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "strip-ansi": "^3.0.0",
- "wcwidth": "^1.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/combined-stream": {
- "version": "1.0.6",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/concat-map": {
- "version": "0.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/concat-stream": {
- "version": "1.6.2",
- "dev": true,
- "engines": [
- "node >= 0.8"
- ],
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream": {
- "version": "2.3.6",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "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"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/concat-stream/node_modules/string_decoder": {
- "version": "1.1.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/config-chain": {
- "version": "1.1.12",
- "dev": true,
- "inBundle": true,
- "peer": true,
- "dependencies": {
- "ini": "^1.3.4",
- "proto-list": "~1.2.1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/configstore": {
- "version": "3.1.5",
- "dev": true,
- "inBundle": true,
- "license": "BSD-2-Clause",
- "peer": true,
- "dependencies": {
- "dot-prop": "^4.2.1",
- "graceful-fs": "^4.1.2",
- "make-dir": "^1.0.0",
- "unique-string": "^1.0.0",
- "write-file-atomic": "^2.0.0",
- "xdg-basedir": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/console-control-strings": {
- "version": "1.1.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/copy-concurrently": {
- "version": "1.0.5",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "aproba": "^1.1.1",
- "fs-write-stream-atomic": "^1.0.8",
- "iferr": "^0.1.5",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/copy-concurrently/node_modules/aproba": {
- "version": "1.2.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/copy-concurrently/node_modules/iferr": {
- "version": "0.1.5",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/core-util-is": {
- "version": "1.0.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/create-error-class": {
- "version": "3.0.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "capture-stack-trace": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cross-spawn": {
- "version": "5.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cross-spawn/node_modules/lru-cache": {
- "version": "4.1.5",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cross-spawn/node_modules/yallist": {
- "version": "2.1.2",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/crypto-random-string": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/cyclist": {
- "version": "0.2.2",
- "dev": true,
- "inBundle": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/dashdash": {
- "version": "1.14.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "assert-plus": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/debug": {
- "version": "3.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/debug/node_modules/ms": {
- "version": "2.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/debuglog": {
- "version": "1.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/decamelize": {
- "version": "1.2.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/decode-uri-component": {
- "version": "0.2.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/deep-extend": {
- "version": "0.6.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/defaults": {
- "version": "1.0.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "clone": "^1.0.2"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/define-properties": {
- "version": "1.1.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "object-keys": "^1.0.12"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/delayed-stream": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/delegates": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/detect-indent": {
- "version": "5.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/detect-newline": {
- "version": "2.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/dezalgo": {
- "version": "1.0.3",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "asap": "^2.0.0",
- "wrappy": "1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/dot-prop": {
- "version": "4.2.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "is-obj": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/dotenv": {
- "version": "5.0.1",
- "dev": true,
- "inBundle": true,
- "license": "BSD-2-Clause",
- "peer": true,
- "engines": {
- "node": ">=4.6.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/duplexer3": {
- "version": "0.1.4",
- "dev": true,
- "inBundle": true,
- "license": "BSD-3-Clause",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/duplexify": {
- "version": "3.6.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "stream-shift": "^1.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/duplexify/node_modules/readable-stream": {
- "version": "2.3.6",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "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"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/duplexify/node_modules/string_decoder": {
- "version": "1.1.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ecc-jsbn": {
- "version": "0.1.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/editor": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/emoji-regex": {
- "version": "7.0.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/encoding": {
- "version": "0.1.12",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "iconv-lite": "~0.4.13"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/end-of-stream": {
- "version": "1.4.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "once": "^1.4.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/env-paths": {
- "version": "2.2.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/err-code": {
- "version": "1.1.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/errno": {
- "version": "0.1.7",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "prr": "~1.0.1"
- },
- "bin": {
- "errno": "cli.js"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/es-abstract": {
- "version": "1.12.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "es-to-primitive": "^1.1.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.1",
- "is-callable": "^1.1.3",
- "is-regex": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/es-to-primitive": {
- "version": "1.2.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/es6-promise": {
- "version": "4.2.8",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/es6-promisify": {
- "version": "5.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "es6-promise": "^4.0.3"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/execa": {
- "version": "0.7.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/execa/node_modules/get-stream": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/extend": {
- "version": "3.0.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/extsprintf": {
- "version": "1.3.0",
- "dev": true,
- "engines": [
- "node >=0.6.0"
- ],
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fast-json-stable-stringify": {
- "version": "2.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/figgy-pudding": {
- "version": "3.5.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/find-npm-prefix": {
- "version": "1.0.2",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/flush-write-stream": {
- "version": "1.0.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream": {
- "version": "2.3.6",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "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"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/flush-write-stream/node_modules/string_decoder": {
- "version": "1.1.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/forever-agent": {
- "version": "0.6.1",
- "dev": true,
- "inBundle": true,
- "license": "Apache-2.0",
- "peer": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/form-data": {
- "version": "2.3.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "1.0.6",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 0.12"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/from2": {
- "version": "2.3.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/from2/node_modules/readable-stream": {
- "version": "2.3.6",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "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"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/from2/node_modules/string_decoder": {
- "version": "1.1.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-minipass": {
- "version": "1.2.7",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "minipass": "^2.6.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-minipass/node_modules/minipass": {
- "version": "2.9.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-vacuum": {
- "version": "1.2.10",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "path-is-inside": "^1.0.1",
- "rimraf": "^2.5.2"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-write-stream-atomic": {
- "version": "1.0.10",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "iferr": "^0.1.5",
- "imurmurhash": "^0.1.4",
- "readable-stream": "1 || 2"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/iferr": {
- "version": "0.1.5",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream": {
- "version": "2.3.6",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "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"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/string_decoder": {
- "version": "1.1.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/fs.realpath": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/function-bind": {
- "version": "1.1.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gauge": {
- "version": "2.7.4",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gauge/node_modules/aproba": {
- "version": "1.2.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gauge/node_modules/string-width": {
- "version": "1.0.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/genfun": {
- "version": "5.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gentle-fs": {
- "version": "2.3.1",
- "dev": true,
- "inBundle": true,
- "license": "Artistic-2.0",
- "peer": true,
- "dependencies": {
- "aproba": "^1.1.2",
- "chownr": "^1.1.2",
- "cmd-shim": "^3.0.3",
- "fs-vacuum": "^1.2.10",
- "graceful-fs": "^4.1.11",
- "iferr": "^0.1.5",
- "infer-owner": "^1.0.4",
- "mkdirp": "^0.5.1",
- "path-is-inside": "^1.0.2",
- "read-cmd-shim": "^1.0.1",
- "slide": "^1.1.6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gentle-fs/node_modules/aproba": {
- "version": "1.2.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/gentle-fs/node_modules/iferr": {
- "version": "0.1.5",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/get-caller-file": {
- "version": "2.0.5",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/get-stream": {
- "version": "4.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/getpass": {
- "version": "0.1.7",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "assert-plus": "^1.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/glob": {
- "version": "7.1.6",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/global-dirs": {
- "version": "0.1.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ini": "^1.3.4"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/got": {
- "version": "6.7.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "create-error-class": "^3.0.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^3.0.0",
- "is-redirect": "^1.0.0",
- "is-retry-allowed": "^1.0.0",
- "is-stream": "^1.0.0",
- "lowercase-keys": "^1.0.0",
- "safe-buffer": "^5.0.1",
- "timed-out": "^4.0.0",
- "unzip-response": "^2.0.1",
- "url-parse-lax": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/got/node_modules/get-stream": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/graceful-fs": {
- "version": "4.2.4",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/har-schema": {
- "version": "2.0.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/har-validator": {
- "version": "5.1.5",
- "deprecated": "this library is no longer supported",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/har-validator/node_modules/ajv": {
- "version": "6.12.6",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/har-validator/node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/har-validator/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/has": {
- "version": "1.0.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/has-flag": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/has-symbols": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/has-unicode": {
- "version": "2.0.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/hosted-git-info": {
- "version": "2.8.9",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/http-cache-semantics": {
- "version": "3.8.1",
- "dev": true,
- "inBundle": true,
- "license": "BSD-2-Clause",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/http-proxy-agent": {
- "version": "2.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "agent-base": "4",
- "debug": "3.1.0"
- },
- "engines": {
- "node": ">= 4.5.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/http-signature": {
- "version": "1.2.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- },
- "engines": {
- "node": ">=0.8",
- "npm": ">=1.3.7"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/https-proxy-agent": {
- "version": "2.2.4",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "agent-base": "^4.3.0",
- "debug": "^3.1.0"
- },
- "engines": {
- "node": ">= 4.5.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/humanize-ms": {
- "version": "1.2.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ms": "^2.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/iconv-lite": {
- "version": "0.4.23",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/iferr": {
- "version": "1.0.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ignore-walk": {
- "version": "3.0.3",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "minimatch": "^3.0.4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/import-lazy": {
- "version": "2.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/imurmurhash": {
- "version": "0.1.4",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/infer-owner": {
- "version": "1.0.4",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/inflight": {
- "version": "1.0.6",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/inherits": {
- "version": "2.0.4",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ini": {
- "version": "1.3.8",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/init-package-json": {
- "version": "1.10.3",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "glob": "^7.1.1",
- "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0",
- "promzard": "^0.3.0",
- "read": "~1.0.1",
- "read-package-json": "1 || 2",
- "semver": "2.x || 3.x || 4 || 5",
- "validate-npm-package-license": "^3.0.1",
- "validate-npm-package-name": "^3.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ip": {
- "version": "1.1.5",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ip-regex": {
- "version": "2.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-callable": {
- "version": "1.1.4",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-ci": {
- "version": "1.2.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ci-info": "^1.5.0"
- },
- "bin": {
- "is-ci": "bin.js"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-ci/node_modules/ci-info": {
- "version": "1.6.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-cidr": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "BSD-2-Clause",
- "peer": true,
- "dependencies": {
- "cidr-regex": "^2.0.10"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-date-object": {
- "version": "1.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-fullwidth-code-point": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "number-is-nan": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-installed-globally": {
- "version": "0.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "global-dirs": "^0.1.0",
- "is-path-inside": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-npm": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-obj": {
- "version": "1.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-path-inside": {
- "version": "1.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "path-is-inside": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-redirect": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-regex": {
- "version": "1.0.4",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "has": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-retry-allowed": {
- "version": "1.2.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-stream": {
- "version": "1.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-symbol": {
- "version": "1.0.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "has-symbols": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/is-typedarray": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/isarray": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/isexe": {
- "version": "2.0.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/isstream": {
- "version": "0.1.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/jsbn": {
- "version": "0.1.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "optional": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/json-parse-better-errors": {
- "version": "1.0.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/json-schema": {
- "version": "0.2.3",
- "dev": true,
- "inBundle": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/json-stringify-safe": {
- "version": "5.0.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/jsonparse": {
- "version": "1.3.1",
- "dev": true,
- "engines": [
- "node >= 0.2.0"
- ],
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/JSONStream": {
- "version": "1.3.5",
- "dev": true,
- "inBundle": true,
- "license": "(MIT OR Apache-2.0)",
- "peer": true,
- "dependencies": {
- "jsonparse": "^1.2.0",
- "through": ">=2.2.7 <3"
- },
- "bin": {
- "JSONStream": "bin.js"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/jsprim": {
- "version": "1.4.1",
- "dev": true,
- "engines": [
- "node >=0.6.0"
- ],
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/latest-version": {
- "version": "3.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "package-json": "^4.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lazy-property": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libcipm": {
- "version": "4.0.8",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "bin-links": "^1.1.2",
- "bluebird": "^3.5.1",
- "figgy-pudding": "^3.5.1",
- "find-npm-prefix": "^1.0.2",
- "graceful-fs": "^4.1.11",
- "ini": "^1.3.5",
- "lock-verify": "^2.1.0",
- "mkdirp": "^0.5.1",
- "npm-lifecycle": "^3.0.0",
- "npm-logical-tree": "^1.2.1",
- "npm-package-arg": "^6.1.0",
- "pacote": "^9.1.0",
- "read-package-json": "^2.0.13",
- "rimraf": "^2.6.2",
- "worker-farm": "^1.6.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpm": {
- "version": "3.0.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "bin-links": "^1.1.2",
- "bluebird": "^3.5.3",
- "find-npm-prefix": "^1.0.2",
- "libnpmaccess": "^3.0.2",
- "libnpmconfig": "^1.2.1",
- "libnpmhook": "^5.0.3",
- "libnpmorg": "^1.0.1",
- "libnpmpublish": "^1.1.2",
- "libnpmsearch": "^2.0.2",
- "libnpmteam": "^1.0.2",
- "lock-verify": "^2.0.2",
- "npm-lifecycle": "^3.0.0",
- "npm-logical-tree": "^1.2.1",
- "npm-package-arg": "^6.1.0",
- "npm-profile": "^4.0.2",
- "npm-registry-fetch": "^4.0.0",
- "npmlog": "^4.1.2",
- "pacote": "^9.5.3",
- "read-package-json": "^2.0.13",
- "stringify-package": "^1.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmaccess": {
- "version": "3.0.2",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "aproba": "^2.0.0",
- "get-stream": "^4.0.0",
- "npm-package-arg": "^6.1.0",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig": {
- "version": "1.2.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "figgy-pudding": "^3.5.1",
- "find-up": "^3.0.0",
- "ini": "^1.3.5"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig/node_modules/find-up": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "locate-path": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig/node_modules/locate-path": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig/node_modules/p-limit": {
- "version": "2.2.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig/node_modules/p-locate": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "p-limit": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmconfig/node_modules/p-try": {
- "version": "2.2.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmhook": {
- "version": "5.0.3",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "aproba": "^2.0.0",
- "figgy-pudding": "^3.4.1",
- "get-stream": "^4.0.0",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmorg": {
- "version": "1.0.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "aproba": "^2.0.0",
- "figgy-pudding": "^3.4.1",
- "get-stream": "^4.0.0",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmpublish": {
- "version": "1.1.2",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "aproba": "^2.0.0",
- "figgy-pudding": "^3.5.1",
- "get-stream": "^4.0.0",
- "lodash.clonedeep": "^4.5.0",
- "normalize-package-data": "^2.4.0",
- "npm-package-arg": "^6.1.0",
- "npm-registry-fetch": "^4.0.0",
- "semver": "^5.5.1",
- "ssri": "^6.0.1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmsearch": {
- "version": "2.0.2",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "figgy-pudding": "^3.5.1",
- "get-stream": "^4.0.0",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpmteam": {
- "version": "1.0.2",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "aproba": "^2.0.0",
- "figgy-pudding": "^3.4.1",
- "get-stream": "^4.0.0",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/libnpx": {
- "version": "10.2.4",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "dotenv": "^5.0.1",
- "npm-package-arg": "^6.0.0",
- "rimraf": "^2.6.2",
- "safe-buffer": "^5.1.0",
- "update-notifier": "^2.3.0",
- "which": "^1.3.0",
- "y18n": "^4.0.0",
- "yargs": "^14.2.3"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lock-verify": {
- "version": "2.1.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "npm-package-arg": "^6.1.0",
- "semver": "^5.4.1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lockfile": {
- "version": "1.0.4",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "signal-exit": "^3.0.2"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._baseindexof": {
- "version": "3.1.0",
- "extraneous": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._baseuniq": {
- "version": "4.6.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "lodash._createset": "~4.0.0",
- "lodash._root": "~3.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._bindcallback": {
- "version": "3.0.1",
- "extraneous": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._cacheindexof": {
- "version": "3.0.2",
- "extraneous": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._createcache": {
- "version": "3.1.2",
- "extraneous": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "lodash._getnative": "^3.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._createset": {
- "version": "4.0.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._getnative": {
- "version": "3.9.1",
- "extraneous": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash._root": {
- "version": "3.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.clonedeep": {
- "version": "4.5.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.restparam": {
- "version": "3.6.1",
- "extraneous": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.union": {
- "version": "4.6.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.uniq": {
- "version": "4.5.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lodash.without": {
- "version": "4.4.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lowercase-keys": {
- "version": "1.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/lru-cache": {
- "version": "5.1.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/make-dir": {
- "version": "1.3.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "pify": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/make-fetch-happen": {
- "version": "5.0.2",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "agentkeepalive": "^3.4.1",
- "cacache": "^12.0.0",
- "http-cache-semantics": "^3.8.1",
- "http-proxy-agent": "^2.1.0",
- "https-proxy-agent": "^2.2.3",
- "lru-cache": "^5.1.1",
- "mississippi": "^3.0.0",
- "node-fetch-npm": "^2.0.2",
- "promise-retry": "^1.1.1",
- "socks-proxy-agent": "^4.0.0",
- "ssri": "^6.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/meant": {
- "version": "1.0.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mime-db": {
- "version": "1.35.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mime-types": {
- "version": "2.1.19",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "mime-db": "~1.35.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/minimatch": {
- "version": "3.0.4",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/minimist": {
- "version": "1.2.5",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/minizlib": {
- "version": "1.3.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "minipass": "^2.9.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/minizlib/node_modules/minipass": {
- "version": "2.9.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mississippi": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "BSD-2-Clause",
- "peer": true,
- "dependencies": {
- "concat-stream": "^1.5.0",
- "duplexify": "^3.4.2",
- "end-of-stream": "^1.1.0",
- "flush-write-stream": "^1.0.0",
- "from2": "^2.1.0",
- "parallel-transform": "^1.1.0",
- "pump": "^3.0.0",
- "pumpify": "^1.3.3",
- "stream-each": "^1.1.0",
- "through2": "^2.0.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mkdirp": {
- "version": "0.5.5",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "minimist": "^1.2.5"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mkdirp/node_modules/minimist": {
- "version": "1.2.5",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/move-concurrently": {
- "version": "1.0.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "aproba": "^1.1.1",
- "copy-concurrently": "^1.0.0",
- "fs-write-stream-atomic": "^1.0.8",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.3"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/move-concurrently/node_modules/aproba": {
- "version": "1.2.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ms": {
- "version": "2.1.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/mute-stream": {
- "version": "0.0.7",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/node-fetch-npm": {
- "version": "2.0.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "encoding": "^0.1.11",
- "json-parse-better-errors": "^1.0.0",
- "safe-buffer": "^5.1.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/node-gyp": {
- "version": "5.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "env-paths": "^2.2.0",
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.2",
- "mkdirp": "^0.5.1",
- "nopt": "^4.0.1",
- "npmlog": "^4.1.2",
- "request": "^2.88.0",
- "rimraf": "^2.6.3",
- "semver": "^5.7.1",
- "tar": "^4.4.12",
- "which": "^1.3.1"
- },
- "bin": {
- "node-gyp": "bin/node-gyp.js"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/nopt": {
- "version": "4.0.3",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- },
- "bin": {
- "nopt": "bin/nopt.js"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/normalize-package-data": {
- "version": "2.5.0",
- "dev": true,
- "inBundle": true,
- "license": "BSD-2-Clause",
- "peer": true,
- "dependencies": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve": {
- "version": "1.10.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "path-parse": "^1.0.6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-audit-report": {
- "version": "1.3.3",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "cli-table3": "^0.5.0",
- "console-control-strings": "^1.1.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-bundled": {
- "version": "1.1.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-cache-filename": {
- "version": "1.0.2",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-install-checks": {
- "version": "3.0.2",
- "dev": true,
- "inBundle": true,
- "license": "BSD-2-Clause",
- "peer": true,
- "dependencies": {
- "semver": "^2.3.0 || 3.x || 4 || 5"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-lifecycle": {
- "version": "3.1.5",
- "dev": true,
- "inBundle": true,
- "license": "Artistic-2.0",
- "peer": true,
- "dependencies": {
- "byline": "^5.0.0",
- "graceful-fs": "^4.1.15",
- "node-gyp": "^5.0.2",
- "resolve-from": "^4.0.0",
- "slide": "^1.1.6",
- "uid-number": "0.0.6",
- "umask": "^1.1.0",
- "which": "^1.3.1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-logical-tree": {
- "version": "1.2.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-normalize-package-bin": {
- "version": "1.0.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-package-arg": {
- "version": "6.1.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "hosted-git-info": "^2.7.1",
- "osenv": "^0.1.5",
- "semver": "^5.6.0",
- "validate-npm-package-name": "^3.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-packlist": {
- "version": "1.4.8",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1",
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-pick-manifest": {
- "version": "3.0.2",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "figgy-pudding": "^3.5.1",
- "npm-package-arg": "^6.0.0",
- "semver": "^5.4.1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-profile": {
- "version": "4.0.4",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "aproba": "^1.1.2 || 2",
- "figgy-pudding": "^3.4.1",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-registry-fetch": {
- "version": "4.0.7",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "bluebird": "^3.5.1",
- "figgy-pudding": "^3.4.1",
- "JSONStream": "^1.3.4",
- "lru-cache": "^5.1.1",
- "make-fetch-happen": "^5.0.0",
- "npm-package-arg": "^6.1.0",
- "safe-buffer": "^5.2.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer": {
- "version": "5.2.1",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-run-path": {
- "version": "2.0.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "path-key": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npm-user-validate": {
- "version": "1.0.1",
- "dev": true,
- "inBundle": true,
- "license": "BSD-2-Clause",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/npmlog": {
- "version": "4.1.2",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/number-is-nan": {
- "version": "1.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/oauth-sign": {
- "version": "0.9.0",
- "dev": true,
- "inBundle": true,
- "license": "Apache-2.0",
- "peer": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/object-assign": {
- "version": "4.1.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/object-keys": {
- "version": "1.0.12",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/object.getownpropertydescriptors": {
- "version": "2.0.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "define-properties": "^1.1.2",
- "es-abstract": "^1.5.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/once": {
- "version": "1.4.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/opener": {
- "version": "1.5.2",
- "dev": true,
- "inBundle": true,
- "license": "(WTFPL OR MIT)",
- "peer": true,
- "bin": {
- "opener": "bin/opener-bin.js"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/os-homedir": {
- "version": "1.0.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/os-tmpdir": {
- "version": "1.0.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/osenv": {
- "version": "0.1.5",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/p-finally": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/package-json": {
- "version": "4.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "got": "^6.7.1",
- "registry-auth-token": "^3.0.1",
- "registry-url": "^3.0.3",
- "semver": "^5.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pacote": {
- "version": "9.5.12",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "bluebird": "^3.5.3",
- "cacache": "^12.0.2",
- "chownr": "^1.1.2",
- "figgy-pudding": "^3.5.1",
- "get-stream": "^4.1.0",
- "glob": "^7.1.3",
- "infer-owner": "^1.0.4",
- "lru-cache": "^5.1.1",
- "make-fetch-happen": "^5.0.0",
- "minimatch": "^3.0.4",
- "minipass": "^2.3.5",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "normalize-package-data": "^2.4.0",
- "npm-normalize-package-bin": "^1.0.0",
- "npm-package-arg": "^6.1.0",
- "npm-packlist": "^1.1.12",
- "npm-pick-manifest": "^3.0.0",
- "npm-registry-fetch": "^4.0.0",
- "osenv": "^0.1.5",
- "promise-inflight": "^1.0.1",
- "promise-retry": "^1.1.1",
- "protoduck": "^5.0.1",
- "rimraf": "^2.6.2",
- "safe-buffer": "^5.1.2",
- "semver": "^5.6.0",
- "ssri": "^6.0.1",
- "tar": "^4.4.10",
- "unique-filename": "^1.1.1",
- "which": "^1.3.1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pacote/node_modules/minipass": {
- "version": "2.9.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/parallel-transform": {
- "version": "1.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "cyclist": "~0.2.2",
- "inherits": "^2.0.3",
- "readable-stream": "^2.1.5"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream": {
- "version": "2.3.6",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "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"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/parallel-transform/node_modules/string_decoder": {
- "version": "1.1.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/path-exists": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/path-is-absolute": {
- "version": "1.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/path-is-inside": {
- "version": "1.0.2",
- "dev": true,
- "inBundle": true,
- "license": "(WTFPL OR MIT)",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/path-key": {
- "version": "2.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/path-parse": {
- "version": "1.0.6",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/performance-now": {
- "version": "2.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pify": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/prepend-http": {
- "version": "1.0.4",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/process-nextick-args": {
- "version": "2.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/promise-inflight": {
- "version": "1.0.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/promise-retry": {
- "version": "1.1.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "err-code": "^1.0.0",
- "retry": "^0.10.0"
- },
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/promise-retry/node_modules/retry": {
- "version": "0.10.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/promzard": {
- "version": "0.3.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "read": "1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/proto-list": {
- "version": "1.2.4",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/protoduck": {
- "version": "5.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "genfun": "^5.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/prr": {
- "version": "1.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pseudomap": {
- "version": "1.0.2",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/psl": {
- "version": "1.1.29",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pump": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pumpify": {
- "version": "1.5.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/pumpify/node_modules/pump": {
- "version": "2.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/punycode": {
- "version": "1.4.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/qrcode-terminal": {
- "version": "0.12.0",
- "dev": true,
- "inBundle": true,
- "peer": true,
- "bin": {
- "qrcode-terminal": "bin/qrcode-terminal.js"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/qs": {
- "version": "6.5.2",
- "dev": true,
- "inBundle": true,
- "license": "BSD-3-Clause",
- "peer": true,
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/query-string": {
- "version": "6.8.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "decode-uri-component": "^0.2.0",
- "split-on-first": "^1.0.0",
- "strict-uri-encode": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/qw": {
- "version": "1.0.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/rc": {
- "version": "1.2.8",
- "dev": true,
- "inBundle": true,
- "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
- "peer": true,
- "dependencies": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "bin": {
- "rc": "cli.js"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/read": {
- "version": "1.0.7",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "mute-stream": "~0.0.4"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/read-cmd-shim": {
- "version": "1.0.5",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "graceful-fs": "^4.1.2"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/read-installed": {
- "version": "4.0.3",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "debuglog": "^1.0.1",
- "read-package-json": "^2.0.0",
- "readdir-scoped-modules": "^1.0.0",
- "semver": "2 || 3 || 4 || 5",
- "slide": "~1.1.3",
- "util-extend": "^1.0.1"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.2"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/read-package-json": {
- "version": "2.1.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "glob": "^7.1.1",
- "json-parse-better-errors": "^1.0.1",
- "normalize-package-data": "^2.0.0",
- "npm-normalize-package-bin": "^1.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.2"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/read-package-tree": {
- "version": "5.3.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "read-package-json": "^2.0.0",
- "readdir-scoped-modules": "^1.0.0",
- "util-promisify": "^2.1.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/readable-stream": {
- "version": "3.6.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/readdir-scoped-modules": {
- "version": "1.1.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "debuglog": "^1.0.1",
- "dezalgo": "^1.0.0",
- "graceful-fs": "^4.1.2",
- "once": "^1.3.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/registry-auth-token": {
- "version": "3.4.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "rc": "^1.1.6",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/registry-url": {
- "version": "3.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "rc": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/request": {
- "version": "2.88.0",
- "dev": true,
- "inBundle": true,
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.0",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.4.3",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- },
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/require-directory": {
- "version": "2.1.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/require-main-filename": {
- "version": "2.0.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/resolve-from": {
- "version": "4.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/retry": {
- "version": "0.12.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/rimraf": {
- "version": "2.7.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/run-queue": {
- "version": "1.0.3",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "aproba": "^1.1.1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/run-queue/node_modules/aproba": {
- "version": "1.2.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/safe-buffer": {
- "version": "5.1.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/safer-buffer": {
- "version": "2.1.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/semver": {
- "version": "5.7.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/semver-diff": {
- "version": "2.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "semver": "^5.0.3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/set-blocking": {
- "version": "2.0.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sha": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "(BSD-2-Clause OR MIT)",
- "peer": true,
- "dependencies": {
- "graceful-fs": "^4.1.2"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/shebang-command": {
- "version": "1.2.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "shebang-regex": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/shebang-regex": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/signal-exit": {
- "version": "3.0.2",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/slide": {
- "version": "1.1.6",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/smart-buffer": {
- "version": "4.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 6.0.0",
- "npm": ">= 3.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/socks": {
- "version": "2.3.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ip": "1.1.5",
- "smart-buffer": "^4.1.0"
- },
- "engines": {
- "node": ">= 6.0.0",
- "npm": ">= 3.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/socks-proxy-agent": {
- "version": "4.0.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "agent-base": "~4.2.1",
- "socks": "~2.3.2"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/socks-proxy-agent/node_modules/agent-base": {
- "version": "4.2.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "es6-promisify": "^5.0.0"
- },
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-object": {
- "version": "2.0.1",
- "dev": true,
- "inBundle": true,
- "license": "(WTFPL OR MIT)",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-union-stream": {
- "version": "2.1.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "from2": "^1.3.0",
- "stream-iterate": "^1.1.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-union-stream/node_modules/from2": {
- "version": "1.3.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "inherits": "~2.0.1",
- "readable-stream": "~1.1.10"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-union-stream/node_modules/isarray": {
- "version": "0.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream": {
- "version": "1.1.14",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sorted-union-stream/node_modules/string_decoder": {
- "version": "0.10.31",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/spdx-correct": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/spdx-exceptions": {
- "version": "2.1.0",
- "dev": true,
- "inBundle": true,
- "license": "CC-BY-3.0",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/spdx-expression-parse": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/spdx-license-ids": {
- "version": "3.0.5",
- "dev": true,
- "inBundle": true,
- "license": "CC0-1.0",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/split-on-first": {
- "version": "1.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/sshpk": {
- "version": "1.14.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "dashdash": "^1.12.0",
- "getpass": "^0.1.1",
- "safer-buffer": "^2.0.2"
- },
- "bin": {
- "sshpk-conv": "bin/sshpk-conv",
- "sshpk-sign": "bin/sshpk-sign",
- "sshpk-verify": "bin/sshpk-verify"
- },
- "engines": {
- "node": ">=0.10.0"
- },
- "optionalDependencies": {
- "bcrypt-pbkdf": "^1.0.0",
- "ecc-jsbn": "~0.1.1",
- "jsbn": "~0.1.0",
- "tweetnacl": "~0.14.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/ssri": {
- "version": "6.0.2",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "figgy-pudding": "^3.5.1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stream-each": {
- "version": "1.2.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "stream-shift": "^1.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stream-iterate": {
- "version": "1.2.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "readable-stream": "^2.1.5",
- "stream-shift": "^1.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream": {
- "version": "2.3.6",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "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"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stream-iterate/node_modules/string_decoder": {
- "version": "1.1.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stream-shift": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/strict-uri-encode": {
- "version": "2.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string_decoder": {
- "version": "1.3.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string_decoder/node_modules/safe-buffer": {
- "version": "5.2.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string-width": {
- "version": "2.1.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string-width/node_modules/ansi-regex": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string-width/node_modules/is-fullwidth-code-point": {
- "version": "2.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/string-width/node_modules/strip-ansi": {
- "version": "4.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ansi-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/stringify-package": {
- "version": "1.0.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/strip-ansi": {
- "version": "3.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/strip-eof": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/strip-json-comments": {
- "version": "2.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/supports-color": {
- "version": "5.4.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tar": {
- "version": "4.4.13",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "chownr": "^1.1.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.8.6",
- "minizlib": "^1.2.1",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.3"
- },
- "engines": {
- "node": ">=4.5"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tar/node_modules/minipass": {
- "version": "2.9.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/term-size": {
- "version": "1.2.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "execa": "^0.7.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/text-table": {
- "version": "0.2.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/through": {
- "version": "2.3.8",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/through2": {
- "version": "2.0.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "readable-stream": "^2.1.5",
- "xtend": "~4.0.1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/through2/node_modules/readable-stream": {
- "version": "2.3.6",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "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"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/through2/node_modules/string_decoder": {
- "version": "1.1.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/timed-out": {
- "version": "4.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tiny-relative-date": {
- "version": "1.3.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tough-cookie": {
- "version": "2.4.3",
- "dev": true,
- "inBundle": true,
- "license": "BSD-3-Clause",
- "peer": true,
- "dependencies": {
- "psl": "^1.1.24",
- "punycode": "^1.4.1"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tunnel-agent": {
- "version": "0.6.0",
- "dev": true,
- "inBundle": true,
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "safe-buffer": "^5.0.1"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/tweetnacl": {
- "version": "0.14.5",
- "dev": true,
- "inBundle": true,
- "license": "Unlicense",
- "optional": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/typedarray": {
- "version": "0.0.6",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/uid-number": {
- "version": "0.0.6",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/umask": {
- "version": "1.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/unique-filename": {
- "version": "1.1.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "unique-slug": "^2.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/unique-slug": {
- "version": "2.0.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "imurmurhash": "^0.1.4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/unique-string": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "crypto-random-string": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/unpipe": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/unzip-response": {
- "version": "2.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/update-notifier": {
- "version": "2.5.0",
- "dev": true,
- "inBundle": true,
- "license": "BSD-2-Clause",
- "peer": true,
- "dependencies": {
- "boxen": "^1.2.1",
- "chalk": "^2.0.1",
- "configstore": "^3.0.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^1.0.10",
- "is-installed-globally": "^0.1.0",
- "is-npm": "^1.0.0",
- "latest-version": "^3.0.0",
- "semver-diff": "^2.0.0",
- "xdg-basedir": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/uri-js": {
- "version": "4.4.0",
- "dev": true,
- "inBundle": true,
- "license": "BSD-2-Clause",
- "peer": true,
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/uri-js/node_modules/punycode": {
- "version": "2.1.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/url-parse-lax": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "prepend-http": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/util-deprecate": {
- "version": "1.0.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/util-extend": {
- "version": "1.0.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/util-promisify": {
- "version": "2.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "object.getownpropertydescriptors": "^2.0.3"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/uuid": {
- "version": "3.3.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "bin": {
- "uuid": "bin/uuid"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/validate-npm-package-license": {
- "version": "3.0.4",
- "dev": true,
- "inBundle": true,
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/validate-npm-package-name": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "builtins": "^1.0.3"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/verror": {
- "version": "1.10.0",
- "dev": true,
- "engines": [
- "node >=0.6.0"
- ],
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wcwidth": {
- "version": "1.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "defaults": "^1.0.3"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/which": {
- "version": "1.3.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/which-module": {
- "version": "2.0.0",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wide-align": {
- "version": "1.1.2",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "string-width": "^1.0.2"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wide-align/node_modules/string-width": {
- "version": "1.0.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/widest-line": {
- "version": "2.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "string-width": "^2.1.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/worker-farm": {
- "version": "1.7.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "errno": "~0.1.7"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrap-ansi": {
- "version": "5.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": {
- "version": "4.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": {
- "version": "2.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": {
- "version": "3.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": {
- "version": "5.2.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ansi-regex": "^4.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/wrappy": {
- "version": "1.0.2",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/write-file-atomic": {
- "version": "2.4.3",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/xdg-basedir": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/xtend": {
- "version": "4.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/y18n": {
- "version": "4.0.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yallist": {
- "version": "3.0.3",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs": {
- "version": "14.2.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "cliui": "^5.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^3.0.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^15.0.1"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs-parser": {
- "version": "15.0.1",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs-parser/node_modules/camelcase": {
- "version": "5.3.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/ansi-regex": {
- "version": "4.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/find-up": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "locate-path": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/is-fullwidth-code-point": {
- "version": "2.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/locate-path": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/p-limit": {
- "version": "2.3.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/p-locate": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "p-limit": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/p-try": {
- "version": "2.2.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/string-width": {
- "version": "3.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/npm/node_modules/yargs/node_modules/strip-ansi": {
- "version": "5.2.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ansi-regex": "^4.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/open": {
- "version": "7.4.2",
- "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
- "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "is-docker": "^2.0.0",
- "is-wsl": "^2.1.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/openapi-backend": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/openapi-backend/-/openapi-backend-3.9.2.tgz",
- "integrity": "sha512-+IqhtObMGeRf4aDB6L5Lc3nZYPHB9JRkTiOaNHKx26SDWcaMAof6RnABbgLDNVRRiz+fbJPmizWcFSkCPX8qeQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@apidevtools/json-schema-ref-parser": "^9.0.7",
- "ajv": "^6.10.0",
- "bath-es5": "^3.0.3",
- "cookie": "^0.4.0",
- "lodash": "^4.17.15",
- "mock-json-schema": "^1.0.7",
- "openapi-schema-validator": "^7.0.1",
- "openapi-types": "^7.0.1",
- "qs": "^6.9.3"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/openapi-schema-validator": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/openapi-schema-validator/-/openapi-schema-validator-7.2.3.tgz",
- "integrity": "sha512-XT8NM5e/zBBa/cydTS1IeYkCPzJp9oixvt9Y1lEx+2gsCTOooNxw9x/KEivtWMSokne7X1aR+VtsYHQtNNOSyA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "ajv": "^6.5.2",
- "lodash.merge": "^4.6.1",
- "openapi-types": "^7.2.3",
- "swagger-schema-official": "2.0.0-bab6bed"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/openapi-types": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-7.2.3.tgz",
- "integrity": "sha512-olbaNxz12R27+mTyJ/ZAFEfUruauHH27AkeQHDHRq5AF0LdNkK1SSV7EourXQDK+4aX7dv2HtyirAGK06WMAsA==",
- "dev": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/parse5": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
- "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
- "dev": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/property-information": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
- "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "xtend": "^4.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/raw-body": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
- "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "bytes": "3.1.0",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/raw-body/node_modules/depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/raw-body/node_modules/http-errors": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
- "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/raw-body/node_modules/setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
- "dev": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/rehype": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/rehype/-/rehype-10.0.0.tgz",
- "integrity": "sha512-0W8M4Y91b2QuzDSTjkZgBOJo79bP089YbSQNPMqebuUVrp6iveoi+Ra6/H7fJwUxq8FCHGCGzkLaq3fvO9XnVg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "rehype-parse": "^6.0.0",
- "rehype-stringify": "^6.0.0",
- "unified": "^9.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/rehype-minify-whitespace": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/rehype-minify-whitespace/-/rehype-minify-whitespace-4.0.5.tgz",
- "integrity": "sha512-QC3Z+bZ5wbv+jGYQewpAAYhXhzuH/TVRx7z08rurBmh9AbG8Nu8oJnvs9LWj43Fd/C7UIhXoQ7Wddgt+ThWK5g==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "hast-util-embedded": "^1.0.0",
- "hast-util-is-element": "^1.0.0",
- "hast-util-whitespace": "^1.0.4",
- "unist-util-is": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/rehype-parse": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz",
- "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "hast-util-from-parse5": "^5.0.0",
- "parse5": "^5.0.0",
- "xtend": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/rehype-stringify": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-6.0.1.tgz",
- "integrity": "sha512-JfEPRDD4DiG7jet4md7sY07v6ACeb2x+9HWQtRPm2iA6/ic31hCv1SNBUtpolJASxQ/D8gicXiviW4TJKEMPKQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "hast-util-to-html": "^6.0.0",
- "xtend": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/resolve": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
- "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "is-core-module": "^2.2.0",
- "path-parse": "^1.0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "peer": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/send": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
- "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "~1.7.2",
- "mime": "1.6.0",
- "ms": "2.1.1",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.1",
- "statuses": "~1.5.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/send/node_modules/depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/send/node_modules/http-errors": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
- "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.4",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/send/node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/send/node_modules/setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
- "dev": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/serve-static": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
- "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.17.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/simple-git": {
- "version": "2.48.0",
- "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.48.0.tgz",
- "integrity": "sha512-z4qtrRuaAFJS4PUd0g+xy7aN4y+RvEt/QTJpR184lhJguBA1S/LsVlvE/CM95RsYMOFJG3NGGDjqFCzKU19S/A==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@kwsites/file-exists": "^1.1.1",
- "@kwsites/promise-deferred": "^1.1.1",
- "debug": "^4.3.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/steveukx/"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/simple-git/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/simple-git/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/space-separated-tokens": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
- "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==",
- "dev": true,
- "peer": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
- "dev": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/stringify-entities": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-2.0.0.tgz",
- "integrity": "sha512-fqqhZzXyAM6pGD9lky/GOPq6V4X0SeTAFBl0iXb/BzOegl40gpf/bV3QQP7zULNYvjr6+Dx8SCaDULjVoOru0A==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "character-entities-html4": "^1.0.0",
- "character-entities-legacy": "^1.0.0",
- "is-alphanumerical": "^1.0.0",
- "is-decimal": "^1.0.2",
- "is-hexadecimal": "^1.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/tedious": {
- "version": "11.8.0",
- "resolved": "https://registry.npmjs.org/tedious/-/tedious-11.8.0.tgz",
- "integrity": "sha512-GtFrO694x/7CRiUBt0AI4jrMtrkXV+ywifiOrDy4K0ufJLeKB4rgmPjy5Ws366fCaBaKlqQ9RnJ+sCJ1Jbd1lw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@azure/identity": "^1.3.0",
- "@azure/keyvault-keys": "^4.1.0",
- "@azure/ms-rest-nodeauth": "^3.0.6",
- "@js-joda/core": "^3.2.0",
- "adal-node": "^0.2.1",
- "bl": "^5.0.0",
- "depd": "^2.0.0",
- "iconv-lite": "^0.6.3",
- "jsbi": "^3.1.5",
- "native-duplexpair": "^1.0.0",
- "node-abort-controller": "^2.0.0",
- "punycode": "^2.1.0",
- "sprintf-js": "^1.1.2"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/tedious/node_modules/iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/terser": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz",
- "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "commander": "^2.20.0",
- "source-map": "~0.6.1",
- "source-map-support": "~0.5.12"
- },
- "bin": {
- "terser": "bin/terser"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/trough": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz",
- "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==",
- "dev": true,
- "peer": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/ueberdb2": {
- "version": "1.4.19",
- "resolved": "https://registry.npmjs.org/ueberdb2/-/ueberdb2-1.4.19.tgz",
- "integrity": "sha512-9D4C9Lpb4fIHf7mdGOd24oYmrE/snEiz907rgWjVOTH/cN4O1kOuRW7VEaUatj9zDUdbne6W9wwypat/CYtZDQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "async": "^3.2.2",
- "cassandra-driver": "^4.6.3",
- "dirty": "^1.1.3",
- "elasticsearch": "^16.7.2",
- "mongodb": "^3.7.3",
- "mssql": "^7.3.0",
- "mysql": "2.18.1",
- "nano": "^9.0.5",
- "pg": "^8.7.1",
- "redis": "^3.1.2",
- "rethinkdb": "^2.4.2",
- "simple-git": "^2.47.0"
- },
- "engines": {
- "node": "^10.17.0 || >=11.14.0"
- },
- "optionalDependencies": {
- "sqlite3": "github:mapbox/node-sqlite3#593c9d498be2510d286349134537e3bf89401c4a"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/underscore": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
- "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==",
- "dev": true,
- "peer": true
- },
- "node_modules/ep_etherpad-lite/node_modules/unified": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz",
- "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "bail": "^1.0.0",
- "extend": "^3.0.0",
- "is-buffer": "^2.0.0",
- "is-plain-obj": "^2.0.0",
- "trough": "^1.0.0",
- "vfile": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/unist-util-is": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
- "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==",
- "dev": true,
- "peer": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/unist-util-stringify-position": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
- "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@types/unist": "^2.0.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/vfile": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
- "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "is-buffer": "^2.0.0",
- "unist-util-stringify-position": "^2.0.0",
- "vfile-message": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/vfile-message": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz",
- "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-stringify-position": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/ep_etherpad-lite/node_modules/web-namespaces": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz",
- "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==",
- "dev": true,
- "peer": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/err-code": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
- "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
- "optional": true
- },
- "node_modules/es-abstract": {
- "version": "1.19.5",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz",
- "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.1.1",
- "get-symbol-description": "^1.0.0",
- "has": "^1.0.3",
- "has-symbols": "^1.0.3",
- "internal-slot": "^1.0.3",
- "is-callable": "^1.2.4",
- "is-negative-zero": "^2.0.2",
- "is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.2",
- "is-string": "^1.0.7",
- "is-weakref": "^1.0.2",
- "object-inspect": "^1.12.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.2",
- "string.prototype.trimend": "^1.0.4",
- "string.prototype.trimstart": "^1.0.4",
- "unbox-primitive": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-abstract/node_modules/has-symbols": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-aggregate-error": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/es-aggregate-error/-/es-aggregate-error-1.0.8.tgz",
- "integrity": "sha512-AKUb5MKLWMozPlFRHOKqWD7yta5uaEhH21qwtnf6FlKjNjTJOoqFi0/G14+FfSkIQhhu6X68Af4xgRC6y8qG4A==",
- "dependencies": {
- "define-properties": "^1.1.4",
- "es-abstract": "^1.19.5",
- "function-bind": "^1.1.1",
- "functions-have-names": "^1.2.3",
- "get-intrinsic": "^1.1.1",
- "globalthis": "^1.0.2",
- "has-property-descriptors": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-shim-unscopables": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
- "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
- "dev": true,
- "dependencies": {
- "has": "^1.0.3"
- }
- },
- "node_modules/es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dependencies": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
- },
- "node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/escodegen": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
- "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
- "dependencies": {
- "esprima": "^4.0.1",
- "estraverse": "^5.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1"
- },
- "bin": {
- "escodegen": "bin/escodegen.js",
- "esgenerate": "bin/esgenerate.js"
- },
- "engines": {
- "node": ">=6.0"
- },
- "optionalDependencies": {
- "source-map": "~0.6.1"
- }
- },
- "node_modules/eslint": {
- "version": "8.14.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.14.0.tgz",
- "integrity": "sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==",
- "dev": true,
- "dependencies": {
- "@eslint/eslintrc": "^1.2.2",
- "@humanwhocodes/config-array": "^0.9.2",
- "ajv": "^6.10.0",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.1.1",
- "eslint-utils": "^3.0.0",
- "eslint-visitor-keys": "^3.3.0",
- "espree": "^9.3.1",
- "esquery": "^1.4.0",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^6.0.1",
- "globals": "^13.6.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.0.4",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
- "regexpp": "^3.2.0",
- "strip-ansi": "^6.0.1",
- "strip-json-comments": "^3.1.0",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-config-etherpad": {
- "version": "3.0.13",
- "resolved": "https://registry.npmjs.org/eslint-config-etherpad/-/eslint-config-etherpad-3.0.13.tgz",
- "integrity": "sha512-Bwt1gDxThlXhY6wan1fb3Jy9kI+yFGctp7+JX6Xs+BwbOdrB4qObgnLKdcLYPKPqv9c4xTSKo3C4BdhTkg7WtQ==",
- "dev": true,
- "dependencies": {
- "@rushstack/eslint-patch": "^1.1.3",
- "@typescript-eslint/eslint-plugin": "^5.22.0",
- "@typescript-eslint/parser": "^5.22.0",
- "eslint-import-resolver-typescript": "^2.7.1",
- "eslint-plugin-cypress": "^2.12.1",
- "eslint-plugin-eslint-comments": "^3.2.0",
- "eslint-plugin-import": "^2.26.0",
- "eslint-plugin-mocha": "^10.0.4",
- "eslint-plugin-n": "^15.2.0",
- "eslint-plugin-prefer-arrow": "^1.2.3",
- "eslint-plugin-promise": "^6.0.0",
- "eslint-plugin-you-dont-need-lodash-underscore": "^6.12.0"
- },
- "engines": {
- "node": ">=12.17.0"
- },
- "peerDependencies": {
- "eslint": "^8.14.0",
- "typescript": "^4.5.5"
- }
- },
- "node_modules/eslint-import-resolver-node": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
- "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
- "dev": true,
- "dependencies": {
- "debug": "^3.2.7",
- "resolve": "^1.20.0"
- }
- },
- "node_modules/eslint-import-resolver-node/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-import-resolver-node/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "node_modules/eslint-import-resolver-typescript": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz",
- "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==",
- "dev": true,
- "dependencies": {
- "debug": "^4.3.4",
- "glob": "^7.2.0",
- "is-glob": "^4.0.3",
- "resolve": "^1.22.0",
- "tsconfig-paths": "^3.14.1"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "*",
- "eslint-plugin-import": "*"
- }
- },
- "node_modules/eslint-import-resolver-typescript/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-import-resolver-typescript/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/eslint-module-utils": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz",
- "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==",
- "dev": true,
- "dependencies": {
- "debug": "^3.2.7",
- "find-up": "^2.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-module-utils/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-module-utils/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "node_modules/eslint-plugin-cypress": {
- "version": "2.12.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.12.1.tgz",
- "integrity": "sha512-c2W/uPADl5kospNDihgiLc7n87t5XhUbFDoTl6CfVkmG+kDAb5Ux10V9PoLPu9N+r7znpc+iQlcmAqT1A/89HA==",
- "dev": true,
- "dependencies": {
- "globals": "^11.12.0"
- },
- "peerDependencies": {
- "eslint": ">= 3.2.1"
- }
- },
- "node_modules/eslint-plugin-cypress/node_modules/globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-plugin-es": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz",
- "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==",
- "dev": true,
- "dependencies": {
- "eslint-utils": "^2.0.0",
- "regexpp": "^3.0.0"
- },
- "engines": {
- "node": ">=8.10.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- },
- "peerDependencies": {
- "eslint": ">=4.19.1"
- }
- },
- "node_modules/eslint-plugin-es/node_modules/eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
- "dev": true,
- "dependencies": {
- "eslint-visitor-keys": "^1.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- }
- },
- "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-plugin-eslint-comments": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz",
- "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==",
- "dev": true,
- "dependencies": {
- "escape-string-regexp": "^1.0.5",
- "ignore": "^5.0.5"
- },
- "engines": {
- "node": ">=6.5.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- },
- "peerDependencies": {
- "eslint": ">=4.19.1"
- }
- },
- "node_modules/eslint-plugin-import": {
- "version": "2.26.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
- "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==",
- "dev": true,
- "dependencies": {
- "array-includes": "^3.1.4",
- "array.prototype.flat": "^1.2.5",
- "debug": "^2.6.9",
- "doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.6",
- "eslint-module-utils": "^2.7.3",
- "has": "^1.0.3",
- "is-core-module": "^2.8.1",
- "is-glob": "^4.0.3",
- "minimatch": "^3.1.2",
- "object.values": "^1.1.5",
- "resolve": "^1.22.0",
- "tsconfig-paths": "^3.14.1"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dev": true,
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/eslint-plugin-mocha": {
- "version": "10.0.4",
- "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.0.4.tgz",
- "integrity": "sha512-8wzAeepVY027oBHz/TmBmUr7vhVqoC1KTFeDybFLhbaWKx+aQ7fJJVuUsqcUy+L+G+XvgQBJY+cbAf7hl5DF7Q==",
- "dev": true,
- "dependencies": {
- "eslint-utils": "^3.0.0",
- "ramda": "^0.28.0"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "eslint": ">=7.0.0"
- }
- },
- "node_modules/eslint-plugin-n": {
- "version": "15.2.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.2.0.tgz",
- "integrity": "sha512-lWLg++jGwC88GDGGBX3CMkk0GIWq0y41aH51lavWApOKcMQcYoL3Ayd0lEdtD3SnQtR+3qBvWQS3qGbR2BxRWg==",
- "dev": true,
- "dependencies": {
- "builtins": "^4.0.0",
- "eslint-plugin-es": "^4.1.0",
- "eslint-utils": "^3.0.0",
- "ignore": "^5.1.1",
- "is-core-module": "^2.3.0",
- "minimatch": "^3.0.4",
- "resolve": "^1.10.1",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=12.22.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- },
- "peerDependencies": {
- "eslint": ">=7.0.0"
- }
- },
- "node_modules/eslint-plugin-n/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/eslint-plugin-prefer-arrow": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz",
- "integrity": "sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==",
- "dev": true,
- "peerDependencies": {
- "eslint": ">=2.0.0"
- }
- },
- "node_modules/eslint-plugin-promise": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.0.tgz",
- "integrity": "sha512-7GPezalm5Bfi/E22PnQxDWH2iW9GTvAlUNTztemeHb6c1BniSyoeTrM87JkC0wYdi6aQrZX9p2qEiAno8aTcbw==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/eslint-plugin-you-dont-need-lodash-underscore": {
- "version": "6.12.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-you-dont-need-lodash-underscore/-/eslint-plugin-you-dont-need-lodash-underscore-6.12.0.tgz",
- "integrity": "sha512-WF4mNp+k2532iswT6iUd1BX6qjd3AV4cFy/09VC82GY9SsRtvkxhUIx7JNGSe0/bLyd57oTr4inPFiIaENXhGw==",
- "dev": true,
- "dependencies": {
- "kebab-case": "^1.0.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/eslint-scope": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
- "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
- "dev": true,
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/eslint-utils": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
- "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
- "dev": true,
- "dependencies": {
- "eslint-visitor-keys": "^2.0.0"
- },
- "engines": {
- "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- },
- "peerDependencies": {
- "eslint": ">=5"
- }
- },
- "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
- "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
- "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/eslint/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/eslint/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/eslint/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/eslint/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/eslint/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/eslint/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/eslint/node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/eslint/node_modules/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==",
- "dev": true
- },
- "node_modules/eslint/node_modules/levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "dependencies": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/eslint/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/eslint/node_modules/optionator": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
- "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
- "dev": true,
- "dependencies": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.3"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/eslint/node_modules/prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true,
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/eslint/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/eslint/node_modules/type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/esm": {
- "version": "3.2.25",
- "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
- "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
- "devOptional": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/espree": {
- "version": "9.3.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz",
- "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==",
- "dev": true,
- "dependencies": {
- "acorn": "^8.7.0",
- "acorn-jsx": "^5.3.1",
- "eslint-visitor-keys": "^3.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/esquery": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
- "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
- "dev": true,
- "dependencies": {
- "estraverse": "^5.1.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/etherpad-cli-client": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/etherpad-cli-client/-/etherpad-cli-client-2.0.1.tgz",
- "integrity": "sha512-cv7ep8NEkrebTIgWS/SBvpt6DhcMKSNu1zZNMFOWdoQkNRn3hVXZU8dedr4Xt5M1zBwPBSBTjisU436/TkEESA==",
- "dev": true,
- "dependencies": {
- "async": "^3.2.1",
- "socket.io-client": "^2.3.0",
- "superagent": "^7.1.1"
- },
- "bin": {
- "etherpad-cli": "cli.js"
- },
- "engines": {
- "node": ">=12.17.0"
- },
- "funding": {
- "type": "individual",
- "url": "https://etherpad.org/"
- },
- "peerDependencies": {
- "ep_etherpad-lite": ">=1.8.6"
- }
- },
- "node_modules/etherpad-cli-client/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/etherpad-cli-client/node_modules/mime": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
- "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
- "dev": true,
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/etherpad-cli-client/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/etherpad-cli-client/node_modules/superagent": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.5.tgz",
- "integrity": "sha512-HQYyGuDRFGmZ6GNC4hq2f37KnsY9Lr0/R1marNZTgMweVDQLTLJJ6DGQ9Tj/xVVs5HEnop9EMmTbywb5P30aqw==",
- "dev": true,
- "dependencies": {
- "component-emitter": "^1.3.0",
- "cookiejar": "^2.1.3",
- "debug": "^4.3.4",
- "fast-safe-stringify": "^2.1.1",
- "form-data": "^4.0.0",
- "formidable": "^2.0.1",
- "methods": "^1.1.2",
- "mime": "^2.5.0",
- "qs": "^6.10.3",
- "readable-stream": "^3.6.0",
- "semver": "^7.3.7"
- },
- "engines": {
- "node": ">=6.4.0 <13 || >=14"
- }
- },
- "node_modules/etherpad-require-kernel": {
- "version": "1.0.15",
- "resolved": "https://registry.npmjs.org/etherpad-require-kernel/-/etherpad-require-kernel-1.0.15.tgz",
- "integrity": "sha512-t8Z950sCfgS4ssex6SHhb3Ni8BQL0XdvZhMQWWDLhSWttyHgf+zPSMglBODyAUGh8mBX0XwGK7hpICGBHsvSGQ==",
- "engines": {
- "node": ">=12.13.0"
- }
- },
- "node_modules/etherpad-yajsml": {
- "version": "0.0.12",
- "resolved": "https://registry.npmjs.org/etherpad-yajsml/-/etherpad-yajsml-0.0.12.tgz",
- "integrity": "sha512-lVCqsZYpFsuIz417h+O83I7eadNXJ3MnQavriFa52/KTwj6xPAzEYr0PvH7KTxcqyAFtW7ItoTNVXe2h7zGxlw==",
- "engines": {
- "node": ">=12.13.0"
- },
- "optionalDependencies": {
- "mime": "^1.6.0"
- }
- },
- "node_modules/event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/expand-template": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
- "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
- "dev": true,
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/express": {
- "version": "4.18.2",
- "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
- "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
- "dependencies": {
- "accepts": "~1.3.8",
- "array-flatten": "1.1.1",
- "body-parser": "1.20.1",
- "content-disposition": "0.5.4",
- "content-type": "~1.0.4",
- "cookie": "0.5.0",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "1.2.0",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "2.4.1",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.7",
- "qs": "6.11.0",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.11.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
"send": "0.18.0",
@@ -13178,27 +5099,24 @@
"utils-merge": "1.0.1",
"vary": "~1.1.2"
},
- "engines": {
- "node": ">= 0.10.0"
+ "dependencies": {
+ "cookie": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
+ }
}
},
- "node_modules/express-rate-limit": {
+ "express-rate-limit": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.7.0.tgz",
- "integrity": "sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA==",
- "engines": {
- "node": ">= 12.9.0"
- },
- "peerDependencies": {
- "express": "^4 || ^5"
- }
+ "integrity": "sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA=="
},
- "node_modules/express-session": {
- "name": "@etherpad/express-session",
- "version": "1.18.1",
+ "express-session": {
+ "version": "npm:@etherpad/express-session@1.18.1",
"resolved": "https://registry.npmjs.org/@etherpad/express-session/-/express-session-1.18.1.tgz",
"integrity": "sha512-K+dYeES5iKPib+NRJ+/tX04IfTnCUnpV/aiuifI1ecQGnrWSVMuK5MrwDD0lYC/OBYWS5ovar5E+R4/IbjXknA==",
- "dependencies": {
+ "requires": {
"cookie": "0.4.1",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
@@ -13209,174 +5127,107 @@
"uid-safe": "~2.1.5"
}
},
- "node_modules/express-session/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/express/node_modules/cookie": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
- "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/express/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/extend": {
+ "extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
- "node_modules/extsprintf": {
+ "extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
- "engines": [
- "node >=0.6.0"
- ]
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g=="
},
- "node_modules/fast-deep-equal": {
+ "fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
- "node_modules/fast-glob": {
- "version": "3.2.11",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
- "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
- "dependencies": {
+ "fast-glob": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz",
+ "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==",
+ "requires": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
"glob-parent": "^5.1.2",
"merge2": "^1.3.0",
"micromatch": "^4.0.4"
},
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
}
},
- "node_modules/fast-json-stable-stringify": {
+ "fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
},
- "node_modules/fast-levenshtein": {
+ "fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
},
- "node_modules/fast-safe-stringify": {
+ "fast-safe-stringify": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
"integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
},
- "node_modules/fastq": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
- "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
- "dependencies": {
+ "fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "requires": {
"reusify": "^1.0.4"
}
},
- "node_modules/file-entry-cache": {
+ "file-entry-cache": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
"integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
"dev": true,
- "dependencies": {
+ "requires": {
"flat-cache": "^3.0.4"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
}
},
- "node_modules/filelist": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.3.tgz",
- "integrity": "sha512-LwjCsruLWQULGYKy7TX0OPtrL9kLpojOFKc5VCTxdFTV7w5zbsgqVKfnkKG7Qgjtq50gKfO56hJv88OfcGb70Q==",
- "dependencies": {
+ "filelist": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+ "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+ "requires": {
"minimatch": "^5.0.1"
- }
- },
- "node_modules/filelist/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/filelist/node_modules/minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dependencies": {
- "brace-expansion": "^2.0.1"
},
- "engines": {
- "node": ">=10"
+ "dependencies": {
+ "minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ }
}
},
- "node_modules/fill-range": {
+ "fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dependencies": {
+ "requires": {
"to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
}
},
- "node_modules/finalhandler": {
+ "finalhandler": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
"integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
- "dependencies": {
+ "requires": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
@@ -13384,254 +5235,204 @@
"parseurl": "~1.3.3",
"statuses": "2.0.1",
"unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
}
},
- "node_modules/find-cache-dir": {
+ "find-cache-dir": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
"integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"commondir": "^1.0.1",
"make-dir": "^2.0.0",
"pkg-dir": "^3.0.0"
},
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/find-cache-dir/node_modules/make-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
- "dev": true,
"dependencies": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/find-cache-dir/node_modules/pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/find-cache-dir/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
}
},
- "node_modules/find-root": {
+ "find-root": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
"integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
},
- "node_modules/find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"dev": true,
- "dependencies": {
- "locate-path": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
}
},
- "node_modules/flat": {
+ "flat": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
"integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true,
- "bin": {
- "flat": "cli.js"
- }
+ "dev": true
},
- "node_modules/flat-cache": {
+ "flat-cache": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
"integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
"dev": true,
- "dependencies": {
+ "requires": {
"flatted": "^3.1.0",
"rimraf": "^3.0.2"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
}
},
- "node_modules/flatted": {
+ "flatted": {
"version": "3.2.7",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
"integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ=="
},
- "node_modules/follow-redirects": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz",
- "integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==",
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/RubenVerborgh"
- }
- ],
- "engines": {
- "node": ">=4.0"
- },
- "peerDependenciesMeta": {
- "debug": {
- "optional": true
- }
+ "follow-redirects": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
+ },
+ "for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "requires": {
+ "is-callable": "^1.1.3"
}
},
- "node_modules/forever-agent": {
+ "forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "engines": {
- "node": "*"
- }
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw=="
},
- "node_modules/form-data": {
+ "form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
- "dependencies": {
+ "requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
}
},
- "node_modules/formidable": {
+ "formidable": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz",
"integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==",
- "dependencies": {
+ "requires": {
"dezalgo": "^1.0.4",
"hexoid": "^1.0.0",
"once": "^1.4.0",
"qs": "^6.11.0"
- },
- "funding": {
- "url": "https://ko-fi.com/tunnckoCore/commissions"
}
},
- "node_modules/forwarded": {
+ "forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
- "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
- "engines": {
- "node": ">= 0.6"
- }
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
},
- "node_modules/fresh": {
+ "fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/fs-constants": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
- "dev": true,
- "optional": true,
- "peer": true
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
},
- "node_modules/fs-extra": {
+ "fs-extra": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
- "dependencies": {
+ "requires": {
"graceful-fs": "^4.2.0",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
},
- "engines": {
- "node": ">=6 <7 || >=8"
+ "dependencies": {
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
+ }
}
},
- "node_modules/fs-minipass": {
+ "fs-minipass": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
"integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
"optional": true,
- "dependencies": {
+ "requires": {
"minipass": "^3.0.0"
},
- "engines": {
- "node": ">= 8"
+ "dependencies": {
+ "minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "optional": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ }
}
},
- "node_modules/fs-readdir-recursive": {
+ "fs-readdir-recursive": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
"integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==",
"dev": true
},
- "node_modules/fs.realpath": {
+ "fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "devOptional": true
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
- "node_modules/fsevents": {
+ "fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
+ "optional": true
},
- "node_modules/function-bind": {
+ "function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
- "node_modules/functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
- "dev": true
+ "function.prototype.name": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
+ "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.0",
+ "functions-have-names": "^1.2.2"
+ }
},
- "node_modules/functions-have-names": {
+ "functions-have-names": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
- "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="
},
- "node_modules/gauge": {
+ "gauge": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
"integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
"optional": true,
- "dependencies": {
+ "requires": {
"aproba": "^1.0.3 || ^2.0.0",
"color-support": "^1.1.2",
"console-control-strings": "^1.0.0",
@@ -13641,344 +5442,267 @@
"string-width": "^4.2.3",
"strip-ansi": "^6.0.1",
"wide-align": "^1.1.2"
- },
- "engines": {
- "node": ">=10"
}
},
- "node_modules/generic-pool": {
+ "generic-pool": {
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz",
- "integrity": "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==",
- "engines": {
- "node": ">= 4"
- }
+ "integrity": "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g=="
},
- "node_modules/gensync": {
+ "gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
+ "dev": true
},
- "node_modules/get-caller-file": {
+ "get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true,
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
+ "dev": true
},
- "node_modules/get-intrinsic": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
- "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
- "dependencies": {
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
- "has-symbols": "^1.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
}
},
- "node_modules/get-symbol-description": {
+ "get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true
+ },
+ "get-symbol-description": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
"integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
- "dependencies": {
+ "requires": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/getpass": {
+ "get-tsconfig": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.6.2.tgz",
+ "integrity": "sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg==",
+ "dev": true,
+ "requires": {
+ "resolve-pkg-maps": "^1.0.0"
+ }
+ },
+ "getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "dependencies": {
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+ "requires": {
"assert-plus": "^1.0.0"
}
},
- "node_modules/github-from-package": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
- "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
- "dev": true,
- "optional": true,
- "peer": true
- },
- "node_modules/glob": {
+ "glob": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
"integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
- "devOptional": true,
- "dependencies": {
+ "requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/glob-parent": {
+ "glob-parent": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
- "dependencies": {
+ "requires": {
"is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
}
},
- "node_modules/globals": {
- "version": "13.13.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz",
- "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==",
+ "globals": {
+ "version": "13.20.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
+ "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/globalthis": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz",
- "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==",
- "dependencies": {
+ "globalthis": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
+ "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+ "requires": {
"define-properties": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/globby": {
+ "globby": {
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
"integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
"dev": true,
- "dependencies": {
+ "requires": {
"array-union": "^2.1.0",
"dir-glob": "^3.0.1",
"fast-glob": "^3.2.9",
"ignore": "^5.2.0",
"merge2": "^1.4.1",
"slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/graceful-fs": {
- "version": "4.2.10",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
- "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
+ "gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "requires": {
+ "get-intrinsic": "^1.1.3"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+ },
+ "grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "dev": true
+ },
+ "graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
},
- "node_modules/growl": {
+ "growl": {
"version": "1.10.5",
"resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
"integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
- "dev": true,
- "engines": {
- "node": ">=4.x"
- }
+ "dev": true
},
- "node_modules/har-schema": {
+ "har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
- "engines": {
- "node": ">=4"
- }
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q=="
},
- "node_modules/har-validator": {
+ "har-validator": {
"version": "5.1.5",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
"integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "deprecated": "this library is no longer supported",
- "dependencies": {
+ "requires": {
"ajv": "^6.12.3",
"har-schema": "^2.0.0"
},
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/har-validator/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
+ "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=="
+ }
}
},
- "node_modules/har-validator/node_modules/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=="
- },
- "node_modules/has": {
+ "has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dependencies": {
+ "requires": {
"function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/has-ansi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-ansi/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
}
},
- "node_modules/has-bigints": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
- "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "has-bigints": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
+ "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA=="
},
- "node_modules/has-binary2": {
+ "has-binary2": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
"integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
- "dependencies": {
+ "requires": {
"isarray": "2.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ=="
+ }
}
},
- "node_modules/has-binary2/node_modules/isarray": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
- "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
- },
- "node_modules/has-cors": {
+ "has-cors": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
- "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
+ "integrity": "sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA=="
},
- "node_modules/has-flag": {
+ "has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
- }
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
},
- "node_modules/has-property-descriptors": {
+ "has-property-descriptors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
"integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
- "dependencies": {
+ "requires": {
"get-intrinsic": "^1.1.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/has-symbols": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
- "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
},
- "node_modules/has-tostringtag": {
+ "has-tostringtag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
"integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
- "dependencies": {
+ "requires": {
"has-symbols": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/has-unicode": {
+ "has-unicode": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
"optional": true
},
- "node_modules/hast-util-embedded": {
+ "hast-util-embedded": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-2.0.0.tgz",
"integrity": "sha512-vEr54rDu2CheBM4nLkWbW8Rycf8HhkA/KsrDnlyKnvBTyhyO+vAG6twHnfUbiRGo56YeUBNCI4HFfHg3Wu+tig==",
- "dependencies": {
+ "requires": {
"hast-util-is-element": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
}
},
- "node_modules/hast-util-from-parse5": {
+ "hast-util-from-parse5": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.0.tgz",
"integrity": "sha512-m8yhANIAccpU4K6+121KpPP55sSl9/samzQSQGpb0mTExcNh2WlvjtMwSWFhg6uqD4Rr6Nfa8N6TMypQM51rzQ==",
- "dependencies": {
+ "requires": {
"@types/hast": "^2.0.0",
"@types/parse5": "^6.0.0",
"@types/unist": "^2.0.0",
@@ -13987,42 +5711,30 @@
"vfile": "^5.0.0",
"vfile-location": "^4.0.0",
"web-namespaces": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
}
},
- "node_modules/hast-util-is-element": {
+ "hast-util-is-element": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.2.tgz",
"integrity": "sha512-thjnlGAnwP8ef/GSO1Q8BfVk2gundnc2peGQqEg2kUt/IqesiGg/5mSwN2fE7nLzy61pg88NG6xV+UrGOrx9EA==",
- "dependencies": {
+ "requires": {
"@types/hast": "^2.0.0",
"@types/unist": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
}
},
- "node_modules/hast-util-parse-selector": {
+ "hast-util-parse-selector": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.0.tgz",
"integrity": "sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg==",
- "dependencies": {
+ "requires": {
"@types/hast": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
}
},
- "node_modules/hast-util-to-html": {
+ "hast-util-to-html": {
"version": "8.0.3",
"resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.3.tgz",
"integrity": "sha512-/D/E5ymdPYhHpPkuTHOUkSatxr4w1ZKrZsG0Zv/3C2SRVT0JFJG53VS45AMrBtYk0wp5A7ksEhiC8QaOZM95+A==",
- "dependencies": {
+ "requires": {
"@types/hast": "^2.0.0",
"ccount": "^2.0.0",
"comma-separated-tokens": "^2.0.0",
@@ -14033,888 +5745,600 @@
"space-separated-tokens": "^2.0.0",
"stringify-entities": "^4.0.2",
"unist-util-is": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
}
},
- "node_modules/hast-util-whitespace": {
+ "hast-util-whitespace": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz",
- "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
+ "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg=="
},
- "node_modules/hastscript": {
+ "hastscript": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.0.2.tgz",
"integrity": "sha512-uA8ooUY4ipaBvKcMuPehTAB/YfFLSSzCwFSwT6ltJbocFUKH/GDHLN+tflq7lSRf9H86uOuxOFkh1KgIy3Gg2g==",
- "dependencies": {
+ "requires": {
"@types/hast": "^2.0.0",
"comma-separated-tokens": "^2.0.0",
"hast-util-parse-selector": "^3.0.0",
"property-information": "^6.0.0",
"space-separated-tokens": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
}
},
- "node_modules/he": {
+ "he": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true,
- "bin": {
- "he": "bin/he"
- }
+ "dev": true
},
- "node_modules/helpertypes": {
+ "helpertypes": {
"version": "0.0.18",
"resolved": "https://registry.npmjs.org/helpertypes/-/helpertypes-0.0.18.tgz",
- "integrity": "sha512-XRhfbSEmR+poXUC5/8AbmYNJb2riOT6qPzjGJZr0S9YedHiaY+/tzPYzWMUclYMEdCYo/1l8PDYrQFCj02v97w==",
- "engines": {
- "node": ">=10.0.0"
- }
+ "integrity": "sha512-XRhfbSEmR+poXUC5/8AbmYNJb2riOT6qPzjGJZr0S9YedHiaY+/tzPYzWMUclYMEdCYo/1l8PDYrQFCj02v97w=="
},
- "node_modules/hexoid": {
+ "hexoid": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
- "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==",
- "engines": {
- "node": ">=8"
- }
+ "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g=="
},
- "node_modules/hpagent": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-0.1.2.tgz",
- "integrity": "sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ=="
+ "hpagent": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz",
+ "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA=="
},
- "node_modules/html-encoding-sniffer": {
+ "html-encoding-sniffer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
"integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
- "dependencies": {
+ "requires": {
"whatwg-encoding": "^2.0.0"
- },
- "engines": {
- "node": ">=12"
}
},
- "node_modules/html-void-elements": {
+ "html-void-elements": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz",
- "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/htmlparser2": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
- "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "domelementtype": "^1.3.1",
- "domhandler": "^2.3.0",
- "domutils": "^1.5.1",
- "entities": "^1.1.1",
- "inherits": "^2.0.1",
- "readable-stream": "^3.1.1"
- }
+ "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A=="
},
- "node_modules/http-cache-semantics": {
+ "http-cache-semantics": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
"integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
"optional": true
},
- "node_modules/http-errors": {
+ "http-errors": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
- "dependencies": {
+ "requires": {
"depd": "2.0.0",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"toidentifier": "1.0.1"
},
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/http-errors/node_modules/depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/http-errors/node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "node_modules/http-errors/node_modules/setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
- },
- "node_modules/http-errors/node_modules/statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/http-errors/node_modules/toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
- "engines": {
- "node": ">=0.6"
+ "dependencies": {
+ "depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+ },
+ "statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
+ },
+ "toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
+ }
}
},
- "node_modules/http-proxy-agent": {
+ "http-proxy-agent": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
"integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
- "dependencies": {
+ "requires": {
"@tootallnate/once": "2",
"agent-base": "6",
"debug": "4"
},
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/http-proxy-agent/node_modules/debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
- "node_modules/http-proxy-agent/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/http-signature": {
+ "http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "dependencies": {
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
+ "requires": {
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
"sshpk": "^1.7.0"
- },
- "engines": {
- "node": ">=0.8",
- "npm": ">=1.3.7"
}
},
- "node_modules/https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
- "dependencies": {
+ "https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "requires": {
"agent-base": "6",
"debug": "4"
},
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/https-proxy-agent/node_modules/debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
- "node_modules/https-proxy-agent/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true
},
- "node_modules/humanize-ms": {
+ "humanize-ms": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
- "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=",
- "devOptional": true,
- "dependencies": {
+ "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
+ "optional": true,
+ "requires": {
"ms": "^2.0.0"
}
},
- "node_modules/i18next": {
- "version": "23.2.3",
- "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.2.3.tgz",
- "integrity": "sha512-5spO7L0rNmW0jFuNhz+gfirlFt1anle4mTy4+gFkgsH0+T3R5++4oncBrzeKa7v8pweRyGBoGmOpboqlxovg6A==",
+ "i18next": {
+ "version": "23.2.7",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.2.7.tgz",
+ "integrity": "sha512-EsbHHvF6b+p+B6Cht5fYWY7VE/WYOrqB1+DNwa1UpLTw6mG5g4tc8KCEjUUOSMUA2yqCsdYQP+PqVq5nBMtOtQ==",
"dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://locize.com"
- },
- {
- "type": "individual",
- "url": "https://locize.com/i18next.html"
- },
- {
- "type": "individual",
- "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"
- }
- ],
- "dependencies": {
+ "requires": {
"@babel/runtime": "^7.22.5"
}
},
- "node_modules/i18next-fs-backend": {
+ "i18next-fs-backend": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.1.5.tgz",
"integrity": "sha512-7fgSH8nVhXSBYPHR/W3tEXXhcnwHwNiND4Dfx9knzPzdsWTUTL/TdDVV+DY0dL0asHKLbdoJaXS4LdVW6R8MVQ==",
"dev": true
},
- "node_modules/iconv-lite": {
+ "iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dependencies": {
+ "requires": {
"safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
}
},
- "node_modules/ieee754": {
+ "ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
},
- "node_modules/ignore": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
- "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
+ "ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true
},
- "node_modules/ignore-by-default": {
+ "ignore-by-default": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
"integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==",
"dev": true
},
- "node_modules/immediate": {
+ "immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
"dev": true
},
- "node_modules/import-fresh": {
+ "import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
"dev": true,
- "dependencies": {
+ "requires": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/imurmurhash": {
+ "imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "devOptional": true,
- "engines": {
- "node": ">=0.8.19"
- }
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
},
- "node_modules/indent-string": {
+ "indent-string": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
"integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "optional": true,
- "engines": {
- "node": ">=8"
- }
+ "optional": true
},
- "node_modules/indexof": {
+ "indexof": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
- "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
+ "integrity": "sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg=="
},
- "node_modules/infer-owner": {
+ "infer-owner": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
"integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
"optional": true
},
- "node_modules/inflight": {
+ "inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "devOptional": true,
- "dependencies": {
+ "requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
- "node_modules/inherits": {
+ "inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
- "node_modules/ini": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
- "dev": true,
- "optional": true,
- "peer": true
- },
- "node_modules/internal-slot": {
+ "internal-slot": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
"integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
- "dependencies": {
+ "requires": {
"get-intrinsic": "^1.1.0",
"has": "^1.0.3",
"side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
}
},
- "node_modules/ip": {
+ "ip": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
"integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==",
"optional": true
},
- "node_modules/ip-regex": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
- "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ipaddr.js": {
+ "ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/is-alphabetical": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
- "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
- "dev": true,
- "peer": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
},
- "node_modules/is-alphanumerical": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
- "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "is-alphabetical": "^1.0.0",
- "is-decimal": "^1.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "is-array-buffer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
+ "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.0",
+ "is-typed-array": "^1.1.10"
}
},
- "node_modules/is-bigint": {
+ "is-bigint": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
"integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
- "dependencies": {
+ "requires": {
"has-bigints": "^1.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-binary-path": {
+ "is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
- "dependencies": {
+ "requires": {
"binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
}
},
- "node_modules/is-boolean-object": {
+ "is-boolean-object": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
"integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
- "dependencies": {
+ "requires": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-buffer": {
+ "is-buffer": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
- "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "engines": {
- "node": ">=4"
- }
+ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
},
- "node_modules/is-callable": {
+ "is-callable": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
- "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w=="
},
- "node_modules/is-core-module": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
- "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
- "dev": true,
- "dependencies": {
+ "is-core-module": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
+ "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
+ "requires": {
"has": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-date-object": {
+ "is-date-object": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
"integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
- "dependencies": {
+ "requires": {
"has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-decimal": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
- "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
- "dev": true,
- "peer": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/is-docker": {
+ "is-docker": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
- "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
- "bin": {
- "is-docker": "cli.js"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="
},
- "node_modules/is-extglob": {
+ "is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "engines": {
- "node": ">=0.10.0"
- }
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
},
- "node_modules/is-fullwidth-code-point": {
+ "is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "devOptional": true,
- "engines": {
- "node": ">=8"
- }
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
},
- "node_modules/is-glob": {
+ "is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dependencies": {
+ "requires": {
"is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
}
},
- "node_modules/is-hexadecimal": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
- "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
+ "is-inside-container": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
+ "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
"dev": true,
- "peer": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "requires": {
+ "is-docker": "^3.0.0"
+ },
+ "dependencies": {
+ "is-docker": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
+ "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+ "dev": true
+ }
}
},
- "node_modules/is-lambda": {
+ "is-lambda": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
"integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
"optional": true
},
- "node_modules/is-negative-zero": {
+ "is-negative-zero": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
- "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA=="
},
- "node_modules/is-number": {
+ "is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "engines": {
- "node": ">=0.12.0"
- }
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
},
- "node_modules/is-number-object": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
- "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
- "dependencies": {
+ "is-number-object": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
+ "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
+ "requires": {
"has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-observable": {
+ "is-observable": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-observable/-/is-observable-2.1.0.tgz",
- "integrity": "sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw==",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "integrity": "sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw=="
+ },
+ "is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true
},
- "node_modules/is-plain-obj": {
+ "is-plain-obj": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
- "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw=="
},
- "node_modules/is-plain-object": {
+ "is-plain-object": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
- "dependencies": {
+ "requires": {
"isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
}
},
- "node_modules/is-potential-custom-element-name": {
+ "is-potential-custom-element-name": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
"integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="
},
- "node_modules/is-promise": {
+ "is-promise": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz",
"integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=",
"dev": true
},
- "node_modules/is-redirect": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
- "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-regex": {
+ "is-regex": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
"integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
- "dependencies": {
+ "requires": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-shared-array-buffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
- "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
- "dependencies": {
- "call-bind": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "is-shared-array-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz",
+ "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA=="
+ },
+ "is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true
},
- "node_modules/is-string": {
+ "is-string": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
"integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
- "dependencies": {
+ "requires": {
"has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-symbol": {
+ "is-symbol": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
"integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
- "dependencies": {
+ "requires": {
"has-symbols": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-typedarray": {
+ "is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
},
- "node_modules/is-unicode-supported": {
+ "is-unicode-supported": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
"integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "dev": true
},
- "node_modules/is-weakref": {
+ "is-weakref": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
"integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
- "dependencies": {
+ "requires": {
"call-bind": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-wsl": {
+ "is-wsl": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
"integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
- "dependencies": {
+ "requires": {
"is-docker": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
}
},
- "node_modules/isarray": {
+ "isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
"dev": true
},
- "node_modules/isexe": {
+ "isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
},
- "node_modules/isobject": {
+ "isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
"integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
+ "dev": true
},
- "node_modules/isstream": {
+ "isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
},
- "node_modules/jake": {
- "version": "10.8.5",
- "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz",
- "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==",
- "dependencies": {
+ "jake": {
+ "version": "10.8.7",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz",
+ "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==",
+ "requires": {
"async": "^3.2.3",
"chalk": "^4.0.2",
- "filelist": "^1.0.1",
- "minimatch": "^3.0.4"
- },
- "bin": {
- "jake": "bin/cli.js"
- },
- "engines": {
- "node": ">=10"
+ "filelist": "^1.0.4",
+ "minimatch": "^3.1.2"
}
},
- "node_modules/js-cookie": {
+ "js-cookie": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz",
- "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==",
- "engines": {
- "node": ">=14"
- }
+ "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw=="
+ },
+ "js-md4": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz",
+ "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA=="
},
- "node_modules/js-tokens": {
+ "js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true
},
- "node_modules/js-yaml": {
+ "js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dependencies": {
+ "requires": {
"argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/jsbi": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-3.2.5.tgz",
- "integrity": "sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ=="
+ "jsbi": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-4.3.0.tgz",
+ "integrity": "sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g=="
},
- "node_modules/jsbn": {
+ "jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
},
- "node_modules/jsdom": {
+ "jsdom": {
"version": "19.0.0",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz",
"integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==",
- "dependencies": {
+ "requires": {
"abab": "^2.0.5",
"acorn": "^8.5.0",
"acorn-globals": "^6.0.0",
@@ -14942,637 +6366,337 @@
"whatwg-url": "^10.0.0",
"ws": "^8.2.3",
"xml-name-validator": "^4.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "peerDependencies": {
- "canvas": "^2.5.0"
- },
- "peerDependenciesMeta": {
- "canvas": {
- "optional": true
- }
}
},
- "node_modules/jsesc": {
+ "jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true,
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=4"
- }
+ "dev": true
},
- "node_modules/json-schema": {
+ "json-schema": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
"integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
},
- "node_modules/json-schema-traverse": {
+ "json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
},
- "node_modules/json-stable-stringify-without-jsonify": {
+ "json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
"dev": true
},
- "node_modules/json-stringify-safe": {
+ "json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
},
- "node_modules/json5": {
+ "json5": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
"integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
"dev": true,
- "dependencies": {
+ "requires": {
"minimist": "^1.2.0"
- },
- "bin": {
- "json5": "lib/cli.js"
}
},
- "node_modules/jsonfile": {
+ "jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
- "optionalDependencies": {
+ "requires": {
"graceful-fs": "^4.1.6"
}
},
- "node_modules/jsonminify": {
+ "jsonminify": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/jsonminify/-/jsonminify-0.4.2.tgz",
- "integrity": "sha512-mEtP5ECD0293D+s45JhDutqF5mFCkWY8ClrPFxjSFR2KUoantofky7noSzyKnAnD9Gd8pXHZSUd5bgzLDUBbfA==",
- "engines": {
- "node": ">=0.8.0",
- "npm": ">=1.1.0"
- }
+ "integrity": "sha512-mEtP5ECD0293D+s45JhDutqF5mFCkWY8ClrPFxjSFR2KUoantofky7noSzyKnAnD9Gd8pXHZSUd5bgzLDUBbfA=="
},
- "node_modules/jsonschema": {
+ "jsonschema": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
"integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
- "dev": true,
- "engines": {
- "node": "*"
- }
+ "dev": true
},
- "node_modules/jsonschema-draft4": {
+ "jsonschema-draft4": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/jsonschema-draft4/-/jsonschema-draft4-1.0.0.tgz",
"integrity": "sha1-8K8gBQVPDwrefqIRhhS2ncUS2GU=",
"dev": true
},
- "node_modules/jsonwebtoken": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
- "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
- "dev": true,
- "peer": true,
- "dependencies": {
+ "jsonwebtoken": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz",
+ "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==",
+ "requires": {
"jws": "^3.2.2",
- "lodash.includes": "^4.3.0",
- "lodash.isboolean": "^3.0.3",
- "lodash.isinteger": "^4.0.4",
- "lodash.isnumber": "^3.0.3",
- "lodash.isplainobject": "^4.0.6",
- "lodash.isstring": "^4.0.1",
- "lodash.once": "^4.0.0",
+ "lodash": "^4.17.21",
"ms": "^2.1.1",
- "semver": "^5.6.0"
+ "semver": "^7.3.8"
},
- "engines": {
- "node": ">=4",
- "npm": ">=1.4.28"
- }
- },
- "node_modules/jsonwebtoken/node_modules/jws": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
- "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
- "dev": true,
- "peer": true,
"dependencies": {
- "jwa": "^1.4.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/jsonwebtoken/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "peer": true
- },
- "node_modules/jsonwebtoken/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "peer": true,
- "bin": {
- "semver": "bin/semver"
+ "jws": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+ "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+ "requires": {
+ "jwa": "^1.4.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ }
}
},
- "node_modules/jsprim": {
+ "jsprim": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
"integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
- "dependencies": {
+ "requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
"json-schema": "0.4.0",
"verror": "1.10.0"
- },
- "engines": {
- "node": ">=0.6.0"
}
},
- "node_modules/jszip": {
+ "jszip": {
"version": "3.10.1",
"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
"integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
"dev": true,
- "dependencies": {
+ "requires": {
"lie": "~3.3.0",
"pako": "~1.0.2",
"readable-stream": "~2.3.6",
"setimmediate": "^1.0.5"
- }
- },
- "node_modules/jszip/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- },
- "node_modules/jszip/node_modules/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,
- "dependencies": {
- "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"
- }
- },
- "node_modules/jszip/node_modules/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,
+ },
"dependencies": {
- "safe-buffer": "~5.1.0"
+ "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"
+ }
+ }
}
},
- "node_modules/just-extend": {
+ "just-extend": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
"integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
"dev": true
},
- "node_modules/jwa": {
+ "jwa": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
"integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
- "dependencies": {
+ "requires": {
"buffer-equal-constant-time": "1.0.1",
"ecdsa-sig-formatter": "1.0.11",
"safe-buffer": "^5.0.1"
}
},
- "node_modules/jws": {
+ "jws": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
"integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
- "dependencies": {
+ "requires": {
"jwa": "^2.0.0",
"safe-buffer": "^5.0.1"
- }
- },
- "node_modules/jws/node_modules/jwa": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
- "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
+ },
"dependencies": {
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
+ "jwa": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
+ "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
+ "requires": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ }
}
},
- "node_modules/kebab-case": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/kebab-case/-/kebab-case-1.0.1.tgz",
- "integrity": "sha512-txPHx6nVLhv8PHGXIlAk0nYoh894SpAqGPXNvbg2hh8spvHXIah3+vT87DLoa59nKgC6scD3u3xAuRIgiMqbfQ==",
+ "kebab-case": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/kebab-case/-/kebab-case-1.0.2.tgz",
+ "integrity": "sha512-7n6wXq4gNgBELfDCpzKc+mRrZFs7D+wgfF5WRFLNAr4DA/qtr9Js8uOAVAfHhuLMfAcQ0pRKqbpjx+TcJVdE1Q==",
"dev": true
},
- "node_modules/keytar": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz",
- "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "peer": true,
- "dependencies": {
- "node-addon-api": "^4.3.0",
- "prebuild-install": "^7.0.1"
- }
- },
- "node_modules/keytar/node_modules/node-addon-api": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
- "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==",
- "dev": true,
- "optional": true,
- "peer": true
- },
- "node_modules/kind-of": {
+ "kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
+ "dev": true
},
- "node_modules/languages4translatewiki": {
+ "languages4translatewiki": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/languages4translatewiki/-/languages4translatewiki-0.1.3.tgz",
"integrity": "sha1-xDYgbgUtIUkLEQF6RNURj5Ih5ds="
},
- "node_modules/levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "dependencies": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- },
- "engines": {
- "node": ">= 0.8.0"
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
}
},
- "node_modules/lie": {
+ "lie": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
"integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"immediate": "~3.0.5"
}
},
- "node_modules/locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dev": true,
- "dependencies": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
+ "requires": {
+ "p-locate": "^5.0.0"
}
},
- "node_modules/lodash": {
+ "lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
- "node_modules/lodash.assignin": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
- "integrity": "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==",
- "dev": true,
- "peer": true
- },
- "node_modules/lodash.bind": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
- "integrity": "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==",
- "dev": true,
- "peer": true
- },
- "node_modules/lodash.clonedeep": {
+ "lodash.clonedeep": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
"integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
},
- "node_modules/lodash.debounce": {
+ "lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
"dev": true
},
- "node_modules/lodash.defaults": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
- "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==",
- "dev": true,
- "peer": true
- },
- "node_modules/lodash.filter": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz",
- "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==",
- "dev": true,
- "peer": true
- },
- "node_modules/lodash.flatten": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
- "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==",
- "dev": true,
- "peer": true
- },
- "node_modules/lodash.foreach": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
- "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==",
- "dev": true,
- "peer": true
- },
- "node_modules/lodash.get": {
+ "lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
"dev": true
},
- "node_modules/lodash.includes": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
- "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==",
- "dev": true,
- "peer": true
- },
- "node_modules/lodash.isboolean": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
- "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==",
- "dev": true,
- "peer": true
- },
- "node_modules/lodash.isinteger": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
- "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==",
- "dev": true,
- "peer": true
- },
- "node_modules/lodash.isnumber": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
- "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==",
- "dev": true,
- "peer": true
- },
- "node_modules/lodash.isplainobject": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
- "dev": true,
- "peer": true
- },
- "node_modules/lodash.isstring": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
- "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==",
- "dev": true,
- "peer": true
- },
- "node_modules/lodash.map": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
- "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==",
- "dev": true,
- "peer": true
- },
- "node_modules/lodash.merge": {
+ "lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
},
- "node_modules/lodash.once": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
- "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
- "dev": true,
- "peer": true
- },
- "node_modules/lodash.pick": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
- "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==",
- "dev": true,
- "peer": true
- },
- "node_modules/lodash.reduce": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
- "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==",
- "dev": true,
- "peer": true
- },
- "node_modules/lodash.reject": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
- "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==",
- "dev": true,
- "peer": true
- },
- "node_modules/lodash.some": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
- "integrity": "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==",
- "dev": true,
- "peer": true
- },
- "node_modules/log-symbols": {
+ "log-symbols": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/log-symbols/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/log-symbols/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/log-symbols/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/log-symbols/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/log-symbols/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/log-symbols/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
"dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
+ "requires": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
}
},
- "node_modules/log4js": {
+ "log4js": {
"version": "6.9.1",
"resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz",
"integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==",
- "dependencies": {
+ "requires": {
"date-format": "^4.0.14",
"debug": "^4.3.4",
"flatted": "^3.2.7",
"rfdc": "^1.3.0",
"streamroller": "^3.1.5"
},
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/log4js/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
- "node_modules/log4js/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/long": {
+ "long": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/long/-/long-2.4.0.tgz",
- "integrity": "sha1-n6GAux2VAM3CnEFWdmoZleH0Uk8=",
- "engines": {
- "node": ">=0.6"
- }
+ "integrity": "sha512-ijUtjmO/n2A5PaosNG9ZGDsQ3vxJg7ZW8vsY8Kp0f2yIZWhSJvjmegV7t+9RPQKxKrvj8yKGehhS+po14hPLGQ=="
},
- "node_modules/lru-cache": {
+ "lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dependencies": {
+ "requires": {
"yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
}
},
- "node_modules/make-dir": {
+ "make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "optional": true,
- "dependencies": {
+ "requires": {
"semver": "^6.0.0"
},
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/make-dir/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "optional": true,
- "bin": {
- "semver": "bin/semver.js"
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
}
},
- "node_modules/make-fetch-happen": {
+ "make-fetch-happen": {
"version": "9.1.0",
"resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
"integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==",
"optional": true,
- "dependencies": {
+ "requires": {
"agentkeepalive": "^4.1.3",
"cacache": "^15.2.0",
"http-cache-semantics": "^4.1.0",
@@ -15590,1002 +6714,727 @@
"socks-proxy-agent": "^6.0.0",
"ssri": "^8.0.0"
},
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/make-fetch-happen/node_modules/@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
- "optional": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/make-fetch-happen/node_modules/agentkeepalive": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz",
- "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==",
- "optional": true,
- "dependencies": {
- "debug": "^4.1.0",
- "depd": "^2.0.0",
- "humanize-ms": "^1.2.1"
- },
- "engines": {
- "node": ">= 8.0.0"
- }
- },
- "node_modules/make-fetch-happen/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "optional": true,
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
+ "@tootallnate/once": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+ "optional": true
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "optional": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "http-proxy-agent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+ "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+ "optional": true,
+ "requires": {
+ "@tootallnate/once": "1",
+ "agent-base": "6",
+ "debug": "4"
+ }
+ },
+ "minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "optional": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"optional": true
}
}
},
- "node_modules/make-fetch-happen/node_modules/http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
- "optional": true,
- "dependencies": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/make-fetch-happen/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "optional": true
- },
- "node_modules/measured-core": {
+ "measured-core": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/measured-core/-/measured-core-2.0.0.tgz",
"integrity": "sha512-SIzGtX1WGDvR59FqcJaGEAqDueBvLBh6W4T/gQaHr5ufcqvQkUHGcfQhlmq77mkeF5Mo+UpD+8hm69CwUVibGw==",
- "dependencies": {
+ "requires": {
"binary-search": "^1.3.3",
"optional-js": "^2.0.0"
- },
- "engines": {
- "node": ">= 5.12"
}
},
- "node_modules/media-typer": {
+ "media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
- "engines": {
- "node": ">= 0.6"
- }
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
},
- "node_modules/memory-pager": {
+ "memory-pager": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
"integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
"optional": true
},
- "node_modules/merge-descriptors": {
+ "merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
},
- "node_modules/merge2": {
+ "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==",
+ "dev": true
+ },
+ "merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "engines": {
- "node": ">= 8"
- }
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
},
- "node_modules/methods": {
+ "methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
- "engines": {
- "node": ">= 0.6"
- }
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
},
- "node_modules/micromatch": {
+ "micromatch": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
"integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
- "dependencies": {
+ "requires": {
"braces": "^3.0.2",
"picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
}
},
- "node_modules/mime": {
+ "mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
},
- "node_modules/mime-db": {
+ "mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "engines": {
- "node": ">= 0.6"
- }
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
},
- "node_modules/mime-types": {
+ "mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dependencies": {
+ "requires": {
"mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
}
},
- "node_modules/mimic-response": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
- "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
- "dev": true,
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
},
- "node_modules/minimatch": {
+ "minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dependencies": {
+ "requires": {
"brace-expansion": "^1.1.7"
},
- "engines": {
- "node": "*"
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ }
}
},
- "node_modules/minimist": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+ "minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"dev": true
},
- "node_modules/minipass": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz",
- "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==",
- "optional": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
+ "minipass": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+ "optional": true
},
- "node_modules/minipass-collect": {
+ "minipass-collect": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
"integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
"optional": true,
- "dependencies": {
+ "requires": {
"minipass": "^3.0.0"
},
- "engines": {
- "node": ">= 8"
+ "dependencies": {
+ "minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "optional": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ }
}
},
- "node_modules/minipass-fetch": {
+ "minipass-fetch": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz",
"integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==",
"optional": true,
- "dependencies": {
+ "requires": {
+ "encoding": "^0.1.12",
"minipass": "^3.1.0",
"minipass-sized": "^1.0.3",
"minizlib": "^2.0.0"
},
- "engines": {
- "node": ">=8"
- },
- "optionalDependencies": {
- "encoding": "^0.1.12"
+ "dependencies": {
+ "minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "optional": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ }
}
},
- "node_modules/minipass-flush": {
+ "minipass-flush": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
"integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
"optional": true,
- "dependencies": {
+ "requires": {
"minipass": "^3.0.0"
},
- "engines": {
- "node": ">= 8"
+ "dependencies": {
+ "minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "optional": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ }
}
},
- "node_modules/minipass-pipeline": {
+ "minipass-pipeline": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
"integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
"optional": true,
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minipass-sized": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
- "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
- "optional": true,
- "dependencies": {
+ "requires": {
"minipass": "^3.0.0"
},
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minizlib": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
- "optional": true,
- "dependencies": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "optional": true,
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/mkdirp-classic": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
- "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
- "dev": true,
- "optional": true,
- "peer": true
- },
- "node_modules/mocha": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz",
- "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==",
- "dev": true,
- "dependencies": {
- "@ungap/promise-all-settled": "1.1.2",
- "ansi-colors": "4.1.1",
- "browser-stdout": "1.3.1",
- "chokidar": "3.5.3",
- "debug": "4.3.3",
- "diff": "5.0.0",
- "escape-string-regexp": "4.0.0",
- "find-up": "5.0.0",
- "glob": "7.2.0",
- "growl": "1.10.5",
- "he": "1.2.0",
- "js-yaml": "4.1.0",
- "log-symbols": "4.1.0",
- "minimatch": "4.2.1",
- "ms": "2.1.3",
- "nanoid": "3.3.1",
- "serialize-javascript": "6.0.0",
- "strip-json-comments": "3.1.1",
- "supports-color": "8.1.1",
- "which": "2.0.2",
- "workerpool": "6.2.0",
- "yargs": "16.2.0",
- "yargs-parser": "20.2.4",
- "yargs-unparser": "2.0.0"
- },
- "bin": {
- "_mocha": "bin/_mocha",
- "mocha": "bin/mocha"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/mochajs"
- }
- },
- "node_modules/mocha-froth": {
- "version": "0.2.10",
- "resolved": "https://registry.npmjs.org/mocha-froth/-/mocha-froth-0.2.10.tgz",
- "integrity": "sha512-xyJqAYtm2zjrkG870hjeSVvGgS4Dc9tRokmN6R7XLgBKhdtAJ1ytU6zL045djblfHaPyTkSerQU4wqcjsv7Aew==",
- "dev": true
- },
- "node_modules/mocha/node_modules/debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/mocha/node_modules/debug/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/mocha/node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/mocha/node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/mocha/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/mocha/node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/mocha/node_modules/minimatch": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz",
- "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/mocha/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "node_modules/mocha/node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/mocha/node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
"dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "optional": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ }
}
},
- "node_modules/mocha/node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "engines": {
- "node": ">=8"
+ "minipass-sized": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
+ "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
+ "optional": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ },
+ "dependencies": {
+ "minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "optional": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ }
}
},
- "node_modules/mocha/node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "engines": {
- "node": ">=8"
+ "minizlib": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+ "optional": true,
+ "requires": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "dependencies": {
+ "minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "optional": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ }
}
},
- "node_modules/mocha/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "optional": true
+ },
+ "mocha": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz",
+ "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==",
"dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
+ "requires": {
+ "@ungap/promise-all-settled": "1.1.2",
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.5.3",
+ "debug": "4.3.3",
+ "diff": "5.0.0",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.2.0",
+ "growl": "1.10.5",
+ "he": "1.2.0",
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
+ "minimatch": "4.2.1",
+ "ms": "2.1.3",
+ "nanoid": "3.3.1",
+ "serialize-javascript": "6.0.0",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "which": "2.0.2",
+ "workerpool": "6.2.0",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
},
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "minimatch": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz",
+ "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.4",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
+ "dev": true
+ }
}
},
- "node_modules/mock-json-schema": {
+ "mocha-froth": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/mocha-froth/-/mocha-froth-0.2.10.tgz",
+ "integrity": "sha512-xyJqAYtm2zjrkG870hjeSVvGgS4Dc9tRokmN6R7XLgBKhdtAJ1ytU6zL045djblfHaPyTkSerQU4wqcjsv7Aew==",
+ "dev": true
+ },
+ "mock-json-schema": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/mock-json-schema/-/mock-json-schema-1.1.1.tgz",
"integrity": "sha512-YV23vlsLP1EEOy0EviUvZTluXjLR+rhMzeayP2rcDiezj3RW01MhOSQkbQskdtg0K2fnGas5LKbSXgNjAOSX4A==",
- "dependencies": {
+ "requires": {
"lodash": "^4.17.21"
}
},
- "node_modules/mongodb": {
- "version": "3.7.3",
- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz",
- "integrity": "sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw==",
- "dependencies": {
+ "mongodb": {
+ "version": "3.7.4",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.4.tgz",
+ "integrity": "sha512-K5q8aBqEXMwWdVNh94UQTwZ6BejVbFhh1uB6c5FKtPE9eUMZPUO3sRZdgIEcHSrAWmxzpG/FeODDKL388sqRmw==",
+ "requires": {
"bl": "^2.2.1",
"bson": "^1.1.4",
"denque": "^1.4.1",
"optional-require": "^1.1.8",
- "safe-buffer": "^5.1.2"
- },
- "engines": {
- "node": ">=4"
- },
- "optionalDependencies": {
+ "safe-buffer": "^5.1.2",
"saslprep": "^1.0.0"
- },
- "peerDependenciesMeta": {
- "aws4": {
- "optional": true
- },
- "bson-ext": {
- "optional": true
- },
- "kerberos": {
- "optional": true
- },
- "mongodb-client-encryption": {
- "optional": true
- },
- "mongodb-extjson": {
- "optional": true
- },
- "snappy": {
- "optional": true
- }
}
},
- "node_modules/ms": {
+ "ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
- "node_modules/msal": {
- "version": "1.4.18",
- "resolved": "https://registry.npmjs.org/msal/-/msal-1.4.18.tgz",
- "integrity": "sha512-QyWMWrZqpwtK6LEqhwtbikxIWqA1EOcdMvDeIDjIXdGU29wM4orwq538sPe1+JfKDIgPmJj1Fgi5B7luaw/IyA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "tslib": "^1.9.3"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/msal/node_modules/tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true,
- "peer": true
- },
- "node_modules/mssql": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/mssql/-/mssql-8.1.0.tgz",
- "integrity": "sha512-S7j4MoanTCLM09I+wMI9thTS2342mgxCpOQ9kpnFiG3P1NStuQMhPILLOgOt6hwMa/ctfTUKl7eJpB5XGPoe6A==",
- "dependencies": {
- "@tediousjs/connection-string": "^0.3.0",
- "commander": "^9.1.0",
+ "mssql": {
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/mssql/-/mssql-9.1.1.tgz",
+ "integrity": "sha512-m0yTx9xzUtTvJpWJHqknUXUDPRnJXZYOOFNygnNIXn1PBkLsC/rkXQdquObd+M0ZPlBhGC00Jg28zG0wCl7VWg==",
+ "requires": {
+ "@tediousjs/connection-string": "^0.4.1",
+ "commander": "^9.4.0",
"debug": "^4.3.3",
"rfdc": "^1.3.0",
"tarn": "^3.0.2",
- "tedious": "^14.0.0"
+ "tedious": "^15.0.1"
},
- "bin": {
- "mssql": "bin/mssql"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/mssql/node_modules/commander": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz",
- "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==",
- "engines": {
- "node": "^12.20.0 || >=14"
- }
- },
- "node_modules/mssql/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
+ "commander": {
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
+ "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ=="
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
- "node_modules/mssql/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/mysql": {
+ "mysql": {
"version": "2.18.1",
"resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
"integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
- "dependencies": {
+ "requires": {
"bignumber.js": "9.0.0",
"readable-stream": "2.3.7",
"safe-buffer": "5.1.2",
"sqlstring": "2.3.1"
},
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mysql/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "node_modules/mysql/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dependencies": {
- "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"
- }
- },
- "node_modules/mysql/node_modules/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==",
"dependencies": {
- "safe-buffer": "~5.1.0"
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "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=="
+ },
+ "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==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
- "node_modules/nano": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/nano/-/nano-9.0.5.tgz",
- "integrity": "sha512-fEAhwAdXh4hDDnC8cYJtW6D8ivOmpvFAqT90+zEuQREpRkzA/mJPcI4EKv15JUdajaqiLTXNoKK6PaRF+/06DQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@types/tough-cookie": "^4.0.0",
- "axios": "^0.21.1",
- "axios-cookiejar-support": "^1.0.1",
- "qs": "^6.9.4",
- "tough-cookie": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
+ "nano": {
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/nano/-/nano-10.1.2.tgz",
+ "integrity": "sha512-P3zSoD/sxAgDs/IE9eqpeAXqTdQ/gA9e9dnzaltr4A3WUo/n+eh66T873L+md5v8lXOutX/7dvcHFOO22f5hDw==",
+ "requires": {
+ "axios": "^1.2.2",
+ "node-abort-controller": "^3.0.1",
+ "qs": "^6.11.0"
}
},
- "node_modules/nanoid": {
+ "nanoid": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz",
"integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==",
- "dev": true,
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/napi-build-utils": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
- "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
- "dev": true,
- "optional": true,
- "peer": true
+ "dev": true
},
- "node_modules/native-duplexpair": {
+ "native-duplexpair": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/native-duplexpair/-/native-duplexpair-1.0.0.tgz",
- "integrity": "sha1-eJkHjmS/PIo9cyYBs9QP8F21j6A="
+ "integrity": "sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA=="
},
- "node_modules/natural-compare": {
+ "natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true
},
- "node_modules/negotiator": {
+ "natural-compare-lite": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
+ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
+ "dev": true
+ },
+ "negotiator": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
- "engines": {
- "node": ">= 0.6"
- }
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
},
- "node_modules/nise": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.1.tgz",
- "integrity": "sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A==",
+ "nise": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.4.tgz",
+ "integrity": "sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg==",
"dev": true,
- "dependencies": {
- "@sinonjs/commons": "^1.8.3",
- "@sinonjs/fake-timers": ">=5",
+ "requires": {
+ "@sinonjs/commons": "^2.0.0",
+ "@sinonjs/fake-timers": "^10.0.2",
"@sinonjs/text-encoding": "^0.7.1",
"just-extend": "^4.0.2",
"path-to-regexp": "^1.7.0"
- }
- },
- "node_modules/nise/node_modules/path-to-regexp": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
- "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
- "dev": true,
- "dependencies": {
- "isarray": "0.0.1"
- }
- },
- "node_modules/node-abi": {
- "version": "3.45.0",
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.45.0.tgz",
- "integrity": "sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ==",
- "dev": true,
- "optional": true,
- "peer": true,
- "dependencies": {
- "semver": "^7.3.5"
},
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/node-abort-controller": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.0.1.tgz",
- "integrity": "sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw=="
- },
- "node_modules/node-addon-api": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz",
- "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==",
- "dev": true,
- "optional": true,
- "peer": true
- },
- "node_modules/node-fetch": {
- "version": "2.6.7",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
- "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
"dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
+ "@sinonjs/commons": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
+ "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
+ "dev": true,
+ "requires": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "@sinonjs/fake-timers": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
+ "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^3.0.0"
+ },
+ "dependencies": {
+ "@sinonjs/commons": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz",
+ "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==",
+ "dev": true,
+ "requires": {
+ "type-detect": "4.0.8"
+ }
+ }
+ }
+ },
+ "path-to-regexp": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+ "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
+ "dev": true,
+ "requires": {
+ "isarray": "0.0.1"
+ }
}
}
},
- "node_modules/node-fetch/node_modules/tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
- },
- "node_modules/node-fetch/node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
- },
- "node_modules/node-fetch/node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "node_modules/node-gyp": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz",
- "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==",
- "dev": true,
- "optional": true,
- "peer": true,
- "dependencies": {
- "env-paths": "^2.2.0",
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.3",
- "nopt": "^5.0.0",
- "npmlog": "^4.1.2",
- "request": "^2.88.2",
- "rimraf": "^3.0.2",
- "semver": "^7.3.2",
- "tar": "^6.0.2",
- "which": "^2.0.2"
- },
- "bin": {
- "node-gyp": "bin/node-gyp.js"
- },
- "engines": {
- "node": ">= 10.12.0"
- }
- },
- "node_modules/node-gyp/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
- "dev": true,
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/node-gyp/node_modules/aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
- "dev": true,
- "optional": true,
- "peer": true
- },
- "node_modules/node-gyp/node_modules/are-we-there-yet": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz",
- "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==",
- "dev": true,
- "optional": true,
- "peer": true,
- "dependencies": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "node_modules/node-gyp/node_modules/gauge": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
- "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==",
- "dev": true,
- "optional": true,
- "peer": true,
- "dependencies": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "node_modules/node-gyp/node_modules/is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
- "dev": true,
- "optional": true,
- "peer": true,
- "dependencies": {
- "number-is-nan": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/node-gyp/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true,
- "optional": true,
- "peer": true
- },
- "node_modules/node-gyp/node_modules/npmlog": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
- "dev": true,
- "optional": true,
- "peer": true,
- "dependencies": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "node_modules/node-gyp/node_modules/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,
- "optional": true,
- "peer": true,
- "dependencies": {
- "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"
- }
+ "node-abort-controller": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
+ "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ=="
},
- "node_modules/node-gyp/node_modules/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,
- "optional": true,
- "peer": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
+ "node-addon-api": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
+ "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==",
+ "optional": true
},
- "node_modules/node-gyp/node_modules/string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
- "dev": true,
+ "node-fetch": {
+ "version": "2.6.12",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz",
+ "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==",
"optional": true,
- "peer": true,
- "dependencies": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
+ "requires": {
+ "whatwg-url": "^5.0.0"
},
- "engines": {
- "node": ">=0.10.0"
+ "dependencies": {
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "optional": true
+ },
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+ "optional": true
+ },
+ "whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "optional": true,
+ "requires": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ }
}
},
- "node_modules/node-gyp/node_modules/strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
- "dev": true,
+ "node-gyp": {
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz",
+ "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==",
"optional": true,
- "peer": true,
- "dependencies": {
- "ansi-regex": "^2.0.0"
+ "requires": {
+ "env-paths": "^2.2.0",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.6",
+ "make-fetch-happen": "^9.1.0",
+ "nopt": "^5.0.0",
+ "npmlog": "^6.0.0",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.5",
+ "tar": "^6.1.2",
+ "which": "^2.0.2"
},
- "engines": {
- "node": ">=0.10.0"
+ "dependencies": {
+ "are-we-there-yet": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz",
+ "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==",
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^3.6.0"
+ }
+ },
+ "gauge": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
+ "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
+ "optional": true,
+ "requires": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.3",
+ "console-control-strings": "^1.1.0",
+ "has-unicode": "^2.0.1",
+ "signal-exit": "^3.0.7",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.5"
+ }
+ },
+ "npmlog": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
+ "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "^3.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^4.0.3",
+ "set-blocking": "^2.0.0"
+ }
+ }
}
},
- "node_modules/node-releases": {
+ "node-releases": {
"version": "2.0.12",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz",
"integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==",
"dev": true
},
- "node_modules/nodeify": {
+ "nodeify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/nodeify/-/nodeify-1.0.1.tgz",
"integrity": "sha1-ZKtpp7268DzhB7TwM1yHwLnpGx0=",
"dev": true,
- "dependencies": {
+ "requires": {
"is-promise": "~1.0.0",
"promise": "~1.3.0"
}
},
- "node_modules/nodemon": {
+ "nodemon": {
"version": "2.0.22",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz",
"integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"chokidar": "^3.5.2",
"debug": "^3.2.7",
"ignore-by-default": "^1.0.1",
@@ -16597,244 +7446,311 @@
"touch": "^3.1.0",
"undefsafe": "^2.0.5"
},
- "bin": {
- "nodemon": "bin/nodemon.js"
- },
- "engines": {
- "node": ">=8.10.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/nodemon"
- }
- },
- "node_modules/nodemon/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/nodemon/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/nodemon/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "node_modules/nodemon/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/nodemon/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
"dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
}
},
- "node_modules/nopt": {
+ "nopt": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
"integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
"optional": true,
- "dependencies": {
+ "requires": {
"abbrev": "1"
- },
- "bin": {
- "nopt": "bin/nopt.js"
- },
- "engines": {
- "node": ">=6"
}
},
- "node_modules/normalize-path": {
+ "normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
"dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "requires": {
+ "path-key": "^3.0.0"
}
},
- "node_modules/npmlog": {
+ "npmlog": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
"integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
"optional": true,
- "dependencies": {
+ "requires": {
"are-we-there-yet": "^2.0.0",
"console-control-strings": "^1.1.0",
"gauge": "^3.0.0",
"set-blocking": "^2.0.0"
}
},
- "node_modules/nth-check": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
- "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "boolbase": "~1.0.0"
- }
- },
- "node_modules/number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
- "dev": true,
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/nwsapi": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
- "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ=="
+ "nwsapi": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.6.tgz",
+ "integrity": "sha512-vSZ4miHQ4FojLjmz2+ux4B0/XA16jfwt/LBzIUftDpRd8tujHFkXjMyLwjS08fIZCzesj2z7gJukOKJwqebJAQ=="
},
- "node_modules/oauth-sign": {
+ "oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "engines": {
- "node": "*"
- }
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
},
- "node_modules/object-assign": {
+ "object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "optional": true
},
- "node_modules/object-inspect": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
- "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
},
- "node_modules/object-keys": {
+ "object-keys": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "engines": {
- "node": ">= 0.4"
- }
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
},
- "node_modules/object.assign": {
+ "object.assign": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
"integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
- "dependencies": {
+ "requires": {
"call-bind": "^1.0.0",
"define-properties": "^1.1.3",
"has-symbols": "^1.0.1",
"object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/object.values": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
- "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
+ "object.values": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz",
+ "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==",
"dev": true,
- "dependencies": {
+ "requires": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "dependencies": {
+ "define-properties": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
+ "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+ "dev": true,
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.21.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz",
+ "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==",
+ "dev": true,
+ "requires": {
+ "array-buffer-byte-length": "^1.0.0",
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "es-set-tostringtag": "^2.0.1",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.2.0",
+ "get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.5",
+ "is-array-buffer": "^3.0.2",
+ "is-callable": "^1.2.7",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.10",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.4.3",
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trim": "^1.2.7",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.9"
+ }
+ },
+ "has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "dev": true
+ },
+ "internal-slot": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+ "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.2.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ }
+ },
+ "is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true
+ },
+ "is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ }
+ }
}
},
- "node_modules/observable-fns": {
+ "observable-fns": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/observable-fns/-/observable-fns-0.6.1.tgz",
"integrity": "sha512-9gRK4+sRWzeN6AOewNBTLXir7Zl/i3GB6Yl26gK4flxz8BXVpD3kt8amREmWNb0mxYOGDotvE5a4N+PtGGKdkg=="
},
- "node_modules/on-finished": {
+ "on-finished": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
- "dependencies": {
+ "requires": {
"ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
}
},
- "node_modules/on-headers": {
+ "on-headers": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
- "engines": {
- "node": ">= 0.8"
- }
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
},
- "node_modules/once": {
+ "once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dependencies": {
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
"wrappy": "1"
}
},
- "node_modules/open": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
- "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
- "dependencies": {
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "open": {
+ "version": "8.4.2",
+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
+ "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
+ "requires": {
"define-lazy-prop": "^2.0.0",
"is-docker": "^2.1.1",
"is-wsl": "^2.2.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/openapi-backend": {
+ "openapi-backend": {
"version": "5.9.2",
"resolved": "https://registry.npmjs.org/openapi-backend/-/openapi-backend-5.9.2.tgz",
"integrity": "sha512-x49QIeqwsty0v5BGzjXsEnx4Hm3cYYU9LOOc2+wWtF0ksMiCBdoZlwk/FQ2bvuZaECSoeCT8wc1iZArP3klwuA==",
- "dependencies": {
+ "requires": {
"@apidevtools/json-schema-ref-parser": "^10.1.0",
"ajv": "^8.6.2",
"bath-es5": "^3.0.3",
@@ -16846,919 +7762,640 @@
"openapi-types": "^12.0.2",
"qs": "^6.9.3"
},
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/anttiviljami"
- }
- },
- "node_modules/openapi-backend/node_modules/cookie": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
- "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
- "engines": {
- "node": ">= 0.6"
+ "dependencies": {
+ "cookie": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
+ }
}
},
- "node_modules/openapi-schema-validation": {
+ "openapi-schema-validation": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/openapi-schema-validation/-/openapi-schema-validation-0.4.2.tgz",
"integrity": "sha512-K8LqLpkUf2S04p2Nphq9L+3bGFh/kJypxIG2NVGKX0ffzT4NQI9HirhiY6Iurfej9lCu7y4Ndm4tv+lm86Ck7w==",
"dev": true,
- "dependencies": {
+ "requires": {
"jsonschema": "1.2.4",
"jsonschema-draft4": "^1.0.0",
"swagger-schema-official": "2.0.0-bab6bed"
}
},
- "node_modules/openapi-schema-validator": {
+ "openapi-schema-validator": {
"version": "12.1.3",
"resolved": "https://registry.npmjs.org/openapi-schema-validator/-/openapi-schema-validator-12.1.3.tgz",
"integrity": "sha512-xTHOmxU/VQGUgo7Cm0jhwbklOKobXby+/237EG967+3TQEYJztMgX9Q5UE2taZKwyKPUq0j11dngpGjUuxz1hQ==",
- "dependencies": {
+ "requires": {
"ajv": "^8.1.0",
"ajv-formats": "^2.0.2",
"lodash.merge": "^4.6.1",
"openapi-types": "^12.1.3"
}
},
- "node_modules/openapi-types": {
+ "openapi-types": {
"version": "12.1.3",
"resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz",
"integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw=="
},
- "node_modules/optional-js": {
+ "optional-js": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/optional-js/-/optional-js-2.3.0.tgz",
"integrity": "sha512-B0LLi+Vg+eko++0z/b8zIv57kp7HKEzaPJo7LowJXMUKYdf+3XJGu/cw03h/JhIOsLnP+cG5QnTHAuicjA5fMw=="
},
- "node_modules/optional-require": {
+ "optional-require": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz",
"integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==",
- "dependencies": {
+ "requires": {
"require-at": "^1.0.6"
- },
- "engines": {
- "node": ">=4"
}
},
- "node_modules/optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "dependencies": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- },
- "engines": {
- "node": ">= 0.8.0"
+ "optionator": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "dev": true,
+ "requires": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0"
}
},
- "node_modules/p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
- "dependencies": {
- "p-try": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
+ "requires": {
+ "yocto-queue": "^0.1.0"
}
},
- "node_modules/p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true,
- "dependencies": {
- "p-limit": "^1.1.0"
- },
- "engines": {
- "node": ">=4"
+ "requires": {
+ "p-limit": "^3.0.2"
}
},
- "node_modules/p-map": {
+ "p-map": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
"integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
"optional": true,
- "dependencies": {
+ "requires": {
"aggregate-error": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
},
- "node_modules/packet-reader": {
+ "packet-reader": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz",
"integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="
},
- "node_modules/pako": {
+ "pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
"dev": true
},
- "node_modules/parent-module": {
+ "parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dev": true,
- "dependencies": {
+ "requires": {
"callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
}
},
- "node_modules/parse5": {
+ "parse5": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
},
- "node_modules/parseqs": {
+ "parseqs": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz",
"integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w=="
},
- "node_modules/parseuri": {
+ "parseuri": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz",
"integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow=="
},
- "node_modules/parseurl": {
+ "parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "engines": {
- "node": ">= 0.8"
- }
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
},
- "node_modules/path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
},
- "node_modules/path-is-absolute": {
+ "path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "devOptional": true,
- "engines": {
- "node": ">=0.10.0"
- }
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
- "node_modules/path-key": {
+ "path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "engines": {
- "node": ">=8"
- }
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
},
- "node_modules/path-parse": {
+ "path-parse": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
- "node_modules/path-to-regexp": {
+ "path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
},
- "node_modules/path-type": {
+ "path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
+ "dev": true
},
- "node_modules/performance-now": {
+ "performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
},
- "node_modules/pg": {
- "version": "8.7.3",
- "resolved": "https://registry.npmjs.org/pg/-/pg-8.7.3.tgz",
- "integrity": "sha512-HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw==",
- "dependencies": {
+ "pg": {
+ "version": "8.11.1",
+ "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.1.tgz",
+ "integrity": "sha512-utdq2obft07MxaDg0zBJI+l/M3mBRfIpEN3iSemsz0G5F2/VXx+XzqF4oxrbIZXQxt2AZzIUzyVg/YM6xOP/WQ==",
+ "requires": {
"buffer-writer": "2.0.0",
"packet-reader": "1.0.0",
- "pg-connection-string": "^2.5.0",
- "pg-pool": "^3.5.1",
- "pg-protocol": "^1.5.0",
+ "pg-cloudflare": "^1.1.1",
+ "pg-connection-string": "^2.6.1",
+ "pg-pool": "^3.6.1",
+ "pg-protocol": "^1.6.0",
"pg-types": "^2.1.0",
"pgpass": "1.x"
- },
- "engines": {
- "node": ">= 8.0.0"
- },
- "peerDependencies": {
- "pg-native": ">=2.0.0"
- },
- "peerDependenciesMeta": {
- "pg-native": {
- "optional": true
- }
}
},
- "node_modules/pg-connection-string": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz",
- "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ=="
+ "pg-cloudflare": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz",
+ "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==",
+ "optional": true
+ },
+ "pg-connection-string": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.1.tgz",
+ "integrity": "sha512-w6ZzNu6oMmIzEAYVw+RLK0+nqHPt8K3ZnknKi+g48Ak2pr3dtljJW3o+D/n2zzCG07Zoe9VOX3aiKpj+BN0pjg=="
},
- "node_modules/pg-int8": {
+ "pg-int8": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
- "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==",
- "engines": {
- "node": ">=4.0.0"
- }
+ "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="
},
- "node_modules/pg-pool": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.1.tgz",
- "integrity": "sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ==",
- "peerDependencies": {
- "pg": ">=8.0"
- }
+ "pg-pool": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz",
+ "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og=="
},
- "node_modules/pg-protocol": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz",
- "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ=="
+ "pg-protocol": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz",
+ "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q=="
},
- "node_modules/pg-types": {
+ "pg-types": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz",
"integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
- "dependencies": {
+ "requires": {
"pg-int8": "1.0.1",
"postgres-array": "~2.0.0",
"postgres-bytea": "~1.0.0",
"postgres-date": "~1.0.4",
"postgres-interval": "^1.1.0"
- },
- "engines": {
- "node": ">=4"
}
},
- "node_modules/pgpass": {
+ "pgpass": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz",
"integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==",
- "dependencies": {
+ "requires": {
"split2": "^4.1.0"
}
},
- "node_modules/picocolors": {
+ "picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
"dev": true
},
- "node_modules/picomatch": {
+ "picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
},
- "node_modules/pify": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz",
- "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true
},
- "node_modules/pirates": {
+ "pirates": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
"integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
+ "dev": true
},
- "node_modules/pkg-dir": {
+ "pkg-dir": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
"integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
"dev": true,
- "dependencies": {
+ "requires": {
"find-up": "^3.0.0"
},
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pkg-dir/node_modules/find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "dependencies": {
- "locate-path": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pkg-dir/node_modules/locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pkg-dir/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-dir/node_modules/p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
"dependencies": {
- "p-limit": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pkg-dir/node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
+ "dev": true
+ }
}
},
- "node_modules/postgres-array": {
+ "postgres-array": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
- "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==",
- "engines": {
- "node": ">=4"
- }
+ "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="
},
- "node_modules/postgres-bytea": {
+ "postgres-bytea": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz",
- "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=",
- "engines": {
- "node": ">=0.10.0"
- }
+ "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w=="
},
- "node_modules/postgres-date": {
+ "postgres-date": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz",
- "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==",
- "engines": {
- "node": ">=0.10.0"
- }
+ "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="
},
- "node_modules/postgres-interval": {
+ "postgres-interval": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
"integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
- "dependencies": {
+ "requires": {
"xtend": "^4.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/prebuild-install": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz",
- "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==",
- "dev": true,
- "optional": true,
- "peer": true,
- "dependencies": {
- "detect-libc": "^2.0.0",
- "expand-template": "^2.0.3",
- "github-from-package": "0.0.0",
- "minimist": "^1.2.3",
- "mkdirp-classic": "^0.5.3",
- "napi-build-utils": "^1.0.1",
- "node-abi": "^3.3.0",
- "pump": "^3.0.0",
- "rc": "^1.2.7",
- "simple-get": "^4.0.0",
- "tar-fs": "^2.0.0",
- "tunnel-agent": "^0.6.0"
- },
- "bin": {
- "prebuild-install": "bin.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "engines": {
- "node": ">= 0.8.0"
}
},
- "node_modules/process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "engines": {
- "node": ">= 0.6.0"
- }
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
},
- "node_modules/process-nextick-args": {
+ "process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
- "node_modules/promise": {
+ "promise": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/promise/-/promise-1.3.0.tgz",
"integrity": "sha1-5cyaTIJ45GZP/twBx9qEhCsEAXU=",
"dev": true,
- "dependencies": {
+ "requires": {
"is-promise": "~1"
}
},
- "node_modules/promise-inflight": {
+ "promise-inflight": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
"integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
"optional": true
},
- "node_modules/promise-retry": {
+ "promise-retry": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
"integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
"optional": true,
- "dependencies": {
+ "requires": {
"err-code": "^2.0.2",
"retry": "^0.12.0"
- },
- "engines": {
- "node": ">=10"
}
},
- "node_modules/property-information": {
+ "property-information": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/property-information/-/property-information-6.1.1.tgz",
- "integrity": "sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
+ "integrity": "sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w=="
},
- "node_modules/proxy-addr": {
+ "proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
- "dependencies": {
+ "requires": {
"forwarded": "0.2.0",
"ipaddr.js": "1.9.1"
- },
- "engines": {
- "node": ">= 0.10"
}
},
- "node_modules/proxy-from-env": {
+ "proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
},
- "node_modules/psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
+ "psl": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
},
- "node_modules/pstree.remy": {
+ "pstree.remy": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
"integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
"dev": true
},
- "node_modules/pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "optional": true,
- "peer": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "engines": {
- "node": ">=6"
- }
+ "punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA=="
},
- "node_modules/qs": {
+ "qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
- "dependencies": {
+ "requires": {
"side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/queue-microtask": {
+ "querystringify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
+ },
+ "queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
},
- "node_modules/ramda": {
- "version": "0.28.0",
- "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz",
- "integrity": "sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/ramda"
- }
+ "rambda": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz",
+ "integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==",
+ "dev": true
},
- "node_modules/random-bytes": {
+ "random-bytes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
- "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==",
- "engines": {
- "node": ">= 0.8"
- }
+ "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ=="
},
- "node_modules/randombytes": {
+ "randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"safe-buffer": "^5.1.0"
}
},
- "node_modules/range-parser": {
+ "range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "engines": {
- "node": ">= 0.6"
- }
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
},
- "node_modules/rate-limiter-flexible": {
+ "rate-limiter-flexible": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/rate-limiter-flexible/-/rate-limiter-flexible-2.4.1.tgz",
"integrity": "sha512-dgH4T44TzKVO9CLArNto62hJOwlWJMLUjVVr/ii0uUzZXEXthDNr7/yefW5z/1vvHAfycc1tnuiYyNJ8CTRB3g=="
},
- "node_modules/raw-body": {
+ "raw-body": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
"integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
- "dependencies": {
+ "requires": {
"bytes": "3.1.2",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/rc": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
- "dev": true,
- "optional": true,
- "peer": true,
- "dependencies": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "bin": {
- "rc": "cli.js"
- }
- },
- "node_modules/rc/node_modules/strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
- "dev": true,
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
}
},
- "node_modules/readable-stream": {
+ "readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dependencies": {
+ "optional": true,
+ "requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
}
},
- "node_modules/readdirp": {
+ "readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
- "dependencies": {
+ "requires": {
"picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/redis": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/redis/-/redis-3.1.2.tgz",
- "integrity": "sha512-grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "denque": "^1.5.0",
- "redis-commands": "^1.7.0",
- "redis-errors": "^1.2.0",
- "redis-parser": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/node-redis"
- }
- },
- "node_modules/redis-commands": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz",
- "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==",
- "dev": true,
- "peer": true
- },
- "node_modules/redis-errors": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz",
- "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=4"
}
},
- "node_modules/redis-parser": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz",
- "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "redis-errors": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
+ "redis": {
+ "version": "4.6.7",
+ "resolved": "https://registry.npmjs.org/redis/-/redis-4.6.7.tgz",
+ "integrity": "sha512-KrkuNJNpCwRm5vFJh0tteMxW8SaUzkm5fBH7eL5hd/D0fAkzvapxbfGPP/r+4JAXdQuX7nebsBkBqA2RHB7Usw==",
+ "requires": {
+ "@redis/bloom": "1.2.0",
+ "@redis/client": "1.5.8",
+ "@redis/graph": "1.1.0",
+ "@redis/json": "1.0.4",
+ "@redis/search": "1.1.3",
+ "@redis/time-series": "1.0.4"
}
},
- "node_modules/regenerate": {
+ "regenerate": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
"integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
"dev": true
},
- "node_modules/regenerate-unicode-properties": {
+ "regenerate-unicode-properties": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz",
"integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"regenerate": "^1.4.2"
- },
- "engines": {
- "node": ">=4"
}
},
- "node_modules/regenerator-runtime": {
+ "regenerator-runtime": {
"version": "0.13.11",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
"integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
"dev": true
},
- "node_modules/regenerator-transform": {
+ "regenerator-transform": {
"version": "0.15.1",
"resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz",
"integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/runtime": "^7.8.4"
}
},
- "node_modules/regexpp": {
+ "regexp.prototype.flags": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz",
+ "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "functions-have-names": "^1.2.3"
+ },
+ "dependencies": {
+ "define-properties": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
+ "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ }
+ }
+ },
+ "regexpp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
"integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- }
+ "dev": true
},
- "node_modules/regexpu-core": {
+ "regexpu-core": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
"integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"@babel/regjsgen": "^0.8.0",
"regenerate": "^1.4.2",
"regenerate-unicode-properties": "^10.1.0",
"regjsparser": "^0.9.1",
"unicode-match-property-ecmascript": "^2.0.0",
"unicode-match-property-value-ecmascript": "^2.1.0"
- },
- "engines": {
- "node": ">=4"
}
},
- "node_modules/regjsparser": {
+ "regjsparser": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
"integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"jsesc": "~0.5.0"
},
- "bin": {
- "regjsparser": "bin/parser"
- }
- },
- "node_modules/regjsparser/node_modules/jsesc": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
- "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
- "dev": true,
- "bin": {
- "jsesc": "bin/jsesc"
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+ "dev": true
+ }
}
},
- "node_modules/rehype": {
+ "rehype": {
"version": "12.0.1",
"resolved": "https://registry.npmjs.org/rehype/-/rehype-12.0.1.tgz",
"integrity": "sha512-ey6kAqwLM3X6QnMDILJthGvG1m1ULROS9NT4uG9IDCuv08SFyLlreSuvOa//DgEvbXx62DS6elGVqusWhRUbgw==",
- "dependencies": {
+ "requires": {
"@types/hast": "^2.0.0",
"rehype-parse": "^8.0.0",
"rehype-stringify": "^9.0.0",
"unified": "^10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
}
},
- "node_modules/rehype-minify-whitespace": {
+ "rehype-minify-whitespace": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/rehype-minify-whitespace/-/rehype-minify-whitespace-5.0.1.tgz",
"integrity": "sha512-PPp4lWJiBPlePI/dv1BeYktbwkfgXkrK59MUa+tYbMPgleod+4DvFK2PLU0O0O60/xuhHfiR9GUIUlXTU8sRIQ==",
- "dependencies": {
+ "requires": {
"@types/hast": "^2.0.0",
"hast-util-embedded": "^2.0.0",
"hast-util-is-element": "^2.0.0",
"hast-util-whitespace": "^2.0.0",
"unified": "^10.0.0",
"unist-util-is": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
}
},
- "node_modules/rehype-parse": {
+ "rehype-parse": {
"version": "8.0.4",
"resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-8.0.4.tgz",
"integrity": "sha512-MJJKONunHjoTh4kc3dsM1v3C9kGrrxvA3U8PxZlP2SjH8RNUSrb+lF7Y0KVaUDnGH2QZ5vAn7ulkiajM9ifuqg==",
- "dependencies": {
+ "requires": {
"@types/hast": "^2.0.0",
"hast-util-from-parse5": "^7.0.0",
"parse5": "^6.0.0",
"unified": "^10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
}
},
- "node_modules/rehype-stringify": {
+ "rehype-stringify": {
"version": "9.0.3",
"resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.3.tgz",
"integrity": "sha512-kWiZ1bgyWlgOxpqD5HnxShKAdXtb2IUljn3hQAhySeak6IOQPPt6DeGnsIh4ixm7yKJWzm8TXFuC/lPfcWHJqw==",
- "dependencies": {
+ "requires": {
"@types/hast": "^2.0.0",
"hast-util-to-html": "^8.0.0",
"unified": "^10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
}
},
- "node_modules/request": {
+ "request": {
"version": "2.88.2",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
"integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
- "dependencies": {
+ "requires": {
"aws-sign2": "~0.7.0",
"aws4": "^1.8.0",
"caseless": "~0.12.0",
@@ -17780,294 +8417,365 @@
"tunnel-agent": "^0.6.0",
"uuid": "^3.3.2"
},
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/request/node_modules/form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 0.12"
- }
- },
- "node_modules/request/node_modules/qs": {
- "version": "6.5.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
- "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/request/node_modules/tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
"dependencies": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=0.8"
+ "form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "qs": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
+ },
+ "tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "requires": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ }
}
},
- "node_modules/require-at": {
+ "require-at": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz",
- "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==",
- "engines": {
- "node": ">=4"
- }
+ "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g=="
},
- "node_modules/require-directory": {
+ "require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true
},
- "node_modules/require-from-string": {
+ "require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "engines": {
- "node": ">=0.10.0"
- }
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
},
- "node_modules/reserved-words": {
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
+ },
+ "reserved-words": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz",
"integrity": "sha512-0S5SrIUJ9LfpbVl4Yzij6VipUdafHrOTzvmfazSw/jeZrZtQK303OPZW+obtkaw7jQlTQppy0UvZWm9872PbRw=="
},
- "node_modules/resolve": {
+ "resolve": {
"version": "1.22.2",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
"integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
- "dependencies": {
+ "requires": {
"is-core-module": "^2.11.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/resolve-from": {
+ "resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
+ "dev": true
},
- "node_modules/resolve/node_modules/is-core-module": {
- "version": "2.12.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
- "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
- "dependencies": {
- "has": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true
},
- "node_modules/rethinkdb": {
+ "rethinkdb": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/rethinkdb/-/rethinkdb-2.4.2.tgz",
"integrity": "sha512-6DzwqEpFc8cqesAdo07a845oBRxLiHvWzopTKBo/uY2ypGWIsJQFJk3wjRDtSEhczxJqLS0jnf37rwgzYAw8NQ==",
- "dependencies": {
+ "requires": {
"bluebird": ">= 2.3.2 < 3"
- },
- "engines": {
- "node": ">= 0.10.0"
}
},
- "node_modules/retry": {
+ "retry": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
"integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
- "optional": true,
- "engines": {
- "node": ">= 4"
- }
+ "optional": true
},
- "node_modules/reusify": {
+ "reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
},
- "node_modules/rfdc": {
+ "rfdc": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
"integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="
},
- "node_modules/rimraf": {
+ "rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "devOptional": true,
- "dependencies": {
+ "requires": {
"glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
+ "rollup-plugin-copy": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz",
+ "integrity": "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==",
+ "dev": true,
+ "requires": {
+ "@types/fs-extra": "^8.0.1",
+ "colorette": "^1.1.0",
+ "fs-extra": "^8.1.0",
+ "globby": "10.0.1",
+ "is-plain-object": "^3.0.0"
+ },
+ "dependencies": {
+ "globby": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz",
+ "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==",
+ "dev": true,
+ "requires": {
+ "@types/glob": "^7.1.1",
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.0.3",
+ "glob": "^7.1.3",
+ "ignore": "^5.1.1",
+ "merge2": "^1.2.3",
+ "slash": "^3.0.0"
+ }
+ },
+ "is-plain-object": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz",
+ "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==",
+ "dev": true
+ }
+ }
+ },
+ "rollup-plugin-typescript2": {
+ "version": "0.35.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.35.0.tgz",
+ "integrity": "sha512-szcIO9hPUx3PhQl91u4pfNAH2EKbtrXaES+m163xQVE5O1CC0ea6YZV/5woiDDW3CR9jF2CszPrKN+AFiND0bg==",
+ "dev": true,
+ "requires": {
+ "@rollup/pluginutils": "^4.1.2",
+ "find-cache-dir": "^3.3.2",
+ "fs-extra": "^10.0.0",
+ "semver": "^7.3.7",
+ "tslib": "^2.4.0"
+ },
+ "dependencies": {
+ "find-cache-dir": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
+ "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ }
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
+ "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ }
},
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
+ "jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6",
+ "universalify": "^2.0.0"
+ }
},
- {
- "type": "consulting",
- "url": "https://feross.org/support"
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ }
+ },
+ "universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "dev": true
}
- ],
- "dependencies": {
+ }
+ },
+ "run-applescript": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz",
+ "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==",
+ "dev": true,
+ "requires": {
+ "execa": "^5.0.0"
+ },
+ "dependencies": {
+ "execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ }
+ }
+ }
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "requires": {
"queue-microtask": "^1.2.2"
}
},
- "node_modules/rxjs": {
+ "rxjs": {
"version": "7.8.1",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
"integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
"dev": true,
- "dependencies": {
+ "requires": {
"tslib": "^2.1.0"
}
},
- "node_modules/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=="
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+ },
+ "safe-regex-test": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
+ "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "is-regex": "^1.1.4"
+ }
},
- "node_modules/safer-buffer": {
+ "safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
- "node_modules/saslprep": {
+ "saslprep": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
"integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
"optional": true,
- "dependencies": {
+ "requires": {
"sparse-bitfield": "^3.0.3"
- },
- "engines": {
- "node": ">=6"
}
},
- "node_modules/sax": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
- "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
- },
- "node_modules/saxes": {
+ "saxes": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
"integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
- "dependencies": {
+ "requires": {
"xmlchars": "^2.2.0"
- },
- "engines": {
- "node": ">=10"
}
},
- "node_modules/secure-json-parse": {
+ "secure-json-parse": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz",
"integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="
},
- "node_modules/security": {
+ "security": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/security/-/security-1.0.0.tgz",
- "integrity": "sha1-gRwwAxNoYTPvAAcSXjsO1wCXiBU=",
- "engines": {
- "node": "*"
- }
+ "integrity": "sha1-gRwwAxNoYTPvAAcSXjsO1wCXiBU="
},
- "node_modules/selenium-webdriver": {
+ "selenium-webdriver": {
"version": "4.10.0",
"resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.10.0.tgz",
"integrity": "sha512-hSQPw6jgc+ej/UEcdQPG/iBwwMeCEgZr9HByY/J8ToyXztEqXzU9aLsIyrlj1BywBcStO4JQK/zMUWWrV8+riA==",
"dev": true,
- "dependencies": {
+ "requires": {
"jszip": "^3.10.1",
"tmp": "^0.2.1",
"ws": ">=8.13.0"
- },
- "engines": {
- "node": ">= 14.20.0"
- }
- },
- "node_modules/selenium-webdriver/node_modules/ws": {
- "version": "8.13.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
- "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
- "dev": true,
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": ">=5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
}
},
- "node_modules/semver": {
- "version": "7.5.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz",
- "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==",
- "dependencies": {
+ "semver": {
+ "version": "7.5.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz",
+ "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==",
+ "requires": {
"lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
}
},
- "node_modules/send": {
+ "send": {
"version": "0.18.0",
"resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
"integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
- "dependencies": {
+ "requires": {
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
@@ -18082,306 +8790,206 @@
"range-parser": "~1.2.1",
"statuses": "2.0.1"
},
- "engines": {
- "node": ">= 0.8.0"
+ "dependencies": {
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ }
}
},
- "node_modules/send/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- },
- "node_modules/serialize-javascript": {
+ "serialize-javascript": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
"integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
"dev": true,
- "dependencies": {
+ "requires": {
"randombytes": "^2.1.0"
}
},
- "node_modules/serve-static": {
+ "serve-static": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
"integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
- "dependencies": {
+ "requires": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
"send": "0.18.0"
- },
- "engines": {
- "node": ">= 0.8.0"
}
},
- "node_modules/set-blocking": {
+ "set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
"optional": true
},
- "node_modules/set-cookie-parser": {
- "version": "2.4.8",
- "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz",
- "integrity": "sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg==",
+ "set-cookie-parser": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz",
+ "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==",
"dev": true
},
- "node_modules/setimmediate": {
+ "setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
"dev": true
},
- "node_modules/setprototypeof": {
+ "setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
},
- "node_modules/shallow-clone": {
+ "shallow-clone": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
"integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
"dev": true,
- "dependencies": {
+ "requires": {
"kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=8"
}
},
- "node_modules/shebang-command": {
+ "shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dependencies": {
+ "requires": {
"shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
}
},
- "node_modules/shebang-regex": {
+ "shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "engines": {
- "node": ">=8"
- }
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
},
- "node_modules/shell-quote": {
+ "shell-quote": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
"integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "dev": true
},
- "node_modules/side-channel": {
+ "side-channel": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
- "dependencies": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "optional": true
- },
- "node_modules/simple-concat": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
- "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "optional": true,
- "peer": true
- },
- "node_modules/simple-get": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
- "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "optional": true,
- "peer": true,
- "dependencies": {
- "decompress-response": "^6.0.0",
- "once": "^1.3.1",
- "simple-concat": "^1.0.0"
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
}
},
- "node_modules/simple-git": {
- "version": "3.16.0",
- "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.16.0.tgz",
- "integrity": "sha512-zuWYsOLEhbJRWVxpjdiXl6eyAyGo/KzVW+KFhhw9MqEEJttcq+32jTWSGyxTdf9e/YCohxRE+9xpWFj9FdiJNw==",
- "dependencies": {
+ "signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ },
+ "simple-git": {
+ "version": "3.19.1",
+ "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.19.1.tgz",
+ "integrity": "sha512-Ck+rcjVaE1HotraRAS8u/+xgTvToTuoMkT9/l9lvuP5jftwnYUp6DwuJzsKErHgfyRk8IB8pqGHWEbM3tLgV1w==",
+ "requires": {
"@kwsites/file-exists": "^1.1.1",
"@kwsites/promise-deferred": "^1.1.1",
"debug": "^4.3.4"
},
- "funding": {
- "type": "github",
- "url": "https://github.com/steveukx/git-js?sponsor=1"
- }
- },
- "node_modules/simple-git/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
- "node_modules/simple-git/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/simple-update-notifier": {
+ "simple-update-notifier": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz",
"integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==",
"dev": true,
- "dependencies": {
+ "requires": {
"semver": "~7.0.0"
},
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/simple-update-notifier/node_modules/semver": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
- "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
+ "dependencies": {
+ "semver": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
+ "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
+ "dev": true
+ }
}
},
- "node_modules/sinon": {
+ "sinon": {
"version": "13.0.2",
"resolved": "https://registry.npmjs.org/sinon/-/sinon-13.0.2.tgz",
"integrity": "sha512-KvOrztAVqzSJWMDoxM4vM+GPys1df2VBoXm+YciyB/OLMamfS3VXh3oGh5WtrAGSzrgczNWFFY22oKb7Fi5eeA==",
"dev": true,
- "dependencies": {
+ "requires": {
"@sinonjs/commons": "^1.8.3",
"@sinonjs/fake-timers": "^9.1.2",
"@sinonjs/samsam": "^6.1.1",
"diff": "^5.0.0",
"nise": "^5.1.1",
"supports-color": "^7.2.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/sinon"
- }
- },
- "node_modules/sinon/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/sinon/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
}
},
- "node_modules/slash": {
+ "slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
+ "dev": true
},
- "node_modules/smart-buffer": {
+ "smart-buffer": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
"integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
- "optional": true,
- "engines": {
- "node": ">= 6.0.0",
- "npm": ">= 3.0.0"
- }
+ "optional": true
},
- "node_modules/socket.io": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz",
- "integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==",
- "dependencies": {
+ "socket.io": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.5.0.tgz",
+ "integrity": "sha512-gGunfS0od3VpwDBpGwVkzSZx6Aqo9uOcf1afJj2cKnKFAoyl16fvhpsUhmUFd4Ldbvl5JvRQed6eQw6oQp6n8w==",
+ "requires": {
"debug": "~4.1.0",
- "engine.io": "~3.5.0",
+ "engine.io": "~3.6.0",
"has-binary2": "~1.0.2",
"socket.io-adapter": "~1.1.0",
- "socket.io-client": "2.4.0",
+ "socket.io-client": "2.5.0",
"socket.io-parser": "~3.4.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ }
}
},
- "node_modules/socket.io-adapter": {
+ "socket.io-adapter": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz",
"integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g=="
},
- "node_modules/socket.io-client": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz",
- "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==",
- "dependencies": {
+ "socket.io-client": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.5.0.tgz",
+ "integrity": "sha512-lOO9clmdgssDykiOmVQQitwBAF3I6mYcQAo7hQ7AM6Ny5X7fp8hIJ3HcQs3Rjz4SoggoxA1OgrQyY8EgTbcPYw==",
+ "requires": {
"backo2": "1.0.2",
"component-bind": "1.0.0",
"component-emitter": "~1.3.0",
@@ -18393,231 +9001,178 @@
"parseuri": "0.0.6",
"socket.io-parser": "~3.3.0",
"to-array": "0.1.4"
- }
- },
- "node_modules/socket.io-client/node_modules/debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/socket.io-client/node_modules/isarray": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
- "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
- },
- "node_modules/socket.io-client/node_modules/socket.io-parser": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.3.tgz",
- "integrity": "sha512-qOg87q1PMWWTeO01768Yh9ogn7chB9zkKtQnya41Y355S0UmpXgpcrFwAgjYJxu9BdKug5r5e9YtVSeWhKBUZg==",
+ },
"dependencies": {
- "component-emitter": "~1.3.0",
- "debug": "~3.1.0",
- "isarray": "2.0.1"
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ=="
+ },
+ "socket.io-parser": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.3.tgz",
+ "integrity": "sha512-qOg87q1PMWWTeO01768Yh9ogn7chB9zkKtQnya41Y355S0UmpXgpcrFwAgjYJxu9BdKug5r5e9YtVSeWhKBUZg==",
+ "requires": {
+ "component-emitter": "~1.3.0",
+ "debug": "~3.1.0",
+ "isarray": "2.0.1"
+ }
+ }
}
},
- "node_modules/socket.io-parser": {
+ "socket.io-parser": {
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.3.tgz",
"integrity": "sha512-1rE4dZN3kCI/E5wixd393hmbqa78vVpkKmnEJhLeWoS/C5hbFYAbcSfnWoaVH43u9ToUVtzKjguxEZq+1XZfCQ==",
- "dependencies": {
+ "requires": {
"component-emitter": "1.2.1",
"debug": "~4.1.0",
"isarray": "2.0.1"
},
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/socket.io-parser/node_modules/component-emitter": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
- "integrity": "sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA=="
- },
- "node_modules/socket.io-parser/node_modules/debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/socket.io-parser/node_modules/isarray": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
- "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ=="
- },
- "node_modules/socket.io-parser/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- },
- "node_modules/socket.io/node_modules/debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
"dependencies": {
- "ms": "^2.1.1"
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA=="
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ=="
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ }
}
},
- "node_modules/socket.io/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- },
- "node_modules/socks": {
+ "socks": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
"integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
"optional": true,
- "dependencies": {
+ "requires": {
"ip": "^2.0.0",
"smart-buffer": "^4.2.0"
- },
- "engines": {
- "node": ">= 10.13.0",
- "npm": ">= 3.0.0"
}
},
- "node_modules/socks-proxy-agent": {
+ "socks-proxy-agent": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz",
"integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==",
"optional": true,
- "dependencies": {
+ "requires": {
"agent-base": "^6.0.2",
"debug": "^4.3.3",
"socks": "^2.6.2"
},
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/socks-proxy-agent/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "optional": true,
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "optional": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"optional": true
}
}
},
- "node_modules/socks-proxy-agent/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "optional": true
- },
- "node_modules/source-map": {
+ "source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "engines": {
- "node": ">=0.10.0"
- }
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
},
- "node_modules/source-map-support": {
+ "source-map-support": {
"version": "0.5.21",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dependencies": {
+ "requires": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
}
},
- "node_modules/space-separated-tokens": {
+ "space-separated-tokens": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz",
- "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
+ "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw=="
},
- "node_modules/sparse-bitfield": {
+ "sparse-bitfield": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
- "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
+ "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==",
"optional": true,
- "dependencies": {
+ "requires": {
"memory-pager": "^1.0.2"
}
},
- "node_modules/spawn-command": {
+ "spawn-command": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz",
"integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==",
"dev": true
},
- "node_modules/split-grid": {
+ "split-grid": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/split-grid/-/split-grid-1.0.11.tgz",
"integrity": "sha512-ELtFtxc3r5we5GZfe6Fi0BFFxIi2M6BY1YEntBscKRDD3zx4JVHqx2VnTRSQu1BixCYSTH3MTjKd4esI2R7EgQ==",
"dev": true
},
- "node_modules/split2": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz",
- "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==",
- "engines": {
- "node": ">= 10.x"
- }
+ "split2": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="
},
- "node_modules/sprintf-js": {
+ "sprintf-js": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
"integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug=="
},
- "node_modules/sqlite3": {
- "version": "5.0.2",
- "resolved": "git+ssh://git@github.com/mapbox/node-sqlite3.git#593c9d498be2510d286349134537e3bf89401c4a",
- "integrity": "sha512-RPVUQfADvyk8Ahx8RQWmdf5trtV4GCB8lgeZqSlNNd2YQB92YTMeQlamqycYhgtwLZZa3iYQPwXC9C0X5YnNLw==",
- "dev": true,
- "hasInstallScript": true,
- "license": "BSD-3-Clause",
+ "sqlite3": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz",
+ "integrity": "sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==",
"optional": true,
- "peer": true,
- "dependencies": {
+ "requires": {
"@mapbox/node-pre-gyp": "^1.0.0",
- "node-addon-api": "^3.0.0"
- },
- "optionalDependencies": {
- "node-gyp": "7.x"
- },
- "peerDependencies": {
- "node-gyp": "7.x"
- },
- "peerDependenciesMeta": {
- "node-gyp": {
- "optional": true
- }
+ "node-addon-api": "^4.2.0",
+ "node-gyp": "8.x",
+ "tar": "^6.1.11"
}
},
- "node_modules/sqlstring": {
+ "sqlstring": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
- "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=",
- "engines": {
- "node": ">= 0.6"
- }
+ "integrity": "sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ=="
},
- "node_modules/sshpk": {
+ "sshpk": {
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
"integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
- "dependencies": {
+ "requires": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
"bcrypt-pbkdf": "^1.0.0",
@@ -18627,195 +9182,298 @@
"jsbn": "~0.1.0",
"safer-buffer": "^2.0.2",
"tweetnacl": "~0.14.0"
- },
- "bin": {
- "sshpk-conv": "bin/sshpk-conv",
- "sshpk-sign": "bin/sshpk-sign",
- "sshpk-verify": "bin/sshpk-verify"
- },
- "engines": {
- "node": ">=0.10.0"
}
},
- "node_modules/ssri": {
+ "ssri": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
"integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
"optional": true,
- "dependencies": {
+ "requires": {
"minipass": "^3.1.1"
},
- "engines": {
- "node": ">= 8"
+ "dependencies": {
+ "minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "optional": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ }
}
},
- "node_modules/statuses": {
+ "statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
- "engines": {
- "node": ">= 0.8"
- }
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
},
- "node_modules/stoppable": {
+ "stoppable": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz",
- "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==",
- "engines": {
- "node": ">=4",
- "npm": ">=6"
- }
+ "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw=="
},
- "node_modules/streamroller": {
+ "streamroller": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz",
"integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==",
- "dependencies": {
+ "requires": {
"date-format": "^4.0.14",
"debug": "^4.3.4",
"fs-extra": "^8.1.0"
},
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/streamroller/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
- "node_modules/streamroller/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string_decoder/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
+ "streamsearch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg=="
},
- "node_modules/string-width": {
+ "string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "devOptional": true,
- "dependencies": {
+ "requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
},
- "engines": {
- "node": ">=8"
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ }
+ }
+ },
+ "string.prototype.trim": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz",
+ "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "dependencies": {
+ "define-properties": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
+ "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.21.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz",
+ "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==",
+ "requires": {
+ "array-buffer-byte-length": "^1.0.0",
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "es-set-tostringtag": "^2.0.1",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.2.0",
+ "get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.5",
+ "is-array-buffer": "^3.0.2",
+ "is-callable": "^1.2.7",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.10",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.4.3",
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trim": "^1.2.7",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.9"
+ }
+ },
+ "has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ=="
+ },
+ "internal-slot": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+ "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+ "requires": {
+ "get-intrinsic": "^1.2.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ }
+ },
+ "is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="
+ },
+ "is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ }
+ }
}
},
- "node_modules/string.prototype.trimend": {
+ "string.prototype.trimend": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
"integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
- "dependencies": {
+ "requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/string.prototype.trimstart": {
+ "string.prototype.trimstart": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
"integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
- "dependencies": {
+ "requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/stringify-entities": {
+ "string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "stringify-entities": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.2.tgz",
"integrity": "sha512-MTxTVcEkorNtBbNpoFJPEh0kKdM6+QbMjLbaxmvaPMmayOXdr/AIVIIJX7FReUVweRBFJfZepK4A4AKgwuFpMQ==",
- "dependencies": {
+ "requires": {
"character-entities-html4": "^2.0.0",
"character-entities-legacy": "^3.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/strip-ansi": {
+ "strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "devOptional": true,
- "dependencies": {
+ "requires": {
"ansi-regex": "^5.0.1"
},
- "engines": {
- "node": ">=8"
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+ }
}
},
- "node_modules/strip-bom": {
+ "strip-bom": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="
+ },
+ "strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true
},
- "node_modules/strip-json-comments": {
+ "strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "dev": true
},
- "node_modules/superagent": {
+ "superagent": {
"version": "8.0.9",
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz",
"integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==",
- "dependencies": {
+ "requires": {
"component-emitter": "^1.3.0",
"cookiejar": "^2.1.4",
"debug": "^4.3.4",
@@ -18827,861 +9485,742 @@
"qs": "^6.11.0",
"semver": "^7.3.8"
},
- "engines": {
- "node": ">=6.4.0 <13 || >=14"
- }
- },
- "node_modules/superagent/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "mime": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
+ "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg=="
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
- "node_modules/superagent/node_modules/dezalgo": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
- "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==",
- "dependencies": {
- "asap": "^2.0.0",
- "wrappy": "1"
- }
- },
- "node_modules/superagent/node_modules/formidable": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz",
- "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==",
- "dependencies": {
- "dezalgo": "^1.0.4",
- "hexoid": "^1.0.0",
- "once": "^1.4.0",
- "qs": "^6.11.0"
- },
- "funding": {
- "url": "https://ko-fi.com/tunnckoCore/commissions"
- }
- },
- "node_modules/superagent/node_modules/mime": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
- "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/superagent/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/superagent/node_modules/qs": {
- "version": "6.11.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
- "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
- "dependencies": {
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/superagent/node_modules/semver": {
- "version": "7.5.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz",
- "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/supertest": {
+ "supertest": {
"version": "6.3.3",
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz",
"integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==",
"dev": true,
- "dependencies": {
+ "requires": {
"methods": "^1.1.2",
"superagent": "^8.0.5"
- },
- "engines": {
- "node": ">=6.4.0"
}
},
- "node_modules/supports-color": {
+ "supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": {
+ "requires": {
"has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
}
},
- "node_modules/supports-preserve-symlinks-flag": {
+ "supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
},
- "node_modules/swagger-schema-official": {
+ "swagger-schema-official": {
"version": "2.0.0-bab6bed",
"resolved": "https://registry.npmjs.org/swagger-schema-official/-/swagger-schema-official-2.0.0-bab6bed.tgz",
"integrity": "sha1-cAcEaNbSl3ylI3suUZyn0Gouo/0=",
"dev": true
},
- "node_modules/symbol-tree": {
+ "symbol-tree": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
},
- "node_modules/tar": {
- "version": "6.1.11",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
- "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
+ "synckit": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz",
+ "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==",
+ "dev": true,
+ "requires": {
+ "@pkgr/utils": "^2.3.1",
+ "tslib": "^2.5.0"
+ }
+ },
+ "tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "dev": true
+ },
+ "tar": {
+ "version": "6.1.15",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz",
+ "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==",
"optional": true,
- "dependencies": {
+ "requires": {
"chownr": "^2.0.0",
"fs-minipass": "^2.0.0",
- "minipass": "^3.0.0",
+ "minipass": "^5.0.0",
"minizlib": "^2.1.1",
"mkdirp": "^1.0.3",
"yallist": "^4.0.0"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/tar-fs": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
- "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
- "dev": true,
- "optional": true,
- "peer": true,
- "dependencies": {
- "chownr": "^1.1.1",
- "mkdirp-classic": "^0.5.2",
- "pump": "^3.0.0",
- "tar-stream": "^2.1.4"
- }
- },
- "node_modules/tar-fs/node_modules/chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "dev": true,
- "optional": true,
- "peer": true
- },
- "node_modules/tar-stream": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
- "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
- "dev": true,
- "optional": true,
- "peer": true,
- "dependencies": {
- "bl": "^4.0.3",
- "end-of-stream": "^1.4.1",
- "fs-constants": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1"
- },
- "engines": {
- "node": ">=6"
}
},
- "node_modules/tar-stream/node_modules/bl": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
- "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
- "dev": true,
- "optional": true,
- "peer": true,
- "dependencies": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
- "node_modules/tar-stream/node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "optional": true,
- "peer": true,
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "node_modules/tar-stream/node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true,
- "optional": true,
- "peer": true
- },
- "node_modules/tarn": {
+ "tarn": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz",
- "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==",
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/tedious": {
- "version": "14.5.0",
- "resolved": "https://registry.npmjs.org/tedious/-/tedious-14.5.0.tgz",
- "integrity": "sha512-Mr/ku6J0yku9MvWKO7e//awwI52122jS5AYRz/VOI2jZZawv84iHPKF/FnHBoIEKlRjzahrtevfpNktw/eBAEw==",
- "dependencies": {
- "@azure/identity": "^2.0.1",
- "@azure/keyvault-keys": "^4.3.0",
- "@js-joda/core": "^4.0.0",
- "@types/es-aggregate-error": "^1.0.2",
+ "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ=="
+ },
+ "tedious": {
+ "version": "15.1.3",
+ "resolved": "https://registry.npmjs.org/tedious/-/tedious-15.1.3.tgz",
+ "integrity": "sha512-166EpRm5qknwhEisjZqz/mF7k14fXKJYHRg6XiAXVovd/YkyHJ3SG4Ppy89caPaNFfRr7PVYe+s4dAvKaCMFvw==",
+ "requires": {
+ "@azure/identity": "^2.0.4",
+ "@azure/keyvault-keys": "^4.4.0",
+ "@js-joda/core": "^5.2.0",
"bl": "^5.0.0",
- "es-aggregate-error": "^1.0.7",
+ "es-aggregate-error": "^1.0.8",
"iconv-lite": "^0.6.3",
- "jsbi": "^3.2.1",
+ "js-md4": "^0.3.2",
+ "jsbi": "^4.3.0",
"native-duplexpair": "^1.0.0",
- "node-abort-controller": "^3.0.0",
+ "node-abort-controller": "^3.0.1",
"punycode": "^2.1.0",
"sprintf-js": "^1.1.2"
},
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/tedious/node_modules/bl": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-5.0.0.tgz",
- "integrity": "sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==",
- "dependencies": {
- "buffer": "^6.0.3",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
- "node_modules/tedious/node_modules/iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
+ "bl": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz",
+ "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==",
+ "requires": {
+ "buffer": "^6.0.3",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ }
+ }
}
},
- "node_modules/tedious/node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "node_modules/terser": {
- "version": "5.16.5",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.5.tgz",
- "integrity": "sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==",
- "dependencies": {
- "@jridgewell/source-map": "^0.3.2",
- "acorn": "^8.5.0",
+ "terser": {
+ "version": "5.18.2",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz",
+ "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==",
+ "requires": {
+ "@jridgewell/source-map": "^0.3.3",
+ "acorn": "^8.8.2",
"commander": "^2.20.0",
"source-map-support": "~0.5.20"
- },
- "bin": {
- "terser": "bin/terser"
- },
- "engines": {
- "node": ">=10"
}
},
- "node_modules/text-table": {
+ "text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
- "node_modules/threads": {
+ "threads": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/threads/-/threads-1.7.0.tgz",
"integrity": "sha512-Mx5NBSHX3sQYR6iI9VYbgHKBLisyB+xROCBGjjWm1O9wb9vfLxdaGtmT/KCjUqMsSNW6nERzCW3T6H43LqjDZQ==",
- "dependencies": {
+ "requires": {
"callsites": "^3.1.0",
"debug": "^4.2.0",
"is-observable": "^2.1.0",
- "observable-fns": "^0.6.1"
- },
- "funding": {
- "url": "https://github.com/andywer/threads.js?sponsor=1"
- },
- "optionalDependencies": {
+ "observable-fns": "^0.6.1",
"tiny-worker": ">= 2"
- }
- },
- "node_modules/threads/node_modules/debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
- "dependencies": {
- "ms": "2.1.2"
},
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
+ "dependencies": {
+ "debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
- "node_modules/threads/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/tiny-worker": {
+ "tiny-worker": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/tiny-worker/-/tiny-worker-2.3.0.tgz",
"integrity": "sha512-pJ70wq5EAqTAEl9IkGzA+fN0836rycEuz2Cn6yeZ6FRzlVS5IDOkFHpIoEsksPRQV34GDqXm65+OlnZqUSyK2g==",
- "devOptional": true,
- "dependencies": {
+ "optional": true,
+ "requires": {
"esm": "^3.2.25"
}
},
- "node_modules/tinycon": {
+ "tinycon": {
"version": "0.6.8",
"resolved": "https://registry.npmjs.org/tinycon/-/tinycon-0.6.8.tgz",
"integrity": "sha1-59oiPj7gy/nbeWP6M1aZuyF3enM="
},
- "node_modules/tmp": {
+ "titleize": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz",
+ "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==",
+ "dev": true
+ },
+ "tmp": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
"integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
"dev": true,
- "dependencies": {
+ "requires": {
"rimraf": "^3.0.0"
- },
- "engines": {
- "node": ">=8.17.0"
}
},
- "node_modules/to-array": {
+ "to-array": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
- "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
+ "integrity": "sha512-LhVdShQD/4Mk4zXNroIQZJC+Ap3zgLcDuwEdcmLv9CCO73NWockQDwyUnW/m8VX/EElfL6FcYx7EeutN4HJA6A=="
},
- "node_modules/to-fast-properties": {
+ "to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
+ "dev": true
},
- "node_modules/to-regex-range": {
+ "to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dependencies": {
+ "requires": {
"is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.6"
}
},
- "node_modules/touch": {
+ "touch": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
"integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
"dev": true,
- "dependencies": {
+ "requires": {
"nopt": "~1.0.10"
},
- "bin": {
- "nodetouch": "bin/nodetouch.js"
- }
- },
- "node_modules/touch/node_modules/nopt": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
- "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==",
- "dev": true,
"dependencies": {
- "abbrev": "1"
- },
- "bin": {
- "nopt": "bin/nopt.js"
- },
- "engines": {
- "node": "*"
+ "nopt": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
+ "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==",
+ "dev": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ }
}
},
- "node_modules/tough-cookie": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
- "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
- "dependencies": {
+ "tough-cookie": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
+ "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
+ "requires": {
"psl": "^1.1.33",
"punycode": "^2.1.1",
- "universalify": "^0.1.2"
- },
- "engines": {
- "node": ">=6"
+ "universalify": "^0.2.0",
+ "url-parse": "^1.5.3"
}
},
- "node_modules/tr46": {
+ "tr46": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
"integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
- "dependencies": {
+ "requires": {
"punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=12"
}
},
- "node_modules/tree-kill": {
+ "tree-kill": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
"integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
- "dev": true,
- "bin": {
- "tree-kill": "cli.js"
- }
+ "dev": true
},
- "node_modules/trough": {
+ "trough": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz",
- "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
+ "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w=="
},
- "node_modules/tsconfig-paths": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
- "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==",
+ "tsconfig-paths": {
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
+ "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==",
"dev": true,
- "dependencies": {
+ "requires": {
"@types/json5": "^0.0.29",
- "json5": "^1.0.1",
+ "json5": "^1.0.2",
"minimist": "^1.2.6",
"strip-bom": "^3.0.0"
}
},
- "node_modules/tslib": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
- "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
+ "tslib": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz",
+ "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA=="
},
- "node_modules/tsutils": {
+ "tsutils": {
"version": "3.21.0",
"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
"integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
"dev": true,
- "dependencies": {
+ "requires": {
"tslib": "^1.8.1"
},
- "engines": {
- "node": ">= 6"
- },
- "peerDependencies": {
- "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
- }
- },
- "node_modules/tsutils/node_modules/tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true
- },
- "node_modules/tunnel": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
- "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
- "engines": {
- "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ }
}
},
- "node_modules/tunnel-agent": {
+ "tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dependencies": {
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "requires": {
"safe-buffer": "^5.0.1"
- },
- "engines": {
- "node": "*"
}
},
- "node_modules/tweetnacl": {
+ "tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
},
- "node_modules/type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "dependencies": {
- "prelude-ls": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.8.0"
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
}
},
- "node_modules/type-detect": {
+ "type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
+ "dev": true
},
- "node_modules/type-fest": {
+ "type-fest": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "dev": true
},
- "node_modules/type-is": {
+ "type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "dependencies": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/typescript": {
- "version": "4.9.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
- "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=4.2.0"
- }
- },
- "node_modules/ueberdb2": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/ueberdb2/-/ueberdb2-4.0.1.tgz",
- "integrity": "sha512-wo377quP2M/g3j7LoTMMVVX7ED3gj1sk8bkFR1plNEh/TLEgumdjfJl5KmpkXfIj2j6VYmQY4yEhwszpyRRRFg==",
- "dependencies": {
- "async": "^3.2.3",
- "cassandra-driver": "^4.6.3",
- "dirty": "^1.1.3",
- "elasticsearch7": "npm:@elastic/elasticsearch@^7.17.0",
- "mongodb": "^3.7.3",
- "mssql": "^8.1.0",
- "mysql": "2.18.1",
- "nano": "^10.0.0",
- "pg": "^8.7.3",
- "redis": "^4.1.0",
- "rethinkdb": "^2.4.2",
- "simple-git": "^3.7.1"
- },
- "engines": {
- "node": ">=14.15.0"
- },
- "optionalDependencies": {
- "sqlite3": "^5.0.6"
- }
- },
- "node_modules/ueberdb2/node_modules/are-we-there-yet": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz",
- "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==",
- "optional": true,
- "dependencies": {
- "delegates": "^1.0.0",
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/ueberdb2/node_modules/axios": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz",
- "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==",
- "dependencies": {
- "follow-redirects": "^1.15.0",
- "form-data": "^4.0.0",
- "proxy-from-env": "^1.1.0"
- }
- },
- "node_modules/ueberdb2/node_modules/gauge": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
- "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
- "optional": true,
- "dependencies": {
- "aproba": "^1.0.3 || ^2.0.0",
- "color-support": "^1.1.3",
- "console-control-strings": "^1.1.0",
- "has-unicode": "^2.0.1",
- "signal-exit": "^3.0.7",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "wide-align": "^1.1.5"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/ueberdb2/node_modules/nano": {
- "version": "10.1.2",
- "resolved": "https://registry.npmjs.org/nano/-/nano-10.1.2.tgz",
- "integrity": "sha512-P3zSoD/sxAgDs/IE9eqpeAXqTdQ/gA9e9dnzaltr4A3WUo/n+eh66T873L+md5v8lXOutX/7dvcHFOO22f5hDw==",
- "dependencies": {
- "axios": "^1.2.2",
- "node-abort-controller": "^3.0.1",
- "qs": "^6.11.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/ueberdb2/node_modules/node-addon-api": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
- "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==",
- "optional": true
- },
- "node_modules/ueberdb2/node_modules/node-gyp": {
- "version": "8.4.1",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz",
- "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==",
- "optional": true,
- "dependencies": {
- "env-paths": "^2.2.0",
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.6",
- "make-fetch-happen": "^9.1.0",
- "nopt": "^5.0.0",
- "npmlog": "^6.0.0",
- "rimraf": "^3.0.2",
- "semver": "^7.3.5",
- "tar": "^6.1.2",
- "which": "^2.0.2"
- },
- "bin": {
- "node-gyp": "bin/node-gyp.js"
- },
- "engines": {
- "node": ">= 10.12.0"
- }
- },
- "node_modules/ueberdb2/node_modules/npmlog": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
- "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
- "optional": true,
- "dependencies": {
- "are-we-there-yet": "^3.0.0",
- "console-control-strings": "^1.1.0",
- "gauge": "^4.0.3",
- "set-blocking": "^2.0.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/ueberdb2/node_modules/redis": {
- "version": "4.6.7",
- "resolved": "https://registry.npmjs.org/redis/-/redis-4.6.7.tgz",
- "integrity": "sha512-KrkuNJNpCwRm5vFJh0tteMxW8SaUzkm5fBH7eL5hd/D0fAkzvapxbfGPP/r+4JAXdQuX7nebsBkBqA2RHB7Usw==",
- "dependencies": {
- "@redis/bloom": "1.2.0",
- "@redis/client": "1.5.8",
- "@redis/graph": "1.1.0",
- "@redis/json": "1.0.4",
- "@redis/search": "1.1.3",
- "@redis/time-series": "1.0.4"
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
}
},
- "node_modules/ueberdb2/node_modules/sqlite3": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz",
- "integrity": "sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==",
- "hasInstallScript": true,
- "optional": true,
- "dependencies": {
- "@mapbox/node-pre-gyp": "^1.0.0",
- "node-addon-api": "^4.2.0",
- "tar": "^6.1.11"
- },
- "optionalDependencies": {
- "node-gyp": "8.x"
- },
- "peerDependencies": {
- "node-gyp": "8.x"
- },
- "peerDependenciesMeta": {
- "node-gyp": {
- "optional": true
+ "typed-array-length": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
+ "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "is-typed-array": "^1.1.9"
+ }
+ },
+ "typescript": {
+ "version": "4.9.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
+ "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
+ "dev": true
+ },
+ "ueberdb2": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/ueberdb2/-/ueberdb2-4.1.5.tgz",
+ "integrity": "sha512-nXnOjXaORcj6zDsvv3YzohSn46yUuBRZen5+Y7temBf/zaxkOx/3gtR2/nG/A67FhVxZIHychxQ+mwsVbAyLBA==",
+ "requires": {
+ "async": "^3.2.4",
+ "cassandra-driver": "^4.6.4",
+ "dirty": "^1.1.3",
+ "elasticsearch8": "npm:@elastic/elasticsearch@^8.8.1",
+ "eslint-plugin-import": "^2.26.0",
+ "mongodb": "^3.7.3",
+ "mssql": "^9.1.1",
+ "mysql": "2.18.1",
+ "nano": "^10.1.2",
+ "pg": "^8.11.1",
+ "redis": "^4.6.7",
+ "rethinkdb": "^2.4.2",
+ "semver": "^7.5.3",
+ "simple-git": "^3.19.1",
+ "sqlite3": "^5.1.6"
+ },
+ "dependencies": {
+ "array-includes": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
+ "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "get-intrinsic": "^1.1.3",
+ "is-string": "^1.0.7"
+ }
+ },
+ "array.prototype.flat": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
+ "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0"
+ }
+ },
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "define-properties": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
+ "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "elasticsearch8": {
+ "version": "npm:@elastic/elasticsearch@8.8.1",
+ "resolved": "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-8.8.1.tgz",
+ "integrity": "sha512-ibArPKHEmak3jao7xts2gROATiwPQo9aOrWWdix5mJcX1gnjm/UeJBVO901ROmaxFVPKxVnjC9Op3gJYkqagjg==",
+ "requires": {
+ "@elastic/transport": "^8.3.2",
+ "tslib": "^2.4.0"
+ }
+ },
+ "es-abstract": {
+ "version": "1.21.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz",
+ "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==",
+ "requires": {
+ "array-buffer-byte-length": "^1.0.0",
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "es-set-tostringtag": "^2.0.1",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.2.0",
+ "get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.5",
+ "is-array-buffer": "^3.0.2",
+ "is-callable": "^1.2.7",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.10",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.4.3",
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trim": "^1.2.7",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.9"
+ }
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz",
+ "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==",
+ "requires": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.11.0",
+ "resolve": "^1.22.1"
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
+ "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
+ "requires": {
+ "debug": "^3.2.7"
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.27.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz",
+ "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==",
+ "requires": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "array.prototype.flatmap": "^1.3.1",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.7",
+ "eslint-module-utils": "^2.7.4",
+ "has": "^1.0.3",
+ "is-core-module": "^2.11.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.values": "^1.1.6",
+ "resolve": "^1.22.1",
+ "semver": "^6.3.0",
+ "tsconfig-paths": "^3.14.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ=="
+ },
+ "internal-slot": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+ "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+ "requires": {
+ "get-intrinsic": "^1.2.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ }
+ },
+ "is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="
+ },
+ "is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "object.values": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz",
+ "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "tsconfig-paths": {
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
+ "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==",
+ "requires": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ }
}
}
},
- "node_modules/uid-safe": {
+ "uid-safe": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
"integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
- "dependencies": {
+ "requires": {
"random-bytes": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
}
},
- "node_modules/unbox-primitive": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
- "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-bigints": "^1.0.2",
- "has-symbols": "^1.0.3",
+ "unbox-primitive": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
+ "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has-bigints": "^1.0.1",
+ "has-symbols": "^1.0.2",
"which-boxed-primitive": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/unbox-primitive/node_modules/has-symbols": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/undefsafe": {
+ "undefsafe": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
"integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
"dev": true
},
- "node_modules/underscore": {
+ "underscore": {
"version": "1.13.3",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.3.tgz",
"integrity": "sha512-QvjkYpiD+dJJraRA8+dGAU4i7aBbb2s0S3jA45TFOvg2VgqvdCDd/3N6CqA8gluk1W91GLoXg5enMUx560QzuA=="
},
- "node_modules/unicode-canonical-property-names-ecmascript": {
+ "undici": {
+ "version": "5.22.1",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz",
+ "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==",
+ "requires": {
+ "busboy": "^1.6.0"
+ }
+ },
+ "unicode-canonical-property-names-ecmascript": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
"integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
+ "dev": true
},
- "node_modules/unicode-match-property-ecmascript": {
+ "unicode-match-property-ecmascript": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
"integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
"dev": true,
- "dependencies": {
+ "requires": {
"unicode-canonical-property-names-ecmascript": "^2.0.0",
"unicode-property-aliases-ecmascript": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
}
},
- "node_modules/unicode-match-property-value-ecmascript": {
+ "unicode-match-property-value-ecmascript": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
"integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
+ "dev": true
},
- "node_modules/unicode-property-aliases-ecmascript": {
+ "unicode-property-aliases-ecmascript": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
"integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
+ "dev": true
},
- "node_modules/unified": {
+ "unified": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/unified/-/unified-10.1.1.tgz",
"integrity": "sha512-v4ky1+6BN9X3pQrOdkFIPWAaeDsHPE1svRDxq7YpTc2plkIqFMwukfqM+l0ewpP9EfwARlt9pPFAeWYhHm8X9w==",
- "dependencies": {
+ "requires": {
"@types/unist": "^2.0.0",
"bail": "^2.0.0",
"extend": "^3.0.0",
@@ -19689,608 +10228,367 @@
"is-plain-obj": "^4.0.0",
"trough": "^2.0.0",
"vfile": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
}
},
- "node_modules/unique-filename": {
+ "unique-filename": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
"integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
"optional": true,
- "dependencies": {
+ "requires": {
"unique-slug": "^2.0.0"
}
},
- "node_modules/unique-slug": {
+ "unique-slug": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
"integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
"optional": true,
- "dependencies": {
+ "requires": {
"imurmurhash": "^0.1.4"
}
},
- "node_modules/unist-util-is": {
+ "unist-util-is": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz",
- "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
+ "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ=="
},
- "node_modules/unist-util-stringify-position": {
+ "unist-util-stringify-position": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz",
"integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==",
- "dependencies": {
+ "requires": {
"@types/unist": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
}
},
- "node_modules/universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "engines": {
- "node": ">= 4.0.0"
- }
+ "universalify": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
+ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg=="
},
- "node_modules/unorm": {
+ "unorm": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz",
- "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==",
- "engines": {
- "node": ">= 0.4.0"
- }
+ "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA=="
},
- "node_modules/unpipe": {
+ "unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
- "engines": {
- "node": ">= 0.8"
- }
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
+ },
+ "untildify": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
+ "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
+ "dev": true
},
- "node_modules/update-browserslist-db": {
+ "update-browserslist-db": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
"integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
"dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
+ "requires": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
- },
- "bin": {
- "update-browserslist-db": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
}
},
- "node_modules/uri-js": {
+ "uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dependencies": {
+ "requires": {
"punycode": "^2.1.0"
}
},
- "node_modules/util-deprecate": {
+ "url-parse": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+ "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+ "requires": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
},
- "node_modules/utils-merge": {
+ "utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
- "engines": {
- "node": ">= 0.4.0"
- }
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
},
- "node_modules/uuid": {
+ "uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
- "bin": {
- "uuid": "bin/uuid"
- }
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
},
- "node_modules/v8-compile-cache": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
- "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
- "dev": true
- },
- "node_modules/vary": {
+ "vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
- "engines": {
- "node": ">= 0.8"
- }
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
},
- "node_modules/verror": {
+ "verror": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "engines": [
- "node >=0.6.0"
- ],
- "dependencies": {
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+ "requires": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "^1.2.0"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
+ }
}
},
- "node_modules/verror/node_modules/core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "node_modules/vfile": {
+ "vfile": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.0.tgz",
"integrity": "sha512-Tj44nY/48OQvarrE4FAjUfrv7GZOYzPbl5OD65HxVKwLJKMPU7zmfV8cCgCnzKWnSfYG2f3pxu+ALqs7j22xQQ==",
- "dependencies": {
+ "requires": {
"@types/unist": "^2.0.0",
"is-buffer": "^2.0.0",
"unist-util-stringify-position": "^3.0.0",
"vfile-message": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
}
},
- "node_modules/vfile-location": {
+ "vfile-location": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz",
"integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==",
- "dependencies": {
+ "requires": {
"@types/unist": "^2.0.0",
"vfile": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
}
},
- "node_modules/vfile-message": {
+ "vfile-message": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.0.tgz",
"integrity": "sha512-4QJbBk+DkPEhBXq3f260xSaWtjE4gPKOfulzfMFF8ZNwaPZieWsg3iVlcmF04+eebzpcpeXOOFMfrYzJHVYg+g==",
- "dependencies": {
+ "requires": {
"@types/unist": "^2.0.0",
"unist-util-stringify-position": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
}
},
- "node_modules/w3c-hr-time": {
+ "w3c-hr-time": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
"integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.",
- "dependencies": {
+ "requires": {
"browser-process-hrtime": "^1.0.0"
}
},
- "node_modules/w3c-xmlserializer": {
+ "w3c-xmlserializer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
"integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
- "dependencies": {
+ "requires": {
"xml-name-validator": "^4.0.0"
- },
- "engines": {
- "node": ">=12"
}
},
- "node_modules/web-namespaces": {
+ "web-namespaces": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
- "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
+ "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="
},
- "node_modules/webidl-conversions": {
+ "webidl-conversions": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
- "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
- "engines": {
- "node": ">=12"
- }
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="
},
- "node_modules/whatwg-encoding": {
+ "whatwg-encoding": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
"integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
- "dependencies": {
+ "requires": {
"iconv-lite": "0.6.3"
},
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/whatwg-encoding/node_modules/iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
+ "iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ }
+ }
}
},
- "node_modules/whatwg-mimetype": {
+ "whatwg-mimetype": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz",
- "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==",
- "engines": {
- "node": ">=12"
- }
+ "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q=="
},
- "node_modules/whatwg-url": {
+ "whatwg-url": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
"integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==",
- "dependencies": {
+ "requires": {
"tr46": "^3.0.0",
"webidl-conversions": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
}
},
- "node_modules/which": {
+ "which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dependencies": {
+ "requires": {
"isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
}
},
- "node_modules/which-boxed-primitive": {
+ "which-boxed-primitive": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
"integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
- "dependencies": {
+ "requires": {
"is-bigint": "^1.0.1",
"is-boolean-object": "^1.1.0",
"is-number-object": "^1.0.4",
"is-string": "^1.0.5",
"is-symbol": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/wide-align": {
+ "which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ }
+ },
+ "wide-align": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
"integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
"optional": true,
- "dependencies": {
+ "requires": {
"string-width": "^1.0.2 || 2 || 3 || 4"
}
},
- "node_modules/word-wrap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/workerpool": {
+ "workerpool": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz",
"integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==",
"dev": true
},
- "node_modules/wrap-ansi": {
+ "wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
- "dependencies": {
+ "requires": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/wrap-ansi/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
}
},
- "node_modules/wrappy": {
+ "wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- },
- "node_modules/ws": {
- "version": "8.5.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
- "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==",
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "ws": {
+ "version": "8.13.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
+ "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA=="
},
- "node_modules/wtfnode": {
+ "wtfnode": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/wtfnode/-/wtfnode-0.9.1.tgz",
- "integrity": "sha512-Ip6C2KeQPl/F3aP1EfOnPoQk14Udd9lffpoqWDNH3Xt78svxPbv53ngtmtfI0q2Te3oTq79XKTnRNXVIn/GsPA==",
- "bin": {
- "wtfnode": "proxy.js"
- }
+ "integrity": "sha512-Ip6C2KeQPl/F3aP1EfOnPoQk14Udd9lffpoqWDNH3Xt78svxPbv53ngtmtfI0q2Te3oTq79XKTnRNXVIn/GsPA=="
},
- "node_modules/xml-name-validator": {
+ "xml-name-validator": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
- "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
- "engines": {
- "node": ">=12"
- }
+ "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw=="
},
- "node_modules/xml2js": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
- "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
- "dependencies": {
- "sax": ">=0.6.0",
- "xmlbuilder": "~11.0.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/xmlbuilder": {
- "version": "11.0.1",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
- "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/xmlchars": {
+ "xmlchars": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
},
- "node_modules/xmlhttprequest-ssl": {
+ "xmlhttprequest-ssl": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz",
- "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==",
- "engines": {
- "node": ">=0.4.0"
- }
+ "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q=="
},
- "node_modules/xpath.js": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/xpath.js/-/xpath.js-1.1.0.tgz",
- "integrity": "sha512-jg+qkfS4K8E7965sqaUl8mRngXiKb3WZGfONgE18pr03FUQiuSV6G+Ej4tS55B+rIQSFEIw3phdVAQ4pPqNWfQ==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/xtend": {
+ "xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "engines": {
- "node": ">=0.4"
- }
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
},
- "node_modules/y18n": {
+ "y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
+ "dev": true
},
- "node_modules/yallist": {
+ "yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
- "node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
"dev": true,
- "dependencies": {
- "cliui": "^7.0.2",
+ "requires": {
+ "cliui": "^8.0.1",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
- "string-width": "^4.2.0",
+ "string-width": "^4.2.3",
"y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- },
- "engines": {
- "node": ">=10"
+ "yargs-parser": "^21.1.1"
}
},
- "node_modules/yargs-parser": {
- "version": "20.2.4",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
- "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
+ "yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true
},
- "node_modules/yargs-unparser": {
+ "yargs-unparser": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
"integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
"dev": true,
- "dependencies": {
+ "requires": {
"camelcase": "^6.0.0",
"decamelize": "^4.0.0",
"flat": "^5.0.2",
"is-plain-obj": "^2.1.0"
},
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs-unparser/node_modules/is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yargs/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yargs/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
"dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
+ "is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
+ "dev": true
+ }
}
},
- "node_modules/yeast": {
+ "yeast": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
- "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
+ "integrity": "sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg=="
},
- "node_modules/yocto-queue": {
+ "yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "dev": true
}
}
}
diff --git a/src/package.json b/src/package.json
index 509d6029461..3498696e713 100644
--- a/src/package.json
+++ b/src/package.json
@@ -30,6 +30,7 @@
}
],
"dependencies": {
+ "@rollup/plugin-json": "^6.0.0",
"async": "^3.2.2",
"cjstoesm": "^2.1.2",
"clean-css": "^5.3.2",
@@ -104,7 +105,9 @@
"sinon": "^13.0.2",
"split-grid": "^1.0.11",
"supertest": "^6.3.3",
- "typescript": "^4.9.5"
+ "typescript": "^4.9.5",
+ "rollup-plugin-typescript2": "^0.35.0",
+ "rollup-plugin-copy": "^3.4.0"
},
"engines": {
"node": ">=14.15.0",
@@ -118,7 +121,8 @@
"lint": "eslint .",
"test": "mocha --require @babel/register --timeout 120000 --recursive tests/backend/specs ../node_modules/ep_*/static/tests/backend/specs",
"test-container": "mocha --timeout 5000 tests/container/specs/api",
- "dev": "concurrently \"npx tsc --watch\" \"nodemon -q dist/server.js\""
+ "dev": "concurrently \"npx tsc --watch\" \"nodemon -q dist/server.js\"",
+ "build": "npx rollup -c rollup.config.js"
},
"version": "1.9.0",
"license": "Apache-2.0"
diff --git a/src/rollup.config.js b/src/rollup.config.js
new file mode 100644
index 00000000000..1f59f397b7e
--- /dev/null
+++ b/src/rollup.config.js
@@ -0,0 +1,28 @@
+const typescript = require('rollup-plugin-typescript2');
+const copy = require('rollup-plugin-copy');
+const glob = require('glob');
+const json = require('@rollup/plugin-json')
+module.exports = {
+ input: glob.sync('./node/**/*.ts'), // Matches all TypeScript files in the 'src' directory and its subdirectories
+ output: {
+ preserveModules: true,
+ dir: './dist',
+ format: 'cjs',
+ },
+ plugins: [
+ json(),
+ typescript({
+ tsconfig: 'tsconfig.json',
+ }),
+ copy({
+ targets: [
+ {src:'./package.json', dest:'./dist'},
+ { src: './LICENSE', dest: './dist' },
+ { src: './src/locales/*', dest: './dist/locales' },
+ { src: './src/static/css/*', dest: './dist/static/css' },
+ { src: './src/templates', dest: './dist/templates' },
+ {src:'./ep.json', dest:'./dist'},
+ ]
+ })
+ ],
+};
\ No newline at end of file
diff --git a/src/static/favicon.ico b/src/static/favicon.ico
index c33f2e614c63ec5f14e80dfce324416ffe4f47ed..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
GIT binary patch
literal 0
HcmV?d00001
literal 660
zcmV;F0&D$=P)K~y-6g_2EZ6Hyd}&wHKBOgc%&Xxb?f@rU{oTo&u1_(Otq
zA(0dzrbLlK7u|Fr6to~BE()&H6zZnCZY*>PqYD?JE<_|&s34V8V#STIqK!1uNn_%B
zF4_!ErZIQ*;GXl{bKiRe01U&>IOn_K@%RU9RZlc|f`BCfRKdtn=Eclpt!Egb~?fUuTOFmx6`cw%Z!0;8%8__x}3s$adb
z{A87zMMr}Z>`;}?dc6(s2!f>R`W;GXaUg#BQX-Kk)r+r>BvZPsPfpK1wesHzwQN97
zB=LZPTp@(4FwR-M(V2u3N)ce3e9t_eIV^0Z<5|w(RSyOCwTPbo`T=0=(+~Wye!sL=
zAb?3ILHD&NM4#Nm&apK87R!$p*By7j8AtBnI|z!{G(rB=XZ!4Ug|2b{KB3iR$Sr@t
zVm7xe%mElo^+W3jxxN*006`z003GJ06;DB4CwjED>E9+m+1FFz|8xm~6X9F!
z3~fz+IEx>9p?~Cv85AU09qgT5006HafY1N{U~x9H(>M-Jra!vAzkhV+e{eDWbQ0^a
z4m%hKC8!7hn|0=|I45&fNUA0lOTbF`rIL?k3eu`9&gd{?qM;ET>&wsaob24w_S7lv
z@AcG9ZclJm^Qzh~C09L|kTsKLmBVz72~{@4-sI>eG7UD*UP)IJn5xh2wT21
z+B;rL-K~w>mLeglO(PAwa!DOW9i8@Nl?SlLeMN_krOtsx5udqLb*(Pw8wZLJv{2UX
zECEC@X6O%0HxBflMzUA#WM!>O9mrU0(>JRBq|e?;{v=J}+QVgfKfsrz(Gg-7QVoyf
zoZ?Ir>HCNgi;1xvi>gh>lpHEgfg?@yVi$6n5gD0EI2a7;I}xkRBE2!OYZZd6M2TLg
z$Cb3ttfEhWapRbxtnQpb_pc$roC2%ciDQ{EiG&LaTtyqX_#8SKl^40o6ya!u=hDsX
zj<%fH4%@hU4IMMlsjV;2y5dG7%>}3~yFzeZWuw7$=`!>~
zDF6LSM>|>&=ei;%o>zt@)O_LA*k|LXy*0n7zW5IA-hfnRrmNaM2P(pvh(l((QVMIt
zc$N|PTh2b7#Ap%xkFa!1cm`6V3fJl${gBZJ^LU3|u#N(WHSa~TYbPgJL#}&C@&wnq
zBJR#mC8l(kjEGD;|EH}=Vg#5AOsZR(u`wd?@nNkE3{0TQKh)3t6HF9gqr5wFrnNTv
z$=I)Jyt(ppHBb?dTtxrDc}#-jYP_B=uVE)ALNO9b6-6Rd)FFzzhwxWkuQ3ANi{4X;
zvQQRc?85fWR*?<(^t+zfr?Hqz{?p8*n%bc_wOMiYQzrt_F^ZwN-q?Eyy=3t@Y5XY%
zF$dVj%n`>(UF1%Oq@@i7Qf1T$P_mRP8e^%8w=pQESTR_35;R_L}2-4N<YTuE|1M#ft1$i#5)!RjNbF`IDOOoZ9G4@adHY%$ie24Pi7U
zMC#*4wa4J*cnwhO&Q)(4Z3C0JJO(Sl4JqL!Lj(}0PnTi!O~
zP9JvZ*aw|XcOQ|8II73o`vz^(=iaTClb3g;jgzdeyTBkiuK8o(Z>DoWK&)k?*0~+G
zlZ3f#*lp7k@SySO3kCU+_4o@PN!dcU4L?I%^s{=D>nkJ!^OG=(+n1&xCE%~tR*9c&
zyB+Ro`~`ey?aoNX>=RD$a;XM#w~lYtfqFzHlODzF0`%VI^OeF7^MzKm1+XIAa{si8
zSQ4<@vCeK#%SU%s_L14s^TReu%0N6x01te5
zQhdSRgu6^4cd+=qSL#4Oq$z3rDVcxYcF0dI9~)RCrsS-il~|;v^dNM{(mvr>?ummz
z-9g=P+ez9E!nlKe1u+CMnEfsHN%X0|9SUO*``fnP4q^>z?NXYnQN(^_wQjv2hs#ti
zJOhKm@TgOlb+XLE{jfRyP5oW+>}m+n@WM)NjErh@S!f=(pPc4gBfO{27ksZt$cn
z-B0vu)1SGTQ9jRn^0$>P2Hq-gr-IP6hb=#O$z1yj8+##DT?%X_xTpSnqcvX(h
zzp*{ycEI_D!55iql-sP}4+${kf}>5iV5^9r%)u2#o}v|=v6i=$F8nUcZkuj%YqN8_
za>R4k+T+^GilC3cSJ3%+cpU!0rNN{@bb1hZskqQy4b_xv&Qv2oh}oZ<6j+lp8~B^xpvqNpaPdFeRNLolz-Kk!Q$V#;R-`44bgxFG3bL;r{_l#?{
zs@lZ+_Y7U^Q)2Xdd%?HPD~1{DyHE$$5D<v}8jy~_XTI@B6N4XF;~6Prb>NX=p-+$lORg|NnBF7$o0Qm~=9c_$2qpS)
z0mjkBrA2WL^N)~7Qt**yrln7=$*z9*kz8+|j!)Fl@Zz6(0N3oK%eGQSoU6mU%4E~wrB*I9>9=-7{~9_)jpfJZETW`N$9MJ>{&
z>O+VC<^nfgisZ$TF&DujoWz6DtNB;ylIjn;{;1eP@ETCKNu;!XyLi~RMkckhX+^c@
zA?1u!U30188L_!U7^;Md*SG*y4LJ(8YFDpy1Io=E)=s39NCRSKG>J1WDwvD9
zLoV$J+w}oc-odYJ;o_hKl?Vtv7|NFe#Ip&eoPJK7{$HCxw|Is#u$w5ewPj+zL+Mrn
zc{u_|5b^t;CLt(57eTP5jbqHY9yF)D&JpE^#v0|Cz_!JHMK2ioVRmK^j87j&mox9=
z+fH&%vgP+9FG6e%iA(IuBZAoYU&tAvJ5Y)zha`wanTMt<#4^PgLrttou+&@*@dfsX
zfRaTUaaZM-g&;Dec+*l<6(HiRR7DLZx_N$aKIuoEt?M7#Q4!&Bi#w
z8piCy3iOTvAT9+aVGle)C@C3n4Ga{JO~3B!IYB_AnT?BqK@NNpa1Y2z(Fsd>dw~EA
ze$a~^>n;-@v#44C@L6Z}jpZ%h|9oAn%|;8(;qY|Jm7m!L?jgcKFsRe-Vq9RU@l1;l
zb5TxJ5h4T+DU_3b;l1R+!NJSH_rc)|2J{Fr<2Mb?(*3Ku#8(%eU&~PkNfjn9CNnB`
zDizKr0z`Acd2E+KUmQ$((7MEFv1klu;Rnhq7Y;Y=1Lfc+_#uru`M%$m-jCf+JSK5{K6)l|J&RKxG!7?`F_fQ}}2!6WX11W7oKQe?6WP5ef
z9C;&Nvp`mfTDE=af*hBr<|tJ-Ff?^_`TRI#RStDwvG(S<+l%+CF#dD-2+x7$jOVuW
za<;KBrHyRc)&}2m<_)6{
z+=iV!11uH#cyy8s1Qe3
z$C&T$Z-61k_sTc__fD|LSC4rHL`b4QMnCJ`xB9TP02UJA1>r7&M`av4b(2@wvgH*(z{xC)O6`a#6;6@)_2_)pyT#bf7CA
zNcLp7LLcQ@PvRNTf$MK*L&8p=QSb^xF}C2j+|2kf$a0~OGw>pu2spP~P((R{3;=*K
zz-0V?Y^_#XaXS!$#j9+8Nej{L%}qUs5Uy?Q#866U*m}a1qqeks;q@G62+;?j{-n!C
z4@lXR&WdIXX723sD>}G)MOzq>C~~oZRg(t;g1HSvunjf{|K#1BYnq5@StnNx
z3HF24X14#X++`kr#V;@ETvr~7D{?;
z2dbWyw^|}TA=&!SKvGf&_^Qe05J(%dD05{pp92w$j&_-r`8`2E2x@-FDb->Pt_Y81
zd!b-44SaJQVayB}tNR~(8rt)ln>ebI9Zgee9w_R3biKnPP%OG?;89kvFLc|YVZRcx
zcrV4STJaiLrFqG7mE2C+^cN^zbHfLd6a9&Ad%tOYi3%RYv7
z!;0Hib9O0i@NrbVcQMF>;94mdBmW?iARS^PoE>z!xgZymI%{tZM!nyHgHg_x>|U+-
z)w9sg%9uZkrH0!4F-s2)_^|84joIWmWs}q6ZbvA6e>2epI$VZOC5u~hlLE*ux2H&R(z3L&a|9IftL!&NE%Iu*UvG*l3XmMAXiX=LJ-ACBLL&3;loQ}
zb082)eNP+~6Ag!)kSTI$*58S5bcwUdqO?$L^kJo9)0#(`r#Vy8HT;t(Axk5uYMQ)9
zNmbLxqP{ZrlrH(CwXbpsI5L-d_85^8ft7Zcd(9$1gs?7)X&f28aVqj1=kT}r$H%^{
z2rPc-A9zE**D34@v}bII#FzF0Ngyrxs&_leDU!M(iz`yP26sJgV-%n9?Y-l>^^q(`sq0HhrNeX5Z8{n178
zPv<~rU)hHv>oY~i;n)l3ChwLsl{>$eYf&_v_#Z6u%!$vmPfYOqM8QLVlm>`8z3a@Mg&~m}Oz1aulC6I|r5Q|j
zye;Hsm0Z6V(yo`W%2jCBc-63*v|H%bjzsBmOMX`ieFw#{
zl$PC6)#y|E$nB#wVj^zMN|oQh^#onQ3H{0I%$?VX&z>S2z4a_;MkzpKm)B7Vj;Cy_QJ!hmH=_KoPZbe
zQr)hbd+R|YP2tUhokmPwWK3U#Okb#+w2^cMnER=mBhAEi?}Jfn#lN$5$cziF>j+xc
zTCz4Ai@~^?S$CV7NN);i@8fIbt$5Av0%_es(s?Ltq}JSICLS@&-m6=@Wv9smyIb@@
zH0>(ey0`pg5KHqHp78&D)T6}=_w^g>dp1Z&$u@G}o#0A9yMj|aN{iy*N#4a94)%Rv
z^(T=04s4z-dMx_s-sE7)hP5vw#SRj4cBCj
z&GQ5u%SlEi(+jWJf9?3?a)pJ2=2_3q{{uKE>-u@I=T!d}dEK+S_08ah2054EPBG!5
zyJ;ZEArLiy{4$v7=KQ6`FCSz0665YEp4|@xV+e+*?fJ&~JMhn*b#Z*kSloF8tN=6-
zAu{mtdf*fyd1D#JXh_8O2qj>*5Hy0KUhk5C@+m#~DD~CDugXZIvmsTH7UA%r-DNzO
z78N#KihSm1zKfYd14?DGZU;78Ho0sNc-XQ&N#419qN0u56FkYxeU;&35>}aK;!WI>
zvetL6Oeb$BV>!(r%Dct*LQ}qzXZ{8!)N&k_JvQcdNRi?3T&m@7MjEpHTLL{(k0%hA
zGd2|p1@O~C{x=pA+o`!EJ`tr5WFgAIy4cOs9h>ok(=Eb$yYV6+zdz1ej4gtGEmZP0
zTK>gU_M!;&3i`Sq2ww2|6c2}f85PG|NfAxJm0gTnUA9$|ZLA^vi6E2YoUM^{j;L^~5oE)-{-oj6$^ZGSz
zddI<0b`GKA%VllOBGH`sPki%RZTq)`^V8DL`J(R;5Oj3(%IksfIIs@qg7*HvHZ#%=
z=HRpk&b$*2y{M9hw2NPSYW;gjuU632uK^l1(ZXgWMqab1D^dG}&Z;_+(Jww^2^iZj
zE7}!a2L4KL6a%y_EtnUF4V_b;z8093>6KA$+Y1;yBo&H(T=0E;L7?nkXQL)GHV;xa
z_DlXU^4HD*SoU|^^$T1E>7<2${CzL%^3S5LmqENqqNMj&1RTRk_iqJTkqwWYPWU@AgLM9xpXsa<(1Q)RelTMYf`b(M`H1!_f>o+E-~^I@GL2#ZQjlrRKe;`+
zAc-_6A|ZXLBh$cqAF)~#;uf@jnKq;&qR22OPDg=#eM)mus&+0sLvEFDL2p
zJHAFo<%ayNt8jw;Hve+G;rrND9;|Z~0Tm8GB#mtLA4b@P>CfXmtXSg~L~^ks0F(+O
z)sw?G4_`x@{0>=0&oQlm<7R2IHjqRH2jBQxZ*`6jGe~BQri;FsQ{alEcXf5ed$sj8
zyA)Rp7DFoFz|-4$4I~;EaR360V6xdaIt=3#Z>k)wD0B9KFfv4~L|`;if>!6+ZI4z~u7m!Gl^ehL;{}
zuA@UJP@gfC`SZSBy<+q`j;ybNGx+bLcgQDY^<=H)ZhmVufkp!qAB|_yKF0$WkbbYf
z0tt0g-MhDd6x{uj0!HD#qXzmXS`v3ET0}n~PeGu#1WI#z59xZ*+R=e>_5`p)OD#m>
zK{3Fv8$=k8Lmg{%NSO_zCgY$OmwCklT19X#bKaHS-*aX5;{U!apZAvP-WSbQQ
z5vog>3!#K2Q76nWPlIK+v!G$T!o=iu=~*87*g*ri3n0{*`{6!Y53}>X^hPO31nj-E
zss8$>_`r@}9R*V}s3+y|CS)S$Ob{9R&Pi=%W4(4r;pg)f5pC_Q(Xw&3FKN|wZ_e#G
zEw$N)5qLqP5@vlDv42J7)CY~Ly-M4^VL*c9r0&;96<^dM$hVauu1NO6RR*@qHX6@*
zRI|(pdI_C~$j2!2liK{pg*+M*!kJKFXK)X2AYbtTunhE;;Yqt80jDHIgI0*lQR6Zv
zAEJaPX%GY4_I9H~9+Eeqb7ZSZ#CKfYgjDkFkoPc
zDx*3C?T!BW&n!+(J8%W)HD=?qZcwn2p&IDmaPu0f=Fj+K>-tDNXt$+6Vyvgh?X*!n
zU&p@*?jRsPVvSub?PcHu=>e0{ub$69fh&@9RyDi9K{bi0MwvMM6nau~MNJx18t?04
z#+jhe@sfL)tHu@6)(Xj0c*oA0DzCsLNUFL#w04e
zuIf>rYQ>kMi{=#!u3$O%Odm-#q0q5{Dd2-gUM3re;S*kqjtiLA6D(iyWK+JwTW9FHpY9TDsw3W{^uT-GeMI?Q47tYNei7*_{ABiEMvbM-wr
zL=`-4`FF)bU71a?Xw`kUV4-B-h>{dh=wPO{@1m>G6K!@<4YyP#U~ROAD(_;`v($3P
z++Z10nzvJ5=l&J%3fI$rbHUkdvYW;hr&yzZ2iQF9btTVLTdT=AXBi+(QC*BvxobQr
z)o#Y+K0Q=JQG4`X157LZD_A=B6_FkBe%oN~l~;Q_AG37wMkQ^|wV!BJGgMf78H;tS
z-bV>Yw}ma;FQ+=#JPl1_1~o`if_0kMTLaS%J(gcT1u%oD0Iy`YYkS^7ctI!eMOn3+
z@N3b|*rBPC5Y=6f`YzewK{mC9QX*Ho0_XlMv%Wdcu<2;AHz2{abMf(37Ed+W|Fx~~
zf)_a=WW{Cq8{OvO8onNd`iYt3S@t8G!Hc3s%WK%t4GTVk0Lk-HeO)-Q9%>76d;0>o
z_V-cbGTzA`UYW%Fy~zDRoq*rS-QbQR4^!K7d=s%6ZWFT>FeIKbQn4c(l0}Wp(-I3`
z)PhJu7dpObAY#X;NfVbmJfN+ZqcP6cn}REu8w7)#nXhwcvW)K7V8qTZ7egKVvwt;B
zR+grcrhmLdP+E^ww3mAs<9CLf>wzp+?#x=5pp6Pf9a%8;N~1QHa3?H&v{Q+ybdzI^
ze_eMK!@}}fZF@N%w(SGlkZvOOK`vB0F~n2=d6n>IWV9h2ek#XODLMXY_Ba3i;DBV4
zmUNgAN75G5=XHR7iBFjVf?bzeNw&Ga5k5d5t<;hu@3Rx+s9J*|ZKcAJK3DH8aYq>{
z;dEVpj{)krJ61-WVuII^dX5J$*VpeLV9;heYHw)q1kbE7iX@apP~(YIPsF3J%98oa
zqWHlqWVrAQUnOhbPtjn^qB3aRp3=I08`cZO1fTEWJ_@i`h?mfLz^6St*0r*Rg(b;c
zY^!J3;3|>z9~ZcNO=5nTb|-u3JT!sTVbK2`Xj#&Ta6&@Gb(4-%Ycmvsl|=QI45$zL
z#(Jt!R_k3HYW{v>NWWzecg_|!#pbcuYrhGlc?73v6AH
z58^py3-)MOm}DZIL$hm1hkvtsnbOEzclpnB#&y5{^}XS9Gx%5?Y_6}oYk!HFzEi&8
z{+N41LEwFTEZTW_JlK!R$+tOq(+TDzAJcuCD&>j$g1bK}<%!~R`ZT0erc19E#QqP16
zuHaZT63^prt70QOL57ZiTmR~)YSjlY@^a{v856i7_AYL`z+45hL$5EzjU0nw7bJtN
z%&F>w#Fe6pXK6JR{wWyhnKcjbZAsQWjIV|kkwhky38Xy=oDen8sl^g7%Mml5;OabL
zHs1UxbJnR%sloR$S4)czr$E4=p&b=BY@eXA+oW)MKh|7Ur)6Ef*4!ZL%1xY75*2ld
znY+nBc8j@zH>|nP>rA%Ah8(B?>vPLx*~~*#cQ&n^xv-g=*m)b8ZV~VN)R(&$nBD~J
z_F%MsDY$k8=rK*-1GsTFZ{{~^bwjzFSlCq9a9C{&a95pL@QUh
zETe?kP}HIcV3ma&ZCKJDRS~1cZ0*`sSD>atmgJ&ZYIM%L)R~rI$qrX_|FEk%+fMP3
za5ghFdvJ7kdn8m{H1CK5({E?>tmi`DL3PPYDt^13AhQqKEt!MD01rAARr
z6x%)TOJrHXt4Nux22UZG%*V$zs13E|5{xd`3n>@jC61R@U(5M`Tr
z)1;57yLeAM53R6tU&Sbqfx|r;!+q*K*l=q@O#t4ijUChs<9Y$@e(9-kD#wiW!mI7u
z?Ky67alX3zJ()`hyU-BP&oQQ*I&dON91bKoxHq1(C_#*CvL;FF-o8quB~J<|d5F^P
zqLhO;VGa^CN|RKMSOF)Q5{`=(x==P2HtA$}6D!TY#rZV4d8K>@RNKCIg>t>r~fxWuNsB-H*lPZ&$rk?$s#U}&~F^F&ztuqx50aEE;A(I-#UsHyHb$0{5oBo@)pn&_o+dnwxkY62U9X+g$<4
zLhKfuLog&&!YP5i?0?|Grf=CaB{Un=a^ip1`x`t8dc=z+^s4}AXu#~)ERSQg^G|-o
zZ)}yvid^2zZIzp}zDzn6c?QfcL=VsJZPa{h8FDQcrpSfGz`Mi}pn*`n<<6eoR1Ko!
zm{8?8hhlH5iBqFQ09Kgf{naadA=0yK7VM`kkYl_jMJxQoJeq2pr?|n&>V98`_RjrK
zupw|r6m1=dK8dEa+!afL0nX?wyiDn@KQNAAz=)Xv|H?r_b_;_Omb6hioAX9NgZczU
zt@tmu$Ao&vPb397Ww)c>WbuyLuY=0CPmIOUSf~4!VLEPqT}!%C&54xDD(z(Mcsfem
zn?2l8zDjeyHeZC*;t*^Oxu^Nw9`L8y7TNrnghJF^eLzBjB4bv;o3xN11XVMhJrd4X
z=T=w2hXA$5tfw6se`(dJphFgd&FGy_%P7hQ7x7I@@qO@buB
zp-qc|43mF?YPaS}<+HeT*yZ8tFe5J=-n#l|tt3WpdB@R=JSrvve)9{N;Q_aEJa^
zq(ibc%g&hux!e^*21URlE8fPAt5ftt|S&M
z9Hyvt=xCpf%TP=nqUZ%qC6fl0$HjZ(SKz%p7p^i2os8qs{ZTSLd7069`QFm7P|7e%
z!#?k#F4vVIEt+x*4&MsMUkN2ZLkgXWEB<2@!H1>%8pq>;K7xSD69r9uPrH0%X!k9+
z4l^Txn>9SW6C=F?=W}=!|4}Oi{&%E4(kgD9S+Fslgrk*@bk0PG7bI{&Gxe?vrop<=
zWE*8L+R9`c?lsS>jwL7JOFnl(9pktf_?38Ote<0d&`D^U(prp?acFm6TK4fVr?9aI
zw7s#}D6h6-XMgFW&xlZ>XX~VK<5@}g{t>;TBg3Uc?#l!%x}`Kuy$27bXd3$qlz8Id
zw$sO*at(=RWrWn+a}bnrIgZ_T=;vOeKchYmfybl1vzW=pU1&lJJT28cv|(TDFX6VQvk-%IV?}*AYBu
z?S$0M#g&~b7#q9*7;v6#@DB1Bo=gj2T{q!cGAslbcYF-ny&^_C4gY*ftCkb+AmUdG
zhRlB(JB^W80XxC`EgpZC*?j*YqOoH@NaM5dKIq57@$
zqlIx{h8uYTsqFf0P%e=1t8z#bti&F?EAy^Ca!~%@i9{OD%|9u@NW@ZRCq)pn%&1mK
zVBt2=040t;0ta(_30tNcgO(!5)s>f*N(7(pwy>u)-Zzc-8%RP8q!$mNzJCMwlb4o6
zFg6b~?Ws~|(`}X&CDW4&SPyPLr^LJ0Wm&&kn_B_Sha3;#7d2LP&5MP0OpV|rnTcV)
zxM3%{o|7RS9X`PAt
z-O-`)w5-kWRhgCJ?{w$-8Qe+EAIk4Fo3e}1TIxBqA)YmLFAO2yUD&$D;|NMLIr1s*
zvWY%kknP6;-T=Co5~B!wm=Iz@s_2g_@ORQ9H~X`wD(21e+B#@0(X%Ye=P2{M{+|@l
z0bOyopt7Q|>ZsF1LVW4)fNLl%Ui_fg#?;2Xzt>95!$Q8VQg(Iek%9@q*B63kVWPS9
z-S&`s-dE_CS>q~*e2B2t!;Jm4iDm9u2>YyJsA9Wng2<-ZsF*raQ@bN@hAg5O(Q-vl
zby!vT=R~gD+eR+5nV~xR#n|>*>`|l?`lE&sJ|9oiOKH^3+nZI_+NA1Ufr^kln__l+
zZBb8-;M8*6UcW>DnutDNi(Fa*(d{>!5UtthI}$aeRfwyJcbii<{x1>@gnI=tSKqDu
z`(%b}dNYCOVT`-0@8}n^kMG+jR*|)=1>N(lM(s|@I{YMVO9T?iP$`Q9Llzf>ND-Cu
zPw5DWQy^itNTGByl`#V#B95bk8l^Zfr1KjZ1U2yJP#yBDs8VFdb)5{jg44a?!^9za
zIvgF_`@Awb^e~Y}gxU9DiiY67YyN%<
z_U^AAATCXMDFWuX0+P^UphRzMl1O82!xr(3>r#!>B4X-!E%5pckshmsblKaqy3LgX
z!Xfck7`b;Xp8|g)K3)G=DEVK#tV|rqGae4f}$|3k(QJV{MsNb@-6lJzW|yHEcpS)5P71
zby>L7szpw=Xw{H<&q|#xd$EP`lk00r$Ny{JHq*@N-v7IXpM%}&+{TlGT@ZKxN1hzG
zAX9`@8D@iN=8LI^2EE_AW_YwpkDqbXruN!zdxFAh>bN~@gq5e1v%Txiy3|nP1wT53
zbzz2Qqxbk_SNj&BJW6cV$2uJ@;Nv4ouvOx>2qUqHC^{1mD5$O=U{kTPi5d#C0LG%G
z45A<}G0)J;yIH6F5KTS8yOgJ(@5rR+$_+i*mOnSXB6)#s7WxX9gO%7~Ow!+xJU`N}
zwhYx$w8`Kg?zW-`+k!8ChYiHIpw(pSl`9>+StqnB;gX6$RrynCO}ARici+dzVJ5{p
z-g@W&4%^Ky-6gy>r!I02x{RGY*Kyxp9IL6{RRORa9dJ$vdjnD#-0|!0S`AXj%ZDJLBF)7UiMeL{N+YOvs~BDe2NHDFp6zQBpkAf&sD>)W%^jN+RZF?N*6g7;_8D
z+}jPMWk^|inR@sHCBBvEEG1G32bcxKxqDYOy{`t)3%4fRW+*8~Zn*O;oUo-RC6H1i
zvHcF=zqY;j)O72kSwe-*KbMp|C~2$&eV-zl%j_>Znn^Ui3z)f(ai$?F?Y-Qkei^%w
zBizuu$N1t0H;fDDTLRKCsMoSmpwX*GG;j
zs}a0neAeP+-8lkpkKNh)0pFoL)1-jt70*Bc`e-m>Kt#-!-&I*3P5D?alHGA=@bDxjMD{L8n#ND
zN4&1ZRy&tkE&60}+)<9aDyqX?feU0Y)ethR_W_Oa%XZsGUM9;zG7YQJhpwP$E{syG
zkxsHvRw5C)5g|u8M^K>7*&*Gj3QEH-@MNJenc?XN%*iwdm}KJtVcPx{(`P-Oo5d@d
z_WBq?#P~Y4t`nPb2DuXx8>Z_HC(ozpv`WJ%4i;h)vumI3iP%u8a+Az(+|9@PzoxT-
z5KrJe(mPBSEOCk*=?WkEiHy-X6Si+E^du^F
zDdJWjO^HhOg!#(c$kZE=cy`bRGAa4HD-2*H~?2c>U2)bgv*dJ$DS-zvFCqILfz6
z&t7{3)3i`%J`lywa|`|~%#|wguPVob
z4^}AUUr?u?-%#$Odn4o0j15ZmqH16zo#@n1$BLz(eLL0jnd!Y_Qr9Bh%L`|{5b^9d
z@-jSxSp
z>5~blMDLskREZwdq;R!zu3+l-Q1pBIRBomB6L9;4l!r%XRngxwqNWIb5PY$x2#RywfCXUFZ{7cCyl-K9)zzx}OQ8HXK#nrF
z#g%`$eX-?s)7p9D_j;LjKhrwFl!9Yp>O~c{5A&Fwb(&q{0AM^6!Y1OFQL+v0HDHrX
zpahpbvXCPNAVX>0kZ#l4K|wX>q-1AnY(-BJ?J`b3l`TH-R4oI~R5s@?&pL+9F2gT7
zw_D8_U2}#%IIMKl>lQy6PRBX1%Qy3~7X7~WO_f7UqA_x0u2z(ZA*~fgl>bW
z&MxZm?mj@UB>jGqQ*&PFbWfCcoM?fNKFD%=9nUE>>|xeHjF`d6#624#tOeR`3ewmF
z;ei%Zuv>@)@(Z!DK(6`CUi){ZSfq|gg0g6CB~^u%cvL_Q9D-3Zs)1%-PCbsBy%aS8
z@!?`wRE`Jzu^@+jVl$~D_02(4OU{x)?@Xc*A0>c(@PUB{)yA>ADM8Yq86^r#{Xb7)6r8>8pJ$-MAm
zgdJ3^iyD}-KAj3jyY-E1#&Ha?gWz@>p3G@EkIIsB2?r-AKgCMci;oYJ$3puyu2t@)NToar9u((JxZF28{$fX10$m6c
z+Jh4yps)`nbTN;x(GugP6p)6~Q%xX7$c(k3bhXSRva_boA4;-WUx4BeN1fb|`^32Rx-L$nHj5E~B;!eRHNt
z4j=cCL&jf_(I1mMmn*IVrqtwpS@jwc1V8SU=Xv7{G0?NLtUA7j^mM4784*qY>Zr%n
z8!LbbKlvS>PXAEp-bPzWZ&wMqMM5%hnQC{%^@4P7_xME&CZtaS=YN
zs9*$A4ABf+3Vz!8kU+o%FH(k@&Iwx-N|#`{l1$k@KCh~@8axH7y7VN%luY*p%JS>L_^u
zcF65-K>?*WWe6_AO8EbFC}PJml@laFnI@@;`Uu``_;o#g2lSp{t*rK;H}mL#(rLmQ
z-P97#!mo0FQ??(Ed^w%y_h$1KzQHGJb48zq#?crd1O;FNOoD_XyUeneiZ=cf3k(K1
zHy;cTlKvLw;{0|UQAR4rHIuz|Nj*{Hj_`GT7w~AAF~bBh*BBBamlieLzgKk-^4~n@$AB3)r!n@*fC`V&nPAn7(>M~C2w!O-VVReF-X7=Le@R5p>&8Zt2zRs
zAfE6};XjajUkaq8bhX&I6wU5McVpVB2@ZS220vkw}
zyVZ{h_^(xqs1*G!bCTTJ7ex4#&U7;qHTa8KVCPd-tnqyBy{n@if-WyzgIgWi9U6m&
zh4sZ;DNa<)rSryG36jZ=8ZI1ht9x1>8!(50+dU)54RWBvKNB4;c^dgV1Js
zSgIyN0ri@@fIV#Ib2vGCUoWjGwNTt-Po3!cyr>741^t13qVKKE6|}PdY-m@qsS2~U
zZq-g~MH}GbPq5%oTXtC>?yy#8Yuza!s}|U#8?S-z#a63J&~)TyPg+0F+xTOtV~-iV
z_E;?q?-3}1oCuA^WH^r6m^rH_tk)o{!a~ZA-6)HQS4`ewoIep(Y?=BMqym>TIJ)QI
zY&Y)z`KB-m(VwI|7B%~^uiy09B@$xF*2q^WE}hcAA`_p6MXw7aw!%|lJu$347KK|$
zET$4^Af~*g$sfxma_uiywe98K{w-TGr^|05FM16B?$W$_
zw&-342poDecYHAYBGeON8)*5hKbXLEk4JfF0t_XUTL@q1ZH2Exg$isal`9T8oa|{F
zZnQS>DFFWv@VxaMzoQ%+Vv-6I^z;TE5SlH4S~rEqcE8$_p1aO)&M2O)3mq*Frtlhc
z@CHuaFkfY2NkrOCzGd-KtBWjMbT2Z%k*Ue+fA6E=nS?~fFx0uggN(Trp=U){t{N?Y
zRj$7gSHr>86CTYz&Ms;+mTe0gnlvp*Q5mD%v$D4RDrXAa5FqBn*~Cs6SE#ri*0k`>
zoKKtUxxJ2@pvgSLm%PfC%;%w9P)NBbM2XB=OQ)NBrW)V1L6>u4cqBO!qLTjBLD-hD
zL>ja3BKLWBs3SbT*A3f<6cA;m=S2y{rmPKh_GjW+B1aXwo&u;*iCS4ecW*h;83_`I
zF*1dbkplOrB1ZJSTrLV|#Mrgd>UpYWOm+8IeUBPXK-h=A97
z4_A(8=XrJWspiw-j$>4!wKNWywf_TGrr7`kD{|kE9CMRphTz!>vtzQ+;>BWOLN7N!
zD_;KOgF~gQ_M)h*n%eRg_!Wu%s2S3Rth_WShygpBAk9HkifrGnCI&;7+P8v+g2unL
z)m3Nxy`}tWLDVn9MhiUILZ0RZ;dkwZF`?q)&I0(BT`>fLEBvhC#Wr9R><9VONE?mX
z=&e%$BnmU*3tr7FIG~I&yGJloyD8hVM_LaVIo5G#lrKGy9T$pn;$iFY)eb*f=sVI#
zK)4F~x8&R!F(tTEO+rCYi_7A>o!&*@9w+-5rUHa=
zE2fW}nl}wR%adlZee$qat)(Swr72^lXmOJ4wP~;TE%;zV4&)eZE!fl$;igJHSlP+%
zX~wOu=hFn%aq7{dy6mp`(4~sFFgihS^1oiH!9s|N-7dBW*ZoRA|7G(BvfrP+YFTrd
zV1o)GL;&kK0?{t5!4eY&l(Y2h=g|tsaLdr`Rjo>eSilH}M`2Zk+s|3iaC>$(Sc}u;
za2DmakU(Oyq%oYM98s0-sw5~&du|Z}GmY7$uS8&JfG^z0Mg>hcv#Ii!SimGcQZx`H
zP^e~GNRbdf!XYbss*4SI4PQj^B{ceg9`X`G>MT6S^gU$A7$i1hB1(XeGZWGV1Yky_
z5C$O)tTdDH3Rzg&w1$B&_~}k~vR}
zi5=+BaONPI*g!S{B2)0<$tbiFkJ}~F_xfrdH7mFf8GYv@Ow{eal_VAG3vQ|)Yh}20
zpTxH2w!d6l3kHXO#eD(!Vy6EoJj33Yb#ZrK-BQ7(1SJF>V?!`Gx5$8n26&}O_n&!4$;Kb;ff_a+pjzbfa+Z`YEs>92X_~?
zw^2W)PKoS08q#Gc8eqLqpiI?lBCv%TN5ukh9or1obSpMiln^AgeUcB>1~$bjiw9%e
zRUVSEES}|H;cL?GV_F#Qw&Yf;M73TM;X$oLV*z6TS~z$%5-jU&TQnuJJV1=j=|26s
zu$Lya!MT>z?CTdXHL$m5L*B;geG65V=hAm(~FL2GhKUFWqF*(wKbnuNVGm%e~+3miyt)x0HXrU5=s5#5j#UeFwe?e~pT$+A75W
z0dOf_!)rldbtn7Ii`(0a9$PTX9xUtQ$?7o!t8q_7
zF;;Z1EvWiT?u=@C^}F7h0$0xCN|#YX8rs=jd%Qn
z_H&-e>7h77Xo12!U1n9xPcxT{enkqt!U7i$O9XQ;pn!SD!>s4Q@PUBpiu2Cz)cX-8
zpP$8`IBHyeY~El1T3H)UR`}T5WyR12b-@=Qsy3Fa9&%wV?xq7?)=f6x>D+0>_G)*&
zUJU!)V{c}|4u`gk+xyu}`0W*+OPa?bhzp`(P)huLbQ>j7myUeF&E>^UU<1B{_A-2A
z83ZyrkYeyi!NVLfvNBb|WXYm)$W{P3DFI7203d`shq;6KqJ4S1WbKc%mzGuA{)CRR#OoaPo}V^6|Sa;tj!FT_PYcrtLfPi
zHYB$Xi#H@|DiIs0wS`C}Ml^jQRyyM!16fr)OL9+2(N&N}nSZG^;i#m
zdB5)W^f!plkQ7;%z#z3!mG$d0Nld1&0F+Yyvgw9@r+hQO_$CK{+<-wQSj1%IS}Y{X
zI*a11+;$m2{pCV79go?T-;`Yej-O{VVI<*HVY1>HK4HKV&L=oK*ppRf*V9&V!K+0A
zSYGSD533RHpz7YEd%}XIPi4<2mQQ);uE)NU>vee)YWE-dNY3(NagH$s=q~@e6MquW
z6lostlIXQJ{$S&qbS*oh;&S7Ow%qswbhZ2w-E!}?^3S)+F_dQ=)ZN|XVo88r~c(#9)nckxxUV-id4&<@Kp<>eyUT*((qJc<>NANj6lp(Mc>_JMZuZ#zdf!>Lt|p#=lV@a$~kc??4`XMMz^*?6_BOA
zG)8igU_b^CEUZ{SX!0(^jEpu`Z(Zbbh7cO(DNmm1nP5APP1gwnIM
zOp2lS{B@?AvLtZTU|@5%&17&Kt+tWMEsC$ddcUZRyc4oE%aNI9<6(EXr77tkL<)jD
zHGBWTp5*~ih`EjOL~djNJ_qtVY@#X__ksXGV2Q*te`1@=3^?@MnSc#`Wi&0|WOQto
zlPS>fa5qzsbutAgi*AC7Gu!wi>SR6tgKCL7y3`8$S!g%NvYu&{_3YtU&pOX~Mw~Nj
z5GH`vyZOiQZhCQodJxkxFJ1D^G=qQ8qr$<_K2j;pB--<*5XlK!dt;ozm)|-EN
z$f|=_-40p3?((kwp65ULvSu=@8Yl4WUkEn`G!;}|WMTw9IeF{+t$B)BOhYW}ZGL7Y
zrRwjxA?#Z_+D4ATVcN$K>TOlHmAHZghFwJhS$_&{HH2(${%LTl-VW3fBp+5?-n|>I
z8A}Cq-vPL}2A?#n7r!wTXf~rsD1?kIW);3oe>u%)vmLXFMCO!I;%uV}LJZ{L&Hq%y
z>eaqz7FJCwoi&A13aDbw1{zITF7JMfJ_er(Ms9s)&kVW3zeaF9#yQW>Zi#|G!sU;PdHHn+tB@Ya@cnXc!H(2K&n%
zB5YqI$~FLOwNe?b4vl*GLQ$#UMca_CTY#^PtUQIcVPCt@*E%lt#}Dp{jl?rgKF?P<
zy0$ykmn`FlN;>=-2^)rg+V75M!%1(WsJgQ7k-p;HHx?+2_wxChigd2vsF)9ll$yFx
z?cMmUsawkpS46V6qHc!JEv*pKKemPm&M@`U%hk^iS3jX^)X&NPgZimwvelNvR~>C`1v@GT
z0oT}T_-kkuU2aACKoq7XYgsz0X+RQ#YY8i}A&e<4VvH7@bDWrO#p593-E$o#Fr!7M
z0+MJIkkI{b`p-+ZAQ$sCXAiH_7)pP3f7$bq$I;BTuEwnvlIe9kG>-jcObHLn9o~FFAxe_V5D1
znhJh(ydvOeD7(6%di{eN$5;lNqciZWlzW!ZgRNwd(yZC2rYX&mfTSn@+U3C*#Fb@>
z5sv4nGe{J9u;}7ymvk(=%C`k~($%Rh(Ym#_R$&Bmjf4W_JSAa)pK!+GlFv-QdTl%L
z(|uuJj)gX&$7jz-WU%*
zxpLV`y;=+%9OVA}wn@1bCui>fOW@0>_*4t_s|*IWbxAl=Idk{k=$JLIOH({PmnV&N
z_i7=%s;iLzST$>~a1};(L$EuO+aYwSq+^On_`t?bc*37mSrWn&{1otbr}lQNTxW-~
zAkbMohSpo>r$A8Cpb0AgN>9}?1q?PIEUqjr?3xzTC6QrF6b&>5Se#A+{D2ICpq@mk
zI=YH9t+lF)7-Mvb$44g6+OZ>h)@E9MYc^+7+}EH>rR$-4-rr8BE=H$9Vf()5r)-@r
zPUCH0F@C!sXmd3R`w9jKL=v8g&p~~)hQ=n;h(Eq^Sg}LFu%JA@*t%O``>czmbY2D5
zEpT+VsNURCbyLW!c-vTjIR*w3X=b}z2)Jin*#UzQI|?uH>F}q28H@7G*1NZC$A0Na
zmo5*Qre?X`_3HE}LzeN3H{Zbl3ve922=$=`y1C`E0r22J!Vm~lI8d6p6dKDGUb~Ou
zac3XL^I3d5vgINkHeH6I)Xods`a^C2)S&R4
zgE7nN2t*`;c!kd`5=AEmzRF?=Yj~|EYg?92(jx5mOPX#NW|LGX%9brq<%W~gT4u+CrX)(AwQp|##2-hAtJTf*f
z3X@A#pY+f#cy)OF$%Wda5!v`bY;GaBYa(cbo`0ez?{1^N{}LmHxL~_eJJkHY<1HS&
zb?oNF8*Uwa&f@NwrJ0G=(zNT*dk#J@`^epg9-Mt`eV{%zJWv}&fIJj+cNQa5V6ovO
z$3OXfIzdZ?9RN@{irg&_S8ywYl7XN)4%JhYWwKTb#>|)~%gaLp6W*xd^$CXG_C^H3
zFwdtdm%S5Ww(=Jln}9MS%aV$PtUDb){gzw;i@QPKXGm(B--o})2<4m|83;##K#rep
z!*j5J2;w_45CV+Ww;XHJC}w?m7Rv4>j^u2yOE1~(c=22h6c6m1ibrEj+YI#F+*r9T
zvAiTKR13;UAs~3lKbV}CZomF)DjK6u$D!uRc)E4ns!|-10}l_mv7+#-g|hi;@Cz8B
z3ggT$V3N&*3<0>jz)q?WFv7r6jr5IBg~vesM?2|8B{tEs{q=Lx2qS@x;jb`4Hj1LLR>M>zf*2+a$db)84*~LsC~$x4
zFnb4dl4oOfQ$$QO6t#WfEbBSbzlAK#M*?F9FGDR@mMzOR~Z{DqH
ztC)cL0<2v+Y8)IUWp@N_!TQE~jnlZctZOciUi(_M>z(%OB{+gI%&+nQ1_B6Ueui@p
zUq`eAz_xA3Hs6@qMd`u%_00>j*IhpT
zhIKvsD`QGuJX*>milmf-+fMJEI$gi-+|k$F6O(7=F6$v_V*&hI^5m^k6?FjlAkqM^mpUI%p>LIarU_W`MXm|Q<}$aB5BLT
zzw4V`?ac&tMc~aUai_CV@QFz}$kE5%ed!9rC?)uAj-x1w3aF0it%2S`KoSUsl^w-g
zv4~KyUaX~)^o~f6Bj&j7~B9-pR87EH1#`hh(_ajhej_<
z9mpl3nZBA-jA#3Oc3;+&+f^N&^T(I#{d@cKGv)pne{{Y+e6$9yDrX9*P%InX_-Za5
zNCiS>Hj*1a2vZvVDtro!a8v-tgaEwPvJkS;
zRw^E)_XZNqTswk@Aqt923Gwmy8dncxf`RL5C+I|newj{mZ1wu)#aSPl>V;AUqmlD7
z?U}yh3Q2tKH@?N^`e<(*@smA&2#fGSq@&=@T4fB@xPA`00$xuS8E!pAKXdZdFDxHg
znOi=%(x2U%%kELmoxI_;bEnQ-zN1t*R<0g#d=s=me=W~2gZ!lA1mD1v2f~CjlY35>
z-ifge_XG-p8rq^tvW_aL@1#j0shHu{{6rLz&H5PDbeEtQZrzKCs!t}9dt5yvXnn?Z
zW2ql2k`h%cU;Uj{5DN{!67YR}KY|mqcWE@-s;Pi*$cG7gUdJ=2kO`_n?5sB@s$7K>
zDJ8BdkZbhE&G{7MdyBdm-CJxfjxLk_Xh>MX2607RSDlnzUTFl?he?{n*+fZwMz
zR3++ld7{(4SWhlKpvz`|CN-I7yr$9-EYK17ki||sVn}LT#E8y6avq`pOl@FVm8p&P
zSv?r-_WS*o-|~4geu*+eo%WNt7QwE%=vh
zqV`lx(H|Gw(QK+TJS9n#{4etR#X-MIU#pTs%VVeO4#E5ZOOnU$^@@V-A-C%wRE)-8
zmcaxuvS=?S;pLQ88ODzW-@~W?TH0}q@;!bTI~|L#%?4gmQUh(%FKF9C4#=vpWxcjF
z#o5(c9#?(C;{l>r?)t=`rDULN`zdjieY=j|F)j%;2=}EWq6*VPGpkGC$f(PwX0i@C
z>_;#FkD(xy*Q%+>OjC4nE_z!{u%1P`-+1KpH-ZybwWL#xoTf5zdt+x$
zrs|NW(h*}=eyTcP
z`T+d|ZO~uKGYrqu>H|XX(Y98=WN$|)_G|
zR)A}i0t?y;EJ@2_0i$TGQE2M~|FhEx)$&d{;q{eC30}EPDM*nmN`YwwI$v4ZyE5}9
zo`qIG5-k?lbn=+!D1NF^82SHCDg5}SDg}&G+W!UoVx|+=`Pfg<2}})e9dH%_jKbP>
zP2hjlngHH_-v8T>0KgO0b{+jW7Hu?Qi=-7ZG5Q3lcGl5CV^i>;2H*jj}JmW}Po
zV&rF576IQjW%1)@Ru&jpbQF{Ll_-c(%p==TR{)TsU3o~rF*Z{cb1Z@=kmSpFyTWMe
ziyhTP(qN*c?kI~NZ&enu;pmFmn4>BH`RNK8z|TiP6l;aMngX?f8+2M7mEivwR08;(
zPA5=GH1LZ#C90^_>Mx|)I$kwk9%
z8T0}A9*pxor`a0Vq7T}DYRY$={m$cP&9az}(BtTW#*Vt+nN-2;mZJ$acF+W_jv`>P
z85Yq7{xZrkTisL{7M089><+g2ak4fv;VTIGRk1ApG@+b&T00${>xg6!uNvy_umjK*
z$xJ50BAlRoOQVY|jmc!7@>pDS5(;SqNI=fxsfciSi^VRULZWzFWKU|^QiuM3;Mz)T
zKjV;(iE&AfRQ>;V)4nan|FO)(_;R+w#P|vo<6>Kkk25I_3y`Jb`M=usC%4=7dbsNQ
znZ$T9u|!o5G77BfCS11thsZB+RnT99UmE+#NjvS{mvOq`RLl(ncbmchW
zqEr&O92YRUfB?ATbX;gl^8gd)tjj-xINzg;#Bf`j<3v?b{|L|L;hF=M96hq{d&jZ~n4x$`k+GA$U_P*!$i4FTE$m5m#>}ReFC0
z{U%3ReGW$0%0ushzd)#cUE1OLd*Cztx{qEL`1KFBuMf4ae~Qf&io;9be*CXIo}NPk
zXp;FssaVkGmI+b-*?!-XsuGtWrHlf>Zfsx_WF{g
zLXjm7IMEs`)SAEykXV%2?%O&o4oK`2TV^A2TKqbQpp1lM>~;69PH3W{DHB;mIYEkJ
zDmHzhtSZeKFLV7SlT85&i!iwE9+-wT2Cc{ip{|6bfcfYRvK(4W9=
zO5p_C&kVprr*IkrAlQo#H(7~myUDs*8K@MigXLfADOCo0i{%>YLm#>o3UKq!*3zZv
zg|TL9VeHnK(ecHZ<~To>phEZPe-S>2GU(4Y5y R{RICml8_JW{*b^HXXo60S7(@TbNkVjTgxucvh7va
zfh4jl`($sG$NdQn^b=XyLY1RY&uas__Iul8{vo`{9|~^F8QYF-mW`5!+F!
z(;g*TF`wxnu!uXGK`z1CRg!PtxbJV+ep$Xu8!piwxNCNwFXDME^s{zZ`%iukK4F*}
zC;cJzD+)?s6VIXo>PIhc#VeLdFew4({V~F9xfQ<~lchpBMNk`UP!I)7Gznv!;0s6x
zq#u@n$F^mTJyjLVV%rp)B>~n5k6jR?=|p>m+BECc*V|LgWqdwgAV6QdY_D~r!5(7N
zXk_`TE!Wu#{hyWTtA`XDMGvNEpCT=&+xtStWzShvJ|?@**vDMaWA;&3^m@s)F1YCH
z1?#YG50-+5Kb-TZ*|2PCr3b(`1cL?FA$VAk9;JT|W8<*h!nE{0m+}D6*YBAr+m-G?
z!1xD!iSmz*=Kt?p(VemF0mH*>KG3?;&-oGV!N0@z+1}bRR6t+{10Z08SDX$6wiz7)
zKiY_QWXEe4=(U}1VcS%kt+|Pq-xggg7SZS&W82_+i}B)a#JslnDV?C9h=Wfyw3jPmn!Iw!0!c6%7LXZAc7UsGsuWGI~s+hThgL3_Vi+deB6oaycE
zy$A;EtESpj41ny$+4s!k+-_alD`d*LZn%#v*)>`52w^Qk6Z@rfw%|4rQQan*i&*8z
zmE>?L*prK-T%*BpEpO8VYPw2Y0|gtiAS5Eez7Z?auZphzYSBcB%dhLn|>tC`L6eWGZgOZ5&;`(jHaVsx|FQpDNK&*<%A%cT|)Z
zfu6KKuP00LxS9_e<>4eG19QM#2dbd4}h!CZ8Ar_qhv7GY|c;X!ec
zPKfNKQ?`Ot6@N>R&s`Mcdwao{ng&m=uFmF>97N5A~-IrdpBo8a%$a4<7`@}ud
zl3L@davgn_w`{aDXD!B@Q)>c_lUE21H|j%llDN~E^}t9^Z*x#Py|(+TadK;8a_1-5
zYD9lZ&ci5@QKpp?`AQUaNH6-+j2Oj6I@RC{5#9k$6jkGY-}Vp3NP8W+(4WFrX-g8b
z(1ab=w2!w!1te?4rGMwI6xYVoKO6&rH36tXG22y`Mhbh{JCkTE<;&)?qP{+#6LkIC
ze{jMlh~T+Cvbou6*nZw(dv_K$|AUew=R|!VXsXGOSnIjy@m%a#@_P^FV`j7HkJoSZgv^_V5YOU2
z3NPUnXBLH9RyOSSF}qViivW~^60r*2(e!LwQz9gCJ~y%Y{h7*<`Bx_LJ~y@o{Av2-
zXdpNm2^0-#nbs=x8;kj^--p(Vj9Phk4*U{+745~h(C;v6(RWrJqUA5<<=<|Xf16Q}
z)kmMFFWi^DOZmBSgzg>`CF!`06~im&zFIDTSaHo#m=BpLXfrw^}clPf<
zTchJW)f@X+|2q~vW_pij7f-{_(->WWW!5d9m%x%DWA5U?BW!q&AdK(Iq!O`6n9xDw
z-PnWMPx+e0w!G6(q3~*{G8yw8m3_K2quoP3l
z%H(pH`M~6o*Bh%y!r@)1d_EU0NbegM$YlEaGtWCblPDBZi-Accp+VR*_s}{SS`x}j
z{^=#t7b{CI?$2a+b^ZjM)9_I`2cryoQ34FT9yejZ<_y4+E{S~3F?tm7%slEQ<_G(8
zS-+RfN={;v(uY|fcgquWirs1I;H!%bI!_%X1|MBN!DcBnk`Pp4!1eiZGF$DBPt4tL
z$UG*QG)PFxJ;EUkW~14`(b=`52ensd(yNK#!iI4mBlnkrzF^Gnip&g89d^A~S6_rx
z1w8t`9!WAsEuS5;W7AE>XL$36*oF->N$u!c(x6C#Ad5B#@+cr;0!9*mA*~=;6hv8I
z@C!DVY(t46O3Jzlq6PvHg$p_m7hr?n3vMtB=i~~m|0dDI_*j!p=0JZwl=1m}zM{|5
zJ}Qb0-HqAaeCGk(4feLvW8b-76AajO_HNbTN<}$`b*#wsgZ-zT8(5We|aB*UK^aImvZLbZvj%h~z%oqhq&m{D9PSyF*grzzIbIL#)h~
zL}Huic&REVO_wJksLg{20Y4q~zwr^&qS3>1Q6RV&_Yr}VObo&R$dU?3mO(|7NGzD4
zu-!H?Nb&;+$*PQ01_B@gChJHL0Tcn&X?^vy2C90q$_Ug#)4pslM+0x6ob%Xn4k?z4
z#cMFgcIOeEU9>UZcvy3eHE6UgAh^9+%GK;<%dn0*r*_WYKAGO-6Z8K3P%sq((%j<`
zG<~gsA?O_qmgTBDnue(Ep6GMA48tf&%eCbK10GMPq2|R&MbB187R-_Gz!UidD
z?@Sa+`cyh{MUbSBS67VmFbIO68VZOHr0R+&r;|SOh$232N#yRTBK`)!x-PoiK_V!=
z(>=+XyyJo^90q01bf-X`i;dH83P`3GMO;K8N;nG`d0?@pRr&W(Iq#YI`C)*fhUcd!;SuU-`BGSTkj{w?yAh`#@v0?1($UAp31b=d*t$SJu~<8EV;x(
z_myWf&-|U084VF+ZaztSx50DNY4$8MA2>;Wsk70SFHd$FvUpkseh5tmS`~`~{a%AR
z)XGyFYPmBOYfIr@7OMG7v6}x{cYGgfm%t6BOum=>y{0qb-=W`n*dJ3OCb~d-`Ky$M
zewIODR5ZD}k9ev9F7U+m;r4TXG1;Bjm6>64=x_IfTuWP}`w6O@AAR2zdZ$qx-U;7C
z0ZQ+H%drj_pxoJ~p2RX+G2>zHrGZP&Z60w;1Hbf91wJ})ooC{hR1NgW&2V1wt?%0j5gtkcrW)~e(r1Kf&1F`tF+Nz
zuiTvTtucCRzKYUg6WJ)mp8UZ1n(?!M5+Dks&EXh;#Uh!|5JXWp+
zk*8&Hxlylkw|zUe4_tP*{r&n^?>k7H`GZ65jQn)1Y$>GENTHmvwV<
zvx}a`=yg16p>Mt!f0<`h!aQp+PIKi)WS(OdDJfJS3V=j_>O&;Sg0$sP{W{39cv^EF
zT{k$G&qpF|_u%;8SYtRpkngXS*~4v92?w+8qV|=&En$PN-3Gu+M6`49!R_gtrM06g
z3oD0L2TQ%xwZ0OpZT;R`eoFQSo;b1Z@c9#a4qv=8l1OHn>D0!dPRU(iUXnzB1}W<4
zJMblBqFgKOQbjDVg!@g*cEorbuLUeWQSB;XDT|_CrvI~SWOW#Pc-jg)uK3UB
z&kqKtp68FkZ$B_{^q!3`7&6rEJv#D$pYLDzA^bOd9{CvJUI)M)wGdGG-7vaj5
zHnSJ)TKkc^?YNN49P~`*dmVQF$t@54^+UJ5<;0OUT(Y7GwYrd-np?SZY@g&=SA=L<
zllGrke!=zUe)ZTNd>S(6`-cKBkTH`1UHRI@58e0RKRmYg6{j!$>hW+e@Bplx2=80m
z^UG&_LDdMDcfPhI-*f7~z0+sja{kvpNrFu{GjsD;Y~*k?#pQc;^H1?#^SIaoI@UUD
z0fGJ!7Q|gMW5dOiBnuPcK#(k~O!G`W5eXJ4=_C+jQCROBBzB&kd)GPds?};OwB`%B
za@yaURT-IzU7&aH>dE7jryQ2I?RH+5r~e#_DC?j~WF8ABG>UxhZ~j!zspk6qBXl#&
z=*>&>YeFs9Ke|{Le4on>`wIm
zdlpKAyDOIeT(y;(D!(S1tK{VaL
z%aLTEywqdm0?ElBE)84Wa5fe$PL!&Pk#woLP)-CQd$d?KU|NM(v@)L0)HB{dFqElf
zBOWV)2E$w(||
z+hhqONys)5E?S-4#9xQ!?wafVKYDca;B^{Sg~(u3z#c8=E7wPx@syAb0Xx!$^=tS>Q*vDvWfB2C|^Y>qs<(YHen6v@uXEmvY%H#CNxe?|WwAkFb-l*hlB=
zr>wjUuTMSv8WTtKYJl=~!9j;gLF(Ln;AEq5vf1RXJ!?JP|NTD2@`GXm5yLK5FEJEB
zlvtFhsuzxxEUy>)tXxsRSa8eG-)VxqmbNxCtNR93k0}GOF$rVCyh&%D0XGX)E{X~9
z2>708oN78RMjQe3ay*7#fQslg^qJN71?i+@r%jCD=9Q|?%XT@fk6^Z^tRDz0djOVh
zD`Iv$Y~BRzno854(R%o5z2ogBRYfMCVa!j@(?v`KfgEM;L^$JO5jSBUJ1JH}pdICP
zF+4-nQI*}(__x%(Ipu0-Wrp~z0?
zX>^}_ef5#2yk7eRkb12#QmbE0%hc=L8-|Nn9`6c!yc!t<7DIV(KqP}$)Lj6YuILyG
z>Y!y0s4yJ?kr+A=M%_`7=o$t?_6dTVGkrNp2@r``YA)!pj-&N{cs@j_jQ5}@YVvj3`wR$5wtCE{8L<^xw>lD!sGeuq)FEV9ve&f67Z%7g8)cewT#&yVS_<3%~
zFP{gv!3QFo+eBk9{yMDaMq}e`H$M5dI>OyMW#mT6Z@P6EV|usWN!F5~2D1+@u=@o#
z?}8f)I0v`WIDk?9&lkC${DuE~m&dhnM&~(;L-5D&6=b0pr-#>cs{#=na7r)$t^gl1
zFkhZ~nLK{wz+7#3EL@V-d{Qyol=}iz>6j{)BKz)jL%ey&7?9mZn$M*!qc`I5TsQGC
zQDL!=PL3I~+_Uo?X6g4V{r)zDoN|OWUW2Qfe}_N8kyJI_vmyo#(!tKL07M`Rr}Nak
z#qBxT>Os`DeBSs-wwy`j%9&qizvF5yovGwgnM&s!A=vmT&TPH}|0&X)jPf(%gV^tF
zb!5I%87vhl10|fP7RojD014XS`><>CUHIEqbL*JWvW@8ao%_6a%I%B;&)wOPYBA
zJnOYVk>2$WSl#?G{x^D8nD@giOF*2t2|)X&3HLjAtnA7B(7MOH3%vJ?V|V}1&E`Ij
zzPpFE^D-RV{1^NUn}bAUvfZ;0^H}6^fF)@xfgGS-0)Jp)cpp?L8dFky_;j
zkLQL;O^ntW7M-In;pFD8;IFVb`su6b>1GN)%}($i)JA)IYU4ejpdIi9LVldA_x3ag
ztG(kBe$yB9nO>XC)SGc*^9wY#rlJb(LDGq4i92K*v)%kZbRsVsZ#I89dB9NJFL?sb
zod6Nc6YTbl-`k`}K$JuwG|F4;^La30)-8Q~qzzUegl7=Q8I~m>`<%0`tV~dJ*^WiC
z)vRUtw0he>-1x~*#8e?_n}NPks^Py-XyyMi64VO5Xu@N7Qr6we!~K!o2ww#s+Wb4R
z$SGWTmMcIFR-Zlhe`qJ}e>MK_<~zvQ9eMRLuLw#Bci?4@X%Bio=vcc9$!EJwABBV~?CNWB&57r6&H}!Q25C?pZYkC4W8m9e8|Z8HQ|%b^1tMPjwxOQt=y0(*IpGQTf_^jLXQO!tzhm=%$T<{c
zJCvU;uGD5Ac!b3Td0LQ#l$eVTESzLpJBE`s9@^{mPl>}WJ#G_YV4rD@OJfHAg1>0o
zDEPn=iU>Wf8wC?g`iWBF15}Rv6@L5A#6O;A;Ge%r7gC9IG5JuYm`bDyNu0?fQpK%*
zOs01-tt_L$Wm&9=pZle;5K(Jks#Z`C?
z)d&QpVPJWn~Nd9I-U54UPT0ssI20RR910szFu
zyr{)r4?Oh%2LtE;0002i6P0`b0002i6PI89MEH!%qx9q-pEH2FBi;>AM9stm6$^b_}X`IVvUNkMg{2%+q)==s`9x8$2(D1Y71Y7
zAXrk5b!)}kqLD%FGOu>pF1HfiIhPMmeCVoncJ!c)OB9-kh0x4SD
z8QmF|u@1|TltSDJ&(kii*ueJRM#U7>mQ}L0ZGUDGpU1k=3h-W(RED4pRi#KuO!+7iHKkDdzl7fm0DJ;6ZW+!1
z001NaBmg7;mjI&xuK>FM#{km+-vS8&hXUmS@dI`Q7zEw~>IC)$0tF5Q8U?uqDh9j<
z2L}@e9|tQ3JqJz)iwG$Qf(VldH3_l_z6tvZ2MQAk9||i9f(nicX$#m4Q4FySP7T2g
z+YUAkpAM@Iw+_P&&ko=ZISQ=M?u9uoe;)U>0l^;}=dBo)@YYycft9)ED0vrx{}z-Wlo|F&aG@Pa0tw!y3;T
z+8ZYuSR4u*NgP@o2OWtWlpWF?-W~8A{2mA%ULI*4@*kog79fTo{2^!|f+9a6)gwD2
zMnkpYExhr8T
zOf3H`hb`kSO)iQq+b=LLk}uydFff2HyD=g$crmXr{xVH6t}^m7MKhH%)-*CSfHb!?
z2{l+XxHb4TTQ;gT;5Rxqg*VeUJ2;#;-#Gs{4>=z>FFCO};5r35DmpwmWIA*@y*lta
zggd-EEIfidjy$P6yFBVW55f#VNYQI0RR92EdX%<2LPA=1pop7EC4F=0`A}$7ttzv!o}2c|BOqR=HVHazRQ#`U)21J%V{mTc*gaN7TvNyj5r071i0pg
zG>r^1$dIj(LzPSG9AWFVsY|n`D!bwsLHRjpOpvkO5K~XdJH=^RTsF;s?V124%$?EC
zxygvCoJ*2Ar;dR67@i}$lAT)zzMS6m&3%^0lg4$-6Vtt59}{H6r|QG>GiV!OhE)z}
zw9S0kr|+A6j`e&K0eO_h_dChbwky*aYm6IHQIYQ_%aF-&y8d;_^KU)>Rf==nfIKbk
z$I}U0W2)EsJ1n#L2r;Tvr~m+X+GN2)un+(MMbZ1JZ`-zQ+cvUod$Qds+qP{^<~qB!
zwV%$R0|5N(LnHq~5kLnz;?GU4(}TVAWFJcjAdp@J@t$CMbAwylRtG`|C5&+HaF=`B
zS4Sdi*^pqOEdU?jt3O$nuxQO+|)F@~|SVYFeAt(?Fvfm`4-MOko<+nJPzGXr+yIK5>lDB;1D?cu9QU0uDodU4K9tRw8!WkD_al>7K3R18_6sjB2BpWl#Im{uf
zmB~(aagOs`UGJ6n{Gu?kd(A12IY
zHVc@~LT1pFcjTx@#VS#$%2cijRjNwWs!^@#RIdg#s!7diVG(b6&SLU-$s1m%Rc&fF
z8a<@{zb45-Ie{PuqS1}Zmt5geiW7G$O9GrNC!2FBKaWfg&b=P(vwXMJ7T2+Kbz|>N
zSMeg(tkzoMopNaD)h@3Gqa-$dZZubo+=si4XlqfF%Zm>z2zY!`;_my|3d;=oRkU5U+&_M3UR7uE6rra0F3Hl-aFEU`-tdSX+Cp)yz-%&0
zV4-@-JG9XtGR{{E5b_odxwWtvG|@<}&8qQexl`gTYqgmz(Wg#f5hy$V%m9{AX$$~(
z+GFtE!JrTnv5}FnFLDFpP7VeRhU9{c4D3!0+zkD7xiJ9_h76nxT3`{8DNN0rMVyJ8
zp=_=kW*j=KDlD8FP^oDQJ#5u%S!~fPzHD}^hRhmFU?~A7M{ZRIMFyDz5)Gmaf(^U}
zxE(khfF^PRB_)B93=RwpVCVpZAQCFc%;2(7g|Q6myK#5-Y$*?21XW#
zj^vOCkdjCs0NLHfR?3#b7S7_%X346@tj5I2qqT$af9nR8-i=HQE}L0X*ce<~00&t%
G4gdf+%i5;^
diff --git a/src/static/font/Aleygreya-ExtraBold.woff2 b/src/static/font/Aleygreya-ExtraBold.woff2
index f66acbaf8be038a5c7cf754fc058c08ddfee7edf..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
GIT binary patch
literal 0
HcmV?d00001
literal 27160
zcmV({K+?Z=Pew8T0RR910BRTj5dZ)H0NY#u0BN)U0RR9100000000000000000000
z0000QY#W?t9FtTAU;u>>2!bpLnr#sX3WC2_f{}U)gj@gtHUcCAi8KTt1%x68iw+Ed
zYa9E(C(zseT!On*RU!j|k=Y2_<6ug~(9wYyHV!Zjd}k>B|Npe4Lxw`yB~VnW>b~tp
zLaQlkAx`Jpkz9s;EfOok*2Az0a}|E|M&NIA65Jl|K!sj1^rY%EhSYd
zR%68!BhiUEXUt8EMdM`A%o#mdl|29dV|?4^yb+C-G|hlle!?ZWCZa~wCLXPkt%)}h
zizrsP@PImdpJd6DIEe$KfP-|5y;F%?;1P$dbN@CKhUHJ`ELWLSc7W_B1pftar42#V
zJaoR+fR8dsMi3c!;h+rD!5mLH$UoSL?_ar8u!@Z@&0xvs7zT#3^Yv%tyKKjkKeJk?
zI#5Xot_ny7f735X6$lm}P-Mjtq*Q4;v25M;#J8QOe1Gh8F=tA9N?$|TxUj`ZdIUH(
zet(7t1>F>12MdW-r2f;*culfUA}aEj&KmpOzp)4&&iy-@*#HA%zbXpg|8h>D-ISf}
z)ejhx0?-$z0ig8$`Qh3p33=t1m(Bt07U*D0`E&>~#pILF6*^A6Y?+5|XQk=SQmnfq
z@+YH#P9q%2=6_#H{d3N}_r2~B*eo*1kr@Q0PJM@ytH0W3
z87r46xzwgPx!e-u9U()bp0C3b0`tE)vv`-K*PA8BlYx|gkNc&csTUZmtNr%o#2MgF
zfu~J@z>eFdxP>g9kO2C>^yX2AB&D_>w!(K0*X9Ecc@@
ze`|7jB>~AMsS*)%6X`0a_O{B&+2`!DUG~1qV!7)6fBUsO|Ne{kV{mO^bt7>)so47b
zL0l7uP?k+ZVl}0pR@1W8JQ|0@A{`ioCeJriggF;Soy3`Z{Da-}-QR7edWtQAB$JSu
zN0@FB)?!yF@yq{g#$&(
z2P)JE)MOZFf$c!My(i=)dw_oOf@Ti{V~hz10j2=CJBR=*{zL&394f$Pos*siaBdms
zYylMa2D;mTU
zf8dJJZb8y
z2+a3?xFtK-VFasKd1<16RcegqCZkT211N>Y
z!P3j2hIJE2<*imv{l@&|{{R0Jx2}b&qPe=Z09{y7{TjY+t>m7+QSPZH#q3)uX4G}g*Uge$qWu(hc3oN|3-D>XY=^to7QxHJ8IJ)12;m
z#9h$oAq7MU^TO~<5Cs)vv(aG~xL`b_69RsBA^{nMTu2n%nUqve>gUKbv=BPMFd?Tq
zEL0erSuhr%2p6gd;fQ>WCQ2N-cnKI1Pj{vyHY|2wb68S4;DQGZIN&JGauNtPC14m%
zQ-uVpJc335L7>1@6+sISDZy$8NIe9AAb=PsU=TnAVoAF13Z(L5$jR(uZCtemc$>#UO*!*mu00j
z=%z*3*1^LyDynz8U9em**vwqiJKlxOZG{$)z47yCg2Q`X%BBgGsF+eCd*`gJOhJMXd-}Z1aE4g2v-Ue=nO_ZpHgC*
z3j$u#63Rvhjb?fVjZyv9q|-_U2LuoOgh;HCRhLbazVs0F#WlH({%Ttwt_Qpj!aVD{
z^@aet*xoon)Ri%6R!;Y6tY}BGuru2fdQ)i|AOhkwH`P*6i!Gy$9OzB1hk41JL6V|)
z^l#Gw*#rSCESna7G(i!hkuWCOO5Fu2RbJpx*GIUTaw%f121pDU7G%U4rVdrDOUzx&
zEgO-afy1;#6e?&EhGVnhm18vA?TyS^E_gxN0P%&uHI)-aEOcXIjVt}9lbul_(
zXrM@mhEZn2P8$=a=Jl%Tps0?Bd^o7{fl%L+QQjB=dcB@dnIKR>CQxBgV*UgYy&qtb
ze}C`CJibgU>;Irr+rjNra%k6jZ(g=hnby&p76@d_Z@gORpP;tno
zU+q@loAx{fMKed+8=u_l_WpOiy?w>UUedn(o9;4?E@JzIm6N8wBSt2>EfR*E&VkX1
zX_)t05-><;S#C+hB&8F6O9YFIUc@a)*yIc%89L+xL89Q6WL!!{(YM6#sF=k3=#1l2
z3uYC2Yunsbu;^O)pBKFqgB9JDo$trDTq+e1YosuPVIu-
z4x=nh#UNCqI5r;XxFC#G*yfY*ahx5+RsomUg_%|s)*y(N!m1c1fD!KB1fer%~}l5u3XRX)IC58EV0%{MKKIT!?9Bp-r;Sui#6-`
z;)*mJsx5KUM}ChrWm%NtnJxgG)DvJx<7(?S{tW@70AP;;+g}$bb4#k~8@_YTGho+%
zG`)1v`0kV@)5!0;37rG5wVvWr}A3-Rm>fM|(n??IX5|2y;D%202LbB3a-PV%~O14gW(H3Q-Ez*KE
zk?OWk{cW(+L5keJUKGHO?vmrcslrohAWkW%ceWv|?LU_kG(t*h@e<|ASEX62WmZH*
zE(XFPsc0)TA6UiSDV;5piHCsnz2uQ=yb=Us5oC9k>cb!i)fRJXHH>+P^SsVPehq0^Cb(FZZo})o&uFAS-YMM<;-Ay7!(j&Mb+RrAp#
zYu~xWqxrw$|IGh0X70@V2mmwR0>I4sGlyrsof)5*KXYsBp@!c-_`c)&_V4a~Hv@ox
zPd)d(xs9)7r_
z!Y6QBPT}gAG;~6lS%ixe^(0wZq9k@-dE3{~fX~xOmE*ly7{wJTRcX}J1-Wh7^&5PS
zqXqE%5dHr-zS3G>L;=3^zb8KOlV3ddYp5Uz)CL7!a@z~wUt~}p9Qe-_lc@rLTYz^`
zd&3?-y5YJveS(C5hzxQ$>ztH4~{I&|vQKs)9tL-_U!|
z{X+xtmi7!d{0BKdqoB8KC2h+@|WO;XX<%l4m>GGPacNC8A@YL|Bx_Y#BH@L9lcG%
z6#31MKTxQ~UP}mCSaL_`$cXkmv!fJ-9Fbck&lpk-I&z)t&Mo~bm=P`ZPn%?wHcm#N
zrHhc)I+?Me1N1;8X>1aSX`U&^T%gMl=Y59~wZ#;~AK4feodk4)pt@rm&ch6%I7H{-
zTP~i+$^Sn>%eEX-`E!kDE?t<4c>`}Ql{F_5%7n-VYtZ9H3sNw070<;4#3vGEGKHGP
zF!d!yJz&Arr#7V(^P!I(qgTbzqk%wu5%$;^p=%A|P^GtY?p16H98$(#ioUTINT*A^M&@j
zeF)tRLQ*V9kuXLa1i^{5F*H_*9?w_+mUJmd&RSt@K6eQ-1@v4g3of9?Y+7^Do-M!Cj$Ci$iX_Y!DU
ztCioA8Ci_bkxSOms3JCPX|cu{7DeNy&ZXi8zyPLB{&s%V^
zDWAxLX@>OEF%|DtEjl{-9GXQkj)e}>I4Sa^Iz@|4Zp?{`N&--M>8C9x^x3DBnb10J
zM4*d1Rn!hTiD*g1n0=#EUNk04aY>|Zw1lE!d+(V-RMbM+Ls*)vhL&@S{vf4KKpITh
zdoh6UMAa?mJ?^zeBi{K^4b1sfzo08x&Hjf4s>^Y0UNV{HR(|hgO-vvaTKq&YCg(m)
zC$Au=RVfs6$J8@-VT#7;vbJKwvhMZUyl`ie-(aYC+K2jflP5|x{ce+|nv(@A?F945
zhzu&$T#uo93u>jhSARG$OjH6;?kQ+c%NCW`!)EaZSQvSjSN0!?fh~hz;LJ{LWXpN0
z33+1{J#OV-LpAD?CM+Q@p(K(l3H+=(cfZ;4m@5la*TH3D-buV{7T{HohpfCB)#DSg
z_Xq6>YV`9UR+;(k=DH423hYHj*|gz7aD@x1wt{P1P~96Iaf1tLwt`z+GTY71z%6ix
z59+Q4_xPaxRYBkZA2eJI9`Vt}l<_?`0S`@E!80ys?hQ|P!38Z_!7DCo%^betH{he~
zYVeK^+XDbT@IlAb;1i$Q&P|Ea^vEu#AhY1O;#|AQo_M%W?)QEJ(Zh*qCqF94(%-oc-WDE=Q$Gad`ALaAORY2f@q-=R2NZ8B3|rB
z#7i8Bc&Q^1FOvW*cYKjcr!
zW2peu5c8ywJz1bq`hKXZ)`@gIi~y3=Dwku5J@GWu|4SDp&T7$rJ7Qg_V~vyJlY?i<
zh-H)ecunz@Gh8V%HBuJ%SmEpG^W3Y5yPBT`{h>tEK-C&$BjZ3#Dm~TQ;bE(&rwLB5
z>!#fQ$f02mH$&XwLdo?_tK2Sc%A4$Ev|Tf*kJ4x;E4DsDI^JBRK7DU4VLa1t!6sfe
zbFdpKD#cjlX>D~g7gJYJsEX{M3Z*8_qnL)VdWfY#29h=?B#EpTkJI~M-HRfKInwWxj1A(76>u5zzik8q8wVtde*BQvG@i#
zvpHC-acu&D`*NotA(JXH6c!ALJV`&bEI#8R$3YzB2}f**dAJP9k4k!UI|9=q8!Z$a
zF?LJ0BkZN>Pkgl`Ei5=%lE88oTP(|HDIYl^aU{wtbqRn3z*I3+3ET2*R1q8mcH
z!mf@=8zh7_P_ZVvy2sIOET`~sVybH+B@~g{4l#&g
zI~XcDWuz#dM$LYFs(II23w&5r$NqB=={tUSDZ3tu4!WNc+~3HWQJ?n8B)Qv~*bup-d6L6KlxD&k)-to07%C
zfComaS0E=I2|&0ut}D%kpg$V)WPt>`M;1>+OxFYlLfaeI7I7HV2Tv}{-5dE`h5F6D2mds&t
zCY>^2xMr%zk**>RZj@}o@iXu#grk&7wtQ2kH29#V=kI!*sddLgfwWW)B
z_t4UIqlkR0KMHDAPhv7K0K#?wlof#l5bo1f!rL=I%x8#Q?NGi)gOk5~NRSGxJ|aKE
zq6eObP@SoM>5*Q+ChGtHJLY@|<>o)o^&?q9g26QeEJW6Ly4sQ=R2lVID+qwn$;MdV
zKx~SZh$aT?K#V2kSfcTxWbf19#rbiCq^)skq4|Q;3PLLS9b%wU@@Zhixuwee#7{nP
za0>hvZDh_0gk6lJPpqriKyOr|NApbHn{-ODgzWuM|2%FQ+|O>rq3+pk_K^2>$K_iheasc-V|+Qty0pYGCa@$u)deR
z+C&xBma7V7-%{?T%yGHG3O#KnFqKawHUgjTJpY~o5IhLX}u;bxw$OhI?R+F%8dawEm
zuzbTn8;cC_%Gls%JjpzIxMoJY3U9f2J|#RHMoGgrE9KQ_@G)yVSOQSt!A#BeF?