From 600d9deca76853180bab1412a02fb7ec78859688 Mon Sep 17 00:00:00 2001 From: Tuan Pham Date: Wed, 17 Apr 2024 11:26:20 +0700 Subject: [PATCH 01/13] feat: support new Kintone UI (react) --- packages/plugin-uploader/package.json | 2 +- packages/plugin-uploader/src/PageInterface.ts | 8 + packages/plugin-uploader/src/index.ts | 149 +++--------------- packages/plugin-uploader/src/messages.ts | 10 +- packages/plugin-uploader/src/oldPage.ts | 60 +++++++ .../plugin-uploader/src/pluginSystemPage.ts | 141 +++++++++++++++++ packages/plugin-uploader/src/reactPage.ts | 54 +++++++ pnpm-lock.yaml | 20 +-- 8 files changed, 307 insertions(+), 137 deletions(-) create mode 100644 packages/plugin-uploader/src/PageInterface.ts create mode 100644 packages/plugin-uploader/src/oldPage.ts create mode 100644 packages/plugin-uploader/src/pluginSystemPage.ts create mode 100644 packages/plugin-uploader/src/reactPage.ts diff --git a/packages/plugin-uploader/package.json b/packages/plugin-uploader/package.json index 8f8f58945c..1f04c37325 100644 --- a/packages/plugin-uploader/package.json +++ b/packages/plugin-uploader/package.json @@ -45,7 +45,7 @@ "inquirer": "^8.2.6", "meow": "^9.0.0", "os-locale": "^5.0.0", - "puppeteer": "^22.6.3" + "puppeteer": "^22.6.4" }, "devDependencies": { "@types/inquirer": "8.2.10" diff --git a/packages/plugin-uploader/src/PageInterface.ts b/packages/plugin-uploader/src/PageInterface.ts new file mode 100644 index 0000000000..0d24aa2131 --- /dev/null +++ b/packages/plugin-uploader/src/PageInterface.ts @@ -0,0 +1,8 @@ +import type { BoundMessage } from "./messages"; +import type { Page } from "puppeteer"; +import type { Lang } from "./lang"; + +export interface PageInterface { + readyForImportButton(page: Page, m: BoundMessage): Promise; + upload(page: Page, pluginPath: string, lang: Lang): Promise; +} diff --git a/packages/plugin-uploader/src/index.ts b/packages/plugin-uploader/src/index.ts index d7e6319619..73e1fbb436 100644 --- a/packages/plugin-uploader/src/index.ts +++ b/packages/plugin-uploader/src/index.ts @@ -1,111 +1,11 @@ -import chalk from "chalk"; import fs from "fs"; -import puppeteer from "puppeteer"; -import type { Browser, Page } from "puppeteer"; -import type { Lang } from "./lang"; import { getBoundMessage } from "./messages"; +import type { BasicAuth } from "./pluginSystemPage"; +import { PluginSystemPage } from "./pluginSystemPage"; +import type { Lang } from "./lang"; -const TIMEOUT_MS = 10000; -const UPLOAD_TIMEOUT_MS = 60000; - -interface BasicAuth { - username: string; - password: string; -} - -const launchBrowser = ( - proxy?: string, - ignoreDefaultArgs?: string[], -): Promise => { - const args = proxy ? [`--proxy-server=${proxy}`] : []; - return puppeteer.launch({ args, ignoreDefaultArgs, headless: "shell" }); -}; - -const readyForUpload = async ( - browser: Browser, - baseUrl: string, - userName: string, - password: string, - lang: Lang, - basicAuth?: BasicAuth, -): Promise => { - const m = getBoundMessage(lang); - - const page = await browser.newPage(); - const loginUrl = `${baseUrl}/login?saml=off`; - - if (basicAuth) { - await page.authenticate(basicAuth); - } - - console.log(`Open ${loginUrl}`); - await page.goto(loginUrl); - try { - await page.waitForSelector(".form-username-slash", { timeout: TIMEOUT_MS }); - } catch (e) { - throw chalk.red(m("Error_cannotOpenLogin")); - } - console.log("Trying to log in..."); - await page.type(".form-username-slash > input.form-text", userName); - await page.type(".form-password-slash > input.form-text", password); - await page.click(".login-button"); - try { - await page.waitForNavigation({ - timeout: TIMEOUT_MS, - waitUntil: "domcontentloaded", - }); - } catch (e) { - throw chalk.red(m("Error_failedLogin")); - } - - const pluginUrl = `${baseUrl}/k/admin/system/plugin/`; - console.log(`Navigate to ${pluginUrl}`); - await page.goto(pluginUrl); - - try { - await page.waitForSelector("#page-admin-system-plugin-index-addplugin", { - timeout: TIMEOUT_MS, - }); - } catch (e) { - throw chalk.red(m("Error_adminPrivilege")); - } - return page; -}; - -const upload = async ( - page: Page, - pluginPath: string, - lang: Lang, -): Promise => { - const m = getBoundMessage(lang); - console.log(`Trying to upload ${pluginPath}`); - await page.click("#page-admin-system-plugin-index-addplugin"); - - const file = await page.$('.plupload > input[type="file"]'); - if (file == null) { - throw new Error('input[type="file"] is not found'); - } - await file.uploadFile(pluginPath); - // HACK: `page.click` does not work as expected, so we use `page.evaluate` instead. - // ref: https://github.com/puppeteer/puppeteer/pull/7097#issuecomment-850348366 - await page.evaluate(() => { - const button = - document.querySelector('button[name="ok"]'); - if (button) { - button.click(); - } else { - throw new Error('button[name="ok"] is not found'); - } - }); - await page.waitForSelector(".ocean-ui-dialog", { - hidden: true, - timeout: UPLOAD_TIMEOUT_MS, - }); - console.log(`${pluginPath} ${m("Uploaded")}`); -}; - -interface Option { +export interface Option { proxyServer?: string; watch?: boolean; lang: Lang; @@ -120,23 +20,26 @@ export const run = async ( pluginPath: string, options: Option, ): Promise => { - let browser = await launchBrowser( + const pluginSystemPage = new PluginSystemPage(); + let browser = await pluginSystemPage.launchBrowser( options.proxyServer, options.puppeteerIgnoreDefaultArgs, ); - let page: Page; + const { lang, basicAuth } = options; - const m = getBoundMessage(lang); + const boundMessage = getBoundMessage(lang); + + const params = { + browser, + baseUrl, + userName, + password, + lang, + basicAuth, + }; try { - page = await readyForUpload( - browser, - baseUrl, - userName, - password, - lang, - basicAuth, - ); - await upload(page, pluginPath, lang); + let page = await pluginSystemPage.readyForUpload(params); + await pluginSystemPage.upload(page, pluginPath, lang); if (options.watch) { let uploading = false; fs.watch(pluginPath, async () => { @@ -145,21 +48,21 @@ export const run = async ( } try { uploading = true; - await upload(page, pluginPath, lang); + await pluginSystemPage.upload(page, pluginPath, lang); } catch (e) { console.log(e); - console.log(m("Error_retry")); + console.log(boundMessage("Error_retry")); await browser.close(); - browser = await launchBrowser(options.proxyServer); - page = await readyForUpload( + browser = await pluginSystemPage.launchBrowser(options.proxyServer); + page = await pluginSystemPage.readyForUpload({ browser, baseUrl, userName, password, lang, basicAuth, - ); - await upload(page, pluginPath, lang); + }); + await pluginSystemPage.upload(page, pluginPath, lang); } finally { uploading = false; } @@ -168,7 +71,7 @@ export const run = async ( await browser.close(); } } catch (e) { - console.error(m("Error"), e); + console.error(boundMessage("Error"), e); await browser.close(); } }; diff --git a/packages/plugin-uploader/src/messages.ts b/packages/plugin-uploader/src/messages.ts index 58b2b317e8..a08d7d8171 100644 --- a/packages/plugin-uploader/src/messages.ts +++ b/packages/plugin-uploader/src/messages.ts @@ -3,6 +3,8 @@ import type { Lang } from "./lang"; type LangMap = { [lang in Lang]: string }; type MessageMap = { [key in keyof typeof messages]: LangMap }; +export type BoundMessage = (key: keyof MessageMap) => string; + const messages = { Q_BaseUrl: { en: "Input your kintone's base URL (https://example.cybozu.com):", @@ -44,6 +46,10 @@ const messages = { en: "Cannot navigate to the plug-ins page, please retry with an account with administrator privileges", ja: "kintone管理者権限のあるユーザーで実行してください", }, + Error_notDisplayImportButton: { + en: "Import Button is not displayed.", + ja: "Import Button is not displayed.", + }, Uploaded: { en: "has been uploaded!", ja: "をアップロードしました!", @@ -66,8 +72,6 @@ export const getMessage = ( * Returns a function bound lang to getMessage * @param lang */ -export const getBoundMessage = ( - lang: keyof LangMap, -): ((key: keyof MessageMap) => string) => { +export const getBoundMessage = (lang: keyof LangMap): BoundMessage => { return getMessage.bind(null, lang); }; diff --git a/packages/plugin-uploader/src/oldPage.ts b/packages/plugin-uploader/src/oldPage.ts new file mode 100644 index 0000000000..cec897bda1 --- /dev/null +++ b/packages/plugin-uploader/src/oldPage.ts @@ -0,0 +1,60 @@ +import type { Page } from "puppeteer"; +import type { BoundMessage } from "./messages"; +import { getBoundMessage } from "./messages"; +import chalk from "chalk"; +import type { Lang } from "./lang"; +import type { PageInterface } from "./PageInterface"; + +const TIMEOUT_MS = 10000; +const UPLOAD_TIMEOUT_MS = 60000; + +export const IMPORT_BUTTON_SELECTOR = + "#page-admin-system-plugin-index-addplugin"; + +export class OldPage implements PageInterface { + public async readyForImportButton( + page: Page, + boundMessage: BoundMessage, + ): Promise { + try { + await page.waitForSelector(IMPORT_BUTTON_SELECTOR, { + timeout: TIMEOUT_MS, + }); + } catch (e) { + throw chalk.red(boundMessage("Error_notDisplayImportButton")); + } + } + + public async upload( + page: Page, + pluginPath: string, + lang: Lang, + ): Promise { + const boundMessage = getBoundMessage(lang); + console.log(`Trying to upload ${pluginPath}`); + await page.click(IMPORT_BUTTON_SELECTOR); + + const file = await page.$('.plupload > input[type="file"]'); + if (file == null) { + throw new Error('input[type="file"] is not found'); + } + await file.uploadFile(pluginPath); + // HACK: `page.click` does not work as expected, so we use `page.evaluate` instead. + // ref: https://github.com/puppeteer/puppeteer/pull/7097#issuecomment-850348366 + await page.evaluate(() => { + const button = + document.querySelector('button[name="ok"]'); + if (button) { + button.click(); + } else { + throw new Error('button[name="ok"] is not found'); + } + }); + + await page.waitForSelector(".ocean-ui-dialog", { + hidden: true, + timeout: UPLOAD_TIMEOUT_MS, + }); + console.log(`${pluginPath} ${boundMessage("Uploaded")}`); + } +} diff --git a/packages/plugin-uploader/src/pluginSystemPage.ts b/packages/plugin-uploader/src/pluginSystemPage.ts new file mode 100644 index 0000000000..5030963674 --- /dev/null +++ b/packages/plugin-uploader/src/pluginSystemPage.ts @@ -0,0 +1,141 @@ +import type { Browser, Page } from "puppeteer"; +import puppeteer from "puppeteer"; +import type { Lang } from "./lang"; +import chalk from "chalk"; +import type { BoundMessage } from "./messages"; +import { getBoundMessage } from "./messages"; +import { ReactPage } from "./reactPage"; +import type { PageInterface } from "./PageInterface"; +import { IMPORT_BUTTON_SELECTOR, OldPage } from "./oldPage"; + +const TIMEOUT_MS = 10000; +const DETECT_PAGE_TIMEOUT_MS = 10000; +const NO_PRIVILEGE_STATUS_CODE = "403"; + +export interface BasicAuth { + username: string; + password: string; +} + +export class PluginSystemPage { + private static ui?: PageInterface; + + static async getUI(page: Page) { + if (PluginSystemPage.ui) { + return PluginSystemPage.ui; + } + + PluginSystemPage.ui = (await this.isReactPage(page)) + ? new ReactPage() + : new OldPage(); + + return PluginSystemPage.ui; + } + + private static async isReactPage(page: Page): Promise { + try { + await page.waitForSelector(IMPORT_BUTTON_SELECTOR, { + timeout: DETECT_PAGE_TIMEOUT_MS, + }); + return false; + } catch (e) { + return true; + } + } + + protected async login(options: { + baseUrl: string; + userName: string; + password: string; + page: Page; + boundMessage: BoundMessage; + basicAuth?: BasicAuth; + }): Promise { + const { baseUrl, userName, password, page, boundMessage, basicAuth } = + options; + const loginUrl = `${baseUrl}/login?saml=off`; + + if (basicAuth) { + await page.authenticate(basicAuth); + } + + console.log(`Open ${loginUrl}`); + await page.goto(loginUrl); + try { + await page.waitForSelector(".form-username-slash", { + timeout: TIMEOUT_MS, + }); + } catch (e) { + throw chalk.red(boundMessage("Error_cannotOpenLogin")); + } + + console.log("Trying to log in..."); + await page.type(".form-username-slash > input.form-text", userName); + await page.type(".form-password-slash > input.form-text", password); + await page.click(".login-button"); + + try { + await page.waitForNavigation({ + timeout: TIMEOUT_MS, + waitUntil: "domcontentloaded", + }); + } catch (e) { + throw chalk.red(boundMessage("Error_failedLogin")); + } + } + + protected goToPluginSystemPage(baseUrl: string, page: Page) { + const pluginUrl = `${baseUrl}/k/admin/system/plugin/`; + console.log(`Navigate to ${pluginUrl}`); + return page.goto(pluginUrl); + } + + public launchBrowser( + proxy?: string, + ignoreDefaultArgs?: string[], + ): Promise { + const args = proxy ? [`--proxy-server=${proxy}`] : []; + return puppeteer.launch({ args, ignoreDefaultArgs, headless: "shell" }); + } + + async readyForUpload(options: { + browser: Browser; + baseUrl: string; + userName: string; + password: string; + lang: Lang; + basicAuth?: BasicAuth; + }): Promise { + const { browser, baseUrl, userName, password, lang, basicAuth } = options; + const boundMessage = getBoundMessage(lang); + const page = await browser.newPage(); + + await this.login({ + baseUrl, + userName, + password, + page, + boundMessage, + basicAuth, + }); + + const response = await this.goToPluginSystemPage(baseUrl, page); + if (!response || response.headers().status === NO_PRIVILEGE_STATUS_CODE) { + throw chalk.red(boundMessage("Error_adminPrivilege")); + } + + await ( + await PluginSystemPage.getUI(page) + ).readyForImportButton(page, boundMessage); + + return page; + } + + public async upload( + page: Page, + pluginPath: string, + lang: Lang, + ): Promise { + await (await PluginSystemPage.getUI(page)).upload(page, pluginPath, lang); + } +} diff --git a/packages/plugin-uploader/src/reactPage.ts b/packages/plugin-uploader/src/reactPage.ts new file mode 100644 index 0000000000..6acf673fb8 --- /dev/null +++ b/packages/plugin-uploader/src/reactPage.ts @@ -0,0 +1,54 @@ +import type { Page } from "puppeteer"; +import type { BoundMessage } from "./messages"; +import { getBoundMessage } from "./messages"; +import chalk from "chalk"; +import type { Lang } from "./lang"; +import type { PageInterface } from "./PageInterface"; + +const TIMEOUT_MS = 15000; +const UPLOAD_TIMEOUT_MS = 60000; + +const IMPORT_BUTTON_SELECTOR = "button[data-testid='PluginImportButton']"; +const FILE_SELECTOR = "label[data-testid='FileSelector'] > input[type='file']"; +const IMPORT_DIALOG_SELECTOR = "div[data-testid='ImportDialog']"; +const IMPORT_BUTTON_IN_DIALOG_SELECTOR = + "//div[@data-testid='ImportDialog']//div[contains(@class,'_footer')]//button[1]"; + +export class ReactPage implements PageInterface { + public async readyForImportButton( + page: Page, + boundMessage: BoundMessage, + ): Promise { + try { + await page.waitForSelector(IMPORT_BUTTON_SELECTOR, { + timeout: TIMEOUT_MS, + }); + } catch (e) { + throw chalk.blue(boundMessage("Error_notDisplayImportButton")); + } + } + + public async upload( + page: Page, + pluginPath: string, + lang: Lang, + ): Promise { + const boundMessage = getBoundMessage(lang); + console.log(`Trying to upload ${pluginPath}`); + await page.click(IMPORT_BUTTON_SELECTOR); + + const file = await page.$(FILE_SELECTOR); + if (file == null) { + throw new Error('input[type="file"] is not found'); + } + await file.uploadFile(pluginPath); + + await page.click(`xpath/${IMPORT_BUTTON_IN_DIALOG_SELECTOR}`); + + await page.waitForSelector(`xpath/${IMPORT_BUTTON_IN_DIALOG_SELECTOR}`, { + hidden: true, + timeout: UPLOAD_TIMEOUT_MS, + }); + console.log(`${pluginPath} ${boundMessage("Uploaded")}`); + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 05ad2c15eb..f9251c731e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -388,8 +388,8 @@ importers: specifier: ^5.0.0 version: 5.0.0 puppeteer: - specifier: ^22.6.3 - version: 22.6.3(typescript@5.4.4) + specifier: ^22.6.4 + version: 22.6.4(typescript@5.4.4) devDependencies: '@types/inquirer': specifier: 8.2.10 @@ -4382,8 +4382,8 @@ packages: engines: {node: '>=6.0'} dev: true - /chromium-bidi@0.5.16(devtools-protocol@0.0.1262051): - resolution: {integrity: sha512-IT5lnR44h/qZQ4GaCHvBxYIl4cQL2i9UvFyYeRyVdcpY04hx5H720HQfe/7Oz7ndxaYVLQFGpCO71J4X2Ye/Gw==} + /chromium-bidi@0.5.17(devtools-protocol@0.0.1262051): + resolution: {integrity: sha512-BqOuIWUgTPj8ayuBFJUYCCuwIcwjBsb3/614P7tt1bEPJ4i1M0kCdIl0Wi9xhtswBXnfO2bTpTMkHD71H8rJMg==} peerDependencies: devtools-protocol: '*' dependencies: @@ -9559,12 +9559,12 @@ packages: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} - /puppeteer-core@22.6.3: - resolution: {integrity: sha512-YrTAak5zCTWVTnVaCK1b7FD1qFCCT9bSvQhLzamnIsJ57/tfuXiT8ZvPJR2SBfahyFTYFCcaZAd/Npow3lmDGA==} + /puppeteer-core@22.6.4: + resolution: {integrity: sha512-QtfJwPmqQec3EHc6LqbEz03vSiuVAr9bYp0TV87dLoreev6ZevsXdLgOfQgoA3GocrsSe/eUf7NRPQ1lQfsc3w==} engines: {node: '>=18'} dependencies: '@puppeteer/browsers': 2.2.1 - chromium-bidi: 0.5.16(devtools-protocol@0.0.1262051) + chromium-bidi: 0.5.17(devtools-protocol@0.0.1262051) debug: 4.3.4 devtools-protocol: 0.0.1262051 ws: 8.16.0 @@ -9574,8 +9574,8 @@ packages: - utf-8-validate dev: false - /puppeteer@22.6.3(typescript@5.4.4): - resolution: {integrity: sha512-KZOnthMbvr4+7cPKFeeOCJPe8DzOKGC0GbMXmZKOP/YusXQ6sqxA0vt6frstZq3rUJ277qXHlZNFf01VVwdHKw==} + /puppeteer@22.6.4(typescript@5.4.4): + resolution: {integrity: sha512-J9hXNwZmuqKDmNMj6kednZH8jzbdX9735NQfQJrq5LRD4nHisAMyW9pCD7glKi+iM7RV9JkesI1MYhdsN+0ZSQ==} engines: {node: '>=18'} hasBin: true requiresBuild: true @@ -9583,7 +9583,7 @@ packages: '@puppeteer/browsers': 2.2.1 cosmiconfig: 9.0.0(typescript@5.4.4) devtools-protocol: 0.0.1262051 - puppeteer-core: 22.6.3 + puppeteer-core: 22.6.4 transitivePeerDependencies: - bufferutil - supports-color From 1d5d255f76638c49a9e2a96a17e89332d275f2c5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 11 Apr 2024 13:22:47 +0000 Subject: [PATCH 02/13] chore(deps): update dependency typescript to ^5.4.5 (#2697) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- packages/create-plugin/templates/modern/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 840f1923a5..2f5e49fd6d 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "npm-run-all": "^4.1.5", "prettier": "^3.2.5", "rimraf": "^5.0.5", - "typescript": "^5.4.4" + "typescript": "^5.4.5" }, "packageManager": "pnpm@8.15.6", "pnpm": { diff --git a/packages/create-plugin/templates/modern/package.json b/packages/create-plugin/templates/modern/package.json index 40e96416a9..ec52240fd3 100644 --- a/packages/create-plugin/templates/modern/package.json +++ b/packages/create-plugin/templates/modern/package.json @@ -27,7 +27,7 @@ "eslint": "^8.57.0", "npm-run-all": "^4.1.5", "prettier": "^3.2.5", - "typescript": "^5.4.4", + "typescript": "^5.4.5", "webpack": "^5.91.0", "webpack-cli": "^5.1.4" } From f8c85462f62a365caf23c3ba5c4c245fe1749606 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 11 Apr 2024 17:20:04 +0000 Subject: [PATCH 03/13] chore(deps): update dependency @types/eslint to ^8.56.8 (#2698) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/dts-gen/package.json | 2 +- pnpm-lock.yaml | 1489 +++++++++++++++++---------------- 2 files changed, 775 insertions(+), 716 deletions(-) diff --git a/packages/dts-gen/package.json b/packages/dts-gen/package.json index 6a5abb2ae9..a3b4d9289d 100644 --- a/packages/dts-gen/package.json +++ b/packages/dts-gen/package.json @@ -37,7 +37,7 @@ "prettier": "^3.2.5" }, "devDependencies": { - "@types/eslint": "^8.56.7", + "@types/eslint": "^8.56.8", "@types/lodash": "^4.17.0", "ts-loader": "^9.5.1", "webpack": "^5.91.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9251c731e..5d761b4062 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,17 +13,17 @@ importers: .: devDependencies: '@babel/core': - specifier: ^7.24.4 - version: 7.24.4 + specifier: ^7.24.5 + version: 7.24.5 '@babel/preset-env': - specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + specifier: ^7.24.5 + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-typescript': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) + version: 7.24.1(@babel/core@7.24.5) '@cybozu/eslint-config': specifier: ^23.0.0 - version: 23.0.0(@types/eslint@8.56.7)(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.4) + version: 23.0.0(@types/eslint@8.56.10)(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5) '@cybozu/license-manager': specifier: ^1.2.1 version: 1.2.1 @@ -31,11 +31,11 @@ importers: specifier: ^29.5.12 version: 29.5.12 '@types/node': - specifier: ^18.19.31 - version: 18.19.31 + specifier: ^18.19.32 + version: 18.19.32 babel-jest: specifier: ^29.7.0 - version: 29.7.0(@babel/core@7.24.4) + version: 29.7.0(@babel/core@7.24.5) comment-json: specifier: ^4.2.3 version: 4.2.3 @@ -44,7 +44,7 @@ importers: version: 8.57.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@18.19.31) + version: 29.7.0(@types/node@18.19.32) npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -55,8 +55,8 @@ importers: specifier: ^5.0.5 version: 5.0.5 typescript: - specifier: ^5.4.4 - version: 5.4.4 + specifier: ^5.4.5 + version: 5.4.5 examples/rest-api-client-demo: dependencies: @@ -64,7 +64,7 @@ importers: specifier: workspace:* version: link:../../packages/profile-loader '@kintone/rest-api-client': - specifier: ^5.5.0 + specifier: ^5.5.1 version: link:../../packages/rest-api-client yargs: specifier: ^17.7.2 @@ -78,10 +78,10 @@ importers: version: 17.0.32 ts-loader: specifier: ^9.5.1 - version: 9.5.1(typescript@5.4.4)(webpack@5.91.0) + version: 9.5.1(typescript@5.4.5)(webpack@5.91.0) ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@18.19.31)(typescript@5.4.4) + version: 10.9.2(@types/node@18.19.32)(typescript@5.4.5) webpack: specifier: ^5.91.0 version: 5.91.0(webpack-cli@5.1.4) @@ -132,8 +132,8 @@ importers: specifier: ^8.2.10 version: 8.2.10 '@types/lodash': - specifier: ^4.17.0 - version: 4.17.0 + specifier: ^4.17.1 + version: 4.17.1 '@types/node-rsa': specifier: ^1.1.4 version: 1.1.4 @@ -143,11 +143,14 @@ importers: cross-env: specifier: ^7.0.3 version: 7.0.3 + jest-environment-node: + specifier: ^29.7.0 + version: 29.7.0 packages/customize-uploader: dependencies: '@kintone/rest-api-client': - specifier: ^5.5.0 + specifier: ^5.5.1 version: link:../rest-api-client chokidar: specifier: ^3.6.0 @@ -176,7 +179,7 @@ importers: dependencies: '@cybozu/eslint-config': specifier: ^23.0.0 - version: 23.0.0(@types/eslint@8.56.7)(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.4) + version: 23.0.0(@types/eslint@8.56.10)(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5) axios: specifier: ^1.6.8 version: 1.6.8 @@ -197,17 +200,17 @@ importers: version: 3.2.5 devDependencies: '@types/eslint': - specifier: ^8.56.7 - version: 8.56.7 + specifier: ^8.56.10 + version: 8.56.10 '@types/lodash': - specifier: ^4.17.0 - version: 4.17.0 + specifier: ^4.17.1 + version: 4.17.1 assert: specifier: ^2.1.0 version: 2.1.0 ts-loader: specifier: ^9.5.1 - version: 9.5.1(typescript@5.4.4)(webpack@5.91.0) + version: 9.5.1(typescript@5.4.5)(webpack@5.91.0) webpack: specifier: ^5.91.0 version: 5.91.0(webpack-cli@5.1.4) @@ -226,7 +229,7 @@ importers: devDependencies: '@babel/preset-typescript': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) + version: 7.24.1(@babel/core@7.24.5) '@types/bytes': specifier: ^3.1.4 version: 3.1.4 @@ -270,8 +273,8 @@ importers: specifier: ^3.0.2 version: 3.0.2 yauzl: - specifier: ^3.1.2 - version: 3.1.2 + specifier: ^3.1.3 + version: 3.1.3 yazl: specifier: ^2.5.1 version: 2.5.1 @@ -388,8 +391,8 @@ importers: specifier: ^5.0.0 version: 5.0.0 puppeteer: - specifier: ^22.6.4 - version: 22.6.4(typescript@5.4.4) + specifier: ^22.7.1 + version: 22.7.1(typescript@5.4.5) devDependencies: '@types/inquirer': specifier: 8.2.10 @@ -419,24 +422,24 @@ importers: specifier: ^3.0.0 version: 3.0.0 qs: - specifier: ^6.12.0 - version: 6.12.0 + specifier: ^6.12.1 + version: 6.12.1 devDependencies: '@rollup/plugin-babel': specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.4)(rollup@4.14.1) + version: 6.0.4(@babel/core@7.24.5)(rollup@4.17.2) '@rollup/plugin-commonjs': specifier: ^25.0.7 - version: 25.0.7(rollup@4.14.1) + version: 25.0.7(rollup@4.17.2) '@rollup/plugin-json': specifier: ^6.1.0 - version: 6.1.0(rollup@4.14.1) + version: 6.1.0(rollup@4.17.2) '@rollup/plugin-node-resolve': specifier: ^15.2.3 - version: 15.2.3(rollup@4.14.1) + version: 15.2.3(rollup@4.17.2) '@rollup/plugin-terser': specifier: ^0.4.4 - version: 0.4.4(rollup@4.14.1) + version: 0.4.4(rollup@4.17.2) '@types/core-js': specifier: ^2.5.8 version: 2.5.8 @@ -447,11 +450,11 @@ importers: specifier: ^3.0.4 version: 3.0.4 '@types/qs': - specifier: ^6.9.14 - version: 6.9.14 + specifier: ^6.9.15 + version: 6.9.15 babel-loader: specifier: ^9.1.3 - version: 9.1.3(@babel/core@7.24.4)(webpack@5.91.0) + version: 9.1.3(@babel/core@7.24.5)(webpack@5.91.0) cross-env: specifier: ^7.0.3 version: 7.0.3 @@ -459,23 +462,23 @@ importers: specifier: ^5.0.5 version: 5.0.5 rollup: - specifier: ^4.14.1 - version: 4.14.1 + specifier: ^4.17.2 + version: 4.17.2 rollup-plugin-ecma-version-validator: specifier: ^0.2.13 - version: 0.2.13(rollup@4.14.1) + version: 0.2.13(rollup@4.17.2) rollup-plugin-license: specifier: ^3.3.1 - version: 3.3.1(rollup@4.14.1) + version: 3.3.1(rollup@4.17.2) rollup-plugin-node-globals: specifier: ^1.4.0 version: 1.4.0 rollup-plugin-polyfill-node: specifier: ^0.13.0 - version: 0.13.0(rollup@4.14.1) + version: 0.13.0(rollup@4.17.2) vite: - specifier: ^5.2.8 - version: 5.2.8(@types/node@18.19.31) + specifier: ^5.2.11 + version: 5.2.11(@types/node@18.19.32) webpack: specifier: ^5.91.0 version: 5.91.0(webpack-cli@5.1.4) @@ -535,30 +538,25 @@ packages: '@babel/highlight': 7.24.2 picocolors: 1.0.0 - /@babel/compat-data@7.24.1: - resolution: {integrity: sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==} - engines: {node: '>=6.9.0'} - dev: true - /@babel/compat-data@7.24.4: resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.24.4: - resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} + /@babel/core@7.24.5: + resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.4 + '@babel/generator': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helpers': 7.24.4 - '@babel/parser': 7.24.4 + '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) + '@babel/helpers': 7.24.5 + '@babel/parser': 7.24.5 '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 - '@babel/types': 7.24.0 + '@babel/traverse': 7.24.5 + '@babel/types': 7.24.5 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -568,21 +566,21 @@ packages: - supports-color dev: true - /@babel/generator@7.24.1: - resolution: {integrity: sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==} + /@babel/generator@7.24.4: + resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 dev: true - /@babel/generator@7.24.4: - resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} + /@babel/generator@7.24.5: + resolution: {integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 @@ -599,76 +597,76 @@ packages: resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 dev: true /@babel/helper-compilation-targets@7.23.6: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.24.1 + '@babel/compat-data': 7.24.4 '@babel/helper-validator-option': 7.23.5 browserslist: 4.23.0 lru-cache: 5.1.1 semver: 6.3.1 dev: true - /@babel/helper-create-class-features-plugin@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA==} + /@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.5): + resolution: {integrity: sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 dev: true - /@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4): - resolution: {integrity: sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==} + /@babel/helper-create-class-features-plugin@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.24.5 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-split-export-declaration': 7.24.5 semver: 6.3.1 dev: true - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.4): + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.5): resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 dev: true - /@babel/helper-define-polyfill-provider@0.6.1(@babel/core@7.24.4): + /@babel/helper-define-polyfill-provider@0.6.1(@babel/core@7.24.5): resolution: {integrity: sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.8 @@ -686,14 +684,14 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.24.0 - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 dev: true /@babel/helper-member-expression-to-functions@7.23.0: @@ -703,6 +701,13 @@ packages: '@babel/types': 7.24.0 dev: true + /@babel/helper-member-expression-to-functions@7.24.5: + resolution: {integrity: sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.5 + dev: true + /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} @@ -710,25 +715,25 @@ packages: '@babel/types': 7.23.0 dev: true - /@babel/helper-module-imports@7.24.1: - resolution: {integrity: sha512-HfEWzysMyOa7xI5uQHc/OcZf67/jc+xe/RZlznWQHhbb8Pg1SkRdbK4yEi61aY8wxQA7PkSfoojtLQP/Kpe3og==} + /@babel/helper-module-imports@7.24.3: + resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 dev: true - /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4): - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + /@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.24.1 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-module-imports': 7.24.3 + '@babel/helper-simple-access': 7.24.5 + '@babel/helper-split-export-declaration': 7.24.5 + '@babel/helper-validator-identifier': 7.24.5 dev: true /@babel/helper-optimise-call-expression@7.22.5: @@ -743,35 +748,40 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.4): + /@babel/helper-plugin-utils@7.24.5: + resolution: {integrity: sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.5): resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 dev: true - /@babel/helper-replace-supers@7.24.1(@babel/core@7.24.4): + /@babel/helper-replace-supers@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 dev: true - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + /@babel/helper-simple-access@7.24.5: + resolution: {integrity: sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 dev: true /@babel/helper-skip-transparent-expression-wrappers@7.22.5: @@ -788,15 +798,32 @@ packages: '@babel/types': 7.24.0 dev: true + /@babel/helper-split-export-declaration@7.24.5: + resolution: {integrity: sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.5 + dev: true + /@babel/helper-string-parser@7.23.4: resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} dev: true + /@babel/helper-string-parser@7.24.1: + resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier@7.24.5: + resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-option@7.23.5: resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} @@ -808,16 +835,16 @@ packages: dependencies: '@babel/helper-function-name': 7.23.0 '@babel/template': 7.24.0 - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 dev: true - /@babel/helpers@7.24.4: - resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} + /@babel/helpers@7.24.5: + resolution: {integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 - '@babel/types': 7.24.0 + '@babel/traverse': 7.24.5 + '@babel/types': 7.24.5 transitivePeerDependencies: - supports-color dev: true @@ -844,7 +871,7 @@ packages: engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 dev: true /@babel/parser@7.24.4: @@ -852,939 +879,947 @@ packages: engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 + dev: true + + /@babel/parser@7.24.5: + resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.24.5 dev: true - /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4(@babel/core@7.24.4): - resolution: {integrity: sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==} + /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.4): + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.4): + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-optional-chaining': 7.24.5(@babel/core@7.24.5) dev: true - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.4): + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4): + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.5): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.5): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.5): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.4): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.5): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.4): + /@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.4): + /@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.5): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.4): + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.5): resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4): + /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.5): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.5): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.4): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.5): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.4): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.5): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.24.4): + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.24.5): resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4): + /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.4): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.5): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.4): + /@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.5): resolution: {integrity: sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) dev: true - /@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-module-imports': 7.24.1 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-module-imports': 7.24.3 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.5) dev: true - /@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-block-scoping@7.24.4(@babel/core@7.24.4): - resolution: {integrity: sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==} + /@babel/plugin-transform-block-scoping@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.4): + /@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.5): resolution: {integrity: sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.5) dev: true - /@babel/plugin-transform-classes@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==} + /@babel/plugin-transform-classes@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) + '@babel/helper-split-export-declaration': 7.24.5 globals: 11.12.0 dev: true - /@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 '@babel/template': 7.24.0 dev: true - /@babel/plugin-transform-destructuring@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==} + /@babel/plugin-transform-destructuring@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) dev: true - /@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.5) dev: true - /@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) dev: true - /@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) dev: true - /@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-simple-access': 7.22.5 + '@babel/core': 7.24.5 + '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-simple-access': 7.24.5 dev: true - /@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-validator-identifier': 7.24.5 dev: true - /@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.4): + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.5): resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) dev: true - /@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) dev: true - /@babel/plugin-transform-object-rest-spread@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==} + /@babel/plugin-transform-object-rest-spread@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.24.5) dev: true - /@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) dev: true - /@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) dev: true - /@babel/plugin-transform-optional-chaining@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==} + /@babel/plugin-transform-optional-chaining@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) dev: true - /@babel/plugin-transform-parameters@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==} + /@babel/plugin-transform-parameters@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-private-property-in-object@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==} + /@babel/plugin-transform-private-property-in-object@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) + '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.5) dev: true - /@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 regenerator-transform: 0.15.2 dev: true - /@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-typeof-symbol@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==} + /@babel/plugin-transform-typeof-symbol@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-typescript@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-typescript@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-liYSESjX2fZ7JyBFkYG78nfvHlMKE6IpNdTVnxmlYUR+j5ZLsitFbaAE+eJSK2zPPkNWNw4mXL51rQ8WrvdK0w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.4) + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.5) '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.5) dev: true - /@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/preset-env@7.24.4(@babel/core@7.24.4): - resolution: {integrity: sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==} + /@babel/preset-env@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.24.4 - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.4(@babel/core@7.24.4) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.4) - '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.4) - '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-block-scoping': 7.24.4(@babel/core@7.24.4) - '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.4) - '@babel/plugin-transform-classes': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-destructuring': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.4) - '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-object-rest-spread': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-property-in-object': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-typeof-symbol': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.4) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.4) - babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.24.4) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.4) - babel-plugin-polyfill-regenerator: 0.6.1(@babel/core@7.24.4) + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.5) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.5) + '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.5) + '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-block-scoping': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.5) + '@babel/plugin-transform-classes': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-destructuring': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.5) + '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-object-rest-spread': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-optional-chaining': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-private-property-in-object': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-typeof-symbol': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.5) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.5) + babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.24.5) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.5) + babel-plugin-polyfill-regenerator: 0.6.1(@babel/core@7.24.5) core-js-compat: 3.36.1 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.4): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.5): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/types': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/types': 7.24.5 esutils: 2.0.3 dev: true - /@babel/preset-typescript@7.24.1(@babel/core@7.24.4): + /@babel/preset-typescript@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-typescript': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-typescript': 7.24.1(@babel/core@7.24.5) dev: true /@babel/regjsgen@0.8.0: @@ -1802,22 +1837,22 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.4 - '@babel/types': 7.24.0 + '@babel/parser': 7.24.5 + '@babel/types': 7.24.5 dev: true - /@babel/traverse@7.24.1: - resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} + /@babel/traverse@7.24.5: + resolution: {integrity: sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.4 + '@babel/generator': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.4 - '@babel/types': 7.24.0 + '@babel/helper-split-export-declaration': 7.24.5 + '@babel/parser': 7.24.5 + '@babel/types': 7.24.5 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: @@ -1851,6 +1886,15 @@ packages: to-fast-properties: 2.0.0 dev: true + /@babel/types@7.24.5: + resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.24.1 + '@babel/helper-validator-identifier': 7.24.5 + to-fast-properties: 2.0.0 + dev: true + /@bcherny/json-schema-ref-parser@10.0.5-fork: resolution: {integrity: sha512-E/jKbPoca1tfUPj3iSbitDZTGnq6FUFjkH6L8U2oDwSuwK1WhnnVtCG7oFOTg/DDnyoXbQYUiUiGOibHqaGVnw==} engines: {node: '>= 16'} @@ -1872,24 +1916,24 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@cybozu/eslint-config@23.0.0(@types/eslint@8.56.7)(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.4): + /@cybozu/eslint-config@23.0.0(@types/eslint@8.56.10)(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5): resolution: {integrity: sha512-xfQVq794pcSDi+q2T5Y83lQuFZQSiEGt8xW0zL8vEh+ux0SrpLzmIj4YFeBTVrZq6+HqnPSZfFRr09BlCSHObQ==} engines: {node: '>=18'} peerDependencies: eslint: '>=8.56.0' typescript: '>=4.7.5 || ^5.0.0' dependencies: - '@typescript-eslint/eslint-plugin': 7.4.0(@typescript-eslint/parser@7.4.0)(eslint@8.57.0)(typescript@5.4.4) - '@typescript-eslint/parser': 7.4.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/eslint-plugin': 7.4.0(@typescript-eslint/parser@7.4.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.4.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.4.0)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-node: 11.1.0(eslint@8.57.0) - eslint-plugin-prettier: 5.1.3(@types/eslint@8.56.7)(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) + eslint-plugin-prettier: 5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - typescript: 5.4.4 + typescript: 5.4.5 transitivePeerDependencies: - '@types/eslint' - eslint-import-resolver-typescript @@ -2201,7 +2245,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.31 + '@types/node': 18.19.32 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -2222,14 +2266,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.31 + '@types/node': 18.19.32 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@18.19.31) + jest-config: 29.7.0(@types/node@18.19.32) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -2257,7 +2301,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.31 + '@types/node': 18.19.32 jest-mock: 29.7.0 dev: true @@ -2284,7 +2328,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 18.19.31 + '@types/node': 18.19.32 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -2317,7 +2361,7 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 18.19.31 + '@types/node': 18.19.32 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -2379,7 +2423,7 @@ packages: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.22 babel-plugin-istanbul: 6.1.1 @@ -2405,7 +2449,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.19.31 + '@types/node': 18.19.32 '@types/yargs': 17.0.32 chalk: 4.1.2 dev: true @@ -2504,8 +2548,8 @@ packages: picocolors: 1.0.0 tslib: 2.6.2 - /@puppeteer/browsers@2.2.1: - resolution: {integrity: sha512-QSXujx4d4ogDamQA8ckkkRieFzDgZEuZuGiey9G7CuDcbnX4iINKWxTPC5Br2AEzY9ICAvcndqgAUFMMKnS/Tw==} + /@puppeteer/browsers@2.2.3: + resolution: {integrity: sha512-bJ0UBsk0ESOs6RFcLXOt99a3yTDcOKlzfjad+rhFwdaG1Lu/Wzq58GHYCDTlZ9z6mldf4g+NTb+TXEfe0PpnsQ==} engines: {node: '>=18'} hasBin: true dependencies: @@ -2538,7 +2582,7 @@ packages: reselect: 5.0.1 dev: true - /@rollup/plugin-babel@6.0.4(@babel/core@7.24.4)(rollup@4.14.1): + /@rollup/plugin-babel@6.0.4(@babel/core@7.24.5)(rollup@4.17.2): resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2551,13 +2595,13 @@ packages: rollup: optional: true dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-module-imports': 7.22.15 - '@rollup/pluginutils': 5.0.2(rollup@4.14.1) - rollup: 4.14.1 + '@rollup/pluginutils': 5.0.2(rollup@4.17.2) + rollup: 4.17.2 dev: true - /@rollup/plugin-commonjs@25.0.7(rollup@4.14.1): + /@rollup/plugin-commonjs@25.0.7(rollup@4.17.2): resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2566,16 +2610,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2(rollup@4.14.1) + '@rollup/pluginutils': 5.0.2(rollup@4.17.2) commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.30.3 - rollup: 4.14.1 + rollup: 4.17.2 dev: true - /@rollup/plugin-inject@5.0.5(rollup@4.14.1): + /@rollup/plugin-inject@5.0.5(rollup@4.17.2): resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2584,13 +2628,13 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2(rollup@4.14.1) + '@rollup/pluginutils': 5.0.2(rollup@4.17.2) estree-walker: 2.0.2 magic-string: 0.30.3 - rollup: 4.14.1 + rollup: 4.17.2 dev: true - /@rollup/plugin-json@6.1.0(rollup@4.14.1): + /@rollup/plugin-json@6.1.0(rollup@4.17.2): resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2599,11 +2643,11 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.14.1) - rollup: 4.14.1 + '@rollup/pluginutils': 5.1.0(rollup@4.17.2) + rollup: 4.17.2 dev: true - /@rollup/plugin-node-resolve@15.2.3(rollup@4.14.1): + /@rollup/plugin-node-resolve@15.2.3(rollup@4.17.2): resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2612,16 +2656,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2(rollup@4.14.1) + '@rollup/pluginutils': 5.0.2(rollup@4.17.2) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.2 - rollup: 4.14.1 + rollup: 4.17.2 dev: true - /@rollup/plugin-terser@0.4.4(rollup@4.14.1): + /@rollup/plugin-terser@0.4.4(rollup@4.17.2): resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2630,13 +2674,13 @@ packages: rollup: optional: true dependencies: - rollup: 4.14.1 + rollup: 4.17.2 serialize-javascript: 6.0.1 smob: 1.4.0 terser: 5.19.1 dev: true - /@rollup/pluginutils@5.0.2(rollup@4.14.1): + /@rollup/pluginutils@5.0.2(rollup@4.17.2): resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2648,10 +2692,10 @@ packages: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 4.14.1 + rollup: 4.17.2 dev: true - /@rollup/pluginutils@5.1.0(rollup@4.14.1): + /@rollup/pluginutils@5.1.0(rollup@4.17.2): resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2663,123 +2707,131 @@ packages: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 4.14.1 + rollup: 4.17.2 dev: true - /@rollup/rollup-android-arm-eabi@4.14.1: - resolution: {integrity: sha512-fH8/o8nSUek8ceQnT7K4EQbSiV7jgkHq81m9lWZFIXjJ7lJzpWXbQFpT/Zh6OZYnpFykvzC3fbEvEAFZu03dPA==} + /@rollup/rollup-android-arm-eabi@4.17.2: + resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.14.1: - resolution: {integrity: sha512-Y/9OHLjzkunF+KGEoJr3heiD5X9OLa8sbT1lm0NYeKyaM3oMhhQFvPB0bNZYJwlq93j8Z6wSxh9+cyKQaxS7PQ==} + /@rollup/rollup-android-arm64@4.17.2: + resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.14.1: - resolution: {integrity: sha512-+kecg3FY84WadgcuSVm6llrABOdQAEbNdnpi5X3UwWiFVhZIZvKgGrF7kmLguvxHNQy+UuRV66cLVl3S+Rkt+Q==} + /@rollup/rollup-darwin-arm64@4.17.2: + resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.14.1: - resolution: {integrity: sha512-2pYRzEjVqq2TB/UNv47BV/8vQiXkFGVmPFwJb+1E0IFFZbIX8/jo1olxqqMbo6xCXf8kabANhp5bzCij2tFLUA==} + /@rollup/rollup-darwin-x64@4.17.2: + resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.14.1: - resolution: {integrity: sha512-mS6wQ6Do6/wmrF9aTFVpIJ3/IDXhg1EZcQFYHZLHqw6AzMBjTHWnCG35HxSqUNphh0EHqSM6wRTT8HsL1C0x5g==} + /@rollup/rollup-linux-arm-gnueabihf@4.17.2: + resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-musleabihf@4.17.2: + resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.14.1: - resolution: {integrity: sha512-p9rGKYkHdFMzhckOTFubfxgyIO1vw//7IIjBBRVzyZebWlzRLeNhqxuSaZ7kCEKVkm/kuC9fVRW9HkC/zNRG2w==} + /@rollup/rollup-linux-arm64-gnu@4.17.2: + resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.14.1: - resolution: {integrity: sha512-nDY6Yz5xS/Y4M2i9JLQd3Rofh5OR8Bn8qe3Mv/qCVpHFlwtZSBYSPaU4mrGazWkXrdQ98GB//H0BirGR/SKFSw==} + /@rollup/rollup-linux-arm64-musl@4.17.2: + resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-powerpc64le-gnu@4.14.1: - resolution: {integrity: sha512-im7HE4VBL+aDswvcmfx88Mp1soqL9OBsdDBU8NqDEYtkri0qV0THhQsvZtZeNNlLeCUQ16PZyv7cqutjDF35qw==} - cpu: [ppc64le] + /@rollup/rollup-linux-powerpc64le-gnu@4.17.2: + resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==} + cpu: [ppc64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.14.1: - resolution: {integrity: sha512-RWdiHuAxWmzPJgaHJdpvUUlDz8sdQz4P2uv367T2JocdDa98iRw2UjIJ4QxSyt077mXZT2X6pKfT2iYtVEvOFw==} + /@rollup/rollup-linux-riscv64-gnu@4.17.2: + resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-s390x-gnu@4.14.1: - resolution: {integrity: sha512-VMgaGQ5zRX6ZqV/fas65/sUGc9cPmsntq2FiGmayW9KMNfWVG/j0BAqImvU4KTeOOgYSf1F+k6at1UfNONuNjA==} + /@rollup/rollup-linux-s390x-gnu@4.17.2: + resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==} cpu: [s390x] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.14.1: - resolution: {integrity: sha512-9Q7DGjZN+hTdJomaQ3Iub4m6VPu1r94bmK2z3UeWP3dGUecRC54tmVu9vKHTm1bOt3ASoYtEz6JSRLFzrysKlA==} + /@rollup/rollup-linux-x64-gnu@4.17.2: + resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.14.1: - resolution: {integrity: sha512-JNEG/Ti55413SsreTguSx0LOVKX902OfXIKVg+TCXO6Gjans/k9O6ww9q3oLGjNDaTLxM+IHFMeXy/0RXL5R/g==} + /@rollup/rollup-linux-x64-musl@4.17.2: + resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.14.1: - resolution: {integrity: sha512-ryS22I9y0mumlLNwDFYZRDFLwWh3aKaC72CWjFcFvxK0U6v/mOkM5Up1bTbCRAhv3kEIwW2ajROegCIQViUCeA==} + /@rollup/rollup-win32-arm64-msvc@4.17.2: + resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.14.1: - resolution: {integrity: sha512-TdloItiGk+T0mTxKx7Hp279xy30LspMso+GzQvV2maYePMAWdmrzqSNZhUpPj3CGw12aGj57I026PgLCTu8CGg==} + /@rollup/rollup-win32-ia32-msvc@4.17.2: + resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.14.1: - resolution: {integrity: sha512-wQGI+LY/Py20zdUPq+XCem7JcPOyzIJBm3dli+56DJsQOHbnXZFEwgmnC6el1TPAfC8lBT3m+z69RmLykNUbew==} + /@rollup/rollup-win32-x64-msvc@4.17.2: + resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==} cpu: [x64] os: [win32] requiresBuild: true @@ -2876,13 +2928,13 @@ packages: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 18.19.31 + '@types/node': 18.19.32 dev: true /@types/bonjour@3.5.13: resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 dev: true /@types/bytes@3.1.4: @@ -2893,13 +2945,13 @@ packages: resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} dependencies: '@types/express-serve-static-core': 4.17.35 - '@types/node': 18.19.31 + '@types/node': 18.19.32 dev: true /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 dev: true /@types/core-js@2.5.8: @@ -2915,12 +2967,12 @@ packages: /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: - '@types/eslint': 8.56.7 + '@types/eslint': 8.56.10 '@types/estree': 1.0.5 dev: true - /@types/eslint@8.56.7: - resolution: {integrity: sha512-SjDvI/x3zsZnOkYZ3lCt9lOZWZLB2jIlNKz+LBgCtDurK0JZcwucxYHn1w2BJkD34dgX9Tjnak0txtq4WTggEA==} + /@types/eslint@8.56.10: + resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.12 @@ -2931,8 +2983,8 @@ packages: /@types/express-serve-static-core@4.17.35: resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==} dependencies: - '@types/node': 18.19.31 - '@types/qs': 6.9.14 + '@types/node': 18.19.32 + '@types/qs': 6.9.15 '@types/range-parser': 1.2.4 '@types/send': 0.17.1 dev: true @@ -2942,7 +2994,7 @@ packages: dependencies: '@types/body-parser': 1.19.2 '@types/express-serve-static-core': 4.17.35 - '@types/qs': 6.9.14 + '@types/qs': 6.9.15 '@types/serve-static': 1.15.5 dev: true @@ -2950,7 +3002,7 @@ packages: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.19.31 + '@types/node': 18.19.32 /@types/glob@8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} @@ -2962,7 +3014,7 @@ packages: /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 dev: true /@types/http-errors@2.0.1: @@ -2972,7 +3024,7 @@ packages: /@types/http-proxy@1.17.11: resolution: {integrity: sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==} dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 dev: true /@types/inquirer@8.2.10: @@ -3015,7 +3067,7 @@ packages: /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 '@types/tough-cookie': 4.0.2 parse5: 7.1.2 dev: true @@ -3026,8 +3078,8 @@ packages: /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - /@types/lodash@4.17.0: - resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==} + /@types/lodash@4.17.1: + resolution: {integrity: sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==} dev: true /@types/mime@1.3.2: @@ -3052,7 +3104,7 @@ packages: /@types/node-forge@1.3.11: resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 dev: true /@types/node-rsa@1.1.4: @@ -3078,6 +3130,12 @@ packages: resolution: {integrity: sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==} dependencies: undici-types: 5.26.5 + dev: true + + /@types/node@18.19.32: + resolution: {integrity: sha512-2bkg93YBSDKk8DLmmHnmj/Rwr18TLx7/n+I23BigFwgexUJoMHZOd8X1OFxuF/W3NN0S2W2E5sVabI5CPinNvA==} + dependencies: + undici-types: 5.26.5 /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -3091,8 +3149,8 @@ packages: resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} dev: true - /@types/qs@6.9.14: - resolution: {integrity: sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==} + /@types/qs@6.9.15: + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} dev: true /@types/range-parser@1.2.4: @@ -3114,7 +3172,7 @@ packages: resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} dependencies: '@types/mime': 1.3.2 - '@types/node': 18.19.31 + '@types/node': 18.19.32 dev: true /@types/serve-index@1.9.4: @@ -3128,13 +3186,13 @@ packages: dependencies: '@types/http-errors': 2.0.1 '@types/mime': 3.0.4 - '@types/node': 18.19.31 + '@types/node': 18.19.32 dev: true /@types/sockjs@0.3.36: resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 dev: true /@types/stack-utils@2.0.1: @@ -3150,7 +3208,7 @@ packages: /@types/through@0.0.30: resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==} dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 dev: true /@types/tough-cookie@4.0.2: @@ -3160,7 +3218,7 @@ packages: /@types/ws@8.5.10: resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 dev: true /@types/yargs-parser@21.0.0: @@ -3184,7 +3242,7 @@ packages: '@types/node': 18.0.6 dev: true - /@typescript-eslint/eslint-plugin@7.4.0(@typescript-eslint/parser@7.4.0)(eslint@8.57.0)(typescript@5.4.4): + /@typescript-eslint/eslint-plugin@7.4.0(@typescript-eslint/parser@7.4.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-yHMQ/oFaM7HZdVrVm/M2WHaNPgyuJH4WelkSVEWSSsir34kxW2kDJCxlXRhhGWEsMN0WAW/vLpKfKVcm8k+MPw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -3196,10 +3254,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.6.2 - '@typescript-eslint/parser': 7.4.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/parser': 7.4.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 7.4.0 - '@typescript-eslint/type-utils': 7.4.0(eslint@8.57.0)(typescript@5.4.4) - '@typescript-eslint/utils': 7.4.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/type-utils': 7.4.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.4.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.4.0 debug: 4.3.4 eslint: 8.57.0 @@ -3207,12 +3265,12 @@ packages: ignore: 5.2.4 natural-compare: 1.4.0 semver: 7.6.0 - ts-api-utils: 1.0.3(typescript@5.4.4) - typescript: 5.4.4 + ts-api-utils: 1.0.3(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color - /@typescript-eslint/parser@7.4.0(eslint@8.57.0)(typescript@5.4.4): + /@typescript-eslint/parser@7.4.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-ZvKHxHLusweEUVwrGRXXUVzFgnWhigo4JurEj0dGF1tbcGh6buL+ejDdjxOQxv6ytcY1uhun1p2sm8iWStlgLQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -3224,11 +3282,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 7.4.0 '@typescript-eslint/types': 7.4.0 - '@typescript-eslint/typescript-estree': 7.4.0(typescript@5.4.4) + '@typescript-eslint/typescript-estree': 7.4.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.4.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.4.4 + typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -3239,7 +3297,7 @@ packages: '@typescript-eslint/types': 7.4.0 '@typescript-eslint/visitor-keys': 7.4.0 - /@typescript-eslint/type-utils@7.4.0(eslint@8.57.0)(typescript@5.4.4): + /@typescript-eslint/type-utils@7.4.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-247ETeHgr9WTRMqHbbQdzwzhuyaJ8dPTuyuUEMANqzMRB1rj/9qFIuIXK7l0FX9i9FXbHeBQl/4uz6mYuCE7Aw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -3249,12 +3307,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.4.0(typescript@5.4.4) - '@typescript-eslint/utils': 7.4.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/typescript-estree': 7.4.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.4.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.0.3(typescript@5.4.4) - typescript: 5.4.4 + ts-api-utils: 1.0.3(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -3262,7 +3320,7 @@ packages: resolution: {integrity: sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==} engines: {node: ^18.18.0 || >=20.0.0} - /@typescript-eslint/typescript-estree@7.4.0(typescript@5.4.4): + /@typescript-eslint/typescript-estree@7.4.0(typescript@5.4.5): resolution: {integrity: sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -3278,12 +3336,12 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.0 - ts-api-utils: 1.0.3(typescript@5.4.4) - typescript: 5.4.4 + ts-api-utils: 1.0.3(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color - /@typescript-eslint/utils@7.4.0(eslint@8.57.0)(typescript@5.4.4): + /@typescript-eslint/utils@7.4.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -3294,7 +3352,7 @@ packages: '@types/semver': 7.5.0 '@typescript-eslint/scope-manager': 7.4.0 '@typescript-eslint/types': 7.4.0 - '@typescript-eslint/typescript-estree': 7.4.0(typescript@5.4.4) + '@typescript-eslint/typescript-estree': 7.4.0(typescript@5.4.5) eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: @@ -3887,17 +3945,17 @@ packages: resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} dev: false - /babel-jest@29.7.0(@babel/core@7.24.4): + /babel-jest@29.7.0(@babel/core@7.24.5): resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.1 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.24.4) + babel-preset-jest: 29.6.3(@babel/core@7.24.5) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -3905,14 +3963,14 @@ packages: - supports-color dev: true - /babel-loader@9.1.3(@babel/core@7.24.4)(webpack@5.91.0): + /babel-loader@9.1.3(@babel/core@7.24.5)(webpack@5.91.0): resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} engines: {node: '>= 14.15.0'} peerDependencies: '@babel/core': ^7.12.0 webpack: '>=5' dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 find-cache-dir: 4.0.0 schema-utils: 4.2.0 webpack: 5.91.0(webpack-cli@5.1.4) @@ -3941,38 +3999,38 @@ packages: '@types/babel__traverse': 7.20.1 dev: true - /babel-plugin-polyfill-corejs2@0.4.10(@babel/core@7.24.4): + /babel-plugin-polyfill-corejs2@0.4.10(@babel/core@7.24.5): resolution: {integrity: sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/compat-data': 7.24.4 - '@babel/core': 7.24.4 - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.5) semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.4): + /babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.5): resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.5) core-js-compat: 3.36.1 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.6.1(@babel/core@7.24.4): + /babel-plugin-polyfill-regenerator@0.6.1(@babel/core@7.24.5): resolution: {integrity: sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.5) transitivePeerDependencies: - supports-color dev: true @@ -3981,35 +4039,35 @@ packages: resolution: {integrity: sha512-BiTEG2Ro+O1spuheL5nB289y37FFmz0ISE6GjpNCG2JuA/WNcuEHSYw01+vN8quGf208sID3FnZFDwVyqX18YQ==} dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.4): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.5): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) - dev: true - - /babel-preset-jest@29.6.3(@babel/core@7.24.4): + '@babel/core': 7.24.5 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.5) + dev: true + + /babel-preset-jest@29.6.3(@babel/core@7.24.5): resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.5) dev: true /balanced-match@1.0.2: @@ -4382,12 +4440,12 @@ packages: engines: {node: '>=6.0'} dev: true - /chromium-bidi@0.5.17(devtools-protocol@0.0.1262051): - resolution: {integrity: sha512-BqOuIWUgTPj8ayuBFJUYCCuwIcwjBsb3/614P7tt1bEPJ4i1M0kCdIl0Wi9xhtswBXnfO2bTpTMkHD71H8rJMg==} + /chromium-bidi@0.5.19(devtools-protocol@0.0.1273771): + resolution: {integrity: sha512-UA6zL77b7RYCjJkZBsZ0wlvCTD+jTjllZ8f6wdO4buevXgTZYjV+XLB9CiEa2OuuTGGTLnI7eN9I60YxuALGQg==} peerDependencies: devtools-protocol: '*' dependencies: - devtools-protocol: 0.0.1262051 + devtools-protocol: 0.0.1273771 mitt: 3.0.1 urlpattern-polyfill: 10.0.0 zod: 3.22.4 @@ -4630,7 +4688,7 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /cosmiconfig@9.0.0(typescript@5.4.4): + /cosmiconfig@9.0.0(typescript@5.4.5): resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} engines: {node: '>=14'} peerDependencies: @@ -4643,7 +4701,7 @@ packages: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 - typescript: 5.4.4 + typescript: 5.4.5 dev: false /create-ecdh@4.0.4: @@ -4674,7 +4732,7 @@ packages: sha.js: 2.4.11 dev: true - /create-jest@29.7.0(@types/node@18.19.31): + /create-jest@29.7.0(@types/node@18.19.32): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -4683,7 +4741,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@18.19.31) + jest-config: 29.7.0(@types/node@18.19.32) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -5134,8 +5192,8 @@ packages: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} dev: true - /devtools-protocol@0.0.1262051: - resolution: {integrity: sha512-YJe4CT5SA8on3Spa+UDtNhEqtuV6Epwz3OZ4HQVLhlRccpZ9/PAYk0/cy/oKxFKRrZPBUPyxympQci4yWNWZ9g==} + /devtools-protocol@0.0.1273771: + resolution: {integrity: sha512-QDbb27xcTVReQQW/GHJsdQqGKwYBE7re7gxehj467kKP2DKuYBUj6i2k5LRiAC66J1yZG/9gsxooz/s9pcm0Og==} dev: false /diff-match-patch@1.0.5: @@ -5695,7 +5753,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.4.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/parser': 7.4.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -5722,7 +5780,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.4.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/parser': 7.4.0(eslint@8.57.0)(typescript@5.4.5) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -5784,7 +5842,7 @@ packages: resolve: 1.22.8 semver: 6.3.1 - /eslint-plugin-prettier@5.1.3(@types/eslint@8.56.7)(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5): + /eslint-plugin-prettier@5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5): resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -5798,7 +5856,7 @@ packages: eslint-config-prettier: optional: true dependencies: - '@types/eslint': 8.56.7 + '@types/eslint': 8.56.10 eslint: 8.57.0 eslint-config-prettier: 9.1.0(eslint@8.57.0) prettier: 3.2.5 @@ -7221,7 +7279,7 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 has-tostringtag: 1.0.0 /is-set@2.0.2: @@ -7330,7 +7388,7 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/parser': 7.24.1 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 @@ -7343,8 +7401,8 @@ packages: resolution: {integrity: sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.24.4 - '@babel/parser': 7.24.1 + '@babel/core': 7.24.5 + '@babel/parser': 7.24.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 7.6.0 @@ -7414,7 +7472,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.31 + '@types/node': 18.19.32 chalk: 4.1.2 co: 4.6.0 dedent: 1.3.0 @@ -7435,7 +7493,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@18.19.31): + /jest-cli@29.7.0(@types/node@18.19.32): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -7449,10 +7507,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@18.19.31) + create-jest: 29.7.0(@types/node@18.19.32) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@18.19.31) + jest-config: 29.7.0(@types/node@18.19.32) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -7463,7 +7521,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@18.19.31): + /jest-config@29.7.0(@types/node@18.19.32): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -7475,11 +7533,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.31 - babel-jest: 29.7.0(@babel/core@7.24.4) + '@types/node': 18.19.32 + babel-jest: 29.7.0(@babel/core@7.24.5) chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.1 @@ -7577,7 +7635,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.6 - '@types/node': 18.19.31 + '@types/node': 18.19.32 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -7628,7 +7686,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.31 + '@types/node': 18.19.32 jest-util: 29.7.0 dev: true @@ -7683,7 +7741,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.31 + '@types/node': 18.19.32 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -7714,7 +7772,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.31 + '@types/node': 18.19.32 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -7737,15 +7795,15 @@ packages: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.24.4 - '@babel/generator': 7.24.1 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.4) - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/generator': 7.24.4 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.5) + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.5) '@babel/types': 7.24.0 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.5) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -7766,7 +7824,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.31 + '@types/node': 18.19.32 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -7791,7 +7849,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.31 + '@types/node': 18.19.32 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -7803,7 +7861,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -7812,13 +7870,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@18.19.31): + /jest@29.7.0(@types/node@18.19.32): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -7831,7 +7889,7 @@ packages: '@jest/core': 29.7.0 '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@18.19.31) + jest-cli: 29.7.0(@types/node@18.19.32) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -7925,7 +7983,7 @@ packages: dependencies: '@bcherny/json-schema-ref-parser': 10.0.5-fork '@types/json-schema': 7.0.12 - '@types/lodash': 4.17.0 + '@types/lodash': 4.17.1 '@types/prettier': 2.7.3 cli-color: 2.0.3 get-stdin: 8.0.0 @@ -9559,14 +9617,14 @@ packages: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} - /puppeteer-core@22.6.4: - resolution: {integrity: sha512-QtfJwPmqQec3EHc6LqbEz03vSiuVAr9bYp0TV87dLoreev6ZevsXdLgOfQgoA3GocrsSe/eUf7NRPQ1lQfsc3w==} + /puppeteer-core@22.7.1: + resolution: {integrity: sha512-jD7T7yN7PWGuJmNT0TAEboA26s0VVnvbgCxqgQIF+eNQW2u71ENaV2JwzSJiCHO+e72H4Ue6AgKD9USQ8xAcOQ==} engines: {node: '>=18'} dependencies: - '@puppeteer/browsers': 2.2.1 - chromium-bidi: 0.5.17(devtools-protocol@0.0.1262051) + '@puppeteer/browsers': 2.2.3 + chromium-bidi: 0.5.19(devtools-protocol@0.0.1273771) debug: 4.3.4 - devtools-protocol: 0.0.1262051 + devtools-protocol: 0.0.1273771 ws: 8.16.0 transitivePeerDependencies: - bufferutil @@ -9574,16 +9632,16 @@ packages: - utf-8-validate dev: false - /puppeteer@22.6.4(typescript@5.4.4): - resolution: {integrity: sha512-J9hXNwZmuqKDmNMj6kednZH8jzbdX9735NQfQJrq5LRD4nHisAMyW9pCD7glKi+iM7RV9JkesI1MYhdsN+0ZSQ==} + /puppeteer@22.7.1(typescript@5.4.5): + resolution: {integrity: sha512-JBCBCwQ9+dyPp5haqeecgv0N0vgWFx44woUeKJaPeJT8CU3RXrd8F/tqJQbuAmcWlbMhYJSlTJkIFrwVAs6BNA==} engines: {node: '>=18'} hasBin: true requiresBuild: true dependencies: - '@puppeteer/browsers': 2.2.1 - cosmiconfig: 9.0.0(typescript@5.4.4) - devtools-protocol: 0.0.1262051 - puppeteer-core: 22.6.4 + '@puppeteer/browsers': 2.2.3 + cosmiconfig: 9.0.0(typescript@5.4.5) + devtools-protocol: 0.0.1273771 + puppeteer-core: 22.7.1 transitivePeerDependencies: - bufferutil - supports-color @@ -9602,8 +9660,8 @@ packages: side-channel: 1.0.6 dev: true - /qs@6.12.0: - resolution: {integrity: sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==} + /qs@6.12.1: + resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.6 @@ -9789,7 +9847,7 @@ packages: resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 functions-have-names: 1.2.3 @@ -9929,17 +9987,17 @@ packages: inherits: 2.0.4 dev: true - /rollup-plugin-ecma-version-validator@0.2.13(rollup@4.14.1): + /rollup-plugin-ecma-version-validator@0.2.13(rollup@4.17.2): resolution: {integrity: sha512-J2k5xcLrJG4rInAFtJSzsjeE5WspXF/hgrheRm+A1pzdfar+lrbprzHVv+OKicF2yOgKF3mJlo3abBthIO8AwA==} engines: {node: '>=14'} peerDependencies: rollup: ^2.16.1 || ^3.x dependencies: acorn: 8.10.0 - rollup: 4.14.1 + rollup: 4.17.2 dev: true - /rollup-plugin-license@3.3.1(rollup@4.14.1): + /rollup-plugin-license@3.3.1(rollup@4.17.2): resolution: {integrity: sha512-lwZ/J8QgSnP0unVOH2FQuOBkeiyp0EBvrbYdNU33lOaYD8xP9Zoki+PGoWMD31EUq8Q07GGocSABTYlWMKkwuw==} engines: {node: '>=14.0.0'} peerDependencies: @@ -9952,7 +10010,7 @@ packages: mkdirp: 3.0.1 moment: 2.30.1 package-name-regex: 2.0.6 - rollup: 4.14.1 + rollup: 4.17.2 spdx-expression-validate: 2.0.0 spdx-satisfies: 5.0.1 dev: true @@ -9968,13 +10026,13 @@ packages: rollup-pluginutils: 2.8.2 dev: true - /rollup-plugin-polyfill-node@0.13.0(rollup@4.14.1): + /rollup-plugin-polyfill-node@0.13.0(rollup@4.17.2): resolution: {integrity: sha512-FYEvpCaD5jGtyBuBFcQImEGmTxDTPbiHjJdrYIp+mFIwgXiXabxvKUK7ZT9P31ozu2Tqm9llYQMRWsfvTMTAOw==} peerDependencies: rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 dependencies: - '@rollup/plugin-inject': 5.0.5(rollup@4.14.1) - rollup: 4.14.1 + '@rollup/plugin-inject': 5.0.5(rollup@4.17.2) + rollup: 4.17.2 dev: true /rollup-pluginutils@2.8.2: @@ -9983,28 +10041,29 @@ packages: estree-walker: 0.6.1 dev: true - /rollup@4.14.1: - resolution: {integrity: sha512-4LnHSdd3QK2pa1J6dFbfm1HN0D7vSK/ZuZTsdyUAlA6Rr1yTouUTL13HaDOGJVgby461AhrNGBS7sCGXXtT+SA==} + /rollup@4.17.2: + resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.14.1 - '@rollup/rollup-android-arm64': 4.14.1 - '@rollup/rollup-darwin-arm64': 4.14.1 - '@rollup/rollup-darwin-x64': 4.14.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.14.1 - '@rollup/rollup-linux-arm64-gnu': 4.14.1 - '@rollup/rollup-linux-arm64-musl': 4.14.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.14.1 - '@rollup/rollup-linux-riscv64-gnu': 4.14.1 - '@rollup/rollup-linux-s390x-gnu': 4.14.1 - '@rollup/rollup-linux-x64-gnu': 4.14.1 - '@rollup/rollup-linux-x64-musl': 4.14.1 - '@rollup/rollup-win32-arm64-msvc': 4.14.1 - '@rollup/rollup-win32-ia32-msvc': 4.14.1 - '@rollup/rollup-win32-x64-msvc': 4.14.1 + '@rollup/rollup-android-arm-eabi': 4.17.2 + '@rollup/rollup-android-arm64': 4.17.2 + '@rollup/rollup-darwin-arm64': 4.17.2 + '@rollup/rollup-darwin-x64': 4.17.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.17.2 + '@rollup/rollup-linux-arm-musleabihf': 4.17.2 + '@rollup/rollup-linux-arm64-gnu': 4.17.2 + '@rollup/rollup-linux-arm64-musl': 4.17.2 + '@rollup/rollup-linux-powerpc64le-gnu': 4.17.2 + '@rollup/rollup-linux-riscv64-gnu': 4.17.2 + '@rollup/rollup-linux-s390x-gnu': 4.17.2 + '@rollup/rollup-linux-x64-gnu': 4.17.2 + '@rollup/rollup-linux-x64-musl': 4.17.2 + '@rollup/rollup-win32-arm64-msvc': 4.17.2 + '@rollup/rollup-win32-ia32-msvc': 4.17.2 + '@rollup/rollup-win32-x64-msvc': 4.17.2 fsevents: 2.3.3 dev: true @@ -10898,15 +10957,15 @@ packages: engines: {node: '>=8'} dev: false - /ts-api-utils@1.0.3(typescript@5.4.4): + /ts-api-utils@1.0.3(typescript@5.4.5): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.4.4 + typescript: 5.4.5 - /ts-loader@9.5.1(typescript@5.4.4)(webpack@5.91.0): + /ts-loader@9.5.1(typescript@5.4.5)(webpack@5.91.0): resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} engines: {node: '>=12.0.0'} peerDependencies: @@ -10918,11 +10977,11 @@ packages: micromatch: 4.0.5 semver: 7.5.4 source-map: 0.7.4 - typescript: 5.4.4 + typescript: 5.4.5 webpack: 5.91.0(webpack-cli@5.1.4) dev: true - /ts-node@10.9.2(@types/node@18.19.31)(typescript@5.4.4): + /ts-node@10.9.2(@types/node@18.19.32)(typescript@5.4.5): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -10941,14 +11000,14 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 18.19.31 + '@types/node': 18.19.32 acorn: 8.10.0 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.4.4 + typescript: 5.4.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -11102,8 +11161,8 @@ packages: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - /typescript@5.4.4: - resolution: {integrity: sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==} + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true @@ -11259,8 +11318,8 @@ packages: engines: {node: '>= 0.8'} dev: true - /vite@5.2.8(@types/node@18.19.31): - resolution: {integrity: sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==} + /vite@5.2.11(@types/node@18.19.32): + resolution: {integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -11287,10 +11346,10 @@ packages: terser: optional: true dependencies: - '@types/node': 18.19.31 + '@types/node': 18.19.32 esbuild: 0.20.2 postcss: 8.4.38 - rollup: 4.14.1 + rollup: 4.17.2 optionalDependencies: fsevents: 2.3.3 dev: true @@ -11754,8 +11813,8 @@ packages: fd-slicer: 1.1.0 dev: false - /yauzl@3.1.2: - resolution: {integrity: sha512-621iCPgEG1wXViDZS/L3h9F8TgrdQV1eayJlJ8j5A2SZg8OdY/1DLf+VxNeD+q5QbMFEAbjjR8nITj7g4nKa0Q==} + /yauzl@3.1.3: + resolution: {integrity: sha512-JCCdmlJJWv7L0q/KylOekyRaUrdEoUxWkWVcgorosTROCFWiS9p2NNPE9Yb91ak7b1N5SxAZEliWpspbZccivw==} engines: {node: '>=12'} dependencies: buffer-crc32: 0.2.13 From 43a2cad13be9e5c6f2a33669f64310a1457a34d5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 12 Apr 2024 16:44:50 +0000 Subject: [PATCH 04/13] chore(deps): update dependency @types/eslint to ^8.56.9 (#2701) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/dts-gen/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dts-gen/package.json b/packages/dts-gen/package.json index a3b4d9289d..0dcf93cbfd 100644 --- a/packages/dts-gen/package.json +++ b/packages/dts-gen/package.json @@ -37,7 +37,7 @@ "prettier": "^3.2.5" }, "devDependencies": { - "@types/eslint": "^8.56.8", + "@types/eslint": "^8.56.9", "@types/lodash": "^4.17.0", "ts-loader": "^9.5.1", "webpack": "^5.91.0", From dea902dd4e8ee40eba809963f814ad18799ac7f6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 12 Apr 2024 18:28:22 +0000 Subject: [PATCH 05/13] chore(deps): update dependency rollup to ^4.14.2 (#2702) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/rest-api-client/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rest-api-client/package.json b/packages/rest-api-client/package.json index 491ace8523..bfa398e36a 100644 --- a/packages/rest-api-client/package.json +++ b/packages/rest-api-client/package.json @@ -61,7 +61,7 @@ "@types/js-base64": "^3.3.1", "@types/mime": "^3.0.4", "@types/qs": "^6.9.14", - "rollup": "^4.14.1", + "rollup": "^4.14.2", "rollup-plugin-ecma-version-validator": "^0.2.13", "rollup-plugin-license": "^3.3.1", "rollup-plugin-node-globals": "^1.4.0", From b188d17f037623e8ac3e2c7e56ec500a93e86f32 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 13 Apr 2024 17:06:45 +0000 Subject: [PATCH 06/13] fix(deps): update dependency qs to ^6.12.1 (#2703) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/rest-api-client/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rest-api-client/package.json b/packages/rest-api-client/package.json index bfa398e36a..e4ef48f7b8 100644 --- a/packages/rest-api-client/package.json +++ b/packages/rest-api-client/package.json @@ -79,7 +79,7 @@ "form-data": "^4.0.0", "js-base64": "^3.7.7", "mime": "^3.0.0", - "qs": "^6.12.0" + "qs": "^6.12.1" }, "exports": { ".": { From c42b97415a96c10a71e85e2762fb57d1c8fe8611 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 13 Apr 2024 18:37:25 +0000 Subject: [PATCH 07/13] chore(deps): update pnpm to v8.15.7 (#2704) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2f5e49fd6d..4bea31202b 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "rimraf": "^5.0.5", "typescript": "^5.4.5" }, - "packageManager": "pnpm@8.15.6", + "packageManager": "pnpm@8.15.7", "pnpm": { "overrides": { "follow-redirects@<1.15.4": ">=1.15.4", From e8f9d4883b421565233422522522be3918cb6e7a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Apr 2024 20:41:53 +0000 Subject: [PATCH 08/13] chore(deps): update dependency rollup to ^4.14.3 (#2705) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/rest-api-client/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rest-api-client/package.json b/packages/rest-api-client/package.json index e4ef48f7b8..3c47c4be10 100644 --- a/packages/rest-api-client/package.json +++ b/packages/rest-api-client/package.json @@ -61,7 +61,7 @@ "@types/js-base64": "^3.3.1", "@types/mime": "^3.0.4", "@types/qs": "^6.9.14", - "rollup": "^4.14.2", + "rollup": "^4.14.3", "rollup-plugin-ecma-version-validator": "^0.2.13", "rollup-plugin-license": "^3.3.1", "rollup-plugin-node-globals": "^1.4.0", From f2906a983538b67f0e2389109e247197733ecc04 Mon Sep 17 00:00:00 2001 From: Tuan Pham Date: Mon, 22 Apr 2024 10:38:08 +0700 Subject: [PATCH 09/13] feat: modify TIMEOUT_MS for new ui --- packages/plugin-uploader/src/reactPage.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/plugin-uploader/src/reactPage.ts b/packages/plugin-uploader/src/reactPage.ts index 6acf673fb8..9587ba43a0 100644 --- a/packages/plugin-uploader/src/reactPage.ts +++ b/packages/plugin-uploader/src/reactPage.ts @@ -5,7 +5,7 @@ import chalk from "chalk"; import type { Lang } from "./lang"; import type { PageInterface } from "./PageInterface"; -const TIMEOUT_MS = 15000; +const TIMEOUT_MS = 10000; const UPLOAD_TIMEOUT_MS = 60000; const IMPORT_BUTTON_SELECTOR = "button[data-testid='PluginImportButton']"; From 941c1ae3f148d097cb503286296ad43dc9680e68 Mon Sep 17 00:00:00 2001 From: tuan-pham <41720778+tuanphamcybozu@users.noreply.github.com> Date: Mon, 22 Apr 2024 11:08:30 +0700 Subject: [PATCH 10/13] test(webpack-plugin-kintone-plugin): fix failed test on windows (#2718) --- .../webpack-plugin-kintone-plugin/src/__tests__/cli.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/webpack-plugin-kintone-plugin/src/__tests__/cli.test.ts b/packages/webpack-plugin-kintone-plugin/src/__tests__/cli.test.ts index f0d4c25c54..182268abb8 100644 --- a/packages/webpack-plugin-kintone-plugin/src/__tests__/cli.test.ts +++ b/packages/webpack-plugin-kintone-plugin/src/__tests__/cli.test.ts @@ -13,12 +13,14 @@ const pluginJsOutputPaths = [ ]; const runWebpack = (config = "webpack.config.js") => { - const webpackCommand = `webpack${os.platform() === "win32" ? ".cmd" : ""}`; + const isWindows = os.platform() === "win32"; + const webpackCommand = `webpack${isWindows ? ".cmd" : ""}`; return spawnSync( webpackCommand, ["--config", config, "--mode", "production"], { cwd: pluginDir, + shell: isWindows, }, ); }; From 1d3afaed9d6852e85f1bc77e729614682b401433 Mon Sep 17 00:00:00 2001 From: hung-nguyen Date: Wed, 24 Apr 2024 09:28:04 +0700 Subject: [PATCH 11/13] refactor: audit code --- packages/plugin-uploader/src/index.ts | 20 +-- .../OldPluginSystemPage.ts} | 20 ++- .../src/pages/PluginSystemPage.ts | 150 ++++++++++++++++++ .../PluginSystemPageBase.ts} | 6 +- .../ReactPluginSystemPage.ts} | 22 +-- .../plugin-uploader/src/pluginSystemPage.ts | 141 ---------------- 6 files changed, 187 insertions(+), 172 deletions(-) rename packages/plugin-uploader/src/{oldPage.ts => pages/OldPluginSystemPage.ts} (72%) create mode 100644 packages/plugin-uploader/src/pages/PluginSystemPage.ts rename packages/plugin-uploader/src/{PageInterface.ts => pages/PluginSystemPageBase.ts} (58%) rename packages/plugin-uploader/src/{reactPage.ts => pages/ReactPluginSystemPage.ts} (72%) delete mode 100644 packages/plugin-uploader/src/pluginSystemPage.ts diff --git a/packages/plugin-uploader/src/index.ts b/packages/plugin-uploader/src/index.ts index 73e1fbb436..e4528402ab 100644 --- a/packages/plugin-uploader/src/index.ts +++ b/packages/plugin-uploader/src/index.ts @@ -1,11 +1,10 @@ import fs from "fs"; - import { getBoundMessage } from "./messages"; -import type { BasicAuth } from "./pluginSystemPage"; -import { PluginSystemPage } from "./pluginSystemPage"; +import type { BasicAuth } from "./pages/PluginSystemPage"; +import { PluginSystemPage } from "./pages/PluginSystemPage"; import type { Lang } from "./lang"; -export interface Option { +interface Option { proxyServer?: string; watch?: boolean; lang: Lang; @@ -38,8 +37,9 @@ export const run = async ( basicAuth, }; try { - let page = await pluginSystemPage.readyForUpload(params); - await pluginSystemPage.upload(page, pluginPath, lang); + await pluginSystemPage.openNewPage(browser); + await pluginSystemPage.readyForUpload(params); + await pluginSystemPage.upload(pluginPath, lang); if (options.watch) { let uploading = false; fs.watch(pluginPath, async () => { @@ -48,21 +48,21 @@ export const run = async ( } try { uploading = true; - await pluginSystemPage.upload(page, pluginPath, lang); + await pluginSystemPage.upload(pluginPath, lang); } catch (e) { console.log(e); console.log(boundMessage("Error_retry")); await browser.close(); browser = await pluginSystemPage.launchBrowser(options.proxyServer); - page = await pluginSystemPage.readyForUpload({ - browser, + await pluginSystemPage.openNewPage(browser); + await pluginSystemPage.readyForUpload({ baseUrl, userName, password, lang, basicAuth, }); - await pluginSystemPage.upload(page, pluginPath, lang); + await pluginSystemPage.upload(pluginPath, lang); } finally { uploading = false; } diff --git a/packages/plugin-uploader/src/oldPage.ts b/packages/plugin-uploader/src/pages/OldPluginSystemPage.ts similarity index 72% rename from packages/plugin-uploader/src/oldPage.ts rename to packages/plugin-uploader/src/pages/OldPluginSystemPage.ts index cec897bda1..961119829a 100644 --- a/packages/plugin-uploader/src/oldPage.ts +++ b/packages/plugin-uploader/src/pages/OldPluginSystemPage.ts @@ -1,17 +1,19 @@ import type { Page } from "puppeteer"; -import type { BoundMessage } from "./messages"; -import { getBoundMessage } from "./messages"; +import type { BoundMessage } from "../messages"; +import { getBoundMessage } from "../messages"; import chalk from "chalk"; -import type { Lang } from "./lang"; -import type { PageInterface } from "./PageInterface"; +import type { Lang } from "../lang"; +import type { PluginSystemPageBase } from "./PluginSystemPageBase"; const TIMEOUT_MS = 10000; const UPLOAD_TIMEOUT_MS = 60000; export const IMPORT_BUTTON_SELECTOR = "#page-admin-system-plugin-index-addplugin"; +const IMPORT_PLUGIN_DIALOG_SELECTOR = ".ocean-ui-dialog"; +const FILE_SELECTOR = '.plupload > input[type="file"]'; -export class OldPage implements PageInterface { +export class OldPluginSystemPage implements PluginSystemPageBase { public async readyForImportButton( page: Page, boundMessage: BoundMessage, @@ -33,9 +35,11 @@ export class OldPage implements PageInterface { const boundMessage = getBoundMessage(lang); console.log(`Trying to upload ${pluginPath}`); await page.click(IMPORT_BUTTON_SELECTOR); - - const file = await page.$('.plupload > input[type="file"]'); - if (file == null) { + await page.waitForSelector(IMPORT_PLUGIN_DIALOG_SELECTOR, { + timeout: TIMEOUT_MS, + }); + const file = await page.$(FILE_SELECTOR); + if (file === null) { throw new Error('input[type="file"] is not found'); } await file.uploadFile(pluginPath); diff --git a/packages/plugin-uploader/src/pages/PluginSystemPage.ts b/packages/plugin-uploader/src/pages/PluginSystemPage.ts new file mode 100644 index 0000000000..0485124427 --- /dev/null +++ b/packages/plugin-uploader/src/pages/PluginSystemPage.ts @@ -0,0 +1,150 @@ +import type { Browser, Page } from "puppeteer"; +import puppeteer from "puppeteer"; +import type { Lang } from "../lang"; +import chalk from "chalk"; +import type { BoundMessage } from "../messages"; +import { getBoundMessage } from "../messages"; +import { ReactPluginSystemPage } from "./ReactPluginSystemPage"; +import type { PluginSystemPageBase } from "./PluginSystemPageBase"; +import { + IMPORT_BUTTON_SELECTOR, + OldPluginSystemPage, +} from "./OldPluginSystemPage"; + +const TIMEOUT_MS = 10000; +const DETECT_PAGE_TIMEOUT_MS = 10000; +const NO_PRIVILEGE_STATUS_CODE = "403"; + +export interface BasicAuth { + username: string; + password: string; +} + +export class PluginSystemPage { + private ui?: PluginSystemPageBase; + private _page?: Page; + + public get page() { + if (this._page === undefined) { + throw new Error( + "Page is not opened yet. Please call openNewPage() first.", + ); + } + return this._page; + } + + public set page(value) { + this._page = value; + } + + private async getUI() { + if (this.ui) { + return this.ui; + } + + const isReactPage = await this.isReactPage(); + this.ui = isReactPage + ? new ReactPluginSystemPage() + : new OldPluginSystemPage(); + + return this.ui; + } + + private async isReactPage(): Promise { + try { + await this.page.waitForSelector(IMPORT_BUTTON_SELECTOR, { + timeout: DETECT_PAGE_TIMEOUT_MS, + }); + return false; + } catch (e) { + return true; + } + } + + public async openNewPage(browser: Browser) { + this._page = await browser.newPage(); + } + + protected async login(options: { + baseUrl: string; + userName: string; + password: string; + boundMessage: BoundMessage; + basicAuth?: BasicAuth; + }): Promise { + const { baseUrl, userName, password, boundMessage, basicAuth } = options; + const loginUrl = `${baseUrl}/login?saml=off`; + + if (basicAuth) { + await this.page.authenticate(basicAuth); + } + + console.log(`Open ${loginUrl}`); + await this.page.goto(loginUrl); + try { + await this.page.waitForSelector(".form-username-slash", { + timeout: TIMEOUT_MS, + }); + } catch (e) { + throw chalk.red(boundMessage("Error_cannotOpenLogin")); + } + + console.log("Trying to log in..."); + await this.page.type(".form-username-slash > input.form-text", userName); + await this.page.type(".form-password-slash > input.form-text", password); + await this.page.click(".login-button"); + + try { + await this.page.waitForNavigation({ + timeout: TIMEOUT_MS, + waitUntil: "domcontentloaded", + }); + } catch (e) { + throw chalk.red(boundMessage("Error_failedLogin")); + } + } + + protected goToPluginSystemPage(baseUrl: string) { + const pluginSystemPageUri = `${baseUrl}/k/admin/system/plugin/`; + console.log(`Navigate to ${pluginSystemPageUri}`); + return this.page.goto(pluginSystemPageUri); + } + + public launchBrowser( + proxy?: string, + ignoreDefaultArgs?: string[], + ): Promise { + const args = proxy ? [`--proxy-server=${proxy}`] : []; + return puppeteer.launch({ args, ignoreDefaultArgs, headless: "shell" }); + } + + public async readyForUpload(options: { + baseUrl: string; + userName: string; + password: string; + lang: Lang; + basicAuth?: BasicAuth; + }): Promise { + const { baseUrl, userName, password, lang, basicAuth } = options; + const boundMessage = getBoundMessage(lang); + + await this.login({ + baseUrl, + userName, + password, + boundMessage, + basicAuth, + }); + + const response = await this.goToPluginSystemPage(baseUrl); + if (!response || response.headers().status === NO_PRIVILEGE_STATUS_CODE) { + throw chalk.red(boundMessage("Error_adminPrivilege")); + } + + await (await this.getUI()).readyForImportButton(this.page, boundMessage); + } + + public async upload(pluginPath: string, lang: Lang): Promise { + await (await this.getUI()).upload(this.page, pluginPath, lang); + } +} diff --git a/packages/plugin-uploader/src/PageInterface.ts b/packages/plugin-uploader/src/pages/PluginSystemPageBase.ts similarity index 58% rename from packages/plugin-uploader/src/PageInterface.ts rename to packages/plugin-uploader/src/pages/PluginSystemPageBase.ts index 0d24aa2131..bcbb1b80bf 100644 --- a/packages/plugin-uploader/src/PageInterface.ts +++ b/packages/plugin-uploader/src/pages/PluginSystemPageBase.ts @@ -1,8 +1,8 @@ -import type { BoundMessage } from "./messages"; +import type { BoundMessage } from "../messages"; import type { Page } from "puppeteer"; -import type { Lang } from "./lang"; +import type { Lang } from "../lang"; -export interface PageInterface { +export interface PluginSystemPageBase { readyForImportButton(page: Page, m: BoundMessage): Promise; upload(page: Page, pluginPath: string, lang: Lang): Promise; } diff --git a/packages/plugin-uploader/src/reactPage.ts b/packages/plugin-uploader/src/pages/ReactPluginSystemPage.ts similarity index 72% rename from packages/plugin-uploader/src/reactPage.ts rename to packages/plugin-uploader/src/pages/ReactPluginSystemPage.ts index 9587ba43a0..ca4991cb25 100644 --- a/packages/plugin-uploader/src/reactPage.ts +++ b/packages/plugin-uploader/src/pages/ReactPluginSystemPage.ts @@ -1,20 +1,21 @@ import type { Page } from "puppeteer"; -import type { BoundMessage } from "./messages"; -import { getBoundMessage } from "./messages"; +import type { BoundMessage } from "../messages"; +import { getBoundMessage } from "../messages"; import chalk from "chalk"; -import type { Lang } from "./lang"; -import type { PageInterface } from "./PageInterface"; +import type { Lang } from "../lang"; +import type { PluginSystemPageBase } from "./PluginSystemPageBase"; const TIMEOUT_MS = 10000; const UPLOAD_TIMEOUT_MS = 60000; const IMPORT_BUTTON_SELECTOR = "button[data-testid='PluginImportButton']"; +const IMPORT_PLUGIN_DIALOG_SELECTOR = + "//div[@data-testid='ImportDialog']//div[contains(@class,'_dialogContent')]"; const FILE_SELECTOR = "label[data-testid='FileSelector'] > input[type='file']"; -const IMPORT_DIALOG_SELECTOR = "div[data-testid='ImportDialog']"; const IMPORT_BUTTON_IN_DIALOG_SELECTOR = "//div[@data-testid='ImportDialog']//div[contains(@class,'_footer')]//button[1]"; -export class ReactPage implements PageInterface { +export class ReactPluginSystemPage implements PluginSystemPageBase { public async readyForImportButton( page: Page, boundMessage: BoundMessage, @@ -36,15 +37,16 @@ export class ReactPage implements PageInterface { const boundMessage = getBoundMessage(lang); console.log(`Trying to upload ${pluginPath}`); await page.click(IMPORT_BUTTON_SELECTOR); - + await page.waitForSelector(`xpath/${IMPORT_PLUGIN_DIALOG_SELECTOR}`, { + timeout: TIMEOUT_MS, + }); const file = await page.$(FILE_SELECTOR); - if (file == null) { + if (file === null) { throw new Error('input[type="file"] is not found'); } - await file.uploadFile(pluginPath); + await file.uploadFile(pluginPath); await page.click(`xpath/${IMPORT_BUTTON_IN_DIALOG_SELECTOR}`); - await page.waitForSelector(`xpath/${IMPORT_BUTTON_IN_DIALOG_SELECTOR}`, { hidden: true, timeout: UPLOAD_TIMEOUT_MS, diff --git a/packages/plugin-uploader/src/pluginSystemPage.ts b/packages/plugin-uploader/src/pluginSystemPage.ts deleted file mode 100644 index 5030963674..0000000000 --- a/packages/plugin-uploader/src/pluginSystemPage.ts +++ /dev/null @@ -1,141 +0,0 @@ -import type { Browser, Page } from "puppeteer"; -import puppeteer from "puppeteer"; -import type { Lang } from "./lang"; -import chalk from "chalk"; -import type { BoundMessage } from "./messages"; -import { getBoundMessage } from "./messages"; -import { ReactPage } from "./reactPage"; -import type { PageInterface } from "./PageInterface"; -import { IMPORT_BUTTON_SELECTOR, OldPage } from "./oldPage"; - -const TIMEOUT_MS = 10000; -const DETECT_PAGE_TIMEOUT_MS = 10000; -const NO_PRIVILEGE_STATUS_CODE = "403"; - -export interface BasicAuth { - username: string; - password: string; -} - -export class PluginSystemPage { - private static ui?: PageInterface; - - static async getUI(page: Page) { - if (PluginSystemPage.ui) { - return PluginSystemPage.ui; - } - - PluginSystemPage.ui = (await this.isReactPage(page)) - ? new ReactPage() - : new OldPage(); - - return PluginSystemPage.ui; - } - - private static async isReactPage(page: Page): Promise { - try { - await page.waitForSelector(IMPORT_BUTTON_SELECTOR, { - timeout: DETECT_PAGE_TIMEOUT_MS, - }); - return false; - } catch (e) { - return true; - } - } - - protected async login(options: { - baseUrl: string; - userName: string; - password: string; - page: Page; - boundMessage: BoundMessage; - basicAuth?: BasicAuth; - }): Promise { - const { baseUrl, userName, password, page, boundMessage, basicAuth } = - options; - const loginUrl = `${baseUrl}/login?saml=off`; - - if (basicAuth) { - await page.authenticate(basicAuth); - } - - console.log(`Open ${loginUrl}`); - await page.goto(loginUrl); - try { - await page.waitForSelector(".form-username-slash", { - timeout: TIMEOUT_MS, - }); - } catch (e) { - throw chalk.red(boundMessage("Error_cannotOpenLogin")); - } - - console.log("Trying to log in..."); - await page.type(".form-username-slash > input.form-text", userName); - await page.type(".form-password-slash > input.form-text", password); - await page.click(".login-button"); - - try { - await page.waitForNavigation({ - timeout: TIMEOUT_MS, - waitUntil: "domcontentloaded", - }); - } catch (e) { - throw chalk.red(boundMessage("Error_failedLogin")); - } - } - - protected goToPluginSystemPage(baseUrl: string, page: Page) { - const pluginUrl = `${baseUrl}/k/admin/system/plugin/`; - console.log(`Navigate to ${pluginUrl}`); - return page.goto(pluginUrl); - } - - public launchBrowser( - proxy?: string, - ignoreDefaultArgs?: string[], - ): Promise { - const args = proxy ? [`--proxy-server=${proxy}`] : []; - return puppeteer.launch({ args, ignoreDefaultArgs, headless: "shell" }); - } - - async readyForUpload(options: { - browser: Browser; - baseUrl: string; - userName: string; - password: string; - lang: Lang; - basicAuth?: BasicAuth; - }): Promise { - const { browser, baseUrl, userName, password, lang, basicAuth } = options; - const boundMessage = getBoundMessage(lang); - const page = await browser.newPage(); - - await this.login({ - baseUrl, - userName, - password, - page, - boundMessage, - basicAuth, - }); - - const response = await this.goToPluginSystemPage(baseUrl, page); - if (!response || response.headers().status === NO_PRIVILEGE_STATUS_CODE) { - throw chalk.red(boundMessage("Error_adminPrivilege")); - } - - await ( - await PluginSystemPage.getUI(page) - ).readyForImportButton(page, boundMessage); - - return page; - } - - public async upload( - page: Page, - pluginPath: string, - lang: Lang, - ): Promise { - await (await PluginSystemPage.getUI(page)).upload(page, pluginPath, lang); - } -} From f8405a1c74acea5239b3180ce4213c98a5dc60e7 Mon Sep 17 00:00:00 2001 From: hung-nguyen Date: Wed, 24 Apr 2024 18:01:26 +0700 Subject: [PATCH 12/13] refactor: convert to PluginSystemController --- .../src/controllers/ControllerBase.ts | 103 ++++++++++++ .../src/controllers/PluginSystemController.ts | 82 ++++++++++ packages/plugin-uploader/src/index.ts | 51 +++--- packages/plugin-uploader/src/messages.ts | 2 +- .../src/pages/OldPluginSystemPage.ts | 4 +- .../src/pages/PluginSystemPage.ts | 150 ------------------ ...geBase.ts => PluginSystemPageInterface.ts} | 2 +- .../src/pages/ReactPluginSystemPage.ts | 4 +- 8 files changed, 216 insertions(+), 182 deletions(-) create mode 100644 packages/plugin-uploader/src/controllers/ControllerBase.ts create mode 100644 packages/plugin-uploader/src/controllers/PluginSystemController.ts delete mode 100644 packages/plugin-uploader/src/pages/PluginSystemPage.ts rename packages/plugin-uploader/src/pages/{PluginSystemPageBase.ts => PluginSystemPageInterface.ts} (85%) diff --git a/packages/plugin-uploader/src/controllers/ControllerBase.ts b/packages/plugin-uploader/src/controllers/ControllerBase.ts new file mode 100644 index 0000000000..4b6b43421e --- /dev/null +++ b/packages/plugin-uploader/src/controllers/ControllerBase.ts @@ -0,0 +1,103 @@ +import type { Browser, Page } from "puppeteer"; +import puppeteer from "puppeteer"; +import chalk from "chalk"; +import type { BoundMessage } from "../messages"; + +const TIMEOUT_MS = 10000; + +export interface BasicAuth { + username: string; + password: string; +} + +export abstract class ControllerBase { + private _browser?: Browser; + private _page?: Page; + + public get browser() { + if (this._browser === undefined) { + throw new Error( + "Browser is not launched yet. Please call launchBrowser() first.", + ); + } + return this._browser; + } + + public set browser(value) { + this._browser = value; + } + + public get page() { + if (this._page === undefined) { + throw new Error( + "Page is not opened yet. Please call openNewPage() first.", + ); + } + return this._page; + } + + public set page(value) { + this._page = value; + } + + public async launchBrowser( + options: { + proxy?: string; + ignoreDefaultArgs?: string[]; + } = {}, + ) { + const args = options.proxy ? [`--proxy-server=${options.proxy}`] : []; + this._browser = await puppeteer.launch({ + args, + ignoreDefaultArgs: options.ignoreDefaultArgs, + headless: "shell", + }); + } + + public async closeBrowser() { + return this.browser.close(); + } + + public async openNewPage() { + this._page = await this.browser.newPage(); + } + + protected async login(options: { + baseUrl: string; + userName: string; + password: string; + boundMessage: BoundMessage; + basicAuth?: BasicAuth; + }): Promise { + const { baseUrl, userName, password, boundMessage, basicAuth } = options; + const loginUrl = `${baseUrl}/login?saml=off`; + + if (basicAuth) { + await this.page.authenticate(basicAuth); + } + + console.log(`Open ${loginUrl}`); + await this.page.goto(loginUrl); + try { + await this.page.waitForSelector(".form-username-slash", { + timeout: TIMEOUT_MS, + }); + } catch (e) { + throw chalk.red(boundMessage("Error_cannotOpenLogin")); + } + + console.log("Trying to log in..."); + await this.page.type(".form-username-slash > input.form-text", userName); + await this.page.type(".form-password-slash > input.form-text", password); + await this.page.click(".login-button"); + + try { + await this.page.waitForNavigation({ + timeout: TIMEOUT_MS, + waitUntil: "domcontentloaded", + }); + } catch (e) { + throw chalk.red(boundMessage("Error_failedLogin")); + } + } +} diff --git a/packages/plugin-uploader/src/controllers/PluginSystemController.ts b/packages/plugin-uploader/src/controllers/PluginSystemController.ts new file mode 100644 index 0000000000..a558054a97 --- /dev/null +++ b/packages/plugin-uploader/src/controllers/PluginSystemController.ts @@ -0,0 +1,82 @@ +import type { Lang } from "../lang"; +import chalk from "chalk"; +import { getBoundMessage } from "../messages"; +import { ReactPluginSystemPage } from "../pages/ReactPluginSystemPage"; +import type { PluginSystemPageInterface } from "../pages/PluginSystemPageInterface"; +import { + IMPORT_BUTTON_SELECTOR, + OldPluginSystemPage, +} from "../pages/OldPluginSystemPage"; +import { ControllerBase } from "./ControllerBase"; + +const DETECT_PAGE_TIMEOUT_MS = 10000; +const NO_PRIVILEGE_STATUS_CODE = "403"; + +export interface BasicAuth { + username: string; + password: string; +} + +export default class PluginSystemController extends ControllerBase { + private ui?: PluginSystemPageInterface; + + private async getUI() { + if (this.ui) { + return this.ui; + } + + const isReactPage = await this.isReactPage(); + this.ui = isReactPage + ? new ReactPluginSystemPage() + : new OldPluginSystemPage(); + + return this.ui; + } + + private async isReactPage(): Promise { + try { + await this.page.waitForSelector(IMPORT_BUTTON_SELECTOR, { + timeout: DETECT_PAGE_TIMEOUT_MS, + }); + return false; + } catch (e) { + return true; + } + } + + protected async goToPluginSystemPage(baseUrl: string) { + const pluginSystemPageUri = `${baseUrl}/k/admin/system/plugin/`; + console.log(`Navigate to ${pluginSystemPageUri}`); + return this.page.goto(pluginSystemPageUri); + } + + public async readyForUpload(options: { + baseUrl: string; + userName: string; + password: string; + lang: Lang; + basicAuth?: BasicAuth; + }): Promise { + const { baseUrl, userName, password, lang, basicAuth } = options; + const boundMessage = getBoundMessage(lang); + + await this.login({ + baseUrl, + userName, + password, + boundMessage, + basicAuth, + }); + + const response = await this.goToPluginSystemPage(baseUrl); + if (!response || response.headers().status === NO_PRIVILEGE_STATUS_CODE) { + throw chalk.red(boundMessage("Error_adminPrivilege")); + } + + await (await this.getUI()).readyForImportButton(this.page, boundMessage); + } + + public async upload(pluginPath: string, lang: Lang): Promise { + await (await this.getUI()).upload(this.page, pluginPath, lang); + } +} diff --git a/packages/plugin-uploader/src/index.ts b/packages/plugin-uploader/src/index.ts index e4528402ab..cc0bee1089 100644 --- a/packages/plugin-uploader/src/index.ts +++ b/packages/plugin-uploader/src/index.ts @@ -1,7 +1,7 @@ import fs from "fs"; import { getBoundMessage } from "./messages"; -import type { BasicAuth } from "./pages/PluginSystemPage"; -import { PluginSystemPage } from "./pages/PluginSystemPage"; +import type { BasicAuth } from "./controllers/ControllerBase"; +import PluginSystemController from "./controllers/PluginSystemController"; import type { Lang } from "./lang"; interface Option { @@ -19,27 +19,26 @@ export const run = async ( pluginPath: string, options: Option, ): Promise => { - const pluginSystemPage = new PluginSystemPage(); - let browser = await pluginSystemPage.launchBrowser( - options.proxyServer, - options.puppeteerIgnoreDefaultArgs, - ); - const { lang, basicAuth } = options; const boundMessage = getBoundMessage(lang); - const params = { - browser, - baseUrl, - userName, - password, - lang, - basicAuth, + const browserOptions = { + proxy: options.proxyServer, + ignoreDefaultArgs: options.puppeteerIgnoreDefaultArgs, }; + const pluginSystemController = new PluginSystemController(); + await pluginSystemController.launchBrowser(browserOptions); + try { - await pluginSystemPage.openNewPage(browser); - await pluginSystemPage.readyForUpload(params); - await pluginSystemPage.upload(pluginPath, lang); + await pluginSystemController.openNewPage(); + await pluginSystemController.readyForUpload({ + baseUrl, + userName, + password, + lang, + basicAuth, + }); + await pluginSystemController.upload(pluginPath, lang); if (options.watch) { let uploading = false; fs.watch(pluginPath, async () => { @@ -48,30 +47,30 @@ export const run = async ( } try { uploading = true; - await pluginSystemPage.upload(pluginPath, lang); + await pluginSystemController.upload(pluginPath, lang); } catch (e) { console.log(e); console.log(boundMessage("Error_retry")); - await browser.close(); - browser = await pluginSystemPage.launchBrowser(options.proxyServer); - await pluginSystemPage.openNewPage(browser); - await pluginSystemPage.readyForUpload({ + await pluginSystemController.closeBrowser(); + await pluginSystemController.launchBrowser(browserOptions); + await pluginSystemController.openNewPage(); + await pluginSystemController.readyForUpload({ baseUrl, userName, password, lang, basicAuth, }); - await pluginSystemPage.upload(pluginPath, lang); + await pluginSystemController.upload(pluginPath, lang); } finally { uploading = false; } }); } else { - await browser.close(); + await pluginSystemController.closeBrowser(); } } catch (e) { console.error(boundMessage("Error"), e); - await browser.close(); + await pluginSystemController.closeBrowser(); } }; diff --git a/packages/plugin-uploader/src/messages.ts b/packages/plugin-uploader/src/messages.ts index a08d7d8171..1b856ec59a 100644 --- a/packages/plugin-uploader/src/messages.ts +++ b/packages/plugin-uploader/src/messages.ts @@ -48,7 +48,7 @@ const messages = { }, Error_notDisplayImportButton: { en: "Import Button is not displayed.", - ja: "Import Button is not displayed.", + ja: "「読み込む」ボタンが表示されていません。", }, Uploaded: { en: "has been uploaded!", diff --git a/packages/plugin-uploader/src/pages/OldPluginSystemPage.ts b/packages/plugin-uploader/src/pages/OldPluginSystemPage.ts index 961119829a..4af667db2d 100644 --- a/packages/plugin-uploader/src/pages/OldPluginSystemPage.ts +++ b/packages/plugin-uploader/src/pages/OldPluginSystemPage.ts @@ -3,7 +3,7 @@ import type { BoundMessage } from "../messages"; import { getBoundMessage } from "../messages"; import chalk from "chalk"; import type { Lang } from "../lang"; -import type { PluginSystemPageBase } from "./PluginSystemPageBase"; +import type { PluginSystemPageInterface } from "./PluginSystemPageInterface"; const TIMEOUT_MS = 10000; const UPLOAD_TIMEOUT_MS = 60000; @@ -13,7 +13,7 @@ export const IMPORT_BUTTON_SELECTOR = const IMPORT_PLUGIN_DIALOG_SELECTOR = ".ocean-ui-dialog"; const FILE_SELECTOR = '.plupload > input[type="file"]'; -export class OldPluginSystemPage implements PluginSystemPageBase { +export class OldPluginSystemPage implements PluginSystemPageInterface { public async readyForImportButton( page: Page, boundMessage: BoundMessage, diff --git a/packages/plugin-uploader/src/pages/PluginSystemPage.ts b/packages/plugin-uploader/src/pages/PluginSystemPage.ts deleted file mode 100644 index 0485124427..0000000000 --- a/packages/plugin-uploader/src/pages/PluginSystemPage.ts +++ /dev/null @@ -1,150 +0,0 @@ -import type { Browser, Page } from "puppeteer"; -import puppeteer from "puppeteer"; -import type { Lang } from "../lang"; -import chalk from "chalk"; -import type { BoundMessage } from "../messages"; -import { getBoundMessage } from "../messages"; -import { ReactPluginSystemPage } from "./ReactPluginSystemPage"; -import type { PluginSystemPageBase } from "./PluginSystemPageBase"; -import { - IMPORT_BUTTON_SELECTOR, - OldPluginSystemPage, -} from "./OldPluginSystemPage"; - -const TIMEOUT_MS = 10000; -const DETECT_PAGE_TIMEOUT_MS = 10000; -const NO_PRIVILEGE_STATUS_CODE = "403"; - -export interface BasicAuth { - username: string; - password: string; -} - -export class PluginSystemPage { - private ui?: PluginSystemPageBase; - private _page?: Page; - - public get page() { - if (this._page === undefined) { - throw new Error( - "Page is not opened yet. Please call openNewPage() first.", - ); - } - return this._page; - } - - public set page(value) { - this._page = value; - } - - private async getUI() { - if (this.ui) { - return this.ui; - } - - const isReactPage = await this.isReactPage(); - this.ui = isReactPage - ? new ReactPluginSystemPage() - : new OldPluginSystemPage(); - - return this.ui; - } - - private async isReactPage(): Promise { - try { - await this.page.waitForSelector(IMPORT_BUTTON_SELECTOR, { - timeout: DETECT_PAGE_TIMEOUT_MS, - }); - return false; - } catch (e) { - return true; - } - } - - public async openNewPage(browser: Browser) { - this._page = await browser.newPage(); - } - - protected async login(options: { - baseUrl: string; - userName: string; - password: string; - boundMessage: BoundMessage; - basicAuth?: BasicAuth; - }): Promise { - const { baseUrl, userName, password, boundMessage, basicAuth } = options; - const loginUrl = `${baseUrl}/login?saml=off`; - - if (basicAuth) { - await this.page.authenticate(basicAuth); - } - - console.log(`Open ${loginUrl}`); - await this.page.goto(loginUrl); - try { - await this.page.waitForSelector(".form-username-slash", { - timeout: TIMEOUT_MS, - }); - } catch (e) { - throw chalk.red(boundMessage("Error_cannotOpenLogin")); - } - - console.log("Trying to log in..."); - await this.page.type(".form-username-slash > input.form-text", userName); - await this.page.type(".form-password-slash > input.form-text", password); - await this.page.click(".login-button"); - - try { - await this.page.waitForNavigation({ - timeout: TIMEOUT_MS, - waitUntil: "domcontentloaded", - }); - } catch (e) { - throw chalk.red(boundMessage("Error_failedLogin")); - } - } - - protected goToPluginSystemPage(baseUrl: string) { - const pluginSystemPageUri = `${baseUrl}/k/admin/system/plugin/`; - console.log(`Navigate to ${pluginSystemPageUri}`); - return this.page.goto(pluginSystemPageUri); - } - - public launchBrowser( - proxy?: string, - ignoreDefaultArgs?: string[], - ): Promise { - const args = proxy ? [`--proxy-server=${proxy}`] : []; - return puppeteer.launch({ args, ignoreDefaultArgs, headless: "shell" }); - } - - public async readyForUpload(options: { - baseUrl: string; - userName: string; - password: string; - lang: Lang; - basicAuth?: BasicAuth; - }): Promise { - const { baseUrl, userName, password, lang, basicAuth } = options; - const boundMessage = getBoundMessage(lang); - - await this.login({ - baseUrl, - userName, - password, - boundMessage, - basicAuth, - }); - - const response = await this.goToPluginSystemPage(baseUrl); - if (!response || response.headers().status === NO_PRIVILEGE_STATUS_CODE) { - throw chalk.red(boundMessage("Error_adminPrivilege")); - } - - await (await this.getUI()).readyForImportButton(this.page, boundMessage); - } - - public async upload(pluginPath: string, lang: Lang): Promise { - await (await this.getUI()).upload(this.page, pluginPath, lang); - } -} diff --git a/packages/plugin-uploader/src/pages/PluginSystemPageBase.ts b/packages/plugin-uploader/src/pages/PluginSystemPageInterface.ts similarity index 85% rename from packages/plugin-uploader/src/pages/PluginSystemPageBase.ts rename to packages/plugin-uploader/src/pages/PluginSystemPageInterface.ts index bcbb1b80bf..b69e0738e7 100644 --- a/packages/plugin-uploader/src/pages/PluginSystemPageBase.ts +++ b/packages/plugin-uploader/src/pages/PluginSystemPageInterface.ts @@ -2,7 +2,7 @@ import type { BoundMessage } from "../messages"; import type { Page } from "puppeteer"; import type { Lang } from "../lang"; -export interface PluginSystemPageBase { +export interface PluginSystemPageInterface { readyForImportButton(page: Page, m: BoundMessage): Promise; upload(page: Page, pluginPath: string, lang: Lang): Promise; } diff --git a/packages/plugin-uploader/src/pages/ReactPluginSystemPage.ts b/packages/plugin-uploader/src/pages/ReactPluginSystemPage.ts index ca4991cb25..89abe7d8a0 100644 --- a/packages/plugin-uploader/src/pages/ReactPluginSystemPage.ts +++ b/packages/plugin-uploader/src/pages/ReactPluginSystemPage.ts @@ -3,7 +3,7 @@ import type { BoundMessage } from "../messages"; import { getBoundMessage } from "../messages"; import chalk from "chalk"; import type { Lang } from "../lang"; -import type { PluginSystemPageBase } from "./PluginSystemPageBase"; +import type { PluginSystemPageInterface } from "./PluginSystemPageInterface"; const TIMEOUT_MS = 10000; const UPLOAD_TIMEOUT_MS = 60000; @@ -15,7 +15,7 @@ const FILE_SELECTOR = "label[data-testid='FileSelector'] > input[type='file']"; const IMPORT_BUTTON_IN_DIALOG_SELECTOR = "//div[@data-testid='ImportDialog']//div[contains(@class,'_footer')]//button[1]"; -export class ReactPluginSystemPage implements PluginSystemPageBase { +export class ReactPluginSystemPage implements PluginSystemPageInterface { public async readyForImportButton( page: Page, boundMessage: BoundMessage, From b875af32647056619fe81c556000bd3631630696 Mon Sep 17 00:00:00 2001 From: hung-nguyen Date: Fri, 26 Apr 2024 11:43:06 +0700 Subject: [PATCH 13/13] fix: no administrator privileges --- .../src/controllers/PluginSystemController.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/plugin-uploader/src/controllers/PluginSystemController.ts b/packages/plugin-uploader/src/controllers/PluginSystemController.ts index a558054a97..61df774ae7 100644 --- a/packages/plugin-uploader/src/controllers/PluginSystemController.ts +++ b/packages/plugin-uploader/src/controllers/PluginSystemController.ts @@ -10,7 +10,7 @@ import { import { ControllerBase } from "./ControllerBase"; const DETECT_PAGE_TIMEOUT_MS = 10000; -const NO_PRIVILEGE_STATUS_CODE = "403"; +const NO_PRIVILEGE_STATUS_CODE = "CB_NO02"; export interface BasicAuth { username: string; @@ -69,7 +69,11 @@ export default class PluginSystemController extends ControllerBase { }); const response = await this.goToPluginSystemPage(baseUrl); - if (!response || response.headers().status === NO_PRIVILEGE_STATUS_CODE) { + if ( + !response || + (response.headers()["x-cybozu-error"] && + response.headers()["x-cybozu-error"] === NO_PRIVILEGE_STATUS_CODE) + ) { throw chalk.red(boundMessage("Error_adminPrivilege")); }