diff --git a/README.md b/README.md index 03ec03a8..5233b53e 100644 --- a/README.md +++ b/README.md @@ -14,22 +14,22 @@ This repository contains examples for common use cases and API implementations. ## Examples -| **Example** | **Description** | **Live Launch** | -| -------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [container-platform-starter](./how-to/container-platform-starter) | This example shows a simple platform with a single view. | [Example](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fcontainer-platform-starter%2Fmanifest.fin.json) | -| [create-window](./how-to/create-window) | This example shows how to create a dynamic window or from a manifest. | [Example](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fcreate-window%2Fmanifest.fin.json) | -| [use-security-realms](./how-to/use-security-realms) | This example shows you security realms work with multiple target environments | [Example](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-security-realms%2Fmanifest.fin.json) | -| [use-preloads](./how-to/use-preloads) | This example shows you a number of examples on how preload scripts can be used in your application | [Example 1](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-preloads-basic%2Fmanifest.fin.json)
[Example 2](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-preloads-restart-on-refresh%2Fmanifest.fin.json) | -| [use-channel-api](./how-to/use-channel-api) | This example shows you a number of examples on how to use the channel api for messaging | [Example](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-channel-api-issue-commands-to-a-platform%2Fmanifest.fin.json) | -| [use-dynamic-manifest](./how-to/use-dynamic-manifest) | This example contains examples of generating a manifest file dynamically | | -| [integration-excel](./how-to/integration-excel) | This example demonstrates how to integration with Excel using the OpenFin adaptor | [Example](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fintegration-excel%2Fmanifest.fin.json) | -| [use-popup-window](./how-to/use-popup-window/) | This example contains various examples of how to use popup windows | [Example 1](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-popup-window-advanced%2Fmanifest.fin.json)
[Example 2](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-popup-window-modal%2Fmanifest.fin.json)
[Example 3](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-popup-window-single-result%2Fmanifest.fin.json)
[Example 4](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-popup-window-multiple-results%2Fmanifest.fin.json) | -| [use-window-options](./how-to/use-window-options/) | This example demonstrates the options available for opening windows | [Example](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-window-options%2Fmanifest.fin.json) | -| [use-interop](./how-to/use-interop/) | This example contains various implementations and use cases for the Interop API | [Example](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-interop-setup-multi-platform-interop%2Fmanifest.fin.json) | -| [use-a-manifest](./how-to/use-a-manifest/) | This example contains various examples of how to use the OpenFin manifest | [Example](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-a-manifest-create-a-single-page-platform%2Fmanifest.fin.json) | -| [use-content-creation-rules](./how-to/use-content-creation-rules/) | This example demonstrates how content creation rules can be applied | [Example](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-content-creation-rules%2Fmanifest.fin.json) | -| [use-logging-apis](./how-to/use-logging-apis/) | This example shows how to use OpenFin APIs to retrieve logs and send them to a server. | | -| [use-launch-external-process](./how-to/use-launch-external-process/) | This example demonstrates how to use the launch external process secure api. | [Example](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-launch-external-process%2Fmanifest.fin.json) | +| **Example** | **Description** | **Live Launch** | +| -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [container-platform-starter](./how-to/container-platform-starter) | This example shows a simple platform with a single view. | [Example](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fcontainer-platform-starter%2Fmanifest.fin.json) | +| [create-window](./how-to/create-window) | This example shows how to create a dynamic window or from a manifest. | [Example](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fcreate-window%2Fmanifest.fin.json) | +| [use-security-realms](./how-to/use-security-realms) | This example shows you security realms work with multiple target environments | [Example](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-security-realms%2Fmanifest.fin.json) | +| [use-preloads](./how-to/use-preloads) | This example shows you a number of examples on how preload scripts can be used in your application | [Example 1](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-preloads-basic%2Fmanifest.fin.json)
[Example 2](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-preloads-restart-on-refresh%2Fmanifest.fin.json) | +| [use-channel-api](./how-to/use-channel-api) | This example shows you a number of examples on how to use the channel api for messaging | [Example](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-channel-api-issue-commands-to-a-platform%2Fmanifest.fin.json) | +| [use-dynamic-manifest](./how-to/use-dynamic-manifest) | This example contains examples of generating a manifest file dynamically | | +| [integration-excel](./how-to/integration-excel) | This example demonstrates how to integration with Excel using the OpenFin adaptor | [Example](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fintegration-excel%2Fmanifest.fin.json) | +| [use-popup-window](./how-to/use-popup-window/) | This example contains various examples of how to use popup windows | [Example 1](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-popup-window-advanced%2Fmanifest.fin.json)
[Example 2](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-popup-window-modal%2Fmanifest.fin.json)
[Example 3](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-popup-window-single-result%2Fmanifest.fin.json)
[Example 4](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-popup-window-multiple-results%2Fmanifest.fin.json) | +| [use-window-options](./how-to/use-window-options/) | This example demonstrates the options available for opening windows | [Example](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-window-options%2Fmanifest.fin.json) | +| [use-interop](./how-to/use-interop/) | This example contains various implementations and use cases for the Interop API. Including Interop Broker to Interop Broker communication on the same machine and cross machine/platform communication using our Cloud Interop solution. | [Example](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-interop-setup-multi-platform-interop%2Fmanifest.fin.json) | +| [use-a-manifest](./how-to/use-a-manifest/) | This example contains various examples of how to use the OpenFin manifest | [Example](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-a-manifest-create-a-single-page-platform%2Fmanifest.fin.json) | +| [use-content-creation-rules](./how-to/use-content-creation-rules/) | This example demonstrates how content creation rules can be applied | [Example](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-content-creation-rules%2Fmanifest.fin.json) | +| [use-logging-apis](./how-to/use-logging-apis/) | This example shows how to use OpenFin APIs to retrieve logs and send them to a server. | | +| [use-launch-external-process](./how-to/use-launch-external-process/) | This example demonstrates how to use the launch external process secure api. | [Example](https://start.openfin.co/?manifest=https%3A%2F%2Fbuilt-on-openfin.github.io%2Fcontainer-starter%2Fmain%2Fuse-launch-external-process%2Fmanifest.fin.json) | ## Before you get started diff --git a/how-to/automation-testing/create-window-js/package.json b/how-to/automation-testing/create-window-js/package.json index 869b628c..090fdc71 100644 --- a/how-to/automation-testing/create-window-js/package.json +++ b/how-to/automation-testing/create-window-js/package.json @@ -1,22 +1,21 @@ { - "name": "automation-testing-create-window-js", - "version": "1.0.0", - "description": "OpenFin Container Starter Automation Tests", - "scripts": { - "build": "echo Nothing to build", - "test-local-mocha": "of-automation http://localhost:5050/manifest.fin.json ./tests/**/*.spec.js --reporter ./mocha.reporter.json", - "setup": "npm install && npm run build", - "validate": "npm --prefix ../../../ run validate" - }, - "author": "ameet.jayawant@openfin.co", - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "@openfin/automation-cli": "^1.0.13", - "@openfin/automation-helpers": "^1.0.13", - "@openfin/automation-native": "^1.0.13", - "chai": "4.3.7", - "mochawesome": "7.1.3", - "@openfin/core": "36.80.10", - "@openfin/node-adapter": "36.80.10" - } -} \ No newline at end of file + "name": "automation-testing-create-window-js", + "version": "36.80.11", + "description": "OpenFin Container Starter Automation Tests", + "scripts": { + "build": "echo Nothing to build", + "test-local-mocha": "of-automation http://localhost:5050/manifest.fin.json ./tests/**/*.spec.js --reporter ./mocha.reporter.json", + "setup": "npm install && npm run build", + "validate": "npm --prefix ../../../ run validate" + }, + "author": "ameet.jayawant@openfin.co", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "@openfin/automation-cli": "^1.2.0", + "@openfin/automation-helpers": "^1.2.0", + "chai": "5.1.0", + "mochawesome": "7.1.3", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11" + } +} diff --git a/how-to/automation-testing/use-launch-external-process-js/package.json b/how-to/automation-testing/use-launch-external-process-js/package.json index 17cfd966..22e8773e 100644 --- a/how-to/automation-testing/use-launch-external-process-js/package.json +++ b/how-to/automation-testing/use-launch-external-process-js/package.json @@ -1,22 +1,21 @@ { - "name": "automation-testing-use-window-options-js", - "version": "1.0.0", - "description": "OpenFin Container Starter Automation Tests", - "scripts": { - "build": "echo Nothing to build", - "test-local-mocha": "of-automation http://localhost:5050/manifest.fin.json ./tests/**/*.spec.js --reporter ./mocha.reporter.json", - "setup": "npm install && npm run build", - "validate": "npm --prefix ../../../ run validate" - }, - "author": "ameet.jayawant@openfin.co", - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "@openfin/automation-cli": "^1.0.13", - "@openfin/automation-helpers": "^1.0.13", - "@openfin/automation-native": "^1.0.13", - "chai": "4.3.7", - "mochawesome": "7.1.3", - "@openfin/core": "36.80.10", - "@openfin/node-adapter": "36.80.10" - } -} \ No newline at end of file + "name": "automation-testing-use-window-options-js", + "version": "36.80.11", + "description": "OpenFin Container Starter Automation Tests", + "scripts": { + "build": "echo Nothing to build", + "test-local-mocha": "of-automation http://localhost:5050/manifest.fin.json ./tests/**/*.spec.js --reporter ./mocha.reporter.json", + "setup": "npm install && npm run build", + "validate": "npm --prefix ../../../ run validate" + }, + "author": "ameet.jayawant@openfin.co", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "@openfin/automation-cli": "^1.2.0", + "@openfin/automation-helpers": "^1.2.0", + "chai": "5.1.0", + "mochawesome": "7.1.3", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11" + } +} diff --git a/how-to/automation-testing/use-window-options-js/package.json b/how-to/automation-testing/use-window-options-js/package.json index 18bfae9b..c8595bfb 100644 --- a/how-to/automation-testing/use-window-options-js/package.json +++ b/how-to/automation-testing/use-window-options-js/package.json @@ -1,22 +1,21 @@ { - "name": "automation-testing-use-launch-external-process-js", - "version": "1.0.0", - "description": "OpenFin Container Starter Automation Tests", - "scripts": { - "build": "echo Nothing to build", - "test-local-mocha": "of-automation http://localhost:5050/manifest.fin.json ./tests/**/*.spec.js --reporter ./mocha.reporter.json", - "setup": "npm install && npm run build", - "validate": "npm --prefix ../../../ run validate" - }, - "author": "ameet.jayawant@openfin.co", - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "@openfin/automation-cli": "^1.0.13", - "@openfin/automation-helpers": "^1.0.13", - "@openfin/automation-native": "^1.0.13", - "chai": "4.3.7", - "mochawesome": "7.1.3", - "@openfin/core": "36.80.10", - "@openfin/node-adapter": "36.80.10" - } -} \ No newline at end of file + "name": "automation-testing-use-launch-external-process-js", + "version": "36.80.11", + "description": "OpenFin Container Starter Automation Tests", + "scripts": { + "build": "echo Nothing to build", + "test-local-mocha": "of-automation http://localhost:5050/manifest.fin.json ./tests/**/*.spec.js --reporter ./mocha.reporter.json", + "setup": "npm install && npm run build", + "validate": "npm --prefix ../../../ run validate" + }, + "author": "ameet.jayawant@openfin.co", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "@openfin/automation-cli": "^1.2.0", + "@openfin/automation-helpers": "^1.2.0", + "chai": "5.1.0", + "mochawesome": "7.1.3", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11" + } +} diff --git a/how-to/container-platform-starter/package.json b/how-to/container-platform-starter/package.json index c87fe2df..a5226c48 100644 --- a/how-to/container-platform-starter/package.json +++ b/how-to/container-platform-starter/package.json @@ -1,23 +1,23 @@ { - "name": "container-platform-starter", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "kill": "node ./scripts/kill.mjs", - "client": "node ./scripts/launch.mjs", - "build-client": "webpack build --config ./client/webpack.config.js --mode=development", - "build": "npm run build-client", - "start": "npx --yes http-server ./public -p 5050 -c-1", - "setup": "cd ../../ && npm install && cd how-to/container-platform-starter && npm run build" - }, - "license": "ISC", - "devDependencies": { - "@openfin/core": "36.80.10", - "@openfin/node-adapter": "36.80.10", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", - "webpack-cli": "^5.1.4" - } -} \ No newline at end of file + "name": "container-platform-starter", + "version": "36.80.11", + "description": "", + "main": "index.js", + "scripts": { + "kill": "node ./scripts/kill.mjs", + "client": "node ./scripts/launch.mjs", + "build-client": "webpack build --config ./client/webpack.config.js --mode=development", + "build": "npm run build-client", + "start": "npx --yes http-server ./public -p 5050 -c-1", + "setup": "cd ../../ && npm install && cd how-to/container-platform-starter && npm run build" + }, + "license": "ISC", + "devDependencies": { + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4" + } +} diff --git a/how-to/container-platform-starter/public/manifest.fin.json b/how-to/container-platform-starter/public/manifest.fin.json index f422da30..ed882b35 100644 --- a/how-to/container-platform-starter/public/manifest.fin.json +++ b/how-to/container-platform-starter/public/manifest.fin.json @@ -1,43 +1,43 @@ { - "runtime": { - "arguments": "--v=1 --inspect", - "version": "36.122.80.10" - }, - "platform": { - "enableBeforeUnload": true, - "uuid": "container-platform-starter", - "icon": "http://localhost:5050/favicon.ico", - "autoShow": false, - "providerUrl": "http://localhost:5050/html/provider.html" - }, - "snapshot": { - "windows": [ - { - "layout": { - "content": [ - { - "type": "row", - "content": [ - { - "type": "stack", - "content": [ - { - "type": "component", - "title": "view1", - "componentName": "view", - "componentState": { - "url": "http://localhost:5050/common/views/platform/of-info/index.html", - "name": "view1", - "componentName": "view" - } - } - ] - } - ] - } - ] - } - } - ] - } -} \ No newline at end of file + "runtime": { + "arguments": "--v=1 --inspect", + "version": "36.122.80.11" + }, + "platform": { + "enableBeforeUnload": true, + "uuid": "container-platform-starter", + "icon": "http://localhost:5050/favicon.ico", + "autoShow": false, + "providerUrl": "http://localhost:5050/html/provider.html" + }, + "snapshot": { + "windows": [ + { + "layout": { + "content": [ + { + "type": "row", + "content": [ + { + "type": "stack", + "content": [ + { + "type": "component", + "title": "view1", + "componentName": "view", + "componentState": { + "url": "http://localhost:5050/common/views/platform/of-info/index.html", + "name": "view1", + "componentName": "view" + } + } + ] + } + ] + } + ] + } + } + ] + } +} diff --git a/how-to/container-platform-starter/scripts/launch.mjs b/how-to/container-platform-starter/scripts/launch.mjs index fd08a2a4..50444893 100644 --- a/how-to/container-platform-starter/scripts/launch.mjs +++ b/how-to/container-platform-starter/scripts/launch.mjs @@ -5,6 +5,7 @@ * Pressing Ctrl+C/Command+C will terminate the application. */ import { connect, launch } from '@openfin/node-adapter'; +import { exec } from 'child_process'; import { setDefaultResultOrder } from 'dns'; /** @@ -13,68 +14,10 @@ import { setDefaultResultOrder } from 'dns'; */ async function run(manifestUrl) { try { - let quitRequested = false; - let quit; - - const fin = await launchFromNode(manifestUrl); - - if (fin) { - const manifest = await fin.System.fetchManifest(manifestUrl); - - if (manifest.platform?.uuid !== undefined) { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling platform quit'); - const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); - await platform.quit(); - } - } catch (err) { - if (err.toString().includes('no longer connected')) { - console.log('Platform no longer connected'); - console.log('Exiting process'); - process.exit(); - } else { - console.error(err); - } - } - }; - console.log(`Wrapped target platform: ${manifest.platform.uuid}`); - } else { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling application quit'); - const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); - await app.quit(); - } - } catch (err) { - console.error(err); - } - }; - console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); - } - - // do something when app is closing - process.on('exit', async () => { - console.log('Process exit called'); - await quit(); - }); - - // catches ctrl+c event - process.on('SIGINT', async () => { - console.log('Ctrl + C called'); - await quit(); - }); - - console.log(`You successfully connected to the manifest: ${manifestUrl}`); - console.log(`Please wait while the sample loads.`); - console.log(); - console.log(`If using browser use the Quit option from the main menu.`); - console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); - console.log(); + if (process.platform === 'darwin') { + await launchFromFinsLink(manifestUrl); + } else { + await launchFromNodeAdapter(manifestUrl); } } catch (e) { console.error(`Error: Connection failed`); @@ -82,13 +25,136 @@ async function run(manifestUrl) { } } +/** + * Launch the manifest using the node adapter. + * @param manifestUrl the url to launch + */ +async function launchFromNodeAdapter(manifestUrl) { + let quitRequested = false; + let quit; + + const fin = await connectAndGetFinAPI(manifestUrl); + + if (fin) { + const manifest = await fin.System.fetchManifest(manifestUrl); + + if (manifest.platform?.uuid !== undefined) { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling platform quit'); + const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); + await platform.quit(); + } + } catch (err) { + if (err.toString().includes('no longer connected')) { + console.log('Platform no longer connected'); + console.log('Exiting process'); + process.exit(); + } else { + console.error(err); + } + } + }; + console.log(`Wrapped target platform: ${manifest.platform.uuid}`); + } else { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling application quit'); + const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); + await app.quit(); + } + } catch (err) { + console.error(err); + } + }; + console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); + } + + // do something when app is closing + process.on('exit', async () => { + console.log('Process exit called'); + await quit(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + await quit(); + }); + + console.log(`You successfully connected to the manifest: ${manifestUrl}`); + console.log(`Please wait while the sample loads.`); + console.log(); + console.log(`Close all platform windows to close the platform.`); + console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); + console.log(); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + */ +async function launchFromFinsLink(manifestUrl) { + console.log(); + console.log(`Launching manifest...`); + console.log(); + const finsLink = manifestUrl.replace('http', 'fin'); + const finsProcess = exec(`open ${finsLink}`); + + /** + * A simple message to inform the user how to quit the platform. + */ + function logQuitMessage() { + console.log(); + console.log('Please quit the platform using:'); + console.log(); + console.log('- Process Manager (https://start.openfin.co/pm)'); + console.log('- run npm run kill to kill all OpenFin processes.'); + console.log(); + console.log(); + } + + finsProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + finsProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + // do something when app is closing + process.on('exit', async () => { + console.log('Please wait for the OpenFin application to launch.'); + logQuitMessage(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + logQuitMessage(); + }); + + finsProcess.on('exit', (code) => { + if (code === 0) { + console.log('Manifest launched successfully'); + } else { + console.log(`Child process exited with code ${code.toString()}`); + } + }); +} + /** * Launch the manifest using the node adapter. * @param manifestUrl The manifest to launch. * @param exitMethod The method to call if the adapter connection exits. * @returns The fin object representing the connection. */ -async function launchFromNode(manifestUrl, exitMethod) { +async function connectAndGetFinAPI(manifestUrl, exitMethod) { try { console.log(`Launching manifest...`); console.log(); diff --git a/how-to/create-window/package.json b/how-to/create-window/package.json index 449e8555..527f4257 100644 --- a/how-to/create-window/package.json +++ b/how-to/create-window/package.json @@ -1,24 +1,24 @@ { - "name": "application-window-creation", - "version": "0.0.1", - "description": "A demonstration of how to open openfin application windows", - "main": "index.js", - "scripts": { - "kill": "node ./scripts/kill.mjs", - "client": "node ./scripts/launch.mjs", - "build-client": "webpack build --config ./client/webpack.config.js --mode=development", - "build": "npm run build-client", - "start": "npx --yes http-server ./public -p 5050 -c-1", - "setup": "cd ../../ && npm install && cd how-to/create-window && npm run build" - }, - "author": "pj.singh@openfin.co", - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "@openfin/node-adapter": "36.80.10", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", - "webpack-cli": "^5.1.4", - "@openfin/core": "36.80.10" - } -} \ No newline at end of file + "name": "application-window-creation", + "version": "36.80.11", + "description": "A demonstration of how to open openfin application windows", + "main": "index.js", + "scripts": { + "kill": "node ./scripts/kill.mjs", + "client": "node ./scripts/launch.mjs", + "build-client": "webpack build --config ./client/webpack.config.js --mode=development", + "build": "npm run build-client", + "start": "npx --yes http-server ./public -p 5050 -c-1", + "setup": "cd ../../ && npm install && cd how-to/create-window && npm run build" + }, + "author": "pj.singh@openfin.co", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4", + "@openfin/core": "36.80.11" + } +} diff --git a/how-to/create-window/public/app.fin.json b/how-to/create-window/public/app.fin.json index 4f8ede08..327a1bde 100644 --- a/how-to/create-window/public/app.fin.json +++ b/how-to/create-window/public/app.fin.json @@ -1,28 +1,28 @@ { - "devtools_port": 9090, - "startup_app": { - "name": "OpenMultipleWindows", - "description": "OpenMultipleWindows", - "url": "http://www.google.com", - "showTaskbarIcon": true, - "taskbarIcon": "http://cdn.openfin.co/hyperblotter/favicon.ico", - "icon": "http://cdn.openfin.co/hyperblotter/favicon.ico", - "uuid": "OpenMultipleWindows", - "autoShow": true, - "contextMenu": true, - "defaultHeight": 500, - "defaultwidth": 500, - "frame": true, - "defaultCentered": true, - "resizable": true - }, - "runtime": { - "arguments": "--enable-crash-reporting --no-sandbox", - "version": "36.122.80.10" - }, - "shortcut": { - "company": "OpenFin", - "description": "Openfin openfin application window Sample", - "name": "Openfin application window" - } -} \ No newline at end of file + "devtools_port": 9090, + "startup_app": { + "name": "OpenMultipleWindows", + "description": "OpenMultipleWindows", + "url": "http://www.google.com", + "showTaskbarIcon": true, + "taskbarIcon": "http://cdn.openfin.co/hyperblotter/favicon.ico", + "icon": "http://cdn.openfin.co/hyperblotter/favicon.ico", + "uuid": "OpenMultipleWindows", + "autoShow": true, + "contextMenu": true, + "defaultHeight": 500, + "defaultwidth": 500, + "frame": true, + "defaultCentered": true, + "resizable": true + }, + "runtime": { + "arguments": "--enable-crash-reporting --no-sandbox", + "version": "36.122.80.11" + }, + "shortcut": { + "company": "OpenFin", + "description": "Openfin openfin application window Sample", + "name": "Openfin application window" + } +} diff --git a/how-to/create-window/public/manifest.fin.json b/how-to/create-window/public/manifest.fin.json index 6d9cab12..6125bd07 100644 --- a/how-to/create-window/public/manifest.fin.json +++ b/how-to/create-window/public/manifest.fin.json @@ -1,35 +1,35 @@ { - "runtime": { - "arguments": "--v=1 --inspect", - "version": "36.122.80.10" - }, - "platform": { - "uuid": "how-to-open-windows", - "autoShow": true, - "icon": "http://localhost:5050/favicon.ico" - }, - "snapshot": { - "windows": [ - { - "layout": { - "content": [ - { - "type": "stack", - "id": "no-drop-target", - "content": [ - { - "type": "component", - "componentName": "view", - "componentState": { - "processAffinity": "ps_1", - "url": "http://localhost:5050/html/app.html" - } - } - ] - } - ] - } - } - ] - } -} \ No newline at end of file + "runtime": { + "arguments": "--v=1 --inspect", + "version": "36.122.80.11" + }, + "platform": { + "uuid": "how-to-open-windows", + "autoShow": true, + "icon": "http://localhost:5050/favicon.ico" + }, + "snapshot": { + "windows": [ + { + "layout": { + "content": [ + { + "type": "stack", + "id": "no-drop-target", + "content": [ + { + "type": "component", + "componentName": "view", + "componentState": { + "processAffinity": "ps_1", + "url": "http://localhost:5050/html/app.html" + } + } + ] + } + ] + } + } + ] + } +} diff --git a/how-to/create-window/scripts/launch.mjs b/how-to/create-window/scripts/launch.mjs index fd08a2a4..50444893 100644 --- a/how-to/create-window/scripts/launch.mjs +++ b/how-to/create-window/scripts/launch.mjs @@ -5,6 +5,7 @@ * Pressing Ctrl+C/Command+C will terminate the application. */ import { connect, launch } from '@openfin/node-adapter'; +import { exec } from 'child_process'; import { setDefaultResultOrder } from 'dns'; /** @@ -13,68 +14,10 @@ import { setDefaultResultOrder } from 'dns'; */ async function run(manifestUrl) { try { - let quitRequested = false; - let quit; - - const fin = await launchFromNode(manifestUrl); - - if (fin) { - const manifest = await fin.System.fetchManifest(manifestUrl); - - if (manifest.platform?.uuid !== undefined) { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling platform quit'); - const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); - await platform.quit(); - } - } catch (err) { - if (err.toString().includes('no longer connected')) { - console.log('Platform no longer connected'); - console.log('Exiting process'); - process.exit(); - } else { - console.error(err); - } - } - }; - console.log(`Wrapped target platform: ${manifest.platform.uuid}`); - } else { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling application quit'); - const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); - await app.quit(); - } - } catch (err) { - console.error(err); - } - }; - console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); - } - - // do something when app is closing - process.on('exit', async () => { - console.log('Process exit called'); - await quit(); - }); - - // catches ctrl+c event - process.on('SIGINT', async () => { - console.log('Ctrl + C called'); - await quit(); - }); - - console.log(`You successfully connected to the manifest: ${manifestUrl}`); - console.log(`Please wait while the sample loads.`); - console.log(); - console.log(`If using browser use the Quit option from the main menu.`); - console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); - console.log(); + if (process.platform === 'darwin') { + await launchFromFinsLink(manifestUrl); + } else { + await launchFromNodeAdapter(manifestUrl); } } catch (e) { console.error(`Error: Connection failed`); @@ -82,13 +25,136 @@ async function run(manifestUrl) { } } +/** + * Launch the manifest using the node adapter. + * @param manifestUrl the url to launch + */ +async function launchFromNodeAdapter(manifestUrl) { + let quitRequested = false; + let quit; + + const fin = await connectAndGetFinAPI(manifestUrl); + + if (fin) { + const manifest = await fin.System.fetchManifest(manifestUrl); + + if (manifest.platform?.uuid !== undefined) { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling platform quit'); + const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); + await platform.quit(); + } + } catch (err) { + if (err.toString().includes('no longer connected')) { + console.log('Platform no longer connected'); + console.log('Exiting process'); + process.exit(); + } else { + console.error(err); + } + } + }; + console.log(`Wrapped target platform: ${manifest.platform.uuid}`); + } else { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling application quit'); + const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); + await app.quit(); + } + } catch (err) { + console.error(err); + } + }; + console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); + } + + // do something when app is closing + process.on('exit', async () => { + console.log('Process exit called'); + await quit(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + await quit(); + }); + + console.log(`You successfully connected to the manifest: ${manifestUrl}`); + console.log(`Please wait while the sample loads.`); + console.log(); + console.log(`Close all platform windows to close the platform.`); + console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); + console.log(); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + */ +async function launchFromFinsLink(manifestUrl) { + console.log(); + console.log(`Launching manifest...`); + console.log(); + const finsLink = manifestUrl.replace('http', 'fin'); + const finsProcess = exec(`open ${finsLink}`); + + /** + * A simple message to inform the user how to quit the platform. + */ + function logQuitMessage() { + console.log(); + console.log('Please quit the platform using:'); + console.log(); + console.log('- Process Manager (https://start.openfin.co/pm)'); + console.log('- run npm run kill to kill all OpenFin processes.'); + console.log(); + console.log(); + } + + finsProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + finsProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + // do something when app is closing + process.on('exit', async () => { + console.log('Please wait for the OpenFin application to launch.'); + logQuitMessage(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + logQuitMessage(); + }); + + finsProcess.on('exit', (code) => { + if (code === 0) { + console.log('Manifest launched successfully'); + } else { + console.log(`Child process exited with code ${code.toString()}`); + } + }); +} + /** * Launch the manifest using the node adapter. * @param manifestUrl The manifest to launch. * @param exitMethod The method to call if the adapter connection exits. * @returns The fin object representing the connection. */ -async function launchFromNode(manifestUrl, exitMethod) { +async function connectAndGetFinAPI(manifestUrl, exitMethod) { try { console.log(`Launching manifest...`); console.log(); diff --git a/how-to/integration-excel/package.json b/how-to/integration-excel/package.json index 110fc950..b6b94861 100644 --- a/how-to/integration-excel/package.json +++ b/how-to/integration-excel/package.json @@ -1,31 +1,31 @@ { - "name": "integration-excel", - "version": "0.0.1", - "description": "A demonstration of how to connect with Excel from OpenFin", - "main": "index.js", - "scripts": { - "kill": "node ./scripts/kill.mjs", - "client": "node ./scripts/launch.mjs", - "secondclient": "node ./scripts/launch.mjs http://localhost:5050/second.manifest.fin.json", - "build-client": "webpack build --config ./client/webpack.config.js --mode=development", - "build": "npm run build-client", - "start": "npx --yes http-server ./public -p 5050 -c-1", - "setup": "cd ../../ && npm install && cd how-to/integration-excel && npm run build" - }, - "author": "martyn.janes@openfin.co", - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "@finos/fdc3": "^2.0.3", - "@openfin/node-adapter": "36.80.10", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", - "webpack-cli": "^5.1.4", - "@openfin/core": "36.80.10" - }, - "dependencies": { - "@openfin/excel": "^1.4.1", - "@openfin/core": "36.80.10", - "@openfin/node-adapter": "36.80.10" - } -} \ No newline at end of file + "name": "integration-excel", + "version": "36.80.11", + "description": "A demonstration of how to connect with Excel from OpenFin", + "main": "index.js", + "scripts": { + "kill": "node ./scripts/kill.mjs", + "client": "node ./scripts/launch.mjs", + "secondclient": "node ./scripts/launch.mjs http://localhost:5050/second.manifest.fin.json", + "build-client": "webpack build --config ./client/webpack.config.js --mode=development", + "build": "npm run build-client", + "start": "npx --yes http-server ./public -p 5050 -c-1", + "setup": "cd ../../ && npm install && cd how-to/integration-excel && npm run build" + }, + "author": "martyn.janes@openfin.co", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "@finos/fdc3": "^2.1.0", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4", + "@openfin/core": "36.80.11" + }, + "dependencies": { + "@openfin/excel": "^1.5.0", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11" + } +} diff --git a/how-to/integration-excel/public/manifest.fin.json b/how-to/integration-excel/public/manifest.fin.json index 4e984855..dcde624e 100644 --- a/how-to/integration-excel/public/manifest.fin.json +++ b/how-to/integration-excel/public/manifest.fin.json @@ -1,111 +1,107 @@ { - "runtime": { - "arguments": "--v=1 --inspect", - "version": "36.122.80.10" - }, - "platform": { - "uuid": "integration-excel", - "applicationIcon": "http://localhost:5050/favicon.ico", - "providerUrl": "http://localhost:5050/provider/provider.html", - "autoShow": false, - "permissions": { - "System": { - "launchExternalProcess": true, - "downloadAsset": true, - "openUrlWithBrowser": { - "enabled": true, - "protocols": [ - "mailto" - ] - } - } - } - }, - "snapshot": { - "windows": [ - { - "defaultWidth": 800, - "defaultHeight": 900, - "defaultLeft": 0, - "defaultTop": 0, - "saveWindowState": false, - "backgroundThrottling": true, - "layout": { - "content": [ - { - "type": "column", - "id": "mainRow", - "isClosable": true, - "reorderEnabled": true, - "title": "", - "content": [ - { - "type": "stack", - "width": 100, - "isClosable": true, - "reorderEnabled": true, - "title": "", - "activeItemIndex": 0, - "content": [ - { - "type": "component", - "componentName": "view", - "componentState": { - "url": "http://localhost:5050/views/excel.html", - "name": "excel-view", - "fdc3InteropApi": "1.2", - "interop": { - "currentContextGroup": "green" - }, - "permissions": { - "System": { - "launchExternalProcess": true, - "downloadAsset": true, - "openUrlWithBrowser": { - "enabled": true, - "protocols": [ - "mailto" - ] - } - } - } - }, - "isClosable": true, - "reorderEnabled": true, - "title": "view" - } - ] - }, - { - "type": "stack", - "width": 100, - "isClosable": true, - "reorderEnabled": true, - "title": "", - "activeItemIndex": 0, - "content": [ - { - "type": "component", - "componentName": "view", - "componentState": { - "url": "http://localhost:5050/views/fdc3monitor.html", - "name": "fdc3-view", - "fdc3InteropApi": "1.2", - "interop": { - "currentContextGroup": "green" - } - }, - "isClosable": true, - "reorderEnabled": true, - "title": "view" - } - ] - } - ] - } - ] - } - } - ] - } -} \ No newline at end of file + "runtime": { + "arguments": "--v=1 --inspect", + "version": "36.122.80.11" + }, + "platform": { + "uuid": "integration-excel", + "applicationIcon": "http://localhost:5050/favicon.ico", + "providerUrl": "http://localhost:5050/provider/provider.html", + "autoShow": false, + "permissions": { + "System": { + "launchExternalProcess": true, + "downloadAsset": true, + "openUrlWithBrowser": { + "enabled": true, + "protocols": ["mailto"] + } + } + } + }, + "snapshot": { + "windows": [ + { + "defaultWidth": 800, + "defaultHeight": 900, + "defaultLeft": 0, + "defaultTop": 0, + "saveWindowState": false, + "backgroundThrottling": true, + "layout": { + "content": [ + { + "type": "column", + "id": "mainRow", + "isClosable": true, + "reorderEnabled": true, + "title": "", + "content": [ + { + "type": "stack", + "width": 100, + "isClosable": true, + "reorderEnabled": true, + "title": "", + "activeItemIndex": 0, + "content": [ + { + "type": "component", + "componentName": "view", + "componentState": { + "url": "http://localhost:5050/views/excel.html", + "name": "excel-view", + "fdc3InteropApi": "1.2", + "interop": { + "currentContextGroup": "green" + }, + "permissions": { + "System": { + "launchExternalProcess": true, + "downloadAsset": true, + "openUrlWithBrowser": { + "enabled": true, + "protocols": ["mailto"] + } + } + } + }, + "isClosable": true, + "reorderEnabled": true, + "title": "view" + } + ] + }, + { + "type": "stack", + "width": 100, + "isClosable": true, + "reorderEnabled": true, + "title": "", + "activeItemIndex": 0, + "content": [ + { + "type": "component", + "componentName": "view", + "componentState": { + "url": "http://localhost:5050/views/fdc3monitor.html", + "name": "fdc3-view", + "fdc3InteropApi": "1.2", + "interop": { + "currentContextGroup": "green" + } + }, + "isClosable": true, + "reorderEnabled": true, + "title": "view" + } + ] + } + ] + } + ] + } + } + ] + } +} diff --git a/how-to/integration-excel/public/second.manifest.fin.json b/how-to/integration-excel/public/second.manifest.fin.json index 64d4284f..8d797358 100644 --- a/how-to/integration-excel/public/second.manifest.fin.json +++ b/how-to/integration-excel/public/second.manifest.fin.json @@ -1,24 +1,22 @@ { - "runtime": { - "arguments": "--v=1 --inspect", - "version": "36.122.80.10" - }, - "platform": { - "uuid": "integration-excel-tray", - "applicationIcon": "http://localhost:5050/favicon.ico", - "providerUrl": "http://localhost:5050/provider/provider-tray.html", - "autoShow": false, - "permissions": { - "System": { - "launchExternalProcess": true, - "downloadAsset": true, - "openUrlWithBrowser": { - "enabled": true, - "protocols": [ - "mailto" - ] - } - } - } - } -} \ No newline at end of file + "runtime": { + "arguments": "--v=1 --inspect", + "version": "36.122.80.11" + }, + "platform": { + "uuid": "integration-excel-tray", + "applicationIcon": "http://localhost:5050/favicon.ico", + "providerUrl": "http://localhost:5050/provider/provider-tray.html", + "autoShow": false, + "permissions": { + "System": { + "launchExternalProcess": true, + "downloadAsset": true, + "openUrlWithBrowser": { + "enabled": true, + "protocols": ["mailto"] + } + } + } + } +} diff --git a/how-to/integration-excel/scripts/launch.mjs b/how-to/integration-excel/scripts/launch.mjs index fd08a2a4..50444893 100644 --- a/how-to/integration-excel/scripts/launch.mjs +++ b/how-to/integration-excel/scripts/launch.mjs @@ -5,6 +5,7 @@ * Pressing Ctrl+C/Command+C will terminate the application. */ import { connect, launch } from '@openfin/node-adapter'; +import { exec } from 'child_process'; import { setDefaultResultOrder } from 'dns'; /** @@ -13,68 +14,10 @@ import { setDefaultResultOrder } from 'dns'; */ async function run(manifestUrl) { try { - let quitRequested = false; - let quit; - - const fin = await launchFromNode(manifestUrl); - - if (fin) { - const manifest = await fin.System.fetchManifest(manifestUrl); - - if (manifest.platform?.uuid !== undefined) { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling platform quit'); - const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); - await platform.quit(); - } - } catch (err) { - if (err.toString().includes('no longer connected')) { - console.log('Platform no longer connected'); - console.log('Exiting process'); - process.exit(); - } else { - console.error(err); - } - } - }; - console.log(`Wrapped target platform: ${manifest.platform.uuid}`); - } else { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling application quit'); - const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); - await app.quit(); - } - } catch (err) { - console.error(err); - } - }; - console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); - } - - // do something when app is closing - process.on('exit', async () => { - console.log('Process exit called'); - await quit(); - }); - - // catches ctrl+c event - process.on('SIGINT', async () => { - console.log('Ctrl + C called'); - await quit(); - }); - - console.log(`You successfully connected to the manifest: ${manifestUrl}`); - console.log(`Please wait while the sample loads.`); - console.log(); - console.log(`If using browser use the Quit option from the main menu.`); - console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); - console.log(); + if (process.platform === 'darwin') { + await launchFromFinsLink(manifestUrl); + } else { + await launchFromNodeAdapter(manifestUrl); } } catch (e) { console.error(`Error: Connection failed`); @@ -82,13 +25,136 @@ async function run(manifestUrl) { } } +/** + * Launch the manifest using the node adapter. + * @param manifestUrl the url to launch + */ +async function launchFromNodeAdapter(manifestUrl) { + let quitRequested = false; + let quit; + + const fin = await connectAndGetFinAPI(manifestUrl); + + if (fin) { + const manifest = await fin.System.fetchManifest(manifestUrl); + + if (manifest.platform?.uuid !== undefined) { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling platform quit'); + const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); + await platform.quit(); + } + } catch (err) { + if (err.toString().includes('no longer connected')) { + console.log('Platform no longer connected'); + console.log('Exiting process'); + process.exit(); + } else { + console.error(err); + } + } + }; + console.log(`Wrapped target platform: ${manifest.platform.uuid}`); + } else { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling application quit'); + const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); + await app.quit(); + } + } catch (err) { + console.error(err); + } + }; + console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); + } + + // do something when app is closing + process.on('exit', async () => { + console.log('Process exit called'); + await quit(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + await quit(); + }); + + console.log(`You successfully connected to the manifest: ${manifestUrl}`); + console.log(`Please wait while the sample loads.`); + console.log(); + console.log(`Close all platform windows to close the platform.`); + console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); + console.log(); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + */ +async function launchFromFinsLink(manifestUrl) { + console.log(); + console.log(`Launching manifest...`); + console.log(); + const finsLink = manifestUrl.replace('http', 'fin'); + const finsProcess = exec(`open ${finsLink}`); + + /** + * A simple message to inform the user how to quit the platform. + */ + function logQuitMessage() { + console.log(); + console.log('Please quit the platform using:'); + console.log(); + console.log('- Process Manager (https://start.openfin.co/pm)'); + console.log('- run npm run kill to kill all OpenFin processes.'); + console.log(); + console.log(); + } + + finsProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + finsProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + // do something when app is closing + process.on('exit', async () => { + console.log('Please wait for the OpenFin application to launch.'); + logQuitMessage(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + logQuitMessage(); + }); + + finsProcess.on('exit', (code) => { + if (code === 0) { + console.log('Manifest launched successfully'); + } else { + console.log(`Child process exited with code ${code.toString()}`); + } + }); +} + /** * Launch the manifest using the node adapter. * @param manifestUrl The manifest to launch. * @param exitMethod The method to call if the adapter connection exits. * @returns The fin object representing the connection. */ -async function launchFromNode(manifestUrl, exitMethod) { +async function connectAndGetFinAPI(manifestUrl, exitMethod) { try { console.log(`Launching manifest...`); console.log(); diff --git a/how-to/use-a-manifest/create-a-single-page-platform/package.json b/how-to/use-a-manifest/create-a-single-page-platform/package.json index 564d102a..7730ddd1 100644 --- a/how-to/use-a-manifest/create-a-single-page-platform/package.json +++ b/how-to/use-a-manifest/create-a-single-page-platform/package.json @@ -1,20 +1,20 @@ { - "name": "create-a-single-page-platform", - "version": "0.0.1", - "description": "A demonstration of a one page platform that can be used as a starting point.", - "scripts": { - "kill": "node ./scripts/kill.mjs", - "client": "node ./scripts/launch.mjs", - "secondclient": "node ./scripts/launch.mjs http://localhost:5050/second.manifest.fin.json", - "build-client": "echo Nothing to build", - "build": "npm run build-client", - "start": "npx --yes http-server ./public -p 5050 -c-1", - "setup": "cd ../../../ && npm install && cd how-to/use-a-manifest/create-a-single-page-platform && npm run build" - }, - "author": "john.mandia@openfin.co", - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "@openfin/node-adapter": "36.80.10", - "@openfin/core": "36.80.10" - } -} \ No newline at end of file + "name": "create-a-single-page-platform", + "version": "36.80.11", + "description": "A demonstration of a one page platform that can be used as a starting point.", + "scripts": { + "kill": "node ./scripts/kill.mjs", + "client": "node ./scripts/launch.mjs", + "secondclient": "node ./scripts/launch.mjs http://localhost:5050/second.manifest.fin.json", + "build-client": "echo Nothing to build", + "build": "npm run build-client", + "start": "npx --yes http-server ./public -p 5050 -c-1", + "setup": "cd ../../../ && npm install && cd how-to/use-a-manifest/create-a-single-page-platform && npm run build" + }, + "author": "john.mandia@openfin.co", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "@openfin/node-adapter": "36.80.11", + "@openfin/core": "36.80.11" + } +} diff --git a/how-to/use-a-manifest/create-a-single-page-platform/public/manifest.fin.json b/how-to/use-a-manifest/create-a-single-page-platform/public/manifest.fin.json index 441329f2..59c255dd 100644 --- a/how-to/use-a-manifest/create-a-single-page-platform/public/manifest.fin.json +++ b/how-to/use-a-manifest/create-a-single-page-platform/public/manifest.fin.json @@ -1,47 +1,47 @@ { - "licenseKey": "openfin-demo-license-key", - "runtime": { - "arguments": "--v=1 --inspect", - "version": "36.122.80.10", - "autoShow": false - }, - "platform": { - "uuid": "how-to-use-a-manifest-create-a-single-page-platform", - "icon": "http://localhost:5050/favicon.ico", - "defaultWindowOptions": { - "stylesheetUrl": "http://localhost:5050/window-override.css" - } - }, - "snapshot": { - "windows": [ - { - "defaultWidth": 800, - "defaultHeight": 600, - "defaultCentered": true, - "saveWindowState": true, - "backgroundThrottling": true, - "layout": { - "content": [ - { - "type": "stack", - "width": 100, - "isClosable": false, - "reorderEnabled": false, - "hasHeaders": false, - "content": [ - { - "type": "component", - "componentName": "view", - "componentState": { - "url": "http://localhost:5050/common/style/style.html" - }, - "title": "view" - } - ] - } - ] - } - } - ] - } -} \ No newline at end of file + "licenseKey": "openfin-demo-license-key", + "runtime": { + "arguments": "--v=1 --inspect", + "version": "36.122.80.11", + "autoShow": false + }, + "platform": { + "uuid": "how-to-use-a-manifest-create-a-single-page-platform", + "icon": "http://localhost:5050/favicon.ico", + "defaultWindowOptions": { + "stylesheetUrl": "http://localhost:5050/window-override.css" + } + }, + "snapshot": { + "windows": [ + { + "defaultWidth": 800, + "defaultHeight": 600, + "defaultCentered": true, + "saveWindowState": true, + "backgroundThrottling": true, + "layout": { + "content": [ + { + "type": "stack", + "width": 100, + "isClosable": false, + "reorderEnabled": false, + "hasHeaders": false, + "content": [ + { + "type": "component", + "componentName": "view", + "componentState": { + "url": "http://localhost:5050/common/style/style.html" + }, + "title": "view" + } + ] + } + ] + } + } + ] + } +} diff --git a/how-to/use-a-manifest/create-a-single-page-platform/public/second.manifest.fin.json b/how-to/use-a-manifest/create-a-single-page-platform/public/second.manifest.fin.json index 424af144..2543d7ee 100644 --- a/how-to/use-a-manifest/create-a-single-page-platform/public/second.manifest.fin.json +++ b/how-to/use-a-manifest/create-a-single-page-platform/public/second.manifest.fin.json @@ -1,24 +1,24 @@ { - "licenseKey": "openfin-demo-license-key", - "runtime": { - "arguments": "--v=1 --inspect", - "version": "36.122.80.10", - "autoShow": false - }, - "platform": { - "uuid": "second-how-to-use-a-manifest-create-a-single-page-platform", - "icon": "http://localhost:5050/favicon.ico" - }, - "snapshot": { - "windows": [ - { - "defaultWidth": 800, - "defaultHeight": 600, - "defaultCentered": true, - "saveWindowState": true, - "backgroundThrottling": false, - "url": "http://localhost:5050/common/style/style.html" - } - ] - } -} \ No newline at end of file + "licenseKey": "openfin-demo-license-key", + "runtime": { + "arguments": "--v=1 --inspect", + "version": "36.122.80.11", + "autoShow": false + }, + "platform": { + "uuid": "second-how-to-use-a-manifest-create-a-single-page-platform", + "icon": "http://localhost:5050/favicon.ico" + }, + "snapshot": { + "windows": [ + { + "defaultWidth": 800, + "defaultHeight": 600, + "defaultCentered": true, + "saveWindowState": true, + "backgroundThrottling": false, + "url": "http://localhost:5050/common/style/style.html" + } + ] + } +} diff --git a/how-to/use-a-manifest/create-a-single-page-platform/scripts/launch.mjs b/how-to/use-a-manifest/create-a-single-page-platform/scripts/launch.mjs index fd08a2a4..50444893 100644 --- a/how-to/use-a-manifest/create-a-single-page-platform/scripts/launch.mjs +++ b/how-to/use-a-manifest/create-a-single-page-platform/scripts/launch.mjs @@ -5,6 +5,7 @@ * Pressing Ctrl+C/Command+C will terminate the application. */ import { connect, launch } from '@openfin/node-adapter'; +import { exec } from 'child_process'; import { setDefaultResultOrder } from 'dns'; /** @@ -13,68 +14,10 @@ import { setDefaultResultOrder } from 'dns'; */ async function run(manifestUrl) { try { - let quitRequested = false; - let quit; - - const fin = await launchFromNode(manifestUrl); - - if (fin) { - const manifest = await fin.System.fetchManifest(manifestUrl); - - if (manifest.platform?.uuid !== undefined) { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling platform quit'); - const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); - await platform.quit(); - } - } catch (err) { - if (err.toString().includes('no longer connected')) { - console.log('Platform no longer connected'); - console.log('Exiting process'); - process.exit(); - } else { - console.error(err); - } - } - }; - console.log(`Wrapped target platform: ${manifest.platform.uuid}`); - } else { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling application quit'); - const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); - await app.quit(); - } - } catch (err) { - console.error(err); - } - }; - console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); - } - - // do something when app is closing - process.on('exit', async () => { - console.log('Process exit called'); - await quit(); - }); - - // catches ctrl+c event - process.on('SIGINT', async () => { - console.log('Ctrl + C called'); - await quit(); - }); - - console.log(`You successfully connected to the manifest: ${manifestUrl}`); - console.log(`Please wait while the sample loads.`); - console.log(); - console.log(`If using browser use the Quit option from the main menu.`); - console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); - console.log(); + if (process.platform === 'darwin') { + await launchFromFinsLink(manifestUrl); + } else { + await launchFromNodeAdapter(manifestUrl); } } catch (e) { console.error(`Error: Connection failed`); @@ -82,13 +25,136 @@ async function run(manifestUrl) { } } +/** + * Launch the manifest using the node adapter. + * @param manifestUrl the url to launch + */ +async function launchFromNodeAdapter(manifestUrl) { + let quitRequested = false; + let quit; + + const fin = await connectAndGetFinAPI(manifestUrl); + + if (fin) { + const manifest = await fin.System.fetchManifest(manifestUrl); + + if (manifest.platform?.uuid !== undefined) { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling platform quit'); + const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); + await platform.quit(); + } + } catch (err) { + if (err.toString().includes('no longer connected')) { + console.log('Platform no longer connected'); + console.log('Exiting process'); + process.exit(); + } else { + console.error(err); + } + } + }; + console.log(`Wrapped target platform: ${manifest.platform.uuid}`); + } else { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling application quit'); + const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); + await app.quit(); + } + } catch (err) { + console.error(err); + } + }; + console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); + } + + // do something when app is closing + process.on('exit', async () => { + console.log('Process exit called'); + await quit(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + await quit(); + }); + + console.log(`You successfully connected to the manifest: ${manifestUrl}`); + console.log(`Please wait while the sample loads.`); + console.log(); + console.log(`Close all platform windows to close the platform.`); + console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); + console.log(); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + */ +async function launchFromFinsLink(manifestUrl) { + console.log(); + console.log(`Launching manifest...`); + console.log(); + const finsLink = manifestUrl.replace('http', 'fin'); + const finsProcess = exec(`open ${finsLink}`); + + /** + * A simple message to inform the user how to quit the platform. + */ + function logQuitMessage() { + console.log(); + console.log('Please quit the platform using:'); + console.log(); + console.log('- Process Manager (https://start.openfin.co/pm)'); + console.log('- run npm run kill to kill all OpenFin processes.'); + console.log(); + console.log(); + } + + finsProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + finsProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + // do something when app is closing + process.on('exit', async () => { + console.log('Please wait for the OpenFin application to launch.'); + logQuitMessage(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + logQuitMessage(); + }); + + finsProcess.on('exit', (code) => { + if (code === 0) { + console.log('Manifest launched successfully'); + } else { + console.log(`Child process exited with code ${code.toString()}`); + } + }); +} + /** * Launch the manifest using the node adapter. * @param manifestUrl The manifest to launch. * @param exitMethod The method to call if the adapter connection exits. * @returns The fin object representing the connection. */ -async function launchFromNode(manifestUrl, exitMethod) { +async function connectAndGetFinAPI(manifestUrl, exitMethod) { try { console.log(`Launching manifest...`); console.log(); diff --git a/how-to/use-channel-api/issue-commands-to-a-platform/package.json b/how-to/use-channel-api/issue-commands-to-a-platform/package.json index 422a04d1..5e3ea268 100644 --- a/how-to/use-channel-api/issue-commands-to-a-platform/package.json +++ b/how-to/use-channel-api/issue-commands-to-a-platform/package.json @@ -1,24 +1,24 @@ { - "name": "use-channel-api-issue-commands-to-a-platform", - "version": "0.0.1", - "description": "A demonstration of one app can issue commands to a platform application.", - "main": "index.js", - "scripts": { - "kill": "node ./scripts/kill.mjs", - "client": "node ./scripts/launch.mjs", - "build-client": "webpack build --config ./client/webpack.config.js --mode=development", - "build": "npm run build-client", - "start": "npx --yes http-server ./public -p 5050 -c-1", - "setup": "cd ../../../ && npm install && cd how-to/use-channel-api/issue-commands-to-a-platform && npm run build" - }, - "author": "john.mandia@openfin.co", - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "@openfin/node-adapter": "36.80.10", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", - "webpack-cli": "^5.1.4", - "@openfin/core": "36.80.10" - } -} \ No newline at end of file + "name": "use-channel-api-issue-commands-to-a-platform", + "version": "36.80.11", + "description": "A demonstration of one app can issue commands to a platform application.", + "main": "index.js", + "scripts": { + "kill": "node ./scripts/kill.mjs", + "client": "node ./scripts/launch.mjs", + "build-client": "webpack build --config ./client/webpack.config.js --mode=development", + "build": "npm run build-client", + "start": "npx --yes http-server ./public -p 5050 -c-1", + "setup": "cd ../../../ && npm install && cd how-to/use-channel-api/issue-commands-to-a-platform && npm run build" + }, + "author": "john.mandia@openfin.co", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4", + "@openfin/core": "36.80.11" + } +} diff --git a/how-to/use-channel-api/issue-commands-to-a-platform/public/manifest.fin.json b/how-to/use-channel-api/issue-commands-to-a-platform/public/manifest.fin.json index 48f34eff..8ae98c46 100644 --- a/how-to/use-channel-api/issue-commands-to-a-platform/public/manifest.fin.json +++ b/how-to/use-channel-api/issue-commands-to-a-platform/public/manifest.fin.json @@ -1,14 +1,14 @@ { - "licenseKey": "openfin-demo-license-key", - "runtime": { - "version": "36.122.80.10", - "arguments": "--v=1" - }, - "startup_app": { - "name": "issue-commands-to-platform", - "uuid": "issue-commands-to-platform", - "url": "http://localhost:5050/html/window.html", - "autoShow": true, - "icon": "http://localhost:5050/favicon.ico" - } -} \ No newline at end of file + "licenseKey": "openfin-demo-license-key", + "runtime": { + "version": "36.122.80.11", + "arguments": "--v=1" + }, + "startup_app": { + "name": "issue-commands-to-platform", + "uuid": "issue-commands-to-platform", + "url": "http://localhost:5050/html/window.html", + "autoShow": true, + "icon": "http://localhost:5050/favicon.ico" + } +} diff --git a/how-to/use-channel-api/issue-commands-to-a-platform/public/platform.fin.json b/how-to/use-channel-api/issue-commands-to-a-platform/public/platform.fin.json index bf4a9d6a..f007f255 100644 --- a/how-to/use-channel-api/issue-commands-to-a-platform/public/platform.fin.json +++ b/how-to/use-channel-api/issue-commands-to-a-platform/public/platform.fin.json @@ -1,12 +1,12 @@ { - "runtime": { - "arguments": "--v=1 --inspect", - "version": "36.122.80.10" - }, - "platform": { - "uuid": "how-to-use-channel-api-issue-commands-to-a-platform", - "autoShow": true, - "providerUrl": "http://localhost:5050/html/provider.html", - "icon": "http://localhost:5050/favicon.ico" - } -} \ No newline at end of file + "runtime": { + "arguments": "--v=1 --inspect", + "version": "36.122.80.11" + }, + "platform": { + "uuid": "how-to-use-channel-api-issue-commands-to-a-platform", + "autoShow": true, + "providerUrl": "http://localhost:5050/html/provider.html", + "icon": "http://localhost:5050/favicon.ico" + } +} diff --git a/how-to/use-channel-api/issue-commands-to-a-platform/scripts/launch.mjs b/how-to/use-channel-api/issue-commands-to-a-platform/scripts/launch.mjs index fd08a2a4..50444893 100644 --- a/how-to/use-channel-api/issue-commands-to-a-platform/scripts/launch.mjs +++ b/how-to/use-channel-api/issue-commands-to-a-platform/scripts/launch.mjs @@ -5,6 +5,7 @@ * Pressing Ctrl+C/Command+C will terminate the application. */ import { connect, launch } from '@openfin/node-adapter'; +import { exec } from 'child_process'; import { setDefaultResultOrder } from 'dns'; /** @@ -13,68 +14,10 @@ import { setDefaultResultOrder } from 'dns'; */ async function run(manifestUrl) { try { - let quitRequested = false; - let quit; - - const fin = await launchFromNode(manifestUrl); - - if (fin) { - const manifest = await fin.System.fetchManifest(manifestUrl); - - if (manifest.platform?.uuid !== undefined) { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling platform quit'); - const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); - await platform.quit(); - } - } catch (err) { - if (err.toString().includes('no longer connected')) { - console.log('Platform no longer connected'); - console.log('Exiting process'); - process.exit(); - } else { - console.error(err); - } - } - }; - console.log(`Wrapped target platform: ${manifest.platform.uuid}`); - } else { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling application quit'); - const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); - await app.quit(); - } - } catch (err) { - console.error(err); - } - }; - console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); - } - - // do something when app is closing - process.on('exit', async () => { - console.log('Process exit called'); - await quit(); - }); - - // catches ctrl+c event - process.on('SIGINT', async () => { - console.log('Ctrl + C called'); - await quit(); - }); - - console.log(`You successfully connected to the manifest: ${manifestUrl}`); - console.log(`Please wait while the sample loads.`); - console.log(); - console.log(`If using browser use the Quit option from the main menu.`); - console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); - console.log(); + if (process.platform === 'darwin') { + await launchFromFinsLink(manifestUrl); + } else { + await launchFromNodeAdapter(manifestUrl); } } catch (e) { console.error(`Error: Connection failed`); @@ -82,13 +25,136 @@ async function run(manifestUrl) { } } +/** + * Launch the manifest using the node adapter. + * @param manifestUrl the url to launch + */ +async function launchFromNodeAdapter(manifestUrl) { + let quitRequested = false; + let quit; + + const fin = await connectAndGetFinAPI(manifestUrl); + + if (fin) { + const manifest = await fin.System.fetchManifest(manifestUrl); + + if (manifest.platform?.uuid !== undefined) { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling platform quit'); + const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); + await platform.quit(); + } + } catch (err) { + if (err.toString().includes('no longer connected')) { + console.log('Platform no longer connected'); + console.log('Exiting process'); + process.exit(); + } else { + console.error(err); + } + } + }; + console.log(`Wrapped target platform: ${manifest.platform.uuid}`); + } else { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling application quit'); + const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); + await app.quit(); + } + } catch (err) { + console.error(err); + } + }; + console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); + } + + // do something when app is closing + process.on('exit', async () => { + console.log('Process exit called'); + await quit(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + await quit(); + }); + + console.log(`You successfully connected to the manifest: ${manifestUrl}`); + console.log(`Please wait while the sample loads.`); + console.log(); + console.log(`Close all platform windows to close the platform.`); + console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); + console.log(); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + */ +async function launchFromFinsLink(manifestUrl) { + console.log(); + console.log(`Launching manifest...`); + console.log(); + const finsLink = manifestUrl.replace('http', 'fin'); + const finsProcess = exec(`open ${finsLink}`); + + /** + * A simple message to inform the user how to quit the platform. + */ + function logQuitMessage() { + console.log(); + console.log('Please quit the platform using:'); + console.log(); + console.log('- Process Manager (https://start.openfin.co/pm)'); + console.log('- run npm run kill to kill all OpenFin processes.'); + console.log(); + console.log(); + } + + finsProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + finsProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + // do something when app is closing + process.on('exit', async () => { + console.log('Please wait for the OpenFin application to launch.'); + logQuitMessage(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + logQuitMessage(); + }); + + finsProcess.on('exit', (code) => { + if (code === 0) { + console.log('Manifest launched successfully'); + } else { + console.log(`Child process exited with code ${code.toString()}`); + } + }); +} + /** * Launch the manifest using the node adapter. * @param manifestUrl The manifest to launch. * @param exitMethod The method to call if the adapter connection exits. * @returns The fin object representing the connection. */ -async function launchFromNode(manifestUrl, exitMethod) { +async function connectAndGetFinAPI(manifestUrl, exitMethod) { try { console.log(`Launching manifest...`); console.log(); diff --git a/how-to/use-content-creation-rules/package.json b/how-to/use-content-creation-rules/package.json index f8fe2c1e..fd1516f0 100644 --- a/how-to/use-content-creation-rules/package.json +++ b/how-to/use-content-creation-rules/package.json @@ -1,24 +1,24 @@ { - "name": "use-content-creation-rules", - "version": "0.0.1", - "description": "How to use content creation rules.", - "main": "index.js", - "scripts": { - "kill": "node ./scripts/kill.mjs", - "client": "node ./scripts/launch.mjs", - "build-client": "webpack build --config ./client/webpack.config.js --mode=development", - "build": "npm run build-client", - "start": "npx --yes http-server ./public -p 5050 -c-1", - "setup": "cd ../../ && npm install && cd how-to/use-content-creation-rules && npm run build" - }, - "author": "@adam-saland", - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "@openfin/node-adapter": "36.80.10", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", - "webpack-cli": "^5.1.4", - "@openfin/core": "36.80.10" - } -} \ No newline at end of file + "name": "use-content-creation-rules", + "version": "36.80.11", + "description": "How to use content creation rules.", + "main": "index.js", + "scripts": { + "kill": "node ./scripts/kill.mjs", + "client": "node ./scripts/launch.mjs", + "build-client": "webpack build --config ./client/webpack.config.js --mode=development", + "build": "npm run build-client", + "start": "npx --yes http-server ./public -p 5050 -c-1", + "setup": "cd ../../ && npm install && cd how-to/use-content-creation-rules && npm run build" + }, + "author": "@adam-saland", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4", + "@openfin/core": "36.80.11" + } +} diff --git a/how-to/use-content-creation-rules/public/manifest.fin.json b/how-to/use-content-creation-rules/public/manifest.fin.json index f48ecf5e..97f85c8b 100644 --- a/how-to/use-content-creation-rules/public/manifest.fin.json +++ b/how-to/use-content-creation-rules/public/manifest.fin.json @@ -1,107 +1,95 @@ { - "runtime": { - "arguments": "--v=1 --inspect", - "version": "36.122.80.10" - }, - "shortcut": { - "company": "OpenFin", - "description": "Content Creation Rules", - "icon": "http://localhost:5050/favicon.ico", - "name": "Content Creation Rules" - }, - "platform": { - "uuid": "use-content-creation-rules", - "name": "use-content-creation-rules", - "icon": "http://localhost:5050/favicon.ico", - "autoShow": false, - "providerUrl": "http://localhost:5050/html/platform-provider.html", - "waitForPageLoad": false, - "defaultWindowOptions": { - "waitForPageLoad": false, - "url": "http://localhost:5050/html/default-platform-window.html", - "icon": "http://localhost:5050/favicon.ico", - "contextMenu": true, - "defaultWidth": 600, - "defaultHeight": 600, - "defaultLeft": 0, - "defaultTop": 0, - "saveWindowState": false, - "backgroundThrottling": true, - "minHeight": 445, - "minWidth": 308 - }, - "defaultViewOptions": { - "contentCreation": { - "rules": [ - { - "behavior": "view", - "match": [ - "*://*.google.com/*" - ] - }, - { - "behavior": "view", - "match": [ - "*://*.examples.com/category/business/*" - ] - }, - { - "behavior": "window", - "match": [ - "*://*.bing.com/*" - ] - }, - { - "behavior": "window", - "match": [ - "*://*.examples.com/category/education/*" - ] - }, - { - "behavior": "browser", - "match": [ - "*://*.microsoft.com/*" - ] - }, - { - "behavior": "block", - "match": [ - "*://*.apple.com/*" - ] - } - ] - } - }, - "commands": [ - { - "command": "stack.nextTab", - "keys": "Ctrl+Tab" - } - ] - }, - "snapshot": { - "windows": [ - { - "layout": { - "content": [ - { - "type": "stack", - "id": "no-drop-target", - "content": [ - { - "type": "component", - "componentName": "view", - "componentState": { - "name": "component_A1", - "processAffinity": "ps_1", - "url": "http://localhost:5050/html/app.html" - } - } - ] - } - ] - } - } - ] - } -} \ No newline at end of file + "runtime": { + "arguments": "--v=1 --inspect", + "version": "36.122.80.11" + }, + "shortcut": { + "company": "OpenFin", + "description": "Content Creation Rules", + "icon": "http://localhost:5050/favicon.ico", + "name": "Content Creation Rules" + }, + "platform": { + "uuid": "use-content-creation-rules", + "name": "use-content-creation-rules", + "icon": "http://localhost:5050/favicon.ico", + "autoShow": false, + "providerUrl": "http://localhost:5050/html/platform-provider.html", + "waitForPageLoad": false, + "defaultWindowOptions": { + "waitForPageLoad": false, + "url": "http://localhost:5050/html/default-platform-window.html", + "icon": "http://localhost:5050/favicon.ico", + "contextMenu": true, + "defaultWidth": 600, + "defaultHeight": 600, + "defaultLeft": 0, + "defaultTop": 0, + "saveWindowState": false, + "backgroundThrottling": true, + "minHeight": 445, + "minWidth": 308 + }, + "defaultViewOptions": { + "contentCreation": { + "rules": [ + { + "behavior": "view", + "match": ["*://*.google.com/*"] + }, + { + "behavior": "view", + "match": ["*://*.examples.com/category/business/*"] + }, + { + "behavior": "window", + "match": ["*://*.bing.com/*"] + }, + { + "behavior": "window", + "match": ["*://*.examples.com/category/education/*"] + }, + { + "behavior": "browser", + "match": ["*://*.microsoft.com/*"] + }, + { + "behavior": "block", + "match": ["*://*.apple.com/*"] + } + ] + } + }, + "commands": [ + { + "command": "stack.nextTab", + "keys": "Ctrl+Tab" + } + ] + }, + "snapshot": { + "windows": [ + { + "layout": { + "content": [ + { + "type": "stack", + "id": "no-drop-target", + "content": [ + { + "type": "component", + "componentName": "view", + "componentState": { + "name": "component_A1", + "processAffinity": "ps_1", + "url": "http://localhost:5050/html/app.html" + } + } + ] + } + ] + } + } + ] + } +} diff --git a/how-to/use-content-creation-rules/scripts/launch.mjs b/how-to/use-content-creation-rules/scripts/launch.mjs index fd08a2a4..50444893 100644 --- a/how-to/use-content-creation-rules/scripts/launch.mjs +++ b/how-to/use-content-creation-rules/scripts/launch.mjs @@ -5,6 +5,7 @@ * Pressing Ctrl+C/Command+C will terminate the application. */ import { connect, launch } from '@openfin/node-adapter'; +import { exec } from 'child_process'; import { setDefaultResultOrder } from 'dns'; /** @@ -13,68 +14,10 @@ import { setDefaultResultOrder } from 'dns'; */ async function run(manifestUrl) { try { - let quitRequested = false; - let quit; - - const fin = await launchFromNode(manifestUrl); - - if (fin) { - const manifest = await fin.System.fetchManifest(manifestUrl); - - if (manifest.platform?.uuid !== undefined) { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling platform quit'); - const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); - await platform.quit(); - } - } catch (err) { - if (err.toString().includes('no longer connected')) { - console.log('Platform no longer connected'); - console.log('Exiting process'); - process.exit(); - } else { - console.error(err); - } - } - }; - console.log(`Wrapped target platform: ${manifest.platform.uuid}`); - } else { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling application quit'); - const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); - await app.quit(); - } - } catch (err) { - console.error(err); - } - }; - console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); - } - - // do something when app is closing - process.on('exit', async () => { - console.log('Process exit called'); - await quit(); - }); - - // catches ctrl+c event - process.on('SIGINT', async () => { - console.log('Ctrl + C called'); - await quit(); - }); - - console.log(`You successfully connected to the manifest: ${manifestUrl}`); - console.log(`Please wait while the sample loads.`); - console.log(); - console.log(`If using browser use the Quit option from the main menu.`); - console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); - console.log(); + if (process.platform === 'darwin') { + await launchFromFinsLink(manifestUrl); + } else { + await launchFromNodeAdapter(manifestUrl); } } catch (e) { console.error(`Error: Connection failed`); @@ -82,13 +25,136 @@ async function run(manifestUrl) { } } +/** + * Launch the manifest using the node adapter. + * @param manifestUrl the url to launch + */ +async function launchFromNodeAdapter(manifestUrl) { + let quitRequested = false; + let quit; + + const fin = await connectAndGetFinAPI(manifestUrl); + + if (fin) { + const manifest = await fin.System.fetchManifest(manifestUrl); + + if (manifest.platform?.uuid !== undefined) { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling platform quit'); + const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); + await platform.quit(); + } + } catch (err) { + if (err.toString().includes('no longer connected')) { + console.log('Platform no longer connected'); + console.log('Exiting process'); + process.exit(); + } else { + console.error(err); + } + } + }; + console.log(`Wrapped target platform: ${manifest.platform.uuid}`); + } else { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling application quit'); + const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); + await app.quit(); + } + } catch (err) { + console.error(err); + } + }; + console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); + } + + // do something when app is closing + process.on('exit', async () => { + console.log('Process exit called'); + await quit(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + await quit(); + }); + + console.log(`You successfully connected to the manifest: ${manifestUrl}`); + console.log(`Please wait while the sample loads.`); + console.log(); + console.log(`Close all platform windows to close the platform.`); + console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); + console.log(); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + */ +async function launchFromFinsLink(manifestUrl) { + console.log(); + console.log(`Launching manifest...`); + console.log(); + const finsLink = manifestUrl.replace('http', 'fin'); + const finsProcess = exec(`open ${finsLink}`); + + /** + * A simple message to inform the user how to quit the platform. + */ + function logQuitMessage() { + console.log(); + console.log('Please quit the platform using:'); + console.log(); + console.log('- Process Manager (https://start.openfin.co/pm)'); + console.log('- run npm run kill to kill all OpenFin processes.'); + console.log(); + console.log(); + } + + finsProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + finsProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + // do something when app is closing + process.on('exit', async () => { + console.log('Please wait for the OpenFin application to launch.'); + logQuitMessage(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + logQuitMessage(); + }); + + finsProcess.on('exit', (code) => { + if (code === 0) { + console.log('Manifest launched successfully'); + } else { + console.log(`Child process exited with code ${code.toString()}`); + } + }); +} + /** * Launch the manifest using the node adapter. * @param manifestUrl The manifest to launch. * @param exitMethod The method to call if the adapter connection exits. * @returns The fin object representing the connection. */ -async function launchFromNode(manifestUrl, exitMethod) { +async function connectAndGetFinAPI(manifestUrl, exitMethod) { try { console.log(`Launching manifest...`); console.log(); diff --git a/how-to/use-dynamic-manifest/basic/package.json b/how-to/use-dynamic-manifest/basic/package.json index 9b5742f7..e1560d20 100644 --- a/how-to/use-dynamic-manifest/basic/package.json +++ b/how-to/use-dynamic-manifest/basic/package.json @@ -1,28 +1,28 @@ { - "name": "use-dynamic-manifest-basic", - "version": "0.0.1", - "description": "A basic demonstration of how to use dynamic manifest", - "main": "index.js", - "scripts": { - "build": "npm run build-server", - "build-server": "tsc --project ./server", - "start": "npm run server", - "server": "node ./server/build/index.js", - "client": "node ./scripts/launch.mjs http://localhost:5050/manifest?env=dev", - "dev": "node ./scripts/launch.mjs http://localhost:5050/manifest?env=dev", - "staging": "node ./scripts/launch.mjs http://localhost:5050/manifest?env=staging", - "kill": "npm --prefix ../../common/ run kill", - "setup": "cd ../../../ && npm install && cd how-to/use-dynamic-manifest/basic && npm run build" - }, - "author": "pj.singh@openfin.co", - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "express": "^4.18.2", - "@openfin/node-adapter": "36.80.10", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", - "webpack-cli": "^5.1.4", - "@openfin/core": "36.80.10" - } -} \ No newline at end of file + "name": "use-dynamic-manifest-basic", + "version": "36.80.11", + "description": "A basic demonstration of how to use dynamic manifest", + "main": "index.js", + "scripts": { + "build": "npm run build-server", + "build-server": "tsc --project ./server", + "start": "npm run server", + "server": "node ./server/build/index.js", + "client": "node ./scripts/launch.mjs http://localhost:5050/manifest?env=dev", + "dev": "node ./scripts/launch.mjs http://localhost:5050/manifest?env=dev", + "staging": "node ./scripts/launch.mjs http://localhost:5050/manifest?env=staging", + "kill": "npm --prefix ../../common/ run kill", + "setup": "cd ../../../ && npm install && cd how-to/use-dynamic-manifest/basic && npm run build" + }, + "author": "pj.singh@openfin.co", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "express": "^4.19.2", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4", + "@openfin/core": "36.80.11" + } +} diff --git a/how-to/use-dynamic-manifest/basic/scripts/launch.mjs b/how-to/use-dynamic-manifest/basic/scripts/launch.mjs index fd08a2a4..50444893 100644 --- a/how-to/use-dynamic-manifest/basic/scripts/launch.mjs +++ b/how-to/use-dynamic-manifest/basic/scripts/launch.mjs @@ -5,6 +5,7 @@ * Pressing Ctrl+C/Command+C will terminate the application. */ import { connect, launch } from '@openfin/node-adapter'; +import { exec } from 'child_process'; import { setDefaultResultOrder } from 'dns'; /** @@ -13,68 +14,10 @@ import { setDefaultResultOrder } from 'dns'; */ async function run(manifestUrl) { try { - let quitRequested = false; - let quit; - - const fin = await launchFromNode(manifestUrl); - - if (fin) { - const manifest = await fin.System.fetchManifest(manifestUrl); - - if (manifest.platform?.uuid !== undefined) { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling platform quit'); - const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); - await platform.quit(); - } - } catch (err) { - if (err.toString().includes('no longer connected')) { - console.log('Platform no longer connected'); - console.log('Exiting process'); - process.exit(); - } else { - console.error(err); - } - } - }; - console.log(`Wrapped target platform: ${manifest.platform.uuid}`); - } else { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling application quit'); - const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); - await app.quit(); - } - } catch (err) { - console.error(err); - } - }; - console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); - } - - // do something when app is closing - process.on('exit', async () => { - console.log('Process exit called'); - await quit(); - }); - - // catches ctrl+c event - process.on('SIGINT', async () => { - console.log('Ctrl + C called'); - await quit(); - }); - - console.log(`You successfully connected to the manifest: ${manifestUrl}`); - console.log(`Please wait while the sample loads.`); - console.log(); - console.log(`If using browser use the Quit option from the main menu.`); - console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); - console.log(); + if (process.platform === 'darwin') { + await launchFromFinsLink(manifestUrl); + } else { + await launchFromNodeAdapter(manifestUrl); } } catch (e) { console.error(`Error: Connection failed`); @@ -82,13 +25,136 @@ async function run(manifestUrl) { } } +/** + * Launch the manifest using the node adapter. + * @param manifestUrl the url to launch + */ +async function launchFromNodeAdapter(manifestUrl) { + let quitRequested = false; + let quit; + + const fin = await connectAndGetFinAPI(manifestUrl); + + if (fin) { + const manifest = await fin.System.fetchManifest(manifestUrl); + + if (manifest.platform?.uuid !== undefined) { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling platform quit'); + const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); + await platform.quit(); + } + } catch (err) { + if (err.toString().includes('no longer connected')) { + console.log('Platform no longer connected'); + console.log('Exiting process'); + process.exit(); + } else { + console.error(err); + } + } + }; + console.log(`Wrapped target platform: ${manifest.platform.uuid}`); + } else { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling application quit'); + const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); + await app.quit(); + } + } catch (err) { + console.error(err); + } + }; + console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); + } + + // do something when app is closing + process.on('exit', async () => { + console.log('Process exit called'); + await quit(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + await quit(); + }); + + console.log(`You successfully connected to the manifest: ${manifestUrl}`); + console.log(`Please wait while the sample loads.`); + console.log(); + console.log(`Close all platform windows to close the platform.`); + console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); + console.log(); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + */ +async function launchFromFinsLink(manifestUrl) { + console.log(); + console.log(`Launching manifest...`); + console.log(); + const finsLink = manifestUrl.replace('http', 'fin'); + const finsProcess = exec(`open ${finsLink}`); + + /** + * A simple message to inform the user how to quit the platform. + */ + function logQuitMessage() { + console.log(); + console.log('Please quit the platform using:'); + console.log(); + console.log('- Process Manager (https://start.openfin.co/pm)'); + console.log('- run npm run kill to kill all OpenFin processes.'); + console.log(); + console.log(); + } + + finsProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + finsProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + // do something when app is closing + process.on('exit', async () => { + console.log('Please wait for the OpenFin application to launch.'); + logQuitMessage(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + logQuitMessage(); + }); + + finsProcess.on('exit', (code) => { + if (code === 0) { + console.log('Manifest launched successfully'); + } else { + console.log(`Child process exited with code ${code.toString()}`); + } + }); +} + /** * Launch the manifest using the node adapter. * @param manifestUrl The manifest to launch. * @param exitMethod The method to call if the adapter connection exits. * @returns The fin object representing the connection. */ -async function launchFromNode(manifestUrl, exitMethod) { +async function connectAndGetFinAPI(manifestUrl, exitMethod) { try { console.log(`Launching manifest...`); console.log(); diff --git a/how-to/use-interop/README.md b/how-to/use-interop/README.md index 36687ac6..953c875f 100644 --- a/how-to/use-interop/README.md +++ b/how-to/use-interop/README.md @@ -8,9 +8,10 @@ This repository contains examples showing how to use the Interop API across your ### Examples -| Example | Description | -| ----------------------------------------------------------------------- | ---------------------------------------------------------------------------- | -| [How To - Setup Cross-Platform Interop](./setup-multi-platform-interop) | How to seamlessly connect to another Interop Broker using Platform Overrides | +| Example | Description | +| ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | +| [How To - Setup Cross-Platform Interop](./setup-multi-platform-interop) | How to seamlessly connect to another Interop Broker using Platform Overrides | +| [How To - Use Cloud Interop](./cloud-interop) | How to seamlessly connect to another Interop Broker using our cloud interop solution | ## Before you get started diff --git a/how-to/use-interop/cloud-interop/README.md b/how-to/use-interop/cloud-interop/README.md new file mode 100644 index 00000000..5fc7acd1 --- /dev/null +++ b/how-to/use-interop/cloud-interop/README.md @@ -0,0 +1,92 @@ +# Use Cross Platform Interop + +This repository demonstrates how to use OpenFin's interop overrides to enable context sharing from two different Platform Applications using our [@openfin/cloud-interop](https://www.npmjs.com/package/@openfin/cloud-interop) npm package and our cloud offering. + +Before diving in we recommend taking some time familiarize yourself with the concepts and terms found in the [interoperability overview](https://developers.openfin.co/of-docs/docs/interoperability-overview) section of our documentation. + +## How it Works + +The interop object, made available through OpenFin views and windows, is programmatically accessible through the concept of platform provider overrides. A platform provider override enables a developer to implement additional logic from objects defined on an instance of an OpenFin window or view entity. In this case specifically, we will be focusing on the `interopOverride`. We are creating an interop override by providing configuration to the [@openfin/cloud-interop](https://www.npmjs.com/package/@openfin/cloud-interop) cloudInteropOverride function. + +We read cloud interop settings from the custom settings section of [manifest.fin.json](./public/manifest.fin.json) and [second.manifest.fin.json](./public/second.manifest.fin.json). You will need to contact OpenFin to get the required settings for your PoC and then you will need to enable this functionality. + +```json +"customSettings": { + "cloudInteropProvider": { + "enabled": false, + "connectParams": { + "url": "", + "userId": "", + "password": "", + "platformId": "cloud-interop", + "sourceId": "platform1", + "sourceDisplayName": "Platform 1" + } + } +} +``` + +We have created a custom window template to host the views so that we can include a context group picker and the platform's title. The logic for this can be found here: [window.ts](./client/src/window.ts) and the html can be found here: [window.html](./public/html/window.html). + +The views point to FDC3 and Interop urls that we have created to help developers learn more about interop. + +## Get Started + +Follow the instructions below to get up and running. + +### Set up the project + +1. Install dependencies and do the initial build. Note that these examples assume you are in the sub-directory for the example. + +```shell +npm run setup +``` + +2. Build the project. + +```shell +npm run build +``` + +3. Start the test server in a new window. + +```shell +npm run start +``` + +4. Start the first Platform application. + +```shell +npm run client +``` + +5. Start the second Platform application. + +```shell +npm run secondclient +``` + +### Use the project interface + +From a single Platform: add two views to the same window's context group, and sharing context between the two views. + +1. Add each view to the same context group. +2. Submit a context from the first view. +3. Submit a different context from second view. + +![single platform context sharing](../assets/single-platform-context-sharing.gif) + +From two different Platforms: add a view from a window's context group in platform-1 and a view from a window's context group in platform-2 to a connected context group based on a shared or common context group between each Platform. Once connected we can share context between two different platforms. + +1. Add a view from platform-1 the window's context group in platform-1. +2. Add a view from platform-2 to the same context group selected in platform-1. +3. Submit a context from the first view. +4. Submit a different context from second view. + +> NOTE: the logic for creating a cloud interop override instance and passing it to the platform [client/src/provider.ts](./client/src/provider.ts) + +![multi platform context sharing](../assets/multi-platform-context-sharing.gif) + +### A note about this example + +This is an example of how to use OpenFin APIs to configure OpenFin Container. Its purpose is to provide an example and suggestions. **DO NOT** assume that it contains production-ready code. Please use this as a guide and provide feedback. Thanks! diff --git a/how-to/use-interop/cloud-interop/client/src/provider.ts b/how-to/use-interop/cloud-interop/client/src/provider.ts new file mode 100644 index 00000000..77b15b86 --- /dev/null +++ b/how-to/use-interop/cloud-interop/client/src/provider.ts @@ -0,0 +1,16 @@ +import { cloudInteropOverride } from "@openfin/cloud-interop"; +import type OpenFin from "@openfin/core"; +import { getManifestCustomSettings } from "./settings"; + +window.addEventListener("DOMContentLoaded", async () => { + const customSettings = await getManifestCustomSettings(); + const interopOverrides = []; + + if (customSettings?.cloudInteropProvider?.enabled) { + const initializedCloudInteropOverride = (await cloudInteropOverride( + customSettings?.cloudInteropProvider?.connectParams + )) as unknown as OpenFin.ConstructorOverride; + interopOverrides.push(initializedCloudInteropOverride); + } + fin.Platform.init({ interopOverride: interopOverrides }).catch((error) => console.error(error)); +}); diff --git a/how-to/use-interop/cloud-interop/client/src/settings.ts b/how-to/use-interop/cloud-interop/client/src/settings.ts new file mode 100644 index 00000000..d09093bb --- /dev/null +++ b/how-to/use-interop/cloud-interop/client/src/settings.ts @@ -0,0 +1,12 @@ +import type OpenFin from "@openfin/core"; +import type { CustomSettings } from "./shapes"; + +/** + * Load the customSettings section from the application manifest. + * @returns The custom settings from the manifest. + */ +export async function getManifestCustomSettings(): Promise { + const app = await fin.Application.getCurrent(); + const manifest: OpenFin.Manifest & { customSettings?: CustomSettings } = await app.getManifest(); + return manifest.customSettings; +} diff --git a/how-to/use-interop/cloud-interop/client/src/shapes.ts b/how-to/use-interop/cloud-interop/client/src/shapes.ts new file mode 100644 index 00000000..77646b12 --- /dev/null +++ b/how-to/use-interop/cloud-interop/client/src/shapes.ts @@ -0,0 +1,26 @@ +import type { CloudInteropOverrideParams } from "@openfin/cloud-interop"; + +/** + * Settings for the cloud interop provider. + */ +export interface CloudInteropProviderSettings { + /** + * Is the cloud interop provider enabled + */ + enabled: boolean; + + /** + * The connect parameters for the cloud interop provider. + */ + connectParams: CloudInteropOverrideParams; +} + +/** + * Custom settings for the application + */ +export interface CustomSettings { + /** + * cloud related config + */ + cloudInteropProvider: CloudInteropProviderSettings; +} diff --git a/how-to/use-interop/cloud-interop/client/src/window.ts b/how-to/use-interop/cloud-interop/client/src/window.ts new file mode 100644 index 00000000..5e3db08d --- /dev/null +++ b/how-to/use-interop/cloud-interop/client/src/window.ts @@ -0,0 +1,118 @@ +import type OpenFin from "@openfin/core"; + +export const CONTAINER_ID = "layout-container"; +const openfinWindow: OpenFin.Window = fin.Window.getCurrentSync(); +const openfinApplication: OpenFin.Application = fin.Application.getCurrentSync(); + +let lastFocusedView: OpenFin.Identity; + +openfinApplication + .on("view-focused", (viewEvent): void => { + lastFocusedView = viewEvent.viewIdentity; + }) + .catch((error) => console.error(error)); + +window.addEventListener("DOMContentLoaded", async () => { + await fin.Platform.Layout.init({ containerId: CONTAINER_ID }); + await setupTitleBar(); +}); + +/** + * Setup the content for the title bar. + */ +async function setupTitleBar(): Promise { + const title = document.querySelector("#title"); + const minBtn = document.querySelector("#minimize-button"); + const maxBtn = document.querySelector("#expand-button"); + const closeBtn = document.querySelector("#close-button"); + + if (title && minBtn && maxBtn && closeBtn) { + title.innerHTML = fin.me.identity.uuid; + + minBtn.addEventListener("click", minimizeWindow); + maxBtn.addEventListener("click", maxOrRestore); + closeBtn.addEventListener("click", closeWindow); + } + + await addContextGroupButtons(); +} + +/** + * Joins a context group by passing in the top-level variable `lastFocusedView` as the `target` parameter of the `joinContextGroup` function. + * @param event - DOM click event that is passed in to the button click event from `addContextGroupButtons` local `newButton` variable + */ +async function changeContextGroup(event: Event): Promise { + const selectedColorElement: HTMLElement = event.target as HTMLElement; + const color: string = selectedColorElement.title; + await fin.me.interop.joinContextGroup(color, lastFocusedView); + const contextGroups: OpenFin.ContextGroupInfo[] = await fin.me.interop.getContextGroups(); + const focusedTab = document.querySelector(`#tab-${lastFocusedView.name}`); + if (focusedTab) { + focusedTab.classList.remove( + ...contextGroups.map( + ({ displayMetadata }: OpenFin.ContextGroupInfo) => `${displayMetadata?.name}-channel` + ) + ); + } + const focusedView = document.querySelector(`#tab-${lastFocusedView.name}`); + if (focusedView) { + focusedView.classList.add(`${color}-channel`); + } +} + +/** + * Add the context group buttons. + * 1. Retrieves a Platform's interop context groups. + * 2. Iterates all context groups and creates a corresponding button per context group (color channel). + * 3. Adds a click listener to each button with the `changeContextGroup` function as the listener callback. + */ +async function addContextGroupButtons(): Promise { + const contextGroups: OpenFin.ContextGroupInfo[] = await fin.me.interop.getContextGroups(); + const windowFrameStyleSheet: CSSStyleSheet = document.styleSheets[0]; + const buttonsWrapper = document.querySelector("#buttons-wrapper"); + if (buttonsWrapper) { + for (const systemChannel of contextGroups) { + const nm = systemChannel.displayMetadata?.name; + const col = systemChannel.displayMetadata?.color; + if (nm && col) { + windowFrameStyleSheet.insertRule(`.${nm}-channel { border-left: 2px solid ${col} !important;}`); + windowFrameStyleSheet.insertRule(`#${nm}-button:after { background-color: ${col}}`); + const newButton = document.createElement("div"); + newButton.classList.add("button"); + newButton.classList.add("channel-button"); + newButton.id = `${nm}-button`; + newButton.title = nm; + newButton.addEventListener("click", changeContextGroup); + buttonsWrapper.prepend(newButton); + } + } + } +} + +/** + * Maximize or restore the window. + * @returns Nothing. + */ +async function maxOrRestore(): Promise { + if ((await openfinWindow.getState()) === "normal") { + return openfinWindow.maximize(); + } + + return openfinWindow.restore(); +} + +/** + * Close the window. + * @returns Nothing. + */ +async function closeWindow(): Promise { + return openfinWindow.close(); +} + +/** + * Minimize the window. + * @returns Nothing. + */ +async function minimizeWindow(): Promise { + return openfinWindow.minimize(); +} diff --git a/how-to/use-interop/cloud-interop/client/tsconfig.json b/how-to/use-interop/cloud-interop/client/tsconfig.json new file mode 100644 index 00000000..0453c0cc --- /dev/null +++ b/how-to/use-interop/cloud-interop/client/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "es2021", + "module": "ES2020", + "sourceMap": true, + "rootDir": "./src", + "outDir": "build", + "skipLibCheck": true, + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "moduleResolution": "node", + "types": ["./types/fin"] + }, + "include": ["./src/**/*.ts"] +} diff --git a/how-to/use-interop/cloud-interop/client/types/fin.d.ts b/how-to/use-interop/cloud-interop/client/types/fin.d.ts new file mode 100644 index 00000000..8936d86c --- /dev/null +++ b/how-to/use-interop/cloud-interop/client/types/fin.d.ts @@ -0,0 +1,5 @@ +import type { fin as FinApi } from "@openfin/core"; + +declare global { + const fin: typeof FinApi; +} diff --git a/how-to/use-interop/cloud-interop/client/webpack.config.js b/how-to/use-interop/cloud-interop/client/webpack.config.js new file mode 100644 index 00000000..aa446cfe --- /dev/null +++ b/how-to/use-interop/cloud-interop/client/webpack.config.js @@ -0,0 +1,44 @@ +const path = require('path'); + +module.exports = [ + { + entry: './client/src/provider.ts', + devtool: 'inline-source-map', + module: { + rules: [ + { + test: /\.tsx?$/, + use: 'ts-loader', + exclude: /node_modules/ + } + ] + }, + resolve: { + extensions: ['.tsx', '.ts', '.js'] + }, + output: { + filename: 'provider.bundle.js', + path: path.resolve(__dirname, '..', 'public', 'js') + } + }, + { + entry: './client/src/window.ts', + devtool: 'inline-source-map', + module: { + rules: [ + { + test: /\.tsx?$/, + use: 'ts-loader', + exclude: /node_modules/ + } + ] + }, + resolve: { + extensions: ['.tsx', '.ts', '.js'] + }, + output: { + filename: 'window.bundle.js', + path: path.resolve(__dirname, '..', 'public', 'js') + } + } +]; diff --git a/how-to/use-interop/cloud-interop/package.json b/how-to/use-interop/cloud-interop/package.json new file mode 100644 index 00000000..c9391b55 --- /dev/null +++ b/how-to/use-interop/cloud-interop/package.json @@ -0,0 +1,28 @@ +{ + "name": "container-starter-use-interop--cloud-interop", + "version": "36.80.11", + "description": "", + "main": "index.js", + "scripts": { + "kill": "node ./scripts/kill.mjs", + "client": "node ./scripts/launch.mjs", + "secondclient": "node ./scripts/launch.mjs http://localhost:5050/second.manifest.fin.json", + "build-client": "webpack build --config ./client/webpack.config.js --mode=development", + "build": "npm run build-client", + "start": "npx --yes http-server ./public -p 5050 -c-1", + "setup": "cd ../../../ && npm install && cd how-to/use-interop/cloud-interop && npm run build" + }, + "author": "adam.saland@openfin.co", + "license": "SEE LICENSE IN LICENSE.MD", + "dependencies": { + "@openfin/cloud-interop": "0.36.12" + }, + "devDependencies": { + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4", + "@openfin/core": "36.80.11" + } +} diff --git a/how-to/use-interop/cloud-interop/public/common/images/icon-blue.png b/how-to/use-interop/cloud-interop/public/common/images/icon-blue.png new file mode 100644 index 00000000..fc784502 Binary files /dev/null and b/how-to/use-interop/cloud-interop/public/common/images/icon-blue.png differ diff --git a/how-to/use-interop/cloud-interop/public/common/style/app.css b/how-to/use-interop/cloud-interop/public/common/style/app.css new file mode 100644 index 00000000..96c4673f --- /dev/null +++ b/how-to/use-interop/cloud-interop/public/common/style/app.css @@ -0,0 +1,929 @@ +@import url('https://fonts.googleapis.com/css2?family=Inter&display=swap'); + +:root { + --brand-background: var(--theme-background-primary, #1e1f23); + --brand-border: var(--theme-background4, #2f3136); + --brand-primary: var(--theme-brand-primary, #0a76d3); + --brand-text: var(--theme-text-default, #ffffff); + --brand-text-secondary: var(--theme-text-help, #c9cbd2); + --brand-input-background: var(--theme-background5, #383a40); + --brand-input-border: var(--theme-background6, #53565f); + --brand-input-border-highlight: var(--theme-input-focused, #c9cbd2); + --brand-table-header: var(--theme-background1, #111214); + --brand-table-header-text: var(--theme-text-default, #ffffff); + --brand-table-row-even: var(--theme-background3, #24262b); + --brand-table-row-odd: var(--theme-background4, #2f3136); + --brand-error: var(--theme-status-critical, #be1d1f); + --brand-success: var(--theme-status-success, #35c759); + + accent-color: var(--brand-primary); +} + +.theme-light { + --brand-background: var(--theme-background-primary, #fafbfe); + --brand-border: var(--theme-background4, #eceef1); + --brand-primary: var(--theme-brand-primary, #0a76d3); + --brand-text: var(--theme-text-default, #111214); + --brand-text-secondary: var(--theme-text-help, #2f3136); + --brand-input-background: var(--theme-background5, #dddfe4); + --brand-input-border: var(--theme-background6, #c9cbd2); + --brand-input-border-highlight: var(--theme-input-focused, #c9cbd2); + --brand-table-header: var(--theme-background1, #ffffff); + --brand-table-header-text: var(--theme-text-default, #111214); + --brand-table-row-even: var(--theme-background3, #eceef1); + --brand-table-row-odd: var(--theme-background4, #c9cbd2); + --brand-error: var(--theme-status-critical, #be1d1f); + --brand-success: var(--theme-status-success, #35c759); +} + +.primary { + color: var(--brand-primary); +} + +.error { + color: var(--brand-error); +} + +.success { + color: var(--brand-success); +} + +::selection { + background-color: var(--brand-primary); +} + +* { + font-family: Inter, 'Sans Serif', sans-serif; + box-sizing: border-box; +} + +html, +body { + height: 100%; +} + +body { + display: flex; + justify-content: stretch; + align-items: stretch; + overflow: hidden; + padding: 20px; + margin: 0; + background-color: var(--brand-background); + color: var(--brand-text); +} + +body.border { + padding: 20px; + margin: 0; + background-color: var(--brand-background); + color: var(--brand-text); + border: 1px solid #000000; + border-radius: 5px; + width: 99%; + height: 99%; +} + +body.border-light { + border-color: var(--brand-input-border-highlight); +} + +body.small { + padding: 15px; +} + +h1 { + font-size: 24px; + font-weight: 700; + line-height: 1; + margin-block-start: 0; + margin-block-end: 0; +} +h1.tag { + font-size: 12px; + font-weight: normal; + margin-top: 5px; + color: var(--brand-text-secondary); +} + +h2 { + font-size: 20px; + font-weight: 700; + line-height: 1; + margin-block-start: 0; + margin-block-end: 0; +} + +h3 { + font-size: 16px; + font-weight: 700; + line-height: 1; + margin-block-start: 0; + margin-block-end: 0; +} + +h4 { + font-size: 14px; + font-weight: 700; + line-height: 1; + margin-block-start: 0; + margin-block-end: 0; +} + +h5 { + font-size: 12px; + font-weight: 700; + line-height: 1; + margin-block-start: 0; + margin-block-end: 0; +} + +p { + color: var(--brand-text-secondary); + font-size: 12px; + margin-block-start: 0; + margin-block-end: 0; +} + +::-webkit-scrollbar { + width: 8px; + height: 8px; +} +::-webkit-scrollbar-track { + background: var(--brand-input-background); + border-radius: 5px; +} +::-webkit-scrollbar-thumb { + background: var(--brand-border); + border-radius: 5px; + border: 1px solid var(--brand-input-border); +} +::-webkit-scrollbar-thumb:hover { + border: 1px solid var(--brand-input-border-highlight); +} + +main { + min-height: 100px; +} + +a { + color: var(--brand-primary); + font-size: 12px; + font-weight: bold; + outline: none; + text-decoration: none; +} + +a:hover, +a:focus { + text-decoration: underline; +} + +button, +input[type='button'], +::-webkit-file-upload-button, +a.button, +footer a { + background-color: var(--brand-primary); + border: 2px solid var(--brand-primary); + color: #ffffff; + border-radius: 5px; + padding: 8px 20px; + text-align: left; + cursor: pointer; + font-size: 12px; + font-weight: bold; + text-decoration: none; + outline: 0; + white-space: nowrap; + transition-property: background-color, color, opacity; + transition-duration: 200ms; + transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1); +} + +a.button:hover, +footer a:hover { + text-decoration: none; +} + +a.button:focus, +a.button:hover, +input[type='button']:focus, +input[type='button']:hover, +input[type='file']:focus::-webkit-file-upload-button, +input[type='file']:hover::-webkit-file-upload-button, +::-webkit-file-upload-button:hover, +footer a:focus, +footer a:not(:disabled):hover, +button:not(:disabled):focus, +button:not(:disabled):hover { + background-image: linear-gradient(rgba(255, 255, 255, 0.1) 0 0); +} + +button.image { + width: 40px; + height: 40px; + padding: 0px; + display: flex; + align-items: center; + justify-content: center; +} +button.image > img { + width: 32px; + height: 32px; +} +button.secondary { + background-color: var(--brand-input-background); + color: var(--brand-text); + border-color: var(--brand-input-border); +} +button.secondary:not(:disabled):hover { + background-color: var(--brand-input-background); +} +button.plain { + border-color: transparent; + background-color: transparent; + color: var(--brand-primary); +} +button.plain:not(:disabled):not(:read-only):hover { + border-color: transparent; + background-color: transparent; +} + +button.small, +::-webkit-file-upload-button, +td button { + padding: 5px 10px; + font-size: 10px; +} +td button.plain { + width: auto; + height: auto; +} + +button.center { + text-align: center; +} + +::-webkit-file-upload-button { + margin-right: 10px; +} + +pre { + margin: 0; + padding: 5px; + border-radius: 5px; + font-size: 12px; + font-family: 'Courier New', Courier, monospace; + white-space: pre-wrap; + border: 1px solid var(--brand-input-border); + background-color: var(--brand-input-background); + width: 100%; + min-height: 20px; +} + +header { + padding-bottom: 10px; + border-bottom: 2px solid var(--brand-border); +} + +footer { + padding-top: 10px; + border-top: 1px solid var(--brand-border); +} + +fieldset { + display: flex; + flex-direction: column; + align-items: flex-start; + border: 0; + padding: 0; + font-size: 12px; + gap: 5px; +} + +fieldset.row { + flex-direction: row; + align-items: center; + gap: 10px; +} + +label { + font-size: 12px; + font-weight: 600; +} + +select, +input[type='text'], +input[type='url'], +input[type='email'], +input[type='password'], +input[type='file'], +input[type='number'], +input[type='date'], +input[type='time'], +input[type='datetime-local'], +input[type='month'], +input[type='week'], +input[type='color'], +textarea { + border-radius: 5px; + border: 1px solid var(--brand-input-border); + background-color: var(--brand-input-background); + font-size: 12px; + outline: 0; + color: var(--brand-text); + width: 50%; + min-width: 200px; + padding: 8px 12px; + box-shadow: rgb(0 0 0 / 25%) 0px 4px 4px; + transition-property: background-color, color, opacity; + transition-duration: 200ms; + transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1); +} + +textarea { + min-height: 64px; + resize: none; +} + +textarea.resizable { + resize: both; +} + +select.full, +input[type='text'].full, +input[type='email'].full, +input[type='url'].full, +input[type='password'].full, +input[type='file'].full, +input[type='number'].full, +input[type='date'].full, +input[type='time'].full, +input[type='datetime-local'].full, +input[type='month'].full, +input[type='week'].full, +input[type='range'].full, +textarea.full { + width: 95%; +} + +select:focus, +select:not(:disabled):hover, +input[type='text']:not(:read-only):focus, +input[type='text']:not(:disabled):not(:read-only):hover, +input[type='email']:not(:read-only):focus, +input[type='email']:not(:disabled):not(:read-only):hover, +input[type='url']:not(:read-only):focus, +input[type='url']:not(:disabled):not(:read-only):hover, +input[type='password']:not(:read-only):focus, +input[type='password']:not(:disabled):not(:read-only):hover, +input[type='file']:not(:read-only):focus, +input[type='file']:not(:disabled):not(:read-only):hover, +input[type='number']:not(:read-only):focus, +input[type='number']:not(:disabled):not(:read-only):hover, +input[type='date']:not(:read-only):focus, +input[type='date']:not(:disabled):not(:read-only):hover, +input[type='time']:not(:read-only):focus, +input[type='time']:not(:disabled):not(:read-only):hover, +input[type='datetime-local']:not(:read-only):focus, +input[type='datetime-local']:not(:disabled):not(:read-only):hover, +input[type='month']:not(:read-only):focus, +input[type='month']:not(:disabled):not(:read-only):hover, +input[type='week']:not(:read-only):focus, +input[type='week']:not(:disabled):not(:read-only):hover, +textarea:not(:read-only):focus, +textarea:not(:disabled):not(:read-only):hover, +input[type='checkbox']:focus, +input[type='checkbox']:not(:disabled):hover, +input[type='radio']:focus, +input[type='radio']:not(:disabled):hover, +input[type='color']:focus, +input[type='color']:not(:disabled):hover { + border-color: var(--brand-input-border-highlight); +} + +input[type='date'], +input[type='time'], +input[type='datetime-local'], +input[type='month'], +input[type='week'] { + width: 200px; + min-width: auto; +} + +.theme-dark ::-webkit-calendar-picker-indicator { + filter: invert(1); +} + +::-webkit-datetime-edit-day-field:focus, +::-webkit-datetime-edit-month-field:focus, +::-webkit-datetime-edit-year-field:focus, +::-webkit-datetime-edit-hour-field:focus, +::-webkit-datetime-edit-minute-field:focus, +::-webkit-datetime-edit-week-field:focus { + background-color: var(--brand-primary); + color: #ffffff; +} + +::-webkit-outer-spin-button, +::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type='file'] { + padding: 4px 12px; +} + +select { + appearance: none; +} + +select:not([multiple]):not(:disabled) { + appearance: none; + background-image: url("data:image/svg+xml;utf8,"); + background-repeat: no-repeat; + background-size: 12px; + background-position: calc(100% - 12px) 12px; + background-color: var(--brand-input-background); +} + +.theme-dark select:not([multiple]):not(:disabled) { + background-image: url("data:image/svg+xml;utf8,"); +} + +option { + color: var(--brand-text); + padding: 6px; + margin-bottom: 1px; +} + +option:hover { + background: var(--brand-input-border) + linear-gradient(0deg, var(--brand-input-border) 0%, var(--brand-input-border) 100%); + border-radius: 5px; +} + +option:checked { + background: var(--brand-primary) linear-gradient(0deg, var(--brand-primary) 0%, var(--brand-primary) 100%); + color: #ffffff; + border-radius: 5px; +} + +input[type='range'] { + -webkit-appearance: none; + height: 20px; + width: 200px; + background: transparent; + outline: none; +} + +input[type='range']::-webkit-slider-runnable-track { + -webkit-appearance: none; + height: 10px; + border: 1px solid var(--brand-input-border); + background-color: var(--brand-input-background); + border-radius: 5px; + box-shadow: rgb(0 0 0 / 25%) 0px 4px 4px; + transition-property: background-color, color, opacity; + transition-duration: 200ms; + transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1); +} + +input[type='range']::-webkit-slider-thumb { + -webkit-appearance: none; + height: 20px; + width: 20px; + border-radius: 5px; + margin-top: -6px; + border: 1px solid var(--brand-input-border); + background: var(--brand-input-background); + cursor: pointer; + box-shadow: rgb(0 0 0 / 25%) 0px 4px 4px; + transition-property: background-color, color, opacity; + transition-duration: 200ms; + transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1); +} + +input[type='range']:hover::-webkit-slider-runnable-track, +input[type='range']:focus::-webkit-slider-runnable-track, +input[type='range']:hover::-webkit-slider-thumb, +input[type='range']:focus::-webkit-slider-thumb { + border-color: var(--brand-input-border-highlight); +} + +button:disabled, +select:disabled, +input:disabled, +textarea:disabled, +footer a:disabled, +a[disabled] { + opacity: 0.3; + cursor: default; + pointer-events: none; + resize: none; +} + +select:invalid, +input:invalid, +textarea:invalid { + border-color: var(--brand-error); +} + +fieldset > span { + margin-left: 10px; + width: 50px; +} + +input[type='text'].large, +input[type='password'].large, +input[type='file'].large, +input[type='email'].large, +input[type='url'].large, +input[type='date'].large, +input[type='time'].large { + font-size: 20px; + padding: 20px 10px; +} + +input[type='text'].center, +input[type='password'].center, +input[type='email'].center, +input[type='url'].center { + text-align: center; +} + +input[type='checkbox'], +input[type='radio'] { + appearance: none; + border: 1px solid var(--brand-input-border); + background-color: var(--brand-input-background); + color: var(--brand-input-text); + outline: 0; + width: 20px; + height: 20px; + margin: 2px; + box-shadow: rgb(0 0 0 / 25%) 0px 4px 4px; + transition-property: background-color, color, opacity; + transition-duration: 200ms; + transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1); +} + +input[type='radio'] { + border-radius: 50%; +} + +input[type='checkbox']::before, +input[type='radio']::before { + content: ''; + display: none; + width: 16px; + height: 16px; + margin: 1px; + background-color: var(--brand-text); + opacity: 0.8; +} + +input[type='checkbox']:checked::before { + display: inline-block; + clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%); +} +input[type='radio']:checked::before { + display: inline-block; + clip-path: circle(35% at 52% 50%); +} + +input[type='checkbox'] + label, +input[type='radio'] + label { + white-space: nowrap; +} + +input[type='color'] { + width: 100px; + min-width: auto; + padding: 5px; +} + +input[type='color']::-webkit-color-swatch-wrapper { + padding: 0; + background: transparent; +} + +input[type='color']::-webkit-color-swatch { + border-radius: 5px; + border: none; +} + +/* This disables the auto zoom on iDevices */ +@supports (-webkit-touch-callout: none) { + select, + input[type='text'], + input[type='url'], + input[type='email'], + input[type='password'], + input[type='file'], + input[type='number'], + input[type='date'], + input[type='time'], + input[type='datetime-local'], + input[type='month'], + input[type='week'], + input[type='color'], + textarea { + font-size: 16px; + } +} + +hr { + width: 100%; + border: 0; + border-bottom: 1px solid var(--brand-input-border); +} + +ul { + font-size: 12px; + display: flex; + flex-direction: column; + gap: 10px; + list-style-type: none; +} + +li { + font-size: 12px; + position: relative; + padding: 0 0 10px; +} + +li::before { + content: ' '; + display: inline-block; + background-color: var(--brand-primary); + width: 8px; + height: 8px; + border-radius: 2px; + position: absolute; + left: -13px; + top: 3px; +} + +em { + font-size: 12px; +} + +.row { + display: flex; + flex-direction: row; +} + +.col { + display: flex; + flex-direction: column; +} + +.fill { + flex: 1; +} + +.fill_2 { + flex: 2; +} + +.scroll { + overflow: auto; +} + +.scroll-vertical { + overflow-y: auto; +} + +.scroll-horizontal { + overflow-x: auto; +} + +.overflow-hidden { + overflow: hidden; +} + +.middle { + align-items: center; +} + +.bottom { + align-items: flex-end; +} + +.spread { + justify-content: space-between; +} + +.around { + justify-content: space-around; +} + +.left { + display: flex; + align-items: flex-start; +} + +.center { + display: flex; + justify-content: center; +} + +.right { + display: flex; + justify-content: flex-end; +} + +.wrap { + flex-wrap: wrap; +} + +.gap5 { + gap: 5px; +} + +.gap10 { + gap: 10px; +} + +.gap20 { + gap: 20px; +} + +.gap40 { + gap: 40px; +} + +.pad10 { + padding: 10px; +} + +.pad20 { + padding: 20px; +} + +.pad0 { + padding: 0px; +} + +.table { + display: flex; + flex: 1; + flex-direction: column; + font-size: 10px; +} + +table { + width: 100%; + font-size: 10px; + border: 0; + border-collapse: collapse; +} + +table, +.table { + border: var(--brand-input-border) 1px solid; +} + +.table-row { + display: flex; + flex: 1; + flex-direction: row; +} + +table > tr:first-child, +thead > tr, +.table-row.header { + background-color: var(--brand-table-header); +} + +table > tr:nth-child(even), +.table > div:nth-child(even), +tbody > tr:nth-child(odd) { + background-color: var(--brand-table-row-even); +} + +table > tr:nth-child(odd), +.table > div:not(:first-child):nth-child(odd), +tbody > tr:nth-child(even) { + background-color: var(--brand-table-row-odd); +} + +th, +.table-row.header > div { + color: var(--brand-table-header-text); + font-weight: bold; + padding: 10px 5px; + text-align: left; + word-break: break-word; +} + +.table-row > div { + flex: 1; +} + +td, +.table-row:not(.header) > div { + padding: 5px; + word-break: break-word; + color: var(--brand-text); +} + +.table-row:not(.header) > div { + display: flex; + align-items: center; +} + +@media screen and (max-width: 736px) { + .table-row { + flex-direction: column; + } + + .table-row.header { + display: none; + } + + .table-row:not(.header) > div { + display: flex; + align-items: center; + flex: 1; + gap: 10px; + } + + .table-row:not(.header) > div:before { + content: attr(data-name); + font-weight: bold; + white-space: nowrap; + width: 20%; + } + + .table-row > div.right { + justify-content: flex-start; + } + + .table-row > div.center { + justify-content: flex-start; + } +} + +.border { + border: 1px solid var(--brand-input-border); + border-radius: 5px; +} + +.drag { + user-select: none; + -webkit-app-region: drag; +} + +.no-drag { + -webkit-app-region: none; +} + +.form { + background-color: var(--brand-table-header); + border: var(--brand-input-border) 1px solid; + border-radius: 5px; + padding: 10px; + font-size: 12px; +} + +.form-group { + display: flex; + flex-direction: column; + gap: 10px; + background-color: var(--brand-table-header); + border: var(--brand-input-border) 1px solid; + border-radius: 5px; + padding: 10px; +} + +.form-group.large { + gap: 20px; +} + +.width-full { + width: 100%; +} + +.max-width-full { + max-width: 100%; +} + +.width-responsive { + max-width: fit-content; +} + +.hidden { + display: none; +} + +.pointer { + cursor: pointer; +} + +.nowrap { + white-space: nowrap; +} diff --git a/how-to/use-interop/cloud-interop/public/favicon.ico b/how-to/use-interop/cloud-interop/public/favicon.ico new file mode 100644 index 00000000..0b6e09e6 Binary files /dev/null and b/how-to/use-interop/cloud-interop/public/favicon.ico differ diff --git a/how-to/use-interop/cloud-interop/public/html/provider.html b/how-to/use-interop/cloud-interop/public/html/provider.html new file mode 100644 index 00000000..91029415 --- /dev/null +++ b/how-to/use-interop/cloud-interop/public/html/provider.html @@ -0,0 +1,17 @@ + + + + + + OpenFin Template + + + + + + +
+

Platform Provider

+
+ + diff --git a/how-to/use-interop/cloud-interop/public/html/window.html b/how-to/use-interop/cloud-interop/public/html/window.html new file mode 100644 index 00000000..4a3e7430 --- /dev/null +++ b/how-to/use-interop/cloud-interop/public/html/window.html @@ -0,0 +1,29 @@ + + + + + + + Interop + + + + + +
+ +
+

+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/how-to/use-interop/cloud-interop/public/manifest.fin.json b/how-to/use-interop/cloud-interop/public/manifest.fin.json new file mode 100644 index 00000000..d5268be7 --- /dev/null +++ b/how-to/use-interop/cloud-interop/public/manifest.fin.json @@ -0,0 +1,65 @@ +{ + "runtime": { + "arguments": "--v=1 --inspect --enable-mesh --security-realm=container-interop-use-cloud-platform1", + "version": "36.122.80.11" + }, + "platform": { + "uuid": "platform-1", + "icon": "http://localhost:5050/favicon.ico", + "autoShow": false, + "providerUrl": "http://localhost:5050/html/provider.html", + "defaultWindowOptions": { + "url": "http://localhost:5050/html/window.html", + "contextMenu": true, + "defaultWidth": 1100, + "defaultHeight": 700, + "minHeight": 700, + "minWidth": 900, + "height": 700, + "width": 1100 + } + }, + "snapshot": { + "windows": [ + { + "name": "window1", + "layout": { + "content": [ + { + "type": "row", + "content": [ + { + "type": "component", + "componentName": "view", + "componentState": { + "url": "https://samples.openfin.co/dev-extensions/extensions/v18.0.0/interop/interop-api/context/interop-broadcast-view.html" + } + }, + { + "type": "component", + "componentName": "view", + "componentState": { + "url": "https://samples.openfin.co/dev-extensions/extensions/v18.0.0/interop/interop-api/context/interop-broadcast-view.html" + } + } + ] + } + ] + } + } + ] + }, + "customSettings": { + "cloudInteropProvider": { + "enabled": false, + "connectParams": { + "url": "", + "userId": "", + "password": "", + "platformId": "cloud-interop", + "sourceId": "platform1", + "sourceDisplayName": "Platform 1" + } + } + } +} diff --git a/how-to/use-interop/cloud-interop/public/second.manifest.fin.json b/how-to/use-interop/cloud-interop/public/second.manifest.fin.json new file mode 100644 index 00000000..bf6c4f7f --- /dev/null +++ b/how-to/use-interop/cloud-interop/public/second.manifest.fin.json @@ -0,0 +1,68 @@ +{ + "runtime": { + "arguments": "--v=1 --inspect --enable-mesh --security-realm=container-interop-use-cloud-platform2", + "version": "36.122.80.11" + }, + "platform": { + "uuid": "platform-2", + "icon": "https://openfin.github.io/golden-prototype/favicon.ico", + "autoShow": false, + "providerUrl": "http://localhost:5050/html/provider.html", + "defaultWindowOptions": { + "url": "http://localhost:5050/html/window.html", + "contextMenu": true, + "defaultWidth": 1100, + "defaultHeight": 700, + "minHeight": 700, + "minWidth": 700, + "height": 700, + "width": 1100 + }, + "defaultViewOptions": { + "fdc3InteropApi": "2.0" + } + }, + "snapshot": { + "windows": [ + { + "name": "view", + "layout": { + "content": [ + { + "type": "row", + "content": [ + { + "type": "component", + "componentName": "view", + "componentState": { + "url": "https://samples.openfin.co/dev-extensions/extensions/v18.0.0/interop/fdc3/context/fdc3-broadcast-view.html" + } + }, + { + "type": "component", + "componentName": "view", + "componentState": { + "url": "https://samples.openfin.co/dev-extensions/extensions/v18.0.0/interop/interop-api/context/interop-broadcast-view.html" + } + } + ] + } + ] + } + } + ] + }, + "customSettings": { + "cloudInteropProvider": { + "enabled": false, + "connectParams": { + "url": "", + "userId": "", + "password": "", + "platformId": "cloud-interop", + "sourceId": "platform2", + "sourceDisplayName": "Platform 2" + } + } + } +} diff --git a/how-to/use-interop/cloud-interop/public/styles/frame-styles.css b/how-to/use-interop/cloud-interop/public/styles/frame-styles.css new file mode 100644 index 00000000..14b7200b --- /dev/null +++ b/how-to/use-interop/cloud-interop/public/styles/frame-styles.css @@ -0,0 +1,30 @@ +#body-container { + display: flex; + transition: 0.8s; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + height: 96%; + width: 100%; +} + +.face { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: 1; +} + +.channel-button:after { + content: ''; + padding: 5px; + display: inline-block; + margin-left: 10px; + margin-top: 10px; +} + +#title { + color: var(--body-font-color); + margin: 0px; +} diff --git a/how-to/use-interop/cloud-interop/scripts/kill.mjs b/how-to/use-interop/cloud-interop/scripts/kill.mjs new file mode 100644 index 00000000..634090b0 --- /dev/null +++ b/how-to/use-interop/cloud-interop/scripts/kill.mjs @@ -0,0 +1,34 @@ +/** + * This script will kill all OpenFin tasks from running. + * Useful if you want to make sure you have nothing left running in the background. + */ +import { exec } from 'child_process'; + +console.log('Kill All OpenFin Tasks'); +console.log('======================'); +console.log(); + +console.log(`Platform: ${process.platform}`); + +const isWindows = process.platform.startsWith('win'); +console.log('Running on Windows:', isWindows); + +const cmd = isWindows + ? `cmd.exe /c taskkill /F /IM OpenFin.exe /T & cmd.exe /c taskkill /F /IM OpenFinRVM.exe /T` + : `pkill -9 OpenFin`; + +console.log(); +console.log('Command:', cmd); +console.log(); + +exec(cmd, (error, stdout, stderr) => { + if (error) { + console.log(error.message); + return; + } + if (stderr) { + console.log(stderr); + return; + } + console.log(stdout); +}); diff --git a/how-to/use-interop/cloud-interop/scripts/launch.mjs b/how-to/use-interop/cloud-interop/scripts/launch.mjs new file mode 100644 index 00000000..50444893 --- /dev/null +++ b/how-to/use-interop/cloud-interop/scripts/launch.mjs @@ -0,0 +1,205 @@ +/* eslint-disable unicorn/no-process-exit */ +/** + * This script will launch an OpenFin application. + * It uses the OpenFin NodeJS adapter to launch the url specified on the command line. + * Pressing Ctrl+C/Command+C will terminate the application. + */ +import { connect, launch } from '@openfin/node-adapter'; +import { exec } from 'child_process'; +import { setDefaultResultOrder } from 'dns'; + +/** + * Run the process. + * @param manifestUrl The manifest to launch. + */ +async function run(manifestUrl) { + try { + if (process.platform === 'darwin') { + await launchFromFinsLink(manifestUrl); + } else { + await launchFromNodeAdapter(manifestUrl); + } + } catch (e) { + console.error(`Error: Connection failed`); + console.error(e.message); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl the url to launch + */ +async function launchFromNodeAdapter(manifestUrl) { + let quitRequested = false; + let quit; + + const fin = await connectAndGetFinAPI(manifestUrl); + + if (fin) { + const manifest = await fin.System.fetchManifest(manifestUrl); + + if (manifest.platform?.uuid !== undefined) { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling platform quit'); + const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); + await platform.quit(); + } + } catch (err) { + if (err.toString().includes('no longer connected')) { + console.log('Platform no longer connected'); + console.log('Exiting process'); + process.exit(); + } else { + console.error(err); + } + } + }; + console.log(`Wrapped target platform: ${manifest.platform.uuid}`); + } else { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling application quit'); + const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); + await app.quit(); + } + } catch (err) { + console.error(err); + } + }; + console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); + } + + // do something when app is closing + process.on('exit', async () => { + console.log('Process exit called'); + await quit(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + await quit(); + }); + + console.log(`You successfully connected to the manifest: ${manifestUrl}`); + console.log(`Please wait while the sample loads.`); + console.log(); + console.log(`Close all platform windows to close the platform.`); + console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); + console.log(); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + */ +async function launchFromFinsLink(manifestUrl) { + console.log(); + console.log(`Launching manifest...`); + console.log(); + const finsLink = manifestUrl.replace('http', 'fin'); + const finsProcess = exec(`open ${finsLink}`); + + /** + * A simple message to inform the user how to quit the platform. + */ + function logQuitMessage() { + console.log(); + console.log('Please quit the platform using:'); + console.log(); + console.log('- Process Manager (https://start.openfin.co/pm)'); + console.log('- run npm run kill to kill all OpenFin processes.'); + console.log(); + console.log(); + } + + finsProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + finsProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + // do something when app is closing + process.on('exit', async () => { + console.log('Please wait for the OpenFin application to launch.'); + logQuitMessage(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + logQuitMessage(); + }); + + finsProcess.on('exit', (code) => { + if (code === 0) { + console.log('Manifest launched successfully'); + } else { + console.log(`Child process exited with code ${code.toString()}`); + } + }); +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + * @param exitMethod The method to call if the adapter connection exits. + * @returns The fin object representing the connection. + */ +async function connectAndGetFinAPI(manifestUrl, exitMethod) { + try { + console.log(`Launching manifest...`); + console.log(); + + const port = await launch({ manifestUrl }); + + // We will use the port to connect from Node to determine when OpenFin exists. + const fin = await connect({ + uuid: `dev-connection-${Date.now()}`, // Supply an addressable Id for the connection + address: `ws://127.0.0.1:${port}`, // Connect to the given port. + nonPersistent: true // We want OpenFin to exit as our application exists. + }); + + // Once OpenFin exits we shut down the process. + fin.once('disconnected', () => { + console.log('Platform disconnected'); + console.log('Exiting process'); + process.exit(); + }); + + return fin; + } catch (e) { + console.error('Error: Failed launching manifest'); + console.error(e.message); + if (e.message.includes('Could not locate')) { + console.error('Is the web server running and the manifest JSON valid ?'); + } + } +} + +console.log('Launch Manifest'); +console.log('==============='); +console.log(); +console.log(`Platform: ${process.platform}`); + +const launchArgs = process.argv.slice(2); +const manifest = launchArgs.length > 0 ? launchArgs[0] : 'http://localhost:5050/manifest.fin.json'; +console.log(`Manifest: ${manifest}`); + +try { + setDefaultResultOrder('ipv4first'); +} catch { + // Early versions of node do not support this method, but those earlier versions + // also do not have the same issue with interface ordering, so it doesn't matter + // that it hasn't been called. +} + +run(manifest).catch((err) => console.error(err)); diff --git a/how-to/use-interop/setup-multi-platform-interop/package.json b/how-to/use-interop/setup-multi-platform-interop/package.json index 343d4081..d48712d8 100644 --- a/how-to/use-interop/setup-multi-platform-interop/package.json +++ b/how-to/use-interop/setup-multi-platform-interop/package.json @@ -1,25 +1,25 @@ { - "name": "setup-cross-platform-interop", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "kill": "node ./scripts/kill.mjs", - "client": "node ./scripts/launch.mjs", - "secondclient": "node ./scripts/launch.mjs http://localhost:5050/second.manifest.fin.json", - "build-client": "webpack build --config ./client/webpack.config.js --mode=development", - "build": "npm run build-client", - "start": "npx --yes http-server ./public -p 5050 -c-1", - "setup": "cd ../../../ && npm install && cd how-to/use-interop/setup-multi-platform-interop && npm run build" - }, - "author": "adam.saland@openfin.co", - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "@openfin/node-adapter": "36.80.10", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", - "webpack-cli": "^5.1.4", - "@openfin/core": "36.80.10" - } -} \ No newline at end of file + "name": "setup-cross-platform-interop", + "version": "36.80.11", + "description": "", + "main": "index.js", + "scripts": { + "kill": "node ./scripts/kill.mjs", + "client": "node ./scripts/launch.mjs", + "secondclient": "node ./scripts/launch.mjs http://localhost:5050/second.manifest.fin.json", + "build-client": "webpack build --config ./client/webpack.config.js --mode=development", + "build": "npm run build-client", + "start": "npx --yes http-server ./public -p 5050 -c-1", + "setup": "cd ../../../ && npm install && cd how-to/use-interop/setup-multi-platform-interop && npm run build" + }, + "author": "adam.saland@openfin.co", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4", + "@openfin/core": "36.80.11" + } +} diff --git a/how-to/use-interop/setup-multi-platform-interop/public/manifest.fin.json b/how-to/use-interop/setup-multi-platform-interop/public/manifest.fin.json index 4d30ee6e..e943f000 100644 --- a/how-to/use-interop/setup-multi-platform-interop/public/manifest.fin.json +++ b/how-to/use-interop/setup-multi-platform-interop/public/manifest.fin.json @@ -1,58 +1,58 @@ { - "runtime": { - "arguments": "--v=1 --inspect", - "version": "36.122.80.10" - }, - "platform": { - "uuid": "platform-1", - "icon": "https://openfin.github.io/golden-prototype/favicon.ico", - "autoShow": false, - "providerUrl": "http://localhost:5050/html/provider.html", - "apiDiagnostics": false, - "defaultWindowOptions": { - "url": "http://localhost:5050/html/window.html", - "contextMenu": true, - "defaultWidth": 700, - "defaultHeight": 700, - "defaultLeft": 0, - "defaultTop": 0, - "saveWindowState": false, - "showBackgroundImages": true, - "backgroundThrottling": true, - "minHeight": 700, - "minWidth": 700, - "height": 700, - "width": 700 - } - }, - "snapshot": { - "windows": [ - { - "name": "window1", - "layout": { - "content": [ - { - "type": "row", - "content": [ - { - "type": "component", - "componentName": "view", - "componentState": { - "url": "https://samples.openfin.co/dev-extensions/extensions/v1.0.0/interop/interop-api/context/interop-broadcast-view.html" - } - }, - { - "type": "component", - "componentName": "view", - "componentState": { - "url": "https://samples.openfin.co/dev-extensions/extensions/v1.0.0/interop/interop-api/context/interop-broadcast-view.html" - } - } - ] - } - ] - } - } - ] - } -} \ No newline at end of file + "runtime": { + "arguments": "--v=1 --inspect", + "version": "36.122.80.11" + }, + "platform": { + "uuid": "platform-1", + "icon": "https://openfin.github.io/golden-prototype/favicon.ico", + "autoShow": false, + "providerUrl": "http://localhost:5050/html/provider.html", + "apiDiagnostics": false, + "defaultWindowOptions": { + "url": "http://localhost:5050/html/window.html", + "contextMenu": true, + "defaultWidth": 700, + "defaultHeight": 700, + "defaultLeft": 0, + "defaultTop": 0, + "saveWindowState": false, + "showBackgroundImages": true, + "backgroundThrottling": true, + "minHeight": 700, + "minWidth": 700, + "height": 700, + "width": 700 + } + }, + "snapshot": { + "windows": [ + { + "name": "window1", + "layout": { + "content": [ + { + "type": "row", + "content": [ + { + "type": "component", + "componentName": "view", + "componentState": { + "url": "https://samples.openfin.co/dev-extensions/extensions/v1.0.0/interop/interop-api/context/interop-broadcast-view.html" + } + }, + { + "type": "component", + "componentName": "view", + "componentState": { + "url": "https://samples.openfin.co/dev-extensions/extensions/v1.0.0/interop/interop-api/context/interop-broadcast-view.html" + } + } + ] + } + ] + } + } + ] + } +} diff --git a/how-to/use-interop/setup-multi-platform-interop/public/second.manifest.fin.json b/how-to/use-interop/setup-multi-platform-interop/public/second.manifest.fin.json index 3c6f59c3..8708fa4a 100644 --- a/how-to/use-interop/setup-multi-platform-interop/public/second.manifest.fin.json +++ b/how-to/use-interop/setup-multi-platform-interop/public/second.manifest.fin.json @@ -1,60 +1,61 @@ { - "runtime": { - "arguments": "--v=1 --inspect", - "version": "36.122.80.10" - }, - "platform": { - "uuid": "platform-2", - "icon": "https://openfin.github.io/golden-prototype/favicon.ico", - "autoShow": false, - "apiDiagnostics": false, - "defaultWindowOptions": { - "url": "http://localhost:5050/html/window.html", - "contextMenu": true, - "defaultWidth": 700, - "defaultHeight": 700, - "defaultLeft": 0, - "defaultTop": 0, - "saveWindowState": false, - "showBackgroundImages": true, - "backgroundThrottling": true, - "minHeight": 700, - "minWidth": 700, - "height": 700, - "width": 700 - }, - "defaultViewOptions": { - "fdc3InteropApi": "1.2" - } - }, - "snapshot": { - "windows": [ - { - "name": "view", - "layout": { - "content": [ - { - "type": "row", - "content": [ - { - "type": "component", - "componentName": "view", - "componentState": { - "url": "https://samples.openfin.co/dev-extensions/extensions/v1.0.0/interop/fdc3/context/fdc3-broadcast-view.html" - } - }, - { - "type": "component", - "componentName": "view", - "componentState": { - "url": "https://samples.openfin.co/dev-extensions/extensions/v1.0.0/interop/interop-api/context/interop-broadcast-view.html" - } - } - ] - } - ] - } - } - ] - } -} \ No newline at end of file + "runtime": { + "arguments": "--v=1 --inspect", + "version": "36.122.80.11" + }, + "platform": { + "uuid": "platform-2", + "icon": "https://openfin.github.io/golden-prototype/favicon.ico", + "autoShow": false, + "apiDiagnostics": false, + "providerUrl": "http://localhost:5050/html/provider.html", + "defaultWindowOptions": { + "url": "http://localhost:5050/html/window.html", + "contextMenu": true, + "defaultWidth": 700, + "defaultHeight": 700, + "defaultLeft": 0, + "defaultTop": 0, + "saveWindowState": false, + "showBackgroundImages": true, + "backgroundThrottling": true, + "minHeight": 700, + "minWidth": 700, + "height": 700, + "width": 700 + }, + "defaultViewOptions": { + "fdc3InteropApi": "1.2" + } + }, + "snapshot": { + "windows": [ + { + "name": "view", + "layout": { + "content": [ + { + "type": "row", + "content": [ + { + "type": "component", + "componentName": "view", + "componentState": { + "url": "https://samples.openfin.co/dev-extensions/extensions/v1.0.0/interop/fdc3/context/fdc3-broadcast-view.html" + } + }, + { + "type": "component", + "componentName": "view", + "componentState": { + "url": "https://samples.openfin.co/dev-extensions/extensions/v1.0.0/interop/interop-api/context/interop-broadcast-view.html" + } + } + ] + } + ] + } + } + ] + } +} diff --git a/how-to/use-interop/setup-multi-platform-interop/scripts/launch.mjs b/how-to/use-interop/setup-multi-platform-interop/scripts/launch.mjs index fd08a2a4..50444893 100644 --- a/how-to/use-interop/setup-multi-platform-interop/scripts/launch.mjs +++ b/how-to/use-interop/setup-multi-platform-interop/scripts/launch.mjs @@ -5,6 +5,7 @@ * Pressing Ctrl+C/Command+C will terminate the application. */ import { connect, launch } from '@openfin/node-adapter'; +import { exec } from 'child_process'; import { setDefaultResultOrder } from 'dns'; /** @@ -13,68 +14,10 @@ import { setDefaultResultOrder } from 'dns'; */ async function run(manifestUrl) { try { - let quitRequested = false; - let quit; - - const fin = await launchFromNode(manifestUrl); - - if (fin) { - const manifest = await fin.System.fetchManifest(manifestUrl); - - if (manifest.platform?.uuid !== undefined) { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling platform quit'); - const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); - await platform.quit(); - } - } catch (err) { - if (err.toString().includes('no longer connected')) { - console.log('Platform no longer connected'); - console.log('Exiting process'); - process.exit(); - } else { - console.error(err); - } - } - }; - console.log(`Wrapped target platform: ${manifest.platform.uuid}`); - } else { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling application quit'); - const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); - await app.quit(); - } - } catch (err) { - console.error(err); - } - }; - console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); - } - - // do something when app is closing - process.on('exit', async () => { - console.log('Process exit called'); - await quit(); - }); - - // catches ctrl+c event - process.on('SIGINT', async () => { - console.log('Ctrl + C called'); - await quit(); - }); - - console.log(`You successfully connected to the manifest: ${manifestUrl}`); - console.log(`Please wait while the sample loads.`); - console.log(); - console.log(`If using browser use the Quit option from the main menu.`); - console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); - console.log(); + if (process.platform === 'darwin') { + await launchFromFinsLink(manifestUrl); + } else { + await launchFromNodeAdapter(manifestUrl); } } catch (e) { console.error(`Error: Connection failed`); @@ -82,13 +25,136 @@ async function run(manifestUrl) { } } +/** + * Launch the manifest using the node adapter. + * @param manifestUrl the url to launch + */ +async function launchFromNodeAdapter(manifestUrl) { + let quitRequested = false; + let quit; + + const fin = await connectAndGetFinAPI(manifestUrl); + + if (fin) { + const manifest = await fin.System.fetchManifest(manifestUrl); + + if (manifest.platform?.uuid !== undefined) { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling platform quit'); + const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); + await platform.quit(); + } + } catch (err) { + if (err.toString().includes('no longer connected')) { + console.log('Platform no longer connected'); + console.log('Exiting process'); + process.exit(); + } else { + console.error(err); + } + } + }; + console.log(`Wrapped target platform: ${manifest.platform.uuid}`); + } else { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling application quit'); + const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); + await app.quit(); + } + } catch (err) { + console.error(err); + } + }; + console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); + } + + // do something when app is closing + process.on('exit', async () => { + console.log('Process exit called'); + await quit(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + await quit(); + }); + + console.log(`You successfully connected to the manifest: ${manifestUrl}`); + console.log(`Please wait while the sample loads.`); + console.log(); + console.log(`Close all platform windows to close the platform.`); + console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); + console.log(); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + */ +async function launchFromFinsLink(manifestUrl) { + console.log(); + console.log(`Launching manifest...`); + console.log(); + const finsLink = manifestUrl.replace('http', 'fin'); + const finsProcess = exec(`open ${finsLink}`); + + /** + * A simple message to inform the user how to quit the platform. + */ + function logQuitMessage() { + console.log(); + console.log('Please quit the platform using:'); + console.log(); + console.log('- Process Manager (https://start.openfin.co/pm)'); + console.log('- run npm run kill to kill all OpenFin processes.'); + console.log(); + console.log(); + } + + finsProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + finsProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + // do something when app is closing + process.on('exit', async () => { + console.log('Please wait for the OpenFin application to launch.'); + logQuitMessage(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + logQuitMessage(); + }); + + finsProcess.on('exit', (code) => { + if (code === 0) { + console.log('Manifest launched successfully'); + } else { + console.log(`Child process exited with code ${code.toString()}`); + } + }); +} + /** * Launch the manifest using the node adapter. * @param manifestUrl The manifest to launch. * @param exitMethod The method to call if the adapter connection exits. * @returns The fin object representing the connection. */ -async function launchFromNode(manifestUrl, exitMethod) { +async function connectAndGetFinAPI(manifestUrl, exitMethod) { try { console.log(`Launching manifest...`); console.log(); diff --git a/how-to/use-launch-external-process/package.json b/how-to/use-launch-external-process/package.json index 437fb9c2..5bc46645 100644 --- a/how-to/use-launch-external-process/package.json +++ b/how-to/use-launch-external-process/package.json @@ -1,25 +1,25 @@ { - "name": "launch-external-process", - "version": "0.0.1", - "description": "An example of how to use launch external process", - "main": "index.js", - "scripts": { - "dos": "node ./scripts/dos.mjs && node ./scripts/kill.mjs", - "kill": "node ./scripts/kill.mjs", - "client": "node ./scripts/launch.mjs", - "build-client": "webpack build --config ./client/webpack.config.js --mode=development", - "build": "npm run build-client", - "start": "npx --yes http-server ./public -p 5050 -c-1", - "setup": "cd ../../ && npm install && cd how-to/use-launch-external-process && npm run build" - }, - "author": "@adam-saland", - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "@openfin/node-adapter": "36.80.10", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", - "webpack-cli": "^5.1.4", - "@openfin/core": "36.80.10" - } -} \ No newline at end of file + "name": "launch-external-process", + "version": "36.80.11", + "description": "An example of how to use launch external process", + "main": "index.js", + "scripts": { + "dos": "node ./scripts/dos.mjs && node ./scripts/kill.mjs", + "kill": "node ./scripts/kill.mjs", + "client": "node ./scripts/launch.mjs", + "build-client": "webpack build --config ./client/webpack.config.js --mode=development", + "build": "npm run build-client", + "start": "npx --yes http-server ./public -p 5050 -c-1", + "setup": "cd ../../ && npm install && cd how-to/use-launch-external-process && npm run build" + }, + "author": "@adam-saland", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4", + "@openfin/core": "36.80.11" + } +} diff --git a/how-to/use-launch-external-process/public/manifest.fin.json b/how-to/use-launch-external-process/public/manifest.fin.json index fccf4c4b..fb8c9556 100644 --- a/how-to/use-launch-external-process/public/manifest.fin.json +++ b/how-to/use-launch-external-process/public/manifest.fin.json @@ -1,35 +1,35 @@ { - "runtime": { - "version": "36.122.80.10" - }, - "startup_app": { - "name": "launch-app-asset", - "url": "http://localhost:5050/html/app.html", - "uuid": "launch-app-asset", - "icon": "http://localhost:5050/common/images/icon-blue.png", - "autoShow": true, - "saveWindowState": true, - "permissions": { - "System": { - "launchExternalProcess": true, - "terminateExternalProcess": true, - "downloadAsset": true - } - } - }, - "appAssets": [ - { - "src": "http://localhost:5050/assets/openfin-dotnet-example.zip", - "version": "3.1", - "alias": "of-dotnet-example", - "target": "DotNetCore.exe", - "mandatory": true - } - ], - "shortcut": { - "company": "OpenFin", - "description": "Launch App Asset", - "icon": "http://localhost:5050/common/images/icon-blue.png", - "name": "Launch App Asset" - } -} \ No newline at end of file + "runtime": { + "version": "36.122.80.11" + }, + "startup_app": { + "name": "launch-app-asset", + "url": "http://localhost:5050/html/app.html", + "uuid": "launch-app-asset", + "icon": "http://localhost:5050/common/images/icon-blue.png", + "autoShow": true, + "saveWindowState": true, + "permissions": { + "System": { + "launchExternalProcess": true, + "terminateExternalProcess": true, + "downloadAsset": true + } + } + }, + "appAssets": [ + { + "src": "http://localhost:5050/assets/openfin-dotnet-example.zip", + "version": "3.1", + "alias": "of-dotnet-example", + "target": "DotNetCore.exe", + "mandatory": true + } + ], + "shortcut": { + "company": "OpenFin", + "description": "Launch App Asset", + "icon": "http://localhost:5050/common/images/icon-blue.png", + "name": "Launch App Asset" + } +} diff --git a/how-to/use-launch-external-process/scripts/launch.mjs b/how-to/use-launch-external-process/scripts/launch.mjs index fd08a2a4..50444893 100644 --- a/how-to/use-launch-external-process/scripts/launch.mjs +++ b/how-to/use-launch-external-process/scripts/launch.mjs @@ -5,6 +5,7 @@ * Pressing Ctrl+C/Command+C will terminate the application. */ import { connect, launch } from '@openfin/node-adapter'; +import { exec } from 'child_process'; import { setDefaultResultOrder } from 'dns'; /** @@ -13,68 +14,10 @@ import { setDefaultResultOrder } from 'dns'; */ async function run(manifestUrl) { try { - let quitRequested = false; - let quit; - - const fin = await launchFromNode(manifestUrl); - - if (fin) { - const manifest = await fin.System.fetchManifest(manifestUrl); - - if (manifest.platform?.uuid !== undefined) { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling platform quit'); - const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); - await platform.quit(); - } - } catch (err) { - if (err.toString().includes('no longer connected')) { - console.log('Platform no longer connected'); - console.log('Exiting process'); - process.exit(); - } else { - console.error(err); - } - } - }; - console.log(`Wrapped target platform: ${manifest.platform.uuid}`); - } else { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling application quit'); - const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); - await app.quit(); - } - } catch (err) { - console.error(err); - } - }; - console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); - } - - // do something when app is closing - process.on('exit', async () => { - console.log('Process exit called'); - await quit(); - }); - - // catches ctrl+c event - process.on('SIGINT', async () => { - console.log('Ctrl + C called'); - await quit(); - }); - - console.log(`You successfully connected to the manifest: ${manifestUrl}`); - console.log(`Please wait while the sample loads.`); - console.log(); - console.log(`If using browser use the Quit option from the main menu.`); - console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); - console.log(); + if (process.platform === 'darwin') { + await launchFromFinsLink(manifestUrl); + } else { + await launchFromNodeAdapter(manifestUrl); } } catch (e) { console.error(`Error: Connection failed`); @@ -82,13 +25,136 @@ async function run(manifestUrl) { } } +/** + * Launch the manifest using the node adapter. + * @param manifestUrl the url to launch + */ +async function launchFromNodeAdapter(manifestUrl) { + let quitRequested = false; + let quit; + + const fin = await connectAndGetFinAPI(manifestUrl); + + if (fin) { + const manifest = await fin.System.fetchManifest(manifestUrl); + + if (manifest.platform?.uuid !== undefined) { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling platform quit'); + const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); + await platform.quit(); + } + } catch (err) { + if (err.toString().includes('no longer connected')) { + console.log('Platform no longer connected'); + console.log('Exiting process'); + process.exit(); + } else { + console.error(err); + } + } + }; + console.log(`Wrapped target platform: ${manifest.platform.uuid}`); + } else { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling application quit'); + const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); + await app.quit(); + } + } catch (err) { + console.error(err); + } + }; + console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); + } + + // do something when app is closing + process.on('exit', async () => { + console.log('Process exit called'); + await quit(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + await quit(); + }); + + console.log(`You successfully connected to the manifest: ${manifestUrl}`); + console.log(`Please wait while the sample loads.`); + console.log(); + console.log(`Close all platform windows to close the platform.`); + console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); + console.log(); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + */ +async function launchFromFinsLink(manifestUrl) { + console.log(); + console.log(`Launching manifest...`); + console.log(); + const finsLink = manifestUrl.replace('http', 'fin'); + const finsProcess = exec(`open ${finsLink}`); + + /** + * A simple message to inform the user how to quit the platform. + */ + function logQuitMessage() { + console.log(); + console.log('Please quit the platform using:'); + console.log(); + console.log('- Process Manager (https://start.openfin.co/pm)'); + console.log('- run npm run kill to kill all OpenFin processes.'); + console.log(); + console.log(); + } + + finsProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + finsProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + // do something when app is closing + process.on('exit', async () => { + console.log('Please wait for the OpenFin application to launch.'); + logQuitMessage(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + logQuitMessage(); + }); + + finsProcess.on('exit', (code) => { + if (code === 0) { + console.log('Manifest launched successfully'); + } else { + console.log(`Child process exited with code ${code.toString()}`); + } + }); +} + /** * Launch the manifest using the node adapter. * @param manifestUrl The manifest to launch. * @param exitMethod The method to call if the adapter connection exits. * @returns The fin object representing the connection. */ -async function launchFromNode(manifestUrl, exitMethod) { +async function connectAndGetFinAPI(manifestUrl, exitMethod) { try { console.log(`Launching manifest...`); console.log(); diff --git a/how-to/use-logging-apis/package.json b/how-to/use-logging-apis/package.json index 5b049f95..99b4ffe4 100644 --- a/how-to/use-logging-apis/package.json +++ b/how-to/use-logging-apis/package.json @@ -1,37 +1,37 @@ { - "name": "use-logging-apis", - "version": "0.0.1", - "description": "A demonstration of how to use logging apis", - "main": "index.js", - "scripts": { - "kill": "node ./scripts/kill.mjs", - "client": "node ./scripts/launch.mjs", - "server": "node ./server/build/index.js", - "build-client": "webpack build --config ./client/webpack.config.js --mode=development", - "build-server": "tsc --project ./server", - "build": "npm run build-client && npm run build-server", - "start": "npm run server", - "setup": "cd ../../ && npm install && cd how-to/use-logging-apis && npm run build" - }, - "author": "martyn.janes@openfin.co", - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "@openfin/core": "36.80.10", - "@types/multer": "^1.4.7", - "@types/node": "^20.4.1", - "body-parser": "^1.20.2", - "express": "^4.18.2", - "@openfin/node-adapter": "36.80.10", - "source-map-loader": "^4.0.1", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", - "webpack-cli": "^5.1.4" - }, - "dependencies": { - "connect-busboy": "^1.0.0", - "multer": "^1.4.5-lts.1", - "@openfin/core": "36.80.10", - "@openfin/node-adapter": "36.80.10" - } -} \ No newline at end of file + "name": "use-logging-apis", + "version": "36.80.11", + "description": "A demonstration of how to use logging apis", + "main": "index.js", + "scripts": { + "kill": "node ./scripts/kill.mjs", + "client": "node ./scripts/launch.mjs", + "server": "node ./server/build/index.js", + "build-client": "webpack build --config ./client/webpack.config.js --mode=development", + "build-server": "tsc --project ./server", + "build": "npm run build-client && npm run build-server", + "start": "npm run server", + "setup": "cd ../../ && npm install && cd how-to/use-logging-apis && npm run build" + }, + "author": "martyn.janes@openfin.co", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "@openfin/core": "36.80.11", + "@types/multer": "^1.4.11", + "@types/node": "^20.12.11", + "body-parser": "^1.20.2", + "express": "^4.19.2", + "@openfin/node-adapter": "36.80.11", + "source-map-loader": "^5.0.0", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4" + }, + "dependencies": { + "connect-busboy": "^1.0.0", + "multer": "^1.4.5-lts.1", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11" + } +} diff --git a/how-to/use-logging-apis/public/manifest.fin.json b/how-to/use-logging-apis/public/manifest.fin.json index f02cdf0e..462b0145 100644 --- a/how-to/use-logging-apis/public/manifest.fin.json +++ b/how-to/use-logging-apis/public/manifest.fin.json @@ -1,25 +1,25 @@ { - "runtime": { - "arguments": "--v=1 --inspect", - "version": "36.122.80.10" - }, - "licenseKey": "64605fac-add3-48a0-8710-64b38e96a2dd", - "startup_app": { - "name": "use-application-logging", - "uuid": "use-application-logging", - "description": "An example of using application logging", - "url": "http://localhost:5050/html/app.html", - "icon": "http://localhost:5050/favicon.ico", - "autoShow": true, - "defaultWidth": 1200, - "defaultHeight": 800, - "defaultCentered": true, - "minWidth": 800, - "minHeight": 400, - "enableAppLogging": true, - "logManagement": { - "enabled": true, - "url": "http://localhost:5050" - } - } -} \ No newline at end of file + "runtime": { + "arguments": "--v=1 --inspect", + "version": "36.122.80.11" + }, + "licenseKey": "64605fac-add3-48a0-8710-64b38e96a2dd", + "startup_app": { + "name": "use-application-logging", + "uuid": "use-application-logging", + "description": "An example of using application logging", + "url": "http://localhost:5050/html/app.html", + "icon": "http://localhost:5050/favicon.ico", + "autoShow": true, + "defaultWidth": 1200, + "defaultHeight": 800, + "defaultCentered": true, + "minWidth": 800, + "minHeight": 400, + "enableAppLogging": true, + "logManagement": { + "enabled": true, + "url": "http://localhost:5050" + } + } +} diff --git a/how-to/use-logging-apis/scripts/launch.mjs b/how-to/use-logging-apis/scripts/launch.mjs index fd08a2a4..50444893 100644 --- a/how-to/use-logging-apis/scripts/launch.mjs +++ b/how-to/use-logging-apis/scripts/launch.mjs @@ -5,6 +5,7 @@ * Pressing Ctrl+C/Command+C will terminate the application. */ import { connect, launch } from '@openfin/node-adapter'; +import { exec } from 'child_process'; import { setDefaultResultOrder } from 'dns'; /** @@ -13,68 +14,10 @@ import { setDefaultResultOrder } from 'dns'; */ async function run(manifestUrl) { try { - let quitRequested = false; - let quit; - - const fin = await launchFromNode(manifestUrl); - - if (fin) { - const manifest = await fin.System.fetchManifest(manifestUrl); - - if (manifest.platform?.uuid !== undefined) { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling platform quit'); - const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); - await platform.quit(); - } - } catch (err) { - if (err.toString().includes('no longer connected')) { - console.log('Platform no longer connected'); - console.log('Exiting process'); - process.exit(); - } else { - console.error(err); - } - } - }; - console.log(`Wrapped target platform: ${manifest.platform.uuid}`); - } else { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling application quit'); - const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); - await app.quit(); - } - } catch (err) { - console.error(err); - } - }; - console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); - } - - // do something when app is closing - process.on('exit', async () => { - console.log('Process exit called'); - await quit(); - }); - - // catches ctrl+c event - process.on('SIGINT', async () => { - console.log('Ctrl + C called'); - await quit(); - }); - - console.log(`You successfully connected to the manifest: ${manifestUrl}`); - console.log(`Please wait while the sample loads.`); - console.log(); - console.log(`If using browser use the Quit option from the main menu.`); - console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); - console.log(); + if (process.platform === 'darwin') { + await launchFromFinsLink(manifestUrl); + } else { + await launchFromNodeAdapter(manifestUrl); } } catch (e) { console.error(`Error: Connection failed`); @@ -82,13 +25,136 @@ async function run(manifestUrl) { } } +/** + * Launch the manifest using the node adapter. + * @param manifestUrl the url to launch + */ +async function launchFromNodeAdapter(manifestUrl) { + let quitRequested = false; + let quit; + + const fin = await connectAndGetFinAPI(manifestUrl); + + if (fin) { + const manifest = await fin.System.fetchManifest(manifestUrl); + + if (manifest.platform?.uuid !== undefined) { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling platform quit'); + const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); + await platform.quit(); + } + } catch (err) { + if (err.toString().includes('no longer connected')) { + console.log('Platform no longer connected'); + console.log('Exiting process'); + process.exit(); + } else { + console.error(err); + } + } + }; + console.log(`Wrapped target platform: ${manifest.platform.uuid}`); + } else { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling application quit'); + const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); + await app.quit(); + } + } catch (err) { + console.error(err); + } + }; + console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); + } + + // do something when app is closing + process.on('exit', async () => { + console.log('Process exit called'); + await quit(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + await quit(); + }); + + console.log(`You successfully connected to the manifest: ${manifestUrl}`); + console.log(`Please wait while the sample loads.`); + console.log(); + console.log(`Close all platform windows to close the platform.`); + console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); + console.log(); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + */ +async function launchFromFinsLink(manifestUrl) { + console.log(); + console.log(`Launching manifest...`); + console.log(); + const finsLink = manifestUrl.replace('http', 'fin'); + const finsProcess = exec(`open ${finsLink}`); + + /** + * A simple message to inform the user how to quit the platform. + */ + function logQuitMessage() { + console.log(); + console.log('Please quit the platform using:'); + console.log(); + console.log('- Process Manager (https://start.openfin.co/pm)'); + console.log('- run npm run kill to kill all OpenFin processes.'); + console.log(); + console.log(); + } + + finsProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + finsProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + // do something when app is closing + process.on('exit', async () => { + console.log('Please wait for the OpenFin application to launch.'); + logQuitMessage(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + logQuitMessage(); + }); + + finsProcess.on('exit', (code) => { + if (code === 0) { + console.log('Manifest launched successfully'); + } else { + console.log(`Child process exited with code ${code.toString()}`); + } + }); +} + /** * Launch the manifest using the node adapter. * @param manifestUrl The manifest to launch. * @param exitMethod The method to call if the adapter connection exits. * @returns The fin object representing the connection. */ -async function launchFromNode(manifestUrl, exitMethod) { +async function connectAndGetFinAPI(manifestUrl, exitMethod) { try { console.log(`Launching manifest...`); console.log(); diff --git a/how-to/use-platform/warn-before-closing-dialog/package.json b/how-to/use-platform/warn-before-closing-dialog/package.json index 119071a9..b7c64bad 100644 --- a/how-to/use-platform/warn-before-closing-dialog/package.json +++ b/how-to/use-platform/warn-before-closing-dialog/package.json @@ -1,23 +1,23 @@ { - "name": "warn-before-closing-dialog", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "kill": "node ./scripts/kill.mjs", - "client": "node ./scripts/launch.mjs", - "build-client": "webpack build --config ./client/webpack.config.js --mode=development", - "build": "npm run build-client", - "start": "npx --yes http-server ./public -p 5050 -c-1", - "setup": "cd ../../../ && npm install && cd how-to/use-platform/warn-before-closing-dialog && npm run build" - }, - "license": "ISC", - "devDependencies": { - "@openfin/core": "36.80.10", - "@openfin/node-adapter": "36.80.10", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", - "webpack-cli": "^5.1.4" - } -} \ No newline at end of file + "name": "warn-before-closing-dialog", + "version": "36.80.11", + "description": "", + "main": "index.js", + "scripts": { + "kill": "node ./scripts/kill.mjs", + "client": "node ./scripts/launch.mjs", + "build-client": "webpack build --config ./client/webpack.config.js --mode=development", + "build": "npm run build-client", + "start": "npx --yes http-server ./public -p 5050 -c-1", + "setup": "cd ../../../ && npm install && cd how-to/use-platform/warn-before-closing-dialog && npm run build" + }, + "license": "ISC", + "devDependencies": { + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4" + } +} diff --git a/how-to/use-platform/warn-before-closing-dialog/public/manifest.fin.json b/how-to/use-platform/warn-before-closing-dialog/public/manifest.fin.json index 8f121521..7bfe3e48 100644 --- a/how-to/use-platform/warn-before-closing-dialog/public/manifest.fin.json +++ b/how-to/use-platform/warn-before-closing-dialog/public/manifest.fin.json @@ -1,115 +1,115 @@ { - "runtime": { - "arguments": "--v=1 --inspect", - "version": "36.122.80.10" - }, - "platform": { - "enableBeforeUnload": true, - "uuid": "platform-warn", - "icon": "https://openfin.github.io/golden-prototype/favicon.ico", - "autoShow": false, - "providerUrl": "http://localhost:5050/html/provider.html", - "apiDiagnostics": false, - "defaultWindowOptions": { - "contextMenu": true, - "defaultWidth": 900, - "defaultHeight": 900, - "defaultLeft": 0, - "defaultTop": 0, - "saveWindowState": false, - "backgroundThrottling": true, - "minHeight": 445, - "minWidth": 354, - "defaultCentered": true - } - }, - "snapshot": { - "windows": [ - { - "layout": { - "content": [ - { - "type": "column", - "id": "no-drop-target", - "content": [ - { - "type": "row", - "content": [ - { - "type": "stack", - "content": [ - { - "type": "component", - "title": "view1", - "componentName": "view", - "componentState": { - "url": "http://localhost:5050/html/view.html?title=view1", - "name": "view1", - "backgroundThrottling": true, - "componentName": "view" - } - } - ] - }, - { - "type": "stack", - "content": [ - { - "type": "component", - "title": "view3", - "componentName": "view", - "componentState": { - "url": "http://localhost:5050/html/view.html?title=view3", - "name": "view3", - "backgroundThrottling": true, - "componentName": "view" - } - } - ] - } - ] - }, - { - "type": "row", - "content": [ - { - "type": "stack", - "content": [ - { - "type": "component", - "title": "view2", - "componentName": "view", - "componentState": { - "url": "http://localhost:5050/html/view.html?title=view2", - "name": "view2", - "componentName": "view" - } - } - ] - }, - { - "type": "stack", - "content": [ - { - "type": "component", - "title": "view4", - "componentName": "view", - "componentState": { - "url": "http://localhost:5050/html/view.html?title=view4", - "name": "view4", - "backgroundThrottling": true, - "componentName": "view" - } - } - ] - } - ] - } - ] - } - ] - } - } - ] - } -} \ No newline at end of file + "runtime": { + "arguments": "--v=1 --inspect", + "version": "36.122.80.11" + }, + "platform": { + "enableBeforeUnload": true, + "uuid": "platform-warn", + "icon": "https://openfin.github.io/golden-prototype/favicon.ico", + "autoShow": false, + "providerUrl": "http://localhost:5050/html/provider.html", + "apiDiagnostics": false, + "defaultWindowOptions": { + "contextMenu": true, + "defaultWidth": 900, + "defaultHeight": 900, + "defaultLeft": 0, + "defaultTop": 0, + "saveWindowState": false, + "backgroundThrottling": true, + "minHeight": 445, + "minWidth": 354, + "defaultCentered": true + } + }, + "snapshot": { + "windows": [ + { + "layout": { + "content": [ + { + "type": "column", + "id": "no-drop-target", + "content": [ + { + "type": "row", + "content": [ + { + "type": "stack", + "content": [ + { + "type": "component", + "title": "view1", + "componentName": "view", + "componentState": { + "url": "http://localhost:5050/html/view.html?title=view1", + "name": "view1", + "backgroundThrottling": true, + "componentName": "view" + } + } + ] + }, + { + "type": "stack", + "content": [ + { + "type": "component", + "title": "view3", + "componentName": "view", + "componentState": { + "url": "http://localhost:5050/html/view.html?title=view3", + "name": "view3", + "backgroundThrottling": true, + "componentName": "view" + } + } + ] + } + ] + }, + { + "type": "row", + "content": [ + { + "type": "stack", + "content": [ + { + "type": "component", + "title": "view2", + "componentName": "view", + "componentState": { + "url": "http://localhost:5050/html/view.html?title=view2", + "name": "view2", + "componentName": "view" + } + } + ] + }, + { + "type": "stack", + "content": [ + { + "type": "component", + "title": "view4", + "componentName": "view", + "componentState": { + "url": "http://localhost:5050/html/view.html?title=view4", + "name": "view4", + "backgroundThrottling": true, + "componentName": "view" + } + } + ] + } + ] + } + ] + } + ] + } + } + ] + } +} diff --git a/how-to/use-platform/warn-before-closing-dialog/scripts/launch.mjs b/how-to/use-platform/warn-before-closing-dialog/scripts/launch.mjs index fd08a2a4..50444893 100644 --- a/how-to/use-platform/warn-before-closing-dialog/scripts/launch.mjs +++ b/how-to/use-platform/warn-before-closing-dialog/scripts/launch.mjs @@ -5,6 +5,7 @@ * Pressing Ctrl+C/Command+C will terminate the application. */ import { connect, launch } from '@openfin/node-adapter'; +import { exec } from 'child_process'; import { setDefaultResultOrder } from 'dns'; /** @@ -13,68 +14,10 @@ import { setDefaultResultOrder } from 'dns'; */ async function run(manifestUrl) { try { - let quitRequested = false; - let quit; - - const fin = await launchFromNode(manifestUrl); - - if (fin) { - const manifest = await fin.System.fetchManifest(manifestUrl); - - if (manifest.platform?.uuid !== undefined) { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling platform quit'); - const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); - await platform.quit(); - } - } catch (err) { - if (err.toString().includes('no longer connected')) { - console.log('Platform no longer connected'); - console.log('Exiting process'); - process.exit(); - } else { - console.error(err); - } - } - }; - console.log(`Wrapped target platform: ${manifest.platform.uuid}`); - } else { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling application quit'); - const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); - await app.quit(); - } - } catch (err) { - console.error(err); - } - }; - console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); - } - - // do something when app is closing - process.on('exit', async () => { - console.log('Process exit called'); - await quit(); - }); - - // catches ctrl+c event - process.on('SIGINT', async () => { - console.log('Ctrl + C called'); - await quit(); - }); - - console.log(`You successfully connected to the manifest: ${manifestUrl}`); - console.log(`Please wait while the sample loads.`); - console.log(); - console.log(`If using browser use the Quit option from the main menu.`); - console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); - console.log(); + if (process.platform === 'darwin') { + await launchFromFinsLink(manifestUrl); + } else { + await launchFromNodeAdapter(manifestUrl); } } catch (e) { console.error(`Error: Connection failed`); @@ -82,13 +25,136 @@ async function run(manifestUrl) { } } +/** + * Launch the manifest using the node adapter. + * @param manifestUrl the url to launch + */ +async function launchFromNodeAdapter(manifestUrl) { + let quitRequested = false; + let quit; + + const fin = await connectAndGetFinAPI(manifestUrl); + + if (fin) { + const manifest = await fin.System.fetchManifest(manifestUrl); + + if (manifest.platform?.uuid !== undefined) { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling platform quit'); + const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); + await platform.quit(); + } + } catch (err) { + if (err.toString().includes('no longer connected')) { + console.log('Platform no longer connected'); + console.log('Exiting process'); + process.exit(); + } else { + console.error(err); + } + } + }; + console.log(`Wrapped target platform: ${manifest.platform.uuid}`); + } else { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling application quit'); + const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); + await app.quit(); + } + } catch (err) { + console.error(err); + } + }; + console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); + } + + // do something when app is closing + process.on('exit', async () => { + console.log('Process exit called'); + await quit(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + await quit(); + }); + + console.log(`You successfully connected to the manifest: ${manifestUrl}`); + console.log(`Please wait while the sample loads.`); + console.log(); + console.log(`Close all platform windows to close the platform.`); + console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); + console.log(); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + */ +async function launchFromFinsLink(manifestUrl) { + console.log(); + console.log(`Launching manifest...`); + console.log(); + const finsLink = manifestUrl.replace('http', 'fin'); + const finsProcess = exec(`open ${finsLink}`); + + /** + * A simple message to inform the user how to quit the platform. + */ + function logQuitMessage() { + console.log(); + console.log('Please quit the platform using:'); + console.log(); + console.log('- Process Manager (https://start.openfin.co/pm)'); + console.log('- run npm run kill to kill all OpenFin processes.'); + console.log(); + console.log(); + } + + finsProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + finsProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + // do something when app is closing + process.on('exit', async () => { + console.log('Please wait for the OpenFin application to launch.'); + logQuitMessage(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + logQuitMessage(); + }); + + finsProcess.on('exit', (code) => { + if (code === 0) { + console.log('Manifest launched successfully'); + } else { + console.log(`Child process exited with code ${code.toString()}`); + } + }); +} + /** * Launch the manifest using the node adapter. * @param manifestUrl The manifest to launch. * @param exitMethod The method to call if the adapter connection exits. * @returns The fin object representing the connection. */ -async function launchFromNode(manifestUrl, exitMethod) { +async function connectAndGetFinAPI(manifestUrl, exitMethod) { try { console.log(`Launching manifest...`); console.log(); diff --git a/how-to/use-popup-window/advanced/package.json b/how-to/use-popup-window/advanced/package.json index b9b0b018..32a9daee 100644 --- a/how-to/use-popup-window/advanced/package.json +++ b/how-to/use-popup-window/advanced/package.json @@ -1,25 +1,25 @@ { - "name": "use-popup-window-advanced", - "version": "0.0.1", - "description": "A demonstration that shows how to use an existing window as a popup.", - "main": "index.js", - "scripts": { - "kill": "node ./scripts/kill.mjs", - "client": "node ./scripts/launch.mjs", - "build-client": "webpack build --config ./client/webpack.config.js --mode=development", - "build": "npm run build-client", - "start": "npx --yes http-server ./public -p 5050 -c-1", - "setup": "cd ../../../ && npm install && cd how-to/use-popup-window/advanced && npm run build" - }, - "author": "connor.mccafferty@openfin.co", - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "@openfin/core": "36.80.10", - "@types/node": "^20.4.1", - "@openfin/node-adapter": "36.80.10", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", - "webpack-cli": "^5.1.4" - } -} \ No newline at end of file + "name": "use-popup-window-advanced", + "version": "36.80.11", + "description": "A demonstration that shows how to use an existing window as a popup.", + "main": "index.js", + "scripts": { + "kill": "node ./scripts/kill.mjs", + "client": "node ./scripts/launch.mjs", + "build-client": "webpack build --config ./client/webpack.config.js --mode=development", + "build": "npm run build-client", + "start": "npx --yes http-server ./public -p 5050 -c-1", + "setup": "cd ../../../ && npm install && cd how-to/use-popup-window/advanced && npm run build" + }, + "author": "connor.mccafferty@openfin.co", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "@openfin/core": "36.80.11", + "@types/node": "^20.12.11", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4" + } +} diff --git a/how-to/use-popup-window/advanced/public/manifest.fin.json b/how-to/use-popup-window/advanced/public/manifest.fin.json index e3fc343b..c7a631bb 100644 --- a/how-to/use-popup-window/advanced/public/manifest.fin.json +++ b/how-to/use-popup-window/advanced/public/manifest.fin.json @@ -1,35 +1,35 @@ { - "licenseKey": "openfin-demo-license-key", - "runtime": { - "arguments": "--v=1 --inspect", - "version": "36.122.80.10" - }, - "platform": { - "uuid": "how-to-use-popup-window-advanced", - "autoShow": true - }, - "snapshot": { - "windows": [ - { - "layout": { - "content": [ - { - "type": "stack", - "id": "no-drop-target", - "content": [ - { - "type": "component", - "componentName": "view", - "componentState": { - "processAffinity": "ps_1", - "url": "http://localhost:5050/html/app.html" - } - } - ] - } - ] - } - } - ] - } -} \ No newline at end of file + "licenseKey": "openfin-demo-license-key", + "runtime": { + "arguments": "--v=1 --inspect", + "version": "36.122.80.11" + }, + "platform": { + "uuid": "how-to-use-popup-window-advanced", + "autoShow": true + }, + "snapshot": { + "windows": [ + { + "layout": { + "content": [ + { + "type": "stack", + "id": "no-drop-target", + "content": [ + { + "type": "component", + "componentName": "view", + "componentState": { + "processAffinity": "ps_1", + "url": "http://localhost:5050/html/app.html" + } + } + ] + } + ] + } + } + ] + } +} diff --git a/how-to/use-popup-window/advanced/scripts/launch.mjs b/how-to/use-popup-window/advanced/scripts/launch.mjs index fd08a2a4..50444893 100644 --- a/how-to/use-popup-window/advanced/scripts/launch.mjs +++ b/how-to/use-popup-window/advanced/scripts/launch.mjs @@ -5,6 +5,7 @@ * Pressing Ctrl+C/Command+C will terminate the application. */ import { connect, launch } from '@openfin/node-adapter'; +import { exec } from 'child_process'; import { setDefaultResultOrder } from 'dns'; /** @@ -13,68 +14,10 @@ import { setDefaultResultOrder } from 'dns'; */ async function run(manifestUrl) { try { - let quitRequested = false; - let quit; - - const fin = await launchFromNode(manifestUrl); - - if (fin) { - const manifest = await fin.System.fetchManifest(manifestUrl); - - if (manifest.platform?.uuid !== undefined) { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling platform quit'); - const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); - await platform.quit(); - } - } catch (err) { - if (err.toString().includes('no longer connected')) { - console.log('Platform no longer connected'); - console.log('Exiting process'); - process.exit(); - } else { - console.error(err); - } - } - }; - console.log(`Wrapped target platform: ${manifest.platform.uuid}`); - } else { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling application quit'); - const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); - await app.quit(); - } - } catch (err) { - console.error(err); - } - }; - console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); - } - - // do something when app is closing - process.on('exit', async () => { - console.log('Process exit called'); - await quit(); - }); - - // catches ctrl+c event - process.on('SIGINT', async () => { - console.log('Ctrl + C called'); - await quit(); - }); - - console.log(`You successfully connected to the manifest: ${manifestUrl}`); - console.log(`Please wait while the sample loads.`); - console.log(); - console.log(`If using browser use the Quit option from the main menu.`); - console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); - console.log(); + if (process.platform === 'darwin') { + await launchFromFinsLink(manifestUrl); + } else { + await launchFromNodeAdapter(manifestUrl); } } catch (e) { console.error(`Error: Connection failed`); @@ -82,13 +25,136 @@ async function run(manifestUrl) { } } +/** + * Launch the manifest using the node adapter. + * @param manifestUrl the url to launch + */ +async function launchFromNodeAdapter(manifestUrl) { + let quitRequested = false; + let quit; + + const fin = await connectAndGetFinAPI(manifestUrl); + + if (fin) { + const manifest = await fin.System.fetchManifest(manifestUrl); + + if (manifest.platform?.uuid !== undefined) { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling platform quit'); + const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); + await platform.quit(); + } + } catch (err) { + if (err.toString().includes('no longer connected')) { + console.log('Platform no longer connected'); + console.log('Exiting process'); + process.exit(); + } else { + console.error(err); + } + } + }; + console.log(`Wrapped target platform: ${manifest.platform.uuid}`); + } else { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling application quit'); + const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); + await app.quit(); + } + } catch (err) { + console.error(err); + } + }; + console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); + } + + // do something when app is closing + process.on('exit', async () => { + console.log('Process exit called'); + await quit(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + await quit(); + }); + + console.log(`You successfully connected to the manifest: ${manifestUrl}`); + console.log(`Please wait while the sample loads.`); + console.log(); + console.log(`Close all platform windows to close the platform.`); + console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); + console.log(); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + */ +async function launchFromFinsLink(manifestUrl) { + console.log(); + console.log(`Launching manifest...`); + console.log(); + const finsLink = manifestUrl.replace('http', 'fin'); + const finsProcess = exec(`open ${finsLink}`); + + /** + * A simple message to inform the user how to quit the platform. + */ + function logQuitMessage() { + console.log(); + console.log('Please quit the platform using:'); + console.log(); + console.log('- Process Manager (https://start.openfin.co/pm)'); + console.log('- run npm run kill to kill all OpenFin processes.'); + console.log(); + console.log(); + } + + finsProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + finsProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + // do something when app is closing + process.on('exit', async () => { + console.log('Please wait for the OpenFin application to launch.'); + logQuitMessage(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + logQuitMessage(); + }); + + finsProcess.on('exit', (code) => { + if (code === 0) { + console.log('Manifest launched successfully'); + } else { + console.log(`Child process exited with code ${code.toString()}`); + } + }); +} + /** * Launch the manifest using the node adapter. * @param manifestUrl The manifest to launch. * @param exitMethod The method to call if the adapter connection exits. * @returns The fin object representing the connection. */ -async function launchFromNode(manifestUrl, exitMethod) { +async function connectAndGetFinAPI(manifestUrl, exitMethod) { try { console.log(`Launching manifest...`); console.log(); diff --git a/how-to/use-popup-window/modal/package.json b/how-to/use-popup-window/modal/package.json index 2d2d43f6..b36d1e26 100644 --- a/how-to/use-popup-window/modal/package.json +++ b/how-to/use-popup-window/modal/package.json @@ -1,25 +1,25 @@ { - "name": "use-popup-window-modal", - "version": "0.0.1", - "description": "A demonstration of a modal popup window.", - "main": "index.js", - "scripts": { - "kill": "node ./scripts/kill.mjs", - "client": "node ./scripts/launch.mjs", - "build-client": "webpack build --config ./client/webpack.config.js --mode=development", - "build": "npm run build-client", - "start": "npx --yes http-server ./public -p 5050 -c-1", - "setup": "cd ../../../ && npm install && cd how-to/use-popup-window/modal && npm run build" - }, - "author": "connor.mccafferty@openfin.co", - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "@openfin/core": "36.80.10", - "@types/node": "^20.4.1", - "@openfin/node-adapter": "36.80.10", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", - "webpack-cli": "^5.1.4" - } -} \ No newline at end of file + "name": "use-popup-window-modal", + "version": "36.80.11", + "description": "A demonstration of a modal popup window.", + "main": "index.js", + "scripts": { + "kill": "node ./scripts/kill.mjs", + "client": "node ./scripts/launch.mjs", + "build-client": "webpack build --config ./client/webpack.config.js --mode=development", + "build": "npm run build-client", + "start": "npx --yes http-server ./public -p 5050 -c-1", + "setup": "cd ../../../ && npm install && cd how-to/use-popup-window/modal && npm run build" + }, + "author": "connor.mccafferty@openfin.co", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "@openfin/core": "36.80.11", + "@types/node": "^20.12.11", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4" + } +} diff --git a/how-to/use-popup-window/modal/public/manifest.fin.json b/how-to/use-popup-window/modal/public/manifest.fin.json index f6f6c973..ab71cb83 100644 --- a/how-to/use-popup-window/modal/public/manifest.fin.json +++ b/how-to/use-popup-window/modal/public/manifest.fin.json @@ -1,35 +1,35 @@ { - "licenseKey": "openfin-demo-license-key", - "runtime": { - "arguments": "--v=1 --inspect", - "version": "36.122.80.10" - }, - "platform": { - "uuid": "how-to-use-popup-window-modal", - "autoShow": true - }, - "snapshot": { - "windows": [ - { - "layout": { - "content": [ - { - "type": "stack", - "id": "no-drop-target", - "content": [ - { - "type": "component", - "componentName": "view", - "componentState": { - "processAffinity": "ps_1", - "url": "http://localhost:5050/html/app.html" - } - } - ] - } - ] - } - } - ] - } -} \ No newline at end of file + "licenseKey": "openfin-demo-license-key", + "runtime": { + "arguments": "--v=1 --inspect", + "version": "36.122.80.11" + }, + "platform": { + "uuid": "how-to-use-popup-window-modal", + "autoShow": true + }, + "snapshot": { + "windows": [ + { + "layout": { + "content": [ + { + "type": "stack", + "id": "no-drop-target", + "content": [ + { + "type": "component", + "componentName": "view", + "componentState": { + "processAffinity": "ps_1", + "url": "http://localhost:5050/html/app.html" + } + } + ] + } + ] + } + } + ] + } +} diff --git a/how-to/use-popup-window/modal/scripts/launch.mjs b/how-to/use-popup-window/modal/scripts/launch.mjs index fd08a2a4..50444893 100644 --- a/how-to/use-popup-window/modal/scripts/launch.mjs +++ b/how-to/use-popup-window/modal/scripts/launch.mjs @@ -5,6 +5,7 @@ * Pressing Ctrl+C/Command+C will terminate the application. */ import { connect, launch } from '@openfin/node-adapter'; +import { exec } from 'child_process'; import { setDefaultResultOrder } from 'dns'; /** @@ -13,68 +14,10 @@ import { setDefaultResultOrder } from 'dns'; */ async function run(manifestUrl) { try { - let quitRequested = false; - let quit; - - const fin = await launchFromNode(manifestUrl); - - if (fin) { - const manifest = await fin.System.fetchManifest(manifestUrl); - - if (manifest.platform?.uuid !== undefined) { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling platform quit'); - const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); - await platform.quit(); - } - } catch (err) { - if (err.toString().includes('no longer connected')) { - console.log('Platform no longer connected'); - console.log('Exiting process'); - process.exit(); - } else { - console.error(err); - } - } - }; - console.log(`Wrapped target platform: ${manifest.platform.uuid}`); - } else { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling application quit'); - const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); - await app.quit(); - } - } catch (err) { - console.error(err); - } - }; - console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); - } - - // do something when app is closing - process.on('exit', async () => { - console.log('Process exit called'); - await quit(); - }); - - // catches ctrl+c event - process.on('SIGINT', async () => { - console.log('Ctrl + C called'); - await quit(); - }); - - console.log(`You successfully connected to the manifest: ${manifestUrl}`); - console.log(`Please wait while the sample loads.`); - console.log(); - console.log(`If using browser use the Quit option from the main menu.`); - console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); - console.log(); + if (process.platform === 'darwin') { + await launchFromFinsLink(manifestUrl); + } else { + await launchFromNodeAdapter(manifestUrl); } } catch (e) { console.error(`Error: Connection failed`); @@ -82,13 +25,136 @@ async function run(manifestUrl) { } } +/** + * Launch the manifest using the node adapter. + * @param manifestUrl the url to launch + */ +async function launchFromNodeAdapter(manifestUrl) { + let quitRequested = false; + let quit; + + const fin = await connectAndGetFinAPI(manifestUrl); + + if (fin) { + const manifest = await fin.System.fetchManifest(manifestUrl); + + if (manifest.platform?.uuid !== undefined) { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling platform quit'); + const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); + await platform.quit(); + } + } catch (err) { + if (err.toString().includes('no longer connected')) { + console.log('Platform no longer connected'); + console.log('Exiting process'); + process.exit(); + } else { + console.error(err); + } + } + }; + console.log(`Wrapped target platform: ${manifest.platform.uuid}`); + } else { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling application quit'); + const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); + await app.quit(); + } + } catch (err) { + console.error(err); + } + }; + console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); + } + + // do something when app is closing + process.on('exit', async () => { + console.log('Process exit called'); + await quit(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + await quit(); + }); + + console.log(`You successfully connected to the manifest: ${manifestUrl}`); + console.log(`Please wait while the sample loads.`); + console.log(); + console.log(`Close all platform windows to close the platform.`); + console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); + console.log(); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + */ +async function launchFromFinsLink(manifestUrl) { + console.log(); + console.log(`Launching manifest...`); + console.log(); + const finsLink = manifestUrl.replace('http', 'fin'); + const finsProcess = exec(`open ${finsLink}`); + + /** + * A simple message to inform the user how to quit the platform. + */ + function logQuitMessage() { + console.log(); + console.log('Please quit the platform using:'); + console.log(); + console.log('- Process Manager (https://start.openfin.co/pm)'); + console.log('- run npm run kill to kill all OpenFin processes.'); + console.log(); + console.log(); + } + + finsProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + finsProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + // do something when app is closing + process.on('exit', async () => { + console.log('Please wait for the OpenFin application to launch.'); + logQuitMessage(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + logQuitMessage(); + }); + + finsProcess.on('exit', (code) => { + if (code === 0) { + console.log('Manifest launched successfully'); + } else { + console.log(`Child process exited with code ${code.toString()}`); + } + }); +} + /** * Launch the manifest using the node adapter. * @param manifestUrl The manifest to launch. * @param exitMethod The method to call if the adapter connection exits. * @returns The fin object representing the connection. */ -async function launchFromNode(manifestUrl, exitMethod) { +async function connectAndGetFinAPI(manifestUrl, exitMethod) { try { console.log(`Launching manifest...`); console.log(); diff --git a/how-to/use-popup-window/multiple-results/package.json b/how-to/use-popup-window/multiple-results/package.json index caf724c8..6ea11f68 100644 --- a/how-to/use-popup-window/multiple-results/package.json +++ b/how-to/use-popup-window/multiple-results/package.json @@ -1,25 +1,25 @@ { - "name": "use-popup-window-multiple-results", - "version": "0.0.1", - "description": "A demonstration of a popup window that can return multiple results.", - "main": "index.js", - "scripts": { - "kill": "node ./scripts/kill.mjs", - "client": "node ./scripts/launch.mjs", - "build-client": "webpack build --config ./client/webpack.config.js --mode=development", - "build": "npm run build-client", - "start": "npx --yes http-server ./public -p 5050 -c-1", - "setup": "cd ../../../ && npm install && cd how-to/use-popup-window/multiple-results && npm run build" - }, - "author": "connor.mccafferty@openfin.co", - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "@openfin/core": "36.80.10", - "@types/node": "^20.4.1", - "@openfin/node-adapter": "36.80.10", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", - "webpack-cli": "^5.1.4" - } -} \ No newline at end of file + "name": "use-popup-window-multiple-results", + "version": "36.80.11", + "description": "A demonstration of a popup window that can return multiple results.", + "main": "index.js", + "scripts": { + "kill": "node ./scripts/kill.mjs", + "client": "node ./scripts/launch.mjs", + "build-client": "webpack build --config ./client/webpack.config.js --mode=development", + "build": "npm run build-client", + "start": "npx --yes http-server ./public -p 5050 -c-1", + "setup": "cd ../../../ && npm install && cd how-to/use-popup-window/multiple-results && npm run build" + }, + "author": "connor.mccafferty@openfin.co", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "@openfin/core": "36.80.11", + "@types/node": "^20.12.11", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4" + } +} diff --git a/how-to/use-popup-window/multiple-results/public/manifest.fin.json b/how-to/use-popup-window/multiple-results/public/manifest.fin.json index 0902171d..b81087bc 100644 --- a/how-to/use-popup-window/multiple-results/public/manifest.fin.json +++ b/how-to/use-popup-window/multiple-results/public/manifest.fin.json @@ -1,35 +1,35 @@ { - "licenseKey": "openfin-demo-license-key", - "runtime": { - "arguments": "--v=1 --inspect", - "version": "36.122.80.10" - }, - "platform": { - "uuid": "how-to-use-popup-window-multiple-results", - "autoShow": true - }, - "snapshot": { - "windows": [ - { - "layout": { - "content": [ - { - "type": "stack", - "id": "no-drop-target", - "content": [ - { - "type": "component", - "componentName": "view", - "componentState": { - "processAffinity": "ps_1", - "url": "http://localhost:5050/html/app.html" - } - } - ] - } - ] - } - } - ] - } -} \ No newline at end of file + "licenseKey": "openfin-demo-license-key", + "runtime": { + "arguments": "--v=1 --inspect", + "version": "36.122.80.11" + }, + "platform": { + "uuid": "how-to-use-popup-window-multiple-results", + "autoShow": true + }, + "snapshot": { + "windows": [ + { + "layout": { + "content": [ + { + "type": "stack", + "id": "no-drop-target", + "content": [ + { + "type": "component", + "componentName": "view", + "componentState": { + "processAffinity": "ps_1", + "url": "http://localhost:5050/html/app.html" + } + } + ] + } + ] + } + } + ] + } +} diff --git a/how-to/use-popup-window/multiple-results/scripts/launch.mjs b/how-to/use-popup-window/multiple-results/scripts/launch.mjs index fd08a2a4..50444893 100644 --- a/how-to/use-popup-window/multiple-results/scripts/launch.mjs +++ b/how-to/use-popup-window/multiple-results/scripts/launch.mjs @@ -5,6 +5,7 @@ * Pressing Ctrl+C/Command+C will terminate the application. */ import { connect, launch } from '@openfin/node-adapter'; +import { exec } from 'child_process'; import { setDefaultResultOrder } from 'dns'; /** @@ -13,68 +14,10 @@ import { setDefaultResultOrder } from 'dns'; */ async function run(manifestUrl) { try { - let quitRequested = false; - let quit; - - const fin = await launchFromNode(manifestUrl); - - if (fin) { - const manifest = await fin.System.fetchManifest(manifestUrl); - - if (manifest.platform?.uuid !== undefined) { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling platform quit'); - const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); - await platform.quit(); - } - } catch (err) { - if (err.toString().includes('no longer connected')) { - console.log('Platform no longer connected'); - console.log('Exiting process'); - process.exit(); - } else { - console.error(err); - } - } - }; - console.log(`Wrapped target platform: ${manifest.platform.uuid}`); - } else { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling application quit'); - const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); - await app.quit(); - } - } catch (err) { - console.error(err); - } - }; - console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); - } - - // do something when app is closing - process.on('exit', async () => { - console.log('Process exit called'); - await quit(); - }); - - // catches ctrl+c event - process.on('SIGINT', async () => { - console.log('Ctrl + C called'); - await quit(); - }); - - console.log(`You successfully connected to the manifest: ${manifestUrl}`); - console.log(`Please wait while the sample loads.`); - console.log(); - console.log(`If using browser use the Quit option from the main menu.`); - console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); - console.log(); + if (process.platform === 'darwin') { + await launchFromFinsLink(manifestUrl); + } else { + await launchFromNodeAdapter(manifestUrl); } } catch (e) { console.error(`Error: Connection failed`); @@ -82,13 +25,136 @@ async function run(manifestUrl) { } } +/** + * Launch the manifest using the node adapter. + * @param manifestUrl the url to launch + */ +async function launchFromNodeAdapter(manifestUrl) { + let quitRequested = false; + let quit; + + const fin = await connectAndGetFinAPI(manifestUrl); + + if (fin) { + const manifest = await fin.System.fetchManifest(manifestUrl); + + if (manifest.platform?.uuid !== undefined) { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling platform quit'); + const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); + await platform.quit(); + } + } catch (err) { + if (err.toString().includes('no longer connected')) { + console.log('Platform no longer connected'); + console.log('Exiting process'); + process.exit(); + } else { + console.error(err); + } + } + }; + console.log(`Wrapped target platform: ${manifest.platform.uuid}`); + } else { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling application quit'); + const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); + await app.quit(); + } + } catch (err) { + console.error(err); + } + }; + console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); + } + + // do something when app is closing + process.on('exit', async () => { + console.log('Process exit called'); + await quit(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + await quit(); + }); + + console.log(`You successfully connected to the manifest: ${manifestUrl}`); + console.log(`Please wait while the sample loads.`); + console.log(); + console.log(`Close all platform windows to close the platform.`); + console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); + console.log(); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + */ +async function launchFromFinsLink(manifestUrl) { + console.log(); + console.log(`Launching manifest...`); + console.log(); + const finsLink = manifestUrl.replace('http', 'fin'); + const finsProcess = exec(`open ${finsLink}`); + + /** + * A simple message to inform the user how to quit the platform. + */ + function logQuitMessage() { + console.log(); + console.log('Please quit the platform using:'); + console.log(); + console.log('- Process Manager (https://start.openfin.co/pm)'); + console.log('- run npm run kill to kill all OpenFin processes.'); + console.log(); + console.log(); + } + + finsProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + finsProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + // do something when app is closing + process.on('exit', async () => { + console.log('Please wait for the OpenFin application to launch.'); + logQuitMessage(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + logQuitMessage(); + }); + + finsProcess.on('exit', (code) => { + if (code === 0) { + console.log('Manifest launched successfully'); + } else { + console.log(`Child process exited with code ${code.toString()}`); + } + }); +} + /** * Launch the manifest using the node adapter. * @param manifestUrl The manifest to launch. * @param exitMethod The method to call if the adapter connection exits. * @returns The fin object representing the connection. */ -async function launchFromNode(manifestUrl, exitMethod) { +async function connectAndGetFinAPI(manifestUrl, exitMethod) { try { console.log(`Launching manifest...`); console.log(); diff --git a/how-to/use-popup-window/single-result/package.json b/how-to/use-popup-window/single-result/package.json index d46a40c4..518afbdd 100644 --- a/how-to/use-popup-window/single-result/package.json +++ b/how-to/use-popup-window/single-result/package.json @@ -1,25 +1,25 @@ { - "name": "use-popup-window-single-result", - "version": "0.0.1", - "description": "A demonstration of a single use popup window.", - "main": "index.js", - "scripts": { - "kill": "node ./scripts/kill.mjs", - "client": "node ./scripts/launch.mjs", - "build-client": "webpack build --config ./client/webpack.config.js --mode=development", - "build": "npm run build-client", - "start": "npx --yes http-server ./public -p 5050 -c-1", - "setup": "cd ../../../ && npm install && cd how-to/use-poupup-window/single-result && npm run build" - }, - "author": "connor.mccafferty@openfin.co", - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "@openfin/core": "36.80.10", - "@types/node": "^20.4.1", - "@openfin/node-adapter": "36.80.10", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", - "webpack-cli": "^5.1.4" - } -} \ No newline at end of file + "name": "use-popup-window-single-result", + "version": "36.80.11", + "description": "A demonstration of a single use popup window.", + "main": "index.js", + "scripts": { + "kill": "node ./scripts/kill.mjs", + "client": "node ./scripts/launch.mjs", + "build-client": "webpack build --config ./client/webpack.config.js --mode=development", + "build": "npm run build-client", + "start": "npx --yes http-server ./public -p 5050 -c-1", + "setup": "cd ../../../ && npm install && cd how-to/use-poupup-window/single-result && npm run build" + }, + "author": "connor.mccafferty@openfin.co", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "@openfin/core": "36.80.11", + "@types/node": "^20.12.11", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4" + } +} diff --git a/how-to/use-popup-window/single-result/public/manifest.fin.json b/how-to/use-popup-window/single-result/public/manifest.fin.json index d9370910..7d1d1216 100644 --- a/how-to/use-popup-window/single-result/public/manifest.fin.json +++ b/how-to/use-popup-window/single-result/public/manifest.fin.json @@ -1,35 +1,35 @@ { - "licenseKey": "openfin-demo-license-key", - "runtime": { - "arguments": "--v=1 --inspect", - "version": "36.122.80.10" - }, - "platform": { - "uuid": "how-to-use-popup-window-single-result", - "autoShow": true - }, - "snapshot": { - "windows": [ - { - "layout": { - "content": [ - { - "type": "stack", - "id": "no-drop-target", - "content": [ - { - "type": "component", - "componentName": "view", - "componentState": { - "processAffinity": "ps_1", - "url": "http://localhost:5050/html/app.html" - } - } - ] - } - ] - } - } - ] - } -} \ No newline at end of file + "licenseKey": "openfin-demo-license-key", + "runtime": { + "arguments": "--v=1 --inspect", + "version": "36.122.80.11" + }, + "platform": { + "uuid": "how-to-use-popup-window-single-result", + "autoShow": true + }, + "snapshot": { + "windows": [ + { + "layout": { + "content": [ + { + "type": "stack", + "id": "no-drop-target", + "content": [ + { + "type": "component", + "componentName": "view", + "componentState": { + "processAffinity": "ps_1", + "url": "http://localhost:5050/html/app.html" + } + } + ] + } + ] + } + } + ] + } +} diff --git a/how-to/use-popup-window/single-result/scripts/launch.mjs b/how-to/use-popup-window/single-result/scripts/launch.mjs index fd08a2a4..50444893 100644 --- a/how-to/use-popup-window/single-result/scripts/launch.mjs +++ b/how-to/use-popup-window/single-result/scripts/launch.mjs @@ -5,6 +5,7 @@ * Pressing Ctrl+C/Command+C will terminate the application. */ import { connect, launch } from '@openfin/node-adapter'; +import { exec } from 'child_process'; import { setDefaultResultOrder } from 'dns'; /** @@ -13,68 +14,10 @@ import { setDefaultResultOrder } from 'dns'; */ async function run(manifestUrl) { try { - let quitRequested = false; - let quit; - - const fin = await launchFromNode(manifestUrl); - - if (fin) { - const manifest = await fin.System.fetchManifest(manifestUrl); - - if (manifest.platform?.uuid !== undefined) { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling platform quit'); - const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); - await platform.quit(); - } - } catch (err) { - if (err.toString().includes('no longer connected')) { - console.log('Platform no longer connected'); - console.log('Exiting process'); - process.exit(); - } else { - console.error(err); - } - } - }; - console.log(`Wrapped target platform: ${manifest.platform.uuid}`); - } else { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling application quit'); - const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); - await app.quit(); - } - } catch (err) { - console.error(err); - } - }; - console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); - } - - // do something when app is closing - process.on('exit', async () => { - console.log('Process exit called'); - await quit(); - }); - - // catches ctrl+c event - process.on('SIGINT', async () => { - console.log('Ctrl + C called'); - await quit(); - }); - - console.log(`You successfully connected to the manifest: ${manifestUrl}`); - console.log(`Please wait while the sample loads.`); - console.log(); - console.log(`If using browser use the Quit option from the main menu.`); - console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); - console.log(); + if (process.platform === 'darwin') { + await launchFromFinsLink(manifestUrl); + } else { + await launchFromNodeAdapter(manifestUrl); } } catch (e) { console.error(`Error: Connection failed`); @@ -82,13 +25,136 @@ async function run(manifestUrl) { } } +/** + * Launch the manifest using the node adapter. + * @param manifestUrl the url to launch + */ +async function launchFromNodeAdapter(manifestUrl) { + let quitRequested = false; + let quit; + + const fin = await connectAndGetFinAPI(manifestUrl); + + if (fin) { + const manifest = await fin.System.fetchManifest(manifestUrl); + + if (manifest.platform?.uuid !== undefined) { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling platform quit'); + const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); + await platform.quit(); + } + } catch (err) { + if (err.toString().includes('no longer connected')) { + console.log('Platform no longer connected'); + console.log('Exiting process'); + process.exit(); + } else { + console.error(err); + } + } + }; + console.log(`Wrapped target platform: ${manifest.platform.uuid}`); + } else { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling application quit'); + const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); + await app.quit(); + } + } catch (err) { + console.error(err); + } + }; + console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); + } + + // do something when app is closing + process.on('exit', async () => { + console.log('Process exit called'); + await quit(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + await quit(); + }); + + console.log(`You successfully connected to the manifest: ${manifestUrl}`); + console.log(`Please wait while the sample loads.`); + console.log(); + console.log(`Close all platform windows to close the platform.`); + console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); + console.log(); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + */ +async function launchFromFinsLink(manifestUrl) { + console.log(); + console.log(`Launching manifest...`); + console.log(); + const finsLink = manifestUrl.replace('http', 'fin'); + const finsProcess = exec(`open ${finsLink}`); + + /** + * A simple message to inform the user how to quit the platform. + */ + function logQuitMessage() { + console.log(); + console.log('Please quit the platform using:'); + console.log(); + console.log('- Process Manager (https://start.openfin.co/pm)'); + console.log('- run npm run kill to kill all OpenFin processes.'); + console.log(); + console.log(); + } + + finsProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + finsProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + // do something when app is closing + process.on('exit', async () => { + console.log('Please wait for the OpenFin application to launch.'); + logQuitMessage(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + logQuitMessage(); + }); + + finsProcess.on('exit', (code) => { + if (code === 0) { + console.log('Manifest launched successfully'); + } else { + console.log(`Child process exited with code ${code.toString()}`); + } + }); +} + /** * Launch the manifest using the node adapter. * @param manifestUrl The manifest to launch. * @param exitMethod The method to call if the adapter connection exits. * @returns The fin object representing the connection. */ -async function launchFromNode(manifestUrl, exitMethod) { +async function connectAndGetFinAPI(manifestUrl, exitMethod) { try { console.log(`Launching manifest...`); console.log(); diff --git a/how-to/use-preloads/basic/package.json b/how-to/use-preloads/basic/package.json index 239ad232..7812b774 100644 --- a/how-to/use-preloads/basic/package.json +++ b/how-to/use-preloads/basic/package.json @@ -1,24 +1,24 @@ { - "name": "use-preloads-hello-world", - "version": "0.0.1", - "description": "A demonstration of how to configure preload scripts", - "main": "index.js", - "scripts": { - "kill": "node ./scripts/kill.mjs", - "client": "node ./scripts/launch.mjs", - "build-client": "webpack build --config ./client/webpack.config.js --mode=development", - "build": "npm run build-client", - "start": "npx --yes http-server ./public -p 5050 -c-1", - "setup": "cd ../../../ && npm install && cd how-to/use-preloads/basic && npm run build" - }, - "author": "john.mandia@openfin.co", - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "@openfin/node-adapter": "36.80.10", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", - "webpack-cli": "^5.1.4", - "@openfin/core": "36.80.10" - } -} \ No newline at end of file + "name": "use-preloads-hello-world", + "version": "36.80.11", + "description": "A demonstration of how to configure preload scripts", + "main": "index.js", + "scripts": { + "kill": "node ./scripts/kill.mjs", + "client": "node ./scripts/launch.mjs", + "build-client": "webpack build --config ./client/webpack.config.js --mode=development", + "build": "npm run build-client", + "start": "npx --yes http-server ./public -p 5050 -c-1", + "setup": "cd ../../../ && npm install && cd how-to/use-preloads/basic && npm run build" + }, + "author": "john.mandia@openfin.co", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4", + "@openfin/core": "36.80.11" + } +} diff --git a/how-to/use-preloads/basic/public/manifest.fin.json b/how-to/use-preloads/basic/public/manifest.fin.json index 742a5761..025fca0b 100644 --- a/how-to/use-preloads/basic/public/manifest.fin.json +++ b/how-to/use-preloads/basic/public/manifest.fin.json @@ -1,54 +1,54 @@ { - "runtime": { - "arguments": "--v=1 --inspect", - "version": "36.122.80.10" - }, - "platform": { - "uuid": "how-to-use-preloads-hello-world", - "autoShow": true, - "icon": "http://localhost:5050/favicon.ico", - "preloadScripts": [ - { - "url": "http://localhost:5050/js/preload-platform.bundle.js" - } - ], - "defaultWindowOptions": { - "preloadScripts": [ - { - "url": "http://localhost:5050/js/preload-window.bundle.js" - } - ] - }, - "defaultViewOptions": { - "preloadScripts": [ - { - "url": "http://localhost:5050/js/preload-view.bundle.js" - } - ] - } - }, - "snapshot": { - "windows": [ - { - "layout": { - "content": [ - { - "type": "stack", - "id": "no-drop-target", - "content": [ - { - "type": "component", - "componentName": "view", - "componentState": { - "processAffinity": "ps_1", - "url": "http://localhost:5050/html/app.html" - } - } - ] - } - ] - } - } - ] - } -} \ No newline at end of file + "runtime": { + "arguments": "--v=1 --inspect", + "version": "36.122.80.11" + }, + "platform": { + "uuid": "how-to-use-preloads-hello-world", + "autoShow": true, + "icon": "http://localhost:5050/favicon.ico", + "preloadScripts": [ + { + "url": "http://localhost:5050/js/preload-platform.bundle.js" + } + ], + "defaultWindowOptions": { + "preloadScripts": [ + { + "url": "http://localhost:5050/js/preload-window.bundle.js" + } + ] + }, + "defaultViewOptions": { + "preloadScripts": [ + { + "url": "http://localhost:5050/js/preload-view.bundle.js" + } + ] + } + }, + "snapshot": { + "windows": [ + { + "layout": { + "content": [ + { + "type": "stack", + "id": "no-drop-target", + "content": [ + { + "type": "component", + "componentName": "view", + "componentState": { + "processAffinity": "ps_1", + "url": "http://localhost:5050/html/app.html" + } + } + ] + } + ] + } + } + ] + } +} diff --git a/how-to/use-preloads/basic/scripts/launch.mjs b/how-to/use-preloads/basic/scripts/launch.mjs index fd08a2a4..50444893 100644 --- a/how-to/use-preloads/basic/scripts/launch.mjs +++ b/how-to/use-preloads/basic/scripts/launch.mjs @@ -5,6 +5,7 @@ * Pressing Ctrl+C/Command+C will terminate the application. */ import { connect, launch } from '@openfin/node-adapter'; +import { exec } from 'child_process'; import { setDefaultResultOrder } from 'dns'; /** @@ -13,68 +14,10 @@ import { setDefaultResultOrder } from 'dns'; */ async function run(manifestUrl) { try { - let quitRequested = false; - let quit; - - const fin = await launchFromNode(manifestUrl); - - if (fin) { - const manifest = await fin.System.fetchManifest(manifestUrl); - - if (manifest.platform?.uuid !== undefined) { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling platform quit'); - const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); - await platform.quit(); - } - } catch (err) { - if (err.toString().includes('no longer connected')) { - console.log('Platform no longer connected'); - console.log('Exiting process'); - process.exit(); - } else { - console.error(err); - } - } - }; - console.log(`Wrapped target platform: ${manifest.platform.uuid}`); - } else { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling application quit'); - const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); - await app.quit(); - } - } catch (err) { - console.error(err); - } - }; - console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); - } - - // do something when app is closing - process.on('exit', async () => { - console.log('Process exit called'); - await quit(); - }); - - // catches ctrl+c event - process.on('SIGINT', async () => { - console.log('Ctrl + C called'); - await quit(); - }); - - console.log(`You successfully connected to the manifest: ${manifestUrl}`); - console.log(`Please wait while the sample loads.`); - console.log(); - console.log(`If using browser use the Quit option from the main menu.`); - console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); - console.log(); + if (process.platform === 'darwin') { + await launchFromFinsLink(manifestUrl); + } else { + await launchFromNodeAdapter(manifestUrl); } } catch (e) { console.error(`Error: Connection failed`); @@ -82,13 +25,136 @@ async function run(manifestUrl) { } } +/** + * Launch the manifest using the node adapter. + * @param manifestUrl the url to launch + */ +async function launchFromNodeAdapter(manifestUrl) { + let quitRequested = false; + let quit; + + const fin = await connectAndGetFinAPI(manifestUrl); + + if (fin) { + const manifest = await fin.System.fetchManifest(manifestUrl); + + if (manifest.platform?.uuid !== undefined) { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling platform quit'); + const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); + await platform.quit(); + } + } catch (err) { + if (err.toString().includes('no longer connected')) { + console.log('Platform no longer connected'); + console.log('Exiting process'); + process.exit(); + } else { + console.error(err); + } + } + }; + console.log(`Wrapped target platform: ${manifest.platform.uuid}`); + } else { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling application quit'); + const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); + await app.quit(); + } + } catch (err) { + console.error(err); + } + }; + console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); + } + + // do something when app is closing + process.on('exit', async () => { + console.log('Process exit called'); + await quit(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + await quit(); + }); + + console.log(`You successfully connected to the manifest: ${manifestUrl}`); + console.log(`Please wait while the sample loads.`); + console.log(); + console.log(`Close all platform windows to close the platform.`); + console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); + console.log(); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + */ +async function launchFromFinsLink(manifestUrl) { + console.log(); + console.log(`Launching manifest...`); + console.log(); + const finsLink = manifestUrl.replace('http', 'fin'); + const finsProcess = exec(`open ${finsLink}`); + + /** + * A simple message to inform the user how to quit the platform. + */ + function logQuitMessage() { + console.log(); + console.log('Please quit the platform using:'); + console.log(); + console.log('- Process Manager (https://start.openfin.co/pm)'); + console.log('- run npm run kill to kill all OpenFin processes.'); + console.log(); + console.log(); + } + + finsProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + finsProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + // do something when app is closing + process.on('exit', async () => { + console.log('Please wait for the OpenFin application to launch.'); + logQuitMessage(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + logQuitMessage(); + }); + + finsProcess.on('exit', (code) => { + if (code === 0) { + console.log('Manifest launched successfully'); + } else { + console.log(`Child process exited with code ${code.toString()}`); + } + }); +} + /** * Launch the manifest using the node adapter. * @param manifestUrl The manifest to launch. * @param exitMethod The method to call if the adapter connection exits. * @returns The fin object representing the connection. */ -async function launchFromNode(manifestUrl, exitMethod) { +async function connectAndGetFinAPI(manifestUrl, exitMethod) { try { console.log(`Launching manifest...`); console.log(); diff --git a/how-to/use-preloads/restart-on-refresh/package.json b/how-to/use-preloads/restart-on-refresh/package.json index 24a5e3eb..e04d7e9a 100644 --- a/how-to/use-preloads/restart-on-refresh/package.json +++ b/how-to/use-preloads/restart-on-refresh/package.json @@ -1,24 +1,24 @@ { - "name": "use-preloads-restart-on-refresh", - "version": "0.0.1", - "description": "A demonstration of how to configure preload scripts to restart on refresh of a view", - "main": "index.js", - "scripts": { - "kill": "node ./scripts/kill.mjs", - "client": "node ./scripts/launch.mjs", - "build-client": "webpack build --config ./client/webpack.config.js --mode=development", - "build": "npm run build-client", - "start": "npx --yes http-server ./public -p 5050 -c-1", - "setup": "cd ../../../ && npm install && cd how-to/use-preloads/restart-on-refresh && npm run build" - }, - "author": "john.mandia@openfin.co", - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "@openfin/node-adapter": "36.80.10", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", - "webpack-cli": "^5.1.4", - "@openfin/core": "36.80.10" - } -} \ No newline at end of file + "name": "use-preloads-restart-on-refresh", + "version": "36.80.11", + "description": "A demonstration of how to configure preload scripts to restart on refresh of a view", + "main": "index.js", + "scripts": { + "kill": "node ./scripts/kill.mjs", + "client": "node ./scripts/launch.mjs", + "build-client": "webpack build --config ./client/webpack.config.js --mode=development", + "build": "npm run build-client", + "start": "npx --yes http-server ./public -p 5050 -c-1", + "setup": "cd ../../../ && npm install && cd how-to/use-preloads/restart-on-refresh && npm run build" + }, + "author": "john.mandia@openfin.co", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4", + "@openfin/core": "36.80.11" + } +} diff --git a/how-to/use-preloads/restart-on-refresh/public/manifest.fin.json b/how-to/use-preloads/restart-on-refresh/public/manifest.fin.json index 18c9ea8f..2c803cc2 100644 --- a/how-to/use-preloads/restart-on-refresh/public/manifest.fin.json +++ b/how-to/use-preloads/restart-on-refresh/public/manifest.fin.json @@ -1,42 +1,42 @@ { - "runtime": { - "arguments": "--v=1 --inspect", - "version": "36.122.80.10" - }, - "platform": { - "uuid": "how-to-use-preloads-restart-on-refresh", - "autoShow": false, - "icon": "http://localhost:5050/favicon.ico", - "defaultViewOptions": { - "preloadScripts": [ - { - "url": "http://localhost:5050/js/preload-view.bundle.js" - } - ] - } - }, - "snapshot": { - "windows": [ - { - "layout": { - "content": [ - { - "type": "stack", - "id": "no-drop-target", - "content": [ - { - "type": "component", - "componentName": "view", - "componentState": { - "processAffinity": "ps_1", - "url": "https://www.google.com/search?q=openfin+preload+scripts" - } - } - ] - } - ] - } - } - ] - } -} \ No newline at end of file + "runtime": { + "arguments": "--v=1 --inspect", + "version": "36.122.80.11" + }, + "platform": { + "uuid": "how-to-use-preloads-restart-on-refresh", + "autoShow": false, + "icon": "http://localhost:5050/favicon.ico", + "defaultViewOptions": { + "preloadScripts": [ + { + "url": "http://localhost:5050/js/preload-view.bundle.js" + } + ] + } + }, + "snapshot": { + "windows": [ + { + "layout": { + "content": [ + { + "type": "stack", + "id": "no-drop-target", + "content": [ + { + "type": "component", + "componentName": "view", + "componentState": { + "processAffinity": "ps_1", + "url": "https://www.google.com/search?q=openfin+preload+scripts" + } + } + ] + } + ] + } + } + ] + } +} diff --git a/how-to/use-preloads/restart-on-refresh/scripts/launch.mjs b/how-to/use-preloads/restart-on-refresh/scripts/launch.mjs index fd08a2a4..50444893 100644 --- a/how-to/use-preloads/restart-on-refresh/scripts/launch.mjs +++ b/how-to/use-preloads/restart-on-refresh/scripts/launch.mjs @@ -5,6 +5,7 @@ * Pressing Ctrl+C/Command+C will terminate the application. */ import { connect, launch } from '@openfin/node-adapter'; +import { exec } from 'child_process'; import { setDefaultResultOrder } from 'dns'; /** @@ -13,68 +14,10 @@ import { setDefaultResultOrder } from 'dns'; */ async function run(manifestUrl) { try { - let quitRequested = false; - let quit; - - const fin = await launchFromNode(manifestUrl); - - if (fin) { - const manifest = await fin.System.fetchManifest(manifestUrl); - - if (manifest.platform?.uuid !== undefined) { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling platform quit'); - const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); - await platform.quit(); - } - } catch (err) { - if (err.toString().includes('no longer connected')) { - console.log('Platform no longer connected'); - console.log('Exiting process'); - process.exit(); - } else { - console.error(err); - } - } - }; - console.log(`Wrapped target platform: ${manifest.platform.uuid}`); - } else { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling application quit'); - const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); - await app.quit(); - } - } catch (err) { - console.error(err); - } - }; - console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); - } - - // do something when app is closing - process.on('exit', async () => { - console.log('Process exit called'); - await quit(); - }); - - // catches ctrl+c event - process.on('SIGINT', async () => { - console.log('Ctrl + C called'); - await quit(); - }); - - console.log(`You successfully connected to the manifest: ${manifestUrl}`); - console.log(`Please wait while the sample loads.`); - console.log(); - console.log(`If using browser use the Quit option from the main menu.`); - console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); - console.log(); + if (process.platform === 'darwin') { + await launchFromFinsLink(manifestUrl); + } else { + await launchFromNodeAdapter(manifestUrl); } } catch (e) { console.error(`Error: Connection failed`); @@ -82,13 +25,136 @@ async function run(manifestUrl) { } } +/** + * Launch the manifest using the node adapter. + * @param manifestUrl the url to launch + */ +async function launchFromNodeAdapter(manifestUrl) { + let quitRequested = false; + let quit; + + const fin = await connectAndGetFinAPI(manifestUrl); + + if (fin) { + const manifest = await fin.System.fetchManifest(manifestUrl); + + if (manifest.platform?.uuid !== undefined) { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling platform quit'); + const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); + await platform.quit(); + } + } catch (err) { + if (err.toString().includes('no longer connected')) { + console.log('Platform no longer connected'); + console.log('Exiting process'); + process.exit(); + } else { + console.error(err); + } + } + }; + console.log(`Wrapped target platform: ${manifest.platform.uuid}`); + } else { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling application quit'); + const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); + await app.quit(); + } + } catch (err) { + console.error(err); + } + }; + console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); + } + + // do something when app is closing + process.on('exit', async () => { + console.log('Process exit called'); + await quit(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + await quit(); + }); + + console.log(`You successfully connected to the manifest: ${manifestUrl}`); + console.log(`Please wait while the sample loads.`); + console.log(); + console.log(`Close all platform windows to close the platform.`); + console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); + console.log(); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + */ +async function launchFromFinsLink(manifestUrl) { + console.log(); + console.log(`Launching manifest...`); + console.log(); + const finsLink = manifestUrl.replace('http', 'fin'); + const finsProcess = exec(`open ${finsLink}`); + + /** + * A simple message to inform the user how to quit the platform. + */ + function logQuitMessage() { + console.log(); + console.log('Please quit the platform using:'); + console.log(); + console.log('- Process Manager (https://start.openfin.co/pm)'); + console.log('- run npm run kill to kill all OpenFin processes.'); + console.log(); + console.log(); + } + + finsProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + finsProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + // do something when app is closing + process.on('exit', async () => { + console.log('Please wait for the OpenFin application to launch.'); + logQuitMessage(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + logQuitMessage(); + }); + + finsProcess.on('exit', (code) => { + if (code === 0) { + console.log('Manifest launched successfully'); + } else { + console.log(`Child process exited with code ${code.toString()}`); + } + }); +} + /** * Launch the manifest using the node adapter. * @param manifestUrl The manifest to launch. * @param exitMethod The method to call if the adapter connection exits. * @returns The fin object representing the connection. */ -async function launchFromNode(manifestUrl, exitMethod) { +async function connectAndGetFinAPI(manifestUrl, exitMethod) { try { console.log(`Launching manifest...`); console.log(); diff --git a/how-to/use-security-realms/package.json b/how-to/use-security-realms/package.json index c2c73804..4e6ef834 100755 --- a/how-to/use-security-realms/package.json +++ b/how-to/use-security-realms/package.json @@ -1,24 +1,24 @@ { - "name": "use-security-realms", - "version": "0.0.1", - "description": "A demonstration of how to use OpenFin security realms with native applications", - "main": "index.js", - "scripts": { - "kill": "node ./scripts/kill.mjs", - "client": "node ./scripts/launch.mjs", - "build-client": "webpack build --config ./client/webpack.config.js --mode=development", - "build": "npm run build-client", - "start": "npx --yes http-server ./public -p 5050 -c-1", - "setup": "cd ../../ && npm install && cd how-to/use-security-realms && npm run build" - }, - "author": "adam.saland@openfin.co", - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "@openfin/node-adapter": "36.80.10", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", - "webpack-cli": "^5.1.4", - "@openfin/core": "36.80.10" - } -} \ No newline at end of file + "name": "use-security-realms", + "version": "36.80.11", + "description": "A demonstration of how to use OpenFin security realms with native applications", + "main": "index.js", + "scripts": { + "kill": "node ./scripts/kill.mjs", + "client": "node ./scripts/launch.mjs", + "build-client": "webpack build --config ./client/webpack.config.js --mode=development", + "build": "npm run build-client", + "start": "npx --yes http-server ./public -p 5050 -c-1", + "setup": "cd ../../ && npm install && cd how-to/use-security-realms && npm run build" + }, + "author": "adam.saland@openfin.co", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4", + "@openfin/core": "36.80.11" + } +} diff --git a/how-to/use-security-realms/public/app.fin.json b/how-to/use-security-realms/public/app.fin.json index d9a58b02..bbfc042b 100644 --- a/how-to/use-security-realms/public/app.fin.json +++ b/how-to/use-security-realms/public/app.fin.json @@ -1,19 +1,19 @@ { - "licenseKey": "64605fac-add3-48a0-8710-64b38e96a2dd", - "runtime": { - "version": "36.122.80.10", - "arguments": "--v=1 --security-realm=PROD-MAIN" - }, - "shortcut": { - "company": "OpenFin", - "description": "PROD Main Application", - "icon": "http://localhost:5050/favicon.ico", - "name": "PROD Main Application" - }, - "startup_app": { - "name": "prod-main-application", - "uuid": "prod-main-application", - "url": "http://localhost:5050/html/app.html", - "autoShow": true - } -} \ No newline at end of file + "licenseKey": "64605fac-add3-48a0-8710-64b38e96a2dd", + "runtime": { + "version": "36.122.80.11", + "arguments": "--v=1 --security-realm=PROD-MAIN" + }, + "shortcut": { + "company": "OpenFin", + "description": "PROD Main Application", + "icon": "http://localhost:5050/favicon.ico", + "name": "PROD Main Application" + }, + "startup_app": { + "name": "prod-main-application", + "uuid": "prod-main-application", + "url": "http://localhost:5050/html/app.html", + "autoShow": true + } +} diff --git a/how-to/use-security-realms/public/manifest.fin.json b/how-to/use-security-realms/public/manifest.fin.json index 178373a0..3e79f9b7 100644 --- a/how-to/use-security-realms/public/manifest.fin.json +++ b/how-to/use-security-realms/public/manifest.fin.json @@ -1,45 +1,45 @@ { - "runtime": { - "arguments": "--v=1 --inspect --security-realm=PROD-MAIN", - "version": "36.122.80.10" - }, - "shortcut": { - "company": "OpenFin", - "description": "PROD Main Platform", - "icon": "http://localhost:5050/favicon.ico", - "name": "PROD Main Platform" - }, - "platform": { - "uuid": "prod-main-platform", - "autoShow": false, - "permissions": { - "System": { - "launchExternalProcess": true - } - } - }, - "snapshot": { - "windows": [ - { - "layout": { - "content": [ - { - "type": "stack", - "id": "no-drop-target", - "content": [ - { - "type": "component", - "componentName": "view", - "componentState": { - "processAffinity": "ps_1", - "url": "http://localhost:5050/html/view-app.html" - } - } - ] - } - ] - } - } - ] - } -} \ No newline at end of file + "runtime": { + "arguments": "--v=1 --inspect --security-realm=PROD-MAIN", + "version": "36.122.80.11" + }, + "shortcut": { + "company": "OpenFin", + "description": "PROD Main Platform", + "icon": "http://localhost:5050/favicon.ico", + "name": "PROD Main Platform" + }, + "platform": { + "uuid": "prod-main-platform", + "autoShow": false, + "permissions": { + "System": { + "launchExternalProcess": true + } + } + }, + "snapshot": { + "windows": [ + { + "layout": { + "content": [ + { + "type": "stack", + "id": "no-drop-target", + "content": [ + { + "type": "component", + "componentName": "view", + "componentState": { + "processAffinity": "ps_1", + "url": "http://localhost:5050/html/view-app.html" + } + } + ] + } + ] + } + } + ] + } +} diff --git a/how-to/use-security-realms/public/uat/app.fin.json b/how-to/use-security-realms/public/uat/app.fin.json index e2e36b65..3234ef6d 100644 --- a/how-to/use-security-realms/public/uat/app.fin.json +++ b/how-to/use-security-realms/public/uat/app.fin.json @@ -1,34 +1,34 @@ { - "licenseKey": "64605fac-add3-48a0-8710-64b38e96a2dd", - "runtime": { - "version": "36.122.80.10", - "arguments": "--v=1 --security-realm=UAT-MAIN" - }, - "shortcut": { - "company": "OpenFin", - "description": "UAT Main Application", - "icon": "http://localhost:5050/favicon.ico", - "name": "UAT Main Application" - }, - "startup_app": { - "name": "uat-main-application", - "uuid": "uat-main-application", - "url": "http://localhost:5050/html/app.html", - "autoShow": true, - "permissions": { - "System": { - "launchExternalProcess": true, - "downloadAsset": true - } - } - }, - "appAssets": [ - { - "src": "http://localhost:5050/assets/UseSecurityRealms.zip", - "version": "0.0.0.1", - "alias": "security-realms-native", - "target": "UseSecurityRealms.exe", - "mandatory": true - } - ] -} \ No newline at end of file + "licenseKey": "64605fac-add3-48a0-8710-64b38e96a2dd", + "runtime": { + "version": "36.122.80.11", + "arguments": "--v=1 --security-realm=UAT-MAIN" + }, + "shortcut": { + "company": "OpenFin", + "description": "UAT Main Application", + "icon": "http://localhost:5050/favicon.ico", + "name": "UAT Main Application" + }, + "startup_app": { + "name": "uat-main-application", + "uuid": "uat-main-application", + "url": "http://localhost:5050/html/app.html", + "autoShow": true, + "permissions": { + "System": { + "launchExternalProcess": true, + "downloadAsset": true + } + } + }, + "appAssets": [ + { + "src": "http://localhost:5050/assets/UseSecurityRealms.zip", + "version": "0.0.0.1", + "alias": "security-realms-native", + "target": "UseSecurityRealms.exe", + "mandatory": true + } + ] +} diff --git a/how-to/use-security-realms/public/uat/manifest.fin.json b/how-to/use-security-realms/public/uat/manifest.fin.json index ea137d7d..bb92f341 100644 --- a/how-to/use-security-realms/public/uat/manifest.fin.json +++ b/how-to/use-security-realms/public/uat/manifest.fin.json @@ -1,45 +1,45 @@ { - "runtime": { - "arguments": "--v=1 --inspect --security-realm=UAT-MAIN", - "version": "36.122.80.10" - }, - "shortcut": { - "company": "OpenFin", - "description": "UAT Main Platform", - "icon": "http://localhost:5050/favicon.ico", - "name": "UAT Main Platform" - }, - "platform": { - "uuid": "uat-main-platform", - "autoShow": false, - "permissions": { - "System": { - "launchExternalProcess": true - } - } - }, - "snapshot": { - "windows": [ - { - "layout": { - "content": [ - { - "type": "stack", - "id": "no-drop-target", - "content": [ - { - "type": "component", - "componentName": "view", - "componentState": { - "processAffinity": "ps_1", - "url": "http://localhost:5050/html/app.html" - } - } - ] - } - ] - } - } - ] - } -} \ No newline at end of file + "runtime": { + "arguments": "--v=1 --inspect --security-realm=UAT-MAIN", + "version": "36.122.80.11" + }, + "shortcut": { + "company": "OpenFin", + "description": "UAT Main Platform", + "icon": "http://localhost:5050/favicon.ico", + "name": "UAT Main Platform" + }, + "platform": { + "uuid": "uat-main-platform", + "autoShow": false, + "permissions": { + "System": { + "launchExternalProcess": true + } + } + }, + "snapshot": { + "windows": [ + { + "layout": { + "content": [ + { + "type": "stack", + "id": "no-drop-target", + "content": [ + { + "type": "component", + "componentName": "view", + "componentState": { + "processAffinity": "ps_1", + "url": "http://localhost:5050/html/app.html" + } + } + ] + } + ] + } + } + ] + } +} diff --git a/how-to/use-security-realms/scripts/launch.mjs b/how-to/use-security-realms/scripts/launch.mjs index fd08a2a4..50444893 100644 --- a/how-to/use-security-realms/scripts/launch.mjs +++ b/how-to/use-security-realms/scripts/launch.mjs @@ -5,6 +5,7 @@ * Pressing Ctrl+C/Command+C will terminate the application. */ import { connect, launch } from '@openfin/node-adapter'; +import { exec } from 'child_process'; import { setDefaultResultOrder } from 'dns'; /** @@ -13,68 +14,10 @@ import { setDefaultResultOrder } from 'dns'; */ async function run(manifestUrl) { try { - let quitRequested = false; - let quit; - - const fin = await launchFromNode(manifestUrl); - - if (fin) { - const manifest = await fin.System.fetchManifest(manifestUrl); - - if (manifest.platform?.uuid !== undefined) { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling platform quit'); - const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); - await platform.quit(); - } - } catch (err) { - if (err.toString().includes('no longer connected')) { - console.log('Platform no longer connected'); - console.log('Exiting process'); - process.exit(); - } else { - console.error(err); - } - } - }; - console.log(`Wrapped target platform: ${manifest.platform.uuid}`); - } else { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling application quit'); - const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); - await app.quit(); - } - } catch (err) { - console.error(err); - } - }; - console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); - } - - // do something when app is closing - process.on('exit', async () => { - console.log('Process exit called'); - await quit(); - }); - - // catches ctrl+c event - process.on('SIGINT', async () => { - console.log('Ctrl + C called'); - await quit(); - }); - - console.log(`You successfully connected to the manifest: ${manifestUrl}`); - console.log(`Please wait while the sample loads.`); - console.log(); - console.log(`If using browser use the Quit option from the main menu.`); - console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); - console.log(); + if (process.platform === 'darwin') { + await launchFromFinsLink(manifestUrl); + } else { + await launchFromNodeAdapter(manifestUrl); } } catch (e) { console.error(`Error: Connection failed`); @@ -82,13 +25,136 @@ async function run(manifestUrl) { } } +/** + * Launch the manifest using the node adapter. + * @param manifestUrl the url to launch + */ +async function launchFromNodeAdapter(manifestUrl) { + let quitRequested = false; + let quit; + + const fin = await connectAndGetFinAPI(manifestUrl); + + if (fin) { + const manifest = await fin.System.fetchManifest(manifestUrl); + + if (manifest.platform?.uuid !== undefined) { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling platform quit'); + const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); + await platform.quit(); + } + } catch (err) { + if (err.toString().includes('no longer connected')) { + console.log('Platform no longer connected'); + console.log('Exiting process'); + process.exit(); + } else { + console.error(err); + } + } + }; + console.log(`Wrapped target platform: ${manifest.platform.uuid}`); + } else { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling application quit'); + const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); + await app.quit(); + } + } catch (err) { + console.error(err); + } + }; + console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); + } + + // do something when app is closing + process.on('exit', async () => { + console.log('Process exit called'); + await quit(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + await quit(); + }); + + console.log(`You successfully connected to the manifest: ${manifestUrl}`); + console.log(`Please wait while the sample loads.`); + console.log(); + console.log(`Close all platform windows to close the platform.`); + console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); + console.log(); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + */ +async function launchFromFinsLink(manifestUrl) { + console.log(); + console.log(`Launching manifest...`); + console.log(); + const finsLink = manifestUrl.replace('http', 'fin'); + const finsProcess = exec(`open ${finsLink}`); + + /** + * A simple message to inform the user how to quit the platform. + */ + function logQuitMessage() { + console.log(); + console.log('Please quit the platform using:'); + console.log(); + console.log('- Process Manager (https://start.openfin.co/pm)'); + console.log('- run npm run kill to kill all OpenFin processes.'); + console.log(); + console.log(); + } + + finsProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + finsProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + // do something when app is closing + process.on('exit', async () => { + console.log('Please wait for the OpenFin application to launch.'); + logQuitMessage(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + logQuitMessage(); + }); + + finsProcess.on('exit', (code) => { + if (code === 0) { + console.log('Manifest launched successfully'); + } else { + console.log(`Child process exited with code ${code.toString()}`); + } + }); +} + /** * Launch the manifest using the node adapter. * @param manifestUrl The manifest to launch. * @param exitMethod The method to call if the adapter connection exits. * @returns The fin object representing the connection. */ -async function launchFromNode(manifestUrl, exitMethod) { +async function connectAndGetFinAPI(manifestUrl, exitMethod) { try { console.log(`Launching manifest...`); console.log(); diff --git a/how-to/use-window-options/package.json b/how-to/use-window-options/package.json index 42420812..653709aa 100644 --- a/how-to/use-window-options/package.json +++ b/how-to/use-window-options/package.json @@ -1,24 +1,24 @@ { - "name": "use-window-options", - "version": "0.0.1", - "description": "A demonstration of the different options available when opening windows", - "main": "index.js", - "scripts": { - "kill": "node ./scripts/kill.mjs", - "client": "node ./scripts/launch.mjs", - "build-client": "webpack build --config ./client/webpack.config.js --mode=development", - "build": "npm run build-client", - "start": "npx --yes http-server ./public -p 5050 -c-1", - "setup": "cd ../../ && npm install && cd how-to/use-window-options && npm run build" - }, - "author": "martyn.janes@openfin.co", - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "@openfin/node-adapter": "36.80.10", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", - "webpack-cli": "^5.1.4", - "@openfin/core": "36.80.10" - } -} \ No newline at end of file + "name": "use-window-options", + "version": "36.80.11", + "description": "A demonstration of the different options available when opening windows", + "main": "index.js", + "scripts": { + "kill": "node ./scripts/kill.mjs", + "client": "node ./scripts/launch.mjs", + "build-client": "webpack build --config ./client/webpack.config.js --mode=development", + "build": "npm run build-client", + "start": "npx --yes http-server ./public -p 5050 -c-1", + "setup": "cd ../../ && npm install && cd how-to/use-window-options && npm run build" + }, + "author": "martyn.janes@openfin.co", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4", + "@openfin/core": "36.80.11" + } +} diff --git a/how-to/use-window-options/public/manifest.fin.json b/how-to/use-window-options/public/manifest.fin.json index 1b2500ef..9a1edcc3 100644 --- a/how-to/use-window-options/public/manifest.fin.json +++ b/how-to/use-window-options/public/manifest.fin.json @@ -1,19 +1,19 @@ { - "runtime": { - "arguments": "--v=1 --inspect", - "version": "36.122.80.10" - }, - "startup_app": { - "name": "use-window-options", - "uuid": "use-window-options", - "description": "A guide to OpenFin Window Development", - "url": "http://localhost:5050/html/app.html", - "icon": "http://localhost:5050/favicon.ico", - "autoShow": true, - "defaultWidth": 1200, - "defaultHeight": 800, - "defaultCentered": true, - "minWidth": 800, - "minHeight": 400 - } -} \ No newline at end of file + "runtime": { + "arguments": "--v=1 --inspect", + "version": "36.122.80.11" + }, + "startup_app": { + "name": "use-window-options", + "uuid": "use-window-options", + "description": "A guide to OpenFin Window Development", + "url": "http://localhost:5050/html/app.html", + "icon": "http://localhost:5050/favicon.ico", + "autoShow": true, + "defaultWidth": 1200, + "defaultHeight": 800, + "defaultCentered": true, + "minWidth": 800, + "minHeight": 400 + } +} diff --git a/how-to/use-window-options/scripts/launch.mjs b/how-to/use-window-options/scripts/launch.mjs index fd08a2a4..50444893 100644 --- a/how-to/use-window-options/scripts/launch.mjs +++ b/how-to/use-window-options/scripts/launch.mjs @@ -5,6 +5,7 @@ * Pressing Ctrl+C/Command+C will terminate the application. */ import { connect, launch } from '@openfin/node-adapter'; +import { exec } from 'child_process'; import { setDefaultResultOrder } from 'dns'; /** @@ -13,68 +14,10 @@ import { setDefaultResultOrder } from 'dns'; */ async function run(manifestUrl) { try { - let quitRequested = false; - let quit; - - const fin = await launchFromNode(manifestUrl); - - if (fin) { - const manifest = await fin.System.fetchManifest(manifestUrl); - - if (manifest.platform?.uuid !== undefined) { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling platform quit'); - const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); - await platform.quit(); - } - } catch (err) { - if (err.toString().includes('no longer connected')) { - console.log('Platform no longer connected'); - console.log('Exiting process'); - process.exit(); - } else { - console.error(err); - } - } - }; - console.log(`Wrapped target platform: ${manifest.platform.uuid}`); - } else { - quit = async () => { - try { - if (!quitRequested) { - quitRequested = true; - console.log('Calling application quit'); - const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); - await app.quit(); - } - } catch (err) { - console.error(err); - } - }; - console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); - } - - // do something when app is closing - process.on('exit', async () => { - console.log('Process exit called'); - await quit(); - }); - - // catches ctrl+c event - process.on('SIGINT', async () => { - console.log('Ctrl + C called'); - await quit(); - }); - - console.log(`You successfully connected to the manifest: ${manifestUrl}`); - console.log(`Please wait while the sample loads.`); - console.log(); - console.log(`If using browser use the Quit option from the main menu.`); - console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); - console.log(); + if (process.platform === 'darwin') { + await launchFromFinsLink(manifestUrl); + } else { + await launchFromNodeAdapter(manifestUrl); } } catch (e) { console.error(`Error: Connection failed`); @@ -82,13 +25,136 @@ async function run(manifestUrl) { } } +/** + * Launch the manifest using the node adapter. + * @param manifestUrl the url to launch + */ +async function launchFromNodeAdapter(manifestUrl) { + let quitRequested = false; + let quit; + + const fin = await connectAndGetFinAPI(manifestUrl); + + if (fin) { + const manifest = await fin.System.fetchManifest(manifestUrl); + + if (manifest.platform?.uuid !== undefined) { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling platform quit'); + const platform = fin.Platform.wrapSync({ uuid: manifest.platform.uuid }); + await platform.quit(); + } + } catch (err) { + if (err.toString().includes('no longer connected')) { + console.log('Platform no longer connected'); + console.log('Exiting process'); + process.exit(); + } else { + console.error(err); + } + } + }; + console.log(`Wrapped target platform: ${manifest.platform.uuid}`); + } else { + quit = async () => { + try { + if (!quitRequested) { + quitRequested = true; + console.log('Calling application quit'); + const app = fin.Application.wrapSync({ uuid: manifest.startup_app.uuid }); + await app.quit(); + } + } catch (err) { + console.error(err); + } + }; + console.log(`Wrapped classic app: ${manifest.startup_app.uuid}`); + } + + // do something when app is closing + process.on('exit', async () => { + console.log('Process exit called'); + await quit(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + await quit(); + }); + + console.log(`You successfully connected to the manifest: ${manifestUrl}`); + console.log(`Please wait while the sample loads.`); + console.log(); + console.log(`Close all platform windows to close the platform.`); + console.log(`Otherwise press Ctrl + C (Windows) or Command + C (Mac) to exit and close the sample.`); + console.log(); + } +} + +/** + * Launch the manifest using the node adapter. + * @param manifestUrl The manifest to launch. + */ +async function launchFromFinsLink(manifestUrl) { + console.log(); + console.log(`Launching manifest...`); + console.log(); + const finsLink = manifestUrl.replace('http', 'fin'); + const finsProcess = exec(`open ${finsLink}`); + + /** + * A simple message to inform the user how to quit the platform. + */ + function logQuitMessage() { + console.log(); + console.log('Please quit the platform using:'); + console.log(); + console.log('- Process Manager (https://start.openfin.co/pm)'); + console.log('- run npm run kill to kill all OpenFin processes.'); + console.log(); + console.log(); + } + + finsProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + finsProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + // do something when app is closing + process.on('exit', async () => { + console.log('Please wait for the OpenFin application to launch.'); + logQuitMessage(); + }); + + // catches ctrl+c event + process.on('SIGINT', async () => { + console.log('Ctrl + C called'); + logQuitMessage(); + }); + + finsProcess.on('exit', (code) => { + if (code === 0) { + console.log('Manifest launched successfully'); + } else { + console.log(`Child process exited with code ${code.toString()}`); + } + }); +} + /** * Launch the manifest using the node adapter. * @param manifestUrl The manifest to launch. * @param exitMethod The method to call if the adapter connection exits. * @returns The fin object representing the connection. */ -async function launchFromNode(manifestUrl, exitMethod) { +async function connectAndGetFinAPI(manifestUrl, exitMethod) { try { console.log(`Launching manifest...`); console.log(); diff --git a/package-lock.json b/package-lock.json index 7bca9e67..7d1573a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,446 +1,426 @@ { "name": "openfin-container-starter", - "version": "33.77.11", + "version": "36.80.11", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "openfin-container-starter", - "version": "33.77.11", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", "workspaces": [ "how-to/**" ], "devDependencies": { - "eslint": "8.53.0", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "eslint": "8.57.0", "eslint-config-airbnb": "19.0.4", - "eslint-config-airbnb-typescript": "17.1.0", - "eslint-config-prettier": "9.0.0", + "eslint-config-airbnb-typescript": "18.0.0", + "eslint-config-prettier": "9.1.0", "eslint-plugin-import": "2.26.0", - "eslint-plugin-jsdoc": "46.9.0", - "eslint-plugin-prettier": "5.0.1", + "eslint-plugin-jsdoc": "48.2.3", + "eslint-plugin-prettier": "5.1.3", "eslint-plugin-promise": "6.1.1", - "eslint-plugin-simple-import-sort": "10.0.0", - "eslint-plugin-unicorn": "49.0.0", - "eslint-plugin-unused-imports": "3.0.0", + "eslint-plugin-simple-import-sort": "12.1.0", + "eslint-plugin-unicorn": "52.0.0", + "eslint-plugin-unused-imports": "3.2.0", "fast-glob": "3.3.2", - "fs-extra": "11.1.1", - "markdownlint-cli": "0.37.0", - "prettier": "3.1.0", - "replace-in-file": "7.0.2", + "fs-extra": "11.2.0", + "markdownlint-cli": "0.40.0", + "prettier": "3.2.5", + "replace-in-file": "7.1.0", "yargs": "17.7.2" } }, "how-to/automation-testing/create-window-js": { "name": "automation-testing-create-window-js", - "version": "1.0.0", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", "devDependencies": { - "@openfin/automation-cli": "^1.0.13", - "@openfin/automation-helpers": "^1.0.13", - "@openfin/automation-native": "^1.0.13", - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "chai": "4.3.7", + "@openfin/automation-cli": "^1.2.0", + "@openfin/automation-helpers": "^1.2.0", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "chai": "5.1.0", "mochawesome": "7.1.3" } }, "how-to/automation-testing/use-launch-external-process-js": { "name": "automation-testing-use-window-options-js", - "version": "1.0.0", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", "devDependencies": { - "@openfin/automation-cli": "^1.0.13", - "@openfin/automation-helpers": "^1.0.13", - "@openfin/automation-native": "^1.0.13", - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "chai": "4.3.7", + "@openfin/automation-cli": "^1.2.0", + "@openfin/automation-helpers": "^1.2.0", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "chai": "5.1.0", "mochawesome": "7.1.3" } }, "how-to/automation-testing/use-window-options-js": { "name": "automation-testing-use-launch-external-process-js", - "version": "1.0.0", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", "devDependencies": { - "@openfin/automation-cli": "^1.0.13", - "@openfin/automation-helpers": "^1.0.13", - "@openfin/automation-native": "^1.0.13", - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "chai": "4.3.7", + "@openfin/automation-cli": "^1.2.0", + "@openfin/automation-helpers": "^1.2.0", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "chai": "5.1.0", "mochawesome": "7.1.3" } }, "how-to/container-platform-starter": { - "version": "1.0.0", + "version": "36.80.11", "license": "ISC", "devDependencies": { - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", "webpack-cli": "^5.1.4" } }, "how-to/create-window": { "name": "application-window-creation", - "version": "0.0.1", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", "devDependencies": { - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", "webpack-cli": "^5.1.4" } }, "how-to/integration-excel": { - "version": "0.0.1", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", "dependencies": { - "@openfin/core": "33.77.11", - "@openfin/excel": "^1.4.1", - "@openfin/node-adapter": "33.77.11" + "@openfin/core": "36.80.11", + "@openfin/excel": "^1.5.0", + "@openfin/node-adapter": "36.80.11" }, "devDependencies": { - "@finos/fdc3": "^2.0.3", - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", + "@finos/fdc3": "^2.1.0", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", "webpack-cli": "^5.1.4" } }, "how-to/use-a-manifest/create-a-single-page-platform": { - "version": "0.0.1", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", "devDependencies": { - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11" + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11" } }, "how-to/use-channel-api/issue-commands-to-a-platform": { "name": "use-channel-api-issue-commands-to-a-platform", - "version": "0.0.1", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", "devDependencies": { - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", "webpack-cli": "^5.1.4" } }, "how-to/use-content-creation-rules": { - "version": "0.0.1", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", "devDependencies": { - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", "webpack-cli": "^5.1.4" } }, "how-to/use-dynamic-manifest/basic": { "name": "use-dynamic-manifest-basic", - "version": "0.0.1", + "version": "36.80.11", + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "express": "^4.19.2", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4" + } + }, + "how-to/use-interop/cloud-interop": { + "name": "container-starter-use-interop--cloud-interop", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", + "dependencies": { + "@openfin/cloud-interop": "0.36.12" + }, "devDependencies": { - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "express": "^4.18.2", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", "webpack-cli": "^5.1.4" } }, "how-to/use-interop/setup-multi-platform-interop": { "name": "setup-cross-platform-interop", - "version": "1.0.0", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", "devDependencies": { - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", "webpack-cli": "^5.1.4" } }, "how-to/use-launch-external-process": { "name": "launch-external-process", - "version": "0.0.1", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", "devDependencies": { - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", "webpack-cli": "^5.1.4" } }, "how-to/use-logging-apis": { - "version": "0.0.1", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", "dependencies": { - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", "connect-busboy": "^1.0.0", "multer": "^1.4.5-lts.1" }, "devDependencies": { - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "@types/multer": "^1.4.7", - "@types/node": "^20.4.1", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "@types/multer": "^1.4.11", + "@types/node": "^20.12.11", "body-parser": "^1.20.2", - "express": "^4.18.2", - "source-map-loader": "^4.0.1", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", + "express": "^4.19.2", + "source-map-loader": "^5.0.0", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", "webpack-cli": "^5.1.4" } }, + "how-to/use-logging-apis/node_modules/@types/node": { + "version": "20.12.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", + "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, "how-to/use-platform/warn-before-closing-dialog": { - "version": "1.0.0", + "version": "36.80.11", "license": "ISC", "devDependencies": { - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", "webpack-cli": "^5.1.4" } }, "how-to/use-popup-window/advanced": { "name": "use-popup-window-advanced", - "version": "0.0.1", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", "devDependencies": { - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "@types/node": "^20.4.1", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "@types/node": "^20.12.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", "webpack-cli": "^5.1.4" } }, + "how-to/use-popup-window/advanced/node_modules/@types/node": { + "version": "20.12.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", + "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, "how-to/use-popup-window/modal": { "name": "use-popup-window-modal", - "version": "0.0.1", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", "devDependencies": { - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "@types/node": "^20.4.1", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "@types/node": "^20.12.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", "webpack-cli": "^5.1.4" } }, + "how-to/use-popup-window/modal/node_modules/@types/node": { + "version": "20.12.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", + "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, "how-to/use-popup-window/multiple-results": { "name": "use-popup-window-multiple-results", - "version": "0.0.1", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", "devDependencies": { - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "@types/node": "^20.4.1", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "@types/node": "^20.12.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", "webpack-cli": "^5.1.4" } }, + "how-to/use-popup-window/multiple-results/node_modules/@types/node": { + "version": "20.12.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", + "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, "how-to/use-popup-window/single-result": { "name": "use-popup-window-single-result", - "version": "0.0.1", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", "devDependencies": { - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "@types/node": "^20.4.1", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "@types/node": "^20.12.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", "webpack-cli": "^5.1.4" } }, + "how-to/use-popup-window/single-result/node_modules/@types/node": { + "version": "20.12.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", + "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, "how-to/use-preloads/basic": { "name": "use-preloads-hello-world", - "version": "0.0.1", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", "devDependencies": { - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", "webpack-cli": "^5.1.4" } }, "how-to/use-preloads/restart-on-refresh": { "name": "use-preloads-restart-on-refresh", - "version": "0.0.1", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", "devDependencies": { - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", "webpack-cli": "^5.1.4" } }, "how-to/use-security-realms": { - "version": "0.0.1", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", "devDependencies": { - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", "webpack-cli": "^5.1.4" } }, "how-to/use-window-options": { - "version": "0.0.1", + "version": "36.80.11", "license": "SEE LICENSE IN LICENSE.MD", "devDependencies": { - "@openfin/core": "33.77.11", - "@openfin/node-adapter": "33.77.11", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6", - "webpack": "^5.88.1", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", "webpack-cli": "^5.1.4" } }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "peer": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", "dev": true, "peer": true, "engines": { @@ -448,22 +428,22 @@ } }, "node_modules/@babel/core": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", - "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", + "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", "dev": true, "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.5", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.9", - "@babel/parser": "^7.23.9", - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/helper-module-transforms": "^7.24.5", + "@babel/helpers": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -502,15 +482,15 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", + "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", "dev": true, "peer": true, "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.5", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -567,13 +547,6 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "peer": true - }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", @@ -612,30 +585,30 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", "dev": true, "peer": true, "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", + "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", "dev": true, "peer": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@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" }, "engines": { "node": ">=6.9.0" @@ -645,9 +618,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", + "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", "dev": true, "peer": true, "engines": { @@ -655,35 +628,35 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", + "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", "dev": true, "peer": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", + "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", "dev": true, "peer": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "dev": true, "peer": true, "engines": { @@ -691,9 +664,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", + "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", "dev": true, "engines": { "node": ">=6.9.0" @@ -710,29 +683,30 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", - "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", + "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", "dev": true, "peer": true, "dependencies": { - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", + "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.5", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -810,9 +784,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", - "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", + "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", "dev": true, "peer": true, "bin": { @@ -888,13 +862,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", + "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", "dev": true, "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -998,13 +972,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", + "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", "dev": true, "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1014,11 +988,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", - "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", - "dev": true, - "peer": true, + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", + "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1027,35 +999,35 @@ } }, "node_modules/@babel/template": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", - "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "dev": true, "peer": true, "dependencies": { "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", - "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", + "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", "dev": true, "peer": true, "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.2", + "@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.23.9", - "@babel/types": "^7.23.9", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/types": "^7.24.5", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1074,14 +1046,14 @@ } }, "node_modules/@babel/types": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", - "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", + "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", "dev": true, "peer": true, "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.1", + "@babel/helper-validator-identifier": "^7.24.5", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1129,9 +1101,9 @@ } }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz", - "integrity": "sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==", + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.42.0.tgz", + "integrity": "sha512-R1w57YlVA6+YE01wch3GPYn6bCsrOV3YW/5oGGE2tmX6JcL9Nr+b5IikrjMPF+v9CV3ay+obImEdsDhovhJrzw==", "dev": true, "dependencies": { "comment-parser": "1.4.1", @@ -1212,19 +1184,22 @@ } }, "node_modules/@eslint/js": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", - "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@finos/fdc3": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@finos/fdc3/-/fdc3-2.0.3.tgz", - "integrity": "sha512-sq+iGbjU6yRl7xHhp62nB1tV4biFaHZgUAInzPTJvzXWl9xjZMmXvvbeZW6WGZaCSvjQhJPSrmWs+4z2c73T+g==", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@finos/fdc3/-/fdc3-2.1.0.tgz", + "integrity": "sha512-GYEYNlWbB2iZhOGiQ6DSYQsXx8sqwyHw6gT0cJnzqGH5+fYxgWUias//2A8XDCrPKZH9Pml/wDDH3HFhvRsvdw==", + "dev": true, + "optionalDependencies": { + "@rollup/rollup-linux-x64-gnu": "4.14.1" + } }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", @@ -1276,9 +1251,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, "node_modules/@isaacs/cliui": { @@ -1432,6 +1407,13 @@ "node": ">=8" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "peer": true + }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -1508,6 +1490,22 @@ } } }, + "node_modules/@jest/core/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@jest/environment": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", @@ -1661,6 +1659,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@jest/reporters/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@jest/reporters/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -1674,6 +1688,22 @@ "node": "*" } }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", @@ -1779,565 +1809,75 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jimp/bmp": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.16.13.tgz", - "integrity": "sha512-9edAxu7N2FX7vzkdl5Jo1BbACfycUtBQX+XBMcHA2bk62P8R0otgkHg798frgAk/WxQIzwxqOH6wMiCwrlAzdQ==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, - "peer": true, "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13", - "bmp-js": "^0.1.0" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@jimp/core": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.16.13.tgz", - "integrity": "sha512-qXpA1tzTnlkTku9yqtuRtS/wVntvE6f3m3GNxdTdtmc+O+Wcg9Xo2ABPMh7Nc0AHbMKzwvwgB2JnjZmlmJEObg==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13", - "any-base": "^1.1.0", - "buffer": "^5.2.0", - "exif-parser": "^0.1.12", - "file-type": "^16.5.4", - "load-bmfont": "^1.3.1", - "mkdirp": "^0.5.1", - "phin": "^2.9.1", - "pixelmatch": "^4.0.2", - "tinycolor2": "^1.4.1" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@jimp/custom": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.16.13.tgz", - "integrity": "sha512-LTATglVUPGkPf15zX1wTMlZ0+AU7cGEGF6ekVF1crA8eHUWsGjrYTB+Ht4E3HTrCok8weQG+K01rJndCp/l4XA==", + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/core": "^0.16.13" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@jimp/gif": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.16.13.tgz", - "integrity": "sha512-yFAMZGv3o+YcjXilMWWwS/bv1iSqykFahFMSO169uVMtfQVfa90kt4/kDwrXNR6Q9i6VHpFiGZMlF2UnHClBvg==", + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, - "peer": true, "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13", - "gifwrap": "^0.9.2", - "omggif": "^1.0.9" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@jimp/jpeg": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.16.13.tgz", - "integrity": "sha512-BJHlDxzTlCqP2ThqP8J0eDrbBfod7npWCbJAcfkKqdQuFk0zBPaZ6KKaQKyKxmWJ87Z6ohANZoMKEbtvrwz1AA==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, - "peer": true, "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13", - "jpeg-js": "^0.4.2" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jimp/plugin-blit": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.16.13.tgz", - "integrity": "sha512-8Z1k96ZFxlhK2bgrY1JNWNwvaBeI/bciLM0yDOni2+aZwfIIiC7Y6PeWHTAvjHNjphz+XCt01WQmOYWCn0ML6g==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "peer": true, "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-blur": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.16.13.tgz", - "integrity": "sha512-PvLrfa8vkej3qinlebyhLpksJgCF5aiysDMSVhOZqwH5nQLLtDE9WYbnsofGw4r0VVpyw3H/ANCIzYTyCtP9Cg==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-circle": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.16.13.tgz", - "integrity": "sha512-RNave7EFgZrb5V5EpdvJGAEHMnDAJuwv05hKscNfIYxf0kR3KhViBTDy+MoTnMlIvaKFULfwIgaZWzyhuINMzA==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-color": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.16.13.tgz", - "integrity": "sha512-xW+9BtEvoIkkH/Wde9ql4nAFbYLkVINhpgAE7VcBUsuuB34WUbcBl/taOuUYQrPEFQJ4jfXiAJZ2H/rvKjCVnQ==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13", - "tinycolor2": "^1.4.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-contain": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.16.13.tgz", - "integrity": "sha512-QayTXw4tXMwU6q6acNTQrTTFTXpNRBe+MgTGMDU0lk+23PjlFCO/9sacflelG8lsp7vNHhAxFeHptDMAksEYzg==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-blit": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5", - "@jimp/plugin-scale": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-cover": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.16.13.tgz", - "integrity": "sha512-BSsP71GTNaqWRcvkbWuIVH+zK7b3TSNebbhDkFK0fVaUTzHuKMS/mgY4hDZIEVt7Rf5FjadAYtsujHN9w0iSYA==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-crop": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5", - "@jimp/plugin-scale": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-crop": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.16.13.tgz", - "integrity": "sha512-WEl2tPVYwzYL8OKme6Go2xqiWgKsgxlMwyHabdAU4tXaRwOCnOI7v4021gCcBb9zn/oWwguHuKHmK30Fw2Z/PA==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-displace": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.16.13.tgz", - "integrity": "sha512-qt9WKq8vWrcjySa9DyQ0x/RBMHQeiVjdVSY1SJsMjssPUf0pS74qorcuAkGi89biN3YoGUgPkpqECnAWnYwgGA==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-dither": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.16.13.tgz", - "integrity": "sha512-5/N3yJggbWQTlGZHQYJPmQXEwR52qaXjEzkp1yRBbtdaekXE3BG/suo0fqeoV/csf8ooI78sJzYmIrxNoWVtgQ==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-fisheye": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.13.tgz", - "integrity": "sha512-2rZmTdFbT/cF9lEZIkXCYO0TsT114Q27AX5IAo0Sju6jVQbvIk1dFUTnwLDadTo8wkJlFzGqMQ24Cs8cHWOliA==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-flip": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.16.13.tgz", - "integrity": "sha512-EmcgAA74FTc5u7Z+hUO/sRjWwfPPLuOQP5O64x5g4j0T12Bd29IgsYZxoutZo/rb3579+JNa/3wsSEmyVv1EpA==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-rotate": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-gaussian": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.13.tgz", - "integrity": "sha512-A1XKfGQD0iDdIiKqFYi8nZMv4dDVYdxbrmgR7y/CzUHhSYdcmoljLIIsZZM3Iks/Wa353W3vtvkWLuDbQbch1w==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-invert": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.16.13.tgz", - "integrity": "sha512-xFMrIn7czEZbdbMzZWuaZFnlLGJDVJ82y5vlsKsXRTG2kcxRsMPXvZRWHV57nSs1YFsNqXSbrC8B98n0E32njQ==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-mask": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.16.13.tgz", - "integrity": "sha512-wLRYKVBXql2GAYgt6FkTnCfE+q5NomM7Dlh0oIPGAoMBWDyTx0eYutRK6PlUrRK2yMHuroAJCglICTbxqGzowQ==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-normalize": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.16.13.tgz", - "integrity": "sha512-3tfad0n9soRna4IfW9NzQdQ2Z3ijkmo21DREHbE6CGcMIxOSvfRdSvf1qQPApxjTSo8LTU4MCi/fidx/NZ0GqQ==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-print": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.16.13.tgz", - "integrity": "sha512-0m6i3p01PGRkGAK9r53hDYrkyMq+tlhLOIbsSTmZyh6HLshUKlTB7eXskF5OpVd5ZUHoltlNc6R+ggvKIzxRFw==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13", - "load-bmfont": "^1.4.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-blit": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-resize": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.16.13.tgz", - "integrity": "sha512-qoqtN8LDknm3fJm9nuPygJv30O3vGhSBD2TxrsCnhtOsxKAqVPJtFVdGd/qVuZ8nqQANQmTlfqTiK9mVWQ7MiQ==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-rotate": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.16.13.tgz", - "integrity": "sha512-Ev+Jjmj1nHYw897z9C3R9dYsPv7S2/nxdgfFb/h8hOwK0Ovd1k/+yYS46A0uj/JCKK0pQk8wOslYBkPwdnLorw==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-blit": ">=0.3.5", - "@jimp/plugin-crop": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-scale": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.16.13.tgz", - "integrity": "sha512-05POQaEJVucjTiSGMoH68ZiELc7QqpIpuQlZ2JBbhCV+WCbPFUBcGSmE7w4Jd0E2GvCho/NoMODLwgcVGQA97A==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-shadow": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.16.13.tgz", - "integrity": "sha512-nmu5VSZ9hsB1JchTKhnnCY+paRBnwzSyK5fhkhtQHHoFD5ArBQ/5wU8y6tCr7k/GQhhGq1OrixsECeMjPoc8Zw==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-blur": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-threshold": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.16.13.tgz", - "integrity": "sha512-+3zArBH0OE3Rhjm4HyAokMsZlIq5gpQec33CncyoSwxtRBM2WAhUVmCUKuBo+Lr/2/4ISoY4BWpHKhMLDix6cA==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-color": ">=0.8.0", - "@jimp/plugin-resize": ">=0.8.0" - } - }, - "node_modules/@jimp/plugins": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.16.13.tgz", - "integrity": "sha512-CJLdqODEhEVs4MgWCxpWL5l95sCBlkuSLz65cxEm56X5akIsn4LOlwnKoSEZioYcZUBvHhCheH67AyPTudfnQQ==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/plugin-blit": "^0.16.13", - "@jimp/plugin-blur": "^0.16.13", - "@jimp/plugin-circle": "^0.16.13", - "@jimp/plugin-color": "^0.16.13", - "@jimp/plugin-contain": "^0.16.13", - "@jimp/plugin-cover": "^0.16.13", - "@jimp/plugin-crop": "^0.16.13", - "@jimp/plugin-displace": "^0.16.13", - "@jimp/plugin-dither": "^0.16.13", - "@jimp/plugin-fisheye": "^0.16.13", - "@jimp/plugin-flip": "^0.16.13", - "@jimp/plugin-gaussian": "^0.16.13", - "@jimp/plugin-invert": "^0.16.13", - "@jimp/plugin-mask": "^0.16.13", - "@jimp/plugin-normalize": "^0.16.13", - "@jimp/plugin-print": "^0.16.13", - "@jimp/plugin-resize": "^0.16.13", - "@jimp/plugin-rotate": "^0.16.13", - "@jimp/plugin-scale": "^0.16.13", - "@jimp/plugin-shadow": "^0.16.13", - "@jimp/plugin-threshold": "^0.16.13", - "timm": "^1.6.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/png": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.16.13.tgz", - "integrity": "sha512-8cGqINvbWJf1G0Her9zbq9I80roEX0A+U45xFby3tDWfzn+Zz8XKDF1Nv9VUwVx0N3zpcG1RPs9hfheG4Cq2kg==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13", - "pngjs": "^3.3.3" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/tiff": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.16.13.tgz", - "integrity": "sha512-oJY8d9u95SwW00VPHuCNxPap6Q1+E/xM5QThb9Hu+P6EGuu6lIeLaNBMmFZyblwFbwrH+WBOZlvIzDhi4Dm/6Q==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "utif": "^2.0.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/types": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.16.13.tgz", - "integrity": "sha512-mC0yVNUobFDjoYLg4hoUwzMKgNlxynzwt3cDXzumGvRJ7Kb8qQGOWJQjQFo5OxmGExqzPphkirdbBF88RVLBCg==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/bmp": "^0.16.13", - "@jimp/gif": "^0.16.13", - "@jimp/jpeg": "^0.16.13", - "@jimp/png": "^0.16.13", - "@jimp/tiff": "^0.16.13", - "timm": "^1.6.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/utils": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.16.13.tgz", - "integrity": "sha512-VyCpkZzFTHXtKgVO35iKN0sYR10psGpV6SkcSeV4oF7eSYlR8Bl6aQLCzVeFjvESF7mxTmIiI3/XrMobVrtxDA==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "regenerator-runtime": "^0.13.3" - } - }, - "node_modules/@jimp/utils/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true, - "peer": true - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" + "engines": { + "node": ">= 8" } }, "node_modules/@nodelib/fs.stat": { @@ -2362,133 +1902,6 @@ "node": ">= 8" } }, - "node_modules/@nut-tree/libnut": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@nut-tree/libnut/-/libnut-2.5.2.tgz", - "integrity": "sha512-IwlGgalGQjjCrbPq52HTLtsR6MRsGJ6c4GhgHmgwJPD/yBVCzsU5EA2rwDgjKSgK+jiLOpykySDZQ+owhyd1zw==", - "dev": true, - "peer": true, - "dependencies": { - "@nut-tree/libnut-darwin": "2.5.2", - "@nut-tree/libnut-linux": "2.5.2", - "@nut-tree/libnut-win32": "2.5.2" - }, - "engines": { - "node": ">=10.15.3" - } - }, - "node_modules/@nut-tree/libnut-darwin": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@nut-tree/libnut-darwin/-/libnut-darwin-2.5.2.tgz", - "integrity": "sha512-OKqCgpBbZj2oNQkLM+mM7TyiLBAQsRyN7Q5UXVKbyXnzcQTU1FZBJ1mLGvdfzzspajznL3Mkl08AQE+xYYbTMw==", - "cpu": [ - "x64", - "arm64" - ], - "dev": true, - "os": [ - "darwin", - "linux", - "win32" - ], - "peer": true, - "dependencies": { - "bindings": "1.5.0" - }, - "engines": { - "node": ">=10.15.3" - }, - "optionalDependencies": { - "@nut-tree/node-mac-permissions": "2.2.1" - } - }, - "node_modules/@nut-tree/libnut-linux": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@nut-tree/libnut-linux/-/libnut-linux-2.5.2.tgz", - "integrity": "sha512-uY6XDuNE8soYRUhV23g6KQN5BRR43MYNLyPnrrQa5Wtfgm6oW9kBRu6JtkWz6Fn6trAWrVAKnbPoTiEgHuGz9w==", - "cpu": [ - "x64", - "arm64" - ], - "dev": true, - "os": [ - "darwin", - "linux", - "win32" - ], - "peer": true, - "dependencies": { - "bindings": "1.5.0" - }, - "engines": { - "node": ">=10.15.3" - }, - "optionalDependencies": { - "@nut-tree/node-mac-permissions": "2.2.1" - } - }, - "node_modules/@nut-tree/libnut-win32": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@nut-tree/libnut-win32/-/libnut-win32-2.5.2.tgz", - "integrity": "sha512-cnNAQ0pzUMH7hrSjTWRiFfXid3sbSZ78jpv1rA154dlka3wqo6m1OtaX4PLVQK4irZl5REz74iPdHcjeTy9rtg==", - "cpu": [ - "x64", - "arm64" - ], - "dev": true, - "os": [ - "darwin", - "linux", - "win32" - ], - "peer": true, - "dependencies": { - "bindings": "1.5.0" - }, - "engines": { - "node": ">=10.15.3" - }, - "optionalDependencies": { - "@nut-tree/node-mac-permissions": "2.2.1" - } - }, - "node_modules/@nut-tree/node-mac-permissions": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@nut-tree/node-mac-permissions/-/node-mac-permissions-2.2.1.tgz", - "integrity": "sha512-yoijwCqt2yS9UFTv7THGUwZgy2D2TorN703QpYNOergbTJ6vEmeG379pIZDfBuvf56n24RMzKJVoSqr9WIq/Yw==", - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "dependencies": { - "bindings": "1.5.0", - "node-addon-api": "5.0.0" - } - }, - "node_modules/@nut-tree/nut-js": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@nut-tree/nut-js/-/nut-js-3.1.2.tgz", - "integrity": "sha512-hi7DBZz9O/t4goeQu3hKeauQbb0PcBmurScl3/t5L3I1pub3ibV24sft8KNSS3INKnGCj7I3Ma5iNHQ24g+95g==", - "cpu": [ - "x64", - "arm64" - ], - "dev": true, - "os": [ - "linux", - "darwin", - "win32" - ], - "peer": true, - "dependencies": { - "@nut-tree/libnut": "2.5.2", - "clipboardy": "2.3.0", - "jimp": "0.16.13", - "node-abort-controller": "2.0.0" - } - }, "node_modules/@openfin/automation-cli": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@openfin/automation-cli/-/automation-cli-1.2.0.tgz", @@ -2522,7 +1935,29 @@ "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "dev": true, "engines": { - "node": ">=16" + "node": ">=16" + } + }, + "node_modules/@openfin/automation-cli/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@openfin/automation-helpers": { @@ -2538,26 +1973,25 @@ "webdriver": "8.x" } }, - "node_modules/@openfin/automation-native": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@openfin/automation-native/-/automation-native-1.2.0.tgz", - "integrity": "sha512-AqhfmN4geVnmPr+BuojnDw34z4JkXGMCvoC4xl6uozATtr86O5SYHS+uGzpqymh2eFv9WOyBevA0RqeVzXMuqA==", - "dev": true, + "node_modules/@openfin/cloud-interop": { + "version": "0.36.12", + "resolved": "https://registry.npmjs.org/@openfin/cloud-interop/-/cloud-interop-0.36.12.tgz", + "integrity": "sha512-2fSQEiKjO+D8IhUFKa4pg16yKWj5xunwg0Hii/6A3NYYcaKtSqLiMUuUA9PVKUJ4f7dChBK1kuZdyJ1esYLZDg==", "dependencies": { - "@openfin/automation-helpers": "1.2.0" + "axios": "^1.6.2", + "mqtt": "^5.3.1" }, "peerDependencies": { - "@nut-tree/nut-js": "3.x" + "@openfin/core": "36.80.11" } }, "node_modules/@openfin/core": { - "version": "33.77.11", - "resolved": "https://registry.npmjs.org/@openfin/core/-/core-33.77.11.tgz", - "integrity": "sha512-iqoEezKzZBI9lhDCN3L7ia8TiQJcKnCblm04TfW8OvTV1cXYgii9/F4GBJmqPJ9FX1idudRtPMBQwurZbhFdaA==", + "version": "36.80.11", + "resolved": "https://registry.npmjs.org/@openfin/core/-/core-36.80.11.tgz", + "integrity": "sha512-C0dQROnoxk5p+4ZfSo1gzkzncHhd3jECX/2orQuBNgTu1QHkxfK4ecHONUsIhJO2M3inFP5BTkSmybf+znJbTg==", "bundleDependencies": [ "openfin-adapter" ], - "dev": true, "dependencies": { "@types/node": "^16.0.0", "lodash": "^4.17.21", @@ -2565,21 +1999,15 @@ "ws": "^7.3.0" } }, - "node_modules/@openfin/core/node_modules/@types/node": { - "version": "16.18.79", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.79.tgz", - "integrity": "sha512-Qd7jdLR5zmnIyMhfDrfPqN5tUCvreVpP3Qrf2oSM+F7SNzlb/MwHISGUkdFHtevfkPJ3iAGyeQI/jsbh9EStgQ==", - "dev": true - }, "node_modules/@openfin/excel": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@openfin/excel/-/excel-1.5.0.tgz", "integrity": "sha512-7mqq8KRn4oqOiIA5MqvzBwQtI6fQhlKuVyiLQnRuj6hPovDyQ93mRr972Nw/34Kn3J/Ovv11RGq5TB850eenEw==" }, "node_modules/@openfin/node-adapter": { - "version": "33.77.11", - "resolved": "https://registry.npmjs.org/@openfin/node-adapter/-/node-adapter-33.77.11.tgz", - "integrity": "sha512-fNEHgFKPlqGQhq5LoNDwsY+ixs+Z2CJzKnkyw1lgGofKuCwzJ1Mtm4JShrOVRFaQqU9bT7RMn+YlW3A1Uod7oA==", + "version": "36.80.11", + "resolved": "https://registry.npmjs.org/@openfin/node-adapter/-/node-adapter-36.80.11.tgz", + "integrity": "sha512-j8bjHwJnEp084UfIjxQ9WUTIvHC0c2Yt/m9lXYgBpQQrFTKhwERGgFDYBL0jgmXcT6ukLGkSl+KYAO7+v2zrNw==", "bundleDependencies": [ "openfin-adapter" ], @@ -2591,12 +2019,6 @@ "ws": "^7.3.0" } }, - "node_modules/@openfin/node-adapter/node_modules/@types/node": { - "version": "16.18.79", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.79.tgz", - "integrity": "sha512-Qd7jdLR5zmnIyMhfDrfPqN5tUCvreVpP3Qrf2oSM+F7SNzlb/MwHISGUkdFHtevfkPJ3iAGyeQI/jsbh9EStgQ==", - "dev": true - }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -2619,6 +2041,44 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@promptbook/utils": { + "version": "0.48.0-1", + "resolved": "https://registry.npmjs.org/@promptbook/utils/-/utils-0.48.0-1.tgz", + "integrity": "sha512-X2rOGwNIPVTifQ7ASP3ltEcr5F43TvbRJHQl2iWK6NNWaG8Li4Cdb4jOQu3mXdbtiNmjfP5VotX2W2P/uXV+dg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://buymeacoffee.com/hejny" + }, + { + "type": "github", + "url": "https://github.com/webgptorg/promptbook/blob/main/README.md#%EF%B8%8F-contributing" + } + ], + "peer": true, + "dependencies": { + "moment": "2.30.1", + "prettier": "2.8.1", + "spacetrim": "0.11.23" + } + }, + "node_modules/@promptbook/utils/node_modules/prettier": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", + "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", + "dev": true, + "peer": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/@puppeteer/browsers": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.9.1.tgz", @@ -2641,6 +2101,19 @@ "node": ">=16.3.0" } }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.1.tgz", + "integrity": "sha512-9Q7DGjZN+hTdJomaQ3Iub4m6VPu1r94bmK2z3UeWP3dGUecRC54tmVu9vKHTm1bOt3ASoYtEz6JSRLFzrysKlA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -2694,13 +2167,6 @@ "node": ">=14.16" } }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", - "dev": true, - "peer": true - }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", @@ -2709,9 +2175,9 @@ "peer": true }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", "dev": true, "peer": true }, @@ -2801,9 +2267,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.56.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", - "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==", + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", "dev": true, "dependencies": { "@types/estree": "*", @@ -2839,9 +2305,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.43", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", - "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", + "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", "dev": true, "dependencies": { "@types/node": "*", @@ -2928,13 +2394,9 @@ } }, "node_modules/@types/node": { - "version": "20.11.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.16.tgz", - "integrity": "sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } + "version": "16.18.97", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.97.tgz", + "integrity": "sha512-4muilE1Lbfn57unR+/nT9AFjWk0MtWi5muwCEJqnOvfRQDbSfLCUdN7vCIg8TYuaANfhLOV85ve+FNpiUsbSRg==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", @@ -2943,9 +2405,9 @@ "dev": true }, "node_modules/@types/qs": { - "version": "6.9.11", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", "dev": true }, "node_modules/@types/range-parser": { @@ -2954,10 +2416,24 @@ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "dev": true }, + "node_modules/@types/readable-stream": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.12.tgz", + "integrity": "sha512-SCaw+bs9o/HCX1eTa3glTcQgW1oPxof49mqP2Qikik3xzTimNv2M4p43BQHhBuf7CwOJdQW0s1SrWU3MZxz6lw==", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@types/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true, "peer": true }, @@ -2972,14 +2448,14 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", - "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, "dependencies": { "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" + "@types/node": "*", + "@types/send": "*" } }, "node_modules/@types/stack-utils": { @@ -3000,8 +2476,6 @@ "version": "8.5.10", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", - "dev": true, - "peer": true, "dependencies": { "@types/node": "*" } @@ -3035,34 +2509,34 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.8.0.tgz", + "integrity": "sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==", "dev": true, "peer": true, "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/type-utils": "7.8.0", + "@typescript-eslint/utils": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4", "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -3071,27 +2545,27 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==", "dev": true, "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -3100,17 +2574,17 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", + "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", "dev": true, "peer": true, "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -3118,26 +2592,26 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.8.0.tgz", + "integrity": "sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==", "dev": true, "peer": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/utils": "7.8.0", "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -3146,13 +2620,13 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", + "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", "dev": true, "peer": true, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -3160,23 +2634,23 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", + "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", "dev": true, "peer": true, "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -3189,43 +2663,43 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", "dev": true, "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "semver": "^7.6.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", + "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", "dev": true, "peer": true, "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "7.8.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -3239,15 +2713,15 @@ "dev": true }, "node_modules/@wdio/config": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.31.0.tgz", - "integrity": "sha512-/Ie+Qda9nE5C8TOvCunc8YgLdpkphH0djwwHDlmXzva+y3vpsCbQnA5OP6bodry193cX6timLHzsoc7n3puzDQ==", + "version": "8.36.1", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.36.1.tgz", + "integrity": "sha512-yCENnym0CrYuLKMJ3fv00WkjCR8QpPqVohGBkq5FvZOZpVJEpoG86Q8l4HtyRnd6ggMTKCA1vTQ/myhbPmZmaQ==", "dev": true, "peer": true, "dependencies": { "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.0", - "@wdio/utils": "8.31.0", + "@wdio/types": "8.36.1", + "@wdio/utils": "8.36.1", "decamelize": "^6.0.0", "deepmerge-ts": "^5.0.0", "glob": "^10.2.2", @@ -3316,16 +2790,16 @@ } }, "node_modules/@wdio/protocols": { - "version": "8.29.7", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.29.7.tgz", - "integrity": "sha512-9hhEePMLmI8fm9F2v4jlg9x4w4jEoZmY3vT6fXy90ne1DFaGWfy/a853nKEagQe/ZzxkN3/cpMBh8mryv9BVjw==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.32.0.tgz", + "integrity": "sha512-inLJRrtIGdTz/YPbcsvpSvPlYQFTVtF3OYBwAXhG2FiP1ZwE1CQNLP/xgRGye1ymdGCypGkexRqIx3KBGm801Q==", "dev": true, "peer": true }, "node_modules/@wdio/types": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.31.0.tgz", - "integrity": "sha512-uHAeJ5JMHCOkLXdwht+uS4QC7Pz3piEcEKGzsz6TJzvTgZLhxRlUfYkkxogbae05DZBHnRKfZD+XWH92cjgsIg==", + "version": "8.36.1", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.36.1.tgz", + "integrity": "sha512-kKtyJbypasKo/VQuJ6dTQQwFtHE9qoygjoCZjrQCLGraRSjOEiqZHPR0497wbeCvcgHIYyImbmcylqZNGUE0CQ==", "dev": true, "peer": true, "dependencies": { @@ -3335,16 +2809,26 @@ "node": "^16.13 || >=18" } }, + "node_modules/@wdio/types/node_modules/@types/node": { + "version": "20.12.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", + "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", + "dev": true, + "peer": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/@wdio/utils": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.31.0.tgz", - "integrity": "sha512-gCsNh1ejiwnjnyYBBz1SQs9kT81+QN2JjVgQellR18KS3K30u96+gutXtU9CefKF+48uYw7bJPyx5d4mL1908g==", + "version": "8.36.1", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.36.1.tgz", + "integrity": "sha512-xmgPHU11/o9n2FeRmDFkPRC0okiwA1i2xOcR2c3aSpuk99XkAm9RaMn/6u9LFaqsCpgaVxazcYEGSceO7U4hZA==", "dev": true, "peer": true, "dependencies": { "@puppeteer/browsers": "^1.6.0", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.0", + "@wdio/types": "8.36.1", "decamelize": "^6.0.0", "deepmerge-ts": "^5.1.0", "edgedriver": "^5.3.5", @@ -3361,9 +2845,9 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", @@ -3383,9 +2867,9 @@ "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { @@ -3406,15 +2890,15 @@ "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { @@ -3442,28 +2926,28 @@ "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -3471,24 +2955,24 @@ } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -3497,12 +2981,12 @@ } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -3562,6 +3046,17 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -3616,9 +3111,9 @@ } }, "node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, "peer": true, "dependencies": { @@ -3716,13 +3211,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/any-base": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", - "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==", - "dev": true, - "peer": true - }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -3746,27 +3234,6 @@ "resolved": "how-to/create-window", "link": true }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true - }, "node_modules/are-docs-informative": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", @@ -3822,15 +3289,16 @@ "dev": true }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -3850,6 +3318,27 @@ "node": ">=8" } }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flat": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", @@ -3887,6 +3376,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, "node_modules/array.prototype.tosorted": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", @@ -3924,12 +3426,12 @@ } }, "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "engines": { - "node": "*" + "node": ">=12" } }, "node_modules/ast-types": { @@ -3952,15 +3454,10 @@ "dev": true, "peer": true }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dev": true, - "peer": true, - "dependencies": { - "has-symbols": "^1.0.3" - } + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/automation-testing-create-window-js": { "resolved": "how-to/automation-testing/create-window-js", @@ -3975,10 +3472,13 @@ "link": true }, "node_modules/available-typed-arrays": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", - "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -3996,6 +3496,16 @@ "node": ">=4" } }, + "node_modules/axios": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/axobject-query": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", @@ -4142,11 +3652,61 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/bare-events": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz", + "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/bare-fs": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.0.tgz", + "integrity": "sha512-TNFqa1B4N99pds2a5NYHR15o0ZpdNKbAeKTE/+G6ED/UeOavv8RY3dr/Fu99HW3zU3pXpo2kDNO8Sjsm2esfOw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "bare-events": "^2.0.0", + "bare-path": "^2.0.0", + "bare-stream": "^1.0.0" + } + }, + "node_modules/bare-os": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.3.0.tgz", + "integrity": "sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/bare-path": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.2.tgz", + "integrity": "sha512-o7KSt4prEphWUHa3QUwCxUI00R86VdjiuxmJK0iNVDHYPGo+HsDaVCnqCmPbf/MiW1ok8F4p3m8RTHlWk8K2ig==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "bare-os": "^2.1.0" + } + }, + "node_modules/bare-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-1.0.0.tgz", + "integrity": "sha512-KhNUoDL40iP4gFaLSsoGE479t0jHijfYdIcxRn/XtezA2BaUD0NRf/JGRpsMq6dMNM+SrCrB0YSSo/5wBY4rOQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "streamx": "^2.16.1" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, "funding": [ { "type": "github", @@ -4160,13 +3720,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "peer": true + ] }, "node_modules/basic-ftp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz", - "integrity": "sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", "dev": true, "peer": true, "engines": { @@ -4183,38 +3742,51 @@ "node": ">=0.6" } }, - "node_modules/binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "peer": true, - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - }, "engines": { - "node": "*" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "peer": true, + "node_modules/bl": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/bl/-/bl-6.0.12.tgz", + "integrity": "sha512-EnEYHilP93oaOa2MnmNEjAcovPS3JlQZOyzGXi3EyEpPhm9qWvdDp7BmAVEVusGzp8LlwQK56Av+OkDoRjzE0w==", + "dependencies": { + "@types/readable-stream": "^4.0.0", + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^4.2.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "peer": true, + "node_modules/bl/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": { - "file-uri-to-path": "1.0.0" + "safe-buffer": "~5.2.0" } }, "node_modules/bluebird": { @@ -4224,13 +3796,6 @@ "dev": true, "peer": true }, - "node_modules/bmp-js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", - "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==", - "dev": true, - "peer": true - }, "node_modules/body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -4299,9 +3864,9 @@ "peer": true }, "node_modules/browserslist": { - "version": "4.22.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", - "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "dev": true, "funding": [ { @@ -4318,8 +3883,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001580", - "electron-to-chromium": "^1.4.648", + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -4354,10 +3919,9 @@ } }, "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -4372,30 +3936,19 @@ "url": "https://feross.org/support" } ], - "peer": true, "dependencies": { "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "ieee754": "^1.2.1" } }, "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, "peer": true, "engines": { - "node": ">=0.4.0" + "node": "*" } }, "node_modules/buffer-from": { @@ -4403,26 +3956,6 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, - "node_modules/buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.2.0" - } - }, "node_modules/builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", @@ -4484,29 +4017,17 @@ "node": ">=14.16" } }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/call-bind": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", - "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { + "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "set-function-length": "^1.2.0" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -4535,9 +4056,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001585", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001585.tgz", - "integrity": "sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q==", + "version": "1.0.30001617", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001617.tgz", + "integrity": "sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA==", "dev": true, "funding": [ { @@ -4555,34 +4076,19 @@ ] }, "node_modules/chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.0.tgz", + "integrity": "sha512-kDZ7MZyM6Q1DhR9jy7dalKohXQ2yrlXkk59CR52aRKxJrobmlBNqnFQxX9xOX8w+4mz8SYlKJa/7D7ddltFXCw==", "dev": true, - "peer": true, "dependencies": { - "traverse": ">=0.3.0 <0.4" + "assertion-error": "^2.0.1", + "check-error": "^2.0.0", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" }, "engines": { - "node": "*" + "node": ">=12" } }, "node_modules/chalk": { @@ -4612,15 +4118,12 @@ } }, "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", "dev": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, "engines": { - "node": "*" + "node": ">= 16" } }, "node_modules/chokidar": { @@ -4674,9 +4177,9 @@ } }, "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", + "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", "dev": true, "funding": [ { @@ -4689,9 +4192,9 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", "dev": true, "peer": true }, @@ -4716,21 +4219,6 @@ "node": ">=0.8.0" } }, - "node_modules/clipboardy": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", - "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", - "dev": true, - "peer": true, - "dependencies": { - "arch": "^2.1.1", - "execa": "^1.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -4848,13 +4336,24 @@ "node": ">=0.1.90" } }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz", + "integrity": "sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==", "dev": true, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/comment-parser": { @@ -4866,6 +4365,11 @@ "node": ">= 12.0.0" } }, + "node_modules/commist": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/commist/-/commist-3.2.0.tgz", + "integrity": "sha512-4PIMoPniho+LqXmpS5d3NuGYncG6XWlkBSVGiWycL22dd42OYdUGil2CWuzklaJoNxyxUSpO4MKIBU94viWNAw==" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -4907,6 +4411,10 @@ "resolved": "how-to/container-platform-starter", "link": true }, + "node_modules/container-starter-use-interop--cloud-interop": { + "resolved": "how-to/use-interop/cloud-interop", + "link": true + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -4936,9 +4444,9 @@ "peer": true }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true, "engines": { "node": ">= 0.6" @@ -4950,6 +4458,19 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, + "node_modules/core-js-compat": { + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz", + "integrity": "sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -5026,6 +4547,57 @@ "node": ">= 12" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/dateformat": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", @@ -5039,7 +4611,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -5095,9 +4666,9 @@ } }, "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", "dev": true, "peer": true, "peerDependencies": { @@ -5110,13 +4681,10 @@ } }, "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.1.tgz", + "integrity": "sha512-nwQCf6ne2gez3o1MxWifqkciwt0zhl0LO1/UwVu4uMBuPmflWM4oQ70XMqHqnBJA+nhzncaqL9HVL6KkHJ28lw==", "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, "engines": { "node": ">=6" } @@ -5167,18 +4735,20 @@ } }, "node_modules/define-data-property": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", - "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "dependencies": { + "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.2", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { @@ -5213,6 +4783,14 @@ "node": ">= 14" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -5296,13 +4874,6 @@ "node": ">=6.0.0" } }, - "node_modules/dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true, - "peer": true - }, "node_modules/duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", @@ -5337,18 +4908,18 @@ } }, "node_modules/edgedriver": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/edgedriver/-/edgedriver-5.3.9.tgz", - "integrity": "sha512-G0wNgFMFRDnFfKaXG2R6HiyVHqhKwdQ3EgoxW3wPlns2wKqem7F+HgkWBcevN7Vz0nN4AXtskID7/6jsYDXcKw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/edgedriver/-/edgedriver-5.4.0.tgz", + "integrity": "sha512-5gA79cSdvB/wucK809OTxKP3hsVyXVROE8DL9vFiReYbknghadioV5pFXRr2kA4MZKJMKNsNCsInmaLeyCf03A==", "dev": true, "hasInstallScript": true, "peer": true, "dependencies": { - "@wdio/logger": "^8.16.17", + "@wdio/logger": "^8.28.0", "decamelize": "^6.0.0", "edge-paths": "^3.0.5", "node-fetch": "^3.3.2", - "unzipper": "^0.10.14", + "unzipper": "^0.11.4", "which": "^4.0.0" }, "bin": { @@ -5388,9 +4959,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.659", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.659.tgz", - "integrity": "sha512-sRJ3nV3HowrYpBtPF9bASQV7OW49IgZC01Xiq43WfSE3RTCkK0/JidoCmR73Hyc1mN+l/H4Yqx0eNiomvExFZg==", + "version": "1.4.761", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.761.tgz", + "integrity": "sha512-PIbxpiJGx6Bb8dQaonNc6CGTRlVntdLg/2nMa1YhnrwYOORY9a3ZgGN0UQYE6lAcj/lkyduJN7BPt/JiY+jAQQ==", "dev": true }, "node_modules/emittery": { @@ -5432,9 +5003,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz", + "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -5445,9 +5016,9 @@ } }, "node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, "engines": { "node": ">=0.12" @@ -5457,9 +5028,9 @@ } }, "node_modules/envinfo": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz", - "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -5478,50 +5049,57 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -5530,6 +5108,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-errors": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", @@ -5540,43 +5130,58 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", - "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", "dev": true, "peer": true, "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", + "internal-slot": "^1.0.7", "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", - "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.2.tgz", + "integrity": "sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==", "dev": true }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -5657,17 +5262,28 @@ "source-map": "~0.6.1" } }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/eslint": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", - "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.3", - "@eslint/js": "8.53.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -5762,24 +5378,23 @@ } }, "node_modules/eslint-config-airbnb-typescript": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.1.0.tgz", - "integrity": "sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-18.0.0.tgz", + "integrity": "sha512-oc+Lxzgzsu8FQyFVa4QFaVKiitTYiiW3frB9KYW5OWdPrqFc7FzxgB20hP4cHMlr+MBzGcLl3jnCOVOydL9mIg==", "dev": true, "dependencies": { "eslint-config-airbnb-base": "^15.0.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.13.0 || ^6.0.0", - "@typescript-eslint/parser": "^5.0.0 || ^6.0.0", - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.3" + "@typescript-eslint/eslint-plugin": "^7.0.0", + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" } }, "node_modules/eslint-config-prettier": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", - "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -5809,9 +5424,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -5911,26 +5526,26 @@ "dev": true }, "node_modules/eslint-plugin-jsdoc": { - "version": "46.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.9.0.tgz", - "integrity": "sha512-UQuEtbqLNkPf5Nr/6PPRCtr9xypXY+g8y/Q7gPa0YK7eDhh0y2lWprXRnaYbW7ACgIUvpDKy9X2bZqxtGzBG9Q==", + "version": "48.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.3.tgz", + "integrity": "sha512-r9DMAmFs66VNvNqRLLjHejdnJtILrt3xGi+Qx0op0oRfFGVpOR1Hb3BC++MacseHx93d8SKYPhyrC9BS7Os2QA==", "dev": true, "dependencies": { - "@es-joy/jsdoccomment": "~0.41.0", + "@es-joy/jsdoccomment": "~0.42.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "esquery": "^1.5.0", "is-builtin-module": "^3.2.1", - "semver": "^7.5.4", - "spdx-expression-parse": "^3.0.1" + "semver": "^7.6.0", + "spdx-expression-parse": "^4.0.0" }, "engines": { - "node": ">=16" + "node": ">=18" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/eslint-plugin-jsx-a11y": { @@ -5989,23 +5604,24 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", - "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.5" + "synckit": "^0.8.6" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/prettier" + "url": "https://opencollective.com/eslint-plugin-prettier" }, "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", + "eslint-config-prettier": "*", "prettier": ">=3.0.0" }, "peerDependenciesMeta": { @@ -6030,28 +5646,30 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "version": "7.34.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", + "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", "dev": true, "peer": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", + "array-includes": "^3.1.7", + "array.prototype.findlast": "^1.2.4", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", + "es-iterator-helpers": "^1.0.17", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7", + "object.hasown": "^1.1.3", + "object.values": "^1.1.7", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", + "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" + "string.prototype.matchall": "^4.0.10" }, "engines": { "node": ">=4" @@ -6061,9 +5679,9 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, "peer": true, "engines": { @@ -6139,24 +5757,26 @@ } }, "node_modules/eslint-plugin-simple-import-sort": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz", - "integrity": "sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.0.tgz", + "integrity": "sha512-Y2fqAfC11TcG/WP3TrI1Gi3p3nc8XJyEOJYHyEPEGI/UAgNx6akxxlX74p7SbAQdLcgASKhj8M0GKvH3vq/+ig==", "dev": true, "peerDependencies": { "eslint": ">=5.0.0" } }, "node_modules/eslint-plugin-unicorn": { - "version": "49.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-49.0.0.tgz", - "integrity": "sha512-0fHEa/8Pih5cmzFW5L7xMEfUTvI9WKeQtjmKpTUmY+BiFCDxkxrTdnURJOHKykhtwIeyYsxnecbGvDCml++z4Q==", + "version": "52.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-52.0.0.tgz", + "integrity": "sha512-1Yzm7/m+0R4djH0tjDjfVei/ju2w3AzUGjG6q8JnuNIL5xIwsflyCooW5sfBvQp2pMYQFSWWCFONsjCax1EHng==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "@eslint-community/eslint-utils": "^4.4.0", - "ci-info": "^3.8.0", + "@eslint/eslintrc": "^2.1.4", + "ci-info": "^4.0.0", "clean-regexp": "^1.0.0", + "core-js-compat": "^3.34.0", "esquery": "^1.5.0", "indent-string": "^4.0.0", "is-builtin-module": "^3.2.1", @@ -6175,13 +5795,13 @@ "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" }, "peerDependencies": { - "eslint": ">=8.52.0" + "eslint": ">=8.56.0" } }, "node_modules/eslint-plugin-unused-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.0.0.tgz", - "integrity": "sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.2.0.tgz", + "integrity": "sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ==", "dev": true, "dependencies": { "eslint-rule-composer": "^0.3.0" @@ -6190,8 +5810,8 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^6.0.0", - "eslint": "^8.0.0" + "@typescript-eslint/eslint-plugin": "6 - 7", + "eslint": "8" }, "peerDependenciesMeta": { "@typescript-eslint/eslint-plugin": { @@ -6340,92 +5960,44 @@ "node": ">= 0.6" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, "engines": { "node": ">=0.8.x" } }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "peer": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "peer": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/execa/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/execa/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/execa/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "peer": true, "dependencies": { - "shebang-regex": "^1.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, "node_modules/execa/node_modules/signal-exit": { @@ -6435,26 +6007,6 @@ "dev": true, "peer": true }, - "node_modules/execa/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/exif-parser": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", - "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==", - "dev": true, - "peer": true - }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -6483,17 +6035,17 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -6524,30 +6076,6 @@ "node": ">= 0.10.0" } }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -6563,21 +6091,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -6674,6 +6187,18 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-unique-numbers": { + "version": "8.0.13", + "resolved": "https://registry.npmjs.org/fast-unique-numbers/-/fast-unique-numbers-8.0.13.tgz", + "integrity": "sha512-7OnTFAVPefgw2eBJ1xj2PGGR9FwYzSUso9decayHgCDX4sJkHLdcsYTytTg+tYv+wKF3U8gJuSBz2jJpQV4u/g==", + "dependencies": { + "@babel/runtime": "^7.23.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.1.0" + } + }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -6748,31 +6273,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/file-type": { - "version": "16.5.4", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", - "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", - "dev": true, - "peer": true, - "dependencies": { - "readable-web-to-node-stream": "^3.0.0", - "strtok3": "^6.2.4", - "token-types": "^4.1.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "peer": true - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -6858,11 +6358,30 @@ } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -6888,6 +6407,19 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/form-data-encoder": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", @@ -6930,9 +6462,9 @@ } }, "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -7081,20 +6613,20 @@ } }, "node_modules/geckodriver": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-4.3.2.tgz", - "integrity": "sha512-TNOoy+ULXJWI5XOq7CXD3PAD9TJa4NjMe7nKUXjlIsf+vezuaRsFgPwcgYdEem1K7106wabYsqr7Kqn51g0sJg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-4.4.0.tgz", + "integrity": "sha512-Y/Np2VkAhBkJoFAIY3pKH3rICUcR5rH9VD6EHwh0CqUIh6Opzr/NFwfcQenYfbRT/659R15/35LpA1s6h9wPPg==", "dev": true, "hasInstallScript": true, "peer": true, "dependencies": { "@wdio/logger": "^8.28.0", "decamelize": "^6.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.4", "node-fetch": "^3.3.2", - "tar-fs": "^3.0.4", - "unzipper": "^0.10.14", + "tar-fs": "^3.0.6", + "unzipper": "^0.11.4", "which": "^4.0.0" }, "bin": { @@ -7114,6 +6646,21 @@ "node": ">=16" } }, + "node_modules/geckodriver/node_modules/tar-fs": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", + "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", + "dev": true, + "peer": true, + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^2.1.1", + "bare-path": "^2.1.0" + } + }, "node_modules/geckodriver/node_modules/which": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", @@ -7188,9 +6735,9 @@ } }, "node_modules/get-port": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.0.0.tgz", - "integrity": "sha512-mDHFgApoQd+azgMdwylJrv2DX47ywGq1i5VFJE7fZ0dttNq3iQMfsU4IvEgBHojA3KqEudyu7Vq+oN8kNaNkWw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.1.0.tgz", + "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==", "dev": true, "peer": true, "engines": { @@ -7213,26 +6760,27 @@ } }, "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "peer": true, - "dependencies": { - "pump": "^3.0.0" - }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/get-symbol-description": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.1.tgz", - "integrity": "sha512-KmuibvwbWaM4BHcBRYwJfZ1JxyJeBwB8ct9YYu67SvYdbEIlcQ2e56dHxfbobqW38GXo8/zDFqJeGtHiVbWyQw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "dependencies": { "call-bind": "^1.0.5", - "es-errors": "^1.3.0" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -7242,88 +6790,42 @@ } }, "node_modules/get-uri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", - "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", + "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", "dev": true, "peer": true, "dependencies": { "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.0", + "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4", - "fs-extra": "^8.1.0" + "fs-extra": "^11.2.0" }, "engines": { "node": ">= 14" } }, "node_modules/get-uri/node_modules/data-uri-to-buffer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", - "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", "dev": true, "peer": true, "engines": { "node": ">= 14" } }, - "node_modules/get-uri/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/get-uri/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/get-uri/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/gifwrap": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.9.4.tgz", - "integrity": "sha512-MDMwbhASQuVeD4JKd1fKgNgCRL3fGqMM4WaqpNhWO0JiMOAjbQdumbs4BbBZEy9/M00EHEjKN3HieVhCUlwjeQ==", - "dev": true, - "peer": true, - "dependencies": { - "image-q": "^4.0.0", - "omggif": "^1.0.10" - } - }, "node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -7353,17 +6855,6 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "node_modules/global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "peer": true, - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, "node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -7380,12 +6871,13 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -7453,19 +6945,6 @@ "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/got/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -7506,21 +6985,21 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, "engines": { "node": ">= 0.4" @@ -7557,9 +7036,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { "function-bind": "^1.1.2" @@ -7578,6 +7057,11 @@ "he": "bin/he" } }, + "node_modules/help-me": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", + "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==" + }, "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -7615,9 +7099,9 @@ } }, "node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "peer": true, "dependencies": { @@ -7643,9 +7127,9 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dev": true, "peer": true, "dependencies": { @@ -7682,7 +7166,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, "funding": [ { "type": "github", @@ -7696,8 +7179,7 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "peer": true + ] }, "node_modules/ignore": { "version": "5.3.1", @@ -7708,23 +7190,6 @@ "node": ">= 4" } }, - "node_modules/image-q": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/image-q/-/image-q-4.0.0.tgz", - "integrity": "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "16.9.1" - } - }, - "node_modules/image-q/node_modules/@types/node": { - "version": "16.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz", - "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==", - "dev": true, - "peer": true - }, "node_modules/immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", @@ -7767,9 +7232,9 @@ } }, "node_modules/import-meta-resolve": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz", - "integrity": "sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", "dev": true, "peer": true, "funding": { @@ -7811,9 +7276,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -7846,12 +7311,19 @@ "node": ">=10.13.0" } }, - "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", "dev": true, - "peer": true + "peer": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } }, "node_modules/ipaddr.js": { "version": "1.9.1", @@ -7980,13 +7452,13 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -7995,20 +7467,19 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "peer": true, - "bin": { - "is-docker": "cli.js" + "dependencies": { + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-extglob": { @@ -8042,13 +7513,6 @@ "node": ">=8" } }, - "node_modules/is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", - "dev": true, - "peer": true - }, "node_modules/is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", @@ -8088,19 +7552,22 @@ } }, "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "peer": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "engines": { "node": ">= 0.4" @@ -8181,35 +7648,44 @@ } }, "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "peer": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-string": { @@ -8271,11 +7747,14 @@ } }, "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "peer": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8293,37 +7772,26 @@ } }, "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "peer": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/isexe": { "version": "2.0.0", @@ -8351,15 +7819,15 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", - "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", "dev": true, "peer": true, "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" }, @@ -8397,10 +7865,20 @@ "node": ">=10" } }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "peer": true, "dependencies": { @@ -8458,9 +7936,9 @@ } }, "node_modules/jasmine-core": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.1.1.tgz", - "integrity": "sha512-UrzO3fL7nnxlQXlvTynNAenL+21oUQRlzqQFsA2U11ryb4+NLOCOePZ70PTojEaUKhiFugh7dG0Q+I58xlPdWg==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.1.2.tgz", + "integrity": "sha512-2oIUMGn00FdUiqz6epiiJr7xcFyNYj3rDcfmnzfkBnHyBQ3cBQUs4mmyGsOb7TTLb9kxk7dBcmEmqhDKkBoDyA==", "dev": true, "peer": true }, @@ -8516,76 +7994,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-changed-files/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "peer": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/jest-changed-files/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-changed-files/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-changed-files/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "peer": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "peer": true - }, "node_modules/jest-circus": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", @@ -8709,6 +8117,22 @@ "concat-map": "0.0.1" } }, + "node_modules/jest-config/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-config/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -8843,6 +8267,38 @@ "fsevents": "^2.3.2" } }, + "node_modules/jest-haste-map/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/jest-leak-detector": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", @@ -9005,6 +8461,59 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-runner/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/jest-runtime": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", @@ -9132,16 +8641,32 @@ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "peer": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "peer": true, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, "node_modules/jest-validate": { @@ -9196,19 +8721,17 @@ } }, "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, - "peer": true, "dependencies": { "@types/node": "*", - "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 10.13.0" } }, "node_modules/jest-worker/node_modules/supports-color": { @@ -9216,7 +8739,6 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -9227,34 +8749,15 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jimp": { - "version": "0.16.13", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.16.13.tgz", - "integrity": "sha512-Bxz8q7V4rnCky9A0ktTNGA9SkNFVWRHodddI/DaAWZJzF7sVUlFYKQ60y9JGqrKpi48ECA/TnfMzzc5C70VByA==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/custom": "^0.16.13", - "@jimp/plugins": "^0.16.13", - "@jimp/types": "^0.16.13", - "regenerator-runtime": "^0.13.3" + "node_modules/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" } }, - "node_modules/jimp/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true, - "peer": true - }, - "node_modules/jpeg-js": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", - "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==", - "dev": true, - "peer": true - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -9273,6 +8776,13 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true, + "peer": true + }, "node_modules/jsdoc-type-pratt-parser": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", @@ -9354,6 +8864,15 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -9486,36 +9005,12 @@ "dev": true }, "node_modules/linkify-it": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", - "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", - "dev": true, - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", - "dev": true, - "peer": true - }, - "node_modules/load-bmfont": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", - "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", "dev": true, - "peer": true, "dependencies": { - "buffer-equal": "0.0.1", - "mime": "^1.3.4", - "parse-bmfont-ascii": "^1.0.3", - "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.4", - "phin": "^2.9.1", - "xhr": "^2.0.1", - "xtend": "^4.0.0" + "uc.micro": "^2.0.0" } }, "node_modules/loader-runner": { @@ -9528,13 +9023,23 @@ } }, "node_modules/locate-app": { - "version": "2.2.16", - "resolved": "https://registry.npmjs.org/locate-app/-/locate-app-2.2.16.tgz", - "integrity": "sha512-sow/QqZf7vaW2upRxPrpv7CVPmHXIyiR3oMJ8NXlul6e9mKasLsbExBueBhelxvjWtl9xXKER8OUndycArGQxw==", + "version": "2.4.13", + "resolved": "https://registry.npmjs.org/locate-app/-/locate-app-2.4.13.tgz", + "integrity": "sha512-hnhghqQKQYQP7v9Ls3af03RE23xtJduXmKRnIgZgB1lsqMhdUFV008ZltWHt7b3HxvWF1vhz4MkCfEKPoCjTIg==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://buymeacoffee.com/hejny" + }, + { + "type": "github", + "url": "https://github.com/hejny/locate-app/blob/main/README.md#%EF%B8%8F-contributing" + } + ], "peer": true, "dependencies": { - "n12": "1.8.19", + "@promptbook/utils": "0.48.0-1", "type-fest": "2.13.0", "userhome": "1.0.0" } @@ -9570,8 +9075,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.isempty": { "version": "4.4.0", @@ -9661,9 +9165,9 @@ } }, "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.0.tgz", + "integrity": "sha512-qKl+FrLXUhFuHUoDJG7f8P8gEMHq9NFS0c6ghXG1J0rldmZFQZoNVv/vyirE9qwCIhWZDsvEFd1sbFu3GvRQFg==", "dev": true, "dependencies": { "get-func-name": "^2.0.1" @@ -9683,10 +9187,9 @@ } }, "node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "dev": true, + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "engines": { "node": "14 || >=16.14" } @@ -9725,79 +9228,79 @@ } }, "node_modules/markdown-it": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", - "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dev": true, "dependencies": { "argparse": "^2.0.1", - "entities": "~3.0.1", - "linkify-it": "^4.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" }, "bin": { - "markdown-it": "bin/markdown-it.js" + "markdown-it": "bin/markdown-it.mjs" } }, "node_modules/markdownlint": { - "version": "0.31.1", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.31.1.tgz", - "integrity": "sha512-CKMR2hgcIBrYlIUccDCOvi966PZ0kJExDrUi1R+oF9PvqQmCrTqjOsgIvf2403OmJ+CWomuzDoylr6KbuMyvHA==", + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.34.0.tgz", + "integrity": "sha512-qwGyuyKwjkEMOJ10XN6OTKNOVYvOIi35RNvDLNxTof5s8UmyGHlCdpngRHoRGNvQVGuxO3BJ7uNSgdeX166WXw==", "dev": true, "dependencies": { - "markdown-it": "13.0.1", - "markdownlint-micromark": "0.1.7" + "markdown-it": "14.1.0", + "markdownlint-micromark": "0.1.9" }, "engines": { - "node": ">=16" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" } }, "node_modules/markdownlint-cli": { - "version": "0.37.0", - "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.37.0.tgz", - "integrity": "sha512-hNKAc0bWBBuVhJbSWbUhRzavstiB4o1jh3JeSpwC4/dt6eJ54lRfYHRxVdzVp4qGWBKbeE6Pg490PFEfrKjqSg==", + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.40.0.tgz", + "integrity": "sha512-JXhI3dRQcaqwiFYpPz6VJ7aKYheD53GmTz9y4D/d0F1MbZDGOp9pqKlbOfUX/pHP/iAoeiE4wYRmk8/kjLakxA==", "dev": true, "dependencies": { - "commander": "~11.0.0", + "commander": "~12.0.0", "get-stdin": "~9.0.0", - "glob": "~10.3.4", - "ignore": "~5.2.4", + "glob": "~10.3.12", + "ignore": "~5.3.1", "js-yaml": "^4.1.0", - "jsonc-parser": "~3.2.0", - "markdownlint": "~0.31.1", - "minimatch": "~9.0.3", - "run-con": "~1.3.2" + "jsonc-parser": "~3.2.1", + "jsonpointer": "5.0.1", + "markdownlint": "~0.34.0", + "minimatch": "~9.0.4", + "run-con": "~1.3.2", + "toml": "~3.0.0" }, "bin": { "markdownlint": "markdownlint.js" }, "engines": { - "node": ">=16" - } - }, - "node_modules/markdownlint-cli/node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" + "node": ">=18" } }, "node_modules/markdownlint-micromark": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.7.tgz", - "integrity": "sha512-BbRPTC72fl5vlSKv37v/xIENSRDYL/7X/XoFzZ740FGEbs9vZerLrIkFRY0rv7slQKxDczToYuMmqQFN61fi4Q==", + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.9.tgz", + "integrity": "sha512-5hVs/DzAFa8XqYosbEAEg6ok6MF2smDj89ztn9pKkCtdKHVdPQuGMH7frFfYL9mLkvfFe4pTyAMffLbjf3/EyA==", "dev": true, "engines": { - "node": ">=16" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" } }, "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", "dev": true }, "node_modules/media-typer": { @@ -9905,16 +9408,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", - "dev": true, - "peer": true, - "dependencies": { - "dom-walk": "^0.1.0" - } - }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -9925,9 +9418,9 @@ } }, "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -9948,9 +9441,9 @@ } }, "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.0.tgz", + "integrity": "sha512-oGZRv2OT1lO2UF1zUcwdTb3wqUwI0kBGTgt/T7OdSj6M6N5m3o5uPf0AIW6lVxGGoiWUR7e2AwTE+xiwK8WQig==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -9975,9 +9468,9 @@ "peer": true }, "node_modules/mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", + "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", "dev": true, "peer": true, "dependencies": { @@ -9988,13 +9481,12 @@ "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.2.0", + "glob": "8.1.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -10009,10 +9501,6 @@ }, "engines": { "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" } }, "node_modules/mocha/node_modules/cliui": { @@ -10035,50 +9523,25 @@ "peer": true }, "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", @@ -10099,6 +9562,16 @@ "dev": true, "peer": true }, + "node_modules/mocha/node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/mocha/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -10235,11 +9708,132 @@ "node": ">=12" } }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "dev": true, + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/mqtt": { + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-5.5.5.tgz", + "integrity": "sha512-vWglkVfumjnI53/tV+RMWbDuQL4ldGqc/wFX2EHkMy9sSV7Q0TQK+HcAtmg2QupI8DpcyNpoe2mNhaO/H4ILUg==", + "dependencies": { + "@types/readable-stream": "^4.0.5", + "@types/ws": "^8.5.9", + "commist": "^3.2.0", + "concat-stream": "^2.0.0", + "debug": "^4.3.4", + "help-me": "^5.0.0", + "lru-cache": "^10.0.1", + "minimist": "^1.2.8", + "mqtt": "^5.2.0", + "mqtt-packet": "^9.0.0", + "number-allocator": "^1.0.14", + "readable-stream": "^4.4.2", + "reinterval": "^1.1.0", + "rfdc": "^1.3.0", + "split2": "^4.2.0", + "worker-timers": "^7.1.4", + "ws": "^8.14.2" + }, + "bin": { + "mqtt": "build/bin/mqtt.js", + "mqtt_pub": "build/bin/pub.js", + "mqtt_sub": "build/bin/sub.js" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/mqtt-packet": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-9.0.0.tgz", + "integrity": "sha512-8v+HkX+fwbodsWAZIZTI074XIoxVBOmPeggQuDFCGg1SqNcC+uoRMWu7J6QlJPqIUIJXmjNYYHxBBLr1Y/Df4w==", + "dependencies": { + "bl": "^6.0.8", + "debug": "^4.3.4", + "process-nextick-args": "^2.0.1" + } + }, + "node_modules/mqtt/node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/mqtt/node_modules/concat-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/mqtt/node_modules/readable-stream": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/mqtt/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/mqtt/node_modules/ws": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/multer": { "version": "1.4.5-lts.1", @@ -10258,26 +9852,6 @@ "node": ">= 6.0.0" } }, - "node_modules/n12": { - "version": "1.8.19", - "resolved": "https://registry.npmjs.org/n12/-/n12-1.8.19.tgz", - "integrity": "sha512-Uew6BYwW/TQ/60SgeOC+q7C+Bgr2sieVbyCZ4xVctXl5ddjJ6j9sVs+i+xbgVBhTym5q7ke2tss7ZdIYjVytOw==", - "dev": true, - "peer": true - }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "peer": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -10309,28 +9883,6 @@ "node": ">= 0.4.0" } }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true, - "peer": true - }, - "node_modules/node-abort-controller": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-2.0.0.tgz", - "integrity": "sha512-L8RfEgjBTHAISTuagw51PprVAqNZoG6KSB6LQ6H1bskMVkFs5E71IyjauLBv3XbuomJlguWF/VnRHdJ1gqiAqA==", - "dev": true, - "peer": true - }, - "node_modules/node-addon-api": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz", - "integrity": "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", @@ -10415,9 +9967,9 @@ } }, "node_modules/normalize-url": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", - "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", + "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", "dev": true, "peer": true, "engines": { @@ -10428,26 +9980,25 @@ } }, "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "peer": true, "dependencies": { - "path-key": "^2.0.0" + "path-key": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" + "node_modules/number-allocator": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/number-allocator/-/number-allocator-1.0.14.tgz", + "integrity": "sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA==", + "dependencies": { + "debug": "^4.3.1", + "js-sdsl": "4.3.0" } }, "node_modules/object-assign": { @@ -10495,29 +10046,30 @@ } }, "node_modules/object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -10527,28 +10079,32 @@ } }, "node_modules/object.hasown": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", "dev": true, "peer": true, "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -10557,13 +10113,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/omggif": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", - "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==", - "dev": true, - "peer": true - }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -10611,17 +10160,17 @@ } }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -10637,16 +10186,6 @@ "node": ">=12.20" } }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -10707,14 +10246,13 @@ } }, "node_modules/pac-resolver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz", - "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", "dev": true, "peer": true, "dependencies": { "degenerator": "^5.0.0", - "ip": "^1.1.8", "netmask": "^2.0.2" }, "engines": { @@ -10739,52 +10277,6 @@ "node": ">=6" } }, - "node_modules/parse-bmfont-ascii": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", - "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==", - "dev": true, - "peer": true - }, - "node_modules/parse-bmfont-binary": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", - "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==", - "dev": true, - "peer": true - }, - "node_modules/parse-bmfont-xml": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", - "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", - "dev": true, - "peer": true, - "dependencies": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.4.5" - } - }, - "node_modules/parse-bmfont-xml/node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "dev": true, - "peer": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/parse-headers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", - "dev": true, - "peer": true - }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -10846,12 +10338,12 @@ "dev": true }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", "dev": true, "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { @@ -10878,26 +10370,12 @@ } }, "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/peek-readable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", - "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true, - "peer": true, "engines": { - "node": ">=8" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "node": ">= 14.16" } }, "node_modules/pend": { @@ -10907,13 +10385,6 @@ "dev": true, "peer": true }, - "node_modules/phin": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", - "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==", - "dev": true, - "peer": true - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -10942,19 +10413,6 @@ "node": ">= 6" } }, - "node_modules/pixelmatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", - "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==", - "dev": true, - "peer": true, - "dependencies": { - "pngjs": "^3.0.0" - }, - "bin": { - "pixelmatch": "bin/pixelmatch" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -11028,14 +10486,13 @@ "node": ">=4" } }, - "node_modules/pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, - "peer": true, "engines": { - "node": ">=4.0.0" + "node": ">= 0.4" } }, "node_modules/prelude-ls": { @@ -11048,9 +10505,9 @@ } }, "node_modules/prettier": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz", - "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -11103,9 +10560,9 @@ } }, "node_modules/pretty-format/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, "peer": true }, @@ -11113,8 +10570,6 @@ "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "peer": true, "engines": { "node": ">= 0.6.0" } @@ -11205,9 +10660,7 @@ "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true, - "peer": true + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "node_modules/pump": { "version": "3.0.0", @@ -11229,10 +10682,19 @@ "node": ">=6" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, "funding": [ { @@ -11456,48 +10918,11 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/readable-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, "node_modules/readable-stream/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "node_modules/readable-web-to-node-stream": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", - "dev": true, - "peer": true, - "dependencies": { - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -11524,17 +10949,17 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz", - "integrity": "sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0", - "get-intrinsic": "^1.2.3", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" }, @@ -11548,9 +10973,7 @@ "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true, - "peer": true + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regexp-tree": { "version": "0.1.27", @@ -11562,14 +10985,15 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -11599,10 +11023,15 @@ "jsesc": "bin/jsesc" } }, + "node_modules/reinterval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reinterval/-/reinterval-1.1.0.tgz", + "integrity": "sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ==" + }, "node_modules/replace-in-file": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-7.0.2.tgz", - "integrity": "sha512-tPG+Qmqf+x2Rf1WVdb/9B5tFIf6KJ5hs3fgxh1OTzPRUugPPvyAva7NvCJtnSpmyq6r+ABYcuUOqZkm6yzGSUw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-7.1.0.tgz", + "integrity": "sha512-1uZmJ78WtqNYCSuPC9IWbweXkGxPOtk2rKuar8diTw7naVIQZiE3Tm8ACx2PCMXDtVH6N+XxwaRY2qZ2xHPqXw==", "dev": true, "dependencies": { "chalk": "^4.1.2", @@ -11746,6 +11175,11 @@ "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==" + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -11849,13 +11283,13 @@ "peer": true }, "node_modules/safe-array-concat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", - "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -11866,11 +11300,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -11934,24 +11373,24 @@ } }, "node_modules/selenium-webdriver": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.17.0.tgz", - "integrity": "sha512-e2E+2XBlGepzwgFbyQfSwo9Cbj6G5fFfs9MzAS00nC99EewmcS2rwn2MwtgfP7I5p1e7DYv4HQJXtWedsu6DvA==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.20.0.tgz", + "integrity": "sha512-s/G44lGQ1xB3tmtX6NNPomlkpL6CxLdmAvp/AGWWwi4qv5Te1+qji7tPSyr6gyuoPpdYiof1rKnWe3luy0MrYA==", "dev": true, "peer": true, "dependencies": { "jszip": "^3.10.1", - "tmp": "^0.2.1", - "ws": ">=8.14.2" + "tmp": "^0.2.3", + "ws": ">=8.16.0" }, "engines": { "node": ">= 14.20.0" } }, "node_modules/selenium-webdriver/node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", "dev": true, "peer": true, "engines": { @@ -11971,13 +11410,10 @@ } }, "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -11985,18 +11421,6 @@ "node": ">=10" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -12043,11 +11467,10 @@ "dev": true }, "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, - "peer": true, "dependencies": { "randombytes": "^2.1.0" } @@ -12068,31 +11491,32 @@ } }, "node_modules/set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "dependencies": { - "define-data-property": "^1.1.2", + "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -12148,12 +11572,12 @@ } }, "node_modules/side-channel": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", - "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" @@ -12206,28 +11630,28 @@ } }, "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "dev": true, "peer": true, "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, "node_modules/socks-proxy-agent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz", + "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==", "dev": true, "peer": true, "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.1", "debug": "^4.3.4", "socks": "^2.7.1" }, @@ -12235,42 +11659,35 @@ "node": ">= 14" } }, - "node_modules/socks/node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true, - "peer": true - }, "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-loader": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.2.tgz", - "integrity": "sha512-oYwAqCuL0OZhBoSgmdrLa7mv9MjommVMiQIWgcztf+eS4+8BfcUee6nenFnDhKOhzAVnk5gpZdfnz1iiBv+5sg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", "dev": true, "dependencies": { "iconv-lite": "^0.6.3", "source-map-js": "^1.0.2" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", @@ -12293,16 +11710,41 @@ } }, "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "peer": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spacetrim": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/spacetrim/-/spacetrim-0.11.23.tgz", + "integrity": "sha512-oC94GKa/6/0MdCuvoinoKYg4ePU6NFV/kXwObmGdshS2ui89EzEFrRqYDcAYuZ/iwq6oe5qnK6lxqk+XJT7SqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://buymeacoffee.com/hejny" + }, + { + "type": "github", + "url": "https://github.com/hejny/spacetrim/blob/main/README.md#%EF%B8%8F-contributing" + } + ], + "peer": true + }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -12313,16 +11755,26 @@ "spdx-license-ids": "^3.0.0" } }, + "node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/spdx-exceptions": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz", - "integrity": "sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", "dev": true, "dependencies": { "spdx-exceptions": "^2.1.0", @@ -12330,25 +11782,23 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", "dev": true }, "node_modules/split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "dev": true, - "peer": true, "engines": { "node": ">= 10.x" } }, "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "dev": true, "peer": true }, @@ -12393,14 +11843,17 @@ } }, "node_modules/streamx": { - "version": "2.15.7", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.7.tgz", - "integrity": "sha512-NPEKS5+yjyo597eafGbKW5ujh7Sm6lDLHZQd/lRSz6S0VarpADBJItqfB4PnwpS+472oob1GX5cCY9vzfJpHUA==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz", + "integrity": "sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==", "dev": true, "peer": true, "dependencies": { "fast-fifo": "^1.1.0", "queue-tick": "^1.0.1" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" } }, "node_modules/string_decoder": { @@ -12496,35 +11949,42 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", - "side-channel": "^1.0.4" + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -12534,28 +11994,31 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12595,16 +12058,6 @@ "node": ">=4" } }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -12639,24 +12092,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strtok3": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", - "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", - "dev": true, - "peer": true, - "dependencies": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^4.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -12746,9 +12181,9 @@ } }, "node_modules/terser": { - "version": "5.27.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", - "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", + "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -12797,60 +12232,12 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "node_modules/terser/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -12924,31 +12311,14 @@ "dev": true, "peer": true }, - "node_modules/timm": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", - "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==", - "dev": true, - "peer": true - }, - "node_modules/tinycolor2": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", - "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", - "dev": true, - "peer": true - }, "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "dev": true, "peer": true, - "dependencies": { - "rimraf": "^3.0.0" - }, "engines": { - "node": ">=8.17.0" + "node": ">=14.14" } }, "node_modules/tmpl": { @@ -12989,38 +12359,16 @@ "node": ">=0.6" } }, - "node_modules/token-types": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", - "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", - "dev": true, - "peer": true, - "dependencies": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", - "dev": true, - "peer": true, - "engines": { - "node": "*" - } + "node_modules/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", + "dev": true }, "node_modules/ts-api-utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", - "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, "peer": true, "engines": { @@ -13107,15 +12455,6 @@ "webpack": "^5.0.0" } }, - "node_modules/ts-loader/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -13185,8 +12524,7 @@ "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/type-check": { "version": "0.4.0", @@ -13205,6 +12543,7 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "peer": true, "engines": { "node": ">=4" } @@ -13234,12 +12573,12 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz", - "integrity": "sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-typed-array": "^1.1.13" }, @@ -13248,15 +12587,16 @@ } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -13266,16 +12606,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -13285,14 +12626,20 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -13304,9 +12651,9 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -13317,9 +12664,9 @@ } }, "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", "dev": true }, "node_modules/unbox-primitive": { @@ -13348,6 +12695,31 @@ "through": "^2.3.8" } }, + "node_modules/unbzip2-stream/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", @@ -13373,28 +12745,23 @@ } }, "node_modules/unzipper": { - "version": "0.10.14", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz", - "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.11.5.tgz", + "integrity": "sha512-lpWMMTvoTTETidcvqsHL/OSdX8fy4/nAe1vOa/WESbscApEamd1gvzn2XteNYvAnTGous8BlCkWxxyv3moxfCA==", "dev": true, "peer": true, "dependencies": { "big-integer": "^1.6.17", - "binary": "~0.3.0", "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", "duplexer2": "~0.1.4", "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" + "graceful-fs": "^4.2.2" } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz", + "integrity": "sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==", "dev": true, "funding": [ { @@ -13411,7 +12778,7 @@ } ], "dependencies": { - "escalade": "^3.1.1", + "escalade": "^3.1.2", "picocolors": "^1.0.0" }, "bin": { @@ -13488,16 +12855,6 @@ "node": ">= 0.8.0" } }, - "node_modules/utif": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", - "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", - "dev": true, - "peer": true, - "dependencies": { - "pako": "^1.0.5" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -13553,10 +12910,20 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/validator": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", - "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", "dev": true, "engines": { "node": ">= 0.10" @@ -13614,9 +12981,9 @@ "link": true }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -13627,9 +12994,9 @@ } }, "node_modules/web-streams-polyfill": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", - "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", "dev": true, "peer": true, "engines": { @@ -13637,19 +13004,19 @@ } }, "node_modules/webdriver": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.31.0.tgz", - "integrity": "sha512-xDRch3TyjhblofZv6hV+fUJGKJFEg4a3QYB+MocZcwWrXTWDxOuZn9E2xohmABq/3yr1cvSOnhUonvMSTQmnmg==", + "version": "8.36.1", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.36.1.tgz", + "integrity": "sha512-547RivYCHStVqtiGQBBcABAkzJbPnAWsxpXGzmj5KL+TOM2JF41N2iQRtUxXqr0jme1Nzzye7WS7Y7iSnK6i1g==", "dev": true, "peer": true, "dependencies": { "@types/node": "^20.1.0", "@types/ws": "^8.5.3", - "@wdio/config": "8.31.0", + "@wdio/config": "8.36.1", "@wdio/logger": "8.28.0", - "@wdio/protocols": "8.29.7", - "@wdio/types": "8.31.0", - "@wdio/utils": "8.31.0", + "@wdio/protocols": "8.32.0", + "@wdio/types": "8.36.1", + "@wdio/utils": "8.36.1", "deepmerge-ts": "^5.1.0", "got": "^12.6.1", "ky": "^0.33.0", @@ -13659,10 +13026,20 @@ "node": "^16.13 || >=18" } }, + "node_modules/webdriver/node_modules/@types/node": { + "version": "20.12.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", + "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", + "dev": true, + "peer": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/webdriver/node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", "dev": true, "peer": true, "engines": { @@ -13682,26 +13059,26 @@ } }, "node_modules/webpack": { - "version": "5.90.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.1.tgz", - "integrity": "sha512-SstPdlAC5IvgFnhiRok8hqJo/+ArAbNv7rhU4fnWGHNVfN59HSQFaxZDSAL3IFG2YmqxuRs+IU33milSxbPlog==", + "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.16.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", @@ -13709,7 +13086,7 @@ "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.0", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -13885,33 +13262,43 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "peer": true + }, "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "peer": true, "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", - "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.6", - "call-bind": "^1.0.5", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.1" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -13926,6 +13313,46 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/worker-timers": { + "version": "7.1.8", + "resolved": "https://registry.npmjs.org/worker-timers/-/worker-timers-7.1.8.tgz", + "integrity": "sha512-R54psRKYVLuzff7c1OTFcq/4Hue5Vlz4bFtNEIarpSiCYhpifHU3aIQI29S84o1j87ePCYqbmEJPqwBTf+3sfw==", + "dependencies": { + "@babel/runtime": "^7.24.5", + "tslib": "^2.6.2", + "worker-timers-broker": "^6.1.8", + "worker-timers-worker": "^7.0.71" + } + }, + "node_modules/worker-timers-broker": { + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/worker-timers-broker/-/worker-timers-broker-6.1.8.tgz", + "integrity": "sha512-FUCJu9jlK3A8WqLTKXM9E6kAmI/dR1vAJ8dHYLMisLNB/n3GuaFIjJ7pn16ZcD1zCOf7P6H62lWIEBi+yz/zQQ==", + "dependencies": { + "@babel/runtime": "^7.24.5", + "fast-unique-numbers": "^8.0.13", + "tslib": "^2.6.2", + "worker-timers-worker": "^7.0.71" + } + }, + "node_modules/worker-timers-worker": { + "version": "7.0.71", + "resolved": "https://registry.npmjs.org/worker-timers-worker/-/worker-timers-worker-7.0.71.tgz", + "integrity": "sha512-ks/5YKwZsto1c2vmljroppOKCivB/ma97g9y77MAAz2TBBjPPgpoOiS1qYQKIgvGTr2QYPT3XhJWIB6Rj2MVPQ==", + "dependencies": { + "@babel/runtime": "^7.24.5", + "tslib": "^2.6.2" + } + }, "node_modules/workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", @@ -14058,7 +13485,6 @@ "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, "engines": { "node": ">=8.3.0" }, @@ -14075,26 +13501,6 @@ } } }, - "node_modules/xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "dev": true, - "peer": true, - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/xml-parse-from-string": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", - "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==", - "dev": true, - "peer": true - }, "node_modules/xml2js": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", @@ -14135,10 +13541,11 @@ } }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "peer": true }, "node_modules/yargs": { "version": "17.7.2", diff --git a/package.json b/package.json index b61e3bbf..9ec0aac2 100644 --- a/package.json +++ b/package.json @@ -1,60 +1,59 @@ { - "name": "openfin-container-starter", - "version": "36.80.10", - "description": "OpenFin Container Starter", - "scripts": { - "build": "npm run build --workspaces", - "package-how-tos": "node ./scripts/package.js --legacy", - "package": "node ./scripts/package.js", - "package-for-github": "node ./scripts/package.js --location github", - "package-for-aws": "node ./scripts/package.js --location aws", - "prettier": "prettier --config .prettierrc --write .", - "eslint": "node --max-old-space-size=5120 ./node_modules/eslint/bin/eslint . --ext .js,.mjs,.ts", - "start": "echo You must be in a folder for a specific how-to to use npm run start e.g. ./how-to/create-window", - "markdownlint": "markdownlint **/*.md --ignore **/node_modules/**", - "validate": "npm run prettier & npm run eslint & npm run markdownlint", - "list-update-packages": "npx --yes npm-check-updates --deep > updatable-packages.txt", - "update-packages": "npx --yes npm-check-updates --upgrade --deep -x @openfin/core,openfin-adapter,eslint-plugin-import", - "remove-packages": "npx --yes rimraf --glob **/node_modules && npx rimraf ./package-lock.json", - "common-update": "node ./scripts/common-update.mjs" - }, - "workspaces": [ - "how-to/**" - ], - "packageExclude": [], - "packageCustomFolder": "", - "contributors": [ - "adam.saland@openfin.co", - "connor.mccafferty@openfin.co", - "john.mandia@openfin.co", - "martyn.janes@openfin.co", - "pj.singh@openfin.co" - ], - "license": "SEE LICENSE IN LICENSE.MD", - "devDependencies": { - "eslint": "8.53.0", - "eslint-config-airbnb": "19.0.4", - "eslint-config-airbnb-typescript": "17.1.0", - "eslint-config-prettier": "9.0.0", - "eslint-plugin-import": "2.26.0", - "eslint-plugin-jsdoc": "46.9.0", - "eslint-plugin-prettier": "5.0.1", - "eslint-plugin-promise": "6.1.1", - "eslint-plugin-simple-import-sort": "10.0.0", - "eslint-plugin-unicorn": "49.0.0", - "eslint-plugin-unused-imports": "3.0.0", - "fast-glob": "3.3.2", - "fs-extra": "11.1.1", - "markdownlint-cli": "0.37.0", - "prettier": "3.1.0", - "replace-in-file": "7.0.2", - "yargs": "17.7.2", - "@openfin/core": "36.80.10", - "@openfin/node-adapter": "36.80.10" - }, - "overrides": { - "parse-bmfont-xml": { - "xml2js": "0.5.0" - } - } -} \ No newline at end of file + "name": "openfin-container-starter", + "version": "36.80.11", + "description": "OpenFin Container Starter", + "scripts": { + "build": "npm run build --workspaces", + "package-how-tos": "node ./scripts/package.js --legacy", + "package": "node ./scripts/package.js", + "package-for-github": "node ./scripts/package.js --location github", + "package-for-aws": "node ./scripts/package.js --location aws", + "prettier": "prettier --config .prettierrc --write .", + "eslint": "node --max-old-space-size=5120 ./node_modules/eslint/bin/eslint . --ext .js,.mjs,.ts", + "start": "echo You must be in a folder for a specific how-to to use npm run start e.g. ./how-to/create-window", + "markdownlint": "markdownlint **/*.md --ignore **/node_modules/**", + "validate": "npm run prettier & npm run eslint & npm run markdownlint", + "list-update-packages": "npx --yes npm-check-updates --deep > updatable-packages.txt", + "update-packages": "npx --yes npm-check-updates --upgrade --deep -x @openfin/core,openfin-adapter,eslint-plugin-import", + "remove-packages": "npx --yes rimraf --glob **/node_modules && npx rimraf ./package-lock.json", + "common-update": "node ./scripts/common-update.mjs" + }, + "workspaces": [ + "how-to/**" + ], + "packageExclude": [], + "packageCustomFolder": "", + "contributors": [ + "adam.saland@openfin.co", + "connor.mccafferty@openfin.co", + "john.mandia@openfin.co", + "martyn.janes@openfin.co" + ], + "license": "SEE LICENSE IN LICENSE.MD", + "devDependencies": { + "eslint": "8.57.0", + "eslint-config-airbnb": "19.0.4", + "eslint-config-airbnb-typescript": "18.0.0", + "eslint-config-prettier": "9.1.0", + "eslint-plugin-import": "2.26.0", + "eslint-plugin-jsdoc": "48.2.3", + "eslint-plugin-prettier": "5.1.3", + "eslint-plugin-promise": "6.1.1", + "eslint-plugin-simple-import-sort": "12.1.0", + "eslint-plugin-unicorn": "52.0.0", + "eslint-plugin-unused-imports": "3.2.0", + "fast-glob": "3.3.2", + "fs-extra": "11.2.0", + "markdownlint-cli": "0.40.0", + "prettier": "3.2.5", + "replace-in-file": "7.1.0", + "yargs": "17.7.2", + "@openfin/core": "36.80.11", + "@openfin/node-adapter": "36.80.11" + }, + "overrides": { + "parse-bmfont-xml": { + "xml2js": "0.5.0" + } + } +}