diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bfc3f62..885e045 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v2.1.2 with: - version: 10.x + version: 14.x - name: build and unit test run: | yarn diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml index cd64eb3..d0b2f4a 100644 --- a/.github/workflows/snapshot.yml +++ b/.github/workflows/snapshot.yml @@ -14,7 +14,7 @@ jobs: token: ${{ secrets.WORKFLOW_PAT }} - uses: actions/setup-node@v2.1.2 with: - version: 10.x + version: 14.x - name: build and unit test run: | yarn diff --git a/README.md b/README.md index d199a60..7320ea8 100644 --- a/README.md +++ b/README.md @@ -31,15 +31,13 @@ This repo uses NPM scripts in order to run all tests and linting. You can run bo ### Unit Testing -This repo uses [Karma](https://karma-runner.github.io/latest/index.html) and [Jasmine](https://jasmine.github.io/) for all unit testing. The unit tests are run using a headless version of Chrome to verify that all tests work in a browser-based environment. +This repo uses [jest](https://jestjs.io/) and [nightwatch](https://nightwatchjs.org/) for all unit testing. The unit tests are run using a headless version of Chrome to verify that all tests work in a browser-based environment. `yarn run unit` To run a subset of the tests you can use the `-t` option of Jest to only run tests whose name matches the provided value -`yarn run unit --filter GroupCrypto` +`yarn run unit GroupCrypto` -This library also has minimums for unit test code coverage in order to pass. These coverage minimums are configured within the `karma.conf.js` file and determine what the minimum % of code coverage is for various metrics before the unit tests will pass. - -Copyright (c) 2020 IronCore Labs, Inc. +Copyright (c) 2022 IronCore Labs, Inc. All rights reserved. diff --git a/globals.d.ts b/globals.d.ts index 0e2239f..501d3a8 100644 --- a/globals.d.ts +++ b/globals.d.ts @@ -4,12 +4,9 @@ interface Window { Promise: PromiseConstructor; msCrypto: Crypto; - User: { - id: string; - name: string; - }; } + /* * Declare types for modules without build in types */ diff --git a/integration/clientHost.webpack.js b/integration/clientHost.webpack.js index f94c507..7980d88 100644 --- a/integration/clientHost.webpack.js +++ b/integration/clientHost.webpack.js @@ -82,20 +82,26 @@ function serveJWT(req, res) { module.exports = { devServer: { + client: { + overlay: true, + }, hot: true, compress: true, port: SB_PORT, host: SB_HOST, - overlay: true, - https: { - key: fs.readFileSync(path.join(__dirname, "certs/sb/privkey.pem")), - cert: fs.readFileSync(path.join(__dirname, "certs/sb/cert.pem")), - ca: fs.readFileSync(path.join(__dirname, "certs/sb/chain.pem")), + server: { + type: "https", + options: { + key: fs.readFileSync(path.join(__dirname, "certs/sb/privkey.pem")), + cert: fs.readFileSync(path.join(__dirname, "certs/sb/cert.pem")), + ca: fs.readFileSync(path.join(__dirname, "certs/sb/chain.pem")), + }, }, - before(app) { - app.use(cookieParser()); - app.get("/", serveIndex); - app.get("/generateJWT/:userID", serveJWT); + setupMiddlewares: (middlewares, devServer) => { + devServer.app.use(cookieParser()); + devServer.app.get("/", serveIndex); + devServer.app.get("/generateJWT/:userID", serveJWT); + return middlewares; }, }, mode: "development", @@ -114,7 +120,7 @@ module.exports = { { test: /\.tsx?$/, exclude: /node_modules/, - use: ["awesome-typescript-loader"], + use: ["ts-loader"], }, ], }, @@ -123,10 +129,8 @@ module.exports = { emitOnErrors: false, }, plugins: [ - new webpack.HotModuleReplacementPlugin(), new webpack.DefinePlugin({ - NODE_ENV: JSON.stringify(runtimeEnvironment), - "process.env.NODE_ENV": JSON.stringify(runtimeEnvironment), + //"process.env.NODE_ENV": JSON.stringify(runtimeEnvironment), not sure why this conflicting problem comes up SDK_NPM_VERSION_PLACEHOLDER: JSON.stringify(process.env.HOSTED_VERSION || "SDK_NPM_VERSION_PLACEHOLDER"), _ICL_FRAME_DOMAIN_REPLACEMENT_: JSON.stringify(getFrameDomain()), }), diff --git a/integration/components/InitializeApi.tsx b/integration/components/InitializeApi.tsx index ff13c5e..369c29b 100644 --- a/integration/components/InitializeApi.tsx +++ b/integration/components/InitializeApi.tsx @@ -14,10 +14,19 @@ interface InitializeApiState { passcode: string; } +declare global { + interface Window { + User: { + id: string; + name: string; + }; + } +} + const tabStyle = { marginTop: "15px", padding: "25px", - textAlign: "center" as "center", + textAlign: "center" as const, }; export default class InitializeApi extends React.Component { @@ -99,11 +108,11 @@ export default class InitializeApi extends React.Component, ]; } @@ -152,7 +161,7 @@ export default class InitializeApi extends React.Component this.setState({passcode: ""})}>
- {this.getPasscodeInput()} + {this.getPasscodeInput("manual")}

diff --git a/integration/components/StatusConsole.tsx b/integration/components/StatusConsole.tsx index 605b202..5a7aeef 100644 --- a/integration/components/StatusConsole.tsx +++ b/integration/components/StatusConsole.tsx @@ -35,10 +35,10 @@ interface StatusConsoleState { logList: LogItem[]; } -export default class StatusConsole extends React.Component<{}, StatusConsoleState> { +export default class StatusConsole extends React.Component, StatusConsoleState> { logContainer!: HTMLDivElement; - constructor(props: {}) { + constructor(props: Record) { super(props); this.state = { logList: [], diff --git a/integration/components/TabWrapper.tsx b/integration/components/TabWrapper.tsx index ea61c4a..865c426 100644 --- a/integration/components/TabWrapper.tsx +++ b/integration/components/TabWrapper.tsx @@ -13,8 +13,8 @@ interface TabWrapperState { selectedGroup: null | GroupMetaResponse | "new"; } -export default class TabWrapper extends React.Component<{}, TabWrapperState> { - constructor(props: {}) { +export default class TabWrapper extends React.Component, TabWrapperState> { + constructor(props: Record) { super(props); this.state = { selectedList: null, diff --git a/integration/components/TodoApp.tsx b/integration/components/TodoApp.tsx index ac00538..7c4a02c 100644 --- a/integration/components/TodoApp.tsx +++ b/integration/components/TodoApp.tsx @@ -27,8 +27,8 @@ interface TodoAppState { selectedList: null | DocumentIDNameResponse; } -export default class TodoApp extends React.Component<{}, TodoAppState> { - constructor(props: {}) { +export default class TodoApp extends React.Component, TodoAppState> { + constructor(props: Record) { super(props); this.state = { initComplete: false, diff --git a/integration/components/UserInfo.tsx b/integration/components/UserInfo.tsx index 4d8c1a4..8933e44 100644 --- a/integration/components/UserInfo.tsx +++ b/integration/components/UserInfo.tsx @@ -22,17 +22,26 @@ const buttonStyle: React.CSSProperties = { margin: "5px", }; +declare global { + interface Window { + User: { + id: string; + name: string; + }; + } +} + interface UserInfoState { showingDialog: boolean; changingPasscode: boolean; passcodeError: boolean; } -export default class UserInfo extends React.Component<{}, UserInfoState> { +export default class UserInfo extends React.Component, UserInfoState> { currentPasscodeInput!: TextField; newPasscodeInput!: TextField; - constructor(props: {}) { + constructor(props: Record) { super(props); this.state = { showingDialog: false, @@ -66,9 +75,11 @@ export default class UserInfo extends React.Component<{}, UserInfoState> { }, () => { if (error.code === IronWeb.ErrorCodes.USER_PASSCODE_INCORRECT) { - this.currentPasscodeInput.getInputNode().value = ""; - this.newPasscodeInput.getInputNode().value = ""; - this.currentPasscodeInput.focus(); + if (this.currentPasscodeInput && this.newPasscodeInput) { + this.currentPasscodeInput.getInputNode().value = ""; + this.newPasscodeInput.getInputNode().value = ""; + this.currentPasscodeInput.focus(); + } } } ); @@ -82,7 +93,7 @@ export default class UserInfo extends React.Component<{}, UserInfoState> { logAction(`User device successfully deauthorized. Deleted transform key: ${result.transformKeyDeleted}`); window.location.reload(); }); - } catch (e) { + } catch (e: any) { logAction(`User device deauthorize error: ${e.message}. Error Code: ${e.code}`, "error"); } } diff --git a/integration/components/documents/DocumentDetail.tsx b/integration/components/documents/DocumentDetail.tsx index c3a1063..3309a7c 100644 --- a/integration/components/documents/DocumentDetail.tsx +++ b/integration/components/documents/DocumentDetail.tsx @@ -9,7 +9,7 @@ interface DocumentDetailProps { backToList: () => void; } -export default class DocumentDetail extends React.Component { +export default class DocumentDetail extends React.Component { render() { if (isLocalDocument(this.props.document.documentID)) { return ; diff --git a/integration/components/documents/DocumentList.tsx b/integration/components/documents/DocumentList.tsx index b340ed4..03a76ea 100644 --- a/integration/components/documents/DocumentList.tsx +++ b/integration/components/documents/DocumentList.tsx @@ -4,7 +4,6 @@ import Divider from "material-ui/Divider"; import FloatingActionButton from "material-ui/FloatingActionButton"; import {List, ListItem} from "material-ui/List"; import {brown200, brown400, cyan500, lightGreen200, lightGreen400, lightGreenA700, orange200, orange400} from "material-ui/styles/colors"; -import Subheader from "material-ui/Subheader"; import Assignment from "material-ui/svg-icons/action/assignment"; import Add from "material-ui/svg-icons/content/add"; import Cloud from "material-ui/svg-icons/file/cloud"; @@ -156,12 +155,7 @@ export default class DocumentList extends React.Component
- - My Documents - {this.getDocumentsMarkup(this.state.lists.filter((list) => list.association === "owner"))} - Shared With Me - {this.getDocumentsMarkup(this.state.lists.filter((list) => list.association !== "owner"))} - + {this.getDocumentsMarkup(this.state.lists)}
diff --git a/integration/components/documents/DocumentVisibility.tsx b/integration/components/documents/DocumentVisibility.tsx index 719c1e6..d42d3cf 100644 --- a/integration/components/documents/DocumentVisibility.tsx +++ b/integration/components/documents/DocumentVisibility.tsx @@ -18,7 +18,7 @@ interface DocumentVisibilityProps { loadDocumentMetadata(): void; } -export default class DocumentVisibility extends React.Component { +export default class DocumentVisibility extends React.Component { revokeDocumentAccess(id: string, type: string) { const unshareList = { [type === "user" ? "users" : "groups"]: [{id}], diff --git a/integration/components/documents/FileDocument.tsx b/integration/components/documents/FileDocument.tsx index 2d7ec92..9a1d2cc 100644 --- a/integration/components/documents/FileDocument.tsx +++ b/integration/components/documents/FileDocument.tsx @@ -9,7 +9,7 @@ interface FileDocumentProps { fileName: string; } -export default class FileDocument extends React.Component { +export default class FileDocument extends React.Component { getImageDocumentMarkup() { return ; } diff --git a/integration/iclHost.webpack.js b/integration/iclHost.webpack.js index 9559b35..29e3bd4 100644 --- a/integration/iclHost.webpack.js +++ b/integration/iclHost.webpack.js @@ -63,14 +63,13 @@ const sharedConfig = { module: { rules: [ { - test: /\.ts$/, + test: /\.tsx?$/, exclude: /node_modules/, - use: ["awesome-typescript-loader"], + use: ["ts-loader"], }, ], }, plugins: [ - new webpack.HotModuleReplacementPlugin(), new webpack.DefinePlugin({ SDK_NPM_VERSION_PLACEHOLDER: JSON.stringify("SDK_NPM_VERSION_PLACEHOLDER"), _WORKER_PATH_LOCATION_: JSON.stringify("./webpack/dist/worker.js"), @@ -84,23 +83,29 @@ const sharedConfig = { const frameConfig = { ...sharedConfig, devServer: { + client: { + overlay: true, + }, hot: true, compress: true, port: IRONCORE_PORT, host: IRONCORE_HOST, - overlay: true, - https: { - key: fs.readFileSync(path.join(__dirname, "certs/icl/privkey.pem")), - cert: fs.readFileSync(path.join(__dirname, "certs/icl/cert.pem")), - ca: fs.readFileSync(path.join(__dirname, "certs/icl/chain.pem")), + server: { + type: "https", + options: { + key: fs.readFileSync(path.join(__dirname, "certs/icl/privkey.pem")), + cert: fs.readFileSync(path.join(__dirname, "certs/icl/cert.pem")), + ca: fs.readFileSync(path.join(__dirname, "certs/icl/chain.pem")), + }, }, - before(app) { - app.get("/ironweb-frame", serveFrame); + setupMiddlewares: (middlewares, devServer) => { + devServer.app.get("/ironweb-frame", serveFrame); //Setup endpoint for optionally serving production files for both the frame and the worker script. The path here is defined //both above in the frame HTMl as well as the build config in build.js for when we define the webpack public path for the worker. - app.use("/static/:version/:file", (req, res) => { + devServer.app.use("/static/:version/:file", (req, res) => { res.sendFile(path.join(__dirname, "../dist/frame/", req.params.file)); }); + return middlewares; }, proxy: { //Proxy through API requests through webpack. We're doing this because the API is hosted locally over port 9090 over diff --git a/integration/nightwatch/pageObjects/documentCreateScreen.js b/integration/nightwatch/pageObjects/documentCreateScreen.js index 5be6a1a..fba012f 100644 --- a/integration/nightwatch/pageObjects/documentCreateScreen.js +++ b/integration/nightwatch/pageObjects/documentCreateScreen.js @@ -21,9 +21,9 @@ const documentCreateActions = { return this.setValue('@userGrantInput', id); }, clickOnGroupGrantAccessCheckbox(groupID){ - this.api.element(this.client.locateStrategy, `#${groupID}`, (element) => { - this.api.elementIdClick(element.value.ELEMENT); - }) + browser.element(this.client.locateStrategy, `#${groupID}`, (element) => { + this.api.elementIdClick(Object.values(element.value)[0]); + }); return this; }, } diff --git a/integration/nightwatch/pageObjects/documentListScreen.js b/integration/nightwatch/pageObjects/documentListScreen.js index e355d68..84943d1 100644 --- a/integration/nightwatch/pageObjects/documentListScreen.js +++ b/integration/nightwatch/pageObjects/documentListScreen.js @@ -3,8 +3,8 @@ */ const documentListActions = { expectTodoListStorageType(selector, position){ - this.api.elements(this.client.locateStrategy, this.elements.listItems.selector, (elements) => { - this.api.elementIdElement(elements.value[position].ELEMENT, this.client.locateStrategy, selector, (chipElement) => { + browser.elements(this.client.locateStrategy, this.elements.listItems.selector, (elements) => { + this.api.elementIdElement(Object.values(elements.value[position])[0], this.client.locateStrategy, selector, (chipElement) => { this.assert.equal(chipElement.status, 0, chipElement.status === -1 ? chipElement.value.message : "Found correct storage chip"); }); }); @@ -17,14 +17,14 @@ const documentListActions = { return this.click('@newDocumentButton'); }, expectCountOfTodoLists(length){ - this.api.elements(this.client.locateStrategy, this.elements.listItems.selector, (elements) => { + browser.elements(this.client.locateStrategy, this.elements.listItems.selector, (elements) => { this.assert.equal(elements.value.length, length, `Todo list length, expected item count of "${length}, found "${elements.value.length}"`); }); return this; }, expectTodoListNameAtPosition(position, name){ - this.api.elements(this.client.locateStrategy, this.elements.listItems.selector, (elements) => { - this.api.elementIdText(elements.value[position].ELEMENT, (elementText) => { + browser.elements(this.client.locateStrategy, this.elements.listItems.selector, (elements) => { + this.api.elementIdText(Object.values(elements.value[position])[0], (elementText) => { this.assert.equal(elementText.value.includes(name), true, `Todo list content, expected roughly "${name}", found "${elementText.value}"`); }); }); @@ -37,8 +37,8 @@ const documentListActions = { return this.expectTodoListStorageType(this.elements.localStorageChip.selector, position); }, clickOnNthTodoList(item){ - this.api.elements(this.client.locateStrategy, this.elements.listItems.selector, (elements) => { - this.api.elementIdClick(elements.value[item].ELEMENT); + browser.elements(this.client.locateStrategy, this.elements.listItems.selector, (elements) => { + this.api.elementIdClick(Object.values(elements.value[item])[0]); }); }, }; diff --git a/integration/nightwatch/pageObjects/documentViewScreen.js b/integration/nightwatch/pageObjects/documentViewScreen.js index 71aca97..4713305 100644 --- a/integration/nightwatch/pageObjects/documentViewScreen.js +++ b/integration/nightwatch/pageObjects/documentViewScreen.js @@ -2,76 +2,83 @@ * Actions and assertions for document detail page, for both hosted and local documents */ const documentViewActions = { - assertDocumentID(id){ - this.expect.element('@documentIDText').text.to.equal(`ID: ${id}`); + assertDocumentID(id) { + this.expect.element("@documentIDText").text.to.equal(`ID: ${id}`); return this; }, - assertDocumentName(documentName){ - this.expect.element('@documentNameInput').value.to.equal(documentName); + assertDocumentName(documentName) { + this.expect.element("@documentNameInput").value.to.equal(documentName); return this; }, - changeDocumentName(newName){ - this.setValue('@documentNameInput', newName); + changeDocumentName(newName) { + this.setValue("@documentNameInput", newName); this.api.elementIdClick(this.elements.documentNameInput.selector, () => { this.api.keys(this.api.Keys.TAB); - this.waitForElementPresent('@documentNameInput'); + this.waitForElementPresent("@documentNameInput"); }); return this; }, - backToDocumentList(){ - return this.click('@backToListButton'); + backToDocumentList() { + return this.click("@backToListButton"); }, - assertHasTodoItemAtIndex(todoText, index=0){ - this.api.elements(this.client.locateStrategy, this.elements.todoListItems.selector, (elements) => { - this.api.elementIdText(elements.value[index].ELEMENT, (elementText) => { + assertHasTodoItemAtIndex(todoText, index = 0) { + browser.elements("css selector", this.elements.todoListItems.selector, (elements) => { + this.api.elementIdText(Object.values(elements.value[index])[0], (elementText) => { this.assert.equal(elementText.value, todoText, `Todo list item content, expected "${todoText}, found "${elementText.value}"`); }); }); return this; }, - addNewTodoText(todoText){ - return this.setValue('@updateTodoInput', todoText); + addNewTodoText(todoText) { + return this.setValue("@updateTodoInput", todoText); }, - submitNewTodo(){ + submitNewTodo() { this.api.elementIdClick(this.elements.updateTodoInput.selector, () => { - this.api.keys(this.api.Keys.ENTER); - this.waitForElementPresent('@updateTodoInput'); + this.api.sendKeys("#newTodoItem", this.api.Keys.ENTER); + this.waitForElementVisible("@updateTodoInput"); }); return this; }, - assertUserVisibleToSize(size){ - this.api.elements(this.client.locateStrategy, this.elements.userVisibleItem.selector, (elements) => { + assertUserVisibleToSize(size) { + browser.elements(this.client.locateStrategy, this.elements.userVisibleItem.selector, (elements) => { this.assert.equal(elements.value.length, size, `Expected user visible count of "${size}", found "${elements.value.length}"`); }); return this; }, - assertUserVisibleIDAtPosition(position, id){ - this.api.elements(this.client.locateStrategy, this.elements.userVisibleItem.selector, (elements) => { - this.api.elementIdText(elements.value[position].ELEMENT, (elementText) => { + assertUserVisibleIDAtPosition(position, id) { + browser.elements(this.client.locateStrategy, this.elements.userVisibleItem.selector, (elements) => { + this.api.elementIdText(Object.values(elements.value[position])[0], (elementText) => { this.assert.equal(elementText.value.includes(id), true, `Expected roughly visible to ID "${id}", found "${elementText.value}"`); }); }); return this; }, - assertGroupVisibleToSize(size){ - this.api.elements(this.client.locateStrategy, this.elements.groupVisibleItem.selector, (elements) => { + assertGroupVisibleToSize(size) { + browser.elements(this.client.locateStrategy, this.elements.groupVisibleItem.selector, (elements) => { this.assert.equal(elements.value.length, size, `Expected group visible count of "${size}", found "${elements.value.length}"`); }); return this; }, - enterUserIDToGrantAccess(id){ - return this.setValue('@userGrantInput', id); + enterUserIDToGrantAccess(id) { + return this.setValue("@userGrantInput", id); }, - clickGrantAccessButton(){ - return this.click('@grantAccessButton').waitForElementPresent('@grantAccessButton'); + clickGroupList() { + browser.click(this.client.locateStrategy, this.elements.groupVisibleToList.selector); + return this; + }, + clickGrantAccessButton() { + browser + .click(this.client.locateStrategy, this.elements.grantAccessButton.selector) + .waitForElementPresent(this.client.locateStrategy, this.elements.grantAccessButton.selector); + return this; }, - clickRevokeAccessButton(){ - return this.click('@revokeAccessButton'); + clickRevokeAccessButton() { + return this.click("@revokeAccessButton"); }, - clickOnGroupGrantAccessCheckbox(groupID){ - this.api.element(this.client.locateStrategy, `#${groupID}`, (element) => { - this.api.elementIdClick(element.value.ELEMENT); - }) + clickOnGroupGrantAccessCheckbox(groupID) { + browser.element("css selector", `#${groupID}`, (element) => { + browser.elementIdClick(Object.values(element.value)[0]); + }); return this; }, }; diff --git a/integration/nightwatch/pageObjects/groupCreateScreen.js b/integration/nightwatch/pageObjects/groupCreateScreen.js index b917732..2f4776a 100644 --- a/integration/nightwatch/pageObjects/groupCreateScreen.js +++ b/integration/nightwatch/pageObjects/groupCreateScreen.js @@ -3,19 +3,21 @@ */ const groupCreateActions = { - enterGroupID(id){ - return this.setValue('@groupIDInput', id); + enterGroupID(id) { + return this.setValue("@groupIDInput", id); }, - enterGroupName(name){ - return this.setValue('@groupNameInput', name); + enterGroupName(name) { + return this.setValue("@groupNameInput", name); }, - toggleAddAsMember(){ - return this.click('@groupMemberToggle'); + toggleAddAsMember() { + return this.click("@groupMemberToggle"); }, - submitNewGroup(){ - return this.click('@groupCreateButton').waitForElementNotPresent('@groupCreateButton'); + // WARNING: always use `groupCreateScreen.enterGroupID` when creating a group. Auto-generated group ids will + // sometimes have leading numbers, making them invalid html IDs + submitNewGroup() { + return this.click("@groupCreateButton").waitForElementNotPresent("@groupCreateButton"); }, -} +}; const groupCreateElements = { groupIDInput: {selector: '#new-group-id'}, diff --git a/integration/nightwatch/pageObjects/groupDetailScreen.js b/integration/nightwatch/pageObjects/groupDetailScreen.js index cee0989..4b2311c 100644 --- a/integration/nightwatch/pageObjects/groupDetailScreen.js +++ b/integration/nightwatch/pageObjects/groupDetailScreen.js @@ -3,79 +3,79 @@ */ const groupDetailActions = { - assertGroupID(id){ - this.expect.element('@groupIDText').text.to.equal(`ID: ${id}`); + assertGroupID(id) { + this.expect.element("@groupIDText").text.to.equal(`ID: ${id}`); return this; }, - assertGroupName(groupName){ - this.expect.element('@groupNameText').text.to.equal(groupName); + assertGroupName(groupName) { + this.expect.element("@groupNameText").value.to.equal(groupName); return this; }, - backToGroupList(){ - return this.click('@backToGroupListButton'); + backToGroupList() { + return this.click("@backToGroupListButton"); }, - assertGroupMemberSize(length){ - this.api.elements(this.client.locateStrategy, this.elements.groupMemberListItem.selector, (elements) => { + assertGroupMemberSize(length) { + browser.elements(this.client.locateStrategy, this.elements.groupMemberListItem.selector, (elements) => { this.assert.equal(elements.value.length, length, `Expected member count of "${length}", found "${elements.value.length}"`); }); return this; }, - assertGroupAdminSize(length){ - this.api.elements(this.client.locateStrategy, this.elements.groupAdminListItem.selector, (elements) => { + assertGroupAdminSize(length) { + browser.elements(this.client.locateStrategy, this.elements.groupAdminListItem.selector, (elements) => { this.assert.equal(elements.value.length, length, `Expected admin count of "${length}", found "${elements.value.length}"`); }); return this; }, - addNewAdminID(id){ - return this.setValue('@groupAdminInput', id); + addNewAdminID(id) { + return this.setValue("@groupAdminInput", id); }, - submitNewAdmin(){ + submitNewAdmin() { this.api.elementIdClick(this.elements.groupAdminInput.selector, () => { - this.api.keys(this.api.Keys.ENTER); - this.waitForElementPresent('@groupAdminInput'); + browser.sendKeys(this.elements.groupAdminInput.selector, browser.Keys.ENTER); + this.waitForElementPresent("@groupAdminInput"); }); return this; }, - addNewMemberID(id){ - return this.setValue('@groupMemberInput', id); + addNewMemberID(id) { + return this.setValue("@groupMemberInput", id); }, - submitNewMember(){ + submitNewMember() { this.api.elementIdClick(this.elements.groupMemberInput.selector, () => { - this.api.keys(this.api.Keys.ENTER); - this.waitForElementPresent('@groupMemberInput'); + browser.sendKeys(this.elements.groupMemberInput.selector, browser.Keys.ENTER); + this.waitForElementPresent("@groupMemberInput"); }); return this; }, - removeMemberAtPosition(position){ - this.api.elements(this.client.locateStrategy, this.elements.groupRemoveMemberButton.selector, (elements) => { - this.api.elementIdClick(elements.value[position].ELEMENT); - }) + removeMemberAtPosition(position) { + browser.elements(this.client.locateStrategy, this.elements.groupRemoveMemberButton.selector, (elements) => { + this.api.elementIdClick(Object.values(elements.value[position])[0]); + }); return this; }, - removeAdminAtPosition(position){ - this.api.elements(this.client.locateStrategy, this.elements.groupRemoveAdminButton.selector, (elements) => { - this.api.elementIdClick(elements.value[position].ELEMENT); + removeAdminAtPosition(position) { + browser.elements(this.client.locateStrategy, this.elements.groupRemoveAdminButton.selector, (elements) => { + this.api.elementIdClick(Object.values(elements.value[position])[0]); }); return this; }, - getGroupID(callback){ - return this.getText('@groupIDText', (result) => { - callback(result.value); + getGroupID(callback) { + return this.getText("@groupIDText", (result) => { + callback(result.value.split(" ")[1]); }); }, -} +}; const groupDetailElements = { - groupNameText: {selector: '.group-name'}, - groupIDText: {selector: '.group-id'}, - backToGroupListButton: {selector: '.back-to-group-list'}, - groupMemberListItem: {selector: '.group-member-user'}, - groupAdminListItem: {selector: '.group-admin-user'}, - groupMemberInput: {selector: '#newMemberInput'}, - groupAdminInput: {selector: '#newAdminInput'}, - groupRemoveAdminButton: {selector: '.group-remove-admin'}, - groupRemoveMemberButton: {selector: '.group-remove-member'}, - groupIDText: {selector: '.group-id'}, + groupNameText: {selector: "#groupName"}, + groupIDText: {selector: ".group-id"}, + backToGroupListButton: {selector: ".back-to-group-list"}, + groupMemberListItem: {selector: ".group-member-user"}, + groupAdminListItem: {selector: ".group-admin-user"}, + groupMemberInput: {selector: "#newMemberInput"}, + groupAdminInput: {selector: "#newAdminInput"}, + groupRemoveAdminButton: {selector: ".group-remove-admin"}, + groupRemoveMemberButton: {selector: ".group-remove-member"}, + groupIDText: {selector: ".group-id"}, }; module.exports = { diff --git a/integration/nightwatch/pageObjects/groupListScreen.js b/integration/nightwatch/pageObjects/groupListScreen.js index b2f68c9..8e4f6e9 100644 --- a/integration/nightwatch/pageObjects/groupListScreen.js +++ b/integration/nightwatch/pageObjects/groupListScreen.js @@ -1,51 +1,61 @@ const groupListActions = { - expectGroupRoleChipAtPosition(position, chipSelector, shouldExist = true){ - this.api.elements(this.client.locateStrategy, this.elements.groupItems.selector, (elements) => { - this.api.elementIdElement(elements.value[position].ELEMENT, this.client.locateStrategy, chipSelector, (chipElement) => { - if(shouldExist){ - this.assert.equal(chipElement.status, 0, chipElement.status === -1 ? chipElement.value.message : "Found expected role chip"); - } - else{ - this.assert.equal(chipElement.status, -1, chipElement.status === 0 ? chipElement.value.message : "Found unexpected role chip"); + expectGroupRoleChipAtPosition(position, chipSelector, shouldExist = true) { + browser.elements(this.client.locateStrategy, this.elements.groupItems.selector, (elements) => { + browser.elementIdElement(Object.values(elements.value[position])[0], this.client.locateStrategy, chipSelector, (chipElement) => { + if (shouldExist) { + if (Array.isArray(chipElement.value)) { + this.assert.equal(true, false, "Expected role chip not found"); + } else if (typeof chipElement.value === "object") { + this.assert.equal(true, true, "Found expected role chip"); + } + } else { + if (Array.isArray(chipElement.value)) { + this.assert.equal(true, true, "Role chip not found as expected"); + } else if (typeof chipElement.value === "object") { + this.assert.equal(true, false, "Found unexpected role chip"); + } } }); }); return this; }, - switchToGroupUITab(){ - return this.click('@groupTabButton'); + switchToGroupUITab() { + return this.click("@groupTabButton"); }, - clickAddNewGroup(){ - return this.click('@createNewGroupButton'); + clickAddNewGroup() { + return this.click("@createNewGroupButton"); }, - expectCountOfGroups(length){ - this.api.elements(this.client.locateStrategy, this.elements.groupItems.selector, (elements) => { + expectCountOfGroups(length) { + browser.elements(this.client.locateStrategy, this.elements.groupItems.selector, (elements) => { this.assert.equal(elements.value.length, length, `Expected group count of "${length}, found "${elements.value.length}"`); }); return this; }, - expectGroupNameAtPosition(position, name){ - this.api.elements(this.client.locateStrategy, this.elements.groupItems.selector, (elements) => { - this.api.elementIdText(elements.value[position].ELEMENT, (elementText) => { + expectGroupNameAtPosition(position, name) { + browser.elements(this.client.locateStrategy, this.elements.groupItems.selector, (elements) => { + this.api.elementIdText(Object.values(elements.value[position])[0], (elementText) => { this.assert.equal(elementText.value.includes(name), true, `Expected roughly group name "${name}", found "${elementText.value}"`); }); }); return this; }, - expectGroupAdminChipAtPosition(position){ + expectGroupAdminChipAtPosition(position) { return this.expectGroupRoleChipAtPosition(position, this.elements.adminChip.selector); }, - expectGroupMemberChipAtPosition(position){ + expectGroupMemberChipAtPosition(position) { return this.expectGroupRoleChipAtPosition(position, this.elements.memberChip.selector); }, - expectNoGroupMemberChipAtPosition(position){ + expectNoGroupMemberChipAtPosition(position) { return this.expectGroupRoleChipAtPosition(position, this.elements.memberChip.selector, false); }, - clickOnNthGroup(item){ - this.api.elements(this.client.locateStrategy, this.elements.groupItems.selector, (elements) => { - this.api.elementIdClick(elements.value[item].ELEMENT); + clickOnNthGroup(item) { + browser.elements(this.client.locateStrategy, this.elements.groupItems.selector, (elements) => { + this.api.elementIdClick(Object.values(elements.value[item])[0]); }); }, + refreshList() { + return this.click("@refreshGroupListButton"); + }, }; const groupListElements = { diff --git a/integration/nightwatch/pageObjects/initializeScreen.js b/integration/nightwatch/pageObjects/initializeScreen.js index 0117360..8bbad60 100644 --- a/integration/nightwatch/pageObjects/initializeScreen.js +++ b/integration/nightwatch/pageObjects/initializeScreen.js @@ -2,30 +2,35 @@ * Actions for app startup initialize section */ const initializeActions = { - clickInitializeAppButton(){ - return this.click('@initializeButton').waitForElementVisible('@enterPasscodeInput'); + clickInitializeAppButton() { + browser + .click(this.client.locateStrategy, this.elements.initializeButton.selector) + .waitForElementVisible(this.client.locateStrategy, this.elements.enterPasscodeInput.selector); + return this; }, - enterUserPasscode(passcode){ - return this.setValue('@enterPasscodeInput', passcode); + enterUserPasscode(passcode) { + browser.setValue(this.client.locateStrategy, this.elements.enterPasscodeInput.selector, passcode); + return this; }, - submitPasscode(){ - return this.click('@submitPasscode'); + submitPasscode() { + browser.click(this.client.locateStrategy, this.elements.submitPasscode.selector); + return this; }, - initializeAndSyncUser(passcode){ - const userPasscode = passcode || 'nightwatch'; - return this.waitForElementPresent('@initializeButton') - .clickInitializeAppButton() + initializeAndSyncUser(passcode) { + const userPasscode = passcode || "nightwatch"; + browser.waitForElementPresent(this.client.locateStrategy, this.elements.initializeButton.selector); + this.clickInitializeAppButton() .enterUserPasscode(userPasscode) .submitPasscode() - .waitForElementNotPresent('@submitPasscode'); - + .waitForElementNotPresent(this.client.locateStrategy, this.elements.submitPasscode.selector); + return this; }, }; const initializeElements = { - initializeButton: {selector: '.initialize-api-start'}, - enterPasscodeInput: {selector: '#api-passcode'}, - submitPasscode: {selector: '.set-passcode'}, + initializeButton: {selector: ".initialize-api-start"}, + enterPasscodeInput: {selector: "#api-passcode-initialize"}, + submitPasscode: {selector: ".set-passcode"}, }; module.exports = { diff --git a/integration/nightwatch/tests/document/document-create-hosted.test.js b/integration/nightwatch/tests/document/document-create-hosted.test.js index 9f88727..7e7ca88 100644 --- a/integration/nightwatch/tests/document/document-create-hosted.test.js +++ b/integration/nightwatch/tests/document/document-create-hosted.test.js @@ -1,29 +1,26 @@ module.exports = { - '@tags': ['hostedDocCreate'], - beforeEach(browser){ + "@tags": ["hostedDocCreate"], + beforeEach(browser) { browser.url(browser.launchUrl); const {initializeUser} = browser.page.demoApp().section; initializeUser.initializeAndSyncUser(); }, - 'Can add new hosted todo list name and takes user to detail page when finished'(browser){ + "Can add new hosted todo list name and takes user to detail page when finished"(browser) { const demoApp = browser.page.demoApp(); const {documentList, documentCreate, documentView} = demoApp.section; documentList.clickAddNewDocument(); - const docName = 'hosted nightwatch document'; - const todoItem = 'do integration testing'; + const docName = "hosted nightwatch document"; + const todoItem = "do integration testing"; - documentCreate - .setTodoListName(docName) - .setTodoListItem(todoItem) - .submitDocument(); + documentCreate.setTodoListName(docName).setTodoListItem(todoItem).submitDocument(); demoApp.assertOnHostedDocumentViewPage(); documentView - .waitForElementVisible('@documentViewDetails') + .waitForElementVisible("@documentViewDetails") .assertDocumentName(docName) .assertHasTodoItemAtIndex(todoItem) .assertUserVisibleToSize(1) @@ -32,26 +29,22 @@ module.exports = { browser.end(); }, - 'Can add hosted todo list with own provided ID'(browser){ + "Can add hosted todo list with own provided ID"(browser) { const demoApp = browser.page.demoApp(); const {documentList, documentCreate, documentView} = demoApp.section; documentList.clickAddNewDocument(); - const docID = 'myID-' + Date.now(); - const docName = 'hosted nightwatch document'; - const todoItem = 'do integration testing'; + const docID = "myID-" + Date.now(); + const docName = "hosted nightwatch document"; + const todoItem = "do integration testing"; - documentCreate - .setTodoListID(docID) - .setTodoListName(docName) - .setTodoListItem(todoItem) - .submitDocument(); + documentCreate.setTodoListID(docID).setTodoListName(docName).setTodoListItem(todoItem).submitDocument(); demoApp.assertOnHostedDocumentViewPage(); documentView - .waitForElementVisible('@documentViewDetails') + .waitForElementVisible("@documentViewDetails") .assertDocumentID(docID) .assertDocumentName(docName) .assertHasTodoItemAtIndex(todoItem) @@ -61,37 +54,26 @@ module.exports = { browser.end(); }, - 'Can add hosted todo list and it shows up on document list page'(browser){ + "Can add hosted todo list and it shows up on document list page"(browser) { const demoApp = browser.page.demoApp(); const {documentList, documentCreate, documentView} = demoApp.section; - const docName = 'hostednightwatch document'; + const docName = "hostednightwatch document"; documentList.clickAddNewDocument(); - documentCreate - .setTodoListName(docName) - .submitDocument(); + documentCreate.setTodoListName(docName).submitDocument(); demoApp.assertOnHostedDocumentViewPage(); - documentView - .waitForElementVisible('@documentViewDetails') - .assertDocumentName(docName) - .backToDocumentList(); + documentView.waitForElementVisible("@documentViewDetails").assertDocumentName(docName).backToDocumentList(); demoApp.assertOnDocumentListPage(); - documentList - .expectCountOfTodoLists(1) - .expectTodoListNameAtPosition(0, docName) - .expectTodoListHostedAtPosition(0) - .clickOnNthTodoList(0); + documentList.refreshList().expectCountOfTodoLists(1).expectTodoListNameAtPosition(0, docName).expectTodoListHostedAtPosition(0).clickOnNthTodoList(0); demoApp.assertOnHostedDocumentViewPage(); - documentView - .waitForElementVisible('@documentViewDetails') - .assertDocumentName(docName); + documentView.waitForElementVisible("@documentViewDetails").assertDocumentName(docName); browser.end(); }, diff --git a/integration/nightwatch/tests/document/document-create-local.test.js b/integration/nightwatch/tests/document/document-create-local.test.js index 48b0cea..2f66b27 100644 --- a/integration/nightwatch/tests/document/document-create-local.test.js +++ b/integration/nightwatch/tests/document/document-create-local.test.js @@ -1,30 +1,26 @@ module.exports = { - '@tags': ['localDocCreate'], - beforeEach(browser){ + "@tags": ["localDocCreate"], + beforeEach(browser) { browser.url(browser.launchUrl); const {initializeUser} = browser.page.demoApp().section; initializeUser.initializeAndSyncUser(); }, - 'Can add new local todo list with name and takes user to detail page when finished'(browser){ + "Can add new local todo list with name and takes user to detail page when finished"(browser) { const demoApp = browser.page.demoApp(); const {documentList, documentCreate, documentView} = demoApp.section; - const docName = 'local nightwatch document'; - const todoItem = 'do integration testing'; + const docName = "local nightwatch document"; + const todoItem = "do integration testing"; documentList.clickAddNewDocument(); - documentCreate - .toggleStorage() - .setTodoListName(docName) - .setTodoListItem(todoItem) - .submitDocument(); + documentCreate.toggleStorage().setTodoListName(docName).setTodoListItem(todoItem).submitDocument(); demoApp.assertOnLocalDocumentViewPage(); documentView - .waitForElementVisible('@documentViewDetails') + .waitForElementVisible("@documentViewDetails") .assertDocumentName(docName) .assertHasTodoItemAtIndex(todoItem) .assertUserVisibleToSize(1) @@ -33,27 +29,22 @@ module.exports = { browser.end(); }, - 'Can add local todo list with own provided ID'(browser){ + "Can add local todo list with own provided ID"(browser) { const demoApp = browser.page.demoApp(); const {documentList, documentCreate, documentView} = demoApp.section; - const docID = 'myID-' + Date.now(); - const docName = 'local nightwatch document'; - const todoItem = 'do integration testing'; + const docID = "myID-" + Date.now(); + const docName = "local nightwatch document"; + const todoItem = "do integration testing"; documentList.clickAddNewDocument(); - documentCreate - .toggleStorage() - .setTodoListID(docID) - .setTodoListName(docName) - .setTodoListItem(todoItem) - .submitDocument(); + documentCreate.toggleStorage().setTodoListID(docID).setTodoListName(docName).setTodoListItem(todoItem).submitDocument(); demoApp.assertOnLocalDocumentViewPage(); documentView - .waitForElementVisible('@documentViewDetails') + .waitForElementVisible("@documentViewDetails") .assertDocumentID(docID) .assertDocumentName(docName) .assertHasTodoItemAtIndex(todoItem) @@ -63,38 +54,26 @@ module.exports = { browser.end(); }, - 'Can add local todo list and it shows up on document list page'(browser){ + "Can add local todo list and it shows up on document list page"(browser) { const demoApp = browser.page.demoApp(); const {documentList, documentCreate, documentView} = demoApp.section; - const docName = 'local nightwatch document'; + const docName = "local nightwatch document"; documentList.clickAddNewDocument(); - documentCreate - .toggleStorage() - .setTodoListName(docName) - .submitDocument(); + documentCreate.toggleStorage().setTodoListName(docName).submitDocument(); demoApp.assertOnLocalDocumentViewPage(); - documentView - .waitForElementVisible('@documentViewDetails') - .assertDocumentName(docName) - .backToDocumentList(); + documentView.waitForElementVisible("@documentViewDetails").assertDocumentName(docName).backToDocumentList(); demoApp.assertOnDocumentListPage(); - documentList - .expectCountOfTodoLists(1) - .expectTodoListNameAtPosition(0, docName) - .expectTodoListLocalAtPosition(0) - .clickOnNthTodoList(0); + documentList.expectCountOfTodoLists(1).expectTodoListNameAtPosition(0, docName).expectTodoListLocalAtPosition(0).clickOnNthTodoList(0); demoApp.assertOnLocalDocumentViewPage(); - documentView - .waitForElementVisible('@documentViewDetails') - .assertDocumentName(docName); + documentView.waitForElementVisible("@documentViewDetails").assertDocumentName(docName); browser.end(); }, diff --git a/integration/nightwatch/tests/document/document-create-share.test.js b/integration/nightwatch/tests/document/document-create-share.test.js index b30214c..376696d 100644 --- a/integration/nightwatch/tests/document/document-create-share.test.js +++ b/integration/nightwatch/tests/document/document-create-share.test.js @@ -1,11 +1,11 @@ module.exports = { - beforeEach(browser){ + beforeEach(browser) { browser.url(browser.launchUrl); const {initializeUser} = browser.page.demoApp().section; initializeUser.initializeAndSyncUser(); }, - 'Can share a document with another user at creation time'(browser){ + "Can share a document with another user at creation time"(browser) { const demoApp = browser.page.demoApp(); const {documentList, documentCreate, documentView, commandBar, initializeUser} = demoApp.section; @@ -19,55 +19,39 @@ module.exports = { documentList.clickAddNewDocument(); - documentCreate - .setTodoListName(`Grant access to ${firstUserID}`) - .enterUserIDToGrantAccess(firstUserID) - .submitDocument(); + documentCreate.setTodoListName(`Grant access to ${firstUserID}`).enterUserIDToGrantAccess(firstUserID).submitDocument(); demoApp.assertOnHostedDocumentViewPage(); - documentView - .waitForElementVisible('@documentViewDetails') - .assertUserVisibleToSize(2) - .assertUserVisibleIDAtPosition(1, firstUserID); + documentView.waitForElementVisible("@documentViewDetails").assertUserVisibleToSize(2).assertUserVisibleIDAtPosition(0, firstUserID); browser.end(); }); }, - 'Can share a document with a group at creation time'(browser){ + "Can share a document with a group at creation time"(browser) { const demoApp = browser.page.demoApp(); const {documentList, documentCreate, documentView, groupList, groupCreate, groupDetail} = demoApp.section; demoApp.switchToGroubTabUI(); - groupList.clickAddNewGroup() + groupList.clickAddNewGroup(); demoApp.assertOnGroupCreatePage(); - groupCreate - .enterGroupName('share with group on create') - .submitNewGroup(); + groupCreate.enterGroupName("share with group on create").enterGroupID(`share-with-group-on-create-${Date.now()}`).submitNewGroup(); demoApp.assertOnGroupDetailPage(); groupDetail.getGroupID((groupID) => { - demoApp.switchToDocumentTabUI(); documentList.clickAddNewDocument(); - documentCreate - .setTodoListName(`Grant access to group ${groupID}`) - .clickOnGroupGrantAccessCheckbox(groupID) - .submitDocument(); + documentCreate.setTodoListName(`Grant access to group ${groupID}`).clickOnGroupGrantAccessCheckbox(groupID).submitDocument(); demoApp.assertOnHostedDocumentViewPage(); - documentView - .waitForElementVisible('@documentViewDetails') - .assertUserVisibleToSize(1) - .assertGroupVisibleToSize(1) - .clickRevokeAccessButton(); + documentView.waitForElementVisible("@documentViewDetails").assertUserVisibleToSize(1).assertGroupVisibleToSize(1).clickRevokeAccessButton(); browser.pause(350); diff --git a/integration/nightwatch/tests/document/document-update.test.js b/integration/nightwatch/tests/document/document-update.test.js index 94aa15a..4389567 100644 --- a/integration/nightwatch/tests/document/document-update.test.js +++ b/integration/nightwatch/tests/document/document-update.test.js @@ -1,54 +1,43 @@ module.exports = { - beforeEach(browser){ + beforeEach(browser) { browser.url(browser.launchUrl); const {initializeUser} = browser.page.demoApp().section; initializeUser.initializeAndSyncUser(); }, - 'Can update existing document name'(browser){ + "Can update existing document name"(browser) { const demoApp = browser.page.demoApp(); const {documentList, documentCreate, documentView} = demoApp.section; documentList.clickAddNewDocument(); - const originalDocName = 'hosted nightwatch document'; - const updatedDocName = 'updated name only'; + const originalDocName = "hosted nightwatch document"; + const updatedDocName = "updated name only"; - documentCreate - .setTodoListName(originalDocName) - .submitDocument(); + documentCreate.setTodoListName(originalDocName).submitDocument(); demoApp.assertOnHostedDocumentViewPage(); - documentView - .waitForElementVisible('@documentViewDetails') - .assertDocumentName(originalDocName) - .changeDocumentName(updatedDocName) - .backToDocumentList(); + documentView.waitForElementVisible("@documentViewDetails").assertDocumentName(originalDocName).changeDocumentName(updatedDocName).backToDocumentList(); demoApp.assertOnDocumentListPage(); - documentList - .expectCountOfTodoLists(1) - .expectTodoListNameAtPosition(0, updatedDocName) + documentList.refreshList().expectCountOfTodoLists(1).expectTodoListNameAtPosition(0, updatedDocName); browser.end(); }, - 'Can add new todo items to existing documents'(browser){ + "Can add new todo items to existing documents"(browser) { const demoApp = browser.page.demoApp(); const {documentList, documentCreate, documentView} = demoApp.section; documentList.clickAddNewDocument(); - const docName = 'hosted nightwatch document'; - const firstTodoItem = 'do integration testing'; - const secondTodoItem = 'list update item'; + const docName = "hosted nightwatch document"; + const firstTodoItem = "do integration testing"; + const secondTodoItem = "list update item"; - documentCreate - .setTodoListName(docName) - .setTodoListItem(firstTodoItem) - .submitDocument(); + documentCreate.setTodoListName(docName).setTodoListItem(firstTodoItem).submitDocument(); demoApp.assertOnHostedDocumentViewPage(); @@ -57,12 +46,12 @@ module.exports = { * item and make sure it gets added as we expect */ documentView - .waitForElementVisible('@documentViewDetails') + .waitForElementVisible("@documentViewDetails") .assertDocumentName(docName) .assertHasTodoItemAtIndex(firstTodoItem) .addNewTodoText(secondTodoItem) .submitNewTodo() - .assertHasTodoItemAtIndex(secondTodoItem, 1) + .assertHasTodoItemAtIndex(secondTodoItem, 1); browser.end(); }, diff --git a/integration/nightwatch/tests/document/group-access-modifications.test.js b/integration/nightwatch/tests/document/group-access-modifications.test.js index e4cfde6..5d69f75 100644 --- a/integration/nightwatch/tests/document/group-access-modifications.test.js +++ b/integration/nightwatch/tests/document/group-access-modifications.test.js @@ -1,45 +1,41 @@ module.exports = { - '@tags': ['focus'], - beforeEach(browser){ + "@tags": ["focus"], + beforeEach(browser) { browser.url(browser.launchUrl); const {initializeUser} = browser.page.demoApp().section; initializeUser.initializeAndSyncUser(); }, - 'Can grant and revoke a document with a group given its ID'(browser){ + "Can grant and revoke a document with a group given its ID"(browser) { const demoApp = browser.page.demoApp(); const {documentList, documentCreate, documentView, groupList, groupCreate, groupDetail} = demoApp.section; demoApp.switchToGroubTabUI(); - groupList.clickAddNewGroup() + groupList.clickAddNewGroup(); demoApp.assertOnGroupCreatePage(); - groupCreate - .enterGroupName('share with group') - .submitNewGroup(); + groupCreate.enterGroupName("share with group").enterGroupID(`share-with-group--${Date.now()}`).submitNewGroup(); demoApp.assertOnGroupDetailPage(); groupDetail.getGroupID((groupID) => { - demoApp.switchToDocumentTabUI(); documentList.clickAddNewDocument(); - documentCreate - .setTodoListName(`Grant access to group ${groupID}`) - .submitDocument(); + documentCreate.setTodoListName(`Grant access to group ${groupID}`).submitDocument(); demoApp.assertOnHostedDocumentViewPage(); documentView - .waitForElementVisible('@documentViewDetails') + .waitForElementVisible("@documentViewDetails") .assertUserVisibleToSize(1) .assertGroupVisibleToSize(0) .clickOnGroupGrantAccessCheckbox(groupID) .clickGrantAccessButton() .assertUserVisibleToSize(1) + .clickGroupList() .assertGroupVisibleToSize(1) .clickRevokeAccessButton(); diff --git a/integration/nightwatch/tests/document/user-access-modifications.test.js b/integration/nightwatch/tests/document/user-access-modifications.test.js index 664f088..19b0adb 100644 --- a/integration/nightwatch/tests/document/user-access-modifications.test.js +++ b/integration/nightwatch/tests/document/user-access-modifications.test.js @@ -1,11 +1,11 @@ module.exports = { - beforeEach(browser){ + beforeEach(browser) { browser.url(browser.launchUrl); const {initializeUser} = browser.page.demoApp().section; initializeUser.initializeAndSyncUser(); }, - 'Can share a document with another user given their ID'(browser){ + "Can share a document with another user given their ID"(browser) { const demoApp = browser.page.demoApp(); const {documentList, documentCreate, documentView, commandBar, initializeUser} = demoApp.section; @@ -19,14 +19,12 @@ module.exports = { documentList.clickAddNewDocument(); - documentCreate - .setTodoListName(`Grant access to ${firstUserID}`) - .submitDocument(); + documentCreate.setTodoListName(`Grant access to ${firstUserID}`).submitDocument(); demoApp.assertOnHostedDocumentViewPage(); documentView - .waitForElementVisible('@documentViewDetails') + .waitForElementVisible("@documentViewDetails") .enterUserIDToGrantAccess(firstUserID) .clickGrantAccessButton() .assertUserVisibleToSize(2) @@ -36,7 +34,7 @@ module.exports = { }); }, - 'Can remove share from user as document author'(browser){ + "Can remove share from user as document author"(browser) { const demoApp = browser.page.demoApp(); const {documentList, documentCreate, documentView, commandBar, initializeUser} = demoApp.section; @@ -50,18 +48,16 @@ module.exports = { documentList.clickAddNewDocument(); - documentCreate - .setTodoListName(`Grant access to ${firstUserID}`) - .submitDocument(); + documentCreate.setTodoListName(`Grant access to ${firstUserID}`).submitDocument(); demoApp.assertOnHostedDocumentViewPage(); documentView - .waitForElementVisible('@documentViewDetails') + .waitForElementVisible("@documentViewDetails") .enterUserIDToGrantAccess(firstUserID) .clickGrantAccessButton() .assertUserVisibleToSize(2) - .clickRevokeAccessButton() + .clickRevokeAccessButton(); //Wait for the removal to complete browser.pause(350); diff --git a/integration/nightwatch/tests/groups/group-create.test.js b/integration/nightwatch/tests/groups/group-create.test.js index e6ec179..1151ad2 100644 --- a/integration/nightwatch/tests/groups/group-create.test.js +++ b/integration/nightwatch/tests/groups/group-create.test.js @@ -1,6 +1,6 @@ module.exports = { - '@tags': ['groupCreate'], - beforeEach(browser){ + "@tags": ["groupCreate"], + beforeEach(browser) { browser.url(browser.launchUrl); const demoApp = browser.page.demoApp(); const {initializeUser} = demoApp.section; @@ -8,26 +8,21 @@ module.exports = { demoApp.switchToGroubTabUI(); }, - 'Can add new group with user as a member and member and admin role show up as expected'(browser){ + "Can add new group with user as a member and member and admin role show up as expected"(browser) { const demoApp = browser.page.demoApp(); const {groupList, groupCreate, groupDetail} = demoApp.section; const groupName = "nightwatch group"; + const groupID = "nightwatch-group" + Date.now(); - groupList.clickAddNewGroup() + groupList.clickAddNewGroup(); demoApp.assertOnGroupCreatePage(); - groupCreate - .enterGroupName(groupName) - .submitNewGroup(); + groupCreate.enterGroupName(groupName).enterGroupID(groupID).submitNewGroup(); demoApp.assertOnGroupDetailPage(); - groupDetail - .assertGroupName(groupName) - .assertGroupMemberSize(1) - .assertGroupAdminSize(1) - .backToGroupList() + groupDetail.assertGroupName(groupName).assertGroupMemberSize(1).assertGroupAdminSize(1).backToGroupList(); demoApp.assertOnGroupListPage(); @@ -43,57 +38,45 @@ module.exports = { browser.end(); }, - 'Can add new group with own provided ID'(browser){ + "Can add new group with own provided ID"(browser) { const demoApp = browser.page.demoApp(); const {groupList, groupCreate, groupDetail} = demoApp.section; - const groupID = 'myGroup-' + Date.now(); + const groupID = "myGroup-" + Date.now(); const groupName = "nightwatch group"; - groupList.clickAddNewGroup() + groupList.clickAddNewGroup(); demoApp.assertOnGroupCreatePage(); - groupCreate - .enterGroupID(groupID) - .enterGroupName(groupName) - .submitNewGroup(); + groupCreate.enterGroupID(groupID).enterGroupName(groupName).submitNewGroup(); demoApp.assertOnGroupDetailPage(); - groupDetail - .assertGroupID(groupID) - .assertGroupName(groupName) - .assertGroupMemberSize(1) - .assertGroupAdminSize(1); + groupDetail.assertGroupID(groupID).assertGroupName(groupName).assertGroupMemberSize(1).assertGroupAdminSize(1); browser.end(); }, - 'Can add new group with name not as a member and user does not exist in member list'(browser){ + "Can add new group with name not as a member and user does not exist in member list"(browser) { const demoApp = browser.page.demoApp(); const {groupList, groupCreate, groupDetail} = demoApp.section; const groupName = "nightwatch group"; + const groupId = "nightwatch-group" + Date.now(); - groupList.clickAddNewGroup() + groupList.clickAddNewGroup(); demoApp.assertOnGroupCreatePage(); - groupCreate - .enterGroupName(groupName) - .toggleAddAsMember() - .submitNewGroup(); + groupCreate.enterGroupName(groupName).enterGroupID(groupId).toggleAddAsMember().submitNewGroup(); demoApp.assertOnGroupDetailPage(); - groupDetail - .assertGroupName(groupName) - .assertGroupMemberSize(0) - .assertGroupAdminSize(1) - .backToGroupList(); + groupDetail.assertGroupName(groupName).assertGroupMemberSize(0).assertGroupAdminSize(1).backToGroupList(); demoApp.assertOnGroupListPage(); groupList + .refreshList() .expectCountOfGroups(1) .expectGroupNameAtPosition(0, groupName) .expectGroupAdminChipAtPosition(0) diff --git a/integration/nightwatch/tests/groups/group-membership.test.js b/integration/nightwatch/tests/groups/group-membership.test.js index 1749324..2dcc983 100644 --- a/integration/nightwatch/tests/groups/group-membership.test.js +++ b/integration/nightwatch/tests/groups/group-membership.test.js @@ -1,6 +1,6 @@ module.exports = { - tags: ['this'], - beforeEach(browser){ + tags: ["this"], + beforeEach(browser) { browser.url(browser.launchUrl); const demoApp = browser.page.demoApp(); const {initializeUser} = demoApp.section; @@ -8,25 +8,21 @@ module.exports = { demoApp.switchToGroubTabUI(); }, - 'User can remove themselves from a group member'(browser){ + "User can remove themselves from a group member"(browser) { const demoApp = browser.page.demoApp(); const {groupList, groupCreate, groupDetail} = demoApp.section; const groupName = "nightwatch group"; + const groupID = "nightwatch-group" + Date.now(); - groupList.clickAddNewGroup() + groupList.clickAddNewGroup(); demoApp.assertOnGroupCreatePage(); - groupCreate - .enterGroupName(groupName) - .submitNewGroup(); + groupCreate.enterGroupName(groupName).enterGroupID(groupID).submitNewGroup(); demoApp.assertOnGroupDetailPage(); - groupDetail - .assertGroupName(groupName) - .assertGroupMemberSize(1) - .removeMemberAtPosition(0); + groupDetail.assertGroupName(groupName).assertGroupMemberSize(1).removeMemberAtPosition(0); //Wait for remove operation to complete before continuing browser.pause(350); @@ -36,7 +32,7 @@ module.exports = { browser.end(); }, - 'Admin can add another admin to the group'(browser){ + "Admin can add another admin to the group"(browser) { const demoApp = browser.page.demoApp(); const {groupList, groupCreate, groupDetail, commandBar, initializeUser} = demoApp.section; @@ -51,27 +47,21 @@ module.exports = { demoApp.switchToGroubTabUI(); const groupName = "nightwatch group"; - groupList.clickAddNewGroup() + const groupID = "nightwatch-group" + Date.now(); + groupList.clickAddNewGroup(); demoApp.assertOnGroupCreatePage(); - groupCreate - .enterGroupName(groupName) - .submitNewGroup(); + groupCreate.enterGroupName(groupName).enterGroupID(groupID).submitNewGroup(); demoApp.assertOnGroupDetailPage(); - groupDetail - .assertGroupName(groupName) - .assertGroupMemberSize(1) - .addNewAdminID(firstUserID) - .submitNewAdmin() - .assertGroupAdminSize(2); + groupDetail.assertGroupName(groupName).assertGroupMemberSize(1).addNewAdminID(firstUserID).submitNewAdmin().assertGroupAdminSize(2); browser.end(); }); }, - 'Admin can remove admins from the group'(browser){ + "Admin can remove admins from the group"(browser) { const demoApp = browser.page.demoApp(); const {groupList, groupCreate, groupDetail, commandBar, initializeUser} = demoApp.section; @@ -86,12 +76,11 @@ module.exports = { demoApp.switchToGroubTabUI(); const groupName = "nightwatch group"; - groupList.clickAddNewGroup() + const groupID = "nightwatch-group" + Date.now(); + groupList.clickAddNewGroup(); demoApp.assertOnGroupCreatePage(); - groupCreate - .enterGroupName(groupName) - .submitNewGroup(); + groupCreate.enterGroupName(groupName).enterGroupID(groupID).submitNewGroup(); demoApp.assertOnGroupDetailPage(); @@ -111,7 +100,7 @@ module.exports = { }); }, - 'Admin can add another member to the group'(browser){ + "Admin can add another member to the group"(browser) { const demoApp = browser.page.demoApp(); const {groupList, groupCreate, groupDetail, commandBar, initializeUser} = demoApp.section; @@ -126,27 +115,21 @@ module.exports = { demoApp.switchToGroubTabUI(); const groupName = "nightwatch group"; - groupList.clickAddNewGroup() + const groupID = "nightwatch-group" + Date.now(); + groupList.clickAddNewGroup(); demoApp.assertOnGroupCreatePage(); - groupCreate - .enterGroupName(groupName) - .submitNewGroup(); + groupCreate.enterGroupName(groupName).enterGroupID(groupID).submitNewGroup(); demoApp.assertOnGroupDetailPage(); - groupDetail - .assertGroupName(groupName) - .assertGroupMemberSize(1) - .addNewMemberID(firstUserID) - .submitNewMember() - .assertGroupMemberSize(2); + groupDetail.assertGroupName(groupName).assertGroupMemberSize(1).addNewMemberID(firstUserID).submitNewMember().assertGroupMemberSize(2); browser.end(); }); }, - 'Group admin can remove other users from the group'(browser){ + "Group admin can remove other users from the group"(browser) { const demoApp = browser.page.demoApp(); const {groupList, groupCreate, groupDetail, commandBar, initializeUser} = demoApp.section; @@ -161,12 +144,11 @@ module.exports = { demoApp.switchToGroubTabUI(); const groupName = "nightwatch group"; - groupList.clickAddNewGroup() + const groupID = "nightwatch-group" + Date.now(); + groupList.clickAddNewGroup(); demoApp.assertOnGroupCreatePage(); - groupCreate - .enterGroupName(groupName) - .submitNewGroup(); + groupCreate.enterGroupName(groupName).enterGroupID(groupID).submitNewGroup(); demoApp.assertOnGroupDetailPage(); @@ -176,7 +158,7 @@ module.exports = { .addNewMemberID(firstUserID) .submitNewMember() .assertGroupMemberSize(2) - .removeMemberAtPosition(1) + .removeMemberAtPosition(1); //Wait for remove operation to complete before continuing browser.pause(350); diff --git a/integration/nightwatch/tests/user-sync/userCreate.test.js b/integration/nightwatch/tests/user-sync/userCreate.test.js index 295467c..b650293 100644 --- a/integration/nightwatch/tests/user-sync/userCreate.test.js +++ b/integration/nightwatch/tests/user-sync/userCreate.test.js @@ -1,10 +1,10 @@ module.exports = { - '@tags': ['userCreate'], - beforeEach(browser){ + "@tags": ["userCreate"], + beforeEach(browser) { browser.url(browser.launchUrl); }, - 'User Create'(browser){ + "User Create"(browser) { const demoApp = browser.page.demoApp(); const {initializeUser, documentList} = demoApp.section; @@ -12,7 +12,7 @@ module.exports = { //We should hit the document list page after init, but not have any documents listed demoApp.assertOnDocumentListPage(); - documentList.expect.element('@listItems').to.not.be.present; + documentList.expect.element("@listItems").to.not.be.present; browser.end(); }, diff --git a/integration/nightwatch/tests/user-sync/userDeviceAdd.test.js b/integration/nightwatch/tests/user-sync/userDeviceAdd.test.js index 69b4214..b23bb0f 100644 --- a/integration/nightwatch/tests/user-sync/userDeviceAdd.test.js +++ b/integration/nightwatch/tests/user-sync/userDeviceAdd.test.js @@ -1,10 +1,10 @@ module.exports = { - '@tags': ['userDeviceAdd'], - beforeEach(browser){ + "@tags": ["userDeviceAdd"], + beforeEach(browser) { browser.url(browser.launchUrl); }, - 'User device add works when passcode is correct'(browser){ + "User device add works when passcode is correct"(browser) { const demoApp = browser.page.demoApp(); const {commandBar, initializeUser, documentList} = demoApp.section; @@ -20,19 +20,17 @@ module.exports = { browser.end(); }, - 'User device add fails when passcode entered is incorrect'(browser){ + "User device add fails when passcode entered is incorrect"(browser) { const demoApp = browser.page.demoApp(); const {commandBar, initializeUser, documentList} = demoApp.section; - initializeUser.initializeAndSyncUser('passcode1'); + initializeUser.initializeAndSyncUser("passcode1"); commandBar.clearSymmetricKey(); - initializeUser.clickInitializeAppButton() - .enterUserPasscode('passcode2') - .submitPasscode(); + initializeUser.clickInitializeAppButton().enterUserPasscode("passcode2").submitPasscode(); - initializeUser.expect.element('@submitPasscode').to.have.value.that.equals(null); + initializeUser.expect.element("@submitPasscode").to.not.have.value; browser.end(); }, diff --git a/integration/nightwatch/tests/user-sync/userPasscodeChange.test.js b/integration/nightwatch/tests/user-sync/userPasscodeChange.test.js index f82f575..826c9f7 100644 --- a/integration/nightwatch/tests/user-sync/userPasscodeChange.test.js +++ b/integration/nightwatch/tests/user-sync/userPasscodeChange.test.js @@ -1,10 +1,10 @@ module.exports = { - '@tags': ['userPasscodeChange'], - beforeEach(browser){ + "@tags": ["userPasscodeChange"], + beforeEach(browser) { browser.url(browser.launchUrl); }, - 'User can change passcode if they enter old one correctly'(browser){ + "User can change passcode if they enter old one correctly"(browser) { const demoApp = browser.page.demoApp(); const {commandBar, initializeUser} = demoApp.section; @@ -15,10 +15,7 @@ module.exports = { commandBar.clickChangePasscodeButton(); - demoApp - .enterPasscodeFields(firstPasscode, secondPasscode) - .submitChangePasscode() - .waitForElementNotPresent('@passwordChangeDialog'); + demoApp.enterPasscodeFields(firstPasscode, secondPasscode).submitChangePasscode().waitForElementNotPresent("@passwordChangeDialog"); commandBar.clearSymmetricKey(); @@ -29,7 +26,7 @@ module.exports = { browser.end(); }, - 'User passcode enter fails when using users old passcode'(browser){ + "User passcode enter fails when using users old passcode"(browser) { const demoApp = browser.page.demoApp(); const {commandBar, initializeUser} = demoApp.section; @@ -40,23 +37,18 @@ module.exports = { commandBar.clickChangePasscodeButton(); - demoApp - .enterPasscodeFields(firstPasscode, secondPasscode) - .submitChangePasscode() - .waitForElementNotPresent('@passwordChangeDialog'); + demoApp.enterPasscodeFields(firstPasscode, secondPasscode).submitChangePasscode().waitForElementNotPresent("@passwordChangeDialog"); commandBar.clearSymmetricKey(); - initializeUser.clickInitializeAppButton() - .enterUserPasscode(firstPasscode) - .submitPasscode(); + initializeUser.clickInitializeAppButton().enterUserPasscode(firstPasscode).submitPasscode(); - initializeUser.expect.element('@submitPasscode').to.have.value.that.equals(null); + initializeUser.expect.element("@submitPasscode").to.not.have.value; browser.end(); }, - 'User passcode change fails when previous passcode is incorrect'(browser){ + "User passcode change fails when previous passcode is incorrect"(browser) { const demoApp = browser.page.demoApp(); const {commandBar, initializeUser} = demoApp.section; @@ -70,9 +62,9 @@ module.exports = { demoApp .enterPasscodeFields(secondPasscode, secondPasscode) .submitChangePasscode() - .waitForElementPresent('@currentPasscodeInput') - .expect.element('@currentPasscodeInput').to.have.value.that.equals(""); + .waitForElementPresent("@currentPasscodeInput") + .expect.element("@currentPasscodeInput").to.not.have.value; browser.end(); - } + }, }; \ No newline at end of file diff --git a/jest.config.js b/jest.config.js index 75d4e83..3570b8c 100644 --- a/jest.config.js +++ b/jest.config.js @@ -21,7 +21,7 @@ module.exports = { ignoreCodes: [151001], }, //This can be removed once https://github.com/kulshekhar/ts-jest/issues/1471 is released, probably in ts-jest 25.3.0 - tsConfig: { + tsconfig: { outDir: "$$ts-jest$$", }, }, @@ -29,4 +29,5 @@ module.exports = { testPathIgnorePatterns: ["/node_modules/", "/nightwatch/", "/protobuf/"], coveragePathIgnorePatterns: ["EncryptedDeks.js"], setupFilesAfterEnv: ["./src/tests/jestSetup.ts"], + testEnvironment: "jsdom", }; diff --git a/nightwatch.json b/nightwatch.json index 91aa9cf..30d7e91 100644 --- a/nightwatch.json +++ b/nightwatch.json @@ -16,11 +16,12 @@ "selenium_host": "localhost", "default_path_prefix" : "", "desiredCapabilities": { - "browserName": "chrome", - "chromeOptions" : { - "args" : ["--no-sandbox"] - }, - "acceptSslCerts": true + "browserName": "chrome", + "comment": "'window-size=1920,1080', 'headless', 'disable-dev-shm-usage'", + "chromeOptions": { + "args": ["no-sandbox", "window-size=1920,1080", "headless", "disable-dev-shm-usage"] + }, + "acceptSslCerts": true } }, diff --git a/package.json b/package.json index e1a950f..e1f217f 100644 --- a/package.json +++ b/package.json @@ -14,16 +14,13 @@ "integrate": "yarn start", "nightwatch": "nightwatch" }, - "resolutions": { - "**/ua-parser-js": "0.7.28" - }, "dependencies": { "@ironcorelabs/recrypt-wasm-binding": "0.6.0", - "@stablelib/ed25519": "1.0.1", - "@stablelib/utf8": "1.0.0", - "base64-js": "1.3.1", - "fast-text-encoding": "1.0.1", - "futurejs": "2.1.1", + "@stablelib/ed25519": "1.0.2", + "@stablelib/utf8": "1.0.1", + "base64-js": "1.5.1", + "fast-text-encoding": "1.0.4", + "futurejs": "2.2.0", "sjcl": "1.0.8" }, "peerDependencies": { @@ -33,36 +30,37 @@ }, "devDependencies": { "@types/base64-js": "^1.2.5", - "@types/jest": "^25.1.4", + "@types/jest": "^28.1.6", "@types/material-ui": "^0.21.7", - "@types/react": "^17.0.0", - "@types/react-dom": "^17.0.0", + "@types/react": "^18.0.0", + "@types/react-dom": "^18.0.0", "@types/react-tap-event-plugin": "^0.0.30", "@types/sjcl": "^1.0.28", "@types/webpack-env": "^1.16.0", - "@typescript-eslint/eslint-plugin": "^2.25.0", - "@typescript-eslint/parser": "^2.25.0", + "@typescript-eslint/eslint-plugin": "^5.33.0", + "@typescript-eslint/parser": "^5.33.0", "animal-id": "^0.0.1", - "awesome-typescript-loader": "^5.2.1", + "chromedriver": "^104.0.0", "cookie-parser": "^1.4.4", - "eslint": "^6.8.0", + "eslint": "^8.21.0", "eslint-plugin-react": "^7.19.0", "express": "^4.17.1", - "jest": "^25.2.4", - "jest-extended": "^0.11.5", + "jest": "^28.1.3", + "jest-environment-jsdom": "^28.1.3", + "jest-extended": "^3.0.2", "jsonwebtoken": "^8.5.1", "material-ui": "^0.20.2", - "nightwatch": "^1.0.19", - "protobufjs": "^6.11.3", - "react": "^16.8.6", - "react-dom": "^16.8.6", + "nightwatch": "^2.3.0", + "protobufjs": "^7.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", "shelljs": "^0.8.5", - "ts-jest": "^25.3.0", - "typescript": "3.8.3", - "typestrict": "^1.0.0", + "ts-jest": "^28.0.0", + "ts-loader": "^9.3.1", + "typescript": "4.7.4", "webpack": "^5.38.1", "webpack-cli": "^4.7.0", - "webpack-dev-server": "^3.11.2", + "webpack-dev-server": "^4.10.0", "worker-loader": "^3.0.8" }, "prettier": { @@ -73,4 +71,4 @@ "jsxBracketSameLine": true, "arrowParens": "always" } -} \ No newline at end of file +} diff --git a/src/Constants.ts b/src/Constants.ts index 9842349..4c83934 100644 --- a/src/Constants.ts +++ b/src/Constants.ts @@ -19,7 +19,7 @@ export const CryptoConstants = { IV_LENGTH: 12, SALT_LENGTH: 32, AES_SYMMETRIC_KEY_LENGTH: 32, - PBKDF2_ITERATIONS: () => 250000, //Set this as a function so that we can mock it during unit tests + PBKDF2_ITERATIONS: 250000, NATIVE_DECRYPT_FAILURE_ERROR: "OperationError", }; diff --git a/src/frame/ApiState.ts b/src/frame/ApiState.ts index f7c354b..9d42f70 100644 --- a/src/frame/ApiState.ts +++ b/src/frame/ApiState.ts @@ -27,13 +27,14 @@ class SdkUser { * Clear all fields from our internal state. Occurs when we're logging out the current user. */ clearCurrentUser() { - delete this.apiUser; - delete this.publicUserKey; - delete this.encryptedPrivateUserKey; - delete this.publicDeviceKey; - delete this.privateDeviceKey; - delete this.publicSigningKey; - delete this.privateSigningKey; + const replacement = new SdkUser(); + this.apiUser = replacement.apiUser; + this.publicUserKey = replacement.publicUserKey; + this.encryptedPrivateUserKey = replacement.encryptedPrivateUserKey; + this.publicDeviceKey = replacement.publicDeviceKey; + this.privateDeviceKey = replacement.privateDeviceKey; + this.publicSigningKey = replacement.publicSigningKey; + this.privateSigningKey = replacement.privateSigningKey; } /** diff --git a/src/frame/FrameUtils.ts b/src/frame/FrameUtils.ts index d0661af..f825644 100644 --- a/src/frame/FrameUtils.ts +++ b/src/frame/FrameUtils.ts @@ -76,7 +76,7 @@ export function getDeviceAndSigningKeys( encryptedSigningKey: toByteArray(keys.signingKey), nonce: toByteArray(keys.nonce), }); - } catch (e) { + } catch (e: any) { clearDeviceAndSigningKeys(userID, segmentID); return Future.reject(e); } diff --git a/src/frame/endpoints/tests/DocumentApiEndpoints.test.ts b/src/frame/endpoints/tests/DocumentApiEndpoints.test.ts index 2cdee10..1d1fdd6 100644 --- a/src/frame/endpoints/tests/DocumentApiEndpoints.test.ts +++ b/src/frame/endpoints/tests/DocumentApiEndpoints.test.ts @@ -7,8 +7,8 @@ import DocumentApiEndpoints from "../DocumentApiEndpoints"; describe("DocumentApiEndpoints", () => { beforeEach(() => { - spyOn(ApiRequest, "makeAuthorizedApiRequest").and.returnValue( - Future.of({ + jest.spyOn(ApiRequest, "makeAuthorizedApiRequest").mockReturnValue( + Future.of({ foo: "bar", }) ); @@ -19,7 +19,9 @@ describe("DocumentApiEndpoints", () => { describe("callDocumentListApi", () => { it("requests document list endpoint and maps response to data result", () => { DocumentApiEndpoints.callDocumentListApi().engage( - () => fail("Doc list should not reject"), + () => { + throw new Error("Doc list should not reject"); + }, (documents: any) => { expect(documents).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("documents", expect.any(Number), expect.any(Object)); @@ -41,12 +43,14 @@ describe("DocumentApiEndpoints", () => { ]; DocumentApiEndpoints.callDocumentCreateApi("docID", encryptedDocumentToBase64("docID", 353, document), userKeyList, [], "doc name").engage( - () => fail("Doc create should not reject"), + () => { + throw new Error("Doc create should not reject"); + }, (documentResult: any) => { expect(documentResult).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("documents", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ id: "docID", value: { @@ -100,12 +104,14 @@ describe("DocumentApiEndpoints", () => { ]; DocumentApiEndpoints.callDocumentCreateApi("", null, userKeyList, groupKeyList).engage( - () => fail("Doc create should not reject"), + () => { + throw new Error("Doc create should not reject"); + }, (document: any) => { expect(document).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("documents", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ value: { fromUserId: "user-10", @@ -141,12 +147,14 @@ describe("DocumentApiEndpoints", () => { ]; DocumentApiEndpoints.callDocumentCreateApi("docKey", null, userKeyList, []).engage( - () => fail("Doc create should not reject"), + () => { + throw new Error("Doc create should not reject"); + }, (document: any) => { expect(document).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("documents", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ id: "docKey", value: { @@ -171,7 +179,9 @@ describe("DocumentApiEndpoints", () => { describe("callDocumentGetApi", () => { it("gets document from api and maps result", () => { DocumentApiEndpoints.callDocumentGetApi("docKey").engage( - () => fail("doc get API should not reject"), + () => { + throw new Error("doc get API should not reject"); + }, (document: any) => { expect(document).toEqual({foo: "bar"}); @@ -188,7 +198,9 @@ describe("DocumentApiEndpoints", () => { describe("callDocumentMetadataGetApi", () => { it("gets metadata for document and maps result", () => { DocumentApiEndpoints.callDocumentMetadataGetApi("docID").engage( - () => fail("doc meta get API should not reject"), + () => { + throw new Error("doc meta get API should not reject"); + }, (document: any) => { expect(document).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("documents/docID", expect.any(Number), expect.any(Object)); @@ -202,12 +214,14 @@ describe("DocumentApiEndpoints", () => { const document = TestUtils.getEncryptedDocument(); DocumentApiEndpoints.callDocumentUpdateApi("docKey", encryptedDocumentToBase64("docID", 353, document)).engage( - () => fail("Doc update should not reject"), + () => { + throw new Error("Doc update should not reject"); + }, (documentResult: any) => { expect(documentResult).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("documents/docKey", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ data: { content: "AgAdeyJfZGlkXyI6ImRvY0lEIiwiX3NpZF8iOjM1M31ub25jZWJhc2U=", @@ -219,11 +233,13 @@ describe("DocumentApiEndpoints", () => { it("includes document name and omits data if not provided", () => { DocumentApiEndpoints.callDocumentUpdateApi("docKey", undefined, "new name").engage( - () => fail("Doc update should not reject"), + () => { + throw new Error("Doc update should not reject"); + }, () => { expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("documents/docKey", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ name: "new name", }); @@ -233,11 +249,13 @@ describe("DocumentApiEndpoints", () => { it("sets name to null if passed in as such", () => { DocumentApiEndpoints.callDocumentUpdateApi("docKey", undefined, null).engage( - () => fail("Doc update should not reject"), + () => { + throw new Error("Doc update should not reject"); + }, () => { expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("documents/docKey", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ name: null, }); @@ -292,12 +310,14 @@ describe("DocumentApiEndpoints", () => { it("calls grant API and returns mapped API response", () => { DocumentApiEndpoints.callDocumentGrantApi("docID", userKeys, groupKeys).engage( - () => fail("Doc grant should not reject"), + () => { + throw new Error("Doc grant should not reject"); + }, (document: any) => { expect(document).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("documents/docID/access", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ fromPublicKey: {x: TestUtils.userPublicXString, y: TestUtils.userPublicYString}, to: [ @@ -345,65 +365,69 @@ describe("DocumentApiEndpoints", () => { it("responds with proper key list when no users", () => { DocumentApiEndpoints.callDocumentGrantApi("docID", [], groupKeys).engage( - () => fail("Doc grant should not reject"), () => { - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; - expect(JSON.parse(request.body)).toEqual({ - fromPublicKey: {x: TestUtils.userPublicXString, y: TestUtils.userPublicYString}, - to: [ - { - encryptedMessage: "AAAA", - publicSigningKey: "AA==", - authHash: "AA==", - signature: "A===", - ephemeralPublicKey: {x: "AAAAAAA=", y: "AAAAA=="}, - userOrGroup: { - type: "group", - id: "355", - masterPublicKey: {x: "grouppublickeyx", y: "grouppublickeyy"}, + throw new Error("Doc grant should not reject"); + }, + () => { + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; + expect(JSON.parse(request.body)).toEqual({ + fromPublicKey: {x: TestUtils.userPublicXString, y: TestUtils.userPublicYString}, + to: [ + { + encryptedMessage: "AAAA", + publicSigningKey: "AA==", + authHash: "AA==", + signature: "A===", + ephemeralPublicKey: {x: "AAAAAAA=", y: "AAAAA=="}, + userOrGroup: { + type: "group", + id: "355", + masterPublicKey: {x: "grouppublickeyx", y: "grouppublickeyy"}, + }, }, - }, - ], - }); - } + ], + }); + } ); }); it("responds with proper key list when no groups", () => { DocumentApiEndpoints.callDocumentGrantApi("docID", userKeys, []).engage( - () => fail("Doc grant should not reject"), () => { - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; - expect(JSON.parse(request.body)).toEqual({ - fromPublicKey: {x: TestUtils.userPublicXString, y: TestUtils.userPublicYString}, - to: [ - { - encryptedMessage: "AAA=", - publicSigningKey: "AAAA", - authHash: "AA==", - signature: "A===", - ephemeralPublicKey: {x: "", y: "AA=="}, - userOrGroup: { - type: "user", - id: "37", - masterPublicKey: {x: "firstpublickeyx", y: "firstpublickeyy"}, + throw new Error("Doc grant should not reject"); + }, + () => { + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; + expect(JSON.parse(request.body)).toEqual({ + fromPublicKey: {x: TestUtils.userPublicXString, y: TestUtils.userPublicYString}, + to: [ + { + encryptedMessage: "AAA=", + publicSigningKey: "AAAA", + authHash: "AA==", + signature: "A===", + ephemeralPublicKey: {x: "", y: "AA=="}, + userOrGroup: { + type: "user", + id: "37", + masterPublicKey: {x: "firstpublickeyx", y: "firstpublickeyy"}, + }, }, - }, - { - encryptedMessage: "AA==", - publicSigningKey: "AA==", - authHash: "AA==", - signature: "A===", - ephemeralPublicKey: {x: "AAAAAA==", y: "AAAA"}, - userOrGroup: { - type: "user", - id: "99", - masterPublicKey: {x: "secondpublickey", y: "secondpublickeyy"}, + { + encryptedMessage: "AA==", + publicSigningKey: "AA==", + authHash: "AA==", + signature: "A===", + ephemeralPublicKey: {x: "AAAAAA==", y: "AAAA"}, + userOrGroup: { + type: "user", + id: "99", + masterPublicKey: {x: "secondpublickey", y: "secondpublickeyy"}, + }, }, - }, - ], - }); - } + ], + }); + } ); }); }); @@ -411,14 +435,20 @@ describe("DocumentApiEndpoints", () => { describe("callDocumentRevokeApi", () => { it("calls document revoke endpoint with both user and group list", () => { DocumentApiEndpoints.callDocumentRevokeApi("docID", ["user-1", "user-2"], ["group-1"]).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (revokeResult: any) => { expect(revokeResult).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("documents/docID/access", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ - userOrGroups: [{id: "user-1", type: "user"}, {id: "user-2", type: "user"}, {id: "group-1", type: "group"}], + userOrGroups: [ + {id: "user-1", type: "user"}, + {id: "user-2", type: "user"}, + {id: "group-1", type: "group"}, + ], }); } ); @@ -426,12 +456,14 @@ describe("DocumentApiEndpoints", () => { it("builds list without users if none are provided", () => { DocumentApiEndpoints.callDocumentRevokeApi("docID", [], ["group-1"]).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (revokeResult: any) => { expect(revokeResult).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("documents/docID/access", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ userOrGroups: [{id: "group-1", type: "group"}], }); @@ -441,12 +473,14 @@ describe("DocumentApiEndpoints", () => { it("builds list without users if none are provided", () => { DocumentApiEndpoints.callDocumentRevokeApi("docID?=10", ["user-1"], []).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (revokeResult: any) => { expect(revokeResult).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("documents/docID%3F%3D10/access", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ userOrGroups: [{id: "user-1", type: "user"}], }); diff --git a/src/frame/endpoints/tests/EncryptedDekEndpoints.test.ts b/src/frame/endpoints/tests/EncryptedDekEndpoints.test.ts index 3a4611e..cf3582b 100644 --- a/src/frame/endpoints/tests/EncryptedDekEndpoints.test.ts +++ b/src/frame/endpoints/tests/EncryptedDekEndpoints.test.ts @@ -6,8 +6,8 @@ import EncryptedDekEndpoints from "../EncryptedDekEndpoints"; describe("EncryptedDekEndpoints", () => { beforeEach(() => { - spyOn(ApiRequest, "makeAuthorizedApiRequest").and.returnValue( - Future.of({ + jest.spyOn(ApiRequest, "makeAuthorizedApiRequest").mockReturnValue( + Future.of({ foo: "bar", }) ); @@ -20,12 +20,14 @@ describe("EncryptedDekEndpoints", () => { const edeks = new Uint8Array([100, 200, 300]); EncryptedDekEndpoints.callEncryptedDekTransformApi(edeks).engage( - () => fail("edeks/transform should not reject"), + () => { + throw new Error("edeks/transform should not reject"); + }, (response: any) => { expect(response).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("edeks/transform", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(request.body).toEqual(edeks); } ); diff --git a/src/frame/endpoints/tests/GroupApiEndpoints.test.ts b/src/frame/endpoints/tests/GroupApiEndpoints.test.ts index 85e9032..bd56197 100644 --- a/src/frame/endpoints/tests/GroupApiEndpoints.test.ts +++ b/src/frame/endpoints/tests/GroupApiEndpoints.test.ts @@ -5,10 +5,10 @@ import ApiState from "../../ApiState"; import GroupApiEndpoints from "../GroupApiEndpoints"; describe("GroupApiEndpoints", () => { - var apiSpy: jasmine.Spy; + var apiSpy: jest.SpyInstance; beforeEach(() => { - apiSpy = spyOn(ApiRequest, "makeAuthorizedApiRequest").and.returnValue( - Future.of({ + apiSpy = jest.spyOn(ApiRequest, "makeAuthorizedApiRequest").mockReturnValue( + Future.of({ foo: "bar", }) ); @@ -19,7 +19,7 @@ describe("GroupApiEndpoints", () => { describe("callGroupListApi", () => { it("requests group list endpoint and maps response to data result", () => { GroupApiEndpoints.callGroupListApi().engage( - (e) => fail(e), + (e) => {throw e}, (groups: any) => { expect(groups).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("groups", expect.any(Number), expect.any(Object)); @@ -40,9 +40,9 @@ describe("GroupApiEndpoints", () => { {id: id2, groupMasterPublicKey: key2}, ], }; - apiSpy.and.returnValue(Future.of(apiResp)); + apiSpy.mockReturnValue(Future.of(apiResp)); GroupApiEndpoints.callGroupKeyListApi([id1, id2]).engage( - (e) => fail(e), + (e) => {throw e}, (groups: any) => { expect(groups).toEqual(apiResp); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("groups?id=group-10%2Cgroup-20", expect.any(Number), expect.any(Object)); @@ -61,9 +61,9 @@ describe("GroupApiEndpoints", () => { {id: id2, groupMasterPublicKey: key2}, ], }; - apiSpy.and.returnValue(Future.of(apiResp)); + apiSpy.mockReturnValue(Future.of(apiResp)); GroupApiEndpoints.callGroupKeyListApi([id1, id2]).engage( - (e) => fail(e), + (e) => {throw e}, (groups: any) => { expect(groups).toEqual(apiResp); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith( @@ -77,7 +77,7 @@ describe("GroupApiEndpoints", () => { it("returns empty array if no group IDs provided", () => { GroupApiEndpoints.callGroupKeyListApi([]).engage( - (e) => fail(e), + (e) => {throw e}, (groups) => { expect(groups).toEqual({result: []}); expect(ApiRequest.makeAuthorizedApiRequest).not.toHaveBeenCalled(); @@ -100,9 +100,9 @@ describe("GroupApiEndpoints", () => { }; // clear the module cache for this test for (var member in GroupApiEndpoints.groupPublicKeyCache) delete GroupApiEndpoints.groupPublicKeyCache[member]; - apiSpy.and.returnValue(Future.of(apiResp)); + apiSpy.mockReturnValue(Future.of(apiResp)); GroupApiEndpoints.getGroupPublicKeyList([id1, id2]).engage( - (e) => fail(e), + (e) => {throw e}, (groups: any) => { expect(groups).toEqual(apiResp.result); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("groups?id=group-10%2Cgroup-20", expect.any(Number), expect.any(Object)); @@ -110,7 +110,7 @@ describe("GroupApiEndpoints", () => { } ); GroupApiEndpoints.getGroupPublicKeyList([id1, id2]).engage( - (e) => fail(e), + (e) => {throw e}, (groups: any) => { expect(groups).toEqual(apiResp.result); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledTimes(1); @@ -131,9 +131,9 @@ describe("GroupApiEndpoints", () => { }; // clear the module cache for this test for (var member in GroupApiEndpoints.groupPublicKeyCache) delete GroupApiEndpoints.groupPublicKeyCache[member]; - apiSpy.and.returnValue(Future.of(apiResp)); + apiSpy.mockReturnValue(Future.of(apiResp)); GroupApiEndpoints.getGroupPublicKeyList([id1, id2]).engage( - (e) => fail(e), + (e) => {throw e}, (groups: any) => { expect(groups).toEqual(apiResp.result); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("groups?id=group-10%2Cgroup-20", expect.any(Number), expect.any(Object)); @@ -156,9 +156,9 @@ describe("GroupApiEndpoints", () => { }; // clear the module cache for this test for (var member in GroupApiEndpoints.groupPublicKeyCache) delete GroupApiEndpoints.groupPublicKeyCache[member]; - apiSpy.and.returnValue(Future.of(apiResp)); + apiSpy.mockReturnValue(Future.of(apiResp)); GroupApiEndpoints.getGroupPublicKeyList([id1, id2]).engage( - (e) => fail(e), + (e) => {throw e}, (groups: any) => { expect(groups).toEqual(apiResp.result); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("groups?id=group-10%2Cgroup-20", expect.any(Number), expect.any(Object)); @@ -166,7 +166,7 @@ describe("GroupApiEndpoints", () => { } ); GroupApiEndpoints.getGroupPublicKeyList([id1, "group-30"]).engage( - (e) => fail(e), + (e) => {throw e}, (_) => { expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("groups?id=group-10%2Cgroup-30", expect.any(Number), expect.any(Object)); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledTimes(2); @@ -178,7 +178,7 @@ describe("GroupApiEndpoints", () => { describe("callGroupGetApi", () => { it("requests group get with specific ID and maps response to data result", () => { GroupApiEndpoints.callGroupGetApi("87").engage( - (e) => fail(e), + (e) => {throw e}, (group: any) => { expect(group).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("groups/87", expect.any(Number), expect.any(Object)); @@ -207,11 +207,13 @@ describe("GroupApiEndpoints", () => { ]; GroupApiEndpoints.callGroupCreateApi("35", groupPublicKey, encryptedAccessKeys, false, transformKeyGrantList, "ownerUserId", "group name").engage( - (e) => fail(e), + (e) => { + throw e; + }, (group: any) => { expect(group).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("groups", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ id: "35", name: "group name", @@ -293,11 +295,13 @@ describe("GroupApiEndpoints", () => { ]; GroupApiEndpoints.callGroupCreateApi("", groupPublicKey, encryptedAccessKeys, false, [transformKeyGrant], "ownerUserId", "").engage( - (e) => fail(e), + (e) => { + throw e; + }, (group: any) => { expect(group).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("groups", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ groupPublicKey: { @@ -347,11 +351,13 @@ describe("GroupApiEndpoints", () => { ]; GroupApiEndpoints.callGroupCreateApi("", groupPublicKey, encryptedAccessKeys, false, [], "ownerUserId", "group name").engage( - (e) => fail(e), + (e) => { + throw e; + }, (group: any) => { expect(group).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("groups", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ name: "group name", @@ -388,11 +394,13 @@ describe("GroupApiEndpoints", () => { ]; GroupApiEndpoints.callGroupCreateApi("", groupPublicKey, encryptedAccessKeys, false, [], "", "group name").engage( - (e) => fail(e), + (e) => { + throw e; + }, (group: any) => { expect(group).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("groups", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ name: "group name", @@ -431,11 +439,13 @@ describe("GroupApiEndpoints", () => { ]; const augmentationFactor = new Uint8Array([98, 103, 110]); GroupApiEndpoints.callGroupPrivateKeyUpdateApi("groupID", encryptedAccessKeys, augmentationFactor, 5).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (result: any) => { expect(result).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("groups/groupID/keys/5", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ augmentationFactor: "Ymdu", admins: [ @@ -459,11 +469,13 @@ describe("GroupApiEndpoints", () => { describe("callGroupUpdateApi", () => { it("invokes API with update parameters when new value provided", () => { GroupApiEndpoints.callGroupUpdateApi("23", "new name").engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (result: any) => { expect(result).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("groups/23", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ name: "new name", }); @@ -473,11 +485,13 @@ describe("GroupApiEndpoints", () => { it("invokes API with null to clear group name", () => { GroupApiEndpoints.callGroupUpdateApi("&32", null).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (result: any) => { expect(result).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("groups/%2632", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ name: null, @@ -505,11 +519,13 @@ describe("GroupApiEndpoints", () => { ]; GroupApiEndpoints.callAddAdminsApi("22", userKeys, signature).engage( - (e) => fail(e), + (e) => { + throw e; + }, (addResult: any) => { expect(addResult).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("groups/22/admins", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ admins: [ @@ -540,11 +556,13 @@ describe("GroupApiEndpoints", () => { const userIDs = ["31", "89", "76", "33"]; GroupApiEndpoints.callRemoveAdminsApi("22", userIDs).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (removeResult: any) => { expect(removeResult).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("groups/22/admins", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ users: [{userId: "31"}, {userId: "89"}, {userId: "76"}, {userId: "33"}], @@ -571,11 +589,13 @@ describe("GroupApiEndpoints", () => { const signature = new Uint8Array([98, 103, 110]); GroupApiEndpoints.callAddMembersApi("31", userKeys, signature).engage( - (e) => fail(e), + (e) => { + throw e; + }, (addResult: any) => { expect(addResult).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("groups/31/users", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ users: [ @@ -613,11 +633,13 @@ describe("GroupApiEndpoints", () => { describe("callRemoveMembersApi", () => { it("passes in list of IDs to API", () => { GroupApiEndpoints.callRemoveMembersApi("31", ["3513", "36236"]).engage( - (e) => fail(e), + (e) => { + throw e; + }, (removeResult: any) => { expect(removeResult).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("groups/31/users", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ users: [{userId: "3513"}, {userId: "36236"}], @@ -630,11 +652,13 @@ describe("GroupApiEndpoints", () => { describe("callGroupDeleteApi", () => { it("requests expected endpoint", () => { GroupApiEndpoints.callGroupDeleteApi("31&32").engage( - (e) => fail(e), + (e) => { + throw e; + }, (deleteResult: any) => { expect(deleteResult).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("groups/31%2632", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(request.body).toBeUndefined(); } ); diff --git a/src/frame/endpoints/tests/PolicyApiEndpoints.test.ts b/src/frame/endpoints/tests/PolicyApiEndpoints.test.ts index 0257c72..6df0511 100644 --- a/src/frame/endpoints/tests/PolicyApiEndpoints.test.ts +++ b/src/frame/endpoints/tests/PolicyApiEndpoints.test.ts @@ -6,8 +6,8 @@ import PolicyApiEndpoints from "../PolicyApiEndpoints"; describe("PolicyApiEndpoint", () => { beforeEach(() => { - spyOn(ApiRequest, "makeAuthorizedApiRequest").and.returnValue( - Future.of({ + jest.spyOn(ApiRequest, "makeAuthorizedApiRequest").mockReturnValue( + Future.of({ foo: "bar", }) ); @@ -23,7 +23,9 @@ describe("PolicyApiEndpoint", () => { dataSubject: "Tommy&Fing B", substituteUser: "CZECH REPUB", }).engage( - (e) => fail(e), + (e) => { + throw e; + }, (result) => { expect(result).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith( @@ -41,7 +43,9 @@ describe("PolicyApiEndpoint", () => { category: "catty&batty", dataSubject: null, } as any).engage( - (e) => fail(e), + (e) => { + throw e; + }, (result) => { expect(result).toEqual({foo: "bar"}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith( diff --git a/src/frame/endpoints/tests/UserApiEndpoints.test.ts b/src/frame/endpoints/tests/UserApiEndpoints.test.ts index 82d6455..b0021d2 100644 --- a/src/frame/endpoints/tests/UserApiEndpoints.test.ts +++ b/src/frame/endpoints/tests/UserApiEndpoints.test.ts @@ -6,18 +6,18 @@ import UserApiEndpoints from "../UserApiEndpoints"; describe("UserApiEndpoints", () => { beforeEach(() => { - spyOn(ApiRequest, "makeAuthorizedApiRequest"); - spyOn(ApiRequest, "makeJwtApiRequest"); + jest.spyOn(ApiRequest, "makeAuthorizedApiRequest"); + jest.spyOn(ApiRequest, "makeJwtApiRequest"); }); describe("callUserVerifyApi", () => { - let mapSpy: jasmine.Spy; + let mapSpy: jest.SpyInstance; beforeEach(() => { - mapSpy = jasmine.createSpy("fetchJSON Map"); - (ApiRequest.makeJwtApiRequest as jasmine.Spy).and.returnValue({ + mapSpy = jest.fn(); + (ApiRequest.makeJwtApiRequest as unknown as jest.SpyInstance).mockReturnValue({ map: mapSpy, }); - (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).and.returnValue({ + (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mockReturnValue({ map: mapSpy, }); }); @@ -31,7 +31,7 @@ describe("UserApiEndpoints", () => { UserApiEndpoints.callUserVerifyApi("jwtToken"); expect(mapSpy).toHaveBeenCalledWith(expect.any(Function)); - const mapper = mapSpy.calls.argsFor(0)[0]; + const mapper = mapSpy.mock.calls[0][0]; expect(mapper(undefined)).toEqual({ user: undefined, jwt: "jwtToken", @@ -42,7 +42,7 @@ describe("UserApiEndpoints", () => { UserApiEndpoints.callUserVerifyApi("jwtToken"); expect(mapSpy).toHaveBeenCalledWith(expect.any(Function)); - const mapper = mapSpy.calls.argsFor(0)[0]; + const mapper = mapSpy.mock.calls[0][0]; expect(mapper({foo: "bar"})).toEqual({ user: {foo: "bar"}, jwt: "jwtToken", @@ -52,8 +52,8 @@ describe("UserApiEndpoints", () => { describe("callUserCreateApi", () => { it("creates user with keys and returns saved user object", () => { - (ApiRequest.makeJwtApiRequest as jasmine.Spy).and.returnValue( - Future.of({ + (ApiRequest.makeJwtApiRequest as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ id: "user-10", foo: "bar", }) @@ -67,7 +67,9 @@ describe("UserApiEndpoints", () => { }, true ).engage( - (e) => fail(e), + (e) => { + throw e; + }, (user: any) => { expect(user).toEqual({ id: "user-10", @@ -75,7 +77,7 @@ describe("UserApiEndpoints", () => { }); expect(ApiRequest.makeJwtApiRequest).toHaveBeenCalledWith("users", expect.any(Number), expect.any(Object), "jwtToken"); - const request = (ApiRequest.makeJwtApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeJwtApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ userPublicKey: {x: expect.any(String), y: expect.any(String)}, userPrivateKey: "AAAAAAAAAAAAAA==", @@ -88,8 +90,8 @@ describe("UserApiEndpoints", () => { describe("callUserCreateApiWithDevice", () => { it("creates user with full key set and returns saved user object", () => { - (ApiRequest.makeJwtApiRequest as jasmine.Spy).and.returnValue( - Future.of({ + (ApiRequest.makeJwtApiRequest as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ id: "user-10", foo: "bar", }) @@ -104,7 +106,9 @@ describe("UserApiEndpoints", () => { signingKeys: TestUtils.getSigningKeyPair(), transformKey: TestUtils.getTransformKey(), }).engage( - (e) => fail(e), + (e) => { + throw e; + }, (user: any) => { expect(user).toEqual({ id: "user-10", @@ -112,7 +116,7 @@ describe("UserApiEndpoints", () => { }); expect(ApiRequest.makeJwtApiRequest).toHaveBeenCalledWith("users", expect.any(Number), expect.any(Object), "jwtToken"); - const request = (ApiRequest.makeJwtApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeJwtApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ userPublicKey: {x: expect.any(String), y: expect.any(String)}, userPrivateKey: "AAAAAAAAAAAAAA==", @@ -136,8 +140,8 @@ describe("UserApiEndpoints", () => { }); it("creates user with partial key set and returns saved user object", () => { - (ApiRequest.makeJwtApiRequest as jasmine.Spy).and.returnValue( - Future.of({ + (ApiRequest.makeJwtApiRequest as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ id: "user-10", foo: "bar", }) @@ -152,7 +156,9 @@ describe("UserApiEndpoints", () => { signingKeys: TestUtils.getSigningKeyPair(), transformKey: TestUtils.getTransformKey(), }).engage( - (e) => fail(e), + (e) => { + throw e; + }, (user: any) => { expect(user).toEqual({ id: "user-10", @@ -160,7 +166,7 @@ describe("UserApiEndpoints", () => { }); expect(ApiRequest.makeJwtApiRequest).toHaveBeenCalledWith("users", expect.any(Number), expect.any(Object), "jwtToken"); - const request = (ApiRequest.makeJwtApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeJwtApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ userPublicKey: {x: expect.any(String), y: expect.any(String)}, userPrivateKey: "AAAAAAAAAAAAAAAA", @@ -186,8 +192,8 @@ describe("UserApiEndpoints", () => { describe("callUserKeyUpdateApi", () => { it("calls Api with rotated private key and augmentation factor when private key rotation is requested", () => { - (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).and.returnValue( - Future.of({ + (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ id: "user-10", foo: "bar", }) @@ -197,14 +203,16 @@ describe("UserApiEndpoints", () => { ApiState.setDeviceAndSigningKeys(TestUtils.getEmptyKeyPair(), TestUtils.getSigningKeyPair()); UserApiEndpoints.callUserKeyUpdateApi(new Uint8Array([99, 104, 111]), new Uint8Array([98, 103, 110])).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (userKeys: any) => { expect(userKeys).toEqual({ id: "user-10", foo: "bar", }); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("users/user-10/keys/1", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ userPrivateKey: "Y2hv", augmentationFactor: "Ymdu", @@ -216,8 +224,8 @@ describe("UserApiEndpoints", () => { describe("callUserUpdateApi", () => { it("calls API and updates status when requested", () => { - (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).and.returnValue( - Future.of({ + (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ id: "user-10", foo: "bar", }) @@ -227,14 +235,16 @@ describe("UserApiEndpoints", () => { ApiState.setDeviceAndSigningKeys(TestUtils.getEmptyKeyPair(), TestUtils.getSigningKeyPair()); UserApiEndpoints.callUserUpdateApi(undefined, 2).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (userKeys: any) => { expect(userKeys).toEqual({ id: "user-10", foo: "bar", }); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("users/user-10", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ status: 2, }); @@ -243,8 +253,8 @@ describe("UserApiEndpoints", () => { }); it("calls API and updates users escrowed private key when requested", () => { - (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).and.returnValue( - Future.of({ + (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ id: "user-10", foo: "bar", }) @@ -254,10 +264,12 @@ describe("UserApiEndpoints", () => { ApiState.setDeviceAndSigningKeys(TestUtils.getEmptyKeyPair(), TestUtils.getSigningKeyPair()); UserApiEndpoints.callUserUpdateApi(new Uint8Array([98, 103, 110])).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, () => { expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("users/user-special~!%40%23%24", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ userPrivateKey: "Ymdu", }); @@ -266,8 +278,8 @@ describe("UserApiEndpoints", () => { }); it("updates both status and escrowed private key", () => { - (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).and.returnValue( - Future.of({ + (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ id: "user-10", foo: "bar", }) @@ -277,10 +289,12 @@ describe("UserApiEndpoints", () => { ApiState.setDeviceAndSigningKeys(TestUtils.getEmptyKeyPair(), TestUtils.getSigningKeyPair()); UserApiEndpoints.callUserUpdateApi(new Uint8Array([98, 103, 110]), 3).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, () => { expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith("users/user-10", expect.any(Number), expect.any(Object)); - const request = (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ userPrivateKey: "Ymdu", status: 3, @@ -292,8 +306,8 @@ describe("UserApiEndpoints", () => { describe("callUserDeviceAdd", () => { it("calls API and returns data as expected", () => { - (ApiRequest.makeJwtApiRequest as jasmine.Spy).and.returnValue( - Future.of({ + (ApiRequest.makeJwtApiRequest as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ devicePublicKey: {x: "", y: ""}, }) ); @@ -307,14 +321,16 @@ describe("UserApiEndpoints", () => { new Uint8Array([99, 103, 113, 93]), 133353523 ).engage( - (e) => fail(e), + (e) => { + throw e; + }, (userKeys: any) => { expect(userKeys).toEqual({ devicePublicKey: {x: "", y: ""}, }); expect(ApiRequest.makeJwtApiRequest).toHaveBeenCalledWith("users/devices", expect.any(Number), expect.any(Object), "jwt"); - const request = (ApiRequest.makeJwtApiRequest as jasmine.Spy).calls.argsFor(0)[2]; + const request = (ApiRequest.makeJwtApiRequest as unknown as jest.SpyInstance).mock.calls[0][2]; expect(JSON.parse(request.body)).toEqual({ timestamp: 133353523, userPublicKey: {x: expect.any(String), y: expect.any(String)}, @@ -337,12 +353,14 @@ describe("UserApiEndpoints", () => { describe("callUserCurrentDeviceDelete", () => { it("calls API to delete device for current user", () => { - (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).and.returnValue(Future.of({id: 353})); + (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mockReturnValue(Future.of({id: 353})); ApiState.setCurrentUser({...TestUtils.getFullUser(), id: "user-special~!@#$"}); ApiState.setDeviceAndSigningKeys(TestUtils.getEmptyKeyPair(), TestUtils.getSigningKeyPair()); UserApiEndpoints.callUserCurrentDeviceDelete().engage( - (e) => fail(e), + (e) => { + throw e; + }, (deleteResult: any) => { expect(deleteResult).toEqual({id: 353}); expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledWith( @@ -357,8 +375,8 @@ describe("UserApiEndpoints", () => { describe("callUserKeyListApi", () => { it("calls API and returns mapped response data", () => { - (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).and.returnValue( - Future.of({ + (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ result: [ {id: "user-10", userMasterPublicKey: {x: ""}}, {id: "user-20", userMasterPublicKey: {x: ""}}, @@ -369,7 +387,9 @@ describe("UserApiEndpoints", () => { ApiState.setDeviceAndSigningKeys(TestUtils.getEmptyKeyPair(), TestUtils.getSigningKeyPair()); UserApiEndpoints.callUserKeyListApi(["user-10", "user-20"]).engage( - (e) => fail(e), + (e) => { + throw e; + }, (userList: any) => { expect(userList).toEqual({ result: [ @@ -392,7 +412,7 @@ describe("UserApiEndpoints", () => { {id: id2, userMasterPublicKey: {x: ""}}, ], }; - (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).and.returnValue(Future.of(resp)); + (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mockReturnValue(Future.of(resp)); ApiState.setCurrentUser(TestUtils.getFullUser()); ApiState.setDeviceAndSigningKeys(TestUtils.getEmptyKeyPair(), TestUtils.getSigningKeyPair()); @@ -400,7 +420,9 @@ describe("UserApiEndpoints", () => { for (var member in UserApiEndpoints.userPublicKeyCache) delete UserApiEndpoints.userPublicKeyCache[member]; expect(UserApiEndpoints.userPublicKeyCache).toEqual({}); UserApiEndpoints.callUserKeyListApi([id1, id2]).engage( - (e) => fail(e), + (e) => { + throw e; + }, (userList: any) => { expect(userList).toEqual(resp); @@ -422,14 +444,16 @@ describe("UserApiEndpoints", () => { {id: id2, userMasterPublicKey: {x: ""}}, ], }; - (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).and.returnValue(Future.of(resp)); + (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mockReturnValue(Future.of(resp)); ApiState.setCurrentUser(TestUtils.getFullUser()); ApiState.setDeviceAndSigningKeys(TestUtils.getEmptyKeyPair(), TestUtils.getSigningKeyPair()); // clear the module cache for this test for (var member in UserApiEndpoints.userPublicKeyCache) delete UserApiEndpoints.userPublicKeyCache[member]; UserApiEndpoints.callUserKeyListApi([id1, id2]).engage( - (e) => fail(e), + (e) => { + throw e; + }, (userList: any) => { expect(userList).toEqual(resp); @@ -438,7 +462,9 @@ describe("UserApiEndpoints", () => { } ); UserApiEndpoints.callUserKeyListApi([id1, id2]).engage( - (e) => fail(e), + (e) => { + throw e; + }, (userList: any) => { expect(userList).toEqual(resp); @@ -457,14 +483,16 @@ describe("UserApiEndpoints", () => { {id: id2, userMasterPublicKey: {x: ""}}, ], }; - (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).and.returnValue(Future.of(resp)); + (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mockReturnValue(Future.of(resp)); ApiState.setCurrentUser(TestUtils.getFullUser()); ApiState.setDeviceAndSigningKeys(TestUtils.getEmptyKeyPair(), TestUtils.getSigningKeyPair()); // clear the module cache for this test for (var member in UserApiEndpoints.userPublicKeyCache) delete UserApiEndpoints.userPublicKeyCache[member]; UserApiEndpoints.callUserKeyListApi([id1, id2]).engage( - (e) => fail(e), + (e) => { + throw e; + }, (userList: any) => { expect(userList).toEqual(resp); @@ -473,7 +501,9 @@ describe("UserApiEndpoints", () => { } ); UserApiEndpoints.callUserKeyListApi([id1, "user-30"]).engage( - (e) => fail(e), + (e) => { + throw e; + }, (_) => { // make sure it was actually called a second time expect(ApiRequest.makeAuthorizedApiRequest).toHaveBeenCalledTimes(2); @@ -482,8 +512,8 @@ describe("UserApiEndpoints", () => { }); it("escapes all user IDs", () => { - (ApiRequest.makeAuthorizedApiRequest as jasmine.Spy).and.returnValue( - Future.of({ + (ApiRequest.makeAuthorizedApiRequest as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ result: [ {id: "user-10", userMasterPublicKey: {x: ""}}, {id: "user-20", userMasterPublicKey: {x: ""}}, @@ -494,7 +524,9 @@ describe("UserApiEndpoints", () => { ApiState.setDeviceAndSigningKeys(TestUtils.getEmptyKeyPair(), TestUtils.getSigningKeyPair()); UserApiEndpoints.callUserKeyListApi(["~`!@#$%^&*()-_=+[{]};:<.>/?", "user-20"]).engage( - (e) => fail(e), + (e) => { + throw e; + }, (userList: any) => { expect(userList).toEqual({ result: [ @@ -517,7 +549,9 @@ describe("UserApiEndpoints", () => { ApiState.setDeviceAndSigningKeys(TestUtils.getEmptyKeyPair(), TestUtils.getSigningKeyPair()); UserApiEndpoints.callUserKeyListApi([]).engage( - (e) => fail(e), + (e) => { + throw e; + }, (result) => { expect(result).toEqual({result: []}); expect(ApiRequest.makeAuthorizedApiRequest).not.toHaveBeenCalled(); diff --git a/src/frame/initialization/tests/InitializationApi.test.ts b/src/frame/initialization/tests/InitializationApi.test.ts index a680bc4..81a32c1 100644 --- a/src/frame/initialization/tests/InitializationApi.test.ts +++ b/src/frame/initialization/tests/InitializationApi.test.ts @@ -8,10 +8,12 @@ import * as TestUtils from "../../../tests/TestUtils"; describe("InitializationApi", () => { describe("initializeApi", () => { it("invokes API endpoint with expected parameter", (done) => { - spyOn(UserApiEndpoints, "callUserVerifyApi").and.returnValue(Future.of("init result")); + jest.spyOn(UserApiEndpoints, "callUserVerifyApi").mockReturnValue(Future.of("init result")); InitApi.initializeApi("jwtToken").engage( - (e) => fail(e), + (e) => { + throw e; + }, (val: any) => { expect(val).toEqual("init result"); expect(UserApiEndpoints.callUserVerifyApi).toHaveBeenCalledWith("jwtToken"); @@ -25,15 +27,17 @@ describe("InitializationApi", () => { it("requests new JWT and derives key if jwt is callback", (done) => { const userKeys = TestUtils.getEmptyKeyPair(); - spyOn(WorkerMediator, "sendMessage").and.returnValue( - Future.of({ + jest.spyOn(WorkerMediator, "sendMessage").mockReturnValue( + Future.of({ message: userKeys, }) ); - spyOn(UserApiEndpoints, "callUserCreateApi").and.returnValue(Future.of("new user")); + jest.spyOn(UserApiEndpoints, "callUserCreateApi").mockReturnValue(Future.of("new user")); InitApi.createUser("passcode", "jwtToken2", false).engage( - (e) => fail(e), + (e) => { + throw e; + }, (userCreationData: any) => { expect(userCreationData).toEqual("new user"); @@ -59,18 +63,20 @@ describe("InitializationApi", () => { }, }; - spyOn(WorkerMediator, "sendMessage").and.returnValue( - Future.of({ + jest.spyOn(WorkerMediator, "sendMessage").mockReturnValue( + Future.of({ message: { userKeys, encryptedDeviceAndSigningKeys: deviceAndSigning, }, }) ); - spyOn(UserApiEndpoints, "callUserCreateApiWithDevice").and.returnValue(Future.of("new user")); + jest.spyOn(UserApiEndpoints, "callUserCreateApiWithDevice").mockReturnValue(Future.of("new user")); InitApi.createUserAndDevice("passcode", "jwtToken2").engage( - (e) => fail(e), + (e) => { + throw e; + }, (userCreationData: any) => { expect(userCreationData).toEqual({ user: "new user", @@ -106,8 +112,8 @@ describe("InitializationApi", () => { const userPublicKey = TestUtils.getEmptyPublicKey(); const deviceSignature = new Uint8Array(33); - spyOn(WorkerMediator, "sendMessage").and.returnValue( - Future.of({ + jest.spyOn(WorkerMediator, "sendMessage").mockReturnValue( + Future.of({ message: { userKeys, encryptedDeviceAndSigningKeys: deviceAndSigning, @@ -118,8 +124,8 @@ describe("InitializationApi", () => { }, }) ); - spyOn(UserApiEndpoints, "callUserDeviceAdd").and.returnValue( - Future.of({ + jest.spyOn(UserApiEndpoints, "callUserDeviceAdd").mockReturnValue( + Future.of({ id: 1, created: "timestamp", name: "deviceName", @@ -127,7 +133,9 @@ describe("InitializationApi", () => { ); InitApi.generateDeviceAndSigningKeys("jwtToken", "passcode", encryptedUserKey, userPublicKey).engage( - (e) => fail(e), + (e) => { + throw e; + }, (keys: any) => { expect(keys).toEqual({ userUpdateKeys: userKeys, @@ -163,12 +171,14 @@ describe("InitializationApi", () => { const encryptedSigningKey = new Uint8Array(64); const nonce = new Uint8Array(12); - spyOn(FrameUtils, "getDeviceAndSigningKeys").and.returnValue(Future.of({encryptedDeviceKey, encryptedSigningKey, nonce})); + jest.spyOn(FrameUtils, "getDeviceAndSigningKeys").mockReturnValue(Future.of({encryptedDeviceKey, encryptedSigningKey, nonce})); - spyOn(WorkerMediator, "sendMessage").and.returnValue(Future.of({message: "decrypted keys"})); + jest.spyOn(WorkerMediator, "sendMessage").mockReturnValue(Future.of({message: "decrypted keys"})); InitApi.fetchAndValidateLocalKeys("30", 3, "AA==").engage( - (e) => fail(e), + (e) => { + throw e; + }, (response: any) => { expect(response).toEqual("decrypted keys"); expect(WorkerMediator.sendMessage).toHaveBeenCalledWith({ diff --git a/src/frame/initialization/tests/index.test.ts b/src/frame/initialization/tests/index.test.ts index 8f465d8..7d625d2 100644 --- a/src/frame/initialization/tests/index.test.ts +++ b/src/frame/initialization/tests/index.test.ts @@ -19,14 +19,16 @@ describe("init index", () => { describe("initialize", () => { it("sets user on state with verify response when users exists", (done) => { - spyOn(InitializationApi, "initializeApi").and.returnValue( - Future.of({ + jest.spyOn(InitializationApi, "initializeApi").mockReturnValue( + Future.of({ user: TestUtils.getFullUser(), }) ); Init.initialize("jwtToken").engage( - (e) => fail(e), + (e) => { + throw e; + }, (results) => { expect(results).toEqual({ type: "INIT_PASSCODE_REQUIRED", @@ -46,14 +48,16 @@ describe("init index", () => { }); it("does not update user state when user does not exist on verify response", (done) => { - spyOn(InitializationApi, "initializeApi").and.returnValue( - Future.of({ + jest.spyOn(InitializationApi, "initializeApi").mockReturnValue( + Future.of({ user: undefined, }) ); Init.initialize("jwtToken").engage( - (e) => fail(e), + (e) => { + throw e; + }, (results) => { expect(results).toEqual({ type: "INIT_PASSCODE_REQUIRED", @@ -69,16 +73,18 @@ describe("init index", () => { }); it("clears local device keys when no sym key provided and returns passcode response", (done) => { - spyOn(InitializationApi, "initializeApi").and.returnValue( - Future.of({ + jest.spyOn(InitializationApi, "initializeApi").mockReturnValue( + Future.of({ user: TestUtils.getFullUser(), }) ); - spyOn(InitializationApi, "fetchAndValidateLocalKeys"); - spyOn(FrameUtils, "clearDeviceAndSigningKeys"); + jest.spyOn(InitializationApi, "fetchAndValidateLocalKeys"); + jest.spyOn(FrameUtils, "clearDeviceAndSigningKeys"); Init.initialize("jwtToken", undefined).engage( - (e) => fail(e), + (e) => { + throw e; + }, (results) => { expect(results).toEqual({ type: "INIT_PASSCODE_REQUIRED", @@ -88,23 +94,25 @@ describe("init index", () => { }); expect(InitializationApi.fetchAndValidateLocalKeys).not.toHaveBeenCalled(); expect(FrameUtils.clearDeviceAndSigningKeys).toHaveBeenCalledWith("user-10", 1); - expect(ApiState.user()).toBeObject(); + expect(typeof ApiState.user()).toBe("object"); done(); } ); }); it("expects passcode response when local keys cannot be found or validated", (done) => { - spyOn(InitializationApi, "fetchAndValidateLocalKeys").and.returnValue(Future.reject(new Error("failed"))); + jest.spyOn(InitializationApi, "fetchAndValidateLocalKeys").mockReturnValue(Future.reject(new Error("failed"))); - spyOn(InitializationApi, "initializeApi").and.returnValue( - Future.of({ + jest.spyOn(InitializationApi, "initializeApi").mockReturnValue( + Future.of({ user: TestUtils.getFullUser(), }) ); Init.initialize("jwtToken", "symKey").engage( - (e) => fail(e), + (e) => { + throw e; + }, (results) => { expect(results).toEqual({ type: "INIT_PASSCODE_REQUIRED", @@ -112,25 +120,27 @@ describe("init index", () => { doesUserExist: true, }, }); - expect(ApiState.user()).toBeObject(); + expect(typeof ApiState.user()).toBe("object"); done(); } ); }); it("returns with SDK object when device/signing keys are found locally", (done) => { - spyOn(InitializationApi, "initializeApi").and.returnValue( - Future.of({ + jest.spyOn(InitializationApi, "initializeApi").mockReturnValue( + Future.of({ user: TestUtils.getFullUser(), }) ); const deviceKeys = TestUtils.getEmptyKeyPair(); const signingKeys = TestUtils.getSigningKeyPair(); - spyOn(InitializationApi, "fetchAndValidateLocalKeys").and.returnValue(Future.of({deviceKeys, signingKeys})); + jest.spyOn(InitializationApi, "fetchAndValidateLocalKeys").mockReturnValue(Future.of({deviceKeys, signingKeys})); Init.initialize("jwtToken", "symKey").engage( - (e) => fail(e), + (e) => { + throw e; + }, (SDK) => { expect(SDK).toEqual({ type: "FULL_SDK_RESPONSE", @@ -169,12 +179,14 @@ describe("init index", () => { groupsNeedingRotation: [], }; - spyOn(FrameUtils, "storeDeviceAndSigningKeys"); + jest.spyOn(FrameUtils, "storeDeviceAndSigningKeys"); - spyOn(InitializationApi, "createUser").and.returnValue(Future.of(apiResponse)); + jest.spyOn(InitializationApi, "createUser").mockReturnValue(Future.of(apiResponse)); Init.createUser("jwt", "passcode", false).engage( - (e) => fail(e), + (e) => { + throw e; + }, (SDK) => { expect(SDK).toEqual({ type: "CREATE_USER_RESPONSE", @@ -193,10 +205,10 @@ describe("init index", () => { const signingKeys = TestUtils.getSigningKeyPair(); const userKeys = TestUtils.getEmptyKeyPair(); - spyOn(FrameUtils, "storeDeviceAndSigningKeys"); + jest.spyOn(FrameUtils, "storeDeviceAndSigningKeys"); - spyOn(InitializationApi, "createUserAndDevice").and.returnValue( - Future.of({ + jest.spyOn(InitializationApi, "createUserAndDevice").mockReturnValue( + Future.of({ user: TestUtils.getFullUser(), keys: { userKeys: { @@ -217,7 +229,9 @@ describe("init index", () => { ); Init.createUserAndDevice("jwt", "passcode").engage( - (e) => fail(e), + (e) => { + throw e; + }, (SDK) => { expect(SDK).toEqual({ type: "FULL_SDK_RESPONSE", @@ -246,16 +260,16 @@ describe("init index", () => { describe("generateUserNewDeviceKeys", () => { it("decrypts user key and generates new keys", () => { ApiState.setCurrentUser(TestUtils.getFullUser()); - spyOn(InitializationApi, "initializeApi").and.returnValue( - Future.of({ + jest.spyOn(InitializationApi, "initializeApi").mockReturnValue( + Future.of({ user: TestUtils.getFullUser(), }) ); - spyOn(FrameUtils, "storeDeviceAndSigningKeys"); + jest.spyOn(FrameUtils, "storeDeviceAndSigningKeys"); const deviceKeys = TestUtils.getEmptyKeyPair(); const signingKeys = TestUtils.getSigningKeyPair(); - spyOn(InitializationApi, "generateDeviceAndSigningKeys").and.returnValue( - Future.of({ + jest.spyOn(InitializationApi, "generateDeviceAndSigningKeys").mockReturnValue( + Future.of({ encryptedLocalKeys: { encryptedDeviceKey: "edk", encryptedSigningKey: "esk", @@ -265,10 +279,12 @@ describe("init index", () => { userUpdateKeys: {deviceKeys, signingKeys}, }) ); - spyOn(localStorage, "setItem"); + jest.spyOn(localStorage, "setItem"); Init.generateUserNewDeviceKeys("jwtToken", "passcode").engage( - (e) => fail(e), + (e) => { + throw e; + }, (SDK) => { expect(SDK).toEqual({ type: "FULL_SDK_RESPONSE", @@ -299,19 +315,21 @@ describe("init index", () => { describe("createDetachedUserDevice", () => { it("verifies user and rejects if they dont exist", () => { - spyOn(UserApiEndpoints, "callUserVerifyApi").and.returnValue(Future.of({})); + jest.spyOn(UserApiEndpoints, "callUserVerifyApi").mockReturnValue(Future.of({})); Init.createDetachedUserDevice("token", "pass").engage( (e) => { expect(e.code).toEqual(ErrorCodes.USER_NOT_SYNCED_FAILURE); }, - () => fail("Call should not succeed when user doesnt yet exist.") + () => { + throw new Error("Call should not succeed when user doesnt yet exist."); + } ); }); it("uses verified user and password to decrypt master key and generates device from it", () => { - spyOn(UserApiEndpoints, "callUserVerifyApi").and.returnValue( - Future.of({ + jest.spyOn(UserApiEndpoints, "callUserVerifyApi").mockReturnValue( + Future.of({ user: { id: "mockID", segmentId: 333, @@ -320,8 +338,8 @@ describe("init index", () => { }, }) ); - spyOn(InitializationApi, "generateDeviceAndSigningKeys").and.returnValue( - Future.of({ + jest.spyOn(InitializationApi, "generateDeviceAndSigningKeys").mockReturnValue( + Future.of({ userUpdateKeys: { deviceKeys: {privateKey: new Uint8Array([98, 81, 130, 199])}, signingKeys: {privateKey: new Uint8Array([58, 101, 98])}, @@ -335,7 +353,9 @@ describe("init index", () => { ); Init.createDetachedUserDevice("token", "pass").engage( - (e) => fail(e), + (e) => { + throw e; + }, (result) => { expect(InitializationApi.generateDeviceAndSigningKeys).toHaveBeenCalledWith("token", "pass", expect.any(Uint8Array), { x: expect.any(Uint8Array), diff --git a/src/frame/protobuf/index.ts b/src/frame/protobuf/index.ts index f08d064..6225606 100644 --- a/src/frame/protobuf/index.ts +++ b/src/frame/protobuf/index.ts @@ -42,5 +42,11 @@ const convertEncryptedMessage = (encryptedPlaintext: PREEncryptedMessage) => export const encodeEdeks = (segmentId: number, documentId: string, userKeys: EncryptedAccessKey[], groupKeys: EncryptedAccessKey[]): Uint8Array => { const userDeks = userKeys.map(convertEncryptedAccessKey("userId")); const groupDeks = groupKeys.map(convertEncryptedAccessKey("groupId")); - return PBEDeks.encode(new PBEDeks({edeks: [...groupDeks, ...userDeks], segmentId, documentId})).finish(); + const encodedEdeks = PBEDeks.encode(new PBEDeks({edeks: [...groupDeks, ...userDeks], segmentId, documentId})).finish(); + // This is a workaround for a breaking change in protobuf 7.0.0, https://github.com/protobufjs/protobuf.js/issues/1791 + if (Buffer) { + return new Uint8Array((encodedEdeks as Buffer).buffer); + } else { + return encodedEdeks; + } }; diff --git a/src/frame/sdk/UserApi.ts b/src/frame/sdk/UserApi.ts index 6e2845f..73684d6 100644 --- a/src/frame/sdk/UserApi.ts +++ b/src/frame/sdk/UserApi.ts @@ -1,4 +1,5 @@ import Future from "futurejs"; +import SDKError from "src/lib/SDKError"; import * as WMT from "../../WorkerMessageTypes"; import ApiState from "../ApiState"; import UserApiEndpoints from "../endpoints/UserApiEndpoints"; @@ -15,7 +16,9 @@ export function deauthorizeDevice() { //their device private key from local storage. So mock out a fake ID here that we can use to decision off of. .handleWith(() => Future.of({id: -1})) .map((deleteResponse) => { - const {id, segmentId} = ApiState.user(); + const user = ApiState.user(); + + const {id, segmentId} = user; clearDeviceAndSigningKeys(id, segmentId); ApiState.clearCurrentUser(); return deleteResponse.id > 0; @@ -30,8 +33,9 @@ export function deauthorizeDevice() { * validates the request and augments the server side private key. * @param {string} passcode Users current passcode */ -export function rotateUserMasterKey(passcode: string) { +export function rotateUserMasterKey(passcode: string): Future { const encryptedPrivateUserKey = ApiState.encryptedUserKey(); + const payload: WMT.RotateUserPrivateKeyWorkerRequest = { type: "ROTATE_USER_PRIVATE_KEY", message: { diff --git a/src/frame/sdk/tests/DocumentAdvancedApi.test.ts b/src/frame/sdk/tests/DocumentAdvancedApi.test.ts index acbfa5d..ce38473 100644 --- a/src/frame/sdk/tests/DocumentAdvancedApi.test.ts +++ b/src/frame/sdk/tests/DocumentAdvancedApi.test.ts @@ -23,10 +23,12 @@ describe("DocumentAdvancedApi", () => { const eDoc = new Uint8Array([99, 35, 235]); DocumentAdvancedApi.decryptWithProvidedEdeks(eDoc, edeks).engage( (e) => { - expect(e.message).toBeString(); + expect(e.message).toEqual(expect.stringContaining("")); expect(e.code).toEqual(ErrorCodes.DOCUMENT_HEADER_PARSE_FAILURE); }, - () => fail("Should reject when document is not one of ours") + () => { + throw new Error("Should reject when document is not one of ours"); + } ); }); @@ -35,10 +37,12 @@ describe("DocumentAdvancedApi", () => { const eDoc = new Uint8Array([2, 35, 52, 13, 63, 23, 63, 34]); DocumentAdvancedApi.decryptWithProvidedEdeks(eDoc, edeks).engage( (e) => { - expect(e.message).toBeString(); + expect(e.message).toEqual(expect.stringContaining("")); expect(e.code).toEqual(ErrorCodes.DOCUMENT_HEADER_PARSE_FAILURE); }, - () => fail("Should reject when document header is invalid") + () => { + throw new Error("Should reject when document header is invalid"); + } ); }); @@ -47,13 +51,15 @@ describe("DocumentAdvancedApi", () => { const decryptedBytes = new Uint8Array([36, 89, 72]); const edeks = new Uint8Array([22, 33, 44]); - spyOn(EncryptedDekEndpoints, "callEncryptedDekTransformApi").and.returnValue( - Future.of({encryptedSymmetricKey: TestUtils.getTransformedSymmetricKey()}) + jest.spyOn(EncryptedDekEndpoints, "callEncryptedDekTransformApi").mockReturnValue( + Future.of({encryptedSymmetricKey: TestUtils.getTransformedSymmetricKey()}) ); - spyOn(DocumentOperations, "decryptDocument").and.returnValue(Future.of(decryptedBytes)); + jest.spyOn(DocumentOperations, "decryptDocument").mockReturnValue(Future.of(decryptedBytes)); DocumentAdvancedApi.decryptWithProvidedEdeks(eDoc, edeks).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, ({data}) => { expect(data).toEqual(decryptedBytes); } @@ -71,18 +77,18 @@ describe("DocumentAdvancedApi", () => { ]; const returnedGroupKeys = [{id: "group-20", groupMasterPublicKey: TestUtils.getEmptyPublicKeyString()}]; - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue( - Future.of({ + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue( + Future.of({ result: returnedUserKeys, }) ); - spyOn(GroupApiEndpoints, "callGroupKeyListApi").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "callGroupKeyListApi").mockReturnValue( + Future.of({ result: returnedGroupKeys, }) ); - spyOn(PolicyApiEndpoints, "callApplyPolicyApi").and.returnValue( - Future.of({ + jest.spyOn(PolicyApiEndpoints, "callApplyPolicyApi").mockReturnValue( + Future.of({ usersAndGroups: [ {id: "group-policy", type: "group", masterPublicKey: TestUtils.getEmptyPublicKeyString()}, {id: "user-policy", type: "user", masterPublicKey: TestUtils.getEmptyPublicKeyString()}, @@ -90,8 +96,8 @@ describe("DocumentAdvancedApi", () => { invalidUsersAndGroups: [], }) ); - spyOn(DocumentOperations, "encryptNewDocumentToList").and.returnValue( - Future.of({ + jest.spyOn(DocumentOperations, "encryptNewDocumentToList").mockReturnValue( + Future.of({ userAccessKeys: [{id: "user-10", encryptedPlaintext: encryptedSymKey, publicKey: TestUtils.getEmptyPublicKeyString()}], groupAccessKeys: [{id: "group-10", encryptedPlaintext: encryptedSymKey, publicKey: TestUtils.getEmptyPublicKeyString()}], encryptedDocument, @@ -99,7 +105,7 @@ describe("DocumentAdvancedApi", () => { ); DocumentAdvancedApi.encrypt("doc key", new Uint8Array([88, 73, 92]), ["user-55", "user-33"], ["group-20"], true, {}).engage( - (e) => fail(e.message), + (e) => done(e), ({edeks, document, documentID}) => { const userKeyList = [ {id: "user-55", masterPublicKey: TestUtils.getEmptyPublicKeyString()}, diff --git a/src/frame/sdk/tests/DocumentApi.test.ts b/src/frame/sdk/tests/DocumentApi.test.ts index 6e5d5d9..314b7d2 100644 --- a/src/frame/sdk/tests/DocumentApi.test.ts +++ b/src/frame/sdk/tests/DocumentApi.test.ts @@ -36,10 +36,12 @@ describe("DocumentApi", () => { }, ]; - spyOn(DocumentApiEndpoints, "callDocumentListApi").and.returnValue(Future.of({result: dataList})); + jest.spyOn(DocumentApiEndpoints, "callDocumentListApi").mockReturnValue(Future.of({result: dataList})); DocumentApi.list().engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (result) => { expect(result).toEqual({ result: [ @@ -64,10 +66,10 @@ describe("DocumentApi", () => { updated: "2", }; - spyOn(DocumentApiEndpoints, "callDocumentMetadataGetApi").and.returnValue(Future.of(docMeta)); + jest.spyOn(DocumentApiEndpoints, "callDocumentMetadataGetApi").mockReturnValue(Future.of(docMeta)); DocumentApi.getDocumentMeta("my-doc").engage( - (e) => fail(e.message), + (e) => done(e), (result: any) => { expect(result).toEqual({ documentID: "my-doc", @@ -87,11 +89,11 @@ describe("DocumentApi", () => { it("returns raw bytes if provided as option", (done) => { const existingDocument = TestUtils.getEncryptedDocumentResponse(); - spyOn(DocumentApiEndpoints, "callDocumentGetApi").and.returnValue(Future.of(existingDocument)); - spyOn(DocumentOperations, "decryptDocument").and.returnValue(Future.of(new Uint8Array([36, 89, 72]))); + jest.spyOn(DocumentApiEndpoints, "callDocumentGetApi").mockReturnValue(Future.of(existingDocument)); + jest.spyOn(DocumentOperations, "decryptDocument").mockReturnValue(Future.of(new Uint8Array([36, 89, 72]))); DocumentApi.decryptHostedDoc("doc key").engage( - (e) => fail(e.message), + (e) => done(e), ({data, documentID, documentName, visibleTo, association}) => { expect(documentID).toEqual("docID"); expect(documentName).toEqual("my doc"); @@ -117,10 +119,12 @@ describe("DocumentApi", () => { const doc = new Uint8Array([8, 23, 235, 2]); DocumentApi.decryptLocalDoc("docID", doc).engage( (e) => { - expect(e.message).toBeString(); + expect(e.message).toEqual(expect.stringContaining("")); expect(e.code).toEqual(ErrorCodes.DOCUMENT_HEADER_PARSE_FAILURE); }, - () => fail("Should reject when provided document is an unsupported version") + () => { + throw new Error("Should reject when provided document is an unsupported version"); + } ); }); @@ -129,11 +133,13 @@ describe("DocumentApi", () => { const decryptedBytes = new Uint8Array([36, 89, 72]); const docMeta = TestUtils.getEncryptedDocumentMetaResponse(); - spyOn(DocumentApiEndpoints, "callDocumentMetadataGetApi").and.returnValue(Future.of(docMeta)); - spyOn(DocumentOperations, "decryptDocument").and.returnValue(Future.of(decryptedBytes)); + jest.spyOn(DocumentApiEndpoints, "callDocumentMetadataGetApi").mockReturnValue(Future.of(docMeta)); + jest.spyOn(DocumentOperations, "decryptDocument").mockReturnValue(Future.of(decryptedBytes)); DocumentApi.decryptLocalDoc("docID", eDoc).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, ({data, documentID, documentName, visibleTo, association}) => { expect(documentID).toEqual("docID"); expect(documentName).toEqual("my doc"); @@ -153,17 +159,19 @@ describe("DocumentApi", () => { const encryptedDocument = TestUtils.getEncryptedDocument(); const encryptedSymKey = TestUtils.getEncryptedSymmetricKey(); - spyOn(DocumentOperations, "encryptNewDocumentToList").and.returnValue( - Future.of({ + jest.spyOn(DocumentOperations, "encryptNewDocumentToList").mockReturnValue( + Future.of({ userAccessKeys: [{id: "user-10", key: encryptedSymKey}], groupAccessKeys: [], encryptedDocument, }) ); - spyOn(DocumentApiEndpoints, "callDocumentCreateApi").and.returnValue(Future.of({id: "bar", name: "my doc", created: "1", updated: "2"})); + jest.spyOn(DocumentApiEndpoints, "callDocumentCreateApi").mockReturnValue(Future.of({id: "bar", name: "my doc", created: "1", updated: "2"})); DocumentApi.encryptToStore("doc key", new Uint8Array([88, 73, 92]), "", [], [], true).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (data: any) => { expect(data).toEqual({documentID: "bar", documentName: "my doc", created: "1", updated: "2"}); const currentUserRecord = { @@ -196,9 +204,9 @@ describe("DocumentApi", () => { const encryptedDocument = TestUtils.getEncryptedDocument(); const encryptedSymKey = TestUtils.getEncryptedSymmetricKey(); - spyOn(DocumentApiEndpoints, "callDocumentCreateApi").and.returnValue(Future.of({id: "bar", name: docName, created: "1", updated: "2"})); - spyOn(DocumentOperations, "encryptNewDocumentToList").and.returnValue( - Future.of({ + jest.spyOn(DocumentApiEndpoints, "callDocumentCreateApi").mockReturnValue(Future.of({id: "bar", name: docName, created: "1", updated: "2"})); + jest.spyOn(DocumentOperations, "encryptNewDocumentToList").mockReturnValue( + Future.of({ userAccessKeys: [{id: "user-10", key: encryptedSymKey}], groupAccessKeys: [], encryptedDocument, @@ -206,7 +214,7 @@ describe("DocumentApi", () => { ); DocumentApi.encryptToStore("doc key", new Uint8Array([88, 73, 92]), docName, [], [], true).engage( - (e) => fail(e.message), + (e) => done(e), (data: any) => { expect(data).toEqual({documentID: "bar", documentName: "my doc", created: "1", updated: "2"}); expect(DocumentApiEndpoints.callDocumentCreateApi).toHaveBeenCalledWith( @@ -225,30 +233,30 @@ describe("DocumentApi", () => { const encryptedDocument = TestUtils.getEncryptedDocument(); const encryptedSymKey = TestUtils.getEncryptedSymmetricKey(); - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue( - Future.of({ + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue( + Future.of({ result: [ {id: "user-55", userMasterPublicKey: TestUtils.getEmptyPublicKeyString()}, {id: "user-33", userMasterPublicKey: TestUtils.getEmptyPublicKeyString()}, ], }) ); - spyOn(GroupApiEndpoints, "callGroupKeyListApi").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "callGroupKeyListApi").mockReturnValue( + Future.of({ result: [{id: "group-20", groupMasterPublicKey: TestUtils.getEmptyPublicKeyString()}], }) ); - spyOn(DocumentOperations, "encryptNewDocumentToList").and.returnValue( - Future.of({ + jest.spyOn(DocumentOperations, "encryptNewDocumentToList").mockReturnValue( + Future.of({ userAccessKeys: [{id: "user-10", key: encryptedSymKey}], groupAccessKeys: [], encryptedDocument, }) ); - spyOn(DocumentApiEndpoints, "callDocumentCreateApi").and.returnValue(Future.of({id: "bar", name: "my doc", created: "1", updated: "2"})); + jest.spyOn(DocumentApiEndpoints, "callDocumentCreateApi").mockReturnValue(Future.of({id: "bar", name: "my doc", created: "1", updated: "2"})); DocumentApi.encryptToStore("doc key", new Uint8Array([88, 73, 92]), "", ["user-55", "user-33"], ["user-33"], true).engage( - (e) => fail(e.message), + (e) => done(e), (data: any) => { expect(data).toEqual({documentID: "bar", documentName: "my doc", created: "1", updated: "2"}); const userKeyList = [ @@ -277,24 +285,24 @@ describe("DocumentApi", () => { }); it("fails if any users or groups cannot be found", (done) => { - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue( - Future.of({ + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue( + Future.of({ result: [{id: "user-33", userMasterPublicKey: TestUtils.getEmptyPublicKeyString()}], }) ); - spyOn(GroupApiEndpoints, "callGroupKeyListApi").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "callGroupKeyListApi").mockReturnValue( + Future.of({ result: [{id: "group-20", groupMasterPublicKey: TestUtils.getEmptyPublicKeyString()}], }) ); DocumentApi.encryptToStore("doc key", new Uint8Array([88, 73, 92]), "", ["user-55", "user-33"], ["group-20"], true).engage( (e) => { - expect(e.message).toBeString(); + expect(e.message).toEqual(expect.stringContaining("")); expect(e.message).toContain("[user-55]"); done(); }, - () => fail("Create should not succeed if not all users or groups can be found") + () => done("Create should not succeed if not all users or groups can be found") ); }); }); @@ -304,17 +312,19 @@ describe("DocumentApi", () => { const encryptedDocument = TestUtils.getEncryptedDocument(); const encryptedSymKey = TestUtils.getEncryptedSymmetricKey(); - spyOn(DocumentOperations, "encryptNewDocumentToList").and.returnValue( - Future.of({ + jest.spyOn(DocumentOperations, "encryptNewDocumentToList").mockReturnValue( + Future.of({ userAccessKeys: [{id: "user-10", key: encryptedSymKey}], groupAccessKeys: [], encryptedDocument, }) ); - spyOn(DocumentApiEndpoints, "callDocumentCreateApi").and.returnValue(Future.of({id: "bar"})); + jest.spyOn(DocumentApiEndpoints, "callDocumentCreateApi").mockReturnValue(Future.of({id: "bar"})); DocumentApi.encryptLocalDocument("mydocID", new Uint8Array([]), "", [], [], true).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, ({document, documentID, documentName}) => { expect(documentID).toEqual("bar"); expect(documentName).toBeUndefined(); @@ -343,17 +353,19 @@ describe("DocumentApi", () => { const encryptedDocument = TestUtils.getEncryptedDocument(); const encryptedSymKey = TestUtils.getEncryptedSymmetricKey(); - spyOn(DocumentOperations, "encryptNewDocumentToList").and.returnValue( - Future.of({ + jest.spyOn(DocumentOperations, "encryptNewDocumentToList").mockReturnValue( + Future.of({ userAccessKeys: [{id: "user-10", key: encryptedSymKey}], groupAccessKeys: [], encryptedDocument, }) ); - spyOn(DocumentApiEndpoints, "callDocumentCreateApi").and.returnValue(Future.of({id: "mydocID", name: docName})); + jest.spyOn(DocumentApiEndpoints, "callDocumentCreateApi").mockReturnValue(Future.of({id: "mydocID", name: docName})); DocumentApi.encryptLocalDocument("mydocID", new Uint8Array([]), docName, [], [], true).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, ({document, documentID, documentName}) => { expect(documentID).toEqual("mydocID"); expect(documentName).toEqual(docName); @@ -367,30 +379,30 @@ describe("DocumentApi", () => { const encryptedDocument = TestUtils.getEncryptedDocument(); const encryptedSymKey = TestUtils.getEncryptedSymmetricKey(); - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue( - Future.of({ + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue( + Future.of({ result: [ {id: "user-55", userMasterPublicKey: TestUtils.getEmptyPublicKeyString()}, {id: "user-33", userMasterPublicKey: TestUtils.getEmptyPublicKeyString()}, ], }) ); - spyOn(GroupApiEndpoints, "callGroupKeyListApi").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "callGroupKeyListApi").mockReturnValue( + Future.of({ result: [{id: "group-20", groupMasterPublicKey: TestUtils.getEmptyPublicKeyString()}], }) ); - spyOn(DocumentOperations, "encryptNewDocumentToList").and.returnValue( - Future.of({ + jest.spyOn(DocumentOperations, "encryptNewDocumentToList").mockReturnValue( + Future.of({ userAccessKeys: [{id: "user-10", key: encryptedSymKey}], groupAccessKeys: [], encryptedDocument, }) ); - spyOn(DocumentApiEndpoints, "callDocumentCreateApi").and.returnValue(Future.of({id: "bar"})); + jest.spyOn(DocumentApiEndpoints, "callDocumentCreateApi").mockReturnValue(Future.of({id: "bar"})); DocumentApi.encryptLocalDocument("doc key", new Uint8Array([88, 73, 92]), "", ["user-55", "user-33"], ["user-33"], true).engage( - (e) => fail(e.message), + (e) => done(e), ({documentID, documentName, document}) => { expect(documentID).toEqual("bar"); expect(documentName).toBeUndefined(); @@ -419,27 +431,27 @@ describe("DocumentApi", () => { const encryptedDocument = TestUtils.getEncryptedDocument(); const encryptedSymKey = TestUtils.getEncryptedSymmetricKey(); - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue( - Future.of({ + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue( + Future.of({ result: [{id: "user-33", userMasterPublicKey: TestUtils.getEmptyPublicKeyString()}], }) ); - spyOn(GroupApiEndpoints, "callGroupKeyListApi").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "callGroupKeyListApi").mockReturnValue( + Future.of({ result: [{id: "group-20", groupMasterPublicKey: TestUtils.getEmptyPublicKeyString()}], }) ); - spyOn(DocumentOperations, "encryptNewDocumentToList").and.returnValue( - Future.of({ + jest.spyOn(DocumentOperations, "encryptNewDocumentToList").mockReturnValue( + Future.of({ userAccessKeys: [{id: "user-33", key: encryptedSymKey}], groupAccessKeys: [{id: "group-20", key: encryptedSymKey}], encryptedDocument, }) ); - spyOn(DocumentApiEndpoints, "callDocumentCreateApi").and.returnValue(Future.of({id: "bar"})); + jest.spyOn(DocumentApiEndpoints, "callDocumentCreateApi").mockReturnValue(Future.of({id: "bar"})); DocumentApi.encryptLocalDocument("doc key", new Uint8Array([88, 73, 92]), "", ["user-33"], ["group-20"], false).engage( - (e) => fail(e.message), + (e) => done(e), ({documentID, documentName, document}) => { expect(documentID).toEqual("bar"); expect(documentName).toBeUndefined(); @@ -469,10 +481,10 @@ describe("DocumentApi", () => { it("encrypts to users and groups from a policy", (done) => { const encryptedDocument = TestUtils.getEncryptedDocument(); const encryptedSymKey = TestUtils.getEncryptedSymmetricKey(); - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue(Future.of({result: []})); - spyOn(GroupApiEndpoints, "callGroupKeyListApi").and.returnValue(Future.of({result: []})); - spyOn(PolicyApiEndpoints, "callApplyPolicyApi").and.returnValue( - Future.of({ + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: []})); + jest.spyOn(GroupApiEndpoints, "callGroupKeyListApi").mockReturnValue(Future.of({result: []})); + jest.spyOn(PolicyApiEndpoints, "callApplyPolicyApi").mockReturnValue( + Future.of({ usersAndGroups: [ {id: "group-20", type: "group", masterPublicKey: TestUtils.getEmptyPublicKeyString()}, {id: "user-33", type: "user", masterPublicKey: TestUtils.getEmptyPublicKeyString()}, @@ -480,17 +492,17 @@ describe("DocumentApi", () => { invalidUsersAndGroups: [], }) ); - spyOn(DocumentOperations, "encryptNewDocumentToList").and.returnValue( - Future.of({ + jest.spyOn(DocumentOperations, "encryptNewDocumentToList").mockReturnValue( + Future.of({ userAccessKeys: [{id: "user-33", key: encryptedSymKey}], groupAccessKeys: [{id: "group-20", key: encryptedSymKey}], encryptedDocument, }) ); - spyOn(DocumentApiEndpoints, "callDocumentCreateApi").and.returnValue(Future.of({id: "bar"})); + jest.spyOn(DocumentApiEndpoints, "callDocumentCreateApi").mockReturnValue(Future.of({id: "bar"})); DocumentApi.encryptLocalDocument("doc key", new Uint8Array([88, 73, 92]), "", [], [], false, undefined).engage( - (e) => fail(e.message), + (e) => done(e), ({documentID, documentName, document}) => { expect(documentID).toEqual("bar"); expect(documentName).toBeUndefined(); @@ -520,74 +532,74 @@ describe("DocumentApi", () => { it("fails if the policy has invalid users or groups", (done) => { const encryptedDocument = TestUtils.getEncryptedDocument(); const encryptedSymKey = TestUtils.getEncryptedSymmetricKey(); - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue(Future.of({result: []})); - spyOn(GroupApiEndpoints, "callGroupKeyListApi").and.returnValue(Future.of({result: []})); - spyOn(PolicyApiEndpoints, "callApplyPolicyApi").and.returnValue( - Future.of({ + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: []})); + jest.spyOn(GroupApiEndpoints, "callGroupKeyListApi").mockReturnValue(Future.of({result: []})); + jest.spyOn(PolicyApiEndpoints, "callApplyPolicyApi").mockReturnValue( + Future.of({ usersAndGroups: [{id: "group-20", type: "group", masterPublicKey: TestUtils.getEmptyPublicKeyString()}], invalidUsersAndGroups: [{id: "user-33", type: "user"}], }) ); - spyOn(DocumentOperations, "encryptNewDocumentToList").and.returnValue( - Future.of({ + jest.spyOn(DocumentOperations, "encryptNewDocumentToList").mockReturnValue( + Future.of({ userAccessKeys: [{id: "user-33", key: encryptedSymKey}], groupAccessKeys: [{id: "group-20", key: encryptedSymKey}], encryptedDocument, }) ); - spyOn(DocumentApiEndpoints, "callDocumentCreateApi").and.returnValue(Future.of({id: "bar"})); + jest.spyOn(DocumentApiEndpoints, "callDocumentCreateApi").mockReturnValue(Future.of({id: "bar"})); DocumentApi.encryptLocalDocument("doc key", new Uint8Array([88, 73, 92]), "", [], [], false, undefined).engage( (e) => { - expect(e.message).toBeString(); + expect(e.message).toEqual(expect.stringContaining("")); expect(e.message).toContain("[user-33]"); done(); }, - (_) => fail("This should not succeed.") + (_) => done("This should not succeed.") ); }); it("fails if any of the users or groups cannot be found", (done) => { - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue( - Future.of({ + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue( + Future.of({ result: [{id: "user-33", userMasterPublicKey: TestUtils.getEmptyPublicKeyString()}], }) ); - spyOn(GroupApiEndpoints, "callGroupKeyListApi").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "callGroupKeyListApi").mockReturnValue( + Future.of({ result: [{id: "group-20", groupMasterPublicKey: TestUtils.getEmptyPublicKeyString()}], }) ); DocumentApi.encryptLocalDocument("doc key", new Uint8Array([88, 73, 92]), "", ["user-33"], ["group-20", "group-33"], true).engage( (e) => { - expect(e.message).toBeString(); + expect(e.message).toEqual(expect.stringContaining("")); expect(e.message).toContain("[group-33]"); done(); }, - () => fail("Should not call create when any user or group could not be found") + () => done("Should not call create when any user or group could not be found") ); }); it("fails if there is no one to encrypt to.", (done) => { - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue( - Future.of({ + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue( + Future.of({ result: [], }) ); - spyOn(GroupApiEndpoints, "callGroupKeyListApi").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "callGroupKeyListApi").mockReturnValue( + Future.of({ result: [], }) ); DocumentApi.encryptLocalDocument("doc key", new Uint8Array([88, 73, 92]), "", [], [], false).engage( (e) => { - expect(e.message).toBeString(); + expect(e.message).toEqual(expect.stringContaining("")); expect(e.message).toBe("Failed to create document due to no users or groups to share with."); done(); }, - () => fail("Should not call create when no users or groups could be found") + () => done("Should not call create when no users or groups could be found") ); }); }); @@ -597,12 +609,14 @@ describe("DocumentApi", () => { const newDocument = TestUtils.getEncryptedDocument(); const existingDocument = TestUtils.getEncryptedDocumentResponse(); - spyOn(DocumentOperations, "reEncryptDocument").and.returnValue(Future.of(newDocument)); - spyOn(DocumentApiEndpoints, "callDocumentMetadataGetApi").and.returnValue(Future.of(existingDocument)); - spyOn(DocumentApiEndpoints, "callDocumentUpdateApi").and.returnValue(Future.of({id: "bar", name: "updated doc", created: "1", updated: "2"})); + jest.spyOn(DocumentOperations, "reEncryptDocument").mockReturnValue(Future.of(newDocument)); + jest.spyOn(DocumentApiEndpoints, "callDocumentMetadataGetApi").mockReturnValue(Future.of(existingDocument)); + jest.spyOn(DocumentApiEndpoints, "callDocumentUpdateApi").mockReturnValue( + Future.of({id: "bar", name: "updated doc", created: "1", updated: "2"}) + ); DocumentApi.updateToStore("doc key", new Uint8Array([88, 73, 92])).engage( - (e) => fail(e.message), + (e) => done(e), (data: any) => { expect(data).toEqual({documentID: "bar", documentName: "updated doc", created: "1", updated: "2"}); expect(DocumentOperations.reEncryptDocument).toHaveBeenCalledWith( @@ -626,11 +640,13 @@ describe("DocumentApi", () => { const newDocument = TestUtils.getEncryptedDocument(); const existingDocument = TestUtils.getEncryptedDocumentResponse(); - spyOn(DocumentOperations, "reEncryptDocument").and.returnValue(Future.of(newDocument)); - spyOn(DocumentApiEndpoints, "callDocumentMetadataGetApi").and.returnValue(Future.of(existingDocument)); + jest.spyOn(DocumentOperations, "reEncryptDocument").mockReturnValue(Future.of(newDocument)); + jest.spyOn(DocumentApiEndpoints, "callDocumentMetadataGetApi").mockReturnValue(Future.of(existingDocument)); DocumentApi.updateLocalDocument("docID", new Uint8Array([88, 73, 92])).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, ({documentID, documentName, document}) => { expect(documentID).toEqual("docID"); expect(documentName).toEqual("my doc"); @@ -649,12 +665,14 @@ describe("DocumentApi", () => { describe("updateName", () => { it("invokes document update API and maps result subset", () => { - spyOn(DocumentApiEndpoints, "callDocumentUpdateApi").and.returnValue( - Future.of({id: "bar", name: "updated doc", fromUserId: "user-33", created: "1", updated: "2"}) + jest.spyOn(DocumentApiEndpoints, "callDocumentUpdateApi").mockReturnValue( + Future.of({id: "bar", name: "updated doc", fromUserId: "user-33", created: "1", updated: "2"}) ); DocumentApi.updateName("doc-10", "new name").engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (response) => { expect(response).toEqual({ documentID: "bar", @@ -677,14 +695,14 @@ describe("DocumentApi", () => { authorizationCode: "ac", }; - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue(Future.of({result: userKeys})); - spyOn(DocumentApiEndpoints, "callDocumentMetadataGetApi").and.returnValue( - Future.of({ + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: userKeys})); + jest.spyOn(DocumentApiEndpoints, "callDocumentMetadataGetApi").mockReturnValue( + Future.of({ encryptedSymmetricKey: docSymKey, }) ); - spyOn(DocumentApiEndpoints, "callDocumentGrantApi").and.returnValue( - Future.of({ + jest.spyOn(DocumentApiEndpoints, "callDocumentGrantApi").mockReturnValue( + Future.of({ succeededIds: [{userOrGroup: {type: "user", id: "userID"}}], failedIds: [ { @@ -694,16 +712,16 @@ describe("DocumentApi", () => { ], }) ); - spyOn(GroupApiEndpoints, "getGroupPublicKeyList").and.returnValue(Future.of([])); - spyOn(DocumentOperations, "encryptDocumentToKeys").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "getGroupPublicKeyList").mockReturnValue(Future.of([])); + jest.spyOn(DocumentOperations, "encryptDocumentToKeys").mockReturnValue( + Future.of({ userAccessKeys: ["encryptedUserKey"], groupAccessKeys: [], }) ); DocumentApi.grantDocumentAccess("docID", ["userID", "userID2"], []).engage( - (e) => fail(e.message), + (e) => done(e), (data: any) => { expect(data).toEqual({ succeeded: [ @@ -745,28 +763,28 @@ describe("DocumentApi", () => { authorizationCode: "ac", }; - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue(Future.of({result: []})); - spyOn(GroupApiEndpoints, "callGroupKeyListApi").and.returnValue(Future.of({result: groupKeys})); - spyOn(DocumentApiEndpoints, "callDocumentMetadataGetApi").and.returnValue( - Future.of({ + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: []})); + jest.spyOn(GroupApiEndpoints, "callGroupKeyListApi").mockReturnValue(Future.of({result: groupKeys})); + jest.spyOn(DocumentApiEndpoints, "callDocumentMetadataGetApi").mockReturnValue( + Future.of({ encryptedSymmetricKey: docSymKey, }) ); - spyOn(DocumentApiEndpoints, "callDocumentGrantApi").and.returnValue( - Future.of({ + jest.spyOn(DocumentApiEndpoints, "callDocumentGrantApi").mockReturnValue( + Future.of({ succeededIds: [{userOrGroup: {type: "group", id: "groupID"}}], failedIds: [], }) ); - spyOn(DocumentOperations, "encryptDocumentToKeys").and.returnValue( - Future.of({ + jest.spyOn(DocumentOperations, "encryptDocumentToKeys").mockReturnValue( + Future.of({ userAccessKeys: [], groupAccessKeys: ["encryptedGroupKey"], }) ); DocumentApi.grantDocumentAccess("docID", [], ["groupID"]).engage( - (e) => fail(e.message), + (e) => done(e), (data: any) => { expect(data).toEqual({ succeeded: [ @@ -809,15 +827,15 @@ describe("DocumentApi", () => { authorizationCode: "ac", }; - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue(Future.of({result: userKeys})); - spyOn(GroupApiEndpoints, "callGroupKeyListApi").and.returnValue(Future.of({result: groupKeys})); - spyOn(DocumentApiEndpoints, "callDocumentMetadataGetApi").and.returnValue( - Future.of({ + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: userKeys})); + jest.spyOn(GroupApiEndpoints, "callGroupKeyListApi").mockReturnValue(Future.of({result: groupKeys})); + jest.spyOn(DocumentApiEndpoints, "callDocumentMetadataGetApi").mockReturnValue( + Future.of({ encryptedSymmetricKey: docSymKey, }) ); - spyOn(DocumentApiEndpoints, "callDocumentGrantApi").and.returnValue( - Future.of({ + jest.spyOn(DocumentApiEndpoints, "callDocumentGrantApi").mockReturnValue( + Future.of({ succeededIds: [{userOrGroup: {type: "group", id: "groupID1"}}, {userOrGroup: {type: "user", id: "userID2"}}], failedIds: [ {userOrGroup: {type: "group", id: "groupID2"}, errorMessage: "foo"}, @@ -825,15 +843,15 @@ describe("DocumentApi", () => { ], }) ); - spyOn(DocumentOperations, "encryptDocumentToKeys").and.returnValue( - Future.of({ + jest.spyOn(DocumentOperations, "encryptDocumentToKeys").mockReturnValue( + Future.of({ userAccessKeys: ["encryptedUserKey"], groupAccessKeys: ["encryptedGroupKey"], }) ); DocumentApi.grantDocumentAccess("docID", ["userID1", "userID2"], ["groupID1", "groupID2"]).engage( - (e) => fail(e.message), + (e) => done(e), (data: any) => { expect(data).toEqual({ succeeded: [ @@ -880,16 +898,16 @@ describe("DocumentApi", () => { authorizationCode: "ac", }; - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue(Future.of({result: userKeys})); - spyOn(GroupApiEndpoints, "callGroupKeyListApi").and.returnValue(Future.of({result: groupKeys})); - spyOn(DocumentApiEndpoints, "callDocumentMetadataGetApi").and.returnValue( - Future.of({ + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: userKeys})); + jest.spyOn(GroupApiEndpoints, "callGroupKeyListApi").mockReturnValue(Future.of({result: groupKeys})); + jest.spyOn(DocumentApiEndpoints, "callDocumentMetadataGetApi").mockReturnValue( + Future.of({ id: "stored ID", encryptedSymmetricKey: docSymKey, }) ); - spyOn(DocumentApiEndpoints, "callDocumentGrantApi").and.returnValue( - Future.of({ + jest.spyOn(DocumentApiEndpoints, "callDocumentGrantApi").mockReturnValue( + Future.of({ succeededIds: [{userOrGroup: {type: "group", id: "groupID1"}}, {userOrGroup: {type: "user", id: "userID2"}}], failedIds: [ {userOrGroup: {type: "group", id: "groupID2"}, errorMessage: "foo"}, @@ -897,15 +915,15 @@ describe("DocumentApi", () => { ], }) ); - spyOn(DocumentOperations, "encryptDocumentToKeys").and.returnValue( - Future.of({ + jest.spyOn(DocumentOperations, "encryptDocumentToKeys").mockReturnValue( + Future.of({ userAccessKeys: ["encryptedUserKey"], groupAccessKeys: ["encryptedGroupKey"], }) ); DocumentApi.grantDocumentAccess("docID", ["userID1", "userID2", "userID3", "userID4"], ["groupID1", "groupID2", "groupID3", "groupID4"]).engage( - (e) => fail(e.message), + (e) => done(e), (data: any) => { expect(data).toEqual({ succeeded: [ @@ -930,13 +948,13 @@ describe("DocumentApi", () => { }); it("bails early and returns failures when no users or groups can be found", (done) => { - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue(Future.of({result: []})); - spyOn(GroupApiEndpoints, "callGroupKeyListApi").and.returnValue(Future.of({result: []})); - spyOn(DocumentApiEndpoints, "callDocumentMetadataGetApi").and.returnValue(Future.of({})); - spyOn(DocumentOperations, "encryptDocumentToKeys"); + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: []})); + jest.spyOn(GroupApiEndpoints, "callGroupKeyListApi").mockReturnValue(Future.of({result: []})); + jest.spyOn(DocumentApiEndpoints, "callDocumentMetadataGetApi").mockReturnValue(Future.of({})); + jest.spyOn(DocumentOperations, "encryptDocumentToKeys"); DocumentApi.grantDocumentAccess("docID", ["userID1", "userID2"], ["groupID1"]).engage( - (e) => fail(e.message), + (e) => done(e), (data: any) => { expect(data).toEqual({ succeeded: [], @@ -956,8 +974,8 @@ describe("DocumentApi", () => { describe("revokeDocumentAccess", () => { it("calls document revoke API and returns with expected mapped result", () => { - spyOn(DocumentApiEndpoints, "callDocumentRevokeApi").and.returnValue( - Future.of({ + jest.spyOn(DocumentApiEndpoints, "callDocumentRevokeApi").mockReturnValue( + Future.of({ succeededIds: [{userOrGroup: {type: "group", id: "groupID1"}}, {userOrGroup: {type: "user", id: "userID2"}}], failedIds: [ {userOrGroup: {type: "group", id: "groupID2"}, errorMessage: "foo"}, @@ -967,7 +985,9 @@ describe("DocumentApi", () => { ); DocumentApi.revokeDocumentAccess("docID", ["userID1", "userID2"], ["groupID1", "groupID2"]).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (result) => { expect(result).toEqual({ succeeded: [ diff --git a/src/frame/sdk/tests/DocumentOperations.test.ts b/src/frame/sdk/tests/DocumentOperations.test.ts index 984ce07..839c91b 100644 --- a/src/frame/sdk/tests/DocumentOperations.test.ts +++ b/src/frame/sdk/tests/DocumentOperations.test.ts @@ -6,14 +6,16 @@ import * as TestUtils from "../../../tests/TestUtils"; describe("DocumentOperations", () => { describe("decryptDocument", () => { it("decrypts document key and then decrypts document", () => { - spyOn(WorkerMediator, "sendMessage").and.returnValue(Future.of({message: {decryptedDocument: "decrypted doc"}})); + jest.spyOn(WorkerMediator, "sendMessage").mockReturnValue(Future.of({message: {decryptedDocument: "decrypted doc"}})); const testDoc = TestUtils.getEncryptedDocument(); const symKey = TestUtils.getTransformedSymmetricKey(); const privKey = new Uint8Array(32); DocumentOperations.decryptDocument(testDoc, symKey, privKey).engage( - (e) => fail(e), + (e) => { + throw e; + }, (result: any) => { expect(result).toEqual("decrypted doc"); expect(WorkerMediator.sendMessage).toHaveBeenCalledWith( @@ -45,8 +47,8 @@ describe("DocumentOperations", () => { ]; const signingKeys = TestUtils.getSigningKeyPair(); - spyOn(WorkerMediator, "sendMessage").and.returnValue( - Future.of({ + jest.spyOn(WorkerMediator, "sendMessage").mockReturnValue( + Future.of({ message: { encryptedSymmetricKey: "encryptedSymKey", userKeyList: [{key: "user1key"}, {key: "user2key"}], @@ -56,7 +58,9 @@ describe("DocumentOperations", () => { ); DocumentOperations.encryptNewDocumentToList(docToEncrypt, userList, groupList, signingKeys).engage( - (e) => fail(e), + (e) => { + throw e; + }, (result: any) => { expect(result).toEqual({ encryptedSymmetricKey: "encryptedSymKey", @@ -86,10 +90,12 @@ describe("DocumentOperations", () => { const newData = new Uint8Array(35); const privKey = new Uint8Array(32); - spyOn(WorkerMediator, "sendMessage").and.returnValue(Future.of({message: {encryptedDocument: "encrypted doc"}})); + jest.spyOn(WorkerMediator, "sendMessage").mockReturnValue(Future.of({message: {encryptedDocument: "encrypted doc"}})); DocumentOperations.reEncryptDocument(newData, symKey, privKey).engage( - (e) => fail(e), + (e) => { + throw e; + }, (result: any) => { expect(result).toEqual("encrypted doc"); expect(WorkerMediator.sendMessage).toHaveBeenCalledWith( @@ -112,14 +118,19 @@ describe("DocumentOperations", () => { it("encrypts new list of symmetric keys and calls document grant endpoint", () => { const symKey = TestUtils.getTransformedSymmetricKey(); const privKey = new Uint8Array(32); - const userList = [{id: "abc-123", masterPublicKey: {x: "", y: ""}}, {id: "def-456", masterPublicKey: {x: "", y: ""}}]; + const userList = [ + {id: "abc-123", masterPublicKey: {x: "", y: ""}}, + {id: "def-456", masterPublicKey: {x: "", y: ""}}, + ]; const groupList = [{id: "group-35", masterPublicKey: {x: "", y: ""}}]; const signingKeys = TestUtils.getSigningKeyPair(); - spyOn(WorkerMediator, "sendMessage").and.returnValue(Future.of({message: "list of keys"})); + jest.spyOn(WorkerMediator, "sendMessage").mockReturnValue(Future.of({message: "list of keys"})); DocumentOperations.encryptDocumentToKeys(symKey, userList, groupList, privKey, signingKeys).engage( - (e) => fail(e), + (e) => { + throw e; + }, (result: any) => { expect(result).toEqual("list of keys"); expect(WorkerMediator.sendMessage).toHaveBeenCalledWith({ diff --git a/src/frame/sdk/tests/GroupApi.test.ts b/src/frame/sdk/tests/GroupApi.test.ts index e792b00..fb309da 100644 --- a/src/frame/sdk/tests/GroupApi.test.ts +++ b/src/frame/sdk/tests/GroupApi.test.ts @@ -10,8 +10,8 @@ import {ErrorCodes} from "../../../Constants"; describe("GroupApi", () => { describe("list", () => { it("requests group list from API and maps over result", () => { - spyOn(GroupApiEndpoints, "callGroupListApi").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "callGroupListApi").mockReturnValue( + Future.of({ result: [ { foo: "bar", @@ -34,7 +34,9 @@ describe("GroupApi", () => { ); GroupApi.list().engage( - (e) => fail(e), + (e) => { + throw e; + }, (result: any) => { expect(result).toEqual({ result: [ @@ -65,8 +67,8 @@ describe("GroupApi", () => { describe("get", () => { it("requests get endpoint for specific ID and maps response", () => { - spyOn(GroupApiEndpoints, "callGroupGetApi").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "callGroupGetApi").mockReturnValue( + Future.of({ groupPublicKey: "bar", name: "private group", id: "87", @@ -80,7 +82,9 @@ describe("GroupApi", () => { ); GroupApi.get("87").engage( - (e) => fail(e), + (e) => { + throw e; + }, (result: any) => { expect(result).toEqual({ groupID: "87", @@ -100,8 +104,8 @@ describe("GroupApi", () => { }); it("returns partial response if only meta info is returned", () => { - spyOn(GroupApiEndpoints, "callGroupGetApi").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "callGroupGetApi").mockReturnValue( + Future.of({ groupPublicKey: "bar", name: "private group", id: "87", @@ -113,7 +117,9 @@ describe("GroupApi", () => { ); GroupApi.get("87").engage( - (e) => fail(e), + (e) => { + throw e; + }, (result: any) => { expect(result).toEqual({ groupID: "87", @@ -136,17 +142,17 @@ describe("GroupApi", () => { ApiState.setDeviceAndSigningKeys(TestUtils.getEmptyKeyPair(), TestUtils.getSigningKeyPair()); const memberList = [{id: "user2ID", masterPublicKey: TestUtils.getEmptyPublicKeyString()}]; const adminList = [ - {id: "user1ID", masterPublicKey: TestUtils.getEmptyPublicKeyString()}, + {id: "user1", masterPublicKey: TestUtils.getEmptyPublicKeyString()}, {id: "user3ID", masterPublicKey: TestUtils.getEmptyPublicKeyString()}, ]; const userKeyList = [ - {id: "user1ID", userMasterPublicKey: TestUtils.getEmptyPublicKeyString()}, + {id: "user1", userMasterPublicKey: TestUtils.getEmptyPublicKeyString()}, {id: "user2ID", userMasterPublicKey: TestUtils.getEmptyPublicKeyString()}, {id: "user3ID", userMasterPublicKey: TestUtils.getEmptyPublicKeyString()}, ]; - jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: userKeyList}) as any); + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: userKeyList}) as any); jest.spyOn(GroupOperations, "groupCreate").mockReturnValue( - Future.of({ + Future.of({ encryptedAccessKeys: "encryptedAccessKeys", groupPublicKey: "groupPublicKey", transformKeyGrantList: "transformKeyGrantList", @@ -154,7 +160,7 @@ describe("GroupApi", () => { ); jest.spyOn(GroupApiEndpoints, "callGroupCreateApi").mockReturnValue( - Future.of({ + Future.of({ groupPublicKey: "groupPublicKey", name: "groupName", id: "groupID", @@ -167,8 +173,10 @@ describe("GroupApi", () => { }) as any ); - GroupApi.create("groupID", "groupName", false, ["user2ID"], ["user3ID"], "user1ID").engage( - (e) => fail(e), + GroupApi.create("groupID", "groupName", false, ["user2ID"], ["user3ID"], "user1").engage( + (e) => { + throw e; + }, (result: any) => { expect(result).toEqual({ groupID: "groupID", @@ -188,7 +196,7 @@ describe("GroupApi", () => { "encryptedAccessKeys", false, "transformKeyGrantList", - "user1ID", + "user1", "groupName" ); } @@ -202,7 +210,7 @@ describe("GroupApi", () => { {id: "user2", userMasterPublicKey: TestUtils.getEmptyPublicKeyString()}, ]; jest.spyOn(GroupOperations, "groupCreate").mockReturnValue( - Future.of({ + Future.of({ encryptedAccessKeys: [], groupPublicKey: TestUtils.getEmptyPublicKeyString(), transformKeyGrantList: [], @@ -210,10 +218,12 @@ describe("GroupApi", () => { ); jest.spyOn(UserApiEndpoints, "callUserKeyListApi"); - jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: userKeyList}) as any); + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: userKeyList}) as any); GroupApi.create("groupID", "private group", true, ["user1", "user1"], ["user1", "user1", "user2"], "user1").engage( - (e) => fail(e), + (e) => { + throw e; + }, () => { expect(UserApiEndpoints.callUserKeyListApi).toHaveBeenCalledWith(["user1, user2"]); expect(GroupOperations.groupCreate).toHaveBeenCalledWith( @@ -230,39 +240,43 @@ describe("GroupApi", () => { }); it("fails if memberList is sent and contains non existent user", () => { jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue( - Future.of({ - result: [{id: "user1ID", userMasterPublicKey: TestUtils.getEmptyPublicKeyString()}], + Future.of({ + result: [{id: "user1", userMasterPublicKey: TestUtils.getEmptyPublicKeyString()}], }) as any ); GroupApi.create("", "private group", false, ["user1", "user2"], []).engage( (e) => { - expect(e.message).toContain(["user2"]); + expect(e.message).toContain("user2"); expect(e.code).toEqual(ErrorCodes.GROUP_CREATE_WITH_MEMBERS_OR_ADMINS_FAILURE); }, - () => fail("Should not be able to create group with members if mamber list request contains non existent users") + () => { + throw new Error("Should not be able to create group with members if mamber list request contains non existent users"); + } ); }); it("fails if adminList is sent and contains non existent user", () => { jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue( - Future.of({ - result: [{id: "user1ID", userMasterPublicKey: TestUtils.getEmptyPublicKeyString()}], + Future.of({ + result: [{id: "user1", userMasterPublicKey: TestUtils.getEmptyPublicKeyString()}], }) as any ); GroupApi.create("", "private group", false, [], ["user1", "user2"]).engage( (e) => { - expect(e.message).toContain(["user2"]); + expect(e.message).toContain("user2"); expect(e.code).toEqual(ErrorCodes.GROUP_CREATE_WITH_MEMBERS_OR_ADMINS_FAILURE); }, - () => fail("Should not be able to create group with members if mamber list request contains non existent users") + () => { + throw new Error("Should not be able to create group with members if mamber list request contains non existent users"); + } ); }); it("if needsRotation is set to true callGroupCreateApi is called with needsRotation true", () => { ApiState.setCurrentUser(TestUtils.getFullUser()); ApiState.setDeviceAndSigningKeys(TestUtils.getEmptyKeyPair(), TestUtils.getSigningKeyPair()); jest.spyOn(GroupOperations, "groupCreate").mockReturnValue( - Future.of({ + Future.of({ encryptedAccessKeys: [], groupPublicKey: TestUtils.getEmptyPublicKeyString(), transformKeyGrantList: [], @@ -272,7 +286,9 @@ describe("GroupApi", () => { jest.spyOn(GroupApiEndpoints, "callGroupCreateApi"); GroupApi.create("groupID", "private group", true, [], ["alwaysOwner"]).engage( - (e) => fail(e), + (e) => { + throw e; + }, () => { expect(GroupApiEndpoints.callGroupCreateApi).toHaveBeenCalledWith( "groupID", @@ -298,7 +314,7 @@ describe("GroupApi", () => { ]; jest.spyOn(GroupApiEndpoints, "callGroupGetApi").mockReturnValue( - Future.of({ + Future.of({ groupMasterPublicKey: {x: "12", y: "23"}, groupID: "myGroup", encryptedPrivateKey: "encryptedPrivKey", @@ -307,17 +323,19 @@ describe("GroupApi", () => { currentKeyId: 1, }) as any ); - jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: userKeys}) as any); + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: userKeys}) as any); jest.spyOn(GroupOperations, "rotateGroupPrivateKeyAndEncryptToAdmins").mockReturnValue( - Future.of({ + Future.of({ encryptedAccessKeys: ["encryptedAccessKey1", "encryptedAccessKey2"], augmentationFactor: new Uint8Array(32), }) as any ); - jest.spyOn(GroupApiEndpoints, "callGroupPrivateKeyUpdateApi").mockReturnValue(Future.of({needsRotation: false}) as any); + jest.spyOn(GroupApiEndpoints, "callGroupPrivateKeyUpdateApi").mockReturnValue(Future.of({needsRotation: false}) as any); GroupApi.rotateGroupPrivateKey("myGroup").engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (result) => { expect(result).toEqual({ needsRotation: false, @@ -345,23 +363,25 @@ describe("GroupApi", () => { it("return an error if the user requesting the rotation is not an admin of the group", () => { ApiState.setCurrentUser(TestUtils.getFullUser()); ApiState.setDeviceAndSigningKeys(TestUtils.getEmptyKeyPair(), TestUtils.getSigningKeyPair()); - jest.spyOn(GroupApiEndpoints, "callGroupGetApi").mockReturnValue(Future.of({groupID: "33", permissions: []}) as any); - jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: ["key1", "key2"]}) as any); + jest.spyOn(GroupApiEndpoints, "callGroupGetApi").mockReturnValue(Future.of({groupID: "33", permissions: []}) as any); + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: ["key1", "key2"]}) as any); GroupApi.rotateGroupPrivateKey("notYourGroup").engage( (e) => { expect(e.message).toContain(["Current user is not authorized to rotate this groups private key as they are not a group administrator."]); expect(e.code).toEqual(ErrorCodes.GROUP_ROTATE_PRIVATE_KEY_NOT_ADMIN_FAILURE); }, - () => fail("Should not be able to rotate the group private key if the requesting user is not an admin") + () => { + throw new Error("Should not be able to rotate the group private key if the requesting user is not an admin"); + } ); }); }); describe("update", () => { it("makes request to API and maps result to expected object", () => { - spyOn(GroupApiEndpoints, "callGroupUpdateApi").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "callGroupUpdateApi").mockReturnValue( + Future.of({ id: "88", name: "new name", permissions: ["admin"], @@ -371,7 +391,9 @@ describe("GroupApi", () => { ); GroupApi.update("88", "new name").engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (result) => { expect(result).toEqual({ groupID: "88", @@ -396,8 +418,8 @@ describe("GroupApi", () => { ]; const signature = new Uint8Array(32); - spyOn(GroupApiEndpoints, "callGroupGetApi").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "callGroupGetApi").mockReturnValue( + Future.of({ groupMasterPublicKey: {x: "12", y: "23"}, groupID: "32", encryptedPrivateKey: "encryptedPrivKey", @@ -405,19 +427,21 @@ describe("GroupApi", () => { adminIds: ["id1"], }) ); - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue(Future.of({result: userKeys})); - spyOn(GroupOperations, "encryptGroupPrivateKeyToList").and.returnValue( - Future.of({encryptedAccessKey: ["encryptedAccessKey1", "encryptedAccessKey2"], signature}) + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: userKeys})); + jest.spyOn(GroupOperations, "encryptGroupPrivateKeyToList").mockReturnValue( + Future.of({encryptedAccessKey: ["encryptedAccessKey1", "encryptedAccessKey2"], signature}) ); - spyOn(GroupApiEndpoints, "callAddAdminsApi").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "callAddAdminsApi").mockReturnValue( + Future.of({ succeededIds: [{userId: "user1"}, {userId: "user2"}], failedIds: [{userId: "12", errorMessage: "does not exist"}], }) ); GroupApi.addAdmins("33", ["user1", "user2"]).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (result) => { expect(result).toEqual({ succeeded: ["user1", "user2"], @@ -443,14 +467,16 @@ describe("GroupApi", () => { }); it("returns list of failures when no users entered exist", () => { - spyOn(GroupApiEndpoints, "callGroupGetApi").and.returnValue( - Future.of({groupID: "32", encryptedPrivateKey: "encryptedPrivKey", permissions: ["admin", "member"]}) + jest.spyOn(GroupApiEndpoints, "callGroupGetApi").mockReturnValue( + Future.of({groupID: "32", encryptedPrivateKey: "encryptedPrivKey", permissions: ["admin", "member"]}) ); - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue(Future.of({result: []})); - spyOn(GroupOperations, "encryptGroupPrivateKeyToList"); + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: []})); + jest.spyOn(GroupOperations, "encryptGroupPrivateKeyToList"); GroupApi.addAdmins("33", ["user1", "user2"]).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (result: any) => { expect(result).toEqual({ succeeded: [], @@ -468,28 +494,32 @@ describe("GroupApi", () => { }); it("fails if the group get response doesnt return an encrypted private key, indicating the user is not a group admin", () => { - spyOn(GroupApiEndpoints, "callGroupGetApi").and.returnValue(Future.of({groupID: "33", permissions: []})); - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue(Future.of({result: ["key1", "key2"]})); + jest.spyOn(GroupApiEndpoints, "callGroupGetApi").mockReturnValue(Future.of({groupID: "33", permissions: []})); + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: ["key1", "key2"]})); GroupApi.addAdmins("33", ["user1", "user2"]).engage( (e) => { - expect(e.message).toBeString(); + expect(e.message).toEqual(expect.stringContaining("")); expect(e.code).toBeNumber(); }, - () => fail("Should not be able to add members when user is not an admin and GET does not return an encrypted private key") + () => { + throw new Error("Should not be able to add members when user is not an admin and GET does not return an encrypted private key"); + } ); }); it("fails if the group get response only says the current user is a member and not an admin", () => { - spyOn(GroupApiEndpoints, "callGroupGetApi").and.returnValue(Future.of({groupID: "61", permissions: ["user"]})); - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue(Future.of({result: ["key1", "key2"]})); + jest.spyOn(GroupApiEndpoints, "callGroupGetApi").mockReturnValue(Future.of({groupID: "61", permissions: ["user"]})); + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: ["key1", "key2"]})); GroupApi.addAdmins("61", ["user1", "user2"]).engage( (e) => { - expect(e.message).toBeString(); + expect(e.message).toEqual(expect.stringContaining("")); expect(e.code).toBeNumber(); }, - () => fail("Should not be able to add members when user is not an admin and GET does not return an encrypted private key") + () => { + throw new Error("Should not be able to add members when user is not an admin and GET does not return an encrypted private key"); + } ); }); @@ -499,20 +529,22 @@ describe("GroupApi", () => { {id: "id2", userMasterPublicKey: {x: "key2"}}, ]; - spyOn(GroupApiEndpoints, "callGroupGetApi").and.returnValue( - Future.of({groupID: "32", encryptedPrivateKey: "encryptedPrivKey", permissions: ["admin", "member"], adminIds: ["id1"]}) + jest.spyOn(GroupApiEndpoints, "callGroupGetApi").mockReturnValue( + Future.of({groupID: "32", encryptedPrivateKey: "encryptedPrivKey", permissions: ["admin", "member"], adminIds: ["id1"]}) ); - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue(Future.of({result: userKeys})); - spyOn(GroupOperations, "encryptGroupPrivateKeyToList").and.returnValue(Future.of(["encryptedAccessKey1", "encryptedAccessKey2"])); - spyOn(GroupApiEndpoints, "callAddAdminsApi").and.returnValue( - Future.of({ + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: userKeys})); + jest.spyOn(GroupOperations, "encryptGroupPrivateKeyToList").mockReturnValue(Future.of(["encryptedAccessKey1", "encryptedAccessKey2"])); + jest.spyOn(GroupApiEndpoints, "callAddAdminsApi").mockReturnValue( + Future.of({ succeededIds: [{userId: "id1"}, {userId: "id2"}], failedIds: [{userId: "id3", errorMessage: "does not exist"}], }) ); GroupApi.addAdmins("33", ["id1", "id2", "id3", "id4"]).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (result) => { expect(result).toEqual({ succeeded: ["id1", "id2"], @@ -528,8 +560,8 @@ describe("GroupApi", () => { describe("removeAdmins", () => { it("invokes group admin remove API and maps result correctly", () => { - spyOn(GroupApiEndpoints, "callRemoveAdminsApi").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "callRemoveAdminsApi").mockReturnValue( + Future.of({ succeededIds: [{userId: "88"}, {userId: "13"}], failedIds: [ {userId: "12", errorMessage: "does not exist"}, @@ -539,7 +571,9 @@ describe("GroupApi", () => { ); GroupApi.removeAdmins("3235", ["88", "13", "12", "33"]).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (result) => { expect(result).toEqual({ succeeded: ["88", "13"], @@ -553,8 +587,8 @@ describe("GroupApi", () => { }); it("includes list of users in failures if the arent included in response", () => { - spyOn(GroupApiEndpoints, "callRemoveAdminsApi").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "callRemoveAdminsApi").mockReturnValue( + Future.of({ succeededIds: [{userId: "88"}], failedIds: [ {userId: "12", errorMessage: "does not exist"}, @@ -564,7 +598,9 @@ describe("GroupApi", () => { ); GroupApi.removeAdmins("3235", ["88", "13", "12", "33"]).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (result) => { expect(result).toEqual({ succeeded: ["88"], @@ -589,8 +625,8 @@ describe("GroupApi", () => { ]; const signature = new Uint8Array(32); - spyOn(GroupApiEndpoints, "callGroupGetApi").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "callGroupGetApi").mockReturnValue( + Future.of({ groupID: "32", encryptedPrivateKey: "encryptedPrivKey", groupMasterPublicKey: {x: "12", y: "23"}, @@ -598,19 +634,21 @@ describe("GroupApi", () => { adminIds: ["id1"], }) ); - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue(Future.of({result: userKeys})); - spyOn(GroupApiEndpoints, "callAddMembersApi").and.returnValue( - Future.of({ + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: userKeys})); + jest.spyOn(GroupApiEndpoints, "callAddMembersApi").mockReturnValue( + Future.of({ succeededIds: [{userId: "user1"}, {userId: "user2"}], failedIds: [{userId: "12", errorMessage: "does not exist"}], }) ); - spyOn(GroupOperations, "generateGroupTransformKeyToList").and.returnValue( - Future.of({transformKeyGrant: ["transformKey1", "transformKey2"], signature}) + jest.spyOn(GroupOperations, "generateGroupTransformKeyToList").mockReturnValue( + Future.of({transformKeyGrant: ["transformKey1", "transformKey2"], signature}) ); GroupApi.addMembers("61", ["user1", "user2"]).engage( - (e) => fail(e), + (e) => { + throw e; + }, (result: any) => { expect(result).toEqual({ succeeded: ["user1", "user2"], @@ -638,14 +676,16 @@ describe("GroupApi", () => { }); it("fails fast if none of the requested members exist", (done) => { - spyOn(GroupApiEndpoints, "callGroupGetApi").and.returnValue( - Future.of({groupID: "32", encryptedPrivateKey: "encryptedPrivKey", permissions: ["admin", "member"]}) + jest.spyOn(GroupApiEndpoints, "callGroupGetApi").mockReturnValue( + Future.of({groupID: "32", encryptedPrivateKey: "encryptedPrivKey", permissions: ["admin", "member"]}) ); - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue(Future.of({result: []})); - spyOn(GroupOperations, "generateGroupTransformKeyToList"); + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: []})); + jest.spyOn(GroupOperations, "generateGroupTransformKeyToList"); GroupApi.addMembers("61", ["user1", "user2"]).engage( - (e) => fail(e), + (e) => { + throw e; + }, (result: any) => { expect(result).toEqual({ succeeded: [], @@ -664,28 +704,32 @@ describe("GroupApi", () => { }); it("fails if the group get response doesnt return an encrypted private key, indicating the user is not a group admin", () => { - spyOn(GroupApiEndpoints, "callGroupGetApi").and.returnValue(Future.of({groupID: "32", permissions: []})); - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue(Future.of({result: ["key1", "key2"]})); + jest.spyOn(GroupApiEndpoints, "callGroupGetApi").mockReturnValue(Future.of({groupID: "32", permissions: []})); + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: ["key1", "key2"]})); GroupApi.addMembers("61", ["user1", "user2"]).engage( (e) => { - expect(e.message).toBeString(); + expect(e.message).toEqual(expect.stringContaining("")); expect(e.code).toBeNumber(); }, - () => fail("Should not be able to add members when user is not an admin and GET does not return an encrypted private key") + () => { + throw new Error("Should not be able to add members when user is not an admin and GET does not return an encrypted private key"); + } ); }); it("fails if the group get response only indicates that the user is a member and not an admin", () => { - spyOn(GroupApiEndpoints, "callGroupGetApi").and.returnValue(Future.of({groupID: "32", permissions: ["user"]})); - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue(Future.of({result: ["key1", "key2"]})); + jest.spyOn(GroupApiEndpoints, "callGroupGetApi").mockReturnValue(Future.of({groupID: "32", permissions: ["user"]})); + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: ["key1", "key2"]})); GroupApi.addMembers("61", ["user1", "user2"]).engage( (e) => { - expect(e.message).toBeString(); + expect(e.message).toEqual(expect.stringContaining("")); expect(e.code).toBeNumber(); }, - () => fail("Should not be able to add members when user is not an admin and GET does not return an encrypted private key") + () => { + throw new Error("Should not be able to add members when user is not an admin and GET does not return an encrypted private key"); + } ); }); @@ -695,20 +739,22 @@ describe("GroupApi", () => { {id: "id2", userMasterPublicKey: {x: "key2"}}, ]; - spyOn(GroupApiEndpoints, "callGroupGetApi").and.returnValue( - Future.of({groupID: "32", encryptedPrivateKey: "encryptedPrivKey", permissions: ["admin", "member"], adminIds: ["id1"]}) + jest.spyOn(GroupApiEndpoints, "callGroupGetApi").mockReturnValue( + Future.of({groupID: "32", encryptedPrivateKey: "encryptedPrivKey", permissions: ["admin", "member"], adminIds: ["id1"]}) ); - spyOn(UserApiEndpoints, "callUserKeyListApi").and.returnValue(Future.of({result: userKeys})); - spyOn(GroupApiEndpoints, "callAddMembersApi").and.returnValue( - Future.of({ + jest.spyOn(UserApiEndpoints, "callUserKeyListApi").mockReturnValue(Future.of({result: userKeys})); + jest.spyOn(GroupApiEndpoints, "callAddMembersApi").mockReturnValue( + Future.of({ succeededIds: [{userId: "user1"}], failedIds: [{userId: "12", errorMessage: "does not exist"}], }) ); - spyOn(GroupOperations, "generateGroupTransformKeyToList").and.returnValue(Future.of(["transformKey1", "transformKey2"])); + jest.spyOn(GroupOperations, "generateGroupTransformKeyToList").mockReturnValue(Future.of(["transformKey1", "transformKey2"])); GroupApi.addMembers("61", ["user1", "user2", "12"]).engage( - (e) => fail(e), + (e) => { + throw e; + }, (result: any) => { expect(result).toEqual({ succeeded: ["user1"], @@ -724,15 +770,17 @@ describe("GroupApi", () => { describe("removeMembers", () => { it("invokes API with list and maps result correctly", (done) => { - spyOn(GroupApiEndpoints, "callRemoveMembersApi").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "callRemoveMembersApi").mockReturnValue( + Future.of({ succeededIds: [{userId: "user1"}, {userId: "user2"}], failedIds: [{userId: "12", errorMessage: "does not exist"}], }) ); GroupApi.removeMembers("61", ["user1", "user2"]).engage( - (e) => fail(e), + (e) => { + throw e; + }, (result: any) => { expect(result).toEqual({ succeeded: ["user1", "user2"], @@ -746,8 +794,8 @@ describe("GroupApi", () => { }); it("includes list of users in failures if the arent included in response", () => { - spyOn(GroupApiEndpoints, "callRemoveMembersApi").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "callRemoveMembersApi").mockReturnValue( + Future.of({ succeededIds: [{userId: "88"}], failedIds: [ {userId: "12", errorMessage: "does not exist"}, @@ -757,7 +805,9 @@ describe("GroupApi", () => { ); GroupApi.removeMembers("3235", ["88", "13", "12", "33"]).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (result) => { expect(result).toEqual({ succeeded: ["88"], @@ -775,15 +825,17 @@ describe("GroupApi", () => { describe("removeSelfAsMember", () => { it("invokes API with current user and maps result correctly", (done) => { ApiState.setCurrentUser(TestUtils.getFullUser()); - spyOn(GroupApiEndpoints, "callRemoveMembersApi").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "callRemoveMembersApi").mockReturnValue( + Future.of({ succeededIds: [{userId: "user-10"}], failedIds: [], }) ); GroupApi.removeSelfAsMember("61").engage( - (e) => fail(e), + (e) => { + throw e; + }, (result) => { expect(result).toEqual("user-10"); @@ -795,8 +847,8 @@ describe("GroupApi", () => { it("returns expected error code if group remove API returns any failure results", (done) => { ApiState.setCurrentUser(TestUtils.getFullUser()); - spyOn(GroupApiEndpoints, "callRemoveMembersApi").and.returnValue( - Future.of({ + jest.spyOn(GroupApiEndpoints, "callRemoveMembersApi").mockReturnValue( + Future.of({ succeededIds: [], failedIds: [{userId: "user-10", error: "failed"}], }) @@ -807,17 +859,19 @@ describe("GroupApi", () => { expect(e.code).toEqual(ErrorCodes.GROUP_REMOVE_SELF_REQUEST_FAILURE); done(); }, - () => fail("Remove self should not succeed if there were any failures") + () => done("Remove self should not succeed if there were any failures") ); }); }); describe("deleteGroup", () => { it("invokes API to delete the group", (done) => { - spyOn(GroupApiEndpoints, "callGroupDeleteApi").and.returnValue(Future.of({id: "3325"})); + jest.spyOn(GroupApiEndpoints, "callGroupDeleteApi").mockReturnValue(Future.of({id: "3325"})); GroupApi.deleteGroup("3325").engage( - (e) => fail(e), + (e) => { + throw e; + }, (result) => { expect(result).toEqual({id: "3325"} as any); done(); diff --git a/src/frame/sdk/tests/GroupOperations.test.ts b/src/frame/sdk/tests/GroupOperations.test.ts index 2f32769..18707d5 100644 --- a/src/frame/sdk/tests/GroupOperations.test.ts +++ b/src/frame/sdk/tests/GroupOperations.test.ts @@ -6,11 +6,13 @@ import * as TestUtils from "../../../tests/TestUtils"; describe("GroupOperations", () => { describe("groupCreate", () => { it("sends worker message to create group", () => { - spyOn(WorkerMediator, "sendMessage").and.returnValue(Future.of({message: "new group"})); + jest.spyOn(WorkerMediator, "sendMessage").mockReturnValue(Future.of({message: "new group"})); const signingKeys = TestUtils.getSigningKeyPair(); GroupOperations.groupCreate(signingKeys, [], []).engage( - (e) => fail(e), + (e) => { + throw e; + }, (result: any) => { expect(result).toEqual("new group"); @@ -35,13 +37,15 @@ describe("GroupOperations", () => { const signingKeys = TestUtils.getSigningKeyPair(); jest.spyOn(WorkerMediator, "sendMessage").mockReturnValue( - Future.of({ + Future.of({ message: {encryptedAccessKeys: "accessKey", augmentationFactor: "augmentationFactor"}, }) as any ); GroupOperations.rotateGroupPrivateKeyAndEncryptToAdmins(encryptedGroupKey, adminList, userPrivateMasterKey, signingKeys).engage( - (e) => fail(e), + (e) => { + throw e; + }, (result) => { expect(result).toEqual({encryptedAccessKeys: "accessKey", augmentationFactor: "augmentationFactor"}); expect(WorkerMediator.sendMessage).toHaveBeenCalledWith({ @@ -60,7 +64,7 @@ describe("GroupOperations", () => { describe("encryptGroupPrivateKeyToList", () => { it("sends message to worker to encrypt group encrypte private key to list", () => { - spyOn(WorkerMediator, "sendMessage").and.returnValue(Future.of({message: "encrypted user keys"})); + jest.spyOn(WorkerMediator, "sendMessage").mockReturnValue(Future.of({message: "encrypted user keys"})); const userPrivateKey = new Uint8Array(32); const userList = [{id: "user-35", masterPublicKey: {x: "", y: ""}}]; const encryptedGroupPrivateKey = TestUtils.getTransformedSymmetricKey(); @@ -68,7 +72,9 @@ describe("GroupOperations", () => { const groupPublicKey = TestUtils.getEmptyPublicKeyString(); GroupOperations.encryptGroupPrivateKeyToList(encryptedGroupPrivateKey, groupPublicKey, "groupID", userList, userPrivateKey, signingKeys).engage( - (e) => fail(e), + (e) => { + throw e; + }, (result: any) => { expect(result).toEqual("encrypted user keys"); @@ -90,7 +96,7 @@ describe("GroupOperations", () => { describe("generateGroupTransformKeyToList", () => { it("sends message to worker to generate transform key to list", () => { - spyOn(WorkerMediator, "sendMessage").and.returnValue(Future.of({message: "transformed user keys"})); + jest.spyOn(WorkerMediator, "sendMessage").mockReturnValue(Future.of({message: "transformed user keys"})); const userPrivateKey = new Uint8Array(32); const userList = [{id: "user-35", masterPublicKey: {x: "", y: ""}}]; const encryptedGroupPrivateKey = TestUtils.getTransformedSymmetricKey(); @@ -98,7 +104,9 @@ describe("GroupOperations", () => { const groupPublicKey = TestUtils.getEmptyPublicKeyString(); GroupOperations.generateGroupTransformKeyToList(encryptedGroupPrivateKey, groupPublicKey, "GroupID", userList, userPrivateKey, signingKeys).engage( - (e) => fail(e), + (e) => { + throw e; + }, (result: any) => { expect(result).toEqual("transformed user keys"); diff --git a/src/frame/sdk/tests/SearchApi.test.ts b/src/frame/sdk/tests/SearchApi.test.ts index 76fa4c7..ac2bcb8 100644 --- a/src/frame/sdk/tests/SearchApi.test.ts +++ b/src/frame/sdk/tests/SearchApi.test.ts @@ -9,14 +9,16 @@ describe("SearchApi", () => { describe("createBlindSearchIndex", () => { it("generates a random salt, encrypts it, and returns unmanaged doc", () => { jest.spyOn(DocAdvancedApi, "encrypt").mockReturnValue( - Future.of({ + Future.of({ document: "encDoc", edeks: ["edek1", "edek2"], } as any) ); SearchApi.createBlindSearchIndex("mySearchIndexGroup").engage( - (e) => fail(e), + (e) => { + throw e; + }, (res) => { expect(res).toEqual({ searchIndexEncryptedSalt: "encDoc", @@ -36,7 +38,9 @@ describe("SearchApi", () => { (e) => { expect(e.code).toEqual(ErrorCodes.SEARCH_CREATE_INDEX_FAILURE); }, - () => fail("Should not succeed when doc encrypt fails") + () => { + throw new Error("Should not succeed when doc encrypt fails"); + } ); }); }); @@ -44,14 +48,16 @@ describe("SearchApi", () => { describe("initializeBlindSearchIndex", () => { it("decrypts the provided salt, generates a random ID and stores the ID", () => { jest.spyOn(DocAdvancedApi, "decryptWithProvidedEdeks").mockReturnValue( - Future.of({ + Future.of({ data: new Uint8Array([82, 32, 87, 109, 139]), accessVia: {type: "group", id: "mySearchIndexGroup"}, }) ); SearchApi.initializeBlindSearchIndex(new Uint8Array([99, 193]), new Uint8Array([135, 166])).engage( - (e) => fail(e), + (e) => { + throw e; + }, (searchIndexId) => { expect(searchIndexId).toEqual(expect.any(String)); expect(searchIndexId).toHaveLength(16); @@ -69,7 +75,9 @@ describe("SearchApi", () => { (e) => { expect(e.code).toEqual(ErrorCodes.SEARCH_INIT_INDEX_FAILURE); }, - () => fail("Initialize should fail when salt decrypt fails") + () => { + throw new Error("Initialize should fail when salt decrypt fails"); + } ); }); }); @@ -81,23 +89,27 @@ describe("SearchApi", () => { expect(e.message).toContain("not yet been initialized"); expect(e.code).toEqual(ErrorCodes.SEARCH_TOKENIZE_DATA_FAILURE); }, - () => fail("Should not be able to tokenize data without initializatin") + () => { + throw new Error("Should not be able to tokenize data without initialization"); + } ); }); it("sends message to frame to tokenize data", () => { jest.spyOn(DocAdvancedApi, "decryptWithProvidedEdeks").mockReturnValue( - Future.of({ + Future.of({ data: new Uint8Array([82, 32, 87, 109, 139]), accessVia: {type: "group", id: "mySearchIndexGroup"}, }) ); - spyOn(WorkerMediator, "sendMessage").and.returnValue(Future.of({message: "tokenized data"})); + jest.spyOn(WorkerMediator, "sendMessage").mockReturnValue(Future.of({message: "tokenized data"})); SearchApi.initializeBlindSearchIndex(new Uint8Array([33]), new Uint8Array([32])) .flatMap((searchIndexId) => SearchApi.tokenizeData(searchIndexId, "search data", "partition")) .engage( - (e) => fail(e), + (e) => { + throw e; + }, (result: any) => { expect(result).toEqual("tokenized data"); expect(WorkerMediator.sendMessage).toHaveBeenCalledWith({ @@ -121,23 +133,27 @@ describe("SearchApi", () => { expect(e.message).toContain("not yet been initialized"); expect(e.code).toEqual(ErrorCodes.SEARCH_TOKENIZE_QUERY_FAILURE); }, - () => fail("Should not be able to tokenize query without initializatin") + () => { + throw new Error("Should not be able to tokenize query without initialization"); + } ); }); it("sends message to frame to tokenize query", () => { jest.spyOn(DocAdvancedApi, "decryptWithProvidedEdeks").mockReturnValue( - Future.of({ + Future.of({ data: new Uint8Array([82, 32, 87, 109, 139]), accessVia: {type: "group", id: "mySearchIndexGroup"}, }) ); - spyOn(WorkerMediator, "sendMessage").and.returnValue(Future.of({message: "tokenized query"})); + jest.spyOn(WorkerMediator, "sendMessage").mockReturnValue(Future.of({message: "tokenized query"})); SearchApi.initializeBlindSearchIndex(new Uint8Array([33]), new Uint8Array([32])) .flatMap((searchIndexId) => SearchApi.tokenizeQuery(searchIndexId, "search query", "partition")) .engage( - (e) => fail(e), + (e) => { + throw e; + }, (result: any) => { expect(result).toEqual("tokenized query"); expect(WorkerMediator.sendMessage).toHaveBeenCalledWith({ @@ -156,10 +172,12 @@ describe("SearchApi", () => { describe("transliterateString", () => { it("sends message to frame to transliterate string", () => { - spyOn(WorkerMediator, "sendMessage").and.returnValue(Future.of({message: "transliterated string"})); + jest.spyOn(WorkerMediator, "sendMessage").mockReturnValue(Future.of({message: "transliterated string"})); SearchApi.transliterateString("my string").engage( - (e) => fail(e), + (e) => { + throw e; + }, (result) => { expect(result).toEqual("transliterated string"); expect(WorkerMediator.sendMessage).toHaveBeenCalledWith({ diff --git a/src/frame/sdk/tests/UserApi.test.ts b/src/frame/sdk/tests/UserApi.test.ts index 5dbb2a3..f7d47fc 100644 --- a/src/frame/sdk/tests/UserApi.test.ts +++ b/src/frame/sdk/tests/UserApi.test.ts @@ -8,15 +8,17 @@ import * as TestUtils from "../../../tests/TestUtils"; describe("UserApi", () => { describe("deauthorizeDevice", () => { it("calls API and clears items from expected key", () => { - spyOn(UserApiEndpoints, "callUserCurrentDeviceDelete").and.returnValue(Future.of({id: 33})); + jest.spyOn(UserApiEndpoints, "callUserCurrentDeviceDelete").mockReturnValue(Future.of({id: 33})); ApiState.setCurrentUser(TestUtils.getFullUser()); expect(ApiState.user()).toEqual(TestUtils.getFullUser()); - spyOn(Storage.prototype, "removeItem"); + jest.spyOn(Storage.prototype, "removeItem"); UserApi.deauthorizeDevice().engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (result) => { expect(UserApiEndpoints.callUserCurrentDeviceDelete).toHaveBeenCalledWith(); - expect(result).toBeTrue(); + expect(result).toBe(true); expect(localStorage.removeItem).toHaveBeenCalledWith("1-1:user-10-icldaspkn"); expect(ApiState.user()).toBeUndefined(); } @@ -24,14 +26,16 @@ describe("UserApi", () => { }); it("clears items from local storage even if request fails", () => { - spyOn(UserApiEndpoints, "callUserCurrentDeviceDelete").and.returnValue(Future.reject("device delete")); + jest.spyOn(UserApiEndpoints, "callUserCurrentDeviceDelete").mockReturnValue(Future.reject("device delete")); ApiState.setCurrentUser(TestUtils.getFullUser()); expect(ApiState.user()).toEqual(TestUtils.getFullUser()); - spyOn(Storage.prototype, "removeItem"); + jest.spyOn(Storage.prototype, "removeItem"); UserApi.deauthorizeDevice().engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (result) => { - expect(result).toBeFalse(); + expect(result).toBe(false); expect(localStorage.removeItem).toHaveBeenCalledWith("1-1:user-10-icldaspkn"); expect(ApiState.user()).toBeUndefined(); } @@ -42,16 +46,16 @@ describe("UserApi", () => { describe("rotateUserMasterKey", () => { it("sends message to worker and takes result and passes it to call user key update endpoint", (done) => { ApiState.setCurrentUser(TestUtils.getFullUser()); - spyOn(UserApiEndpoints, "callUserKeyUpdateApi").and.returnValue(Future.of("user key update result")); - spyOn(WorkerMediator, "sendMessage").and.returnValue( - Future.of({ + jest.spyOn(UserApiEndpoints, "callUserKeyUpdateApi").mockReturnValue(Future.of("user key update result")); + jest.spyOn(WorkerMediator, "sendMessage").mockReturnValue( + Future.of({ message: {newEncryptedPrivateUserKey: "newEncryptedPrivateUserKey", augmentationFactor: "augmentationFactor"}, }) ); - spyOn(ApiState, "setEncryptedPrivateUserKey"); + jest.spyOn(ApiState, "setEncryptedPrivateUserKey"); UserApi.rotateUserMasterKey("current").engage( - (e) => fail(e.message), + (e) => done(e), (result: any) => { expect(result).toEqual("user key update result"); expect(ApiState.setEncryptedPrivateUserKey).toHaveBeenCalledWith("newEncryptedPrivateUserKey"); @@ -73,16 +77,16 @@ describe("UserApi", () => { it("sends message to worker and takes result and passes it to call user update endpoint", (done) => { ApiState.setCurrentUser(TestUtils.getFullUser()); ApiState.setDeviceAndSigningKeys(TestUtils.getEmptyKeyPair(), TestUtils.getSigningKeyPair()); - spyOn(UserApiEndpoints, "callUserUpdateApi").and.returnValue(Future.of("user update result")); - spyOn(WorkerMediator, "sendMessage").and.returnValue( - Future.of({ + jest.spyOn(UserApiEndpoints, "callUserUpdateApi").mockReturnValue(Future.of("user update result")); + jest.spyOn(WorkerMediator, "sendMessage").mockReturnValue( + Future.of({ message: {encryptedPrivateUserKey: "encrypted private user key"}, }) ); - spyOn(ApiState, "setEncryptedPrivateUserKey"); + jest.spyOn(ApiState, "setEncryptedPrivateUserKey"); UserApi.changeUsersPasscode("current", "new").engage( - (e) => fail(e.message), + (e) => done(e), (result: any) => { expect(result).toEqual("user update result"); expect(UserApiEndpoints.callUserUpdateApi).toHaveBeenCalledWith("encrypted private user key"); diff --git a/src/frame/tests/ApiRequest.test.ts b/src/frame/tests/ApiRequest.test.ts index 1df0d13..124d68b 100644 --- a/src/frame/tests/ApiRequest.test.ts +++ b/src/frame/tests/ApiRequest.test.ts @@ -14,9 +14,9 @@ describe("ApiRequest", () => { }); describe("getRequestSignature", () => { - it("sends message to worker and maps response to auth header string", () => { - spyOn(WorkerMediator, "sendMessage").and.returnValue( - Future.of({ + it("sends message to worker and maps response to auth header string", (done) => { + jest.spyOn(WorkerMediator, "sendMessage").mockReturnValue( + Future.of({ message: { userContextHeader: "context", requestHeaderSignature: "sig1", @@ -26,7 +26,7 @@ describe("ApiRequest", () => { ); ApiRequest.getRequestSignature("/path/to/resource", "GET", "bodyparts").engage( - (e) => fail(e.message), + (e) => done(e), (signature) => { expect(signature).toEqual({ userContextHeader: "context", @@ -44,6 +44,7 @@ describe("ApiRequest", () => { body: "bodyparts", }, }); + done(); } ); }); @@ -52,15 +53,15 @@ describe("ApiRequest", () => { describe("fetchJson", () => { beforeAll(() => { if (typeof window.fetch === "function") { - spyOn(window, "fetch"); + jest.spyOn(window, "fetch"); } else { - window.fetch = jasmine.createSpy("fetch"); + window.fetch = jest.fn(); } }); it("invokes window.fetch with expected parameters", () => { const fetchFuture = ApiRequest.fetchJson("api/method", -1, {method: "POST"}, "auth header"); - fetchFuture.engage(jasmine.createSpy("fetchFailure"), jasmine.createSpy("fetchSuccess")); + fetchFuture.engage(jest.fn(), jest.fn()); expect(window.fetch).toHaveBeenCalledWith("/api/1/api/method", { method: "POST", @@ -70,7 +71,7 @@ describe("ApiRequest", () => { it("invokes window.fetch with octet-stream content type if body is bytes", () => { const fetchFuture = ApiRequest.fetchJson("api/method", -1, {method: "POST", body: new Uint8Array([])}, "auth header"); - fetchFuture.engage(jasmine.createSpy("fetchFailure"), jasmine.createSpy("fetchSuccess")); + fetchFuture.engage(jest.fn(), jest.fn()); expect(window.fetch).toHaveBeenCalledWith("/api/1/api/method", { method: "POST", @@ -80,7 +81,7 @@ describe("ApiRequest", () => { }); it("converts failed request to SDK error", (done) => { - (window.fetch as jasmine.Spy).and.callFake(() => Promise.reject(new Error("forced error"))); + (window.fetch as unknown as jest.SpyInstance).mockImplementation(() => Promise.reject(new Error("forced error"))); ApiRequest.fetchJson("api/method", -1, {method: "POST"}, "auth header").engage( (error) => { @@ -88,12 +89,12 @@ describe("ApiRequest", () => { expect(error.code).toEqual(-1); done(); }, - () => fail("success method should not be called when fetch fails") + () => done("success method should not be called when fetch fails") ); }); it("converts failed request with JSON error into SDK Error", (done) => { - (window.fetch as jasmine.Spy).and.callFake(() => + (window.fetch as unknown as jest.SpyInstance).mockImplementation(() => Promise.resolve({ ok: false, statusText: "not good", @@ -107,12 +108,12 @@ describe("ApiRequest", () => { expect(error.code).toEqual(-1); done(); }, - () => fail("success method should not be called when fetch fails") + () => done("success method should not be called when fetch fails") ); }); - it("returns special failure error if request was rate limited", () => { - (window.fetch as jasmine.Spy).and.callFake(() => + it("returns special failure error if request was rate limited", (done) => { + (window.fetch as unknown as jest.SpyInstance).mockImplementation(() => Promise.resolve({ ok: false, status: 429, @@ -121,15 +122,16 @@ describe("ApiRequest", () => { ApiRequest.fetchJson("api/method", -1, {method: "POST"}, "auth header").engage( (error) => { - expect(error.message).toBeString(); + expect(error.message).toEqual(expect.stringContaining("")); expect(error.code).toEqual(ErrorCodes.REQUEST_RATE_LIMITED); + done(); }, - () => fail("success method should not be called when 429 error was recieved") + () => done("success method should not be called when 429 error was recieved") ); }); it("falls back to status text if response JSON is not in the expected format", (done) => { - (window.fetch as jasmine.Spy).and.callFake(() => + (window.fetch as unknown as jest.SpyInstance).mockImplementation(() => Promise.resolve({ ok: false, statusText: "not good", @@ -143,12 +145,12 @@ describe("ApiRequest", () => { expect(error.code).toEqual(-1); done(); }, - () => fail("success method should not be called when fetch fails") + () => done("success method should not be called when fetch fails") ); }); it("falls back to status text if response body cannot be JSON parsed", (done) => { - (window.fetch as jasmine.Spy).and.callFake(() => + (window.fetch as unknown as jest.SpyInstance).mockImplementation(() => Promise.resolve({ ok: false, statusText: "not good", @@ -162,15 +164,17 @@ describe("ApiRequest", () => { expect(error.code).toEqual(-1); done(); }, - () => fail("success method should not be called when fetch fails") + () => done("success method should not be called when fetch fails") ); }); it("returns empty object if request status is a 204", (done) => { - (window.fetch as jasmine.Spy).and.callFake(() => Promise.resolve({ok: true, status: 204})); + (window.fetch as unknown as jest.SpyInstance).mockImplementation(() => Promise.resolve({ok: true, status: 204})); ApiRequest.fetchJson("api/method", -1, {method: "POST"}, "auth header").engage( - (e) => fail(e), + (e) => { + throw e; + }, (response: any) => { expect(response).toBeUndefined(); done(); @@ -179,7 +183,7 @@ describe("ApiRequest", () => { }); it("falls back to hardcoded message text when response is success but JSON parsing fails", (done) => { - (window.fetch as jasmine.Spy).and.callFake(() => + (window.fetch as unknown as jest.SpyInstance).mockImplementation(() => Promise.resolve({ ok: true, status: 200, @@ -189,16 +193,16 @@ describe("ApiRequest", () => { ApiRequest.fetchJson("api/method", -1, {method: "POST"}, "auth header").engage( (error) => { - expect(error.message).toBeString(); + expect(error.message).toEqual(expect.stringContaining("")); expect(error.code).toEqual(-1); done(); }, - () => fail("success should not be invoked when JSON parsing fails") + () => done("success should not be invoked when JSON parsing fails") ); }); it("invokes response.json on result and maps data to result and response", (done) => { - (window.fetch as jasmine.Spy).and.callFake(() => + (window.fetch as unknown as jest.SpyInstance).mockImplementation(() => Promise.resolve({ ok: true, status: 200, @@ -207,7 +211,9 @@ describe("ApiRequest", () => { ); ApiRequest.fetchJson("api/method", -1, {method: "POST"}, "auth header").engage( - (e) => fail(e), + (e) => { + throw e; + }, (response: any) => { expect(response).toEqual({ foo: "bar", @@ -220,8 +226,8 @@ describe("ApiRequest", () => { describe("makeAuthorizedApiRequest", () => { it("calculates custom header signaturtes and auth signature", (done) => { - spyOn(WorkerMediator, "sendMessage").and.returnValue( - Future.of({ + jest.spyOn(WorkerMediator, "sendMessage").mockReturnValue( + Future.of({ message: { userContextHeader: "context", requestHeaderSignature: "sig1", @@ -230,7 +236,7 @@ describe("ApiRequest", () => { }) ); - (window.fetch as jasmine.Spy).and.callFake(() => + (window.fetch as unknown as jest.SpyInstance).mockImplementation(() => Promise.resolve({ ok: true, status: 204, @@ -239,7 +245,9 @@ describe("ApiRequest", () => { ); ApiRequest.makeAuthorizedApiRequest("api/method", -1, {headers: {foo: "bar"}, method: "POST"}).engage( - (e) => fail(e), + (e) => { + throw e; + }, () => { expect(window.fetch).toHaveBeenCalledWith("/api/1/api/method", { method: "POST", @@ -259,7 +267,7 @@ describe("ApiRequest", () => { describe("makeJwtApiRequest", () => { it("formats provided JWT to expected auth header", (done) => { - (window.fetch as jasmine.Spy).and.callFake(() => + (window.fetch as unknown as jest.SpyInstance).mockImplementation(() => Promise.resolve({ ok: true, status: 204, @@ -268,7 +276,9 @@ describe("ApiRequest", () => { ); ApiRequest.makeJwtApiRequest("api/method", -1, {method: "GET"}, "jwt").engage( - (e) => fail(e), + (e) => { + throw e; + }, () => { expect(window.fetch).toHaveBeenCalledWith("/api/1/api/method", { method: "GET", diff --git a/src/frame/tests/FrameMessenger.test.ts b/src/frame/tests/FrameMessenger.test.ts index f445b7c..2512335 100644 --- a/src/frame/tests/FrameMessenger.test.ts +++ b/src/frame/tests/FrameMessenger.test.ts @@ -3,7 +3,7 @@ import FrameMessenger from "../FrameMessenger"; describe("FrameMessenger", () => { describe("constructor", () => { it("adds event listener from parent frame", () => { - spyOn(window, "addEventListener"); + jest.spyOn(window, "addEventListener"); new FrameMessenger(() => null); expect(window.addEventListener).toHaveBeenCalledWith("message", expect.any(Function)); @@ -12,7 +12,7 @@ describe("FrameMessenger", () => { describe("setupMessagePort", () => { it("does nothing if message isnt what we expect", () => { - spyOn(window, "removeEventListener"); + jest.spyOn(window, "removeEventListener"); const messenger = new FrameMessenger(() => null); @@ -24,10 +24,10 @@ describe("FrameMessenger", () => { }); it("gets port, starts it up and clears window message event", () => { - spyOn(window, "removeEventListener"); + jest.spyOn(window, "removeEventListener"); const fauxPort = { - start: jasmine.createSpy("start"), - addEventListener: jasmine.createSpy("addEventListener"), + start: jest.fn(), + addEventListener: jest.fn(), }; const messenger = new FrameMessenger(() => null); @@ -41,26 +41,26 @@ describe("FrameMessenger", () => { describe("processMessageIntoFrame", () => { it("does nothing if not port is setup", () => { - const callbackMethod = jasmine.createSpy("callbackMethod"); + const callbackMethod = jest.fn(); const messenger = new FrameMessenger(callbackMethod); messenger.processMessageIntoFrame({data: {data: "mock data", replyID: 23}} as any); expect(callbackMethod).toHaveBeenCalledWith("mock data", expect.any(Function)); - const afterProcess = (callbackMethod as jasmine.Spy).calls.argsFor(0)[1]; + const afterProcess = (callbackMethod as unknown as jest.SpyInstance).mock.calls[0][1]; afterProcess("callback data"); }); it("posts message to port", () => { const fauxPort = { - postMessage: jasmine.createSpy("postMessage"), + postMessage: jest.fn(), }; - const callbackMethod = jasmine.createSpy("callbackMethod"); + const callbackMethod = jest.fn(); const messenger = new FrameMessenger(callbackMethod); (messenger as any).messagePort = fauxPort; messenger.processMessageIntoFrame({data: {data: "mock data", replyID: 23}} as any); expect(callbackMethod).toHaveBeenCalledWith("mock data", expect.any(Function)); - const afterProcess = (callbackMethod as jasmine.Spy).calls.argsFor(0)[1]; + const afterProcess = (callbackMethod as unknown as jest.SpyInstance).mock.calls[0][1]; afterProcess("callback data"); expect(fauxPort.postMessage).toHaveBeenCalledWith({replyID: 23, data: "callback data"}, []); @@ -68,14 +68,14 @@ describe("FrameMessenger", () => { it("maps over transfer list to get item buffers", () => { const fauxPort = { - postMessage: jasmine.createSpy("postMessage"), + postMessage: jest.fn(), }; - const callbackMethod = jasmine.createSpy("callbackMethod"); + const callbackMethod = jest.fn(); const messenger = new FrameMessenger(callbackMethod); (messenger as any).messagePort = fauxPort; messenger.processMessageIntoFrame({data: {data: "mock data", replyID: 23}} as any); - const afterProcess = (callbackMethod as jasmine.Spy).calls.argsFor(0)[1]; + const afterProcess = (callbackMethod as unknown as jest.SpyInstance).mock.calls[0][1]; afterProcess("callback data", [{buffer: "1"}, {buffer: "2"}]); expect(fauxPort.postMessage).toHaveBeenCalledWith({replyID: 23, data: "callback data"}, ["1", "2"]); diff --git a/src/frame/tests/FrameUtils.test.ts b/src/frame/tests/FrameUtils.test.ts index d85be63..63d6925 100644 --- a/src/frame/tests/FrameUtils.test.ts +++ b/src/frame/tests/FrameUtils.test.ts @@ -12,9 +12,9 @@ describe("FrameUtils", () => { const nonce = new Uint8Array([88, 93, 91]); FrameUtils.storeDeviceAndSigningKeys("30", 3, deviceKey, signingKey, nonce); const keys = localStorage.getItem("1-3:30-icldaspkn"); - expect(keys).toBeString(); + expect(keys).toEqual(expect.stringContaining("")); const decodeKeys = JSON.parse(keys as string); - expect(decodeKeys).toBeObject(); + expect(typeof decodeKeys).toBe("object"); expect(decodeKeys.deviceKey).toEqual("AAAAAAA="); expect(decodeKeys.signingKey).toEqual("AAAAAAAA"); expect(decodeKeys.nonce).toEqual("WF1b"); @@ -28,8 +28,10 @@ describe("FrameUtils", () => { it("fails when no value is set in local storage", () => { FrameUtils.getDeviceAndSigningKeys("30", 3).engage( - (e) => expect(e.message).toBeString(), - () => fail("Should fail when no keys are in local storage") + (e) => expect(e.message).toEqual(expect.stringContaining("")), + () => { + throw new Error("Should fail when no keys are in local storage"); + } ); }); @@ -37,8 +39,10 @@ describe("FrameUtils", () => { localStorage.setItem(`3:30-icldaspkn`, "{[nalka}[[];a"); FrameUtils.getDeviceAndSigningKeys("30", 3).engage( - (e) => expect(e.message).toBeString(), - () => fail("Should fail when no keys are in local storage") + (e) => expect(e.message).toEqual(expect.stringContaining("")), + () => { + throw new Error("Should fail when no keys are in local storage"); + } ); }); @@ -46,8 +50,10 @@ describe("FrameUtils", () => { localStorage.setItem(`3:30-icldaspkn`, '"foo"'); FrameUtils.getDeviceAndSigningKeys("30", 3).engage( - (e) => expect(e.message).toBeString(), - () => fail("Should fail when no keys are in local storage") + (e) => expect(e.message).toEqual(expect.stringContaining("")), + () => { + throw new Error("Should fail when no keys are in local storage"); + } ); }); @@ -55,8 +61,10 @@ describe("FrameUtils", () => { localStorage.setItem(`3:30-icldaspkn`, JSON.stringify({deviceKey: "foo"})); FrameUtils.getDeviceAndSigningKeys("30", 3).engage( - (e) => expect(e.message).toBeString(), - () => fail("Should fail when no keys are in local storage") + (e) => expect(e.message).toEqual(expect.stringContaining("")), + () => { + throw new Error("Should fail when no keys are in local storage"); + } ); }); @@ -64,8 +72,10 @@ describe("FrameUtils", () => { localStorage.setItem(`3:30-icldaspkn`, JSON.stringify({signingKey: "foo"})); FrameUtils.getDeviceAndSigningKeys("30", 3).engage( - (e) => expect(e.message).toBeString(), - () => fail("Should fail when no keys are in local storage") + (e) => expect(e.message).toEqual(expect.stringContaining("")), + () => { + throw new Error("Should fail when no keys are in local storage"); + } ); }); @@ -79,8 +89,10 @@ describe("FrameUtils", () => { ); FrameUtils.getDeviceAndSigningKeys("30", 3).engage( - (e) => expect(e.message).toBeString(), - () => fail("Should fail when no keys are in local storage") + (e) => expect(e.message).toEqual(expect.stringContaining("")), + () => { + throw new Error("Should fail when no keys are in local storage"); + } ); }); @@ -94,8 +106,10 @@ describe("FrameUtils", () => { ); FrameUtils.getDeviceAndSigningKeys("30", 3).engage( - (e) => expect(e.message).toBeString(), - () => fail("Should fail when no keys are in local storage") + (e) => expect(e.message).toEqual(expect.stringContaining("")), + () => { + throw new Error("Should fail when no keys are in local storage"); + } ); }); @@ -106,7 +120,9 @@ describe("FrameUtils", () => { FrameUtils.storeDeviceAndSigningKeys("30", 3, deviceKey, signingKey, nonce); FrameUtils.getDeviceAndSigningKeys("30", 3).engage( - (e) => fail(e), + (e) => { + throw e; + }, (localKeys) => { expect(localKeys.encryptedDeviceKey).toEqual(deviceKey); expect(localKeys.encryptedSigningKey).toEqual(signingKey); diff --git a/src/frame/tests/WorkerMediator.test.ts b/src/frame/tests/WorkerMediator.test.ts index 5d41098..abc133b 100644 --- a/src/frame/tests/WorkerMediator.test.ts +++ b/src/frame/tests/WorkerMediator.test.ts @@ -4,13 +4,15 @@ import Future from "futurejs"; describe("WorkerMediator", () => { describe("sendMessage", () => { it("passes in payload and optional transfer list to API and responds with result", () => { - spyOn(messenger, "postMessageToWorker").and.returnValue( - Future.of({ + jest.spyOn(messenger, "postMessageToWorker").mockReturnValue( + Future.of({ foo: "bar", }) ); sendMessage({payload: "content"} as any, ["foo", "bar"] as any).engage( - (e) => fail(e), + (e) => { + throw e; + }, (result: any) => { expect(result).toEqual({foo: "bar"}); expect(messenger.postMessageToWorker).toHaveBeenCalledWith({payload: "content"}, ["foo", "bar"]); @@ -19,8 +21,8 @@ describe("WorkerMediator", () => { }); it("handles error message response types and rejects futures", () => { - spyOn(messenger, "postMessageToWorker").and.returnValue( - Future.of({ + jest.spyOn(messenger, "postMessageToWorker").mockReturnValue( + Future.of({ message: { text: "error", code: 108, @@ -34,7 +36,9 @@ describe("WorkerMediator", () => { expect(e.message).toEqual("error"); expect(e.code).toEqual(108); }, - () => fail("Should fail with error response content") + () => { + throw new Error("Should fail with error response content"); + } ); }); }); @@ -43,11 +47,13 @@ describe("WorkerMediator", () => { describe("postMessageToWorker", () => { it("posts message on worker and returns Future", () => { (messenger as any).worker = { - postMessage: jasmine.createSpy("postMessage"), + postMessage: jest.fn(), }; messenger.postMessageToWorker({foo: "bar"} as any).engage( - (e) => fail(e), + (e) => { + throw e; + }, () => { expect(messenger.worker.postMessage).toHaveBeenCalledWith( { @@ -57,19 +63,21 @@ describe("WorkerMediator", () => { [] ); - expect(messenger.callbacks).toBeArrayOfSize(1); + expect(messenger.callbacks).toHaveLength(1); } ); }); it("converts byte arrays to buffers in transfer list", () => { (messenger as any).worker = { - postMessage: jasmine.createSpy("postMessage"), + postMessage: jest.fn(), }; const bytes = [new Uint8Array(5), new Uint8Array(6)]; messenger.postMessageToWorker({foo: "bar"} as any, bytes).engage( - (e) => fail(e), + (e) => { + throw e; + }, () => { expect(messenger.worker.postMessage).toHaveBeenCalledWith( { @@ -79,7 +87,7 @@ describe("WorkerMediator", () => { [new ArrayBuffer(5), new ArrayBuffer(6)] ); - expect(messenger.callbacks).toBeArrayOfSize(1); + expect(messenger.callbacks).toHaveLength(1); } ); }); @@ -87,7 +95,7 @@ describe("WorkerMediator", () => { describe("processMessage", () => { it("does nothing if no callback is set", () => { - messenger.callbacks[7] = jasmine.createSpy("callback"); + messenger.callbacks[7] = jest.fn(); messenger.processMessage({ data: { data: {foo: "bar"}, @@ -100,7 +108,7 @@ describe("WorkerMediator", () => { }); it("invokes callback provided and deletes it", () => { - messenger.callbacks[7] = jasmine.createSpy("callback"); + messenger.callbacks[7] = jest.fn(); messenger.processMessage({ data: { data: {foo: "bar"}, diff --git a/src/frame/tests/index.test.ts b/src/frame/tests/index.test.ts index 3c85740..8715344 100644 --- a/src/frame/tests/index.test.ts +++ b/src/frame/tests/index.test.ts @@ -22,7 +22,7 @@ describe("frame index", () => { }); it("INIT_SDK", (done) => { - spyOn(Init, "initialize").and.returnValue(Future.of("init")); + jest.spyOn(Init, "initialize").mockReturnValue(Future.of("init")); const payload: MT.InitApiRequest = { type: "INIT_SDK", message: { @@ -39,7 +39,7 @@ describe("frame index", () => { }); it("CREATE_USER", (done) => { - spyOn(Init, "createUser").and.returnValue(Future.of("createUser")); + jest.spyOn(Init, "createUser").mockReturnValue(Future.of("createUser")); const payload: MT.CreateUserRequest = { type: "CREATE_USER", message: { @@ -57,7 +57,7 @@ describe("frame index", () => { }); it("CREATE_USER_AND_DEVICE", (done) => { - spyOn(Init, "createUserAndDevice").and.returnValue(Future.of("createUserAndDevice")); + jest.spyOn(Init, "createUserAndDevice").mockReturnValue(Future.of("createUserAndDevice")); const payload: MT.CreateUserAndDeviceRequest = { type: "CREATE_USER_AND_DEVICE", message: { @@ -74,7 +74,7 @@ describe("frame index", () => { }); it("GEN_DEVICE_KEYS", (done) => { - spyOn(Init, "generateUserNewDeviceKeys").and.returnValue(Future.of("generateUserNewDeviceKeys")); + jest.spyOn(Init, "generateUserNewDeviceKeys").mockReturnValue(Future.of("generateUserNewDeviceKeys")); const payload: MT.GenerateNewDeviceKeysRequest = { type: "GEN_DEVICE_KEYS", message: { @@ -91,7 +91,7 @@ describe("frame index", () => { }); it("CREATE_DETATCHED_USER_DEVICE", (done) => { - spyOn(Init, "createDetachedUserDevice").and.returnValue(Future.of("createDetachedUserDevice")); + jest.spyOn(Init, "createDetachedUserDevice").mockReturnValue(Future.of("createDetachedUserDevice")); const payload: MT.CreateDetachedUserDeviceRequest = { type: "CREATE_DETATCHED_USER_DEVICE", message: {passcode: "pass", jwtToken: "tok"}, @@ -110,7 +110,7 @@ describe("frame index", () => { describe("onMessage document tests", () => { it("DOCUMENT_LIST", (done) => { - spyOn(DocumentApi, "list").and.returnValue(Future.of("list")); + jest.spyOn(DocumentApi, "list").mockReturnValue(Future.of("list")); const payload: MT.DocumentListRequest = { type: "DOCUMENT_LIST", }; @@ -126,7 +126,7 @@ describe("frame index", () => { }); it("DOCUMENT_META_GET", (done) => { - spyOn(DocumentApi, "getDocumentMeta").and.returnValue(Future.of("meta")); + jest.spyOn(DocumentApi, "getDocumentMeta").mockReturnValue(Future.of("meta")); const payload: MT.DocumentMetaGetRequest = { type: "DOCUMENT_META_GET", message: { @@ -146,8 +146,8 @@ describe("frame index", () => { it("DOCUMENT_STORE_DECRYPT", (done) => { const documentData = new Uint8Array(3); - spyOn(DocumentApi, "decryptHostedDoc").and.returnValue( - Future.of({ + jest.spyOn(DocumentApi, "decryptHostedDoc").mockReturnValue( + Future.of({ data: documentData, }) ); @@ -171,8 +171,8 @@ describe("frame index", () => { it("DOCUMENT_DECRYPT", (done) => { const documentData = new Uint8Array(3); - spyOn(DocumentApi, "decryptLocalDoc").and.returnValue( - Future.of({ + jest.spyOn(DocumentApi, "decryptLocalDoc").mockReturnValue( + Future.of({ data: documentData, }) ); @@ -202,7 +202,7 @@ describe("frame index", () => { }); it("DOCUMENT_UNMANAGED_DECRYPT", (done) => { - spyOn(DocumentAdvancedApi, "decryptWithProvidedEdeks").and.returnValue(Future.of("umanagedDecrypt")); + jest.spyOn(DocumentAdvancedApi, "decryptWithProvidedEdeks").mockReturnValue(Future.of("umanagedDecrypt")); const payload: any = { type: "DOCUMENT_UNMANAGED_DECRYPT", message: { @@ -221,7 +221,7 @@ describe("frame index", () => { }); it("DOCUMENT_STORE_ENCRYPT", (done) => { - spyOn(DocumentApi, "encryptToStore").and.returnValue(Future.of("encryptToStore")); + jest.spyOn(DocumentApi, "encryptToStore").mockReturnValue(Future.of("encryptToStore")); const payload: any = { type: "DOCUMENT_STORE_ENCRYPT", message: { @@ -254,7 +254,7 @@ describe("frame index", () => { }); it("DOCUMENT_STORE_ENCRYPT grantToAuthor missing", (done) => { - spyOn(DocumentApi, "encryptToStore").and.returnValue(Future.of("encryptToStore")); + jest.spyOn(DocumentApi, "encryptToStore").mockReturnValue(Future.of("encryptToStore")); const payload: any = { type: "DOCUMENT_STORE_ENCRYPT", message: { @@ -281,7 +281,7 @@ describe("frame index", () => { }); it("DOCUMENT_STORE_ENCRYPT grantToAuthor false", (done) => { - spyOn(DocumentApi, "encryptToStore").and.returnValue(Future.of("encryptToStore")); + jest.spyOn(DocumentApi, "encryptToStore").mockReturnValue(Future.of("encryptToStore")); const payload: any = { type: "DOCUMENT_STORE_ENCRYPT", message: { @@ -310,7 +310,7 @@ describe("frame index", () => { it("DOCUMENT_ENCRYPT", (done) => { const documentData = new Uint8Array(28); - spyOn(DocumentApi, "encryptLocalDocument").and.returnValue(Future.of({document: documentData})); + jest.spyOn(DocumentApi, "encryptLocalDocument").mockReturnValue(Future.of({document: documentData})); const payload: any = { type: "DOCUMENT_ENCRYPT", message: { @@ -345,7 +345,7 @@ describe("frame index", () => { it("DOCUMENT_ENCRYPT grantToAuthor missing", (done) => { const documentData = new Uint8Array(28); - spyOn(DocumentApi, "encryptLocalDocument").and.returnValue(Future.of({document: documentData})); + jest.spyOn(DocumentApi, "encryptLocalDocument").mockReturnValue(Future.of({document: documentData})); const payload: any = { type: "DOCUMENT_ENCRYPT", message: { @@ -373,7 +373,7 @@ describe("frame index", () => { it("DOCUMENT_ENCRYPT grantToAuthor is false", (done) => { const documentData = new Uint8Array(28); - spyOn(DocumentApi, "encryptLocalDocument").and.returnValue(Future.of({document: documentData})); + jest.spyOn(DocumentApi, "encryptLocalDocument").mockReturnValue(Future.of({document: documentData})); const payload: any = { type: "DOCUMENT_ENCRYPT", message: { @@ -401,7 +401,7 @@ describe("frame index", () => { }); it("DOCUMENT_UNMANAGED_ENCRYPT", (done) => { - spyOn(DocumentAdvancedApi, "encrypt").and.returnValue(Future.of("umanagedEncrypt")); + jest.spyOn(DocumentAdvancedApi, "encrypt").mockReturnValue(Future.of("umanagedEncrypt")); const payload: any = { type: "DOCUMENT_UNMANAGED_ENCRYPT", message: { @@ -421,7 +421,7 @@ describe("frame index", () => { }); it("DOCUMENT_STORE_UPDATE_DATA", (done) => { - spyOn(DocumentApi, "updateToStore").and.returnValue(Future.of("updateToStore")); + jest.spyOn(DocumentApi, "updateToStore").mockReturnValue(Future.of("updateToStore")); const payload: any = { type: "DOCUMENT_STORE_UPDATE_DATA", message: { @@ -442,7 +442,7 @@ describe("frame index", () => { it("DOCUMENT_UPDATE_DATA", (done) => { const documentData = new Uint8Array(33); - spyOn(DocumentApi, "updateLocalDocument").and.returnValue(Future.of({document: documentData})); + jest.spyOn(DocumentApi, "updateLocalDocument").mockReturnValue(Future.of({document: documentData})); const payload: any = { type: "DOCUMENT_UPDATE_DATA", message: { @@ -463,7 +463,7 @@ describe("frame index", () => { }); it("DOCUMENT_UPDATE_NAME", (done) => { - spyOn(DocumentApi, "updateName").and.returnValue(Future.of({documentID: "doc-10", documentName: "doc name", created: "1", updated: "2"})); + jest.spyOn(DocumentApi, "updateName").mockReturnValue(Future.of({documentID: "doc-10", documentName: "doc name", created: "1", updated: "2"})); const payload: any = { type: "DOCUMENT_UPDATE_NAME", @@ -489,7 +489,7 @@ describe("frame index", () => { }); it("DOCUMENT_GRANT", (done) => { - spyOn(DocumentApi, "grantDocumentAccess").and.returnValue(Future.of("grantDocumentAccess")); + jest.spyOn(DocumentApi, "grantDocumentAccess").mockReturnValue(Future.of("grantDocumentAccess")); const payload: MT.DocumentGrantRequest = { type: "DOCUMENT_GRANT", message: { @@ -510,7 +510,7 @@ describe("frame index", () => { }); it("DOCUMENT_REVOKE", (done) => { - spyOn(DocumentApi, "revokeDocumentAccess").and.returnValue(Future.of("revokeDocumentAccess")); + jest.spyOn(DocumentApi, "revokeDocumentAccess").mockReturnValue(Future.of("revokeDocumentAccess")); const payload: MT.DocumentRevokeRequest = { type: "DOCUMENT_REVOKE", message: { @@ -533,7 +533,7 @@ describe("frame index", () => { describe("onMessage user tests", () => { it("DEAUTHORIZE_DEVICE", (done) => { - spyOn(UserApi, "deauthorizeDevice").and.returnValue(Future.of("deauthDevice")); + jest.spyOn(UserApi, "deauthorizeDevice").mockReturnValue(Future.of("deauthDevice")); const payload: MT.DeauthorizeDevice = { type: "DEAUTHORIZE_DEVICE", message: null, @@ -550,7 +550,7 @@ describe("frame index", () => { }); it("CHANGE_USER_PASSCODE", (done) => { - spyOn(UserApi, "changeUsersPasscode").and.returnValue(Future.of("changeUsersPasscode")); + jest.spyOn(UserApi, "changeUsersPasscode").mockReturnValue(Future.of("changeUsersPasscode")); const payload: MT.ChangeUserPasscode = { type: "CHANGE_USER_PASSCODE", @@ -571,7 +571,7 @@ describe("frame index", () => { }); it("ROTATE_USER_PRIVATE_KEY", (done) => { - spyOn(UserApi, "rotateUserMasterKey").and.returnValue(Future.of("rotateUserMasterKey")); + jest.spyOn(UserApi, "rotateUserMasterKey").mockReturnValue(Future.of("rotateUserMasterKey")); const payload: MT.RotateUserPrivateKey = { type: "ROTATE_USER_PRIVATE_KEY", @@ -593,7 +593,7 @@ describe("frame index", () => { describe("onMessage group tests", () => { it("GROUP_LIST", (done) => { - spyOn(GroupApi, "list").and.returnValue(Future.of("groupList")); + jest.spyOn(GroupApi, "list").mockReturnValue(Future.of("groupList")); const payload: MT.GroupListRequest = { type: "GROUP_LIST", @@ -611,7 +611,7 @@ describe("frame index", () => { }); it("GROUP_GET", (done) => { - spyOn(GroupApi, "get").and.returnValue(Future.of("groupGet")); + jest.spyOn(GroupApi, "get").mockReturnValue(Future.of("groupGet")); const payload: MT.GroupGetRequest = { type: "GROUP_GET", @@ -630,7 +630,7 @@ describe("frame index", () => { it("GROUP_CREATE", (done) => { jest.spyOn(ApiState, "user").mockReturnValue({id: "groupCreatorId"} as any); - jest.spyOn(GroupApi, "create").mockReturnValue(Future.of("groupCreate") as any); + jest.spyOn(GroupApi, "create").mockReturnValue(Future.of("groupCreate") as any); const payload: MT.GroupCreateRequest = { type: "GROUP_CREATE", @@ -666,7 +666,7 @@ describe("frame index", () => { }); it("ROTATE_GROUP_PRIVATE_KEY", (done) => { - spyOn(GroupApi, "rotateGroupPrivateKey").and.returnValue(Future.of("rotateUserMasterKey")); + jest.spyOn(GroupApi, "rotateGroupPrivateKey").mockReturnValue(Future.of("rotateUserMasterKey")); const payload: MT.RotateGroupPrivateKey = { type: "ROTATE_GROUP_PRIVATE_KEY", @@ -686,7 +686,7 @@ describe("frame index", () => { }); it("GROUP_UPDATE", (done) => { - spyOn(GroupApi, "update").and.returnValue(Future.of("updatedGroup")); + jest.spyOn(GroupApi, "update").mockReturnValue(Future.of("updatedGroup")); const payload: MT.GroupUpdateRequest = { type: "GROUP_UPDATE", message: {groupID: "groupID", groupName: "new name"}, @@ -702,7 +702,7 @@ describe("frame index", () => { }); it("GROUP_ADD_ADMINS", (done) => { - spyOn(GroupApi, "addAdmins").and.returnValue(Future.of("groupAddAdmins")); + jest.spyOn(GroupApi, "addAdmins").mockReturnValue(Future.of("groupAddAdmins")); const payload: MT.GroupAddAdminRequest = { type: "GROUP_ADD_ADMINS", message: {groupID: "my-group", userList: ["22", "89"]}, @@ -719,7 +719,7 @@ describe("frame index", () => { }); it("GROUP_REMOVE_ADMINS", (done) => { - spyOn(GroupApi, "removeAdmins").and.returnValue(Future.of("groupRemoveAdmins")); + jest.spyOn(GroupApi, "removeAdmins").mockReturnValue(Future.of("groupRemoveAdmins")); const payload: MT.GroupRemoveAdminRequest = { type: "GROUP_REMOVE_ADMINS", message: {groupID: "my-group", userList: ["22", "89"]}, @@ -736,7 +736,7 @@ describe("frame index", () => { }); it("GROUP_ADD_MEMBERS", (done) => { - spyOn(GroupApi, "addMembers").and.returnValue(Future.of("groupAddMembers")); + jest.spyOn(GroupApi, "addMembers").mockReturnValue(Future.of("groupAddMembers")); const payload: MT.GroupAddMemberRequest = { type: "GROUP_ADD_MEMBERS", @@ -754,7 +754,7 @@ describe("frame index", () => { }); it("GROUP_REMOVE_MEMBERS", (done) => { - spyOn(GroupApi, "removeMembers").and.returnValue(Future.of("groupRemoveMembers")); + jest.spyOn(GroupApi, "removeMembers").mockReturnValue(Future.of("groupRemoveMembers")); const payload: MT.GroupRemoveMemberRequest = { type: "GROUP_REMOVE_MEMBERS", @@ -772,7 +772,7 @@ describe("frame index", () => { }); it("GROUP_REMOVE_SELF_AS_MEMBER", (done) => { - spyOn(GroupApi, "removeSelfAsMember").and.returnValue(Future.of("user-10")); + jest.spyOn(GroupApi, "removeSelfAsMember").mockReturnValue(Future.of("user-10")); const payload: MT.GroupRemoveSelfAsMemberRequest = { type: "GROUP_REMOVE_SELF_AS_MEMBER", @@ -790,7 +790,7 @@ describe("frame index", () => { }); it("GROUP_DELETE", (done) => { - spyOn(GroupApi, "deleteGroup").and.returnValue(Future.of("deleteresp")); + jest.spyOn(GroupApi, "deleteGroup").mockReturnValue(Future.of("deleteresp")); const payload: MT.GroupDeleteRequest = { type: "GROUP_DELETE", @@ -810,7 +810,7 @@ describe("frame index", () => { describe("resolveToStandardForm", () => { it("return a standard form result with no options sent", (done) => { jest.spyOn(ApiState, "user").mockReturnValue({id: "groupCreatorId"} as any); - jest.spyOn(GroupApi, "create").mockReturnValue(Future.of("groupCreate") as any); + jest.spyOn(GroupApi, "create").mockReturnValue(Future.of("groupCreate") as any); const payload: MT.GroupCreateRequest = { type: "GROUP_CREATE", @@ -832,7 +832,7 @@ describe("frame index", () => { }); it("return a standard form result with no options sent addAsMember is false", (done) => { jest.spyOn(ApiState, "user").mockReturnValue({id: "groupCreatorId"} as any); - jest.spyOn(GroupApi, "create").mockReturnValue(Future.of("groupCreate") as any); + jest.spyOn(GroupApi, "create").mockReturnValue(Future.of("groupCreate") as any); const payload: MT.GroupCreateRequest = { type: "GROUP_CREATE", @@ -854,7 +854,7 @@ describe("frame index", () => { }); it("return a standard form result when options are sent", (done) => { jest.spyOn(ApiState, "user").mockReturnValue({id: "groupCreatorId"} as any); - jest.spyOn(GroupApi, "create").mockReturnValue(Future.of("groupCreate") as any); + jest.spyOn(GroupApi, "create").mockReturnValue(Future.of("groupCreate") as any); const payload: MT.GroupCreateRequest = { type: "GROUP_CREATE", @@ -890,7 +890,7 @@ describe("frame index", () => { }); it("add the owner to an empyty admin list", (done) => { jest.spyOn(ApiState, "user").mockReturnValue({id: "groupCreatorId"} as any); - jest.spyOn(GroupApi, "create").mockReturnValue(Future.of("groupCreate") as any); + jest.spyOn(GroupApi, "create").mockReturnValue(Future.of("groupCreate") as any); const payload: MT.GroupCreateRequest = { type: "GROUP_CREATE", @@ -919,7 +919,7 @@ describe("frame index", () => { }); it("add group creator to empty admin list when addAsMember and addAsAdmin are true", (done) => { jest.spyOn(ApiState, "user").mockReturnValue({id: "groupCreatorId"} as any); - jest.spyOn(GroupApi, "create").mockReturnValue(Future.of("groupCreate") as any); + jest.spyOn(GroupApi, "create").mockReturnValue(Future.of("groupCreate") as any); const payload: MT.GroupCreateRequest = { type: "GROUP_CREATE", @@ -947,7 +947,7 @@ describe("frame index", () => { }); it("create a members and admins list when one is not provided and add the creatot when addAsMemebr and addAs Admin are true", (done) => { jest.spyOn(ApiState, "user").mockReturnValue({id: "groupCreatorId"} as any); - jest.spyOn(GroupApi, "create").mockReturnValue(Future.of("groupCreate") as any); + jest.spyOn(GroupApi, "create").mockReturnValue(Future.of("groupCreate") as any); const payload: MT.GroupCreateRequest = { type: "GROUP_CREATE", @@ -972,7 +972,7 @@ describe("frame index", () => { describe("error message handling", () => { it("returns error response with formatted code and message", (done) => { - spyOn(DocumentApi, "decryptHostedDoc").and.returnValue(Future.reject(new SDKError(new Error("invalid"), 34))); + jest.spyOn(DocumentApi, "decryptHostedDoc").mockReturnValue(Future.reject(new SDKError(new Error("invalid"), 34))); const payload: MT.DocumentStoreDecryptRequest = { type: "DOCUMENT_STORE_DECRYPT", message: { diff --git a/src/frame/worker/crypto/aes/tests/NativeAes.test.ts b/src/frame/worker/crypto/aes/tests/NativeAes.test.ts index 1e52749..c2a3d1b 100644 --- a/src/frame/worker/crypto/aes/tests/NativeAes.test.ts +++ b/src/frame/worker/crypto/aes/tests/NativeAes.test.ts @@ -8,10 +8,10 @@ describe("NativeAes", () => { const wcDecrypt = crypto.subtle.decrypt; beforeEach(() => { - crypto.subtle.importKey = jasmine.createSpy("nativeImportKey").and.returnValue(Promise.resolve("CryptoKey")); - crypto.subtle.deriveKey = jasmine.createSpy("nativeDeriveKey").and.returnValue(Promise.resolve("derivedKey")); - crypto.subtle.encrypt = jasmine.createSpy("nativeEncrypt").and.returnValue(Promise.resolve(new Uint8Array([93, 82, 72]))); - crypto.subtle.decrypt = jasmine.createSpy("nativeDecrypt").and.returnValue(Promise.resolve(new Uint8Array([87, 70, 62]))); + crypto.subtle.importKey = jest.fn().mockReturnValue(Promise.resolve("CryptoKey")); + crypto.subtle.deriveKey = jest.fn().mockReturnValue(Promise.resolve("derivedKey")); + crypto.subtle.encrypt = jest.fn().mockReturnValue(Promise.resolve(new Uint8Array([93, 82, 72]))); + crypto.subtle.decrypt = jest.fn().mockReturnValue(Promise.resolve(new Uint8Array([87, 70, 62]))); }); afterEach(() => { @@ -28,7 +28,9 @@ describe("NativeAes", () => { const iv = new Uint8Array(12); NativeAes.encryptUserKey(userKey, "derivedKey" as any, salt, iv).engage( - (e) => fail(e), + (e) => { + throw e; + }, (userPrivateKey: any) => { expect(userPrivateKey.length).toEqual(47); //Last bytes should be result from mock encrypt result we returned above @@ -48,7 +50,7 @@ describe("NativeAes", () => { const userKey = new Uint8Array(47); NativeAes.decryptUserKey(userKey, "derivedKey" as any).engage( - () => fail("decrypting key pair should not fail"), + () => done("decrypting key pair should not fail"), (decryptedKey: any) => { expect(decryptedKey.length).toEqual(3); //Bytes should be result from mock encrypt result we returned above @@ -70,7 +72,7 @@ describe("NativeAes", () => { const providedIV = new Uint8Array(12); NativeAes.encryptDocument(doc, new Uint8Array(32), providedIV).engage( - () => fail("AES encryption should not fail"), + () => done("AES encryption should not fail"), (encryptedDocumentResult) => { const {iv, content} = encryptedDocumentResult; expect(iv).toEqual(providedIV); @@ -91,7 +93,7 @@ describe("NativeAes", () => { const iv = new Uint8Array(12); NativeAes.decryptDocument(doc, new Uint8Array(32), iv).engage( - () => fail("AES decryption should not fail"), + () => done("AES decryption should not fail"), (decryptedDocument) => { expect(decryptedDocument).toEqual(new Uint8Array([87, 70, 62])); expect(crypto.subtle.importKey).toHaveBeenCalled(); @@ -110,7 +112,7 @@ describe("NativeAes", () => { const iv = new Uint8Array(12); NativeAes.encryptDeviceAndSigningKeys(deviceKey, signingKey, symKey, iv).engage( - () => fail("AES encryption of keys should not fail"), + () => done("AES encryption of keys should not fail"), (encryptedKeys) => { expect(encryptedKeys).toEqual({ iv, @@ -132,7 +134,7 @@ describe("NativeAes", () => { const iv = new Uint8Array(12); NativeAes.decryptDeviceAndSigningKeys(deviceKey, signingKey, symKey, iv).engage( - () => fail("AES decryption of keys should not fail"), + () => done("AES decryption of keys should not fail"), (encryptedKeys) => { expect(encryptedKeys).toEqual({ deviceKey: new Uint8Array([87, 70, 62]), diff --git a/src/frame/worker/crypto/aes/tests/PolyfillAes.test.ts b/src/frame/worker/crypto/aes/tests/PolyfillAes.test.ts index 6dbfe80..928d25d 100644 --- a/src/frame/worker/crypto/aes/tests/PolyfillAes.test.ts +++ b/src/frame/worker/crypto/aes/tests/PolyfillAes.test.ts @@ -8,7 +8,7 @@ describe("PolyfillAes", () => { const salt = new Uint8Array(32); const iv = new Uint8Array(12); PolyfillAes.encryptUserKey(key, derivedKey, salt, iv).engage( - () => fail("encrypting users keys should not reject"), + () => done("encrypting users keys should not reject"), (encryptedKey: any) => { expect(encryptedKey).toEqual(expect.any(Uint8Array)); expect(encryptedKey.length).toEqual(92); @@ -30,7 +30,7 @@ describe("PolyfillAes", () => { return PolyfillAes.decryptUserKey(encryptedKey, derivedKey); }) .engage( - () => fail("decrypting keys should not fail"), + () => done("decrypting keys should not fail"), (decryptedKey) => { expect(decryptedKey).toEqual(userKey); done(); @@ -43,7 +43,9 @@ describe("PolyfillAes", () => { it("encrypts document and maps result to expected document output", () => { const providedIV = new Uint8Array(12); PolyfillAes.encryptDocument(new Uint8Array([93]), new Uint8Array(32), providedIV).engage( - () => fail("AES decryption should not fail"), + () => { + throw new Error("AES decryption should not fail"); + }, (encryptedData) => { const {iv, content} = encryptedData; expect(iv).toEqual(providedIV); @@ -60,7 +62,9 @@ describe("PolyfillAes", () => { new Uint8Array(32), new Uint8Array(12) ).engage( - () => fail("AES decryption should not fail"), + () => { + throw new Error("AES decryption should not fail"); + }, (encryptedData) => { expect(encryptedData).toEqual(new Uint8Array([93])); } @@ -76,7 +80,7 @@ describe("PolyfillAes", () => { const providedIV = new Uint8Array(12); PolyfillAes.encryptDeviceAndSigningKeys(deviceKey, signingKey, symKey, providedIV).engage( - () => fail("AES encryption of keys should not fail"), + () => done("AES encryption of keys should not fail"), (encryptedKeys) => { expect(encryptedKeys).toEqual({ iv: providedIV, @@ -98,7 +102,7 @@ describe("PolyfillAes", () => { const iv = new Uint8Array(12); PolyfillAes.decryptDeviceAndSigningKeys(deviceKey, signingKey, symKey, iv).engage( - () => fail("AES decryption of keys should not fail"), + () => done("AES decryption of keys should not fail"), (encryptedKeys) => { expect(encryptedKeys).toEqual({ deviceKey: new Uint8Array([35, 80]), diff --git a/src/frame/worker/crypto/aes/tests/index.test.ts b/src/frame/worker/crypto/aes/tests/index.test.ts index 7b7beb0..60da4bd 100644 --- a/src/frame/worker/crypto/aes/tests/index.test.ts +++ b/src/frame/worker/crypto/aes/tests/index.test.ts @@ -7,11 +7,11 @@ import {CryptoConstants} from "../../../../../Constants"; describe("AES", () => { describe("decryptPrivateKeys", () => { it("uses native API if provided derived key is not a byte array", (done) => { - spyOn(NativeAes, "decryptUserKey").and.returnValue(Future.of("decrypted keys")); - spyOn(PolyfillAes, "decryptUserKey"); + jest.spyOn(NativeAes, "decryptUserKey").mockReturnValue(Future.of("decrypted keys")); + jest.spyOn(PolyfillAes, "decryptUserKey"); decryptUserKey(new Uint8Array([]), {key: "CryptoKey", salt: new Uint8Array(32)} as any).engage( - () => fail("should not fail to decrypt keys when using native API"), + () => done("should not fail to decrypt keys when using native API"), (keys: any) => { expect(keys).toEqual("decrypted keys"); expect(PolyfillAes.decryptUserKey).not.toHaveBeenCalled(); @@ -21,11 +21,11 @@ describe("AES", () => { }); it("uses polyfill if derived key is a byte array", (done) => { - spyOn(NativeAes, "decryptUserKey"); - spyOn(PolyfillAes, "decryptUserKey").and.returnValue(Future.of("polyfill decrypted keys")); + jest.spyOn(NativeAes, "decryptUserKey"); + jest.spyOn(PolyfillAes, "decryptUserKey").mockReturnValue(Future.of("polyfill decrypted keys")); decryptUserKey(new Uint8Array([]), {key: new Uint8Array(32), salt: new Uint8Array(32)}).engage( - () => fail("should not fail to decrypt keys when using polyfill API"), + () => done("should not fail to decrypt keys when using polyfill API"), (keys: any) => { expect(keys).toEqual("polyfill decrypted keys"); expect(NativeAes.decryptUserKey).not.toHaveBeenCalled(); @@ -37,11 +37,11 @@ describe("AES", () => { describe("encryptUserKey", () => { it("uses native API if provided derived key is not a byte array", (done) => { - spyOn(NativeAes, "encryptUserKey").and.returnValue(Future.of("encrypted keys")); - spyOn(PolyfillAes, "encryptUserKey"); + jest.spyOn(NativeAes, "encryptUserKey").mockReturnValue(Future.of("encrypted keys")); + jest.spyOn(PolyfillAes, "encryptUserKey"); encryptUserKey(new Uint8Array([]), {key: "CryptoKey", salt: new Uint8Array(32)} as any).engage( - () => fail("should not fail to encrypt keys when using native API"), + () => done("should not fail to encrypt keys when using native API"), (keys: any) => { expect(keys).toEqual("encrypted keys"); expect(PolyfillAes.encryptUserKey).not.toHaveBeenCalled(); @@ -51,11 +51,11 @@ describe("AES", () => { }); it("uses polyfill if derived key is a byte array", (done) => { - spyOn(NativeAes, "encryptUserKey"); - spyOn(PolyfillAes, "encryptUserKey").and.returnValue(Future.of("polyfill encrypted keys")); + jest.spyOn(NativeAes, "encryptUserKey"); + jest.spyOn(PolyfillAes, "encryptUserKey").mockReturnValue(Future.of("polyfill encrypted keys")); encryptUserKey(new Uint8Array([]), {key: new Uint8Array(32), salt: new Uint8Array(32)}).engage( - () => fail("should not fail to encrypt keys when using polyfill API"), + () => done("should not fail to encrypt keys when using polyfill API"), (keys: any) => { expect(keys).toEqual("polyfill encrypted keys"); expect(NativeAes.encryptUserKey).not.toHaveBeenCalled(); @@ -67,13 +67,15 @@ describe("AES", () => { describe("encryptDocument", () => { it("uses native API if available", () => { - spyOn(NativeAes, "encryptDocument").and.returnValue(Future.of({foo: "bar"})); + jest.spyOn(NativeAes, "encryptDocument").mockReturnValue(Future.of({foo: "bar"})); const document = new Uint8Array(40); const docSymKey = new Uint8Array(32); encryptDocument(document, docSymKey).engage( - () => fail("document encryption should not fail"), + () => { + throw new Error("document encryption should not fail"); + }, (doc: any) => { expect(doc).toEqual({foo: "bar"}); expect(NativeAes.encryptDocument).toHaveBeenCalledWith(document, docSymKey, expect.any(Uint8Array)); @@ -82,13 +84,15 @@ describe("AES", () => { }); it("uses polyfill API if native is not available", () => { - spyOn(PolyfillAes, "encryptDocument").and.returnValue(Future.of({foo: "bar"})); + jest.spyOn(PolyfillAes, "encryptDocument").mockReturnValue(Future.of({foo: "bar"})); const document = new Uint8Array(40); const docSymKey = new Uint8Array(32); encryptDocument(document, docSymKey).engage( - () => fail("document encryption should not fail"), + () => { + throw new Error("document encryption should not fail"); + }, (doc: any) => { expect(doc).toEqual({foo: "bar"}); expect(PolyfillAes.encryptDocument).toHaveBeenCalledWith(document, docSymKey, expect.any(Uint8Array)); @@ -97,14 +101,16 @@ describe("AES", () => { }); it("falls back to polyfill API if native fails", () => { - spyOn(NativeAes, "encryptDocument").and.returnValue(Future.reject(new Error("forced failure"))); - spyOn(PolyfillAes, "encryptDocument").and.returnValue(Future.of({foo: "bar"})); + jest.spyOn(NativeAes, "encryptDocument").mockReturnValue(Future.reject(new Error("forced failure"))); + jest.spyOn(PolyfillAes, "encryptDocument").mockReturnValue(Future.of({foo: "bar"})); const document = new Uint8Array(40); const docSymKey = new Uint8Array(32); encryptDocument(document, docSymKey).engage( - () => fail("document encryption should not fail"), + () => { + throw new Error("document encryption should not fail"); + }, (doc: any) => { expect(doc).toEqual({foo: "bar"}); expect(PolyfillAes.encryptDocument).toHaveBeenCalledWith(document, docSymKey, expect.any(Uint8Array)); @@ -116,14 +122,16 @@ describe("AES", () => { describe("decryptDocument", () => { it("uses native API if available", () => { - spyOn(NativeAes, "decryptDocument").and.returnValue(Future.of({foo: "bar"})); + jest.spyOn(NativeAes, "decryptDocument").mockReturnValue(Future.of({foo: "bar"})); const doc = new Uint8Array(40); const symKey = new Uint8Array(32); const nonce = new Uint8Array(12); decryptDocument(doc, symKey, nonce).engage( - () => fail("document decryption should not fail"), + () => { + throw new Error("document decryption should not fail"); + }, (decryptedDoc: any) => { expect(decryptedDoc).toEqual({foo: "bar"}); expect(NativeAes.decryptDocument).toHaveBeenCalledWith(doc, symKey, nonce); @@ -132,15 +140,17 @@ describe("AES", () => { }); it("falls back to polyfill API if native fails", () => { - spyOn(PolyfillAes, "decryptDocument").and.returnValue(Future.of({foo: "bar"})); - spyOn(NativeAes, "decryptDocument").and.returnValue(Future.reject(new Error("forced failure"))); + jest.spyOn(PolyfillAes, "decryptDocument").mockReturnValue(Future.of({foo: "bar"})); + jest.spyOn(NativeAes, "decryptDocument").mockReturnValue(Future.reject(new Error("forced failure"))); const doc = new Uint8Array(40); const symKey = new Uint8Array(32); const nonce = new Uint8Array(12); decryptDocument(doc, symKey, nonce).engage( - () => fail("document decryption should not fail"), + () => { + throw new Error("document decryption should not fail"); + }, (decryptedDoc: any) => { expect(decryptedDoc).toEqual({foo: "bar"}); expect(PolyfillAes.decryptDocument).toHaveBeenCalledWith(doc, symKey, nonce); @@ -150,10 +160,10 @@ describe("AES", () => { }); it("doesnt try polyfill if native fails because decryption failed", () => { - spyOn(PolyfillAes, "decryptDocument"); + jest.spyOn(PolyfillAes, "decryptDocument"); const incorrectKeyError = new Error(""); incorrectKeyError.name = CryptoConstants.NATIVE_DECRYPT_FAILURE_ERROR; - spyOn(NativeAes, "decryptDocument").and.returnValue(Future.reject(incorrectKeyError)); + jest.spyOn(NativeAes, "decryptDocument").mockReturnValue(Future.reject(incorrectKeyError)); const doc = new Uint8Array(40); const symKey = new Uint8Array(32); @@ -165,20 +175,24 @@ describe("AES", () => { expect(NativeAes.decryptDocument).toHaveBeenCalledWith(doc, symKey, nonce); expect(e.message).toEqual("Decryption of document content failed."); }, - () => fail("should fail when native decryption fails because of incorrect key") + () => { + throw new Error("should fail when native decryption fails because of incorrect key"); + } ); }); }); describe("encryptDeviceAndSigningKeys", () => { it("uses native API if available", () => { - spyOn(NativeAes, "encryptDeviceAndSigningKeys").and.returnValue(Future.of({foo: "bar"})); + jest.spyOn(NativeAes, "encryptDeviceAndSigningKeys").mockReturnValue(Future.of({foo: "bar"})); const deviceKey = new Uint8Array(40); const signingKey = new Uint8Array(32); encryptDeviceAndSigningKeys(deviceKey, signingKey).engage( - () => fail("document decryption should not fail"), + () => { + throw new Error("document decryption should not fail"); + }, (decryptedDoc: any) => { expect(decryptedDoc).toEqual({foo: "bar"}); expect(NativeAes.encryptDeviceAndSigningKeys).toHaveBeenCalledWith(deviceKey, signingKey, expect.any(Uint8Array), expect.any(Uint8Array)); @@ -187,22 +201,19 @@ describe("AES", () => { }); it("falls back to polyfill API if native fails", () => { - spyOn(PolyfillAes, "encryptDeviceAndSigningKeys").and.returnValue(Future.of({foo: "bar"})); - spyOn(NativeAes, "encryptDeviceAndSigningKeys").and.returnValue(Future.reject(new Error("forced failure"))); + jest.spyOn(PolyfillAes, "encryptDeviceAndSigningKeys").mockReturnValue(Future.of({foo: "bar"})); + jest.spyOn(NativeAes, "encryptDeviceAndSigningKeys").mockReturnValue(Future.reject(new Error("forced failure"))); const deviceKey = new Uint8Array(40); const signingKey = new Uint8Array(32); encryptDeviceAndSigningKeys(deviceKey, signingKey).engage( - () => fail("document decryption should not fail"), + () => { + throw new Error("document decryption should not fail"); + }, (decryptedDoc: any) => { expect(decryptedDoc).toEqual({foo: "bar"}); - expect(PolyfillAes.encryptDeviceAndSigningKeys).toHaveBeenCalledWith( - deviceKey, - signingKey, - expect.any(Uint8Array), - expect.any(Uint8Array) - ); + expect(PolyfillAes.encryptDeviceAndSigningKeys).toHaveBeenCalledWith(deviceKey, signingKey, expect.any(Uint8Array), expect.any(Uint8Array)); expect(NativeAes.encryptDeviceAndSigningKeys).toHaveBeenCalledWith(deviceKey, signingKey, expect.any(Uint8Array), expect.any(Uint8Array)); } ); @@ -211,7 +222,7 @@ describe("AES", () => { describe("decryptDeviceAndSigningKeys", () => { it("uses native API if available", () => { - spyOn(NativeAes, "decryptDeviceAndSigningKeys").and.returnValue(Future.of({foo: "bar"})); + jest.spyOn(NativeAes, "decryptDeviceAndSigningKeys").mockReturnValue(Future.of({foo: "bar"})); const deviceKey = new Uint8Array(40); const signingKey = new Uint8Array(32); @@ -219,7 +230,9 @@ describe("AES", () => { const nonce = new Uint8Array(12); decryptDeviceAndSigningKeys(deviceKey, signingKey, symKey, nonce).engage( - () => fail("document decryption should not fail"), + () => { + throw new Error("document decryption should not fail"); + }, (decryptedDoc: any) => { expect(decryptedDoc).toEqual({foo: "bar"}); expect(NativeAes.decryptDeviceAndSigningKeys).toHaveBeenCalledWith(deviceKey, signingKey, symKey, nonce); @@ -228,8 +241,8 @@ describe("AES", () => { }); it("falls back to polyfill API if native fails", () => { - spyOn(PolyfillAes, "decryptDeviceAndSigningKeys").and.returnValue(Future.of({foo: "bar"})); - spyOn(NativeAes, "decryptDeviceAndSigningKeys").and.returnValue(Future.reject(new Error("forced failure"))); + jest.spyOn(PolyfillAes, "decryptDeviceAndSigningKeys").mockReturnValue(Future.of({foo: "bar"})); + jest.spyOn(NativeAes, "decryptDeviceAndSigningKeys").mockReturnValue(Future.reject(new Error("forced failure"))); const deviceKey = new Uint8Array(40); const signingKey = new Uint8Array(32); @@ -237,7 +250,9 @@ describe("AES", () => { const nonce = new Uint8Array(12); decryptDeviceAndSigningKeys(deviceKey, signingKey, symKey, nonce).engage( - () => fail("document decryption should not fail"), + () => { + throw new Error("document decryption should not fail"); + }, (decryptedDoc: any) => { expect(decryptedDoc).toEqual({foo: "bar"}); expect(PolyfillAes.decryptDeviceAndSigningKeys).toHaveBeenCalledWith(deviceKey, signingKey, symKey, nonce); diff --git a/src/frame/worker/crypto/pbkdf2/native.ts b/src/frame/worker/crypto/pbkdf2/native.ts index 47f4338..9eee272 100644 --- a/src/frame/worker/crypto/pbkdf2/native.ts +++ b/src/frame/worker/crypto/pbkdf2/native.ts @@ -22,7 +22,7 @@ function deriveKey(key: CryptoKey, salt: Uint8Array) { { name: "PBKDF2", salt, - iterations: PBKDF2_ITERATIONS(), + iterations: PBKDF2_ITERATIONS, hash: {name: "SHA-256"}, }, key, diff --git a/src/frame/worker/crypto/pbkdf2/polyfill.ts b/src/frame/worker/crypto/pbkdf2/polyfill.ts index fd60b50..796319b 100644 --- a/src/frame/worker/crypto/pbkdf2/polyfill.ts +++ b/src/frame/worker/crypto/pbkdf2/polyfill.ts @@ -22,7 +22,7 @@ export function generatePasswordDerivedKey(password: string, saltUsedDuringPrior return saltGeneration.map((salt) => { const saltAsBits = codec.base64.toBits(fromByteArray(salt)); - const keyAsBits = misc.pbkdf2(password, saltAsBits, CryptoConstants.PBKDF2_ITERATIONS(), 256, hmacSHA256 as any); + const keyAsBits = misc.pbkdf2(password, saltAsBits, CryptoConstants.PBKDF2_ITERATIONS, 256, hmacSHA256 as any); return { key: toByteArray(codec.base64.fromBits(keyAsBits)), salt, diff --git a/src/frame/worker/crypto/pbkdf2/tests/polyfill.test.ts b/src/frame/worker/crypto/pbkdf2/tests/polyfill.test.ts index d41cd4a..6245011 100644 --- a/src/frame/worker/crypto/pbkdf2/tests/polyfill.test.ts +++ b/src/frame/worker/crypto/pbkdf2/tests/polyfill.test.ts @@ -1,19 +1,22 @@ import Future from "futurejs"; import * as polyfill from "../polyfill"; -import * as Constants from "../../../../../Constants"; import * as CryptoUtils from "../../CryptoUtils"; +jest.mock("../../../../../Constants", () => ({ + CryptoConstants: { + // reduce the iterations for our tests to save time + PBKDF2_ITERATIONS: 500, + }, +})); describe("PBKDF2 polyfill", () => { - beforeAll(() => { - spyOn(Constants.CryptoConstants, "PBKDF2_ITERATIONS").and.returnValue(500); - }); - describe("generatePasswordDerivedKey", () => { it("should generate the expected derived key when no salt provided", () => { - spyOn(CryptoUtils, "generateRandomBytes").and.returnValue(Future.of(new Uint8Array(32))); + jest.spyOn(CryptoUtils, "generateRandomBytes").mockReturnValue(Future.of(new Uint8Array(32))); polyfill.generatePasswordDerivedKey("password").engage( - (e) => fail(e), + (e) => { + throw e; + }, (derivedKey) => { expect(derivedKey.key).toEqual( //prettier-ignore @@ -29,7 +32,9 @@ describe("PBKDF2 polyfill", () => { const salt = new Uint8Array([247, 116, 135, 59, 206, 61, 138, 137, 77, 207, 159, 207, 29, 133, 206, 15, 208, 76, 245, 83, 222, 84, 6, 157, 189, 223, 166, 231, 9, 182, 209, 173]); polyfill.generatePasswordDerivedKey("password", salt).engage( - (e) => fail(e), + (e) => { + throw e; + }, (derivedKey) => { expect(derivedKey.key).toEqual( //prettier-ignore diff --git a/src/frame/worker/crypto/recrypt/tests/RecryptWasm.test.ts b/src/frame/worker/crypto/recrypt/tests/RecryptWasm.test.ts index 4543f99..7a571b1 100644 --- a/src/frame/worker/crypto/recrypt/tests/RecryptWasm.test.ts +++ b/src/frame/worker/crypto/recrypt/tests/RecryptWasm.test.ts @@ -16,7 +16,9 @@ describe("RecryptWasm", () => { expect(error.message).toEqual("Key rotation failed."); expect(Recrypt.getApi().generateKeyPair).toHaveBeenCalledTimes(2); }, - () => fail("Should not success when operation fails") + () => { + throw new Error("Should not success when operation fails"); + } ); }); @@ -27,7 +29,9 @@ describe("RecryptWasm", () => { (error) => { expect(error.message).toEqual("Key rotation failed."); }, - () => fail("Should fail when private key subtraction results in zeroed private key") + () => { + throw new Error("Should fail when private key subtraction results in zeroed private key"); + } ); expect(MockRecrypt.subtractPrivateKeys).toHaveBeenCalledTimes(2); @@ -37,7 +41,9 @@ describe("RecryptWasm", () => { jest.spyOn(Recrypt.getApi(), "generateKeyPair").mockReturnValue({privateKey: new Uint8Array([12, 23, 34])} as any); jest.spyOn(MockRecrypt, "subtractPrivateKeys").mockReturnValue(new Uint8Array([11, 22, 33])); Recrypt.rotateUsersPrivateKeyWithRetry(userPrivateKey).engage( - (e) => fail(e), + (e) => { + throw e; + }, ({newPrivateKey, augmentationFactor}) => { expect(Recrypt.getApi().generateKeyPair).toHaveBeenCalledTimes(1); expect(MockRecrypt.subtractPrivateKeys).toHaveBeenCalledTimes(1); @@ -56,7 +62,9 @@ describe("RecryptWasm", () => { () => { expect(Recrypt.getApi().generatePlaintext).toHaveBeenCalledTimes(2); }, - () => fail("Should not success when operation fails") + () => { + throw new Error("Should not success when operation fails"); + } ); }); @@ -68,7 +76,9 @@ describe("RecryptWasm", () => { expect(Recrypt.getApi().generatePlaintext).toHaveBeenCalledTimes(2); expect(MockRecrypt.subtractPrivateKeys).toHaveBeenCalledTimes(2); }, - () => fail("Should fail when private key subtraction results in zeroed private key") + () => { + throw new Error("Should fail when private key subtraction results in zeroed private key"); + } ); }); @@ -77,7 +87,9 @@ describe("RecryptWasm", () => { jest.spyOn(MockRecrypt, "subtractPrivateKeys").mockReturnValue(new Uint8Array([11, 22, 33])); jest.spyOn(Recrypt.getApi(), "hash256").mockReturnValue(new Uint8Array([44, 55, 34])); Recrypt.rotateGroupPrivateKeyWithRetry(groupPrivateKey).engage( - (e) => fail(e), + (e) => { + throw e; + }, ({plaintext, augmentationFactor}) => { expect(Recrypt.getApi().generatePlaintext).toHaveBeenCalledTimes(1); expect(MockRecrypt.subtractPrivateKeys).toHaveBeenCalledTimes(1); @@ -90,8 +102,8 @@ describe("RecryptWasm", () => { describe("generatePasswordDerivedKey", () => { it("should generate random bytes and use WebCrypto pbkdf2", () => { - spyOn(nativePBKDF2, "generatePasscodeDerivedKey").and.returnValue(Future.of("derivedKey")); - spyOn(CryptoUtils, "getCryptoSubtleApi").and.returnValue(true); + jest.spyOn(nativePBKDF2, "generatePasscodeDerivedKey").mockReturnValue(Future.of("derivedKey")); + jest.spyOn(CryptoUtils, "getCryptoSubtleApi").mockReturnValue(true as any); Recrypt.generatePasswordDerivedKey("password", new Uint8Array(32)).engage( (e) => e, @@ -106,7 +118,9 @@ describe("RecryptWasm", () => { describe("generateKeyPair", () => { it("should generate a set of Recrypt keys", () => { Recrypt.generateKeyPair().engage( - (e) => fail(e), + (e) => { + throw e; + }, ({publicKey, privateKey}) => { expect(publicKey.x.length).toEqual(32); expect(publicKey.y.length).toEqual(32); @@ -122,7 +136,9 @@ describe("RecryptWasm", () => { describe("generateSigningKeyPair", () => { it("generates a set of ed25519 keys", () => { Recrypt.generateSigningKeyPair().engage( - (e) => fail(e), + (e) => { + throw e; + }, ({publicKey, privateKey}) => { expect(publicKey).toEqual(expect.any(Uint8Array)); expect(publicKey.length).toEqual(32); @@ -142,7 +158,9 @@ describe("RecryptWasm", () => { }); }) .engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, () => null ); }); @@ -151,9 +169,11 @@ describe("RecryptWasm", () => { describe("generateNewUserKeySet", () => { it("generates both user and device keys", () => { Recrypt.generateNewUserKeySet().engage( - (e) => fail(e), + (e) => { + throw e; + }, (keys: any) => { - expect(Object.keys(keys)).toBeArrayOfSize(3); + expect(Object.keys(keys)).toHaveLength(3); expect(keys.userKeys.publicKey.x.length).toEqual(32); expect(keys.userKeys.publicKey.y.length).toEqual(32); expect(keys.userKeys.publicKey.x).toEqual(expect.any(Uint8Array)); @@ -178,7 +198,9 @@ describe("RecryptWasm", () => { describe("generateGroupKeyPair", () => { it("generates new public, private, and plaintext fields", () => { Recrypt.generateGroupKeyPair().engage( - (e) => fail(e), + (e) => { + throw e; + }, (keys) => { expect(keys.publicKey.x).toEqual(expect.any(Uint8Array)); expect(keys.publicKey.y).toEqual(expect.any(Uint8Array)); @@ -204,7 +226,9 @@ describe("RecryptWasm", () => { return Recrypt.derivePublicKey(keys.privateKey); }) .engage( - (e) => fail(e), + (e) => { + throw e; + }, (derivedPublicKey) => { expect(derivedPublicKey).toEqual(publicKey); } @@ -218,9 +242,11 @@ describe("RecryptWasm", () => { Recrypt.generateKeyPair() .flatMap((keys) => Recrypt.generateTransformKey(keys.privateKey, keys.publicKey, signingKeys)) .engage( - (e) => fail(e), + (e) => { + throw e; + }, (transformKey) => { - expect(transformKey).toBeObject(); + expect(typeof transformKey).toBe("object"); expect(transformKey.encryptedTempKey).toEqual(expect.any(Uint8Array)); expect(transformKey.encryptedTempKey.length).toEqual(384); @@ -251,7 +277,9 @@ describe("RecryptWasm", () => { it("returns an empty array when no keys passed in", () => { const signingKeys = TestUtils.getSigningKeyPair(); Recrypt.generateTransformKeyToList(new Uint8Array(32), [], signingKeys).engage( - (e) => fail(e), + (e) => { + throw e; + }, (result) => { expect(result).toEqual([]); } @@ -276,9 +304,11 @@ describe("RecryptWasm", () => { const signingKeys = TestUtils.getSigningKeyPair(); Recrypt.generateTransformKeyToList(new Uint8Array(32), [key1, key2], signingKeys).engage( - (e) => fail(e), + (e) => { + throw e; + }, (result) => { - expect(result).toBeArrayOfSize(2); + expect(result).toHaveLength(2); const [ts1, ts2] = result; @@ -313,9 +343,11 @@ describe("RecryptWasm", () => { describe("generateDocumentKey", () => { it("generates document symmetric key", () => { Recrypt.generateDocumentKey().engage( - (e) => fail(e), + (e) => { + throw e; + }, (key: any) => { - expect(key).toBeArrayOfSize(2); + expect(key).toHaveLength(2); expect(key[0]).toEqual(expect.any(Uint8Array)); expect(key[0].length).toEqual(384); expect(key[1]).toEqual(expect.any(Uint8Array)); @@ -333,7 +365,9 @@ describe("RecryptWasm", () => { y: toByteArray("O918eBCWdImkkA7jIcHk3dPhf08TudRmgODFgdXJzHk="), }; Recrypt.encryptPlaintext(new Uint8Array(384), publicKey, signingKeys).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (encryptedKey) => { expect(encryptedKey.ephemeralPublicKey.x).toEqual(expect.any(String)); expect(encryptedKey.ephemeralPublicKey.y).toEqual(expect.any(String)); @@ -365,30 +399,24 @@ describe("RecryptWasm", () => { const signingKeys = TestUtils.getSigningKeyPair(); Recrypt.encryptPlaintextToList(new Uint8Array(384), [user1, user2], signingKeys).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (encryptedKeys) => { - expect(encryptedKeys).toBeArrayOfSize(2); + expect(encryptedKeys).toHaveLength(2); expect(encryptedKeys[0].publicKey).toEqual(user1.masterPublicKey); - expect(encryptedKeys[0].encryptedPlaintext).toContainAllKeys([ - "encryptedMessage", - "ephemeralPublicKey", - "authHash", - "signature", - "publicSigningKey", - ]); - expect(encryptedKeys[0].encryptedPlaintext.ephemeralPublicKey).toContainAllKeys(["x", "y"]); + expect(Object.keys(encryptedKeys[0].encryptedPlaintext)).toEqual( + expect.arrayContaining(["encryptedMessage", "ephemeralPublicKey", "authHash", "signature", "publicSigningKey"]) + ); + expect(Object.keys(encryptedKeys[0].encryptedPlaintext.ephemeralPublicKey)).toEqual(expect.arrayContaining(["x", "y"])); expect(encryptedKeys[0].id).toEqual("user1"); expect(encryptedKeys[1].publicKey).toEqual(user2.masterPublicKey); - expect(encryptedKeys[1].encryptedPlaintext).toContainAllKeys([ - "encryptedMessage", - "ephemeralPublicKey", - "authHash", - "signature", - "publicSigningKey", - ]); - expect(encryptedKeys[1].encryptedPlaintext.ephemeralPublicKey).toContainAllKeys(["x", "y"]); + expect(Object.keys(encryptedKeys[1].encryptedPlaintext)).toEqual( + expect.arrayContaining(["encryptedMessage", "ephemeralPublicKey", "authHash", "signature", "publicSigningKey"]) + ); + expect(Object.keys(encryptedKeys[1].encryptedPlaintext.ephemeralPublicKey)).toEqual(expect.arrayContaining(["x", "y"])); expect(encryptedKeys[1].id).toEqual("user2"); } ); @@ -397,9 +425,11 @@ describe("RecryptWasm", () => { it("returns empty list when no keys provided", () => { const signingKeys = TestUtils.getSigningKeyPair(); Recrypt.encryptPlaintextToList(new Uint8Array(384), [], signingKeys).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (encryptedKeys) => { - expect(encryptedKeys).toBeArrayOfSize(0); + expect(encryptedKeys).toHaveLength(0); } ); }); @@ -410,7 +440,9 @@ describe("RecryptWasm", () => { const encryptedValue = TestUtils.getTransformedSymmetricKey(); const privateKey = new Uint8Array(32); Recrypt.decryptPlaintext(encryptedValue, privateKey).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, ([decryptedPlaintext, symKey]) => { expect(decryptedPlaintext).toEqual(expect.any(Uint8Array)); expect(decryptedPlaintext.length).toEqual(55); //Comes from RecryptMock.ts file @@ -426,7 +458,7 @@ describe("RecryptWasm", () => { it("returns comma list of items and calculates two signatures", () => { const signingKeys = TestUtils.getSigningKeyPair(); jest.spyOn(Recrypt.getApi(), "ed25519Sign").mockReturnValue(new Uint8Array(64)); - spyOn(Date, "now").and.returnValue(123456); + jest.spyOn(Date, "now").mockReturnValue(123456); const signatureDetails = Recrypt.createRequestSignature(1, "user-10", signingKeys, "get", "/path/to/resource", "bodyparts"); expect(signatureDetails.userContextHeader).toEqual("123456,1,user-10,AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); expect(signatureDetails.authHeaderSignature).toEqual("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); @@ -441,7 +473,7 @@ describe("RecryptWasm", () => { it("uses an empty byte array when body is empty", () => { const signingKeys = TestUtils.getSigningKeyPair(); jest.spyOn(Recrypt.getApi(), "ed25519Sign").mockReturnValue(new Uint8Array(64)); - spyOn(Date, "now").and.returnValue(123456); + jest.spyOn(Date, "now").mockReturnValue(123456); const signatureDetails = Recrypt.createRequestSignature(1, "user-10", signingKeys, "POST", "/path/to/resource", null); expect(signatureDetails.userContextHeader).toEqual("123456,1,user-10,AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); expect(signatureDetails.authHeaderSignature).toEqual("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); @@ -456,7 +488,7 @@ describe("RecryptWasm", () => { it("uses existing Uint8Array when body is set as one", () => { const signingKeys = TestUtils.getSigningKeyPair(); jest.spyOn(Recrypt.getApi(), "ed25519Sign").mockReturnValue(new Uint8Array(64)); - spyOn(Date, "now").and.returnValue(123456); + jest.spyOn(Date, "now").mockReturnValue(123456); const signatureDetails = Recrypt.createRequestSignature(1, "user-10", signingKeys, "GET", "/path/to/resource", new Uint8Array([9, 9, 9, 9])); expect(signatureDetails.userContextHeader).toEqual("123456,1,user-10,AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); expect(signatureDetails.authHeaderSignature).toEqual("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); @@ -472,10 +504,10 @@ describe("RecryptWasm", () => { describe("generateDeviceAddSignature", () => { it("generates the expected signature", (done) => { const fixedTS = 1234567890123; - spyOn(Date, "now").and.returnValue(fixedTS); + jest.spyOn(Date, "now").mockReturnValue(fixedTS); Recrypt.generateDeviceAddSignature("jwt", TestUtils.getEmptyKeyPair(), TestUtils.getTransformKey()).engage( - (e) => fail(e.message), + (e) => done(e), (signature) => { expect(signature.ts).toEqual(fixedTS); expect(signature.signature).toEqual(expect.any(Uint8Array)); diff --git a/src/frame/worker/crypto/tests/CryptoUtils.test.ts b/src/frame/worker/crypto/tests/CryptoUtils.test.ts index e500bc1..38a4a74 100644 --- a/src/frame/worker/crypto/tests/CryptoUtils.test.ts +++ b/src/frame/worker/crypto/tests/CryptoUtils.test.ts @@ -3,18 +3,20 @@ import * as CryptoUtils from "../CryptoUtils"; describe("CryptoUtils", () => { describe("getCryptoSubtleApi", () => { it("returns subtle crypto object or undefined", () => { - expect(CryptoUtils.getCryptoSubtleApi()).toBeObject(); + expect(typeof CryptoUtils.getCryptoSubtleApi()).toBe("object"); }); }); describe("generateRandomBytes", () => { it("returns random bytes without calling back to main window", (done) => { - spyOn(window, "postMessage"); + jest.spyOn(window, "postMessage"); CryptoUtils.generateRandomBytes(12).engage( - (e) => fail(e), + (e) => { + throw e; + }, (bytes) => { - expect(bytes instanceof Uint8Array).toBeTrue(); + expect(bytes instanceof Uint8Array).toBe(true); expect(bytes.length).toEqual(12); expect(window.postMessage).not.toHaveBeenCalled(); done(); diff --git a/src/frame/worker/tests/DocumentCrypto.test.ts b/src/frame/worker/tests/DocumentCrypto.test.ts index f54f58c..38c5fa8 100644 --- a/src/frame/worker/tests/DocumentCrypto.test.ts +++ b/src/frame/worker/tests/DocumentCrypto.test.ts @@ -10,14 +10,16 @@ describe("DocumentCrypto", () => { it("decrypts document key and then decrypts document", () => { const decryptedKey = new Uint8Array(22); const plaintext = new Uint8Array(384); - spyOn(Recrypt, "decryptPlaintext").and.returnValue(Future.of([plaintext, decryptedKey])); - spyOn(AES, "decryptDocument").and.returnValue(Future.of("decrypted document")); + jest.spyOn(Recrypt, "decryptPlaintext").mockReturnValue(Future.of([plaintext, decryptedKey])); + jest.spyOn(AES, "decryptDocument").mockReturnValue(Future.of("decrypted document")); const testDoc = TestUtils.getEncryptedDocument(); const symKey = TestUtils.getTransformedSymmetricKey(); const privKey = new Uint8Array(32); DocumentCrypto.decryptDocument(testDoc, symKey, privKey).engage( - (e) => fail(e), + (e) => { + throw e; + }, (decryptedData: any) => { expect(decryptedData).toEqual("decrypted document"); expect(Recrypt.decryptPlaintext).toHaveBeenCalledWith(symKey, privKey); @@ -27,14 +29,16 @@ describe("DocumentCrypto", () => { }); it("maps failures to SDK error with specific error code", () => { - spyOn(Recrypt, "decryptPlaintext").and.returnValue(Future.reject(new Error("plaintext decryption failure"))); + jest.spyOn(Recrypt, "decryptPlaintext").mockReturnValue(Future.reject(new Error("plaintext decryption failure"))); DocumentCrypto.decryptDocument(TestUtils.getEncryptedDocument(), TestUtils.getTransformedSymmetricKey(), new Uint8Array(32)).engage( (error) => { expect(error.message).toEqual("plaintext decryption failure"); expect(error.code).toEqual(ErrorCodes.DOCUMENT_DECRYPT_FAILURE); }, - () => fail("success handler should not be invoked when operation fails") + () => { + throw new Error("success handler should not be invoked when operation fails"); + } ); }); }); @@ -53,15 +57,15 @@ describe("DocumentCrypto", () => { }, ]; - spyOn(Recrypt, "generateDocumentKey").and.returnValue(Future.of([generatedPlaintext, generatedKey])); - spyOn(Recrypt, "encryptPlaintextToList").and.callFake((_: any, keyList: any) => { + jest.spyOn(Recrypt, "generateDocumentKey").mockReturnValue(Future.of([generatedPlaintext, generatedKey])); + jest.spyOn(Recrypt, "encryptPlaintextToList").mockImplementation((_: any, keyList: any) => { if (keyList.length) { - return Future.of(encryptedUserKeyList); + return Future.of(encryptedUserKeyList); } - return Future.of([]); + return Future.of([]); }); - spyOn(AES, "encryptDocument").and.returnValue( - Future.of({ + jest.spyOn(AES, "encryptDocument").mockReturnValue( + Future.of({ data, dataNonce, }) @@ -72,7 +76,9 @@ describe("DocumentCrypto", () => { const signingKeys = TestUtils.getSigningKeyPair(); DocumentCrypto.encryptDocument(docToEncrypt, userPublicKeyList, [], signingKeys).engage( - (e) => fail(e), + (e) => { + throw e; + }, (decryptedData: any) => { expect(decryptedData).toEqual({ userAccessKeys: encryptedUserKeyList, @@ -80,7 +86,7 @@ describe("DocumentCrypto", () => { encryptedDocument: {data, dataNonce}, }); expect(Recrypt.generateDocumentKey).toHaveBeenCalledWith(); - expect((Recrypt.encryptPlaintextToList as jasmine.Spy).calls.count()).toEqual(2); + expect(Recrypt.encryptPlaintextToList as unknown as jest.SpyInstance).toHaveBeenCalledTimes(2); expect(Recrypt.encryptPlaintextToList).toHaveBeenCalledWith(generatedPlaintext, userPublicKeyList, signingKeys); expect(Recrypt.encryptPlaintextToList).toHaveBeenCalledWith(generatedPlaintext, [], signingKeys); expect(AES.encryptDocument).toHaveBeenCalledWith(docToEncrypt, generatedKey); @@ -101,15 +107,15 @@ describe("DocumentCrypto", () => { }, ]; - spyOn(Recrypt, "generateDocumentKey").and.returnValue(Future.of([generatedPlaintext, generatedKey])); - spyOn(Recrypt, "encryptPlaintextToList").and.callFake((_: any, keyList: any) => { + jest.spyOn(Recrypt, "generateDocumentKey").mockReturnValue(Future.of([generatedPlaintext, generatedKey])); + jest.spyOn(Recrypt, "encryptPlaintextToList").mockImplementation((_: any, keyList: any) => { if (keyList.length) { - return Future.of(encryptedGroupKeyList); + return Future.of(encryptedGroupKeyList); } - return Future.of([]); + return Future.of([]); }); - spyOn(AES, "encryptDocument").and.returnValue( - Future.of({ + jest.spyOn(AES, "encryptDocument").mockReturnValue( + Future.of({ data, dataNonce, }) @@ -120,7 +126,9 @@ describe("DocumentCrypto", () => { const signingKeys = TestUtils.getSigningKeyPair(); DocumentCrypto.encryptDocument(docToEncrypt, [], groupPublicKeyList, signingKeys).engage( - (e) => fail(e), + (e) => { + throw e; + }, (decryptedData: any) => { expect(decryptedData).toEqual({ userAccessKeys: [], @@ -128,7 +136,7 @@ describe("DocumentCrypto", () => { encryptedDocument: {data, dataNonce}, }); expect(Recrypt.generateDocumentKey).toHaveBeenCalledWith(); - expect((Recrypt.encryptPlaintextToList as jasmine.Spy).calls.count()).toEqual(2); + expect(Recrypt.encryptPlaintextToList as unknown as jest.SpyInstance).toHaveBeenCalledTimes(2); expect(Recrypt.encryptPlaintextToList).toHaveBeenCalledWith(generatedPlaintext, groupPublicKeyList, signingKeys); expect(Recrypt.encryptPlaintextToList).toHaveBeenCalledWith(generatedPlaintext, [], signingKeys); expect(AES.encryptDocument).toHaveBeenCalledWith(docToEncrypt, generatedKey); @@ -148,15 +156,15 @@ describe("DocumentCrypto", () => { {publicKey: "secondGroupPK", encryptedSymmetricKey: "secoGroupESK"}, ]; - spyOn(Recrypt, "generateDocumentKey").and.returnValue(Future.of([generatedPlaintext, generatedKey])); - spyOn(Recrypt, "encryptPlaintextToList").and.callFake((_: any, keyList: any) => { + jest.spyOn(Recrypt, "generateDocumentKey").mockReturnValue(Future.of([generatedPlaintext, generatedKey])); + jest.spyOn(Recrypt, "encryptPlaintextToList").mockImplementation((_: any, keyList: any) => { if (keyList.length === 1) { - return Future.of(encryptedUserKeyList); + return Future.of(encryptedUserKeyList); } - return Future.of(encryptedGroupKeyList); + return Future.of(encryptedGroupKeyList); }); - spyOn(AES, "encryptDocument").and.returnValue( - Future.of({ + jest.spyOn(AES, "encryptDocument").mockReturnValue( + Future.of({ data, dataNonce, }) @@ -171,7 +179,9 @@ describe("DocumentCrypto", () => { const signingKeys = TestUtils.getSigningKeyPair(); DocumentCrypto.encryptDocument(docToEncrypt, userPublicKeyList, groupPublicKeyList, signingKeys).engage( - (e) => fail(e), + (e) => { + throw e; + }, (decryptedData: any) => { expect(decryptedData).toEqual({ userAccessKeys: encryptedUserKeyList, @@ -179,7 +189,7 @@ describe("DocumentCrypto", () => { encryptedDocument: {data, dataNonce}, }); expect(Recrypt.generateDocumentKey).toHaveBeenCalledWith(); - expect((Recrypt.encryptPlaintextToList as jasmine.Spy).calls.count()).toEqual(2); + expect(Recrypt.encryptPlaintextToList as unknown as jest.SpyInstance).toHaveBeenCalledTimes(2); expect(Recrypt.encryptPlaintextToList).toHaveBeenCalledWith(generatedPlaintext, userPublicKeyList, signingKeys); expect(Recrypt.encryptPlaintextToList).toHaveBeenCalledWith(generatedPlaintext, groupPublicKeyList, signingKeys); expect(AES.encryptDocument).toHaveBeenCalledWith(docToEncrypt, generatedKey); @@ -188,14 +198,16 @@ describe("DocumentCrypto", () => { }); it("maps failures to SDK error with specific error code", () => { - spyOn(Recrypt, "generateDocumentKey").and.returnValue(Future.reject(new Error("generate doc key failure"))); + jest.spyOn(Recrypt, "generateDocumentKey").mockReturnValue(Future.reject(new Error("generate doc key failure"))); DocumentCrypto.encryptDocument(new Uint8Array(35), [], [], TestUtils.getSigningKeyPair()).engage( (error) => { expect(error.message).toEqual("generate doc key failure"); expect(error.code).toEqual(ErrorCodes.DOCUMENT_ENCRYPT_FAILURE); }, - () => fail("success handler should not be invoked when operation fails") + () => { + throw new Error("success handler should not be invoked when operation fails"); + } ); }); }); @@ -209,15 +221,17 @@ describe("DocumentCrypto", () => { dataNonce: new Uint8Array(12), }; - spyOn(Recrypt, "decryptPlaintext").and.returnValue(Future.of([plaintext, decryptKey])); - spyOn(AES, "encryptDocument").and.returnValue(Future.of(decryptResult)); + jest.spyOn(Recrypt, "decryptPlaintext").mockReturnValue(Future.of([plaintext, decryptKey])); + jest.spyOn(AES, "encryptDocument").mockReturnValue(Future.of(decryptResult)); const symKey = TestUtils.getTransformedSymmetricKey(); const newData = new Uint8Array(35); const privKey = new Uint8Array(32); DocumentCrypto.reEncryptDocument(newData, symKey, privKey).engage( - (e) => fail(e), + (e) => { + throw e; + }, (decryptedData: any) => { expect(decryptedData).toEqual(decryptResult); expect(Recrypt.decryptPlaintext).toHaveBeenCalledWith(symKey, privKey); @@ -227,13 +241,15 @@ describe("DocumentCrypto", () => { }); it("maps failures to SDK error with specific error code", () => { - spyOn(Recrypt, "decryptPlaintext").and.returnValue(Future.reject(new Error("plaintext decrypt failure"))); + jest.spyOn(Recrypt, "decryptPlaintext").mockReturnValue(Future.reject(new Error("plaintext decrypt failure"))); DocumentCrypto.reEncryptDocument(new Uint8Array(35), TestUtils.getTransformedSymmetricKey(), new Uint8Array(32)).engage( (error) => { expect(error.message).toEqual("plaintext decrypt failure"); expect(error.code).toEqual(ErrorCodes.DOCUMENT_REENCRYPT_FAILURE); }, - () => fail("success handler should not be invoked when operation fails") + () => { + throw new Error("success handler should not be invoked when operation fails"); + } ); }); }); @@ -253,8 +269,8 @@ describe("DocumentCrypto", () => { }, ]; - spyOn(Recrypt, "decryptPlaintext").and.returnValue(Future.of([decryptPlaintext, decryptKey])); - spyOn(Recrypt, "encryptPlaintextToList").and.returnValue(Future.of(EncryptedAccessKeyList)); + jest.spyOn(Recrypt, "decryptPlaintext").mockReturnValue(Future.of([decryptPlaintext, decryptKey])); + jest.spyOn(Recrypt, "encryptPlaintextToList").mockReturnValue(Future.of(EncryptedAccessKeyList)); const userList = [ {id: "abc-123", masterPublicKey: {x: "", y: ""}}, @@ -265,7 +281,9 @@ describe("DocumentCrypto", () => { const signingKeys = TestUtils.getSigningKeyPair(); DocumentCrypto.encryptToKeys(TestUtils.getTransformedSymmetricKey(), userList, groupList, new Uint8Array(32), signingKeys).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (resp: any) => { expect(resp).toEqual({ userAccessKeys: EncryptedAccessKeyList, @@ -279,13 +297,15 @@ describe("DocumentCrypto", () => { }); it("maps failures to SDK error with specific error code", () => { - spyOn(Recrypt, "decryptPlaintext").and.returnValue(Future.reject(new Error("plaintext decrypt failure"))); + jest.spyOn(Recrypt, "decryptPlaintext").mockReturnValue(Future.reject(new Error("plaintext decrypt failure"))); DocumentCrypto.encryptToKeys(TestUtils.getTransformedSymmetricKey(), [], [], new Uint8Array(32), TestUtils.getSigningKeyPair()).engage( (error) => { expect(error.message).toEqual("plaintext decrypt failure"); expect(error.code).toEqual(ErrorCodes.DOCUMENT_GRANT_ACCESS_FAILURE); }, - () => fail("success handler should not be invoked when operation fails") + () => { + throw new Error("success handler should not be invoked when operation fails"); + } ); }); }); diff --git a/src/frame/worker/tests/GroupCrypto.test.ts b/src/frame/worker/tests/GroupCrypto.test.ts index 7f9f81a..39b614e 100644 --- a/src/frame/worker/tests/GroupCrypto.test.ts +++ b/src/frame/worker/tests/GroupCrypto.test.ts @@ -16,23 +16,25 @@ describe("GroupCrypto", () => { const memeberList = [{id: "user2ID", masterPublicKey: TestUtils.getEmptyPublicKeyString()}]; jest.spyOn(Recrypt, "generateGroupKeyPair").mockReturnValue( - Future.of({ + Future.of({ publicKey: new Uint8Array(32), plaintext: new Uint8Array(12), privateKey: new Uint8Array(29), }) as any ); - jest.spyOn(Recrypt, "encryptPlaintextToList").mockReturnValue(Future.of(["TransformKeyGrant"]) as any); + jest.spyOn(Recrypt, "encryptPlaintextToList").mockReturnValue(Future.of(["TransformKeyGrant"]) as any); jest.spyOn(Recrypt, "generateTransformKeyToList").mockReturnValue( - Future.of({ + Future.of({ transformKeyGrant: [], }) as any ); GroupCrypto.createGroup(signingKeys, memeberList, adminList).engage( - (e) => fail(e), + (e) => { + throw e; + }, (groupKeys: any) => { expect(groupKeys.encryptedAccessKeys).toEqual(["TransformKeyGrant"]); expect(groupKeys.groupPublicKey).toEqual(new Uint8Array(32)); @@ -50,18 +52,20 @@ describe("GroupCrypto", () => { ]; jest.spyOn(Recrypt, "generateGroupKeyPair").mockReturnValue( - Future.of({ + Future.of({ publicKey: new Uint8Array(32), plaintext: new Uint8Array(12), privateKey: new Uint8Array(29), }) as any ); - jest.spyOn(Recrypt, "encryptPlaintextToList").mockReturnValue(Future.of(["TransformKeyGrant"]) as any); + jest.spyOn(Recrypt, "encryptPlaintextToList").mockReturnValue(Future.of(["TransformKeyGrant"]) as any); jest.spyOn(Recrypt, "generateTransformKeyToList"); GroupCrypto.createGroup(signingKeys, [], adminList).engage( - (e) => fail(e), + (e) => { + throw e; + }, (groupKeys: any) => { expect(groupKeys.encryptedAccessKeys).toEqual(["TransformKeyGrant"]); expect(groupKeys.groupPublicKey).toEqual(new Uint8Array(32)); @@ -81,7 +85,9 @@ describe("GroupCrypto", () => { expect(error.message).toEqual("group key gen failure"); expect(error.code).toEqual(ErrorCodes.GROUP_KEY_GENERATION_FAILURE); }, - () => fail("Success should not be invoked when operations fail") + () => { + throw new Error("Success should not be invoked when operations fail"); + } ); }); }); @@ -92,17 +98,19 @@ describe("GroupCrypto", () => { const adminPrivateKey = new Uint8Array(23); const signingKeys = TestUtils.getSigningKeyPair(); - jest.spyOn(Recrypt, "decryptPlaintext").mockReturnValue(Future.of(["decryptedPlaintext", new Uint8Array()]) as any); + jest.spyOn(Recrypt, "decryptPlaintext").mockReturnValue(Future.of(["decryptedPlaintext", new Uint8Array()]) as any); jest.spyOn(Recrypt, "rotateGroupPrivateKeyWithRetry").mockReturnValue( - Future.of({ + Future.of({ plaintext: "plaintext", augmentationFactor: "augmentationFactor", }) as any ); - jest.spyOn(Recrypt, "encryptPlaintextToList").mockReturnValue(Future.of(["accessKey1", "accessKey2"]) as any); + jest.spyOn(Recrypt, "encryptPlaintextToList").mockReturnValue(Future.of(["accessKey1", "accessKey2"]) as any); GroupCrypto.rotatePrivateKey(groupPrivateKey, adminList, adminPrivateKey, signingKeys).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (result: any) => { expect(result).toEqual({encryptedAccessKeys: ["accessKey1", "accessKey2"], augmentationFactor: "augmentationFactor"}); expect(Recrypt.decryptPlaintext).toHaveBeenCalledWith(groupPrivateKey, adminPrivateKey); @@ -117,14 +125,16 @@ describe("GroupCrypto", () => { const adminPrivateKey = new Uint8Array(23); const signingKeys = TestUtils.getSigningKeyPair(); - spyOn(Recrypt, "decryptPlaintext").and.returnValue(Future.reject(new Error("plaintext decryption failed"))); + jest.spyOn(Recrypt, "decryptPlaintext").mockReturnValue(Future.reject(new Error("plaintext decryption failed"))); GroupCrypto.rotatePrivateKey(groupPrivateKey, adminList, adminPrivateKey, signingKeys).engage( (error) => { expect(error.message).toEqual("plaintext decryption failed"); expect(error.code).toEqual(ErrorCodes.GROUP_PRIVATE_KEY_ROTATION_FAILURE); }, - () => fail("Success should not be invoked when operations fail") + () => { + throw new Error("Success should not be invoked when operations fail"); + } ); }); }); @@ -132,8 +142,8 @@ describe("GroupCrypto", () => { it("decrypts group private key encrypts it to the provided list of public keys", () => { const signature = new Uint8Array(32); const groupPublicKey = TestUtils.getEmptyPublicKeyString(); - jest.spyOn(Recrypt, "decryptPlaintext").mockReturnValue(Future.of(["decryptedPlaintext", "key"]) as any); - jest.spyOn(Recrypt, "encryptPlaintextToList").mockReturnValue(Future.of(["accessKey1", "accessKey2"]) as any); + jest.spyOn(Recrypt, "decryptPlaintext").mockReturnValue(Future.of(["decryptedPlaintext", "key"]) as any); + jest.spyOn(Recrypt, "encryptPlaintextToList").mockReturnValue(Future.of(["accessKey1", "accessKey2"]) as any); jest.spyOn(Recrypt, "schnorrSignUtf8String").mockReturnValue(signature as any); const groupPrivateKey = TestUtils.getTransformedSymmetricKey(); @@ -142,7 +152,9 @@ describe("GroupCrypto", () => { const signingKeys = TestUtils.getSigningKeyPair(); GroupCrypto.addAdminsToGroup(groupPrivateKey, groupPublicKey, "groupID", userList, adminPrivateKey, signingKeys).engage( - (e) => fail(e.message), + (e) => { + throw new Error(e.message); + }, (result: any) => { expect(result).toEqual({encryptedAccessKey: ["accessKey1", "accessKey2"], signature}); expect(Recrypt.decryptPlaintext).toHaveBeenCalledWith(groupPrivateKey, adminPrivateKey); @@ -154,7 +166,7 @@ describe("GroupCrypto", () => { it("maps errors to SDKError with expected error code", () => { const groupPublicKey = TestUtils.getEmptyPublicKeyString(); - spyOn(Recrypt, "decryptPlaintext").and.returnValue(Future.reject(new Error("plaintext decryption failed"))); + jest.spyOn(Recrypt, "decryptPlaintext").mockReturnValue(Future.reject(new Error("plaintext decryption failed"))); const groupPrivateKey = TestUtils.getTransformedSymmetricKey(); const adminPrivateKey = new Uint8Array(20); @@ -166,7 +178,9 @@ describe("GroupCrypto", () => { expect(error.message).toEqual("plaintext decryption failed"); expect(error.code).toEqual(ErrorCodes.GROUP_KEY_DECRYPTION_FAILURE); }, - () => fail("Success should not be invoked when operations fail") + () => { + throw new Error("Success should not be invoked when operations fail"); + } ); }); }); @@ -174,8 +188,8 @@ describe("GroupCrypto", () => { describe("addMembersToGroup", () => { it("decrypts key and reencrypts it to the list of users provided", (done) => { const signature = new Uint8Array(32); - jest.spyOn(Recrypt, "decryptPlaintext").mockReturnValue(Future.of(["anything", "documentSymKey"]) as any); - jest.spyOn(Recrypt, "generateTransformKeyToList").mockReturnValue(Future.of("keysForUser") as any); + jest.spyOn(Recrypt, "decryptPlaintext").mockReturnValue(Future.of(["anything", "documentSymKey"]) as any); + jest.spyOn(Recrypt, "generateTransformKeyToList").mockReturnValue(Future.of("keysForUser") as any); jest.spyOn(Recrypt, "schnorrSignUtf8String").mockReturnValue(signature as any); const groupPrivateKey = TestUtils.getTransformedSymmetricKey(); @@ -185,7 +199,9 @@ describe("GroupCrypto", () => { const groupPublicKey = TestUtils.getEmptyPublicKeyString(); GroupCrypto.addMembersToGroup(groupPrivateKey, groupPublicKey, "groupID", userList, adminPrivateKey, signingKeys).engage( - (e) => fail(e), + (e) => { + throw e; + }, (result: any) => { expect(result).toEqual({transformKeyGrant: "keysForUser", signature}); expect(Recrypt.decryptPlaintext).toHaveBeenCalledWith(groupPrivateKey, adminPrivateKey); @@ -197,7 +213,7 @@ describe("GroupCrypto", () => { }); it("maps errors to SDKError with specific error code", () => { - spyOn(Recrypt, "decryptPlaintext").and.returnValue(Future.reject(new Error("plaintext decryption failed"))); + jest.spyOn(Recrypt, "decryptPlaintext").mockReturnValue(Future.reject(new Error("plaintext decryption failed"))); const groupPrivateKey = TestUtils.getTransformedSymmetricKey(); const adminPrivateKey = new Uint8Array(20); @@ -210,7 +226,9 @@ describe("GroupCrypto", () => { expect(error.message).toEqual("plaintext decryption failed"); expect(error.code).toEqual(ErrorCodes.GROUP_MEMBER_KEY_ENCRYPTION_FAILURE); }, - () => fail("Success should not be invoked when operations fail") + () => { + throw new Error("Success should not be invoked when operations fail"); + } ); }); }); diff --git a/src/frame/worker/tests/UserCrypto.test.ts b/src/frame/worker/tests/UserCrypto.test.ts index 3221e09..9939300 100644 --- a/src/frame/worker/tests/UserCrypto.test.ts +++ b/src/frame/worker/tests/UserCrypto.test.ts @@ -11,13 +11,15 @@ describe("UserCrypto", () => { const encryptedPrivateUserKey = new Uint8Array(32); const privateKey = new Uint8Array(32); - spyOn(Recrypt, "generatePasswordDerivedKey").and.returnValue(Future.of("derivedKey")); - spyOn(Recrypt, "rotateUsersPrivateKeyWithRetry").and.returnValue(Future.of({newPrivateKey: "boo", augmentationFactor: "or-treat"})); - spyOn(AES, "encryptUserKey").and.returnValue(Future.of("trick")); - spyOn(AES, "decryptUserKey").and.returnValue(Future.of(privateKey)); + jest.spyOn(Recrypt, "generatePasswordDerivedKey").mockReturnValue(Future.of("derivedKey")); + jest.spyOn(Recrypt, "rotateUsersPrivateKeyWithRetry").mockReturnValue(Future.of({newPrivateKey: "boo", augmentationFactor: "or-treat"})); + jest.spyOn(AES, "encryptUserKey").mockReturnValue(Future.of("trick")); + jest.spyOn(AES, "decryptUserKey").mockReturnValue(Future.of(privateKey)); UserCrypto.rotatePrivateKey("passcode", encryptedPrivateUserKey).engage( - (e) => fail(e), + (e) => { + throw e; + }, (userKeyRotationResult: any) => { expect(userKeyRotationResult).toEqual({ newEncryptedPrivateUserKey: "trick", @@ -40,16 +42,20 @@ describe("UserCrypto", () => { const deviceKeys = TestUtils.getEmptyKeyPair(); const privateUserKey = new Uint8Array(32); - spyOn(Recrypt, "generateKeyPair").and.returnValue(Future.of(deviceKeys)); - spyOn(Recrypt, "generateSigningKeyPair").and.returnValue(Future.of(signingKeys)); - spyOn(Recrypt, "generateTransformKey").and.returnValue(Future.of("transformKey")); - spyOn(Recrypt, "generateDeviceAddSignature").and.returnValue(Future.of("device signature")); - spyOn(Recrypt, "generatePasswordDerivedKey").and.returnValue(Future.of("derivedKey")); - spyOn(AES, "encryptDeviceAndSigningKeys").and.returnValue(Future.of({deviceKey: "encryptedDeviceKey", signingKey: "encryptedSigningKey"})); - spyOn(AES, "decryptUserKey").and.returnValue(Future.of("decrypted keys")); + jest.spyOn(Recrypt, "generateKeyPair").mockReturnValue(Future.of(deviceKeys)); + jest.spyOn(Recrypt, "generateSigningKeyPair").mockReturnValue(Future.of(signingKeys)); + jest.spyOn(Recrypt, "generateTransformKey").mockReturnValue(Future.of("transformKey")); + jest.spyOn(Recrypt, "generateDeviceAddSignature").mockReturnValue(Future.of("device signature")); + jest.spyOn(Recrypt, "generatePasswordDerivedKey").mockReturnValue(Future.of("derivedKey")); + jest.spyOn(AES, "encryptDeviceAndSigningKeys").mockReturnValue( + Future.of({deviceKey: "encryptedDeviceKey", signingKey: "encryptedSigningKey"}) + ); + jest.spyOn(AES, "decryptUserKey").mockReturnValue(Future.of("decrypted keys")); UserCrypto.generateDeviceAndSigningKeys("validJWT", "passcode", new Uint8Array(32), privateUserKey, publicUserKey).engage( - (e) => fail(e), + (e) => { + throw e; + }, (deviceAndSigningKeys: any) => { expect(deviceAndSigningKeys).toEqual({ userKeys: { @@ -76,27 +82,29 @@ describe("UserCrypto", () => { }); it("maps user key decrypt error to SDK error with proper error code", () => { - spyOn(Recrypt, "generateKeyPair").and.returnValue(Future.of(TestUtils.getEmptyKeyPair())); - spyOn(Recrypt, "generateSigningKeyPair").and.returnValue(Future.of(TestUtils.getSigningKeyPair())); - spyOn(Recrypt, "generatePasswordDerivedKey").and.returnValue(Future.of("derivedKey")); - spyOn(AES, "decryptUserKey").and.returnValue(Future.reject(new Error("could not do a decrypt"))); + jest.spyOn(Recrypt, "generateKeyPair").mockReturnValue(Future.of(TestUtils.getEmptyKeyPair())); + jest.spyOn(Recrypt, "generateSigningKeyPair").mockReturnValue(Future.of(TestUtils.getSigningKeyPair())); + jest.spyOn(Recrypt, "generatePasswordDerivedKey").mockReturnValue(Future.of("derivedKey")); + jest.spyOn(AES, "decryptUserKey").mockReturnValue(Future.reject(new Error("could not do a decrypt"))); const userPublic = TestUtils.getEmptyPublicKey(); UserCrypto.generateDeviceAndSigningKeys("validJWT", "passcode", new Uint8Array(32), new Uint8Array(32), userPublic).engage( (error) => { - expect(error.message).toBeString(); + expect(error.message).toEqual(expect.stringContaining("")); expect(error.code).toEqual(ErrorCodes.USER_PASSCODE_INCORRECT); }, - () => fail("Success handler should not be called with functions fail") + () => { + throw new Error("Success handler should not be called with functions fail"); + } ); }); it("maps Recrypt operation failure to expected SDK error code", () => { - spyOn(Recrypt, "generateKeyPair").and.returnValue(Future.reject(new Error("recrypt key gen failure"))); - spyOn(Recrypt, "generateSigningKeyPair").and.returnValue(Future.of(TestUtils.getSigningKeyPair())); - spyOn(Recrypt, "generatePasswordDerivedKey").and.returnValue(Future.of("derivedKey")); - spyOn(AES, "decryptUserKey").and.returnValue(Future.of("decrypted keys")); + jest.spyOn(Recrypt, "generateKeyPair").mockReturnValue(Future.reject(new Error("recrypt key gen failure"))); + jest.spyOn(Recrypt, "generateSigningKeyPair").mockReturnValue(Future.of(TestUtils.getSigningKeyPair())); + jest.spyOn(Recrypt, "generatePasswordDerivedKey").mockReturnValue(Future.of("derivedKey")); + jest.spyOn(AES, "decryptUserKey").mockReturnValue(Future.of("decrypted keys")); const userPublic = TestUtils.getEmptyPublicKey(); @@ -105,7 +113,9 @@ describe("UserCrypto", () => { expect(error.message).toEqual("recrypt key gen failure"); expect(error.code).toEqual(ErrorCodes.USER_DEVICE_KEY_GENERATION_FAILURE); }, - () => fail("Success handler should not be called with functions fail") + () => { + throw new Error("Success handler should not be called with functions fail"); + } ); }); }); @@ -114,12 +124,14 @@ describe("UserCrypto", () => { it("generates document key and then encrypts key and document", () => { const userKeyPair = TestUtils.getEmptyKeyPair(); - spyOn(Recrypt, "generateKeyPair").and.returnValue(Future.of(userKeyPair)); - spyOn(Recrypt, "generatePasswordDerivedKey").and.returnValue(Future.of("derived key")); - spyOn(AES, "encryptUserKey").and.returnValue(Future.of("epk")); + jest.spyOn(Recrypt, "generateKeyPair").mockReturnValue(Future.of(userKeyPair)); + jest.spyOn(Recrypt, "generatePasswordDerivedKey").mockReturnValue(Future.of("derived key")); + jest.spyOn(AES, "encryptUserKey").mockReturnValue(Future.of("epk")); UserCrypto.generateNewUserKeys("passcode").engage( - (e) => fail(e), + (e) => { + throw e; + }, (userKeys) => { expect(userKeys as any).toEqual({ ...userKeyPair, @@ -134,15 +146,17 @@ describe("UserCrypto", () => { }); it("converts errors into sdk error with expected error code", () => { - spyOn(Recrypt, "generateKeyPair").and.returnValue(Future.reject(new Error("recrypt new user key pair failure"))); - spyOn(Recrypt, "generatePasswordDerivedKey").and.returnValue(Future.of("derived key")); + jest.spyOn(Recrypt, "generateKeyPair").mockReturnValue(Future.reject(new Error("recrypt new user key pair failure"))); + jest.spyOn(Recrypt, "generatePasswordDerivedKey").mockReturnValue(Future.of("derived key")); UserCrypto.generateNewUserKeys("passcode").engage( (error) => { expect(error.message).toEqual("recrypt new user key pair failure"); expect(error.code).toEqual(ErrorCodes.USER_MASTER_KEY_GENERATION_FAILURE); }, - () => fail("Should not invoke success when operation fails") + () => { + throw new Error("Should not invoke success when operation fails"); + } ); }); }); @@ -156,14 +170,16 @@ describe("UserCrypto", () => { privateKey: new Uint8Array([]), }; - spyOn(Recrypt, "generateNewUserKeySet").and.returnValue(Future.of({deviceKeys, userKeys: userKeyPair, signingKeys})); - spyOn(Recrypt, "generateTransformKey").and.returnValue(Future.of("transformKey")); - spyOn(Recrypt, "generatePasswordDerivedKey").and.returnValue(Future.of("derived key")); - spyOn(AES, "encryptDeviceAndSigningKeys").and.returnValue(Future.of("encryptedDeviceAndSigningKeys")); - spyOn(AES, "encryptUserKey").and.returnValue(Future.of("epk")); + jest.spyOn(Recrypt, "generateNewUserKeySet").mockReturnValue(Future.of({deviceKeys, userKeys: userKeyPair, signingKeys})); + jest.spyOn(Recrypt, "generateTransformKey").mockReturnValue(Future.of("transformKey")); + jest.spyOn(Recrypt, "generatePasswordDerivedKey").mockReturnValue(Future.of("derived key")); + jest.spyOn(AES, "encryptDeviceAndSigningKeys").mockReturnValue(Future.of("encryptedDeviceAndSigningKeys")); + jest.spyOn(AES, "encryptUserKey").mockReturnValue(Future.of("epk")); UserCrypto.generateNewUserAndDeviceKeys("passcode").engage( - (e) => fail(e), + (e) => { + throw e; + }, ({userKeys, encryptedDeviceAndSigningKeys}) => { expect(encryptedDeviceAndSigningKeys as any).toEqual("encryptedDeviceAndSigningKeys"); expect(userKeys as any).toEqual({ @@ -184,15 +200,17 @@ describe("UserCrypto", () => { }); it("converts errors into sdk error with expected error code", () => { - spyOn(Recrypt, "generateNewUserKeySet").and.returnValue(Future.reject(new Error("recrypt new user key set failure"))); - spyOn(Recrypt, "generatePasswordDerivedKey").and.returnValue(Future.of("derived key")); + jest.spyOn(Recrypt, "generateNewUserKeySet").mockReturnValue(Future.reject(new Error("recrypt new user key set failure"))); + jest.spyOn(Recrypt, "generatePasswordDerivedKey").mockReturnValue(Future.of("derived key")); UserCrypto.generateNewUserAndDeviceKeys("passcode").engage( (error) => { expect(error.message).toEqual("recrypt new user key set failure"); expect(error.code).toEqual(ErrorCodes.USER_MASTER_KEY_GENERATION_FAILURE); }, - () => fail("Should not invoke success when operation fails") + () => { + throw new Error("Should not invoke success when operation fails"); + } ); }); }); @@ -208,12 +226,14 @@ describe("UserCrypto", () => { const devicePublicKey = new Uint8Array(22); const signingPublicKey = new Uint8Array(23); - spyOn(Recrypt, "derivePublicKey").and.returnValue(Future.of(devicePublicKey)); - spyOn(Recrypt, "getPublicSigningKeyFromPrivate").and.returnValue(Future.of(signingPublicKey)); - spyOn(AES, "decryptDeviceAndSigningKeys").and.returnValue(Future.of({deviceKey, signingKey})); + jest.spyOn(Recrypt, "derivePublicKey").mockReturnValue(Future.of(devicePublicKey)); + jest.spyOn(Recrypt, "getPublicSigningKeyFromPrivate").mockReturnValue(Future.of(signingPublicKey)); + jest.spyOn(AES, "decryptDeviceAndSigningKeys").mockReturnValue(Future.of({deviceKey, signingKey})); UserCrypto.decryptDeviceAndSigningKeys(encryptedDeviceKey, encryptedSigningKey, symKey, nonce).engage( - (e) => fail(e), + (e) => { + throw e; + }, (keys: any) => { expect(keys).toEqual({ deviceKeys: { @@ -236,26 +256,28 @@ describe("UserCrypto", () => { const nonce = new Uint8Array(12); const symKey = new Uint8Array(30); - spyOn(AES, "decryptDeviceAndSigningKeys").and.returnValue(Future.reject(new Error("decrypt key failure"))); + jest.spyOn(AES, "decryptDeviceAndSigningKeys").mockReturnValue(Future.reject(new Error("decrypt key failure"))); UserCrypto.decryptDeviceAndSigningKeys(encryptedDeviceKey, encryptedSigningKey, symKey, nonce).engage( (error) => { expect(error.message).toEqual("decrypt key failure"); expect(error.code).toEqual(ErrorCodes.USER_DEVICE_KEY_DECRYPTION_FAILURE); }, - () => fail("Should not invoke success when operation fails") + () => { + throw new Error("Should not invoke success when operation fails"); + } ); }); }); describe("changeUsersPasscode", () => { it("derives current passcode key, decrypts master private key, derives updated user key, and reencrypts master private key", (done) => { - spyOn(AES, "decryptUserKey").and.returnValue(Future.of("decrypted private key")); - spyOn(AES, "encryptUserKey").and.returnValue(Future.of("encrypted private key")); - spyOn(Recrypt, "generatePasswordDerivedKey").and.returnValue(Future.of("derived fixed key")); + jest.spyOn(AES, "decryptUserKey").mockReturnValue(Future.of("decrypted private key")); + jest.spyOn(AES, "encryptUserKey").mockReturnValue(Future.of("encrypted private key")); + jest.spyOn(Recrypt, "generatePasswordDerivedKey").mockReturnValue(Future.of("derived fixed key")); UserCrypto.changeUsersPasscode("current", "new", new Uint8Array([33])).engage( - (e) => fail(e.message), + (e) => done(e), (encryptedKey: any) => { expect(encryptedKey).toEqual({ encryptedPrivateUserKey: "encrypted private key", @@ -271,9 +293,9 @@ describe("UserCrypto", () => { }); it("fails with expected error code when current passcode is incorrect", (done) => { - spyOn(AES, "decryptUserKey").and.returnValue(Future.reject(new Error("could not do a decrypt"))); - spyOn(AES, "encryptUserKey").and.returnValue(Future.of("encrypted private key")); - spyOn(Recrypt, "generatePasswordDerivedKey").and.returnValue(Future.of("derived fixed key")); + jest.spyOn(AES, "decryptUserKey").mockReturnValue(Future.reject(new Error("could not do a decrypt"))); + jest.spyOn(AES, "encryptUserKey").mockReturnValue(Future.of("encrypted private key")); + jest.spyOn(Recrypt, "generatePasswordDerivedKey").mockReturnValue(Future.of("derived fixed key")); UserCrypto.changeUsersPasscode("current", "new", new Uint8Array([33])).engage( (e) => { @@ -281,14 +303,14 @@ describe("UserCrypto", () => { expect(AES.encryptUserKey).not.toHaveBeenCalled(); done(); }, - () => fail("Future should not resolve when decryption fails") + () => done("Future should not resolve when decryption fails") ); }); it("maps error code correctly when generating new user key fails ", (done) => { - spyOn(AES, "decryptUserKey").and.returnValue(Future.of("decrypted private key")); - spyOn(AES, "encryptUserKey").and.returnValue(Future.reject(new Error("could not encrypt key"))); - spyOn(Recrypt, "generatePasswordDerivedKey").and.returnValue(Future.of("derived fixed key")); + jest.spyOn(AES, "decryptUserKey").mockReturnValue(Future.of("decrypted private key")); + jest.spyOn(AES, "encryptUserKey").mockReturnValue(Future.reject(new Error("could not encrypt key"))); + jest.spyOn(Recrypt, "generatePasswordDerivedKey").mockReturnValue(Future.of("derived fixed key")); UserCrypto.changeUsersPasscode("current", "new", new Uint8Array([33])).engage( (e) => { @@ -296,14 +318,14 @@ describe("UserCrypto", () => { expect(AES.encryptUserKey).toHaveBeenCalled(); done(); }, - () => fail("Future should not resolve when decryption fails") + () => done("Future should not resolve when decryption fails") ); }); }); describe("signRequestPayload", () => { it("signs the provided payload and returns the signature", () => { - spyOn(Recrypt, "createRequestSignature").and.returnValue({ + jest.spyOn(Recrypt, "createRequestSignature").mockReturnValue({ userContextHeader: "comma,list,stuff", requestHeaderSignature: "sig1", authHeaderSignature: "sig2", diff --git a/src/frame/worker/tests/index.test.ts b/src/frame/worker/tests/index.test.ts index 3a50d5f..406bf7e 100644 --- a/src/frame/worker/tests/index.test.ts +++ b/src/frame/worker/tests/index.test.ts @@ -9,7 +9,7 @@ import {fromByteArray} from "base64-js"; describe("worker index", () => { describe("ParentThreadMessenger", () => { it("posts proper worker message to parent window", () => { - spyOn(window, "postMessage"); + jest.spyOn(window, "postMessage").mockImplementation(); messenger.postMessageToParent({foo: "bar"} as any, 10); @@ -23,7 +23,7 @@ describe("worker index", () => { }); it("converts byte arrays to array buffers in transfer list", () => { - spyOn(window, "postMessage"); + jest.spyOn(window, "postMessage").mockImplementation(); const bytes = new Uint8Array(3); messenger.postMessageToParent({foo: "bar"} as any, 10, [bytes]); @@ -38,14 +38,14 @@ describe("worker index", () => { }); it("invokes message callback with event data when processing", () => { - spyOn(window, "postMessage"); + jest.spyOn(window, "postMessage").mockImplementation(); const bytes = new Uint8Array(3); - spyOn(messenger, "onMessageCallback"); + jest.spyOn(messenger, "onMessageCallback"); messenger.processMessageIntoWorker({data: {data: {foo: "bar"}, replyID: 38}} as MessageEvent); expect(messenger.onMessageCallback).toHaveBeenCalledWith({foo: "bar"}, expect.any(Function)); - const callback = (messenger.onMessageCallback as jasmine.Spy).calls.argsFor(0)[1]; + const callback = (messenger.onMessageCallback as unknown as jest.SpyInstance).mock.calls[0][1]; callback({response: "data"}, [bytes]); expect(window.postMessage).toHaveBeenCalledWith( @@ -60,7 +60,7 @@ describe("worker index", () => { describe("user crypto tests", () => { it("USER_DEVICE_KEYGEN", (done) => { - spyOn(UserCrypto, "generateDeviceAndSigningKeys").and.returnValue(Future.of("new keys")); + jest.spyOn(UserCrypto, "generateDeviceAndSigningKeys").mockReturnValue(Future.of("new keys")); const payload: any = { type: "USER_DEVICE_KEYGEN", message: { @@ -82,7 +82,7 @@ describe("worker index", () => { }); it("NEW_USER_KEYGEN", (done) => { - spyOn(UserCrypto, "generateNewUserKeys").and.returnValue(Future.of("new keys")); + jest.spyOn(UserCrypto, "generateNewUserKeys").mockReturnValue(Future.of("new keys")); const payload: any = { type: "NEW_USER_KEYGEN", message: { @@ -98,7 +98,7 @@ describe("worker index", () => { }); it("NEW_USER_AND_DEVICE_KEYGEN", (done) => { - spyOn(UserCrypto, "generateNewUserAndDeviceKeys").and.returnValue(Future.of("new keys")); + jest.spyOn(UserCrypto, "generateNewUserAndDeviceKeys").mockReturnValue(Future.of("new keys")); const payload: any = { type: "NEW_USER_AND_DEVICE_KEYGEN", message: { @@ -114,7 +114,7 @@ describe("worker index", () => { }); it("DECRYPT_LOCAL_KEYS", (done) => { - spyOn(UserCrypto, "decryptDeviceAndSigningKeys").and.returnValue(Future.of("decrypted keys")); + jest.spyOn(UserCrypto, "decryptDeviceAndSigningKeys").mockReturnValue(Future.of("decrypted keys")); const payload: any = { type: "DECRYPT_LOCAL_KEYS", message: { @@ -133,7 +133,7 @@ describe("worker index", () => { }); it("ROTATE_USER_PRIVATE_KEY", (done) => { - spyOn(UserCrypto, "rotatePrivateKey").and.returnValue(Future.of("rotated user key")); + jest.spyOn(UserCrypto, "rotatePrivateKey").mockReturnValue(Future.of("rotated user key")); const payload: any = { type: "ROTATE_USER_PRIVATE_KEY", message: {passcode: "passcode", encryptedPrivateUserKey: "encryptedPrivateUserKey"}, @@ -146,7 +146,7 @@ describe("worker index", () => { }); it("CHANGE_USER_PASSCODE", (done) => { - spyOn(UserCrypto, "changeUsersPasscode").and.returnValue(Future.of("new encrypted private key")); + jest.spyOn(UserCrypto, "changeUsersPasscode").mockReturnValue(Future.of("new encrypted private key")); const payload: any = { type: "CHANGE_USER_PASSCODE", message: { @@ -165,7 +165,7 @@ describe("worker index", () => { }); it("SIGNATURE_GENERATION", (done) => { - spyOn(UserCrypto, "signRequestPayload").and.returnValue("signature"); + jest.spyOn(UserCrypto, "signRequestPayload").mockReturnValue("signature" as any); const payload: any = { type: "SIGNATURE_GENERATION", message: { @@ -199,7 +199,7 @@ describe("worker index", () => { content: new Uint8Array(3), }, }; - spyOn(DocumentCrypto, "encryptDocument").and.returnValue(Future.of(encryptedDoc)); + jest.spyOn(DocumentCrypto, "encryptDocument").mockReturnValue(Future.of(encryptedDoc)); const payload: any = { type: "DOCUMENT_ENCRYPT", @@ -221,7 +221,7 @@ describe("worker index", () => { }); it("DOCUMENT_DECRYPT", (done) => { - spyOn(DocumentCrypto, "decryptDocument").and.returnValue(Future.of("decrypted doc")); + jest.spyOn(DocumentCrypto, "decryptDocument").mockReturnValue(Future.of("decrypted doc")); const payload: any = { type: "DOCUMENT_DECRYPT", @@ -245,7 +245,7 @@ describe("worker index", () => { const encryptedDoc = { content: "encrypted doc content", }; - spyOn(DocumentCrypto, "reEncryptDocument").and.returnValue(Future.of(encryptedDoc)); + jest.spyOn(DocumentCrypto, "reEncryptDocument").mockReturnValue(Future.of(encryptedDoc)); const payload: any = { type: "DOCUMENT_REENCRYPT", @@ -266,7 +266,7 @@ describe("worker index", () => { }); it("DOCUMENT_ENCRYPT_TO_KEYS", (done) => { - spyOn(DocumentCrypto, "encryptToKeys").and.returnValue(Future.of("key list")); + jest.spyOn(DocumentCrypto, "encryptToKeys").mockReturnValue(Future.of("key list")); const payload: any = { type: "DOCUMENT_ENCRYPT_TO_KEYS", @@ -291,7 +291,7 @@ describe("worker index", () => { describe("group message handling", () => { it("GROUP_CREATE", (done) => { const creator = {id: "35", masterPublicKey: {x: fromByteArray(new Uint8Array(32)), y: fromByteArray(new Uint8Array(32))}}; - jest.spyOn(GroupCrypto, "createGroup").mockReturnValue(Future.of("created group") as any); + jest.spyOn(GroupCrypto, "createGroup").mockReturnValue(Future.of("created group") as any); const payload: any = { type: "GROUP_CREATE", @@ -311,7 +311,7 @@ describe("worker index", () => { }); it("ROTATE_GROUP_PRIVATE_KEY", (done) => { - jest.spyOn(GroupCrypto, "rotatePrivateKey").mockReturnValue(Future.of("rotate group key") as any); + jest.spyOn(GroupCrypto, "rotatePrivateKey").mockReturnValue(Future.of("rotate group key") as any); const payload: any = { type: "ROTATE_GROUP_PRIVATE_KEY", @@ -333,7 +333,7 @@ describe("worker index", () => { }); it("GROUP_ADD_ADMINS", (done) => { - spyOn(GroupCrypto, "addAdminsToGroup").and.returnValue(Future.of("added admins")); + jest.spyOn(GroupCrypto, "addAdminsToGroup").mockReturnValue(Future.of("added admins")); const payload: any = { type: "GROUP_ADD_ADMINS", @@ -365,7 +365,7 @@ describe("worker index", () => { }); it("GROUP_ADD_MEMBERS", (done) => { - spyOn(GroupCrypto, "addMembersToGroup").and.returnValue(Future.of("added members")); + jest.spyOn(GroupCrypto, "addMembersToGroup").mockReturnValue(Future.of("added members")); const payload: any = { type: "GROUP_ADD_MEMBERS", @@ -399,7 +399,7 @@ describe("worker index", () => { describe("error message handling", () => { it("returns error response with formatted code and message", (done) => { - spyOn(DocumentCrypto, "encryptToKeys").and.returnValue(Future.reject(new SDKError(new Error("invalid"), 34))); + jest.spyOn(DocumentCrypto, "encryptToKeys").mockReturnValue(Future.reject(new SDKError(new Error("invalid"), 34))); const payload: any = { type: "DOCUMENT_ENCRYPT_TO_KEYS", message: { diff --git a/src/shim/FrameMediator.ts b/src/shim/FrameMediator.ts index a62f877..f6b46b0 100644 --- a/src/shim/FrameMediator.ts +++ b/src/shim/FrameMediator.ts @@ -73,7 +73,7 @@ export class ShimMessenger { */ const frame = window.document.createElement("iframe"); export const messenger = new ShimMessenger(frame); -const frameLoadedPromise = new Promise((resolve, reject) => { +const frameLoadedPromise = new Promise((resolve, reject) => { //The frame "load" even fires even if the frame failed to load (e.g. 404). So once it loads, we want to verify that it is actually //responding to messages we pass it. So pass a test message and verify we get a response within a second. If it does, we resolve //this Promise for all future messages. If it fails we reject with the appropriate SDK error message. @@ -102,7 +102,7 @@ window.document.body.appendChild(frame); * `then` callback immediately. This allows subsequent calls to resolve immediately after the iFrame has finished loading. */ function ensureFrameLoaded() { - return Future.tryP(() => frameLoadedPromise); + return Future.tryP(() => frameLoadedPromise); } /** diff --git a/src/shim/sdk/tests/DocumentSDK.test.ts b/src/shim/sdk/tests/DocumentSDK.test.ts index 00d8e23..a0a2310 100644 --- a/src/shim/sdk/tests/DocumentSDK.test.ts +++ b/src/shim/sdk/tests/DocumentSDK.test.ts @@ -9,7 +9,7 @@ import * as DocumentSDK from "../DocumentSDK"; describe("DocumentSDK", () => { beforeEach(() => { - spyOn(FrameMediator, "sendMessage").and.returnValue(Future.of({message: "messageResponse"})); + jest.spyOn(FrameMediator, "sendMessage").mockReturnValue(Future.of({message: "messageResponse"})); }); afterEach(() => { @@ -29,7 +29,7 @@ describe("DocumentSDK", () => { expect(FrameMediator.sendMessage).toHaveBeenCalledWith({type: "DOCUMENT_LIST"}); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); }); @@ -54,7 +54,7 @@ describe("DocumentSDK", () => { expect(FrameMediator.sendMessage).toHaveBeenCalledWith({type: "DOCUMENT_META_GET", message: {documentID: "docID"}}); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); }); @@ -73,9 +73,11 @@ describe("DocumentSDK", () => { ShimUtils.setSDKInitialized(); const doc = concatArrayBuffers(new Uint8Array([9]), new Uint8Array(40)); DocumentSDK.getDocumentIDFromBytes(doc) - .then(() => fail("Should not resolve when document ID is an unsupported version.")) + .then(() => { + throw new Error("Should not resolve when document ID is an unsupported version."); + }) .catch((e) => { - expect(e.message).toBeString(); + expect(e.message).toEqual(expect.stringContaining("")); expect(e.code).toEqual(ErrorCodes.DOCUMENT_HEADER_PARSE_FAILURE); }); }); @@ -88,7 +90,9 @@ describe("DocumentSDK", () => { .then((result) => { expect(result).toBeNull(); }) - .catch((e) => fail(e.message)); + .catch((e) => { + throw new Error(e.message); + }); }); it("rejects if the provided document header is malformed", () => { @@ -98,9 +102,11 @@ describe("DocumentSDK", () => { const doc = concatArrayBuffers(new Uint8Array([2, 0, headerJSON.length - 1]), headerJSON); DocumentSDK.getDocumentIDFromBytes(doc) - .then(() => fail("Should not succeed when ID cannot be parsed.")) + .then(() => { + throw new Error("Should not succeed when ID cannot be parsed."); + }) .catch((e) => { - expect(e.message).toBeString(); + expect(e.message).toEqual(expect.stringContaining("")); expect(e.code).toEqual(ErrorCodes.DOCUMENT_HEADER_PARSE_FAILURE); }); }); @@ -115,7 +121,9 @@ describe("DocumentSDK", () => { .then((result) => { expect(result).toEqual("353"); }) - .catch((e) => fail(e.message)); + .catch((e) => { + throw new Error(e.message); + }); }); it("parses document ID and returns value when the array is different from the buffer", () => { @@ -128,7 +136,9 @@ describe("DocumentSDK", () => { .then((result) => { expect(result).toEqual("353"); }) - .catch((e) => fail(e.message)); + .catch((e) => { + throw new Error(e.message); + }); }); }); @@ -146,8 +156,8 @@ describe("DocumentSDK", () => { it("returns response from document get from store api and sets default options correctly", (done) => { ShimUtils.setSDKInitialized(); - (FrameMediator.sendMessage as jasmine.Spy).and.returnValue( - Future.of({ + (FrameMediator.sendMessage as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ message: { data: new Uint8Array([98, 93]), documentID: "doc-10", @@ -170,7 +180,7 @@ describe("DocumentSDK", () => { }); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); }); @@ -194,8 +204,8 @@ describe("DocumentSDK", () => { it("calls decrypt api and returns response", (done) => { ShimUtils.setSDKInitialized(); const doc = new Uint8Array(33); - (FrameMediator.sendMessage as jasmine.Spy).and.returnValue( - Future.of({ + (FrameMediator.sendMessage as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ message: { data: new Uint8Array([98, 87]), }, @@ -218,14 +228,14 @@ describe("DocumentSDK", () => { ); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("calls decrypt api with bytes and returns response", (done) => { ShimUtils.setSDKInitialized(); const doc = new Uint8Array(33); - (FrameMediator.sendMessage as jasmine.Spy).and.returnValue( - Future.of({ + (FrameMediator.sendMessage as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ message: { data: new Uint8Array([98, 87]), }, @@ -247,11 +257,11 @@ describe("DocumentSDK", () => { [doc] ); //Ensure we cloned these bytes before passing them to the frame - const passedDoc = (FrameMediator.sendMessage as jasmine.Spy).calls.mostRecent().args[0].message.documentData; + const passedDoc = (FrameMediator.sendMessage as unknown as jest.SpyInstance).mock.calls.pop()[0].message.documentData; expect(passedDoc).not.toBe(doc); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); }); @@ -294,11 +304,11 @@ describe("DocumentSDK", () => { [document] ); //Ensure we cloned these bytes before passing them to the frame - const passedDoc = (FrameMediator.sendMessage as jasmine.Spy).calls.mostRecent().args[0].message.documentData; + const passedDoc = (FrameMediator.sendMessage as unknown as jest.SpyInstance).mock.calls.pop()[0].message.documentData; expect(passedDoc).not.toBe(document); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("uses grauntToAuthor from options if provided", (done) => { @@ -323,7 +333,7 @@ describe("DocumentSDK", () => { ); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("uses ID from options if provided", (done) => { @@ -347,7 +357,7 @@ describe("DocumentSDK", () => { ); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("uses provided name from options object", (done) => { @@ -371,7 +381,7 @@ describe("DocumentSDK", () => { ); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("dedupes list of users and groups provided", (done) => { @@ -397,14 +407,14 @@ describe("DocumentSDK", () => { ); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("passes policy if provided in options", (done) => { ShimUtils.setSDKInitialized(); const document = new Uint8Array([100, 111, 99]); - (FrameMediator.sendMessage as jasmine.Spy).and.returnValue( - Future.of({ + (FrameMediator.sendMessage as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ message: { document: new Uint8Array([90, 102, 103]), }, @@ -430,14 +440,16 @@ describe("DocumentSDK", () => { ); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("rejects if size of data is above max limit", () => { ShimUtils.setSDKInitialized(); const document = new Uint8Array(2050000); DocumentSDK.encryptToStore(document) - .then(() => fail("Encrypt to store should reject when data is too large")) + .then(() => { + throw new Error("Encrypt to store should reject when data is too large"); + }) .catch((e) => { expect(e.code).toEqual(ErrorCodes.DOCUMENT_MAX_SIZE_EXCEEDED); }); @@ -461,8 +473,8 @@ describe("DocumentSDK", () => { ShimUtils.setSDKInitialized(); const document = new Uint8Array([100, 111, 99]); const encryptedDoc = new Uint8Array([88, 91, 99]); - (FrameMediator.sendMessage as jasmine.Spy).and.returnValue( - Future.of({ + (FrameMediator.sendMessage as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ message: { document: encryptedDoc, documentID: "doc-10", @@ -496,22 +508,22 @@ describe("DocumentSDK", () => { }, [document] ); - const messagePayload = (FrameMediator.sendMessage as jasmine.Spy).calls.argsFor(0)[0]; + const messagePayload = (FrameMediator.sendMessage as unknown as jest.SpyInstance).mock.calls[0][0]; expect(messagePayload.message.documentID.length).toEqual(32); expect(messagePayload.message.documentID).toMatch(/[0-9a-fA-F]+/); //Ensure we cloned these bytes before passing them to the frame expect(messagePayload.message.documentData).not.toBe(document); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("uses grantToAuthor from options object", (done) => { ShimUtils.setSDKInitialized(); const document = new Uint8Array([100, 111, 99]); const encryptedDoc = new Uint8Array([90, 102, 103]); - (FrameMediator.sendMessage as jasmine.Spy).and.returnValue( - Future.of({ + (FrameMediator.sendMessage as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ message: { document: encryptedDoc, }, @@ -539,15 +551,15 @@ describe("DocumentSDK", () => { ); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("uses provided ID from options object", (done) => { ShimUtils.setSDKInitialized(); const document = new Uint8Array([100, 111, 99]); const encryptedDoc = new Uint8Array([90, 102, 103]); - (FrameMediator.sendMessage as jasmine.Spy).and.returnValue( - Future.of({ + (FrameMediator.sendMessage as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ message: { document: encryptedDoc, }, @@ -575,15 +587,15 @@ describe("DocumentSDK", () => { ); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("uses provided name from options object", (done) => { ShimUtils.setSDKInitialized(); const document = new Uint8Array([100, 111, 99]); const encryptedDoc = new Uint8Array([90, 102, 103]); - (FrameMediator.sendMessage as jasmine.Spy).and.returnValue( - Future.of({ + (FrameMediator.sendMessage as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ message: { document: encryptedDoc, }, @@ -611,7 +623,7 @@ describe("DocumentSDK", () => { ); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("dedupes list of users and groups provided", (done) => { @@ -621,8 +633,8 @@ describe("DocumentSDK", () => { const document = new Uint8Array([100, 111, 99]); const encryptedDoc = new Uint8Array([90, 102, 103]); - (FrameMediator.sendMessage as jasmine.Spy).and.returnValue( - Future.of({ + (FrameMediator.sendMessage as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ message: { document: encryptedDoc, }, @@ -650,14 +662,14 @@ describe("DocumentSDK", () => { ); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("passes policy if provided in options", (done) => { ShimUtils.setSDKInitialized(); const document = new Uint8Array([100, 111, 99]); - (FrameMediator.sendMessage as jasmine.Spy).and.returnValue( - Future.of({ + (FrameMediator.sendMessage as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ message: { document: new Uint8Array([90, 102, 103]), }, @@ -683,7 +695,7 @@ describe("DocumentSDK", () => { ); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); }); @@ -721,18 +733,20 @@ describe("DocumentSDK", () => { [document] ); //Ensure we cloned these bytes before passing them to the frame - const passedDoc = (FrameMediator.sendMessage as jasmine.Spy).calls.mostRecent().args[0].message.documentData; + const passedDoc = (FrameMediator.sendMessage as unknown as jest.SpyInstance).mock.calls.pop()[0].message.documentData; expect(passedDoc).not.toBe(document); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("rejects if size of data is above max limit", () => { ShimUtils.setSDKInitialized(); const document = new Uint8Array(2050000); DocumentSDK.updateEncryptedDataInStore("mydoc", document) - .then(() => fail("Update to store should reject when data is too large")) + .then(() => { + throw new Error("Update to store should reject when data is too large"); + }) .catch((e) => { expect(e.code).toEqual(ErrorCodes.DOCUMENT_MAX_SIZE_EXCEEDED); }); @@ -756,8 +770,8 @@ describe("DocumentSDK", () => { const doc = new Uint8Array([100, 111, 99]); const encryptedDoc = new Uint8Array([98, 99, 107]); - (FrameMediator.sendMessage as jasmine.Spy).and.returnValue( - Future.of({ + (FrameMediator.sendMessage as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ message: { documentID: "doc-10", document: encryptedDoc, @@ -782,11 +796,11 @@ describe("DocumentSDK", () => { [doc] ); //Ensure we cloned these bytes before passing them to the frame - const passedDoc = (FrameMediator.sendMessage as jasmine.Spy).calls.mostRecent().args[0].message.documentData; + const passedDoc = (FrameMediator.sendMessage as unknown as jest.SpyInstance).mock.calls.pop()[0].message.documentData; expect(passedDoc).not.toBe(document); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); }); @@ -815,7 +829,7 @@ describe("DocumentSDK", () => { }); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("converts empty string values into null", (done) => { @@ -832,7 +846,7 @@ describe("DocumentSDK", () => { }); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); }); @@ -870,7 +884,7 @@ describe("DocumentSDK", () => { }); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("dedupes array of ids provided", (done) => { @@ -891,7 +905,7 @@ describe("DocumentSDK", () => { }); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("passes in list of valid groups without users as well", (done) => { @@ -909,7 +923,7 @@ describe("DocumentSDK", () => { }); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); }); @@ -947,7 +961,7 @@ describe("DocumentSDK", () => { }); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("dedupes array of ids provided", (done) => { @@ -968,7 +982,7 @@ describe("DocumentSDK", () => { }); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("passes in list of valid groups without users as well", (done) => { @@ -986,7 +1000,7 @@ describe("DocumentSDK", () => { }); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); }); @@ -1010,8 +1024,8 @@ describe("DocumentSDK", () => { const headerJSON = UTF8.encode(JSON.stringify({_did_: "353"})); //Make provided length one less character that the actual length const doc = concatArrayBuffers(new Uint8Array([2, 0, headerJSON.length]), headerJSON); - (FrameMediator.sendMessage as jasmine.Spy).and.returnValue( - Future.of({ + (FrameMediator.sendMessage as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ message: { data: new Uint8Array([98, 87]), }, @@ -1035,11 +1049,11 @@ describe("DocumentSDK", () => { [doc] ); //Ensure we cloned these bytes before passing them to the frame - const passedDoc = (FrameMediator.sendMessage as jasmine.Spy).calls.mostRecent().args[0].message.documentData; + const passedDoc = (FrameMediator.sendMessage as unknown as jest.SpyInstance).mock.calls.pop()[0].message.documentData; expect(passedDoc).not.toBe(document); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); }); @@ -1060,8 +1074,8 @@ describe("DocumentSDK", () => { ShimUtils.setSDKInitialized(); const document = new Uint8Array([100, 111, 99]); const encryptedDoc = new Uint8Array([88, 91, 99]); - (FrameMediator.sendMessage as jasmine.Spy).and.returnValue( - Future.of({ + (FrameMediator.sendMessage as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ message: { document: encryptedDoc, documentID: "doc-10", @@ -1092,22 +1106,22 @@ describe("DocumentSDK", () => { }, [document] ); - const messagePayload = (FrameMediator.sendMessage as jasmine.Spy).calls.argsFor(0)[0]; + const messagePayload = (FrameMediator.sendMessage as unknown as jest.SpyInstance).mock.calls[0][0]; expect(messagePayload.message.documentID.length).toEqual(32); expect(messagePayload.message.documentID).toMatch(/[0-9a-fA-F]+/); //Ensure we cloned these bytes before passing them to the frame expect(messagePayload.message.documentData).not.toBe(document); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("uses grantToAuthor from options object", (done) => { ShimUtils.setSDKInitialized(); const document = new Uint8Array([100, 111, 99]); const encryptedDoc = new Uint8Array([90, 102, 103]); - (FrameMediator.sendMessage as jasmine.Spy).and.returnValue( - Future.of({ + (FrameMediator.sendMessage as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ message: { document: encryptedDoc, edeks: "edeks", @@ -1137,15 +1151,15 @@ describe("DocumentSDK", () => { ); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("uses provided ID from options object", (done) => { ShimUtils.setSDKInitialized(); const document = new Uint8Array([100, 111, 99]); const encryptedDoc = new Uint8Array([90, 102, 103]); - (FrameMediator.sendMessage as jasmine.Spy).and.returnValue( - Future.of({ + (FrameMediator.sendMessage as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ message: { documentID: "providedID", document: encryptedDoc, @@ -1177,7 +1191,7 @@ describe("DocumentSDK", () => { ); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("dedupes list of users and groups provided", (done) => { @@ -1187,8 +1201,8 @@ describe("DocumentSDK", () => { const document = new Uint8Array([100, 111, 99]); const encryptedDoc = new Uint8Array([90, 102, 103]); - (FrameMediator.sendMessage as jasmine.Spy).and.returnValue( - Future.of({ + (FrameMediator.sendMessage as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ message: { document: encryptedDoc, }, @@ -1216,14 +1230,14 @@ describe("DocumentSDK", () => { ); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); it("passes policy if provided in options", (done) => { ShimUtils.setSDKInitialized(); const document = new Uint8Array([100, 111, 99]); - (FrameMediator.sendMessage as jasmine.Spy).and.returnValue( - Future.of({ + (FrameMediator.sendMessage as unknown as jest.SpyInstance).mockReturnValue( + Future.of({ message: { document: new Uint8Array([90, 102, 103]), }, @@ -1249,7 +1263,7 @@ describe("DocumentSDK", () => { ); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); }); }); diff --git a/src/shim/sdk/tests/GroupSDK.test.ts b/src/shim/sdk/tests/GroupSDK.test.ts index 76f18ea..7e31921 100644 --- a/src/shim/sdk/tests/GroupSDK.test.ts +++ b/src/shim/sdk/tests/GroupSDK.test.ts @@ -5,7 +5,7 @@ import Future from "futurejs"; describe("GroupSDK", () => { beforeEach(() => { - spyOn(FrameMediator, "sendMessage").and.returnValue(Future.of({message: "messageResponse"})); + jest.spyOn(FrameMediator, "sendMessage").mockReturnValue(Future.of({message: "messageResponse"})); }); afterEach(() => { @@ -28,7 +28,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); }); @@ -57,7 +59,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); }); @@ -94,7 +98,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); it("sends create message to frame with groupID if that value is valid and passes as an option", (done) => { @@ -119,7 +125,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); it("sends create message to frame with addAsMemberValue if that value is passed in as options", (done) => { @@ -144,7 +152,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); it("sends create message to frame with addAsAdmin value and ownerUserIdif that value is passed in as options", (done) => { ShimUtils.setSDKInitialized(); @@ -168,7 +178,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); it("sends create message to frame with groupName if that value is passed in as options", (done) => { ShimUtils.setSDKInitialized(); @@ -192,7 +204,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); it("sends create message to frame with options passed in if provided", (done) => { ShimUtils.setSDKInitialized(); @@ -225,7 +239,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); it("sends create message to frame with memberList when provided", (done) => { ShimUtils.setSDKInitialized(); @@ -249,7 +265,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); it("sends create message to frame with adminList when provided", (done) => { ShimUtils.setSDKInitialized(); @@ -273,7 +291,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); it("send create message to frame with ownerUserId if provided", (done) => { ShimUtils.setSDKInitialized(); @@ -297,7 +317,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); }); describe("rotatePrivateKey", () => { @@ -318,7 +340,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); }); @@ -352,7 +376,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); it("sends null value for group name", (done) => { @@ -369,7 +395,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); }); @@ -399,7 +427,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); it("dedupes users in array before submitting", (done) => { @@ -416,7 +446,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); }); @@ -446,7 +478,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); it("dedupes users in array before submitting", (done) => { @@ -463,7 +497,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); }); @@ -493,7 +529,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); it("dedupes users in array before submitting", (done) => { @@ -510,7 +548,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); }); @@ -540,7 +580,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); it("dedupes users in array before submitting", (done) => { @@ -557,7 +599,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); }); @@ -585,7 +629,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); }); @@ -613,7 +659,9 @@ describe("GroupSDK", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); }); }); diff --git a/src/shim/sdk/tests/SearchSDK.test.ts b/src/shim/sdk/tests/SearchSDK.test.ts index 269e9d6..28beaa2 100644 --- a/src/shim/sdk/tests/SearchSDK.test.ts +++ b/src/shim/sdk/tests/SearchSDK.test.ts @@ -8,7 +8,7 @@ describe("SearchSDK", () => { let sendMessageMock: jest.SpyInstance, [RequestMessage, (Uint8Array[] | undefined)?]>; beforeEach(() => { sendMessageMock = jest.spyOn(FrameMediator, "sendMessage"); - sendMessageMock.mockReturnValue(Future.of({message: "messageResponse"} as any)); + sendMessageMock.mockReturnValue(Future.of({message: "messageResponse"} as any)); }); afterEach(() => { @@ -46,9 +46,9 @@ describe("SearchSDK", () => { it("returns instance of InitializedSearchIndex on success", (done) => { ShimUtils.setSDKInitialized(); SearchSDK.initializeBlindSearchIndex({searchIndexEdeks: new Uint8Array([1]), searchIndexEncryptedSalt: new Uint8Array([2])}).then((res) => { - expect(res).toBeObject(); - expect(res.tokenizeData).toBeFunction(); - expect(res.tokenizeQuery).toBeFunction(); + expect(typeof res).toBe("object"); + expect(typeof res.tokenizeData).toBe("function"); + expect(typeof res.tokenizeQuery).toBe("function"); done(); }); }); @@ -57,7 +57,7 @@ describe("SearchSDK", () => { describe("tokenizeData", () => { it("sends expected message to frame to tokenize data after calling init", (done) => { ShimUtils.setSDKInitialized(); - sendMessageMock.mockReturnValue(Future.of({message: {searchIndexId: "indexId"}} as any)); + sendMessageMock.mockReturnValue(Future.of({message: {searchIndexId: "indexId"}} as any)); SearchSDK.initializeBlindSearchIndex({searchIndexEdeks: new Uint8Array([1]), searchIndexEncryptedSalt: new Uint8Array([2])}) .then((tokenizeApi) => tokenizeApi.tokenizeData("data to tokenize", "partition")) .then(() => { @@ -77,7 +77,7 @@ describe("SearchSDK", () => { describe("tokenizeQuery", () => { it("sends expected message to frame to tokenize query after calling init", (done) => { ShimUtils.setSDKInitialized(); - sendMessageMock.mockReturnValue(Future.of({message: {searchIndexId: "indexId"}} as any)); + sendMessageMock.mockReturnValue(Future.of({message: {searchIndexId: "indexId"}} as any)); SearchSDK.initializeBlindSearchIndex({searchIndexEdeks: new Uint8Array([1]), searchIndexEncryptedSalt: new Uint8Array([2])}) .then((tokenizeApi) => tokenizeApi.tokenizeQuery("query to tokenize", "partition")) .then(() => { diff --git a/src/shim/sdk/tests/UserSDK.test.ts b/src/shim/sdk/tests/UserSDK.test.ts index 2787853..ed0f0dc 100644 --- a/src/shim/sdk/tests/UserSDK.test.ts +++ b/src/shim/sdk/tests/UserSDK.test.ts @@ -5,7 +5,7 @@ import * as ShimUtils from "../../ShimUtils"; describe("UserSDK", () => { beforeEach(() => { - spyOn(FrameMediator, "sendMessage").and.returnValue(Future.of({message: "messageResponse"})); + jest.spyOn(FrameMediator, "sendMessage").mockReturnValue(Future.of({message: "messageResponse"})); }); afterEach(() => { @@ -21,7 +21,7 @@ describe("UserSDK", () => { it("sends deauth request type to frame", (done) => { ShimUtils.setSDKInitialized(); - spyOn(ShimUtils, "clearParentWindowSymmetricKey"); + jest.spyOn(ShimUtils, "clearParentWindowSymmetricKey"); UserSDK.deauthorizeDevice() .then((result: any) => { expect(result).toEqual({transformKeyDeleted: "messageResponse"}); @@ -32,7 +32,7 @@ describe("UserSDK", () => { expect(ShimUtils.clearParentWindowSymmetricKey).toHaveBeenCalledWith(); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); }); @@ -56,7 +56,7 @@ describe("UserSDK", () => { }); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); }); @@ -79,7 +79,7 @@ describe("UserSDK", () => { }); done(); }) - .catch((e) => fail(e.message)); + .catch((e) => done(e)); }); }); }); diff --git a/src/shim/tests/FrameMediator.test.ts b/src/shim/tests/FrameMediator.test.ts index 868dd19..0d23f4e 100644 --- a/src/shim/tests/FrameMediator.test.ts +++ b/src/shim/tests/FrameMediator.test.ts @@ -7,9 +7,9 @@ describe("FrameMediator", () => { let fauxFrame: any; beforeEach(() => { fauxFrame = { - addEventListener: jasmine.createSpy("addEventListener"), + addEventListener: jest.fn(), contentWindow: { - postMessage: jasmine.createSpy("postMessage"), + postMessage: jest.fn(), }, }; }); @@ -19,7 +19,7 @@ describe("FrameMediator", () => { new ShimMessenger(fauxFrame); expect(fauxFrame.addEventListener).toHaveBeenCalledWith("load", expect.any(Function)); - fauxFrame.addEventListener.calls.argsFor(0)[1](); + fauxFrame.addEventListener.mock.calls[0][1](); expect(fauxFrame.contentWindow.postMessage).toHaveBeenCalledWith("MESSAGE_PORT_INIT", Frame.FRAME_DOMAIN, expect.any(Object)); }); }); @@ -29,11 +29,11 @@ describe("FrameMediator", () => { const messenger = new ShimMessenger(fauxFrame as any); (messenger as any).messagePort = { - postMessage: jasmine.createSpy("postMessage"), + postMessage: jest.fn(), }; messenger.postMessageToFrame({foo: "bar"} as any).engage( - (e) => fail(e.message), + (e) => done(e), (result: any) => { expect(result).toEqual({engaged: "future"}); done(); @@ -52,11 +52,11 @@ describe("FrameMediator", () => { const messenger = new ShimMessenger(fauxFrame as any); (messenger as any).messagePort = { - postMessage: jasmine.createSpy("postMessage"), + postMessage: jest.fn(), }; messenger.postMessageToFrame({foo: "bar"} as any, [{buffer: "1"}, {buffer: "2"}] as any).engage( - (e) => fail(e.message), + (e) => done(e), (result: any) => { expect(result).toEqual({engaged: "future"}); done(); @@ -74,7 +74,9 @@ describe("FrameMediator", () => { const messenger = new ShimMessenger(fauxFrame as any); (messenger as any).messagePort = { - postMessage: jasmine.createSpy("postMessage").and.throwError("forced failure"), + postMessage: jest.fn().mockImplementation(() => { + throw new Error("forced failure"); + }), }; messenger.postMessageToFrame({foo: "bar"} as any).engage( @@ -82,7 +84,7 @@ describe("FrameMediator", () => { expect(e.message).toEqual(expect.any(String)); done(); }, - () => fail("should fail when postmessage throws an exception") + () => done("should fail when postmessage throws an exception") ); }); }); @@ -90,7 +92,7 @@ describe("FrameMediator", () => { describe("processMessageIntoShim", () => { it("invokes callback given the replyID in the event", () => { const messenger = new ShimMessenger(fauxFrame as any); - const cbSpy = jasmine.createSpy("callbackSpy"); + const cbSpy = jest.fn(); messenger.callbacks = { 35: cbSpy, @@ -103,7 +105,7 @@ describe("FrameMediator", () => { it("does nothing with callback if not present", () => { const messenger = new ShimMessenger(fauxFrame as any); - const cbSpy = jasmine.createSpy("callbackSpy"); + const cbSpy = jest.fn(); messenger.callbacks = { 35: cbSpy, @@ -118,13 +120,15 @@ describe("FrameMediator", () => { describe("sendMessage", () => { it("passes in payload and optional transfer list to API and responds with result", () => { - spyOn(messenger, "postMessageToFrame").and.returnValue( - Future.of({ + jest.spyOn(messenger, "postMessageToFrame").mockReturnValue( + Future.of({ foo: "bar", }) ); sendMessage({payload: "content"} as any, [new Uint8Array(12), new Uint8Array(10)]).engage( - (e) => fail(e), + (e) => { + throw e; + }, (result: any) => { expect(result).toEqual({foo: "bar"}); expect(messenger.postMessageToFrame).toHaveBeenCalledWith({payload: "content"}, [new Uint8Array(12), new Uint8Array(10)]); @@ -133,8 +137,8 @@ describe("FrameMediator", () => { }); it("handles error message response types and rejects futures", () => { - spyOn(messenger, "postMessageToFrame").and.returnValue( - Future.of({ + jest.spyOn(messenger, "postMessageToFrame").mockReturnValue( + Future.of({ message: { text: "error", code: 108, @@ -148,7 +152,9 @@ describe("FrameMediator", () => { expect(e.message).toEqual("error"); expect(e.code).toEqual(108); }, - () => fail("Should fail with error response content") + () => { + throw new Error("Should fail with error response content"); + } ); }); }); diff --git a/src/shim/tests/Initialize.test.ts b/src/shim/tests/Initialize.test.ts index 2fb5705..c7f7e27 100644 --- a/src/shim/tests/Initialize.test.ts +++ b/src/shim/tests/Initialize.test.ts @@ -11,7 +11,7 @@ describe("Initialize", () => { const jwtCallback = () => ({} as any); Initialize.createNewUser(jwtCallback, "passcode", false) - .then(() => fail("resolve should not be called when JWT CB is invalid")) + .then(() => done("resolve should not be called when JWT CB is invalid")) .catch((err: SDKError) => { expect(err).toEqual(expect.any(Error)); expect(err.code).toEqual(ErrorCodes.JWT_FORMAT_FAILURE); @@ -25,7 +25,7 @@ describe("Initialize", () => { }; Initialize.createNewUser(jwtCallback, "passcode", false) - .then(() => fail("resolve should not be called when JWT CB rejects")) + .then(() => done("resolve should not be called when JWT CB rejects")) .catch((err: Error) => { expect(err).toEqual(new Error("failed promise")); done(); @@ -36,7 +36,7 @@ describe("Initialize", () => { const jwtCallback = () => Promise.resolve({}) as Promise; Initialize.createNewUser(jwtCallback, "passcode", false) - .then(() => fail("resolve should not be called when JWT CB rejects")) + .then(() => done("resolve should not be called when JWT CB rejects")) .catch((err: SDKError) => { expect(err).toEqual(expect.any(Error)); expect(err.code).toEqual(ErrorCodes.JWT_RETRIEVAL_FAILURE); @@ -48,7 +48,7 @@ describe("Initialize", () => { const jwtCallback = () => Promise.resolve(""); Initialize.createNewUser(jwtCallback, "passcode", false) - .then(() => fail("resolve should not be called when JWT CB rejects")) + .then(() => done("resolve should not be called when JWT CB rejects")) .catch((err: SDKError) => { expect(err).toEqual(expect.any(Error)); expect(err.code).toEqual(ErrorCodes.JWT_RETRIEVAL_FAILURE); @@ -57,15 +57,15 @@ describe("Initialize", () => { }); it("sends message to frame to create new user", (done) => { - const jwtCallback = jasmine.createSpy("jwt").and.returnValue(Promise.resolve("validJWT")); - spyOn(FrameMediator, "sendMessage").and.callFake(() => - Future.of({message: {id: "1", segmentId: 1, status: 1, userMasterPublicKey: "pubkey", userPrivateKey: "privkey"}}) + const jwtCallback = jest.fn().mockReturnValue(Promise.resolve("validJWT")); + jest.spyOn(FrameMediator, "sendMessage").mockImplementation(() => + Future.of({message: {id: "1", segmentId: 1, status: 1, userMasterPublicKey: "pubkey", userPrivateKey: "privkey"}}) ); - spyOn(ShimUtils, "storeParentWindowSymmetricKey"); + jest.spyOn(ShimUtils, "storeParentWindowSymmetricKey"); Initialize.createNewUser(jwtCallback, "passcode", false) .then((initResult) => { - expect(jwtCallback.calls.count()).toEqual(1); + expect(jwtCallback).toHaveBeenCalledTimes(1); expect(initResult).toEqual({ accountID: "1", segmentID: 1, @@ -85,7 +85,9 @@ describe("Initialize", () => { expect(ShimUtils.storeParentWindowSymmetricKey).not.toHaveBeenCalled(); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); }); @@ -94,7 +96,7 @@ describe("Initialize", () => { const jwtCallback = () => ({} as any); Initialize.createUserDeviceKeys(jwtCallback, "passcode") - .then(() => fail("resolve should not be called when JWT CB is invalid")) + .then(() => done("resolve should not be called when JWT CB is invalid")) .catch((err: SDKError) => { expect(err).toEqual(expect.any(Error)); expect(err.code).toEqual(ErrorCodes.JWT_FORMAT_FAILURE); @@ -108,7 +110,7 @@ describe("Initialize", () => { }; Initialize.createUserDeviceKeys(jwtCallback, "passcode") - .then(() => fail("resolve should not be called when JWT CB rejects")) + .then(() => done("resolve should not be called when JWT CB rejects")) .catch((err: Error) => { expect(err).toEqual(new Error("failed promise")); done(); @@ -119,7 +121,7 @@ describe("Initialize", () => { const jwtCallback = () => Promise.resolve({}) as Promise; Initialize.createUserDeviceKeys(jwtCallback, "passcode") - .then(() => fail("resolve should not be called when JWT CB rejects")) + .then(() => done("resolve should not be called when JWT CB rejects")) .catch((err: SDKError) => { expect(err).toEqual(expect.any(Error)); expect(err.code).toEqual(ErrorCodes.JWT_RETRIEVAL_FAILURE); @@ -131,7 +133,7 @@ describe("Initialize", () => { const jwtCallback = () => Promise.resolve(""); Initialize.createUserDeviceKeys(jwtCallback, "passcode") - .then(() => fail("resolve should not be called when JWT CB rejects")) + .then(() => done("resolve should not be called when JWT CB rejects")) .catch((err: SDKError) => { expect(err).toEqual(expect.any(Error)); expect(err.code).toEqual(ErrorCodes.JWT_RETRIEVAL_FAILURE); @@ -140,9 +142,9 @@ describe("Initialize", () => { }); it("sends message to frame to create new user devices", (done) => { - const jwtCallback = jasmine.createSpy("jwt").and.returnValue(Promise.resolve("validJWT")); - spyOn(FrameMediator, "sendMessage").and.returnValue( - Future.of({ + const jwtCallback = jest.fn().mockReturnValue(Promise.resolve("validJWT")); + jest.spyOn(FrameMediator, "sendMessage").mockReturnValue( + Future.of({ type: "CREATE_DETATCHED_USER_DEVICE_RESPONSE", message: { accountID: "abc", @@ -155,7 +157,7 @@ describe("Initialize", () => { Initialize.createUserDeviceKeys(jwtCallback, "passcode") .then((deviceResult) => { - expect(jwtCallback.calls.count()).toEqual(1); + expect(jwtCallback).toHaveBeenCalledTimes(1); expect(deviceResult).toEqual({ accountID: "abc", segmentID: 11, @@ -172,7 +174,9 @@ describe("Initialize", () => { }); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); }); @@ -180,8 +184,8 @@ describe("Initialize", () => { it("rejects if JWT callback does not return a promise", (done) => { const jwtCallback = () => ({} as any); - Initialize.initialize(jwtCallback, jasmine.createSpy("passcodeCallback")) - .then(() => fail("resolve should not be called when JWT CB is invalid")) + Initialize.initialize(jwtCallback, jest.fn()) + .then(() => done("resolve should not be called when JWT CB is invalid")) .catch((err: SDKError) => { expect(err).toEqual(expect.any(Error)); expect(err.code).toEqual(ErrorCodes.JWT_FORMAT_FAILURE); @@ -194,8 +198,8 @@ describe("Initialize", () => { return Promise.reject(new Error("failed promise")); }; - Initialize.initialize(jwtCallback, jasmine.createSpy("passcodeCallback")) - .then(() => fail("resolve should not be called when JWT CB rejects")) + Initialize.initialize(jwtCallback, jest.fn()) + .then(() => done("resolve should not be called when JWT CB rejects")) .catch((err: Error) => { expect(err).toEqual(new Error("failed promise")); done(); @@ -205,8 +209,8 @@ describe("Initialize", () => { it("rejects if JWT returned is not a string", (done) => { const jwtCallback = () => Promise.resolve({}) as Promise; - Initialize.initialize(jwtCallback, jasmine.createSpy("passcodeCallback")) - .then(() => fail("resolve should not be called when JWT CB rejects")) + Initialize.initialize(jwtCallback, jest.fn()) + .then(() => done("resolve should not be called when JWT CB rejects")) .catch((err: SDKError) => { expect(err).toEqual(expect.any(Error)); expect(err.code).toEqual(ErrorCodes.JWT_RETRIEVAL_FAILURE); @@ -217,8 +221,8 @@ describe("Initialize", () => { it("rejects if JWT returned is an empty string", (done) => { const jwtCallback = () => Promise.resolve(""); - Initialize.initialize(jwtCallback, jasmine.createSpy("passcodeCallback")) - .then(() => fail("resolve should not be called when JWT CB rejects")) + Initialize.initialize(jwtCallback, jest.fn()) + .then(() => done("resolve should not be called when JWT CB rejects")) .catch((err: SDKError) => { expect(err).toEqual(expect.any(Error)); expect(err.code).toEqual(ErrorCodes.JWT_RETRIEVAL_FAILURE); @@ -235,10 +239,10 @@ describe("Initialize", () => { it("rejects if passcode callback doesnt return a Promise", (done) => { const jwtCallback = () => Promise.resolve("jwt"); const passcodeCallback: any = () => "passcode"; - spyOn(FrameMediator, "sendMessage").and.returnValue(Future.of({type: "INIT_PASSCODE_REQUIRED", message: {doesUserExist: false}})); + jest.spyOn(FrameMediator, "sendMessage").mockReturnValue(Future.of({type: "INIT_PASSCODE_REQUIRED", message: {doesUserExist: false}})); Initialize.initialize(jwtCallback, passcodeCallback) - .then(() => fail("resolve should not be called when passcode callback ")) + .then(() => done("resolve should not be called when passcode callback ")) .catch((err: SDKError) => { expect(err).toEqual(expect.any(Error)); expect(err.code).toEqual(ErrorCodes.PASSCODE_FORMAT_FAILURE); @@ -249,13 +253,13 @@ describe("Initialize", () => { it("rejects if passcode is not a string", (done) => { const jwtCallback = () => Promise.resolve("jwt"); const passcodeCallback = (userExists: boolean) => { - expect(userExists).toBeTrue(); + expect(userExists).toBe(true); return Promise.resolve([] as any); }; - spyOn(FrameMediator, "sendMessage").and.returnValue(Future.of({type: "INIT_PASSCODE_REQUIRED", message: {doesUserExist: true}})); + jest.spyOn(FrameMediator, "sendMessage").mockReturnValue(Future.of({type: "INIT_PASSCODE_REQUIRED", message: {doesUserExist: true}})); Initialize.initialize(jwtCallback, passcodeCallback) - .then(() => fail("resolve should not be called when passcode callback ")) + .then(() => done("resolve should not be called when passcode callback ")) .catch((err: SDKError) => { expect(err).toEqual(expect.any(Error)); expect(err.code).toEqual(ErrorCodes.PASSCODE_RETRIEVAL_FAILURE); @@ -266,13 +270,13 @@ describe("Initialize", () => { it("rejects if passcode has no length", (done) => { const jwtCallback = () => Promise.resolve("jwt"); const passcodeCallback = (userExists: boolean) => { - expect(userExists).toBeFalse(); + expect(userExists).toBe(false); return Promise.resolve(""); }; - spyOn(FrameMediator, "sendMessage").and.returnValue(Future.of({type: "INIT_PASSCODE_REQUIRED", message: {doesUserExist: false}})); + jest.spyOn(FrameMediator, "sendMessage").mockReturnValue(Future.of({type: "INIT_PASSCODE_REQUIRED", message: {doesUserExist: false}})); Initialize.initialize(jwtCallback, passcodeCallback) - .then(() => fail("resolve should not be called when passcode callback ")) + .then(() => done("resolve should not be called when passcode callback ")) .catch((err: SDKError) => { expect(err).toEqual(expect.any(Error)); expect(err.code).toEqual(ErrorCodes.PASSCODE_RETRIEVAL_FAILURE); @@ -283,10 +287,10 @@ describe("Initialize", () => { it("rejects if set passcode promise rejects", (done) => { const jwtCallback = () => Promise.resolve("jwt"); const passcodeCallback = () => Promise.reject(new Error("forced failure")); - spyOn(FrameMediator, "sendMessage").and.returnValue(Future.of({type: "INIT_PASSCODE_REQUIRED", message: {doesUserExist: false}})); + jest.spyOn(FrameMediator, "sendMessage").mockReturnValue(Future.of({type: "INIT_PASSCODE_REQUIRED", message: {doesUserExist: false}})); Initialize.initialize(jwtCallback, passcodeCallback) - .then(() => fail("resolve should not be called when passcode callback ")) + .then(() => done("resolve should not be called when passcode callback ")) .catch((err: SDKError) => { expect(err).toEqual(expect.any(Error)); expect(err.message).toEqual("forced failure"); @@ -301,19 +305,19 @@ describe("Initialize", () => { }); it("sends message to frame to create new user when verify result has no user", (done) => { - const jwtCallback = jasmine.createSpy("jwt").and.returnValue(Promise.resolve("validJWT")); - const passcodeCallback = jasmine.createSpy("passcode").and.returnValue(Promise.resolve("passcode")); - spyOn(FrameMediator, "sendMessage").and.callFake((message: any) => { + const jwtCallback = jest.fn().mockReturnValue(Promise.resolve("validJWT")); + const passcodeCallback = jest.fn().mockReturnValue(Promise.resolve("passcode")); + jest.spyOn(FrameMediator, "sendMessage").mockImplementation((message: any) => { if (message.type === "INIT_SDK") { - return Future.of({type: "INIT_PASSCODE_REQUIRED", message: {doesUserExist: false}}); + return Future.of({type: "INIT_PASSCODE_REQUIRED", message: {doesUserExist: false}}); } - return Future.of({message: {symmetricKey: "symKey", user: {id: "user-10", status: 1}}}); + return Future.of({message: {symmetricKey: "symKey", user: {id: "user-10", status: 1}}}); }); - spyOn(ShimUtils, "storeParentWindowSymmetricKey"); + jest.spyOn(ShimUtils, "storeParentWindowSymmetricKey"); Initialize.initialize(jwtCallback, passcodeCallback) .then((initResult) => { - expect(jwtCallback.calls.count()).toEqual(2); + expect(jwtCallback).toHaveBeenCalledTimes(2); expect(passcodeCallback).toHaveBeenCalledWith(false); expect(initResult).toEqual({ user: { @@ -340,19 +344,21 @@ describe("Initialize", () => { expect(ShimUtils.storeParentWindowSymmetricKey).toHaveBeenCalledWith("symKey"); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); it("sends message to sub frame to create new device keys", (done) => { - const jwtCallback = jasmine.createSpy("jwt").and.returnValue(Promise.resolve("validJWT")); - const passcodeCallback = jasmine.createSpy("passcode").and.returnValue(Promise.resolve("pass")); - spyOn(FrameMediator, "sendMessage").and.callFake((message: any) => { + const jwtCallback = jest.fn().mockReturnValue(Promise.resolve("validJWT")); + const passcodeCallback = jest.fn().mockReturnValue(Promise.resolve("pass")); + jest.spyOn(FrameMediator, "sendMessage").mockImplementation((message: any) => { if (message.type === "INIT_SDK") { - return Future.of({type: "INIT_PASSCODE_REQUIRED", message: {doesUserExist: true}}); + return Future.of({type: "INIT_PASSCODE_REQUIRED", message: {doesUserExist: true}}); } - return Future.of({message: {symmetricKey: "symKeyFromNewDevice", user: {id: "user-10", status: 1}}}); + return Future.of({message: {symmetricKey: "symKeyFromNewDevice", user: {id: "user-10", status: 1}}}); }); - spyOn(ShimUtils, "storeParentWindowSymmetricKey"); + jest.spyOn(ShimUtils, "storeParentWindowSymmetricKey"); Initialize.initialize(jwtCallback, passcodeCallback) .then((initResult) => { @@ -362,7 +368,7 @@ describe("Initialize", () => { status: 1, }, }); - expect(jwtCallback.calls.count()).toEqual(2); + expect(jwtCallback).toHaveBeenCalledTimes(2); expect(passcodeCallback).toHaveBeenCalledWith(true); expect(FrameMediator.sendMessage).toHaveBeenCalledWith({ type: "INIT_SDK", @@ -379,15 +385,17 @@ describe("Initialize", () => { done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); it("sends JWT token to sub frame and returns full SDK if the user already exists and has keys", (done) => { - spyOn(ShimUtils, "storeParentWindowSymmetricKey"); + jest.spyOn(ShimUtils, "storeParentWindowSymmetricKey"); const jwtCallback = () => Promise.resolve("validJWT"); - const passcodeCallback = jasmine.createSpy("passcode").and.returnValue(Promise.resolve("pass")); - spyOn(FrameMediator, "sendMessage").and.returnValue( - Future.of({ + const passcodeCallback = jest.fn().mockReturnValue(Promise.resolve("pass")); + jest.spyOn(FrameMediator, "sendMessage").mockReturnValue( + Future.of({ type: "FULL_SDK_RESPONSE", message: { symmetricKey: "symKey2", @@ -418,7 +426,9 @@ describe("Initialize", () => { expect(ShimUtils.storeParentWindowSymmetricKey).toHaveBeenCalledWith("symKey2"); done(); }) - .catch((e) => fail(e)); + .catch((e) => { + throw e; + }); }); }); }); diff --git a/src/shim/tests/ShimUtils.test.ts b/src/shim/tests/ShimUtils.test.ts index 309fe72..eafeed1 100644 --- a/src/shim/tests/ShimUtils.test.ts +++ b/src/shim/tests/ShimUtils.test.ts @@ -18,13 +18,13 @@ describe("ShimUtils", () => { }); it("does not set any local storage key if not key provided", () => { - spyOn(Storage.prototype, "setItem"); + jest.spyOn(Storage.prototype, "setItem"); ShimUtils.storeParentWindowSymmetricKey(); expect(localStorage.setItem).not.toHaveBeenCalled(); }); it("sets value with expected key", () => { - spyOn(Storage.prototype, "setItem"); + jest.spyOn(Storage.prototype, "setItem"); ShimUtils.storeParentWindowSymmetricKey("symKey"); expect(localStorage.setItem).toHaveBeenCalledWith("1-icldassk", "symKey"); }); @@ -40,7 +40,9 @@ describe("ShimUtils", () => { }); it("returns undefined if local storage throws exception", () => { - spyOn(Storage.prototype, "getItem").and.throwError("No access"); + jest.spyOn(Storage.prototype, "getItem").mockImplementation(() => { + throw new Error("No access"); + }); expect(ShimUtils.getParentWindowSymmetricKey()).toBeUndefined(); }); diff --git a/src/shim/tests/index.test.ts b/src/shim/tests/index.test.ts index 5924a5a..65cf527 100644 --- a/src/shim/tests/index.test.ts +++ b/src/shim/tests/index.test.ts @@ -22,7 +22,7 @@ describe("Init exposed public SDK", () => { }); it("calls init api with argument", () => { - spyOn(Init, "initialize"); + jest.spyOn(Init, "initialize"); const fetchJWT = () => Promise.resolve("test"); const passcode = () => Promise.resolve("pass"); @@ -36,14 +36,14 @@ describe("Init exposed public SDK", () => { const origRandomValues = window.crypto.getRandomValues; (window.crypto as any).getRandomValues = null; - spyOn(Init, "initialize"); + jest.spyOn(Init, "initialize"); const fetchJWT = () => Promise.resolve("test"); const passcode = () => Promise.resolve("pass"); PublicSdk.initialize(fetchJWT, passcode) .then(() => { - fail("Initialization should not occur if the client browser does not support random number generation."); + done("Initialization should not occur if the client browser does not support random number generation."); }) .catch((e) => { expect(e.code).toEqual(ErrorCodes.RANDOM_NUMBER_GENERATION_FAILURE); @@ -62,7 +62,7 @@ describe("Init exposed public SDK", () => { }); it("calls init api with argument", () => { - spyOn(Init, "createNewUser"); + jest.spyOn(Init, "createNewUser"); const fetchJWT = () => Promise.resolve("test"); const passcode = "pass"; @@ -76,14 +76,14 @@ describe("Init exposed public SDK", () => { const origRandomValues = window.crypto.getRandomValues; (window.crypto as any).getRandomValues = null; - spyOn(Init, "createNewUser"); + jest.spyOn(Init, "createNewUser"); const fetchJWT = () => Promise.resolve("test"); const passcode = "pass"; PublicSdk.createNewUser(fetchJWT, passcode) .then(() => { - fail("Initialization should not occur if the client browser does not support random number generation."); + done("Initialization should not occur if the client browser does not support random number generation."); }) .catch((e) => { expect(e.code).toEqual(ErrorCodes.RANDOM_NUMBER_GENERATION_FAILURE); @@ -105,14 +105,14 @@ describe("Init exposed public SDK", () => { const origRandomValues = window.crypto.getRandomValues; (window.crypto as any).getRandomValues = null; - spyOn(Init, "createUserDeviceKeys"); + jest.spyOn(Init, "createUserDeviceKeys"); const fetchJWT = () => Promise.resolve("test"); const passcode = "pass"; PublicSdk.createNewDeviceKeys(fetchJWT, passcode) .then(() => { - fail("Initialization should not occur if the client browser does not support random number generation."); + done("Initialization should not occur if the client browser does not support random number generation."); }) .catch((e) => { expect(e.code).toEqual(ErrorCodes.RANDOM_NUMBER_GENERATION_FAILURE); @@ -122,7 +122,7 @@ describe("Init exposed public SDK", () => { }); it("calls init api with argument", () => { - spyOn(Init, "createUserDeviceKeys"); + jest.spyOn(Init, "createUserDeviceKeys"); const fetchJWT = () => Promise.resolve("test"); const passcode = "pass"; @@ -135,7 +135,7 @@ describe("Init exposed public SDK", () => { describe("ErrorCodes", () => { it("exposes error codes", () => { - expect(PublicSdk.ErrorCodes).toBeObject(); + expect(typeof PublicSdk.ErrorCodes).toBe("object"); }); }); @@ -154,8 +154,8 @@ describe("Init exposed public SDK", () => { checkSDKInitialized.mockImplementationOnce(() => { throw Error(""); }); - expect(PublicSdk.isInitialized()).toBeFalse(); + expect(PublicSdk.isInitialized()).toBe(false); }); - it("should return true when sdk check doesn't throw", () => expect(PublicSdk.isInitialized()).toBeTrue()); + it("should return true when sdk check doesn't throw", () => expect(PublicSdk.isInitialized()).toBe(true)); }); }); diff --git a/webpack/frame.config.js b/webpack/frame.config.js index caa5de8..94b1205 100644 --- a/webpack/frame.config.js +++ b/webpack/frame.config.js @@ -1,6 +1,5 @@ const webpack = require("webpack"); const path = require("path"); -const ATL = require("awesome-typescript-loader"); const TerserPlugin = require("terser-webpack-plugin"); process.env.NODE_ENV = "production"; @@ -13,7 +12,7 @@ module.exports = (_, argv) => { rules: [ { test: /\.ts/, - use: ["awesome-typescript-loader"], + use: ["ts-loader"], exclude: /node_modules/, }, ], @@ -28,9 +27,7 @@ module.exports = (_, argv) => { }, }, plugins: [ - new ATL.CheckerPlugin(), new webpack.DefinePlugin({ - NODE_ENV: JSON.stringify("production"), "process.env.NODE_ENV": JSON.stringify("production"), _WORKER_PATH_LOCATION_: JSON.stringify(`${argv.outputPublicPath}ironweb-worker.min.js`), }), diff --git a/webpack/shim.config.js b/webpack/shim.config.js index 8da8bd0..94ab832 100644 --- a/webpack/shim.config.js +++ b/webpack/shim.config.js @@ -1,5 +1,4 @@ const webpack = require("webpack"); -const ATL = require("awesome-typescript-loader"); const TerserPlugin = require("terser-webpack-plugin"); process.env.NODE_ENV = "production"; @@ -24,15 +23,13 @@ const config = { rules: [ { test: /\.ts$/, - use: ["awesome-typescript-loader"], + use: ["ts-loader"], exclude: /node_modules/, }, ], }, plugins: [ - new ATL.CheckerPlugin(), new webpack.DefinePlugin({ - NODE_ENV: JSON.stringify("production"), "process.env.NODE_ENV": JSON.stringify("production"), }), ], diff --git a/yarn.lock b/yarn.lock index d19c485..98981de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,151 +2,163 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/core@^7.1.0", "@babel/core@^7.7.5": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" - integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.10" - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helpers" "^7.12.5" - "@babel/parser" "^7.12.10" - "@babel/template" "^7.12.7" - "@babel/traverse" "^7.12.10" - "@babel/types" "^7.12.10" +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" + integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8" + integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.10" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.10" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.10" + "@babel/types" "^7.18.10" convert-source-map "^1.7.0" debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - semver "^5.4.1" - source-map "^0.5.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" -"@babel/generator@^7.12.10": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.10.tgz#2b188fc329fb8e4f762181703beffc0fe6df3460" - integrity sha512-6mCdfhWgmqLdtTkhXjnIz0LcdVCd26wS2JXRtj2XY0u5klDsXBREA/pG5NVOuVnF2LUrBGNFtQkIqqTbblg0ww== +"@babel/generator@^7.18.10", "@babel/generator@^7.7.2": + version "7.18.12" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.12.tgz#fa58daa303757bd6f5e4bbca91b342040463d9f4" + integrity sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg== dependencies: - "@babel/types" "^7.12.10" + "@babel/types" "^7.18.10" + "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" - integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== - dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-get-function-arity@^7.10.4": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" - integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== - dependencies: - "@babel/types" "^7.12.10" - -"@babel/helper-member-expression-to-functions@^7.12.1": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" - integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== - dependencies: - "@babel/types" "^7.12.7" - -"@babel/helper-module-imports@^7.12.1": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" - integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== - dependencies: - "@babel/types" "^7.12.5" -"@babel/helper-module-transforms@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" - integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== +"@babel/helper-compilation-targets@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" + integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== dependencies: - "@babel/helper-module-imports" "^7.12.1" - "@babel/helper-replace-supers" "^7.12.1" - "@babel/helper-simple-access" "^7.12.1" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/helper-validator-identifier" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.12.1" - "@babel/types" "^7.12.1" - lodash "^4.17.19" - -"@babel/helper-optimise-call-expression@^7.10.4": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d" - integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ== - dependencies: - "@babel/types" "^7.12.10" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" - integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== - -"@babel/helper-replace-supers@^7.12.1": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9" - integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.12.1" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/traverse" "^7.12.5" - "@babel/types" "^7.12.5" - -"@babel/helper-simple-access@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" - integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== - dependencies: - "@babel/types" "^7.12.1" - -"@babel/helper-split-export-declaration@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" - integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== - dependencies: - "@babel/types" "^7.11.0" - -"@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== - -"@babel/helpers@^7.12.5": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" - integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== - dependencies: - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.12.5" - "@babel/types" "^7.12.5" + "@babel/compat-data" "^7.18.8" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.20.2" + semver "^6.3.0" -"@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" + integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" + integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" + integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== + +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helpers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" + integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== + dependencies: + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.10", "@babel/parser@^7.12.7": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.10.tgz#824600d59e96aea26a5a2af5a9d812af05c3ae81" - integrity sha512-PJdRPwyoOqFAWfLytxrWwGrAxghCgh/yTNCYciOz8QgjflA7aZhECPZAa2VUedKg2+QMWkI0L9lynh2SNmNEgA== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.11": + version "7.18.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9" + integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -163,11 +175,11 @@ "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" - integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -225,44 +237,59 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" + integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/runtime@^7.1.2", "@babel/runtime@^7.2.0": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" - integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" + integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.10.4", "@babel/template@^7.12.7", "@babel/template@^7.3.3": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" - integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/parser" "^7.12.7" - "@babel/types" "^7.12.7" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.10.tgz#2d1f4041e8bf42ea099e5b2dc48d6a594c00017a" - integrity sha512-6aEtf0IeRgbYWzta29lePeYSk+YAFIC3kyqESeft8o5CkFlYIMX+EQDDWEiAQ9LHOA3d0oHdgrSsID/CKqXJlg== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.10" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.12.10" - "@babel/types" "^7.12.10" +"@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.3.3": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" + +"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": + version "7.18.11" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.11.tgz#3d51f2afbd83ecf9912bcbb5c4d94e3d2ddaa16f" + integrity sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.10" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.11" + "@babel/types" "^7.18.10" debug "^4.1.0" globals "^11.1.0" - lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.10.tgz#7965e4a7260b26f09c56bcfcb0498af1f6d9b260" - integrity sha512-sf6wboJV5mGyip2hIpDSKsr80RszPinEFjsHTalMxZAZkoQ2/2yQzxlcFN52SJqsyPfLtPmenL4g2KB3KJXPDw== +"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" + integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - lodash "^4.17.19" + "@babel/helper-string-parser" "^7.18.10" + "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -270,18 +297,44 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - "@discoveryjs/json-ext@^0.5.0": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz#90420f9f9c6d3987f176a19a7d8e764271a2f55d" - integrity sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g== + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@eslint/eslintrc@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" + integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.3.2" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@humanwhocodes/config-array@^0.10.4": + version "0.10.4" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" + integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/gitignore-to-minimatch@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" + integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@ironcorelabs/recrypt-wasm-binding@0.6.0": version "0.6.0" @@ -300,215 +353,212 @@ resolve-from "^5.0.0" "@istanbuljs/schema@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" - integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== - -"@jest/console@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" - integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== - dependencies: - "@jest/source-map" "^24.9.0" - chalk "^2.0.1" - slash "^2.0.0" - -"@jest/console@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.5.0.tgz#770800799d510f37329c508a9edd0b7b447d9abb" - integrity sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw== - dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - jest-message-util "^25.5.0" - jest-util "^25.5.0" + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df" + integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^28.1.3" + jest-util "^28.1.3" slash "^3.0.0" -"@jest/core@^25.5.4": - version "25.5.4" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.5.4.tgz#3ef7412f7339210f003cdf36646bbca786efe7b4" - integrity sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA== +"@jest/core@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-28.1.3.tgz#0ebf2bd39840f1233cd5f2d1e6fc8b71bd5a1ac7" + integrity sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA== dependencies: - "@jest/console" "^25.5.0" - "@jest/reporters" "^25.5.1" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" + "@jest/console" "^28.1.3" + "@jest/reporters" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" ansi-escapes "^4.2.1" - chalk "^3.0.0" + chalk "^4.0.0" + ci-info "^3.2.0" exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^25.5.0" - jest-config "^25.5.4" - jest-haste-map "^25.5.1" - jest-message-util "^25.5.0" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-resolve-dependencies "^25.5.4" - jest-runner "^25.5.4" - jest-runtime "^25.5.4" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - jest-watcher "^25.5.0" - micromatch "^4.0.2" - p-each-series "^2.1.0" - realpath-native "^2.0.0" + graceful-fs "^4.2.9" + jest-changed-files "^28.1.3" + jest-config "^28.1.3" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-resolve-dependencies "^28.1.3" + jest-runner "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + jest-watcher "^28.1.3" + micromatch "^4.0.4" + pretty-format "^28.1.3" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.5.0.tgz#aa33b0c21a716c65686638e7ef816c0e3a0c7b37" - integrity sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA== +"@jest/environment@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.3.tgz#abed43a6b040a4c24fdcb69eab1f97589b2d663e" + integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA== + dependencies: + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + jest-mock "^28.1.3" + +"@jest/expect-utils@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.1.3.tgz#58561ce5db7cd253a7edddbc051fb39dda50f525" + integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== + dependencies: + jest-get-type "^28.0.2" + +"@jest/expect@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-28.1.3.tgz#9ac57e1d4491baca550f6bdbd232487177ad6a72" + integrity sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw== dependencies: - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" + expect "^28.1.3" + jest-snapshot "^28.1.3" -"@jest/fake-timers@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.5.0.tgz#46352e00533c024c90c2bc2ad9f2959f7f114185" - integrity sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ== +"@jest/fake-timers@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.3.tgz#230255b3ad0a3d4978f1d06f70685baea91c640e" + integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw== dependencies: - "@jest/types" "^25.5.0" - jest-message-util "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - lolex "^5.0.0" + "@jest/types" "^28.1.3" + "@sinonjs/fake-timers" "^9.1.2" + "@types/node" "*" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-util "^28.1.3" -"@jest/globals@^25.5.2": - version "25.5.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-25.5.2.tgz#5e45e9de8d228716af3257eeb3991cc2e162ca88" - integrity sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA== +"@jest/globals@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-28.1.3.tgz#a601d78ddc5fdef542728309894895b4a42dc333" + integrity sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA== dependencies: - "@jest/environment" "^25.5.0" - "@jest/types" "^25.5.0" - expect "^25.5.0" + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/types" "^28.1.3" -"@jest/reporters@^25.5.1": - version "25.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-25.5.1.tgz#cb686bcc680f664c2dbaf7ed873e93aa6811538b" - integrity sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw== +"@jest/reporters@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-28.1.3.tgz#9adf6d265edafc5fc4a434cfb31e2df5a67a369a" + integrity sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - chalk "^3.0.0" + "@jest/console" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@jridgewell/trace-mapping" "^0.3.13" + "@types/node" "*" + chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" + glob "^7.1.3" + graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.0" + istanbul-lib-instrument "^5.1.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^25.5.1" - jest-resolve "^25.5.1" - jest-util "^25.5.0" - jest-worker "^25.5.0" + istanbul-reports "^3.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + jest-worker "^28.1.3" slash "^3.0.0" - source-map "^0.6.0" - string-length "^3.1.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" terminal-link "^2.0.0" - v8-to-istanbul "^4.1.3" - optionalDependencies: - node-notifier "^6.0.0" + v8-to-istanbul "^9.0.1" -"@jest/source-map@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" - integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== +"@jest/schemas@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" + integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== dependencies: - callsites "^3.0.0" - graceful-fs "^4.1.15" - source-map "^0.6.0" + "@sinclair/typebox" "^0.24.1" -"@jest/source-map@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.5.0.tgz#df5c20d6050aa292c2c6d3f0d2c7606af315bd1b" - integrity sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ== +"@jest/source-map@^28.1.2": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-28.1.2.tgz#7fe832b172b497d6663cdff6c13b0a920e139e24" + integrity sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww== dependencies: + "@jridgewell/trace-mapping" "^0.3.13" callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" + graceful-fs "^4.2.9" -"@jest/test-result@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" - integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA== +"@jest/test-result@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5" + integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== dependencies: - "@jest/console" "^24.9.0" - "@jest/types" "^24.9.0" + "@jest/console" "^28.1.3" + "@jest/types" "^28.1.3" "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" -"@jest/test-result@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.5.0.tgz#139a043230cdeffe9ba2d8341b27f2efc77ce87c" - integrity sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A== +"@jest/test-sequencer@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz#9d0c283d906ac599c74bde464bc0d7e6a82886c3" + integrity sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw== dependencies: - "@jest/console" "^25.5.0" - "@jest/types" "^25.5.0" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" + "@jest/test-result" "^28.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + slash "^3.0.0" -"@jest/test-sequencer@^25.5.4": - version "25.5.4" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz#9b4e685b36954c38d0f052e596d28161bdc8b737" - integrity sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA== +"@jest/transform@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.3.tgz#59d8098e50ab07950e0f2fc0fc7ec462371281b0" + integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== dependencies: - "@jest/test-result" "^25.5.0" - graceful-fs "^4.2.4" - jest-haste-map "^25.5.1" - jest-runner "^25.5.4" - jest-runtime "^25.5.4" - -"@jest/transform@^25.5.1": - version "25.5.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.5.1.tgz#0469ddc17699dd2bf985db55fa0fb9309f5c2db3" - integrity sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^25.5.0" - babel-plugin-istanbul "^6.0.0" - chalk "^3.0.0" + "@babel/core" "^7.11.6" + "@jest/types" "^28.1.3" + "@jridgewell/trace-mapping" "^0.3.13" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^25.5.1" - jest-regex-util "^25.2.6" - jest-util "^25.5.0" - micromatch "^4.0.2" - pirates "^4.0.1" - realpath-native "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + micromatch "^4.0.4" + pirates "^4.0.4" slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" + write-file-atomic "^4.0.1" -"@jest/types@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" - integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== +"@jest/types@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" + integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== dependencies: + "@jest/schemas" "^28.1.3" "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^13.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" -"@jest/types@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" - integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/gen-mapping@^0.3.0": +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== @@ -522,7 +572,7 @@ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== -"@jridgewell/set-array@^1.0.1": +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== @@ -540,7 +590,7 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.7", "@jridgewell/trace-mapping@^0.3.9": version "0.3.14" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== @@ -548,10 +598,48 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" + integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + +"@nightwatch/chai@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nightwatch/chai/-/chai-5.0.2.tgz#86b20908fc090dffd5c9567c0392bc6a494cc2e6" + integrity sha512-yzILJFCcE75OPoRfBlJ80Y3Ky06ljsdrK4Ld92yhmM477vxO2GEguwnd+ldl7pdSYTcg1gSJ1bPPQrA+/Hrn+A== + dependencies: + assertion-error "1.1.0" + check-error "1.0.2" + deep-eql "4.0.1" + loupe "2.3.4" + pathval "1.1.1" + type-detect "4.0.8" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" - integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78= + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== "@protobufjs/base64@^1.1.2": version "1.1.2" @@ -566,12 +654,12 @@ "@protobufjs/eventemitter@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" - integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A= + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== "@protobufjs/fetch@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" - integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU= + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== dependencies: "@protobufjs/aspromise" "^1.1.1" "@protobufjs/inquire" "^1.1.0" @@ -579,92 +667,114 @@ "@protobufjs/float@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" - integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E= + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== "@protobufjs/inquire@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" - integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik= + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== "@protobufjs/path@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" - integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0= + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== "@protobufjs/pool@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" - integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q= + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== "@protobufjs/utf8@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" - integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== + +"@sinclair/typebox@^0.24.1": + version "0.24.27" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.27.tgz#d55643516a1546174e10da681a8aaa81e757452d" + integrity sha512-K7C7IlQ3zLePEZleUN21ceBA2aLcMnLHTLph8QWk1JK37L90obdpY+QGY8bXMKxf1ht1Z0MNewvXxWv0oGDYFg== "@sinonjs/commons@^1.7.0": - version "1.8.1" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" - integrity sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw== + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== dependencies: type-detect "4.0.8" -"@stablelib/binary@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@stablelib/binary/-/binary-1.0.0.tgz#fa216f8b2d2f7153878e2bc45e91dddee72c4749" - integrity sha512-W01QhOw1tWL51Du1c5JZphJs7toRbfra1C2DBlhT0mRHZWGWB1hpFbqiZUFY7QNIMUpmmHLrlZs3YsSCB/giUg== +"@sinonjs/fake-timers@^9.1.2": + version "9.1.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" + integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== dependencies: - "@stablelib/int" "^1.0.0" + "@sinonjs/commons" "^1.7.0" -"@stablelib/ed25519@1.0.1": +"@stablelib/binary@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/ed25519/-/ed25519-1.0.1.tgz#359ca5f59428e9fde9efef9a8f4040ff0a256d67" - integrity sha512-kvC98vkJeertRj37yqTcjOwUVYWQ0jcywxxWpeuTal5ZNgH7EcbljtQYECA2Pi2N0zNG0a0AjSD2Q2DFcUxRjQ== + resolved "https://registry.yarnpkg.com/@stablelib/binary/-/binary-1.0.1.tgz#c5900b94368baf00f811da5bdb1610963dfddf7f" + integrity sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q== dependencies: - "@stablelib/random" "^1.0.0" - "@stablelib/sha512" "^1.0.0" - "@stablelib/wipe" "^1.0.0" + "@stablelib/int" "^1.0.1" -"@stablelib/hash@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@stablelib/hash/-/hash-1.0.0.tgz#28626ddc64cb84db9370f279c5a78cdc96f493ee" - integrity sha512-wBvSIIx4Y8799BRD4TBhezS1P9+irGAKdsNgbZMeU5ndMbw7BtZALdCm0FcJIRFxJ2giPLPS9YCgrwWAhzSRLQ== +"@stablelib/ed25519@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@stablelib/ed25519/-/ed25519-1.0.2.tgz#937a88a2f73a71d9bdc3ea276efe8954776ae0f4" + integrity sha512-FtnvUwvKbp6l1dNcg4CswMAVFVu/nzLK3oC7/PRtjYyHbWsIkD8j+5cjXHmwcCpdCpRCaTGACkEhhMQ1RcdSOQ== + dependencies: + "@stablelib/random" "^1.0.1" + "@stablelib/sha512" "^1.0.1" + "@stablelib/wipe" "^1.0.1" -"@stablelib/int@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@stablelib/int/-/int-1.0.0.tgz#2432569169cc5640fe5e65b7f79f722ed9cacc59" - integrity sha512-MRigEQCO7xM93nZqW4CbIBjhANGw3jJxGVSUZH3PQ6HWL1IGrFWVDBzIclWxl4l5aRRpqoM+76ellQNdUJPnsA== +"@stablelib/hash@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/hash/-/hash-1.0.1.tgz#3c944403ff2239fad8ebb9015e33e98444058bc5" + integrity sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg== -"@stablelib/random@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@stablelib/random/-/random-1.0.0.tgz#f441495075cdeaa45de16d7ddcc269c0b8edb16b" - integrity sha512-G9vwwKrNCGMI/uHL6XeWe2Nk4BuxkYyWZagGaDU9wrsuV+9hUwNI1lok2WVo8uJDa2zx7ahNwN7Ij983hOUFEw== +"@stablelib/int@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/int/-/int-1.0.1.tgz#75928cc25d59d73d75ae361f02128588c15fd008" + integrity sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w== + +"@stablelib/random@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/random/-/random-1.0.1.tgz#4357a00cb1249d484a9a71e6054bc7b8324a7009" + integrity sha512-zOh+JHX3XG9MSfIB0LZl/YwPP9w3o6WBiJkZvjPoKKu5LKFW4OLV71vMxWp9qG5T43NaWyn0QQTWgqCdO+yOBQ== dependencies: - "@stablelib/binary" "^1.0.0" - "@stablelib/wipe" "^1.0.0" + "@stablelib/binary" "^1.0.1" + "@stablelib/wipe" "^1.0.1" -"@stablelib/sha512@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@stablelib/sha512/-/sha512-1.0.0.tgz#91057cfcc15bdda96081ecfb6536b159510a05f6" - integrity sha512-qvUu5SraAdGa8HAkAasfMyD9C+MwlRnFVRJ6cRxAEIekmDsU3tfGLnUm3wb9ao4t0FkihGrj8GKlV82TTR4Phw== +"@stablelib/sha512@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/sha512/-/sha512-1.0.1.tgz#6da700c901c2c0ceacbd3ae122a38ac57c72145f" + integrity sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw== dependencies: - "@stablelib/binary" "^1.0.0" - "@stablelib/hash" "^1.0.0" - "@stablelib/wipe" "^1.0.0" + "@stablelib/binary" "^1.0.1" + "@stablelib/hash" "^1.0.1" + "@stablelib/wipe" "^1.0.1" -"@stablelib/utf8@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@stablelib/utf8/-/utf8-1.0.0.tgz#7c0c039b6d154da50326003ea92777ddc8f5db2c" - integrity sha512-Y8QWrK4T0yW0HMFfSI3ZaMHKV37q27hX5ilsmKV358x01mzYfj5fwIf2LjzTlF+UIemHEXSlSN9XJnv1ML4znQ== +"@stablelib/utf8@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/utf8/-/utf8-1.0.1.tgz#fd5e7ad353b7e3cd1ce85e49099360e57693cfd1" + integrity sha512-FrYD1xadah/TtAP6VJ04lDD5h9rdDj/d8wH/jMYTtHqZBv9z2btdvEU8vTxdjdkFmo1b/BH+t3R1wi/mYhCCNg== -"@stablelib/wipe@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@stablelib/wipe/-/wipe-1.0.0.tgz#8ed028a10bb7527357b2655c360383b5f07c16ac" - integrity sha512-0Fd4MQCbEh8OFSO+gG7wBXok7yRC3w+xe/wWM8KNye7EGoHr4BTFZNWV/1xAn2r8/gyFKxPXT8uxXRzDzGq6rg== +"@stablelib/wipe@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/wipe/-/wipe-1.0.1.tgz#d21401f1d59ade56a62e139462a97f104ed19a36" + integrity sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg== + +"@testim/chrome-version@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@testim/chrome-version/-/chrome-version-1.1.2.tgz#092005c5b77bd3bb6576a4677110a11485e11864" + integrity sha512-1c4ZOETSRpI0iBfIFUqU4KqwBAB2lHUAlBjZz/YqOHqwM9dTTzjV6Km0ZkiEiSCx/tLr1BtESIKyWWMww+RUqw== + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== -"@types/babel__core@^7.1.7": - version "7.1.12" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" - integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== +"@types/babel__core@^7.1.14": + version "7.1.19" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" + integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -673,24 +783,24 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" - integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" - integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0" - integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg== + version "7.18.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.0.tgz#8134fd78cb39567465be65b9fdc16d378095f41f" + integrity sha512-v4Vwdko+pgymgS+A2UIaJru93zQd85vIGWObM5ekZNdXCKtDYqATlEYnWgfo86Q6I1Lh0oXnksDnMU1cwmlPDw== dependencies: "@babel/types" "^7.3.0" @@ -699,56 +809,99 @@ resolved "https://registry.yarnpkg.com/@types/base64-js/-/base64-js-1.3.0.tgz#c939fdba49846861caf5a246b165dbf5698a317c" integrity sha512-ZmI0sZGAUNXUfMWboWwi4LcfpoVUYldyN6Oe0oJ5cCsHDU/LlRq8nQKPXhYLOx36QYSW9bNIb1vvRrD6K7Llgw== -"@types/eslint-scope@^3.7.0": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.0.tgz#4792816e31119ebd506902a482caec4951fabd86" - integrity sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw== +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.9": + version "3.5.10" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" + integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" + integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== dependencies: "@types/eslint" "*" "@types/estree" "*" -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== - "@types/eslint@*": - version "7.2.13" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.13.tgz#e0ca7219ba5ded402062ad6f926d491ebb29dd53" - integrity sha512-LKmQCWAlnVHvvXq4oasNUMTJJb2GwSyTY8+1C7OH5ILR8mPLaljv1jxL1bXW3xB3jFbQxTKxJAvI8PyjB09aBg== + version "8.4.5" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.5.tgz#acdfb7dd36b91cc5d812d7c093811a8f3d9b31e4" + integrity sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ== dependencies: "@types/estree" "*" "@types/json-schema" "*" "@types/estree@*": - version "0.0.48" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.48.tgz#18dc8091b285df90db2f25aa7d906cfc394b7f74" - integrity sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew== + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== + +"@types/estree@^0.0.51": + version "0.0.51" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== -"@types/estree@^0.0.47": - version "0.0.47" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" - integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": + version "4.17.30" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz#0f2f99617fa8f9696170c46152ccf7500b34ac04" + integrity sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.13" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" + integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" -"@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== +"@types/graceful-fs@^4.1.3": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== dependencies: - "@types/minimatch" "*" "@types/node" "*" -"@types/graceful-fs@^4.1.2": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.4.tgz#4ff9f641a7c6d1a3508ff88bc3141b152772e753" - integrity sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg== +"@types/http-proxy@^1.17.8": + version "1.17.9" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" + integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" - integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== "@types/istanbul-lib-report@*": version "3.0.0" @@ -757,311 +910,411 @@ dependencies: "@types/istanbul-lib-coverage" "*" -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== dependencies: - "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" -"@types/jest@^25.1.4": - version "25.2.3" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.2.3.tgz#33d27e4c4716caae4eced355097a47ad363fdcaf" - integrity sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw== +"@types/jest@^28.1.6": + version "28.1.6" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.6.tgz#d6a9cdd38967d2d746861fb5be6b120e38284dd4" + integrity sha512-0RbGAFMfcBJKOmqRazM8L98uokwuwD5F8rHrv/ZMbrZBwVOWZUyPG6VFNscjYr/vjM3Vu4fRrCPbOs42AfemaQ== dependencies: - jest-diff "^25.2.1" - pretty-format "^25.2.1" + jest-matcher-utils "^28.0.0" + pretty-format "^28.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.6": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" - integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== +"@types/jsdom@^16.2.4": + version "16.2.15" + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-16.2.15.tgz#6c09990ec43b054e49636cba4d11d54367fc90d6" + integrity sha512-nwF87yjBKuX/roqGYerZZM0Nv1pZDMAT5YhOHYeM/72Fic+VEqJh4nyoqoapzJnW3pUlfxPY5FhgsJtM+dRnQQ== + dependencies: + "@types/node" "*" + "@types/parse5" "^6.0.3" + "@types/tough-cookie" "*" -"@types/json-schema@^7.0.3": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" - integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/long@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" - integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" + integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== "@types/material-ui@^0.21.7": - version "0.21.8" - resolved "https://registry.yarnpkg.com/@types/material-ui/-/material-ui-0.21.8.tgz#a550778942b2e9791653aa2c4b1a35127c44cab6" - integrity sha512-Rsx3tRNoYkidDKfMfh+cegtOHMl73akzKnQ5pzxTrbx5oaUXLtG6YVlvtS43uebOSTDf8GQNaseB52r3zVagEg== + version "0.21.12" + resolved "https://registry.yarnpkg.com/@types/material-ui/-/material-ui-0.21.12.tgz#208e8b7e49a545bb704fa7e865986afde1b33384" + integrity sha512-rBY3iOr5LISKDLAYo3229R79xIPPKSOL2c7FzAFn5dUj38Oe7rQldYedHWsYmkJUeboE9Ipad7ppyJwBzXxrMw== dependencies: "@types/react" "*" "@types/react-addons-linked-state-mixin" "*" -"@types/minimatch@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" - integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== +"@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== "@types/node@*", "@types/node@>=13.7.0": - version "17.0.38" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.38.tgz#f8bb07c371ccb1903f3752872c89f44006132947" - integrity sha512-5jY9RhV7c0Z4Jy09G+NIDTsCZ5G0L5n+Z+p+Y7t5VJHM30bgwzSjVtlcBxqAj+6L/swIlvtOSzr8rBk/aNyV2g== + version "18.6.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.6.5.tgz#06caea822caf9e59d5034b695186ee74154d2802" + integrity sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw== -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== +"@types/parse5@^6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-6.0.3.tgz#705bb349e789efa06f43f128cef51240753424cb" + integrity sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g== -"@types/prettier@^1.19.0": - version "1.19.1" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" - integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== +"@types/prettier@^2.1.5": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.0.tgz#ea03e9f0376a4446f44797ca19d9c46c36e352dc" + integrity sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A== "@types/prop-types@*": - version "15.7.3" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" - integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== "@types/react-addons-linked-state-mixin@*": - version "0.14.21" - resolved "https://registry.yarnpkg.com/@types/react-addons-linked-state-mixin/-/react-addons-linked-state-mixin-0.14.21.tgz#3abf296fe09d036c233ebe55f4562f3e6233af49" - integrity sha512-3UF7Szd3JyuU+z90kqu8L4VdDWp7SUC0eRjV2QmMEliaHODGLi5XyO5ctS50K/lG6fjC0dSAPVbvnqv0nPoGMQ== + version "0.14.22" + resolved "https://registry.yarnpkg.com/@types/react-addons-linked-state-mixin/-/react-addons-linked-state-mixin-0.14.22.tgz#a8fe5929bbfa10947f3bf62d4a878706ec6b7718" + integrity sha512-DF9utM6VjuIaY388R6XWWDs7CIDTH7on1k1yR+hqaL/T4/OqSCW5uij28APq9KI82CZf0/qtBJI+pjvXcOh0kQ== dependencies: "@types/react" "*" -"@types/react-dom@^17.0.0": - version "17.0.0" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.0.tgz#b3b691eb956c4b3401777ee67b900cb28415d95a" - integrity sha512-lUqY7OlkF/RbNtD5nIq7ot8NquXrdFrjSOR6+w9a9RFQevGi1oZO1dcJbXMeONAPKtZ2UrZOEJ5UOCVsxbLk/g== +"@types/react-dom@^18.0.0": + version "18.0.6" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.6.tgz#36652900024842b74607a17786b6662dd1e103a1" + integrity sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA== dependencies: "@types/react" "*" "@types/react-tap-event-plugin@^0.0.30": version "0.0.30" resolved "https://registry.yarnpkg.com/@types/react-tap-event-plugin/-/react-tap-event-plugin-0.0.30.tgz#123f35080412f489b6770c5a65c159ff96654cb5" - integrity sha1-Ej81CAQS9Im2dwxaZcFZ/5ZlTLU= + integrity sha512-kpOJyY1+vrArvuFLApzsvz0nkt/ZBCa8qAixGdL3pK00QrETm08XXNQxD80GmIFglTeFPZqEx82rW/S4oGoijA== -"@types/react@*", "@types/react@^17.0.0": - version "17.0.0" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.0.tgz#5af3eb7fad2807092f0046a1302b7823e27919b8" - integrity sha512-aj/L7RIMsRlWML3YB6KZiXB3fV2t41+5RBGYF8z+tAKU43Px8C3cYUZsDvf1/+Bm4FK21QWBrDutu8ZJ/70qOw== +"@types/react@*", "@types/react@^18.0.0": + version "18.0.17" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.17.tgz#4583d9c322d67efe4b39a935d223edcc7050ccf4" + integrity sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ== dependencies: "@types/prop-types" "*" + "@types/scheduler" "*" csstype "^3.0.2" +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + +"@types/scheduler@*": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + +"@types/serve-index@^1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" + integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== + dependencies: + "@types/express" "*" + +"@types/serve-static@*", "@types/serve-static@^1.13.10": + version "1.15.0" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155" + integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg== + dependencies: + "@types/mime" "*" + "@types/node" "*" + "@types/sjcl@^1.0.28": - version "1.0.29" - resolved "https://registry.yarnpkg.com/@types/sjcl/-/sjcl-1.0.29.tgz#bd154ee15421fe24be2db4a20322f38069c1ca71" - integrity sha512-gP9M7Oq4xAoDpuueWHeOTasccV4K6iFBEBPbR0tXejKT/e/Gkla0XcJ9REmgSCICt6y8/ubcvXFtiZ4ZLQ6BKA== + version "1.0.30" + resolved "https://registry.yarnpkg.com/@types/sjcl/-/sjcl-1.0.30.tgz#c1db866622ef4da56af081fa2e258d76fb255b89" + integrity sha512-4ebBtj1rx3Kh3To5RnPua+U4JzVwH2MxUmHQvAlxWpzmfmupBRyyXAIEQceon+e5tW9aBeOApTYA6EXfBysRyQ== -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== +"@types/sockjs@^0.3.33": + version "0.3.33" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" + integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== + dependencies: + "@types/node" "*" + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/tough-cookie@*": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397" + integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw== "@types/webpack-env@^1.16.0": - version "1.16.0" - resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.16.0.tgz#8c0a9435dfa7b3b1be76562f3070efb3f92637b4" - integrity sha512-Fx+NpfOO0CpeYX2g9bkvX8O5qh9wrU1sOF4g8sft4Mu7z+qfe387YlyY8w8daDyDsKY5vUxM0yxkAYnbkRbZEw== + version "1.17.0" + resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.17.0.tgz#f99ce359f1bfd87da90cc4a57cab0a18f34a48d0" + integrity sha512-eHSaNYEyxRA5IAG0Ym/yCyf86niZUIF/TpWKofQI/CVfh5HsMEUyfE2kwFxha4ow0s5g0LfISQxpDKjbRDrizw== + +"@types/ws@^8.5.1": + version "8.5.3" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" + integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== + dependencies: + "@types/node" "*" "@types/yargs-parser@*": - version "15.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" - integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== -"@types/yargs@^13.0.0": - version "13.0.11" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.11.tgz#def2f0c93e4bdf2c61d7e34899b17e34be28d3b1" - integrity sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ== +"@types/yargs@^17.0.8": + version "17.0.11" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.11.tgz#5e10ca33e219807c0eee0f08b5efcba9b6a42c06" + integrity sha512-aB4y9UDUXTSMxmM4MH+YnuR0g5Cph3FLQBoWoMB21DSvFVAxRVEHEMx3TLh+zUZYMCQtKiqazz0Q4Rre31f/OA== dependencies: "@types/yargs-parser" "*" -"@types/yargs@^15.0.0": - version "15.0.11" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.11.tgz#361d7579ecdac1527687bcebf9946621c12ab78c" - integrity sha512-jfcNBxHFYJ4nPIacsi3woz1+kvUO6s1CyeEhtnDHBjHUMNj5UlW2GynmnSgiJJEdNg9yW5C8lfoNRZrHGv5EqA== +"@types/yauzl@^2.9.1": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" + integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== dependencies: - "@types/yargs-parser" "*" + "@types/node" "*" -"@typescript-eslint/eslint-plugin@^2.25.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9" - integrity sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ== +"@typescript-eslint/eslint-plugin@^5.33.0": + version "5.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.0.tgz#059798888720ec52ffa96c5f868e31a8f70fa3ec" + integrity sha512-jHvZNSW2WZ31OPJ3enhLrEKvAZNyAFWZ6rx9tUwaessTc4sx9KmgMNhVcqVAl1ETnT5rU5fpXTLmY9YvC1DCNg== dependencies: - "@typescript-eslint/experimental-utils" "2.34.0" + "@typescript-eslint/scope-manager" "5.33.0" + "@typescript-eslint/type-utils" "5.33.0" + "@typescript-eslint/utils" "5.33.0" + debug "^4.3.4" functional-red-black-tree "^1.0.1" - regexpp "^3.0.0" - tsutils "^3.17.1" - -"@typescript-eslint/experimental-utils@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f" - integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.34.0" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" - -"@typescript-eslint/parser@^2.25.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8" - integrity sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA== - dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.34.0" - "@typescript-eslint/typescript-estree" "2.34.0" - eslint-visitor-keys "^1.1.0" - -"@typescript-eslint/typescript-estree@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" - integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg== - dependencies: - debug "^4.1.1" - eslint-visitor-keys "^1.1.0" - glob "^7.1.6" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" - -"@webassemblyjs/ast@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" - integrity sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - -"@webassemblyjs/floating-point-hex-parser@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz#34d62052f453cd43101d72eab4966a022587947c" - integrity sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA== - -"@webassemblyjs/helper-api-error@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz#aaea8fb3b923f4aaa9b512ff541b013ffb68d2d4" - integrity sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w== - -"@webassemblyjs/helper-buffer@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz#d026c25d175e388a7dbda9694e91e743cbe9b642" - integrity sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA== - -"@webassemblyjs/helper-numbers@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz#7ab04172d54e312cc6ea4286d7d9fa27c88cd4f9" - integrity sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.0" - "@webassemblyjs/helper-api-error" "1.11.0" + ignore "^5.2.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.33.0": + version "5.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.33.0.tgz#26ec3235b74f0667414613727cb98f9b69dc5383" + integrity sha512-cgM5cJrWmrDV2KpvlcSkelTBASAs1mgqq+IUGKJvFxWrapHpaRy5EXPQz9YaKF3nZ8KY18ILTiVpUtbIac86/w== + dependencies: + "@typescript-eslint/scope-manager" "5.33.0" + "@typescript-eslint/types" "5.33.0" + "@typescript-eslint/typescript-estree" "5.33.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.33.0": + version "5.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.33.0.tgz#509d7fa540a2c58f66bdcfcf278a3fa79002e18d" + integrity sha512-/Jta8yMNpXYpRDl8EwF/M8It2A9sFJTubDo0ATZefGXmOqlaBffEw0ZbkbQ7TNDK6q55NPHFshGBPAZvZkE8Pw== + dependencies: + "@typescript-eslint/types" "5.33.0" + "@typescript-eslint/visitor-keys" "5.33.0" + +"@typescript-eslint/type-utils@5.33.0": + version "5.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.33.0.tgz#92ad1fba973c078d23767ce2d8d5a601baaa9338" + integrity sha512-2zB8uEn7hEH2pBeyk3NpzX1p3lF9dKrEbnXq1F7YkpZ6hlyqb2yZujqgRGqXgRBTHWIUG3NGx/WeZk224UKlIA== + dependencies: + "@typescript-eslint/utils" "5.33.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.33.0": + version "5.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.33.0.tgz#d41c584831805554b063791338b0220b613a275b" + integrity sha512-nIMt96JngB4MYFYXpZ/3ZNU4GWPNdBbcB5w2rDOCpXOVUkhtNlG2mmm8uXhubhidRZdwMaMBap7Uk8SZMU/ppw== + +"@typescript-eslint/typescript-estree@5.33.0": + version "5.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.0.tgz#02d9c9ade6f4897c09e3508c27de53ad6bfa54cf" + integrity sha512-tqq3MRLlggkJKJUrzM6wltk8NckKyyorCSGMq4eVkyL5sDYzJJcMgZATqmF8fLdsWrW7OjjIZ1m9v81vKcaqwQ== + dependencies: + "@typescript-eslint/types" "5.33.0" + "@typescript-eslint/visitor-keys" "5.33.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.33.0": + version "5.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.33.0.tgz#46797461ce3146e21c095d79518cc0f8ec574038" + integrity sha512-JxOAnXt9oZjXLIiXb5ZIcZXiwVHCkqZgof0O8KPgz7C7y0HS42gi75PdPlqh1Tf109M0fyUw45Ao6JLo7S5AHw== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.33.0" + "@typescript-eslint/types" "5.33.0" + "@typescript-eslint/typescript-estree" "5.33.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/visitor-keys@5.33.0": + version "5.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.0.tgz#fbcbb074e460c11046e067bc3384b5d66b555484" + integrity sha512-/XsqCzD4t+Y9p5wd9HZiptuGKBlaZO5showwqODii5C0nZawxWLF+Q6k5wYHBrQv96h6GYKyqqMHCSTqta8Kiw== + dependencies: + "@typescript-eslint/types" "5.33.0" + eslint-visitor-keys "^3.3.0" + +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" + integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" + integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== + +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" + integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== + +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" + integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== + +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" + integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-wasm-bytecode@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz#85fdcda4129902fe86f81abf7e7236953ec5a4e1" - integrity sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA== +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" + integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== -"@webassemblyjs/helper-wasm-section@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz#9ce2cc89300262509c801b4af113d1ca25c1a75b" - integrity sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew== +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" + integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" -"@webassemblyjs/ieee754@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz#46975d583f9828f5d094ac210e219441c4e6f5cf" - integrity sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA== +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" + integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.0.tgz#f7353de1df38aa201cba9fb88b43f41f75ff403b" - integrity sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g== +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" + integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.0.tgz#86e48f959cf49e0e5091f069a709b862f5a2cadf" - integrity sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw== - -"@webassemblyjs/wasm-edit@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz#ee4a5c9f677046a210542ae63897094c2027cb78" - integrity sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/helper-wasm-section" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - "@webassemblyjs/wasm-opt" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - "@webassemblyjs/wast-printer" "1.11.0" - -"@webassemblyjs/wasm-gen@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz#3cdb35e70082d42a35166988dda64f24ceb97abe" - integrity sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/ieee754" "1.11.0" - "@webassemblyjs/leb128" "1.11.0" - "@webassemblyjs/utf8" "1.11.0" - -"@webassemblyjs/wasm-opt@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz#1638ae188137f4bb031f568a413cd24d32f92978" - integrity sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - -"@webassemblyjs/wasm-parser@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz#3e680b8830d5b13d1ec86cc42f38f3d4a7700754" - integrity sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-api-error" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/ieee754" "1.11.0" - "@webassemblyjs/leb128" "1.11.0" - "@webassemblyjs/utf8" "1.11.0" - -"@webassemblyjs/wast-printer@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz#680d1f6a5365d6d401974a8e949e05474e1fab7e" - integrity sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" + integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== + +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" + integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" + integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" + integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" + integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" + integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== + dependencies: + "@webassemblyjs/ast" "1.11.1" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.3.tgz#204bcff87cda3ea4810881f7ea96e5f5321b87b9" - integrity sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw== +"@webpack-cli/configtest@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" + integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== -"@webpack-cli/info@^1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.2.4.tgz#7381fd41c9577b2d8f6c2594fad397ef49ad5573" - integrity sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g== +"@webpack-cli/info@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" + integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== dependencies: envinfo "^7.7.3" -"@webpack-cli/serve@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.4.0.tgz#f84fd07bcacefe56ce762925798871092f0f228e" - integrity sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg== +"@webpack-cli/serve@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" + integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -1073,77 +1326,87 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -abab@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== +abab@^2.0.5, abab@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" + mime-types "~2.1.34" + negotiator "0.6.3" -acorn-globals@^4.3.2: - version "4.3.4" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" - integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" + acorn "^7.1.1" + acorn-walk "^7.1.1" -acorn-jsx@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== +acorn-import-assertions@^1.7.6: + version "1.8.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" + integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== -acorn-walk@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^6.0.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^7.1.0, acorn@^7.1.1: +acorn@^7.1.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.1, acorn@^8.5.0: - version "8.7.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" - integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== +acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== -agent-base@4, agent-base@^4.2.0, agent-base@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" - integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: - es6-promisify "^5.0.0" + debug "4" -agent-base@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: - es6-promisify "^5.0.0" + clean-stack "^2.0.0" + indent-string "^4.0.0" -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" -ajv-keywords@^3.1.0, ajv-keywords@^3.5.2: +ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.5: +ajv-keywords@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1153,56 +1416,53 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.0, ajv@^8.8.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + animal-id@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/animal-id/-/animal-id-0.0.1.tgz#931d14f230108f04fcfec018530dffa715d715da" - integrity sha1-kx0U8jAQjwT8/sAYUw3/pxXXFdo= + integrity sha512-M5wErIPUoq1mmJrLX5M2ljH64EggfhzGEAUMjipVMKhHEUugu4g0IsYGb/kfOscLQQ+owA3+kJkqZNPsjlVQiQ== dependencies: node-uuid "~1.4.0" -ansi-colors@3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== +ansi-align@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" -ansi-colors@^3.0.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" - integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== ansi-escapes@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" - integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: - type-fest "^0.11.0" - -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + type-fest "^0.21.3" -ansi-regex@^4.0.0, ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -1216,18 +1476,22 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +ansi-to-html@^0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.7.2.tgz#a92c149e4184b571eb29a0135ca001a8e2d710cb" + integrity sha512-v6MqmEpNlxF+POuyhKkidusCHWWkaLcGRURzivcU3I9tv7k4JVhFcnukrM5Rlk2rUywdZuzYAZ+kbZqWCnfN3g== dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" + entities "^2.2.0" -anymatch@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== +anymatch@^3.0.3, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -1239,207 +1503,113 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-flatten@^2.1.0: +array-flatten@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8" - integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - get-intrinsic "^1.0.1" - is-string "^1.0.5" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= +array-includes@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" + integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + get-intrinsic "^1.1.1" + is-string "^1.0.7" -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.flatmap@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" - integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== +array.prototype.flatmap@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f" + integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - function-bind "^1.1.1" + es-abstract "^1.19.2" + es-shim-unscopables "^1.0.0" asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assertion-error@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.0.tgz#c7f85438fdd466bc7ca16ab90c81513797a5d23b" - integrity sha1-x/hUOP3UZrx8oWq5DIFRN5el0js= + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== -assertion-error@^1.1.0: +assertion-error@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -ast-types@0.x.x: - version "0.14.2" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" - integrity sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA== - dependencies: - tslib "^2.0.1" - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^2.6.2: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" +async@^3.2.3: + version "3.2.4" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -awesome-typescript-loader@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/awesome-typescript-loader/-/awesome-typescript-loader-5.2.1.tgz#a41daf7847515f4925cdbaa3075d61f289e913fc" - integrity sha512-slv66OAJB8orL+UUaTI3pKlLorwIvS4ARZzYR9iJJyGsEgOqueMfOMdKySWzZ73vIkEe3fcwFgsKMg4d8zyb1g== - dependencies: - chalk "^2.4.1" - enhanced-resolve "^4.0.0" - loader-utils "^1.1.0" - lodash "^4.17.5" - micromatch "^3.1.9" - mkdirp "^0.5.1" - source-map-support "^0.5.3" - webpack-log "^1.2.0" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - -babel-jest@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.5.1.tgz#bc2e6101f849d6f6aec09720ffc7bc5332e62853" - integrity sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ== - dependencies: - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^25.5.0" - chalk "^3.0.0" - graceful-fs "^4.2.4" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +axios@^0.27.2: + version "0.27.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== + dependencies: + follow-redirects "^1.14.9" + form-data "^4.0.0" + +babel-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.3.tgz#c1187258197c099072156a0a121c11ee1e3917d5" + integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== + dependencies: + "@jest/transform" "^28.1.3" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^28.1.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" slash "^3.0.0" -babel-plugin-istanbul@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^4.0.0" + istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz#129c80ba5c7fc75baf3a45b93e2e372d57ca2677" - integrity sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g== +babel-plugin-jest-hoist@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz#1952c4d0ea50f2d6d794353762278d1d8cca3fbe" + integrity sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" -babel-preset-current-node-syntax@^0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz#826f1f8e7245ad534714ba001f84f7e906c3b615" - integrity sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w== +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" @@ -1452,19 +1622,20 @@ babel-preset-current-node-syntax@^0.1.2: "@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-top-level-await" "^7.8.3" -babel-preset-jest@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz#c1d7f191829487a907764c65307faa0e66590b49" - integrity sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw== +babel-preset-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz#5dfc20b99abed5db994406c2b9ab94c73aaa419d" + integrity sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A== dependencies: - babel-plugin-jest-hoist "^25.5.0" - babel-preset-current-node-syntax "^0.1.2" + babel-plugin-jest-hoist "^28.1.3" + babel-preset-current-node-syntax "^1.0.0" babel-runtime@^6.23.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" @@ -1474,91 +1645,82 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" +base64-js@1.5.1, base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: - file-uri-to-path "1.0.0" - -bluebird@^3.5.0: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== +body-parser@1.20.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" + integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== dependencies: - bytes "3.1.0" + bytes "3.1.2" content-type "~1.0.4" debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" + on-finished "2.4.1" + qs "6.10.3" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +bonjour-service@^1.0.11: + version "1.0.13" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.13.tgz#4ac003dc1626023252d58adf2946f57e5da450c1" + integrity sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA== + dependencies: + array-flatten "^2.1.2" dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" bowser@^1.7.3: version "1.9.4" resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.9.4.tgz#890c58a2813a9d3243704334fa81b96a5c150c9a" integrity sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ== +boxen@5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1567,23 +1729,14 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" + balanced-match "^1.0.0" -braces@^3.0.1: +braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -1595,28 +1748,20 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== - dependencies: - resolve "1.1.7" - browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserslist@^4.14.5: - version "4.16.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" - integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== +browserslist@^4.14.5, browserslist@^4.20.2: + version "4.21.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" + integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== dependencies: - caniuse-lite "^1.0.30001219" - colorette "^1.2.2" - electron-to-chromium "^1.3.723" - escalade "^3.1.1" - node-releases "^1.1.71" + caniuse-lite "^1.0.30001370" + electron-to-chromium "^1.4.202" + node-releases "^2.0.6" + update-browserslist-db "^1.0.5" bs-logger@0.x: version "0.2.6" @@ -1632,50 +1777,38 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= - -buffer-from@1.x: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" @@ -1690,42 +1823,34 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^5.0.0, camelcase@^5.3.1: +camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001219: - version "1.0.30001234" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001234.tgz#8fc2e709e3b0679d7af7f073a1c661155c39b975" - integrity sha512-a3gjUVKkmwLdNysa1xkUAwN2VfJUJyVW47rsi3aCbkRCtbHAfo+rOsCqVw29G6coQ8gzAPb5XBXwiGHwme3isA== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" +camelcase@^6.0.0, camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +caniuse-lite@^1.0.30001370: + version "1.0.30001375" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001375.tgz#8e73bc3d1a4c800beb39f3163bf0190d7e5d7672" + integrity sha512-kWIMkNzLYxSvnjy0hL8w1NOaWNr2rn39RTAVyIwcw8juu60bZDWiF1/loOYANzjtJmy6qPgNmn38ro5Pygagdw== -chai-nightwatch@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/chai-nightwatch/-/chai-nightwatch-0.4.0.tgz#028dc2bf234d9ef1e895cb134027795b1c7c9467" - integrity sha512-1xw74vR02XiHzo4wQfHqme2nqYPIzYnK5s3DMST7UW8FIHDWD7qplg+DTJ5FIPcmWiGYX/Re0CzvOcZQKJm1Uw== +chai-nightwatch@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/chai-nightwatch/-/chai-nightwatch-0.5.3.tgz#980ecf63dde5a04e7f3524370682c7ff01178ffb" + integrity sha512-38ixH/mqpY6IwnZkz6xPqx8aB5/KVR+j6VPugcir3EGOsphnWXrPH/mUt8Jp+ninL6ghY0AaJDQ10hSfCPGy/g== dependencies: - assertion-error "1.0.0" - deep-eql "0.1.3" + assertion-error "1.1.0" chain-function@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.1.tgz#c63045e5b4b663fb86f1c6e186adaf1de402a1cc" integrity sha512-SxltgMwL9uCko5/ZCLiyG2B7R9fY4pDZUw7hJ4MhirdjBLosoDqkWABi3XMucddHdLiFJMb7PD2MZifZriuMTg== -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1734,18 +1859,10 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" @@ -1753,51 +1870,75 @@ chalk@^4.1.0: change-emitter@^0.1.2: version "0.1.6" resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" - integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU= + integrity sha512-YXzt1cQ4a2jqazhcuSWEOc1K2q8g9H6eWNsyZgi640LDzRWVQ2eDe+Y/kVdftH+vYdPF2rgDb3dLdpxE1jvAxw== -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +check-error@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== + +chokidar@3.5.3, chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.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" optionalDependencies: - fsevents "^1.2.7" + fsevents "~2.3.2" chrome-trace-event@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== +chromedriver@^104.0.0: + version "104.0.0" + resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-104.0.0.tgz#2f730f52a567280872567bf3497e1c673b6f4275" + integrity sha512-zbHZutN2ATo19xA6nXwwLn+KueD/5w8ap5m4b6bCb8MIaRFnyDwMbFoy7oFAjlSMpCFL3KSaZRiWUwjj//N3yQ== dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" + "@testim/chrome-version" "^1.1.2" + axios "^0.27.2" + del "^6.0.0" + extract-zip "^2.0.1" + https-proxy-agent "^5.0.0" + proxy-from-env "^1.1.0" + tcp-port-used "^1.0.1" + +ci-info@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" + integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== + +ci-info@^3.2.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.2.tgz#6d2967ffa407466481c6c90b6e16b3098f080128" + integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== + +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== cli-cursor@^3.1.0: version "3.1.0" @@ -1806,33 +1947,19 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-spinners@^2.2.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047" - integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ== - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" +cli-spinners@^2.5.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" + integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" + wrap-ansi "^7.0.0" clone-deep@^4.0.1: version "4.0.1" @@ -1846,26 +1973,18 @@ clone-deep@^4.0.1: clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -1883,19 +2002,19 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.2.1, colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== +colorette@^2.0.10, colorette@^2.0.14: + version "2.0.19" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== -combined-stream@^1.0.6, combined-stream@~1.0.6: +combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -1912,11 +2031,6 @@ commander@^7.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - compressible@~2.0.16: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" @@ -1940,19 +2054,19 @@ compression@^1.7.4: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: - safe-buffer "5.1.2" + safe-buffer "5.2.1" content-type@~1.0.4: version "1.0.4" @@ -1960,62 +2074,51 @@ content-type@~1.0.4: integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== dependencies: safe-buffer "~5.1.1" cookie-parser@^1.4.4: - version "1.4.5" - resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.5.tgz#3e572d4b7c0c80f9c61daf604e4336831b5d1d49" - integrity sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw== + version "1.4.6" + resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.6.tgz#3ac3a7d35a7a03bbc7e365073a26074824214594" + integrity sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA== dependencies: - cookie "0.4.0" + cookie "0.4.1" cookie-signature "1.0.6" cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +cookie@0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= + integrity sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA== core-js@^2.4.0: version "2.6.12" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cross-spawn@^7.0.0, cross-spawn@^7.0.3: +cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -2032,17 +2135,17 @@ css-in-js-utils@^2.0.0: hyphenate-style-name "^1.0.2" isobject "^3.0.1" -cssom@^0.4.1: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== +cssom@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" + integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== cssom@~0.3.6: version "0.3.8" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -cssstyle@^2.0.0: +cssstyle@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== @@ -2050,193 +2153,139 @@ cssstyle@^2.0.0: cssom "~0.3.6" csstype@^3.0.2: - version "3.0.5" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.5.tgz#7fdec6a28a67ae18647c51668a9ff95bb2fa7bb8" - integrity sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ== - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -data-uri-to-buffer@1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" - integrity sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ== + version "3.1.0" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" + integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== -data-urls@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== +data-urls@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" + integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" + abab "^2.0.6" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" -debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3: +debug@2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: - ms "^2.1.1" + ms "2.1.2" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: +debug@4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" -debug@^3.1.0, debug@^3.1.1, debug@^3.2.6: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== +debug@4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== dependencies: - ms "^2.1.1" + ms "2.1.2" -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +decimal.js@^10.3.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== -deep-eql@0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" - integrity sha1-71WKyrjeJSBs1xOQbXTlaTDrafI= - dependencies: - type-detect "0.1.1" +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== -deep-equal@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== +deep-eql@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.0.1.tgz#2b65bc89491d193780c452edee2144a91bb0a445" + integrity sha512-D/Oxqobjr+kxaHsgiQBZq9b6iAWdEj5W/JdJm8deNduAPc9CwXQ3BJJCuEqlrPXcy45iOMkGPZ0T81Dnz7UDCA== dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" + type-detect "^4.0.0" -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== -default-gateway@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" - integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== dependencies: - execa "^1.0.0" - ip-regex "^2.1.0" + execa "^5.0.0" defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA== dependencies: clone "^1.0.2" -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -degenerator@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095" - integrity sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU= +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== dependencies: - ast-types "0.x.x" - escodegen "1.x.x" - esprima "3.x.x" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" -del@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" - integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== +del@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" + integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== dependencies: - "@types/glob" "^7.1.1" - globby "^6.1.0" - is-path-cwd "^2.0.0" - is-path-in-cwd "^2.0.0" - p-map "^2.0.0" - pify "^4.0.1" - rimraf "^2.6.3" + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-newline@^3.0.0: version "3.1.0" @@ -2248,40 +2297,39 @@ detect-node@^2.0.4: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== -diff-sequences@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" - integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== +didyoumean@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + +diff-sequences@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" + integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== -diff-sequences@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" - integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== -diff@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= - -dns-packet@^1.3.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" - integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" + integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= +dns-packet@^5.2.2: + version "5.4.0" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b" + integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== dependencies: - buffer-indexof "^1.0.0" + "@leichtgewicht/ip-codec" "^2.0.1" doctrine@^2.1.0: version "2.1.0" @@ -2304,25 +2352,17 @@ dom-helpers@^3.2.0: dependencies: "@babel/runtime" "^7.1.2" -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== +domexception@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== dependencies: - webidl-conversions "^4.0.2" - -dotenv@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c" - integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== + webidl-conversions "^7.0.0" -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" +dotenv@10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== ecdsa-sig-formatter@1.0.11: version "1.0.11" @@ -2334,22 +2374,24 @@ ecdsa-sig-formatter@1.0.11: ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -ejs@^2.7.4: - version "2.7.4" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" - integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== +ejs@^3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" + integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== + dependencies: + jake "^10.8.5" -electron-to-chromium@^1.3.723: - version "1.3.748" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.748.tgz#16638a8130f407ae5bf2fc168f2173574deb36c5" - integrity sha512-fmIKfYALVeEybk/L2ucdgt7jN3JsbGtg3K9pmF/MRWgkeADBI1VSAa5IzdG2gZwTxsnsrFtdMpOTSM5mrBRKVQ== +electron-to-chromium@^1.4.202: + version "1.4.213" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.213.tgz#a0d0f535e4fbddc25196c91ff2964b5660932297" + integrity sha512-+3DbGHGOCHTVB/Ms63bGqbyC1b8y7Fk86+7ltssB8NQrZtSCvZG6eooSl9U2Q0yw++fL2DpHKOdTU0NVEkFObg== -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +emittery@^0.10.2: + version "0.10.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" + integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== emoji-regex@^8.0.0: version "8.0.0" @@ -2364,7 +2406,7 @@ emojis-list@^3.0.0: encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== encoding@^0.1.11: version "0.1.13" @@ -2380,40 +2422,24 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" - integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -enhanced-resolve@^5.8.0: - version "5.8.2" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz#15ddc779345cbb73e97c611cd00c01c1e7bf4d8b" - integrity sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA== +enhanced-resolve@^5.0.0, enhanced-resolve@^5.10.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6" + integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" -envinfo@^7.5.1: - version "7.7.3" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.3.tgz#4b2d8622e3e7366afb8091b23ed95569ea0208cc" - integrity sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA== +entities@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -envinfo@^7.7.3: +envinfo@7.8.1, envinfo@^7.7.3: version "7.8.1" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== -errno@^0.1.3: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -2421,50 +2447,46 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0-next.1: - version "1.18.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" - integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== +es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: + version "1.20.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" + integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" + function.prototype.name "^1.1.5" get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" has "^1.0.3" - has-symbols "^1.0.2" - is-callable "^1.2.3" - is-negative-zero "^2.0.1" - is-regex "^1.1.3" - is-string "^1.0.6" - object-inspect "^1.10.3" + has-property-descriptors "^1.0.0" + 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" + regexp.prototype.flags "^1.4.3" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-module-lexer@^0.9.0: + version "0.9.3" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" + integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== -es-abstract@^1.18.0-next.0, es-abstract@^1.18.0-next.1: - version "1.18.0-next.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" - integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.2" - is-negative-zero "^2.0.0" - is-regex "^1.1.1" - object-inspect "^1.8.0" - object-keys "^1.1.1" - object.assign "^4.1.1" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - -es-module-lexer@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.4.1.tgz#dda8c6a14d8f340a24e34331e0fab0cb50438e0e" - integrity sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA== es-to-primitive@^1.2.1: version "1.2.1" @@ -2475,44 +2497,6 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.53" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" - integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.3" - next-tick "~1.0.0" - -es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" - -es6-symbol@^3.1.1, es6-symbol@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -2521,48 +2505,56 @@ escalade@^3.1.1: escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@1.x.x, escodegen@^1.11.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== dependencies: esprima "^4.0.1" - estraverse "^4.2.0" + estraverse "^5.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: source-map "~0.6.1" eslint-plugin-react@^7.19.0: - version "7.21.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz#50b21a412b9574bfe05b21db176e8b7b3b15bff3" - integrity sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g== + version "7.30.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz#2be4ab23ce09b5949c6631413ba64b2810fd3e22" + integrity sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg== dependencies: - array-includes "^3.1.1" - array.prototype.flatmap "^1.2.3" + array-includes "^3.1.5" + array.prototype.flatmap "^1.3.0" doctrine "^2.1.0" - has "^1.0.3" + estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" - object.entries "^1.1.2" - object.fromentries "^2.0.2" - object.values "^1.1.1" - prop-types "^15.7.2" - resolve "^1.18.1" - string.prototype.matchall "^4.0.2" - -eslint-scope@5.1.1, eslint-scope@^5.0.0: + minimatch "^3.1.2" + object.entries "^1.1.5" + object.fromentries "^2.0.5" + object.hasown "^1.1.1" + object.values "^1.1.5" + prop-types "^15.8.1" + resolve "^2.0.0-next.3" + semver "^6.3.0" + string.prototype.matchall "^4.0.7" + +eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -2570,91 +2562,94 @@ eslint-scope@5.1.1, eslint-scope@^5.0.0: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: - eslint-visitor-keys "^1.1.0" + esrecurse "^4.3.0" + estraverse "^5.2.0" -eslint-utils@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== dependencies: - eslint-visitor-keys "^1.1.0" + eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.21.0: + version "8.21.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.21.0.tgz#1940a68d7e0573cef6f50037addee295ff9be9ef" + integrity sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA== dependencies: - "@babel/code-frame" "^7.0.0" + "@eslint/eslintrc" "^1.3.0" + "@humanwhocodes/config-array" "^0.10.4" + "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" + 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.3" + esquery "^1.4.0" esutils "^2.0.2" - file-entry-cache "^5.0.1" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" + glob-parent "^6.0.1" + globals "^13.15.0" + globby "^11.1.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^7.0.0" is-glob "^4.0.0" - js-yaml "^3.13.1" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" - minimatch "^3.0.4" - mkdirp "^0.5.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.8.3" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" + 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" -espree@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== +espree@^9.3.2, espree@^9.3.3: + version "9.3.3" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.3.tgz#2dd37c4162bb05f433ad3c1a52ddf8a49dc08e9d" + integrity sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng== dependencies: - acorn "^7.1.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" - -esprima@3.x.x: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" - integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: estraverse "^5.1.0" @@ -2665,15 +2660,15 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" @@ -2683,7 +2678,7 @@ esutils@^2.0.2: etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== eventemitter3@^4.0.0: version "4.0.7" @@ -2695,47 +2690,6 @@ events@^3.2.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -eventsource@^1.0.7: - version "1.1.1" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.1.tgz#4544a35a57d7120fba4fa4c86cb4023b2c09df2f" - integrity sha512-qV5ZC0h7jYIAOhArFJgSfdyz6rALJyb270714o7ZtNnw2WSJ+eexhKtE0O8LYPRsHZHf2osHKZBxGPvm3kPkCA== - dependencies: - original "^1.0.0" - -exec-sh@^0.3.2: - version "0.3.4" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" - integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.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" - -execa@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" - integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - p-finally "^2.0.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - execa@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -2754,165 +2708,109 @@ execa@^5.0.0: exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expect@^24.1.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca" - integrity sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q== - dependencies: - "@jest/types" "^24.9.0" - ansi-styles "^3.2.0" - jest-get-type "^24.9.0" - jest-matcher-utils "^24.9.0" - jest-message-util "^24.9.0" - jest-regex-util "^24.9.0" - -expect@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-25.5.0.tgz#f07f848712a2813bb59167da3fb828ca21f58bba" - integrity sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA== - dependencies: - "@jest/types" "^25.5.0" - ansi-styles "^4.0.0" - jest-get-type "^25.2.6" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-regex-util "^25.2.6" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/expect/-/expect-28.1.3.tgz#90a7c1a124f1824133dd4533cce2d2bdcb6603ec" + integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== + dependencies: + "@jest/expect-utils" "^28.1.3" + jest-get-type "^28.0.2" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" -express@^4.17.1: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== +express@^4.17.1, express@^4.17.3: + version "4.18.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" + integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== dependencies: - accepts "~1.3.7" + accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" + body-parser "1.20.0" + 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" + proxy-addr "~2.0.7" + qs "6.10.3" 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" + 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" -ext@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" - integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== - dependencies: - type "^2.0.0" - -extend-shallow@^2.0.1: +extract-zip@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + 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" + fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fast-text-encoding@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.1.tgz#4a428566f74fc55ebdd447555b1eb4d9cf514455" - integrity sha512-x4FEgaz3zNRtJfLFqJmHWxkMDDvXVtaznj2V9jiP8ACUJrUgist4bP9FmDL2Vew2Y9mEQI/tG4GqabaitYp9CQ== +fast-text-encoding@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.4.tgz#bf1898ad800282a4e53c0ea9690704dd26e4298e" + integrity sha512-x6lDDm/tBAzX9kmsPcZsNbvDs3Zey3+scsxaZElS8xWLgUMAg/oFLeewfUz0mu1CblHhhsu15jGkraldkFh8KQ== fastest-levenshtein@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" - integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" faye-websocket@^0.11.3: version "0.11.4" @@ -2929,9 +2827,9 @@ fb-watchman@^2.0.0: bser "2.1.1" fbjs@^0.8.1: - version "0.8.17" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" - integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= + version "0.8.18" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.18.tgz#9835e0addb9aca2eff53295cd79ca1cfc7c9662a" + integrity sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA== dependencies: core-js "^1.0.0" isomorphic-fetch "^2.1.1" @@ -2939,36 +2837,28 @@ fbjs@^0.8.1: object-assign "^4.1.0" promise "^7.1.1" setimmediate "^1.0.5" - ua-parser-js "^0.7.18" + ua-parser-js "^0.7.30" -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== dependencies: - escape-string-regexp "^1.0.5" + pend "~1.2.0" -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: - flat-cache "^2.0.1" + flat-cache "^3.0.4" -file-uri-to-path@1, file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= +filelist@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" + minimatch "^5.0.1" fill-range@^7.0.1: version "7.0.1" @@ -2977,25 +2867,26 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== dependencies: debug "2.6.9" encodeurl "~1.0.2" escape-html "~1.0.3" - on-finished "~2.3.0" + on-finished "2.4.1" parseurl "~1.3.3" - statuses "~1.5.0" + statuses "2.0.1" unpipe "~1.0.0" -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== +find-up@5.0.0, find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: - locate-path "^3.0.0" + locate-path "^6.0.0" + path-exists "^4.0.0" find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" @@ -3005,150 +2896,132 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flat@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" - integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: - is-buffer "~2.0.3" - -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + flatted "^3.1.0" + rimraf "^3.0.2" -follow-redirects@^1.0.0: - version "1.14.8" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc" - integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA== +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +flatted@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" + integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +follow-redirects@^1.0.0, follow-redirects@^1.14.9: + version "1.15.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" + integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" - combined-stream "^1.0.6" + combined-stream "^1.0.8" mime-types "^2.1.12" -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-monkey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" + integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@^2.1.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.2.1.tgz#1fb02ded2036a8ac288d507a65962bd87b97628d" - integrity sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA== - -ftp@~0.3.10: - version "0.3.10" - resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" - integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0= - dependencies: - readable-stream "1.1.x" - xregexp "2.0.0" +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== -futurejs@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/futurejs/-/futurejs-2.1.1.tgz#11d4503634b050a7c891ccbbe824c5ffa1bf1de3" - integrity sha512-5rSRikHpVNWY55pbQFPF3zUpvAkuVHdIAonwCJ6JRn0jIjxgN6KrMs9e59bH2YiSNCKn+PyIFfMEbVWrha2i0g== +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +futurejs@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/futurejs/-/futurejs-2.2.0.tgz#d267fd8cabef653899aa1413e27e3563b2441012" + integrity sha512-JgWDGfaDquVmSNvWAKulJXb/cMvxTAcPw2kW9UI2GsVw8iXuvaGh6hZHp08BkzPh2xFMYgvcwF4lK7qpbDP2HQ== -gensync@^1.0.0-beta.1: +gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.1: +get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be" - integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== dependencies: function-bind "^1.1.1" has "^1.0.3" - has-symbols "^1.0.1" + has-symbols "^1.0.3" get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0: +get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== @@ -3160,54 +3033,37 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-uri@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.4.tgz#d4937ab819e218d4cb5ae18e4f5962bef169cc6a" - integrity sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q== - dependencies: - data-uri-to-buffer "1" - debug "2" - extend "~3.0.2" - file-uri-to-path "1" - ftp "~0.3.10" - readable-stream "2" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== dependencies: - assert-plus "^1.0.0" + call-bind "^1.0.2" + get-intrinsic "^1.1.1" -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" + is-glob "^4.0.1" -glob-parent@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: - is-glob "^4.0.1" + is-glob "^4.0.3" glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== +glob@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -3216,15 +3072,15 @@ glob@7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== +glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.2.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" @@ -3233,117 +3089,78 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== +globals@^13.15.0: + version "13.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== dependencies: - type-fest "^0.8.1" + type-fest "^0.20.2" -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= +globby@^11.0.1, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" + 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" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -graceful-fs@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== growl@1.10.5: version "1.10.5" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - handle-thing@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== - -has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: +has-property-descriptors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" + get-intrinsic "^1.1.1" -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-values@^1.0.0: +has-tostringtag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" + has-symbols "^1.0.2" has@^1.0.3: version "1.0.3" @@ -3362,32 +3179,27 @@ hoist-non-react-statics@^2.3.1: resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== dependencies: inherits "^2.0.1" obuf "^1.0.0" readable-stream "^2.0.1" wbuf "^1.1.0" -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== +html-encoding-sniffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== dependencies: - whatwg-encoding "^1.0.1" + whatwg-encoding "^2.0.0" -html-entities@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" - integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== +html-entities@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== html-escaper@^2.0.0: version "2.0.2" @@ -3397,34 +3209,23 @@ html-escaper@^2.0.0: http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= - -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== -http-errors@1.7.3, http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: - depd "~1.1.2" + depd "2.0.0" inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" http-errors@~1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== dependencies: depd "~1.1.2" inherits "2.0.3" @@ -3432,29 +3233,31 @@ http-errors@~1.6.2: statuses ">= 1.4.0 < 2" http-parser-js@>=0.5.1: - version "0.5.3" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" - integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: - agent-base "4" - debug "3.1.0" + "@tootallnate/once" "2" + agent-base "6" + debug "4" -http-proxy-middleware@0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" - integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== dependencies: - http-proxy "^1.17.0" - is-glob "^4.0.0" - lodash "^4.17.11" - micromatch "^3.1.10" + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" -http-proxy@^1.17.0: +http-proxy@^1.18.1: version "1.18.1" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== @@ -3463,27 +3266,13 @@ http-proxy@^1.17.0: follow-redirects "^1.0.0" requires-port "^1.0.0" -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-proxy-agent@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz#b8c286433e87602311b01c8ea34413d856a4af81" - integrity sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg== +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: - agent-base "^4.3.0" - debug "^3.1.0" - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + agent-base "6" + debug "4" human-signals@^2.1.0: version "2.1.0" @@ -3495,50 +3284,47 @@ hyphenate-style-name@^1.0.2: resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" - integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== +iconv-lite@0.6.3, iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -immutable@^3.8.2: - version "3.8.2" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" - integrity sha1-wkOZUUVbs5kT2vKBN28VMOEErfM= +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== -import-fresh@^3.0.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e" - integrity sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw== +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - import-local@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" @@ -3546,17 +3332,22 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -3564,51 +3355,24 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, i inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== inline-style-prefixer@^3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz#8551b8e5b4d573244e66a34b04f7d32076a2b534" - integrity sha1-hVG45bTVcyROZqNLBPfTIHaitTQ= + integrity sha512-ne8XIyyqkRaNJ1JfL1NYzNdCNxq+MCBQhC8NgOQlzNm2vv3XxlP0VSLQUbSRCF6KPEoveCVEpayHoHzcMyZsMQ== dependencies: bowser "^1.7.3" css-in-js-utils "^2.0.0" -inquirer@^7.0.0: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -internal-ip@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" - integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== - dependencies: - default-gateway "^4.2.0" - ipaddr.js "^1.9.0" - -internal-slot@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" - integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== dependencies: - es-abstract "^1.17.0-next.1" + get-intrinsic "^1.1.0" has "^1.0.3" - side-channel "^1.0.2" + side-channel "^1.0.4" interpret@^1.0.0: version "1.4.0" @@ -3620,192 +3384,91 @@ interpret@^2.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - -ip@1.1.5, ip@^1.1.0, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= +ip-regex@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" + integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== -ipaddr.js@1.9.1, ipaddr.js@^1.9.0: +ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-absolute-url@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" - integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arguments@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" - integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== - dependencies: - call-bind "^1.0.0" +ipaddr.js@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" + integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-bigint@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" - integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: - binary-extensions "^1.0.0" + binary-extensions "^2.0.0" is-boolean-object@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" - integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" + has-tostringtag "^1.0.0" -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-buffer@~2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-callable@^1.1.4, is-callable@^1.2.2, is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== - dependencies: - has "^1.0.3" +is-callable@^1.1.4, is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== -is-core-module@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" - integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== +is-core-module@^2.9.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" + integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== dependencies: has "^1.0.3" -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - is-date-object@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" - integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" + has-tostringtag "^1.0.0" -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== -is-docker@^2.0.0: +is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" - integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" @@ -3814,81 +3477,86 @@ is-interactive@^1.0.0: resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== -is-negative-zero@^2.0.0, is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-number-object@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" - integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: - kind-of "^3.0.2" + has-tostringtag "^1.0.0" is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-path-cwd@^2.0.0: +is-path-cwd@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== -is-path-in-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" - integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== - dependencies: - is-path-inside "^2.1.0" +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-path-inside@^2.1.0: +is-plain-obj@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" - integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== - dependencies: - path-is-inside "^1.0.2" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== -is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" -is-regex@^1.0.4, is-regex@^1.1.1, is-regex@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" - integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== dependencies: call-bind "^1.0.2" - has-symbols "^1.0.2" -is-stream@^1.0.1, is-stream@^1.1.0: +is-stream@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" - integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" @@ -3897,81 +3565,76 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== +is-url@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" + integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" -is-wsl@^2.1.1: +is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= +is2@^2.0.6: + version "2.0.7" + resolved "https://registry.yarnpkg.com/is2/-/is2-2.0.7.tgz#d084e10cab3bd45d6c9dfde7a48599fcbb93fcac" + integrity sha512-4vBQoURAXC6hnLFxD4VW7uc04XiwTTl/8ydYJxKvPwkWQrSjInkuM5VZVg6BGr1/natq69zDuvO9lGpLClJqvA== + dependencies: + deep-is "^0.1.3" + ip-regex "^4.1.0" + is-url "^1.2.4" -isarray@1.0.0, isarray@~1.0.0: +isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isobject@^3.0.0, isobject@^3.0.1: +isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== isomorphic-fetch@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= + integrity sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA== dependencies: node-fetch "^1.0.1" whatwg-fetch ">=0.10.0" -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -istanbul-lib-coverage@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" - integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -istanbul-lib-instrument@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz#31d18bdd127f825dd02ea7bfdfd906f8ab840e9f" + integrity sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A== dependencies: - "@babel/core" "^7.7.5" + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" + istanbul-lib-coverage "^3.2.0" semver "^6.3.0" istanbul-lib-report@^3.0.0: @@ -3984,474 +3647,432 @@ istanbul-lib-report@^3.0.0: supports-color "^7.1.0" istanbul-lib-source-maps@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" - integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== dependencies: debug "^4.1.1" istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" - integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== +istanbul-reports@^3.1.3: + version "3.1.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.5.0.tgz#141cc23567ceb3f534526f8614ba39421383634c" - integrity sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw== +jake@^10.8.5: + version "10.8.5" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" + integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.1" + minimatch "^3.0.4" + +jest-changed-files@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-28.1.3.tgz#d9aeee6792be3686c47cb988a8eaf82ff4238831" + integrity sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA== + dependencies: + execa "^5.0.0" + p-limit "^3.1.0" + +jest-circus@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-28.1.3.tgz#d14bd11cf8ee1a03d69902dc47b6bd4634ee00e4" + integrity sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow== dependencies: - "@jest/types" "^25.5.0" - execa "^3.2.0" - throat "^5.0.0" + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + is-generator-fn "^2.0.0" + jest-each "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + p-limit "^3.1.0" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" -jest-cli@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.5.4.tgz#b9f1a84d1301a92c5c217684cb79840831db9f0d" - integrity sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw== +jest-cli@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-28.1.3.tgz#558b33c577d06de55087b8448d373b9f654e46b2" + integrity sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ== dependencies: - "@jest/core" "^25.5.4" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" + "@jest/core" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + chalk "^4.0.0" exit "^0.1.2" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^25.5.4" - jest-util "^25.5.0" - jest-validate "^25.5.0" + jest-config "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" prompts "^2.0.1" - realpath-native "^2.0.0" - yargs "^15.3.1" - -jest-config@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.5.4.tgz#38e2057b3f976ef7309b2b2c8dcd2a708a67f02c" - integrity sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^25.5.4" - "@jest/types" "^25.5.0" - babel-jest "^25.5.1" - chalk "^3.0.0" + yargs "^17.3.1" + +jest-config@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-28.1.3.tgz#e315e1f73df3cac31447eed8b8740a477392ec60" + integrity sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^28.1.3" + "@jest/types" "^28.1.3" + babel-jest "^28.1.3" + chalk "^4.0.0" + ci-info "^3.2.0" deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^25.5.0" - jest-environment-node "^25.5.0" - jest-get-type "^25.2.6" - jest-jasmine2 "^25.5.4" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - micromatch "^4.0.2" - pretty-format "^25.5.0" - realpath-native "^2.0.0" - -jest-diff@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" - integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== - dependencies: - chalk "^2.0.1" - diff-sequences "^24.9.0" - jest-get-type "^24.9.0" - pretty-format "^24.9.0" - -jest-diff@^25.2.1, jest-diff@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" - integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== - dependencies: - chalk "^3.0.0" - diff-sequences "^25.2.6" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - -jest-docblock@^25.3.0: - version "25.3.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.3.0.tgz#8b777a27e3477cd77a168c05290c471a575623ef" - integrity sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg== + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^28.1.3" + jest-environment-node "^28.1.3" + jest-get-type "^28.0.2" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-runner "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^28.1.3" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^28.0.0, jest-diff@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.3.tgz#948a192d86f4e7a64c5264ad4da4877133d8792f" + integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== + dependencies: + chalk "^4.0.0" + diff-sequences "^28.1.1" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-docblock@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-28.1.1.tgz#6f515c3bf841516d82ecd57a62eed9204c2f42a8" + integrity sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA== dependencies: detect-newline "^3.0.0" -jest-each@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-25.5.0.tgz#0c3c2797e8225cb7bec7e4d249dcd96b934be516" - integrity sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA== - dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - jest-get-type "^25.2.6" - jest-util "^25.5.0" - pretty-format "^25.5.0" - -jest-environment-jsdom@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz#dcbe4da2ea997707997040ecf6e2560aec4e9834" - integrity sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - jsdom "^15.2.1" - -jest-environment-node@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-25.5.0.tgz#0f55270d94804902988e64adca37c6ce0f7d07a1" - integrity sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - semver "^6.3.0" +jest-each@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-28.1.3.tgz#bdd1516edbe2b1f3569cfdad9acd543040028f81" + integrity sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g== + dependencies: + "@jest/types" "^28.1.3" + chalk "^4.0.0" + jest-get-type "^28.0.2" + jest-util "^28.1.3" + pretty-format "^28.1.3" + +jest-environment-jsdom@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-28.1.3.tgz#2d4e5d61b7f1d94c3bddfbb21f0308ee506c09fb" + integrity sha512-HnlGUmZRdxfCByd3GM2F100DgQOajUBzEitjGqIREcb45kGjZvRrKUdlaF6escXBdcXNl0OBh+1ZrfeZT3GnAg== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/jsdom" "^16.2.4" + "@types/node" "*" + jest-mock "^28.1.3" + jest-util "^28.1.3" + jsdom "^19.0.0" + +jest-environment-node@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-28.1.3.tgz#7e74fe40eb645b9d56c0c4b70ca4357faa349be5" + integrity sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + jest-mock "^28.1.3" + jest-util "^28.1.3" + +jest-extended@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jest-extended/-/jest-extended-3.0.2.tgz#f74ae82bdf280536552752b502f57f71e7d2fcf1" + integrity sha512-LnVZvwWLRV9AL8J7f4frKu0KHuTrbIFK15IqrvSwbFCYxalkuC5l7HfcofsksePrvlEJ2WAcfYNnu1+bEGvInA== + dependencies: + jest-diff "^28.0.0" + jest-get-type "^28.0.0" + +jest-get-type@^28.0.0, jest-get-type@^28.0.2: + version "28.0.2" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" + integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== -jest-extended@^0.11.5: - version "0.11.5" - resolved "https://registry.yarnpkg.com/jest-extended/-/jest-extended-0.11.5.tgz#f063b3f1eaadad8d7c13a01f0dfe0f538d498ccf" - integrity sha512-3RsdFpLWKScpsLD6hJuyr/tV5iFOrw7v6YjA3tPdda9sJwoHwcMROws5gwiIZfcwhHlJRwFJB2OUvGmF3evV/Q== - dependencies: - expect "^24.1.0" - jest-get-type "^22.4.3" - jest-matcher-utils "^22.0.0" - -jest-get-type@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" - integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w== - -jest-get-type@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" - integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== - -jest-get-type@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" - integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== - -jest-haste-map@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.5.1.tgz#1df10f716c1d94e60a1ebf7798c9fb3da2620943" - integrity sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ== - dependencies: - "@jest/types" "^25.5.0" - "@types/graceful-fs" "^4.1.2" +jest-haste-map@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.1.3.tgz#abd5451129a38d9841049644f34b034308944e2b" + integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== + dependencies: + "@jest/types" "^28.1.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-serializer "^25.5.0" - jest-util "^25.5.0" - jest-worker "^25.5.0" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - which "^2.0.2" + graceful-fs "^4.2.9" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + jest-worker "^28.1.3" + micromatch "^4.0.4" + walker "^1.0.8" optionalDependencies: - fsevents "^2.1.2" - -jest-jasmine2@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz#66ca8b328fb1a3c5364816f8958f6970a8526968" - integrity sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^25.5.0" - "@jest/source-map" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - co "^4.6.0" - expect "^25.5.0" - is-generator-fn "^2.0.0" - jest-each "^25.5.0" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-runtime "^25.5.4" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - pretty-format "^25.5.0" - throat "^5.0.0" - -jest-leak-detector@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz#2291c6294b0ce404241bb56fe60e2d0c3e34f0bb" - integrity sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA== - dependencies: - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - -jest-matcher-utils@^22.0.0: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff" - integrity sha512-lsEHVaTnKzdAPR5t4B6OcxXo9Vy4K+kRRbG5gtddY8lBEC+Mlpvm1CJcsMESRjzUhzkz568exMV1hTB76nAKbA== - dependencies: - chalk "^2.0.1" - jest-get-type "^22.4.3" - pretty-format "^22.4.3" - -jest-matcher-utils@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" - integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA== - dependencies: - chalk "^2.0.1" - jest-diff "^24.9.0" - jest-get-type "^24.9.0" - pretty-format "^24.9.0" - -jest-matcher-utils@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867" - integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw== - dependencies: - chalk "^3.0.0" - jest-diff "^25.5.0" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - -jest-message-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" - integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/stack-utils" "^1.0.1" - chalk "^2.0.1" - micromatch "^3.1.10" - slash "^2.0.0" - stack-utils "^1.0.1" - -jest-message-util@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.5.0.tgz#ea11d93204cc7ae97456e1d8716251185b8880ea" - integrity sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^25.5.0" - "@types/stack-utils" "^1.0.1" - chalk "^3.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" + fsevents "^2.3.2" + +jest-leak-detector@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz#a6685d9b074be99e3adee816ce84fd30795e654d" + integrity sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA== + dependencies: + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-matcher-utils@^28.0.0, jest-matcher-utils@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz#5a77f1c129dd5ba3b4d7fc20728806c78893146e" + integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== + dependencies: + chalk "^4.0.0" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-message-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" + integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^28.1.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^28.1.3" slash "^3.0.0" - stack-utils "^1.0.1" + stack-utils "^2.0.3" -jest-mock@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.5.0.tgz#a91a54dabd14e37ecd61665d6b6e06360a55387a" - integrity sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA== +jest-mock@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-28.1.3.tgz#d4e9b1fc838bea595c77ab73672ebf513ab249da" + integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA== dependencies: - "@jest/types" "^25.5.0" + "@jest/types" "^28.1.3" + "@types/node" "*" -jest-pnp-resolver@^1.2.1: +jest-pnp-resolver@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== -jest-regex-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" - integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA== - -jest-regex-util@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964" - integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw== - -jest-resolve-dependencies@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz#85501f53957c8e3be446e863a74777b5a17397a7" - integrity sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw== - dependencies: - "@jest/types" "^25.5.0" - jest-regex-util "^25.2.6" - jest-snapshot "^25.5.1" - -jest-resolve@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.5.1.tgz#0e6fbcfa7c26d2a5fe8f456088dc332a79266829" - integrity sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ== - dependencies: - "@jest/types" "^25.5.0" - browser-resolve "^1.11.3" - chalk "^3.0.0" - graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.1" - read-pkg-up "^7.0.1" - realpath-native "^2.0.0" - resolve "^1.17.0" +jest-regex-util@^28.0.2: + version "28.0.2" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" + integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== + +jest-resolve-dependencies@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz#8c65d7583460df7275c6ea2791901fa975c1fe66" + integrity sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA== + dependencies: + jest-regex-util "^28.0.2" + jest-snapshot "^28.1.3" + +jest-resolve@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-28.1.3.tgz#cfb36100341ddbb061ec781426b3c31eb51aa0a8" + integrity sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-pnp-resolver "^1.2.2" + jest-util "^28.1.3" + jest-validate "^28.1.3" + resolve "^1.20.0" + resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.5.4.tgz#ffec5df3875da5f5c878ae6d0a17b8e4ecd7c71d" - integrity sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg== +jest-runner@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-28.1.3.tgz#5eee25febd730b4713a2cdfd76bdd5557840f9a1" + integrity sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA== dependencies: - "@jest/console" "^25.5.0" - "@jest/environment" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^25.5.4" - jest-docblock "^25.3.0" - jest-haste-map "^25.5.1" - jest-jasmine2 "^25.5.4" - jest-leak-detector "^25.5.0" - jest-message-util "^25.5.0" - jest-resolve "^25.5.1" - jest-runtime "^25.5.4" - jest-util "^25.5.0" - jest-worker "^25.5.0" - source-map-support "^0.5.6" - throat "^5.0.0" - -jest-runtime@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.5.4.tgz#dc981fe2cb2137abcd319e74ccae7f7eeffbfaab" - integrity sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ== - dependencies: - "@jest/console" "^25.5.0" - "@jest/environment" "^25.5.0" - "@jest/globals" "^25.5.2" - "@jest/source-map" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" + "@jest/console" "^28.1.3" + "@jest/environment" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.10.2" + graceful-fs "^4.2.9" + jest-docblock "^28.1.1" + jest-environment-node "^28.1.3" + jest-haste-map "^28.1.3" + jest-leak-detector "^28.1.3" + jest-message-util "^28.1.3" + jest-resolve "^28.1.3" + jest-runtime "^28.1.3" + jest-util "^28.1.3" + jest-watcher "^28.1.3" + jest-worker "^28.1.3" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-28.1.3.tgz#a57643458235aa53e8ec7821949e728960d0605f" + integrity sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/globals" "^28.1.3" + "@jest/source-map" "^28.1.2" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - exit "^0.1.2" + execa "^5.0.0" glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^25.5.4" - jest-haste-map "^25.5.1" - jest-message-util "^25.5.0" - jest-mock "^25.5.0" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - realpath-native "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" slash "^3.0.0" strip-bom "^4.0.0" - yargs "^15.3.1" - -jest-serializer@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.5.0.tgz#a993f484e769b4ed54e70e0efdb74007f503072b" - integrity sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA== - dependencies: - graceful-fs "^4.2.4" -jest-snapshot@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.5.1.tgz#1a2a576491f9961eb8d00c2e5fd479bc28e5ff7f" - integrity sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ== +jest-snapshot@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-28.1.3.tgz#17467b3ab8ddb81e2f605db05583d69388fc0668" + integrity sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg== dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^25.5.0" - "@types/prettier" "^1.19.0" - chalk "^3.0.0" - expect "^25.5.0" - graceful-fs "^4.2.4" - jest-diff "^25.5.0" - jest-get-type "^25.2.6" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-resolve "^25.5.1" - make-dir "^3.0.0" + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/babel__traverse" "^7.0.6" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^28.1.3" + graceful-fs "^4.2.9" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + jest-haste-map "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" natural-compare "^1.4.0" - pretty-format "^25.5.0" - semver "^6.3.0" + pretty-format "^28.1.3" + semver "^7.3.5" -jest-util@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.5.0.tgz#31c63b5d6e901274d264a4fec849230aa3fa35b0" - integrity sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA== +jest-util@^28.0.0, jest-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" + integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - make-dir "^3.0.0" - -jest-validate@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.5.0.tgz#fb4c93f332c2e4cf70151a628e58a35e459a413a" - integrity sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ== - dependencies: - "@jest/types" "^25.5.0" - camelcase "^5.3.1" - chalk "^3.0.0" - jest-get-type "^25.2.6" + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-28.1.3.tgz#e322267fd5e7c64cea4629612c357bbda96229df" + integrity sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA== + dependencies: + "@jest/types" "^28.1.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^28.0.2" leven "^3.1.0" - pretty-format "^25.5.0" + pretty-format "^28.1.3" -jest-watcher@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.5.0.tgz#d6110d101df98badebe435003956fd4a465e8456" - integrity sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q== +jest-watcher@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4" + integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== dependencies: - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" ansi-escapes "^4.2.1" - chalk "^3.0.0" - jest-util "^25.5.0" - string-length "^3.1.0" + chalk "^4.0.0" + emittery "^0.10.2" + jest-util "^28.1.3" + string-length "^4.0.1" -jest-worker@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" - integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: + "@types/node" "*" merge-stream "^2.0.0" - supports-color "^7.0.0" + supports-color "^8.0.0" -jest-worker@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.2.tgz#4ebeb56cef48b3e7514552f80d0d80c0129f0b05" - integrity sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg== +jest-worker@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" + integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^25.2.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db" - integrity sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ== +jest@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-28.1.3.tgz#e9c6a7eecdebe3548ca2b18894a50f45b36dfc6b" + integrity sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA== dependencies: - "@jest/core" "^25.5.4" + "@jest/core" "^28.1.3" + "@jest/types" "^28.1.3" import-local "^3.0.2" - jest-cli "^25.5.4" + jest-cli "^28.1.3" "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== +js-yaml@4.1.0, js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: - argparse "^1.0.7" - esprima "^4.0.0" + argparse "^2.0.1" js-yaml@^3.13.1: version "3.14.1" @@ -4461,54 +4082,45 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsdom@^15.2.1: - version "15.2.1" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5" - integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g== - dependencies: - abab "^2.0.0" - acorn "^7.1.0" - acorn-globals "^4.3.2" - array-equal "^1.0.0" - cssom "^0.4.1" - cssstyle "^2.0.0" - data-urls "^1.1.0" - domexception "^1.0.1" - escodegen "^1.11.1" - html-encoding-sniffer "^1.0.2" +jsdom@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-19.0.0.tgz#93e67c149fe26816d38a849ea30ac93677e16b6a" + 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 "5.1.0" - pn "^1.1.0" - request "^2.88.0" - request-promise-native "^1.0.7" - saxes "^3.1.9" - symbol-tree "^3.2.2" - tough-cookie "^3.0.1" - w3c-hr-time "^1.0.1" - w3c-xmlserializer "^1.1.2" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^7.0.0" - ws "^7.0.0" - xml-name-validator "^3.0.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" jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0: +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -4518,39 +4130,29 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json3@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" - integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json5@2.x, json5@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" - integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== - dependencies: - minimist "^1.2.5" +json5@^2.1.2, json5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: - minimist "^1.2.0" + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" jsonwebtoken@^8.5.1: version "8.5.1" @@ -4568,23 +4170,23 @@ jsonwebtoken@^8.5.1: ms "^2.1.1" semver "^5.6.0" -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= +"jsx-ast-utils@^2.4.1 || ^3.0.0": + version "3.3.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" + integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" + array-includes "^3.1.5" + object.assign "^4.1.3" -"jsx-ast-utils@^2.4.1 || ^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz#642f1d7b88aa6d7eb9d8f2210e166478444fa891" - integrity sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA== +jszip@^3.10.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== dependencies: - array-includes "^3.1.1" - object.assign "^4.1.1" + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + setimmediate "^1.0.5" jwa@^1.4.1: version "1.4.1" @@ -4604,35 +4206,11 @@ jws@^3.2.2: safe-buffer "^5.0.1" keycode@^2.1.8: - version "2.2.0" - resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.0.tgz#3d0af56dc7b8b8e5cba8d0a97f107204eec22b04" - integrity sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ= - -killable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + version "2.2.1" + resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.1.tgz#09c23b2be0611d26117ea2501c2c391a01f39eff" + integrity sha512-Rdgz9Hl9Iv4QKi8b0OlCRQEzp4AgVxyCtz5S/+VIHezDmrDhkp2N2TqBWOLz0/gbeREXOOiI9/4b8BY9uw2vFg== -kind-of@^6.0.0, kind-of@^6.0.2: +kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -4647,50 +4225,48 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -levn@^0.3.0, levn@~0.3.0: +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== loader-runner@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" - integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== - -loader-utils@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== loader-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" - integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + version "2.0.2" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" + integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" json5 "^2.1.2" -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -4698,20 +4274,27 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash._arraycopy@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" - integrity sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE= + integrity sha512-RHShTDnPKP7aWxlvXKiDT6IX2jCs6YZLCtNhOru/OX2Q/tzX295vVBK5oX1ECtN+2r86S0Ogy8ykP1sgCZAN0A== lodash._arrayeach@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" - integrity sha1-urFWsqkNPxu9XGU0AzSeXlkz754= + integrity sha512-Mn7HidOVcl3mkQtbPsuKR0Fj0N6Q6DQB77CtYncZcJc0bx5qv2q4Gl6a0LC1AN+GSxpnBDNnK3CKEm9XNA4zqQ== lodash._baseassign@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" - integrity sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4= + integrity sha512-t3N26QR2IdSN+gqSy9Ds9pBu/J1EAFEshKlUHpJG3rvyJOYgcELIxcIeKKfZk7sjOz11cFfzJRsyFry/JyabJQ== dependencies: lodash._basecopy "^3.0.0" lodash.keys "^3.0.0" @@ -4719,7 +4302,7 @@ lodash._baseassign@^3.0.0: lodash._baseclone@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7" - integrity sha1-MDUZv2OT/n5C802LYw73eU41Qrc= + integrity sha512-1K0dntf2dFQ5my0WoGKkduewR6+pTNaqX03kvs45y7G5bzl4B3kTR4hDfJIc2aCQDeLyQHhS280tc814m1QC1Q== dependencies: lodash._arraycopy "^3.0.0" lodash._arrayeach "^3.0.0" @@ -4731,86 +4314,91 @@ lodash._baseclone@^3.0.0: lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - integrity sha1-jaDmqHbPNEwK2KVIghEd08XHyjY= + integrity sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ== lodash._basefor@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" - integrity sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI= + integrity sha512-6bc3b8grkpMgDcVJv9JYZAk/mHgcqMljzm7OsbmcE2FGUMmmLQTPHlh/dFqR8LA0GQ7z4K67JSotVKu5058v1A== lodash._bindcallback@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= + integrity sha512-2wlI0JRAGX8WEf4Gm1p/mv/SZ+jLijpj0jyaE/AXeuQphzCgD8ZQW4oSpoN8JAopujOFGU3KMuq7qfHBWlGpjQ== lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= + integrity sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA== lodash._isiterateecall@^3.0.0: version "3.0.9" resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw= + integrity sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ== lodash.clone@3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-3.0.3.tgz#84688c73d32b5a90ca25616963f189252a997043" - integrity sha1-hGiMc9MrWpDKJWFpY/GJJSqZcEM= + integrity sha512-yVYPpFTdZDCLG2p07gVRTvcwN5X04oj2hu4gG6r0fer58JA08wAVxXzWM+CmmxO2bzOH8u8BkZTZqgX6juVF7A== dependencies: lodash._baseclone "^3.0.0" lodash._bindcallback "^3.0.0" lodash._isiterateecall "^3.0.0" -lodash.defaultsdeep@^4.6.1: +lodash.defaultsdeep@4.6.1: version "4.6.1" resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== +lodash.escape@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" + integrity sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw== + lodash.includes@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" - integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= + integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= + integrity sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ== lodash.isboolean@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" - integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== lodash.isinteger@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" - integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== lodash.isnumber@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" - integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== lodash.isplainobject@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== lodash.isstring@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo= + integrity sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ== dependencies: lodash._getnative "^3.0.0" lodash.isarguments "^3.0.0" @@ -4819,9 +4407,9 @@ lodash.keys@^3.0.0: lodash.memoize@4.x: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== -lodash.merge@^4.6.0, lodash.merge@^4.6.2: +lodash.merge@4.6.2, lodash.merge@^4.6.0, lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== @@ -4829,61 +4417,25 @@ lodash.merge@^4.6.0, lodash.merge@^4.6.2: lodash.once@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" - integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== lodash.throttle@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" - integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= - -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.5: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@2.2.0, log-symbols@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - -log-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== - dependencies: - chalk "^2.4.2" + integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== -loglevel@^1.6.8: - version "1.7.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" - integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== - -loglevelnext@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.5.tgz#36fc4f5996d6640f539ff203ba819641680d75a2" - integrity sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A== - dependencies: - es6-symbol "^3.1.1" - object.assign "^4.1.0" - -lolex@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" - integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== +log-symbols@4.1.0, log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: - "@sinonjs/commons" "^1.7.0" + chalk "^4.1.0" + is-unicode-supported "^0.1.0" -long@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" - integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== +long@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.0.tgz#2696dadf4b4da2ce3f6f6b89186085d94d52fd61" + integrity sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w== loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" @@ -4892,12 +4444,12 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4 dependencies: js-tokens "^3.0.0 || ^4.0.0" -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== +loupe@2.3.4: + version "2.3.4" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" + integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== dependencies: - yallist "^3.0.2" + get-func-name "^2.0.0" lru-cache@^6.0.0: version "6.0.0" @@ -4918,24 +4470,12 @@ make-error@1.x: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= - dependencies: - tmpl "1.0.x" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: - object-visit "^1.0.0" + tmpl "1.0.5" material-ui@^0.20.2: version "0.20.2" @@ -4957,100 +4497,60 @@ material-ui@^0.20.2: media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== +memfs@^3.4.3: + version "3.4.7" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.7.tgz#e5252ad2242a724f938cb937e3c4f7ceb1f70e5a" + integrity sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw== dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" + fs-monkey "^1.0.3" merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -micromatch@4.x, micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== - dependencies: - braces "^3.0.1" - picomatch "^2.0.5" - -micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.9: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== - -mime-db@1.48.0, "mime-db@>= 1.43.0 < 2": - version "1.48.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" - integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== +micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: - mime-db "1.44.0" + braces "^3.0.2" + picomatch "^2.3.1" -mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24: - version "2.1.31" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" - integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: - mime-db "1.48.0" + mime-db "1.52.0" mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.4.4: - version "2.5.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -5061,196 +4561,148 @@ minimalistic-assert@^1.0.0: resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimatch@3.0.4, minimatch@^3.0.4: +minimatch@3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== +minimatch@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" + integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" + brace-expansion "^1.1.7" -mkdirp@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" - integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: - minimist "^1.2.5" + brace-expansion "^1.1.7" -mkdirp@0.x, mkdirp@^0.5.1, mkdirp@^0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== +minimatch@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== dependencies: - minimist "^1.2.5" + brace-expansion "^2.0.1" + +minimist@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== mkpath@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/mkpath/-/mkpath-1.0.0.tgz#ebb3a977e7af1c683ae6fda12b545a6ba6c5853d" - integrity sha1-67Opd+evHGg65v2hK1Raa6bFhT0= + integrity sha512-PbNHr7Y/9Y/2P5pKFv5XOGBfNQqZ+fdiHWcuf7swLACN5ZW5LU7J5tMU8LSBjpluAxAxKYGD9nnaIbdRy9+m1w== -mocha@6.2.3: - version "6.2.3" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.3.tgz#e648432181d8b99393410212664450a4c1e31912" - integrity sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg== +mocha@9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" + integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== dependencies: - ansi-colors "3.2.3" + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" browser-stdout "1.3.1" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" + 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 "3.13.1" - log-symbols "2.2.0" - minimatch "3.0.4" - mkdirp "0.5.4" - ms "2.1.1" - node-environment-flags "1.0.5" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.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" ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: +ms@2.1.3, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== dependencies: - dns-packet "^1.3.1" + dns-packet "^5.2.2" thunky "^1.0.2" -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nan@^2.12.1: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" +nanoid@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" + integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -netmask@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" - integrity sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU= - -next-tick@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -nightwatch@^1.0.19: - version "1.5.1" - resolved "https://registry.yarnpkg.com/nightwatch/-/nightwatch-1.5.1.tgz#100cee1d6545bc4367888514822d03e891d75655" - integrity sha512-tFhzV7JyLjI+Rq7xXLaRUQ/hExP87GlMYiAlhAYaODpyQSIl8O7/yf7gAUYQd3H7m3n+tnwFFsuE0GaxvCdoZA== - dependencies: - assertion-error "^1.1.0" - chai-nightwatch "^0.4.0" - ci-info "^2.0.0" - dotenv "7.0.0" - ejs "^2.7.4" - envinfo "^7.5.1" +nightwatch@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/nightwatch/-/nightwatch-2.3.0.tgz#3f883b7ef0a34e98754028783d82c3641869a608" + integrity sha512-JouglJuxReLoCWfwud6U6mKTqTlEapJZYEvFzsBZ8CDJ77jzaiBLkgbpSJ6nt51kHJRH+xZtdTTiKFNjX0vS8w== + dependencies: + "@nightwatch/chai" "5.0.2" + ansi-to-html "^0.7.2" + assertion-error "1.1.0" + boxen "5.1.2" + chai-nightwatch "0.5.3" + ci-info "3.3.0" + didyoumean "1.2.2" + dotenv "10.0.0" + ejs "^3.1.8" + envinfo "7.8.1" + fs-extra "^10.1.0" + glob "^7.2.3" lodash.clone "3.0.3" - lodash.defaultsdeep "^4.6.1" - lodash.merge "^4.6.2" + lodash.defaultsdeep "4.6.1" + lodash.escape "^4.0.1" + lodash.merge "4.6.2" minimatch "3.0.4" - minimist "^1.2.5" + minimist "1.2.6" mkpath "1.0.0" - mocha "6.2.3" - ora "^4.0.3" - proxy-agent "^3.1.1" - request "^2.88.2" - request-promise "^4.2.5" - semver "^6.3.0" - strip-ansi "^6.0.0" - -node-environment-flags@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" - integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ== - dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" + mocha "9.2.2" + open "^8.4.0" + ora "5.4.1" + selenium-webdriver "^4.3.1" + semver "7.3.5" + stacktrace-parser "^0.1.10" + strip-ansi "6.0.1" node-fetch@^1.0.1: version "1.7.3" @@ -5260,72 +4712,32 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" -node-forge@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-notifier@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12" - integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw== - dependencies: - growly "^1.3.0" - is-wsl "^2.1.1" - semver "^6.3.0" - shellwords "^0.1.1" - which "^1.3.1" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^1.1.71: - version "1.1.72" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" - integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== node-uuid@~1.4.0: version "1.4.8" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" - integrity sha1-sEDrCSOWivq/jTL7HxfxFn/auQc= - -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" + integrity sha512-TkCET/3rr9mUuRp+CpO7qfgT++aAxfDRaalQhwPFzI9BY/2rCDn6OfpZOVggi1AXfTPpfkTrg5f5WQx5G1uLxA== -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.0, npm-run-path@^4.0.1: +npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -5333,129 +4745,79 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: path-key "^3.0.0" nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + version "2.2.1" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.1.tgz#10a9f268fbf4c461249ebcfe38e359aa36e2577c" + integrity sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg== -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.10.3, object-inspect@^1.8.0: - version "1.10.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" - integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== - -object-is@^1.0.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" +object-inspect@^1.12.0, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: +object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.assign@^4.1.0, object.assign@^4.1.1, object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== +object.assign@^4.1.2, object.assign@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.3.tgz#d36b7700ddf0019abb6b1df1bb13f6445f79051f" + integrity sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" - integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - has "^1.0.3" - -object.fromentries@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.3.tgz#13cefcffa702dc67750314a3305e8cb3fad1d072" - integrity sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw== +object.entries@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" + integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - has "^1.0.3" + es-abstract "^1.19.1" -object.getownpropertydescriptors@^2.0.3: - version "2.1.1" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz#0dfda8d108074d9c563e80490c883b6661091544" - integrity sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng== +object.fromentries@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" + integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" + es-abstract "^1.19.1" -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= +object.hasown@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3" + integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A== dependencies: - isobject "^3.0.1" + define-properties "^1.1.4" + es-abstract "^1.19.5" -object.values@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731" - integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== +object.values@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - has "^1.0.3" + es-abstract "^1.19.1" obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" @@ -5467,7 +4829,7 @@ on-headers@~1.0.2: once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" @@ -5478,14 +4840,16 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -opn@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== +open@^8.0.9, open@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== dependencies: - is-wsl "^1.1.0" + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" -optionator@^0.8.1, optionator@^0.8.3: +optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -5497,68 +4861,47 @@ optionator@^0.8.1, optionator@^0.8.3: type-check "~0.3.2" word-wrap "~1.2.3" -ora@^4.0.3: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-4.1.1.tgz#566cc0348a15c36f5f0e979612842e02ba9dddbc" - integrity sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A== +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + 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" + +ora@5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== dependencies: - chalk "^3.0.0" + bl "^4.1.0" + chalk "^4.1.0" cli-cursor "^3.1.0" - cli-spinners "^2.2.0" + cli-spinners "^2.5.0" is-interactive "^1.0.0" - log-symbols "^3.0.0" - mute-stream "0.0.8" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" strip-ansi "^6.0.0" wcwidth "^1.0.1" -original@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== - dependencies: - url-parse "^1.4.3" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-each-series@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" - integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-finally@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" - integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== - -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" -p-limit@^3.1.0: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -5566,47 +4909,37 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" -p-retry@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" - integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== dependencies: - retry "^0.12.0" + "@types/retry" "0.12.0" + retry "^0.13.1" p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pac-proxy-agent@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz#115b1e58f92576cac2eba718593ca7b0e37de2ad" - integrity sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ== - dependencies: - agent-base "^4.2.0" - debug "^4.1.1" - get-uri "^2.0.0" - http-proxy-agent "^2.1.0" - https-proxy-agent "^3.0.0" - pac-resolver "^3.0.0" - raw-body "^2.2.0" - socks-proxy-agent "^4.0.1" - -pac-resolver@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26" - integrity sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA== - dependencies: - co "^4.6.0" - degenerator "^1.0.4" - ip "^1.1.5" - netmask "^1.0.6" - thunkify "^2.1.2" +pako@~1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== parent-module@^1.0.0: version "1.0.1" @@ -5615,41 +4948,26 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-json@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" - integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" error-ex "^1.3.1" json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" - integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -5658,24 +4976,14 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -5683,58 +4991,37 @@ path-parse@^1.0.6: path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -picomatch@^2.0.4: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - -picomatch@^2.0.5: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== +pathval@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -pirates@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== pkg-dir@^4.2.0: version "4.2.0" @@ -5743,68 +5030,31 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== - -portfinder@^1.0.26: - version "1.0.28" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" - integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== - dependencies: - async "^2.6.2" - debug "^3.1.1" - mkdirp "^0.5.5" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -pretty-format@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f" - integrity sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ== - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== -pretty-format@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" - integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== +pretty-format@^28.0.0, pretty-format@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" + integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== dependencies: - "@jest/types" "^24.9.0" - ansi-regex "^4.0.0" - ansi-styles "^3.2.0" - react-is "^16.8.4" - -pretty-format@^25.2.1, pretty-format@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" - integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== - dependencies: - "@jest/types" "^25.5.0" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^16.12.0" + "@jest/schemas" "^28.1.3" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^18.0.0" process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -5813,26 +5063,26 @@ promise@^7.1.1: asap "~2.0.3" prompts@^2.0.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" - integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== +prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.6.0, prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" object-assign "^4.1.1" - react-is "^16.8.1" + react-is "^16.13.1" -protobufjs@^6.11.3: - version "6.11.3" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.3.tgz#637a527205a35caa4f3e2a9a4a13ddffe0e7af74" - integrity sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg== +protobufjs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.0.0.tgz#8c678e1351fd926178fce5a4213913e8d990974f" + integrity sha512-ffNIEm+quOcYtQvHdW406v1NQmZSuqVklxsXk076BtuFnlYZfigLU+JOMrTD8TUOyqHYbRI/fSVNvgd25YeN3w== dependencies: "@protobufjs/aspromise" "^1.1.2" "@protobufjs/base64" "^1.1.2" @@ -5846,44 +5096,25 @@ protobufjs@^6.11.3: "@protobufjs/utf8" "^1.1.0" "@types/long" "^4.0.1" "@types/node" ">=13.7.0" - long "^4.0.0" + long "^5.0.0" -proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: - forwarded "~0.1.2" + forwarded "0.2.0" ipaddr.js "1.9.1" -proxy-agent@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.1.1.tgz#7e04e06bf36afa624a1540be247b47c970bd3014" - integrity sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw== - dependencies: - agent-base "^4.2.0" - debug "4" - http-proxy-agent "^2.1.0" - https-proxy-agent "^3.0.0" - lru-cache "^5.1.1" - pac-proxy-agent "^3.0.1" - proxy-from-env "^1.0.0" - socks-proxy-agent "^4.0.1" - -proxy-from-env@^1.0.0: +proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== +psl@^1.1.33: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== pump@^3.0.0: version "3.0.0" @@ -5893,35 +5124,22 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +qs@6.10.3: + version "6.10.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" + integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== + dependencies: + side-channel "^1.0.4" -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== randombytes@^2.1.0: version "2.1.0" @@ -5935,35 +5153,23 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-body@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" - integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== dependencies: - bytes "3.1.0" - http-errors "1.7.3" + bytes "3.1.2" + http-errors "2.0.0" iconv-lite "0.4.24" unpipe "1.0.0" -react-dom@^16.8.6: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" - integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.19.1" + scheduler "^0.23.0" react-event-listener@^0.6.2: version "0.6.6" @@ -5974,11 +5180,16 @@ react-event-listener@^0.6.2: prop-types "^15.6.0" warning "^4.0.1" -react-is@^16.12.0, react-is@^16.8.1, react-is@^16.8.4: +react-is@^16.13.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + react-transition-group@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-1.2.1.tgz#e11f72b257f921b213229a774df46612346c7ca6" @@ -5990,45 +5201,14 @@ react-transition-group@^1.2.1: prop-types "^15.5.6" warning "^3.0.0" -react@^16.8.6: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" - integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" -readable-stream@1.1.x: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@2, readable-stream@^2.0.1, readable-stream@^2.0.2: +readable-stream@^2.0.1, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -6041,7 +5221,7 @@ readable-stream@2, readable-stream@^2.0.1, readable-stream@^2.0.2: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6: +readable-stream@^3.0.6, readable-stream@^3.4.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -6050,31 +5230,24 @@ readable-stream@^3.0.6: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -realpath-native@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866" - integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q== + picomatch "^2.2.1" rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== dependencies: resolve "^1.1.6" rechoir@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca" - integrity sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q== + version "0.7.1" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" + integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== dependencies: resolve "^1.9.0" @@ -6094,132 +5267,38 @@ regenerator-runtime@^0.11.0: integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== regenerator-runtime@^0.13.4: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" - integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== +regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" + functions-have-names "^1.2.2" -regexp.prototype.flags@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" - integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -regexpp@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" - integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request-promise@^4.2.5: - version "4.2.6" - resolved "https://registry.yarnpkg.com/request-promise/-/request-promise-4.2.6.tgz#7e7e5b9578630e6f598e3813c0f8eb342a27f0a2" - integrity sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ== - dependencies: - bluebird "^3.5.0" - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.88.0, request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - 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.3" - 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.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resolve-cwd@^3.0.0: version "3.0.0" @@ -6228,11 +5307,6 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -6243,31 +5317,28 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= +resolve.exports@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" + integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.17.0, resolve@^1.18.1: - version "1.19.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" - integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== +resolve@^1.1.6, resolve@^1.20.0, resolve@^1.9.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: - is-core-module "^2.1.0" - path-parse "^1.0.6" + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.9.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== +resolve@^2.0.0-next.3: + version "2.0.0-next.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" restore-cursor@^3.1.0: version "3.1.0" @@ -6277,183 +5348,153 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== -rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.0: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -rxjs@^6.6.0: - version "6.6.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" - integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: - tslib "^1.9.0" + queue-microtask "^1.2.2" safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -saxes@^3.1.9: - version "3.1.11" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" - integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== dependencies: - xmlchars "^2.1.1" + xmlchars "^2.2.0" -scheduler@^0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" - integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" -schema-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" - integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== +schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== dependencies: - "@types/json-schema" "^7.0.6" + "@types/json-schema" "^7.0.8" ajv "^6.12.5" ajv-keywords "^3.5.2" +schema-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" + integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.8.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.0.0" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== -selfsigned@^1.10.8: - version "1.10.11" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.11.tgz#24929cd906fe0f44b6d01fb23999a739537acbe9" - integrity sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA== +selenium-webdriver@^4.3.1: + version "4.4.0" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.4.0.tgz#3f280504f6c0ac64a24b176304213b5a49ec2553" + integrity sha512-Du+/xfpvNi9zHAeYgXhOWN9yH0hph+cuX+hHDBr7d+SbtQVcfNJwBzLsbdHrB1Wh7MHXFuIkSG88A9TRRQUx3g== dependencies: - node-forge "^0.10.0" + jszip "^3.10.0" + tmp "^0.2.1" + ws ">=8.7.0" -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: +selfsigned@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.0.1.tgz#8b2df7fa56bf014d19b6007655fff209c0ef0a56" + integrity sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ== + dependencies: + node-forge "^1" + +semver@7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +semver@7.x, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@6.x, semver@^6.0.0, semver@^6.1.2, semver@^6.3.0: +semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2: - version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== - dependencies: - lru-cache "^6.0.0" - -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" + depd "2.0.0" + destroy "1.2.0" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" - http-errors "~1.7.2" + http-errors "2.0.0" mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" + ms "2.1.3" + on-finished "2.4.1" range-parser "~1.2.1" - statuses "~1.5.0" + statuses "2.0.1" -serialize-javascript@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" - integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== +serialize-javascript@6.0.0, serialize-javascript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== dependencies: randombytes "^2.1.0" serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== dependencies: accepts "~1.3.4" batch "0.6.1" @@ -6463,45 +5504,30 @@ serve-index@^1.9.1: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.17.1" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" + send "0.18.0" setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== shallow-clone@^3.0.0: version "3.0.1" @@ -6510,13 +5536,6 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -6524,11 +5543,6 @@ shebang-command@^2.0.0: dependencies: shebang-regex "^3.0.0" -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" @@ -6543,28 +5557,24 @@ shelljs@^0.8.5: interpret "^1.0.0" rechoir "^0.6.2" -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - -side-channel@^1.0.2, side-channel@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.3.tgz#cdc46b057550bbab63706210838df5d4c19519c3" - integrity sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g== +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: - es-abstract "^1.18.0-next.0" - object-inspect "^1.8.0" + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== simple-assign@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/simple-assign/-/simple-assign-0.1.0.tgz#17fd3066a5f3d7738f50321bb0f14ca281cc4baa" - integrity sha1-F/0wZqXz13OPUDIbsPFMooHMS6o= + integrity sha512-otdSSQzuVsmDoe5MnSm4ZgHd5sl0ak6A1CTjW1R/DUHQ8xoZuU1NUzf9x6n9Dvp3nxpvW51WNMQ/7rQ9432xDg== sisteransi@^1.0.5: version "1.0.5" @@ -6576,114 +5586,29 @@ sjcl@1.0.8: resolved "https://registry.yarnpkg.com/sjcl/-/sjcl-1.0.8.tgz#f2ec8d7dc1f0f21b069b8914a41a8f236b0e252a" integrity sha512-LzIjEQ0S0DpIgnxMEayM1rq9aGwGRG4OnZhCdjx7glTaJtf4zRfpg87ImfjSJjoW9vKpagd82McDOwbRT5kQKQ== -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -smart-buffer@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" - integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sockjs-client@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.1.tgz#256908f6d5adfb94dabbdbd02c66362cca0f9ea6" - integrity sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ== - dependencies: - debug "^3.2.6" - eventsource "^1.0.7" - faye-websocket "^0.11.3" - inherits "^2.0.4" - json3 "^3.3.3" - url-parse "^1.5.1" - -sockjs@^0.3.21: - version "0.3.21" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" - integrity sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw== +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== dependencies: faye-websocket "^0.11.3" - uuid "^3.4.0" + uuid "^8.3.2" websocket-driver "^0.7.4" -socks-proxy-agent@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" - integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== - dependencies: - agent-base "~4.2.1" - socks "~2.3.2" - -socks@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" - integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: - ip "1.1.5" - smart-buffer "^4.1.0" - -source-list-map@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" + buffer-from "^1.0.0" + source-map "^0.6.0" -source-map-support@^0.5.3, source-map-support@^0.5.6, source-map-support@~0.5.20: +source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -6691,52 +5616,11 @@ source-map-support@^0.5.3, source-map-support@^0.5.6, source-map-support@~0.5.20 buffer-from "^1.0.0" source-map "^0.6.0" -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.0, source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.7" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" - integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== - spdy-transport@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" @@ -6760,120 +5644,83 @@ spdy@^4.0.2: select-hose "^2.0.0" spdy-transport "^3.0.0" -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - 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" - -stack-utils@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.4.tgz#4b600971dcfc6aed0cbdf2a8268177cc916c87c8" - integrity sha512-IPDJfugEGbfizBwBZRZ3xpccMdRyP5lqsBWXGQWimVjua/ccLCeMOAVjlc1R7LxFjo5sEDhyNIXd8mo/AiDS9w== + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stack-utils@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== dependencies: escape-string-regexp "^2.0.0" -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= +stacktrace-parser@^0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" + type-fest "^0.7.1" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: +"statuses@>= 1.4.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - -string-length@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837" - integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA== - dependencies: - astral-regex "^1.0.0" - strip-ansi "^5.2.0" - -"string-width@^1.0.2 || 2": - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" + char-regex "^1.0.2" + strip-ansi "^6.0.0" -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" -string.prototype.matchall@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.3.tgz#24243399bc31b0a49d19e2b74171a15653ec996a" - integrity sha512-OBxYDA2ifZQ2e13cP82dWFMaCV9CGF8GzmN4fljBVw5O5wep0lu4gacm1OL6MjROoUnB8VbkWRThqkV2YFLNxw== +string.prototype.matchall@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" + integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - has-symbols "^1.0.1" - internal-slot "^1.0.2" - regexp.prototype.flags "^1.3.0" - side-channel "^1.0.3" + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.4.1" + side-channel "^1.0.4" -string.prototype.trimend@^1.0.1, string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== +string.prototype.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" + define-properties "^1.1.4" + es-abstract "^1.19.5" -string.prototype.trimstart@^1.0.1, string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" + define-properties "^1.1.4" + es-abstract "^1.19.5" string_decoder@^1.1.1: version "1.3.0" @@ -6882,11 +5729,6 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -6894,65 +5736,34 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== +strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^5.0.0" + ansi-regex "^5.0.1" strip-bom@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -strip-json-comments@^3.0.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -supports-color@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" - integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== +supports-color@8.1.1, supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: - has-flag "^3.0.0" + has-flag "^4.0.0" supports-color@^5.3.0: version "5.5.0" @@ -6961,13 +5772,6 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -6975,50 +5779,41 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-hyperlinks@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" - integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + symbol-observable@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== -symbol-tree@^3.2.2: +symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -tapable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - tapable@^2.1.1, tapable@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" - integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +tcp-port-used@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/tcp-port-used/-/tcp-port-used-1.0.2.tgz#9652b7436eb1f4cfae111c79b558a25769f6faea" + integrity sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA== + dependencies: + debug "4.3.1" + is2 "^2.0.6" terminal-link@^2.0.0: version "2.1.1" @@ -7028,19 +5823,18 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser-webpack-plugin@^5.1.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz#30033e955ca28b55664f1e4b30a1347e61aa23af" - integrity sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A== +terser-webpack-plugin@^5.1.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz#8033db876dd5875487213e87c627bca323e5ed90" + integrity sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ== dependencies: - jest-worker "^27.0.2" - p-limit "^3.1.0" - schema-utils "^3.0.0" - serialize-javascript "^5.0.1" - source-map "^0.6.1" - terser "^5.7.0" + "@jridgewell/trace-mapping" "^0.3.7" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" + terser "^5.7.2" -terser@^5.7.0: +terser@^5.7.2: version "5.14.2" resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== @@ -7062,36 +5856,21 @@ test-exclude@^6.0.0: text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -thunkify@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" - integrity sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0= + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== +tmp@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== dependencies: - os-tmpdir "~1.0.2" + rimraf "^3.0.0" -tmpl@1.0.x: +tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== @@ -7099,22 +5878,7 @@ tmpl@1.0.x: to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" @@ -7123,144 +5887,98 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== dependencies: - psl "^1.1.28" + psl "^1.1.33" punycode "^2.1.1" + universalify "^0.1.2" -tough-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" - integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== +tr46@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" + integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== dependencies: - ip-regex "^2.1.0" - psl "^1.1.28" punycode "^2.1.1" -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= - dependencies: - punycode "^2.1.0" - -ts-jest@^25.3.0: - version "25.5.1" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-25.5.1.tgz#2913afd08f28385d54f2f4e828be4d261f4337c7" - integrity sha512-kHEUlZMK8fn8vkxDjwbHlxXRB9dHYpyzqKIGDNxbzs+Rz+ssNDSDNusEK8Fk/sDd4xE6iKoQLfFkFVaskmTJyw== +ts-jest@^28.0.0: + version "28.0.7" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-28.0.7.tgz#e18757a9e44693da9980a79127e5df5a98b37ac6" + integrity sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA== dependencies: bs-logger "0.x" - buffer-from "1.x" fast-json-stable-stringify "2.x" - json5 "2.x" + jest-util "^28.0.0" + json5 "^2.2.1" lodash.memoize "4.x" make-error "1.x" - micromatch "4.x" - mkdirp "0.x" - semver "6.x" - yargs-parser "18.x" + semver "7.x" + yargs-parser "^21.0.1" -tslib@^1.8.1, tslib@^1.9.0: +ts-loader@^9.3.1: + version "9.3.1" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.3.1.tgz#fe25cca56e3e71c1087fe48dc67f4df8c59b22d4" + integrity sha512-OkyShkcZTsTwyS3Kt7a4rsT/t2qvEVQuKCTg4LJmpj9fhFR7ukGdZwV6Qq3tRUkqcXtfGpPR7+hFKHCG/0d3Lw== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^5.0.0" + micromatch "^4.0.0" + semver "^7.3.4" + +tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" - integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== - -tslint-microsoft-contrib@^5.0.3: - version "5.2.1" - resolved "https://registry.yarnpkg.com/tslint-microsoft-contrib/-/tslint-microsoft-contrib-5.2.1.tgz#a6286839f800e2591d041ea2800c77487844ad81" - integrity sha512-PDYjvpo0gN9IfMULwKk0KpVOPMhU6cNoT9VwCOLeDl/QS8v8W2yspRpFFuUS7/c5EIH/n8ApMi8TxJAz1tfFUA== - dependencies: - tsutils "^2.27.2 <2.29.0" - -tslint-sonarts@^1.8.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/tslint-sonarts/-/tslint-sonarts-1.9.0.tgz#feb593e92db328c0328b430b838adbe65d504de9" - integrity sha512-CJWt+IiYI8qggb2O/JPkS6CkC5DY1IcqRsm9EHJ+AxoWK70lvtP7jguochyNDMP2vIz/giGdWCfEM39x/I/Vnw== - dependencies: - immutable "^3.8.2" - -"tsutils@^2.27.2 <2.29.0": - version "2.28.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.28.0.tgz#6bd71e160828f9d019b6f4e844742228f85169a1" - integrity sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA== - dependencies: - tslib "^1.8.1" - -tsutils@^3.17.1: - version "3.17.1" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" - integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + prelude-ls "^1.2.1" type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== dependencies: prelude-ls "~1.1.2" -type-detect@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" - integrity sha1-C6XsKohWQORw6k6FBZcZANrFiCI= - -type-detect@4.0.8: +type-detect@4.0.8, type-detect@^4.0.0: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" - integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== -type-is@~1.6.17, type-is@~1.6.18: +type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== @@ -7268,78 +5986,48 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== +typescript@4.7.4: + version "4.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== -type@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f" - integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA== +ua-parser-js@^0.7.30: + version "0.7.31" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" + integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ== -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typescript@3.8.3: - version "3.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" - integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== - -typestrict@^1.0.0: +unbox-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/typestrict/-/typestrict-1.0.2.tgz#7167559a128508162920614ce58af6ac6b5ba29a" - integrity sha512-4wEr84NPc0ldINrgwgSBTmbWPiGVbwO3c9xumM0ujp0DlzhTs3jUT0NtVBOd5UXneSXcStNJWj80zerbW2YR6Q== - dependencies: - tslint-microsoft-contrib "^5.0.3" - tslint-sonarts "^1.8.0" - -ua-parser-js@0.7.28, ua-parser-js@^0.7.18: - version "0.7.28" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.28.tgz#8ba04e653f35ce210239c64661685bf9121dec31" - integrity sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g== - -unbox-primitive@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" +universalify@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= +update-browserslist-db@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" + integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + escalade "^3.1.1" + picocolors "^1.0.0" uri-js@^4.2.2: version "4.4.1" @@ -7348,115 +6036,65 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-parse@^1.4.3, url-parse@^1.5.1: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^3.1.0, uuid@^3.3.2, uuid@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8-compile-cache@^2.0.3: - version "2.2.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" - integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== - -v8-compile-cache@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -v8-to-istanbul@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6" - integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ== +v8-to-istanbul@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" + integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== dependencies: + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" - source-map "^0.7.3" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -w3c-hr-time@^1.0.1: +w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== dependencies: browser-process-hrtime "^1.0.0" -w3c-xmlserializer@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" - integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== +w3c-xmlserializer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz#06cdc3eefb7e4d0b20a560a5a3aeb0d2d9a65923" + integrity sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg== dependencies: - domexception "^1.0.1" - webidl-conversions "^4.0.2" - xml-name-validator "^3.0.0" + xml-name-validator "^4.0.0" -walker@^1.0.7, walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: - makeerror "1.0.x" + makeerror "1.0.12" warning@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" - integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w= + integrity sha512-jMBt6pUrKn5I+OGgtQ4YZLdhIeJmObddh6CsibPxyQ5yPZm1XExSyzC1LCNX7BzhxWgiHmizBWJTHJIjMjTQYQ== dependencies: loose-envify "^1.0.0" @@ -7467,10 +6105,10 @@ warning@^4.0.1: dependencies: loose-envify "^1.0.0" -watchpack@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.2.0.tgz#47d78f5415fe550ecd740f99fe2882323a58b1ce" - integrity sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA== +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -7485,146 +6123,121 @@ wbuf@^1.1.0, wbuf@^1.7.3: wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== webpack-cli@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.7.0.tgz#3195a777f1f802ecda732f6c95d24c0004bc5a35" - integrity sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g== + version "4.10.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" + integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== dependencies: "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.0.3" - "@webpack-cli/info" "^1.2.4" - "@webpack-cli/serve" "^1.4.0" - colorette "^1.2.1" + "@webpack-cli/configtest" "^1.2.0" + "@webpack-cli/info" "^1.5.0" + "@webpack-cli/serve" "^1.7.0" + colorette "^2.0.14" commander "^7.0.0" - execa "^5.0.0" + cross-spawn "^7.0.3" fastest-levenshtein "^1.0.12" import-local "^3.0.2" interpret "^2.2.0" rechoir "^0.7.0" - v8-compile-cache "^2.2.0" webpack-merge "^5.7.3" -webpack-dev-middleware@^3.7.2: - version "3.7.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" - integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== +webpack-dev-middleware@^5.3.1: + version "5.3.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" + integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== dependencies: - memory-fs "^0.4.1" - mime "^2.4.4" - mkdirp "^0.5.1" + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" range-parser "^1.2.1" - webpack-log "^2.0.0" - -webpack-dev-server@^3.11.2: - version "3.11.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz#695ebced76a4929f0d5de7fd73fafe185fe33708" - integrity sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ== - dependencies: - ansi-html "0.0.7" - bonjour "^3.5.0" - chokidar "^2.1.8" + schema-utils "^4.0.0" + +webpack-dev-server@^4.10.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.10.0.tgz#de270d0009eba050546912be90116e7fd740a9ca" + integrity sha512-7dezwAs+k6yXVFZ+MaL8VnE+APobiO3zvpp3rBHe/HmWQ+avwh0Q3d0xxacOiBybZZ3syTZw9HXzpa3YNbAZDQ== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" compression "^1.7.4" - connect-history-api-fallback "^1.6.0" - debug "^4.1.1" - del "^4.1.1" - express "^4.17.1" - html-entities "^1.3.1" - http-proxy-middleware "0.19.1" - import-local "^2.0.0" - internal-ip "^4.3.0" - ip "^1.1.5" - is-absolute-url "^3.0.3" - killable "^1.0.1" - loglevel "^1.6.8" - opn "^5.5.0" - p-retry "^3.0.1" - portfinder "^1.0.26" - schema-utils "^1.0.0" - selfsigned "^1.10.8" - semver "^6.3.0" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.0.1" serve-index "^1.9.1" - sockjs "^0.3.21" - sockjs-client "^1.5.0" + sockjs "^0.3.24" spdy "^4.0.2" - strip-ansi "^3.0.1" - supports-color "^6.1.0" - url "^0.11.0" - webpack-dev-middleware "^3.7.2" - webpack-log "^2.0.0" - ws "^6.2.1" - yargs "^13.3.2" - -webpack-log@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-1.2.0.tgz#a4b34cda6b22b518dbb0ab32e567962d5c72a43d" - integrity sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA== - dependencies: - chalk "^2.1.0" - log-symbols "^2.1.0" - loglevelnext "^1.0.1" - uuid "^3.1.0" - -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== - dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" + webpack-dev-middleware "^5.3.1" + ws "^8.4.2" webpack-merge@^5.7.3: - version "5.7.3" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.7.3.tgz#2a0754e1877a25a8bbab3d2475ca70a052708213" - integrity sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA== + version "5.8.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" + integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== dependencies: clone-deep "^4.0.1" wildcard "^2.0.0" -webpack-sources@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.0.tgz#9ed2de69b25143a4c18847586ad9eccb19278cfa" - integrity sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ== - dependencies: - source-list-map "^2.0.1" - source-map "^0.6.1" +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack@^5.38.1: - version "5.38.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.38.1.tgz#5224c7f24c18e729268d3e3bc97240d6e880258e" - integrity sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g== - dependencies: - "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.47" - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/wasm-edit" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - acorn "^8.2.1" + version "5.74.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.74.0.tgz#02a5dac19a17e0bb47093f2be67c695102a55980" + integrity sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.7.1" + acorn-import-assertions "^1.7.6" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.8.0" - es-module-lexer "^0.4.0" + enhanced-resolve "^5.10.0" + es-module-lexer "^0.9.0" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" - graceful-fs "^4.2.4" - json-parse-better-errors "^1.0.2" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^3.0.0" + schema-utils "^3.1.0" tapable "^2.1.1" - terser-webpack-plugin "^5.1.1" - watchpack "^2.2.0" - webpack-sources "^2.3.0" + terser-webpack-plugin "^5.1.3" + watchpack "^2.4.0" + webpack-sources "^3.2.3" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" @@ -7640,31 +6253,38 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== +whatwg-encoding@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== dependencies: - iconv-lite "0.4.24" + iconv-lite "0.6.3" whatwg-fetch@>=0.10.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.5.0.tgz#605a2cd0a7146e5db141e29d1c62ab84c0c4c868" - integrity sha512-jXkLtsR42xhXg7akoDKvKWE40eJeI+2KZqcp2h3NsOrRnDvtWX36KcKl30dy+hxECivdk2BVUHVNrPtoMBUx6A== + version "3.6.2" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" + integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== -whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + +whatwg-url@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-10.0.0.tgz#37264f720b575b4a311bd4094ed8c760caaa05da" + integrity sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w== + dependencies: + tr46 "^3.0.0" + webidl-conversions "^7.0.0" -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== +whatwg-url@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" + integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" + tr46 "^3.0.0" + webidl-conversions "^7.0.0" which-boxed-primitive@^1.0.2: version "1.0.2" @@ -7677,38 +6297,26 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@1.3.1, which@^1.2.9, which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1, which@^2.0.2: +which@2.0.2, which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -wide-align@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== dependencies: - string-width "^1.0.2 || 2" + string-width "^4.0.0" wildcard@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== -word-wrap@~1.2.3: +word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== @@ -7721,19 +6329,15 @@ worker-loader@^3.0.8: loader-utils "^2.0.0" schema-utils "^3.0.0" -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrap-ansi@^6.2.0: +workerpool@6.2.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" + integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" @@ -7742,124 +6346,99 @@ wrap-ansi@^6.2.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== +write-file-atomic@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" + integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== dependencies: imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" + signal-exit "^3.0.7" -ws@^6.2.1: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== - dependencies: - async-limiter "~1.0.0" +ws@>=8.7.0, ws@^8.2.3, ws@^8.4.2: + version "8.8.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" + integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== -ws@^7.0.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.1.tgz#a333be02696bd0e54cea0434e21dcc8a9ac294bb" - integrity sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ== - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== -xmlchars@^2.1.1: +xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xregexp@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" - integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@13.1.2, yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== -yargs-parser@18.x, yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-unparser@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" - integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== +yargs-parser@^21.0.0, yargs-parser@^21.0.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== dependencies: - flat "^4.1.0" - lodash "^4.17.15" - yargs "^13.3.0" + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" -yargs@13.3.2, yargs@^13.3.0, yargs@^13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: - cliui "^5.0.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 "^13.1.2" - -yargs@^15.3.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.3.1: + version "17.5.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== + dependencies: + cliui "^7.0.2" + 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.0.0" + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" yocto-queue@^0.1.0: version "0.1.0"